From ed7542d3629d1596d7b2689a24a47c0bb6d60f2c Mon Sep 17 00:00:00 2001 From: Travis CI Date: Wed, 23 Aug 2017 15:09:38 +0000 Subject: [PATCH] 1.4.97 [ci skip] --- build/ccxt.browser.js | 4 ++-- build/ccxt.es5.js | 4 ++-- build/ccxt.php | 2 +- ccxt.js | 2 +- ccxt.php | 2 +- ccxt/version.py | 2 +- package.json | 2 +- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/build/ccxt.browser.js b/build/ccxt.browser.js index f03c63548bf3..cc5079ffd38f 100644 --- a/build/ccxt.browser.js +++ b/build/ccxt.browser.js @@ -59,7 +59,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" //----------------------------------------------------------------------------- // this is updated by vss.js when building - var version = '1.4.96'; + var version = '1.4.97'; //----------------------------------------------------------------------------- // platform detection @@ -28910,4 +28910,4 @@ exports.isBuffer = function (obj) { }; },{}]},{},[2]) -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJidWlsZC9jY3h0LmpzIiwiY2N4dC5icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2NyeXB0by1qcy9hZXMuanMiLCJub2RlX21vZHVsZXMvY3J5cHRvLWpzL2NpcGhlci1jb3JlLmpzIiwibm9kZV9tb2R1bGVzL2NyeXB0by1qcy9jb3JlLmpzIiwibm9kZV9tb2R1bGVzL2NyeXB0by1qcy9lbmMtYmFzZTY0LmpzIiwibm9kZV9tb2R1bGVzL2NyeXB0by1qcy9lbmMtdXRmMTYuanMiLCJub2RlX21vZHVsZXMvY3J5cHRvLWpzL2V2cGtkZi5qcyIsIm5vZGVfbW9kdWxlcy9jcnlwdG8tanMvZm9ybWF0LWhleC5qcyIsIm5vZGVfbW9kdWxlcy9jcnlwdG8tanMvaG1hYy5qcyIsIm5vZGVfbW9kdWxlcy9jcnlwdG8tanMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY3J5cHRvLWpzL2xpYi10eXBlZGFycmF5cy5qcyIsIm5vZGVfbW9kdWxlcy9jcnlwdG8tanMvbWQ1LmpzIiwibm9kZV9tb2R1bGVzL2NyeXB0by1qcy9tb2RlLWNmYi5qcyIsIm5vZGVfbW9kdWxlcy9jcnlwdG8tanMvbW9kZS1jdHItZ2xhZG1hbi5qcyIsIm5vZGVfbW9kdWxlcy9jcnlwdG8tanMvbW9kZS1jdHIuanMiLCJub2RlX21vZHVsZXMvY3J5cHRvLWpzL21vZGUtZWNiLmpzIiwibm9kZV9tb2R1bGVzL2NyeXB0by1qcy9tb2RlLW9mYi5qcyIsIm5vZGVfbW9kdWxlcy9jcnlwdG8tanMvcGFkLWFuc2l4OTIzLmpzIiwibm9kZV9tb2R1bGVzL2NyeXB0by1qcy9wYWQtaXNvMTAxMjYuanMiLCJub2RlX21vZHVsZXMvY3J5cHRvLWpzL3BhZC1pc285Nzk3MS5qcyIsIm5vZGVfbW9kdWxlcy9jcnlwdG8tanMvcGFkLW5vcGFkZGluZy5qcyIsIm5vZGVfbW9kdWxlcy9jcnlwdG8tanMvcGFkLXplcm9wYWRkaW5nLmpzIiwibm9kZV9tb2R1bGVzL2NyeXB0by1qcy9wYmtkZjIuanMiLCJub2RlX21vZHVsZXMvY3J5cHRvLWpzL3JhYmJpdC1sZWdhY3kuanMiLCJub2RlX21vZHVsZXMvY3J5cHRvLWpzL3JhYmJpdC5qcyIsIm5vZGVfbW9kdWxlcy9jcnlwdG8tanMvcmM0LmpzIiwibm9kZV9tb2R1bGVzL2NyeXB0by1qcy9yaXBlbWQxNjAuanMiLCJub2RlX21vZHVsZXMvY3J5cHRvLWpzL3NoYTEuanMiLCJub2RlX21vZHVsZXMvY3J5cHRvLWpzL3NoYTIyNC5qcyIsIm5vZGVfbW9kdWxlcy9jcnlwdG8tanMvc2hhMjU2LmpzIiwibm9kZV9tb2R1bGVzL2NyeXB0by1qcy9zaGEzLmpzIiwibm9kZV9tb2R1bGVzL2NyeXB0by1qcy9zaGEzODQuanMiLCJub2RlX21vZHVsZXMvY3J5cHRvLWpzL3NoYTUxMi5qcyIsIm5vZGVfbW9kdWxlcy9jcnlwdG8tanMvdHJpcGxlZGVzLmpzIiwibm9kZV9tb2R1bGVzL2NyeXB0by1qcy94NjQtY29yZS5qcyIsIm5vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvcXMvbGliL2Zvcm1hdHMuanMiLCJub2RlX21vZHVsZXMvcXMvbGliL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3FzL2xpYi9wYXJzZS5qcyIsIm5vZGVfbW9kdWxlcy9xcy9saWIvc3RyaW5naWZ5LmpzIiwibm9kZV9tb2R1bGVzL3FzL2xpYi91dGlscy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUNBQTs7QUFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBMEJBLENBQUMsWUFBWTs7QUFFYjtBQUNBOztBQUVBLFFBQU0sV0FBVyxRQUFTLFdBQVQsQ0FBakI7QUFBQSxRQUNNLEtBQVcsUUFBUyxJQUFULENBRGpCLENBTGEsQ0FNbUI7QUFDNUI7O0FBRUo7QUFDQTs7QUFFQSxRQUFNLFVBQVUsUUFBaEI7O0FBRUE7QUFDQTs7QUFFQSxRQUFNLFNBQWMsT0FBTyxNQUFQLEtBQWtCLFdBQXRDO0FBQUEsUUFDTSxhQUFjLE9BQU8sTUFBUCxLQUFrQixXQUFuQixJQUFvQyxPQUFPLE9BQVAsS0FBbUIsV0FEMUU7O0FBR0E7O0FBcEJhLFFBc0JQLFNBdEJPO0FBQUE7O0FBdUJULDJCQUFhLE9BQWIsRUFBc0I7QUFBQTs7QUFFbEI7QUFGa0IsOEhBQ1gsT0FEVzs7QUFHbEIsa0JBQUssV0FBTCxHQUFtQixTQUFuQjtBQUNBLGtCQUFLLFNBQUwsR0FBbUIsVUFBVSxTQUE3QjtBQUNBLGtCQUFLLE9BQUwsR0FBbUIsT0FBbkI7QUFMa0I7QUFNckI7O0FBN0JRO0FBQUEsTUFzQlcsS0F0Qlg7O0FBQUEsUUFnQ1AsYUFoQ087QUFBQTs7QUFpQ1QsK0JBQWEsT0FBYixFQUFzQjtBQUFBOztBQUFBLHVJQUNYLE9BRFc7O0FBRWxCLG1CQUFLLFdBQUwsR0FBbUIsYUFBbkI7QUFDQSxtQkFBSyxTQUFMLEdBQW1CLGNBQWMsU0FBakM7QUFDQSxtQkFBSyxPQUFMLEdBQW1CLE9BQW5CO0FBSmtCO0FBS3JCOztBQXRDUTtBQUFBLE1BZ0NlLFNBaENmOztBQUFBLFFBeUNQLFlBekNPO0FBQUE7O0FBMENULDhCQUFhLE9BQWIsRUFBc0I7QUFBQTs7QUFBQSxxSUFDWCxPQURXOztBQUVsQixtQkFBSyxXQUFMLEdBQW1CLFlBQW5CO0FBQ0EsbUJBQUssU0FBTCxHQUFtQixhQUFhLFNBQWhDO0FBQ0EsbUJBQUssT0FBTCxHQUFtQixPQUFuQjtBQUprQjtBQUtyQjs7QUEvQ1E7QUFBQSxNQXlDYyxhQXpDZDs7QUFBQSxRQWtEUCxtQkFsRE87QUFBQTs7QUFtRFQscUNBQWEsT0FBYixFQUFzQjtBQUFBOztBQUFBLG1KQUNYLE9BRFc7O0FBRWxCLG1CQUFLLFdBQUwsR0FBbUIsbUJBQW5CO0FBQ0EsbUJBQUssU0FBTCxHQUFtQixvQkFBb0IsU0FBdkM7QUFDQSxtQkFBSyxPQUFMLEdBQW1CLE9BQW5CO0FBSmtCO0FBS3JCOztBQXhEUTtBQUFBLE1Ba0RxQixhQWxEckI7O0FBQUEsUUEyRFAsaUJBM0RPO0FBQUE7O0FBNERULG1DQUFhLE9BQWIsRUFBc0I7QUFBQTs7QUFBQSwrSUFDWCxPQURXOztBQUVsQixtQkFBSyxXQUFMLEdBQW1CLGlCQUFuQjtBQUNBLG1CQUFLLFNBQUwsR0FBbUIsa0JBQWtCLFNBQXJDO0FBQ0EsbUJBQUssT0FBTCxHQUFtQixPQUFuQjtBQUprQjtBQUtyQjs7QUFqRVE7QUFBQSxNQTJEbUIsYUEzRG5COztBQUFBLFFBb0VQLFlBcEVPO0FBQUE7O0FBcUVULDhCQUFhLE9BQWIsRUFBc0I7QUFBQTs7QUFBQSxxSUFDWCxPQURXOztBQUVsQixtQkFBSyxXQUFMLEdBQW1CLFlBQW5CO0FBQ0EsbUJBQUssU0FBTCxHQUFtQixhQUFhLFNBQWhDO0FBQ0EsbUJBQUssT0FBTCxHQUFtQixPQUFuQjtBQUprQjtBQUtyQjs7QUExRVE7QUFBQSxNQW9FYyxTQXBFZDs7QUFBQSxRQTZFUCxjQTdFTztBQUFBOztBQThFVCxnQ0FBYSxPQUFiLEVBQXNCO0FBQUE7O0FBQUEseUlBQ1gsT0FEVzs7QUFFbEIsbUJBQUssV0FBTCxHQUFtQixjQUFuQjtBQUNBLG1CQUFLLFNBQUwsR0FBbUIsZUFBZSxTQUFsQztBQUNBLG1CQUFLLE9BQUwsR0FBbUIsT0FBbkI7QUFKa0I7QUFLckI7O0FBbkZRO0FBQUEsTUE2RWdCLFlBN0VoQjs7QUFBQSxRQXNGUCxjQXRGTztBQUFBOztBQXVGVCxnQ0FBYSxPQUFiLEVBQXNCO0FBQUE7O0FBQUEseUlBQ1gsT0FEVzs7QUFFbEIsbUJBQUssV0FBTCxHQUFtQixjQUFuQjtBQUNBLG1CQUFLLFNBQUwsR0FBbUIsZUFBZSxTQUFsQztBQUNBLG1CQUFLLE9BQUwsR0FBbUIsT0FBbkI7QUFKa0I7QUFLckI7O0FBNUZRO0FBQUEsTUFzRmdCLFlBdEZoQjs7QUFBQSxRQStGUCxvQkEvRk87QUFBQTs7QUFnR1Qsc0NBQWEsT0FBYixFQUFzQjtBQUFBOztBQUFBLHFKQUNYLE9BRFc7O0FBRWxCLG1CQUFLLFdBQUwsR0FBbUIsb0JBQW5CO0FBQ0EsbUJBQUssU0FBTCxHQUFtQixxQkFBcUIsU0FBeEM7QUFDQSxtQkFBSyxPQUFMLEdBQW1CLE9BQW5CO0FBSmtCO0FBS3JCOztBQXJHUTtBQUFBLE1BK0ZzQixZQS9GdEI7O0FBd0diO0FBQ0E7O0FBRUEsUUFBTSxRQUFRLFNBQVIsS0FBUTtBQUFBLGVBQU0sSUFBSSxPQUFKLENBQWE7QUFBQSxtQkFBVyxXQUFZLE9BQVosRUFBcUIsRUFBckIsQ0FBWDtBQUFBLFNBQWIsQ0FBTjtBQUFBLEtBQWQ7O0FBRUEsUUFBTSxVQUFVLFNBQVYsT0FBVTtBQUFBLGVBQVMsV0FBWSxLQUFaLEVBQW1CLFFBQW5CLEVBQVQ7QUFBQSxLQUFoQjs7QUFFQSxRQUFNLFVBQVUsU0FBVixPQUFVLENBQUMsRUFBRCxFQUFLLE9BQUw7QUFBQSxlQUNSLFFBQVEsSUFBUixDQUFjLENBQ1YsT0FEVSxFQUVWLE1BQU8sRUFBUCxFQUFXLElBQVgsQ0FBaUIsWUFBTTtBQUFFLGtCQUFNLElBQUksY0FBSixDQUFvQixtQkFBcEIsQ0FBTjtBQUFnRCxTQUF6RSxDQUZVLENBQWQsQ0FEUTtBQUFBLEtBQWhCOztBQU1BLFFBQU0sYUFBYSxTQUFiLFVBQWE7QUFBQSxlQUFVLE9BQU8sTUFBUCxHQUFpQixPQUFPLE1BQVAsQ0FBZSxDQUFmLEVBQWtCLFdBQWxCLEtBQW1DLE9BQU8sS0FBUCxDQUFjLENBQWQsQ0FBcEQsR0FBd0UsTUFBbEY7QUFBQSxLQUFuQjs7QUFFQSxRQUFNLFVBQVUsU0FBVixPQUFVLFNBQVU7QUFDdEIsWUFBTSxTQUFTLEVBQWY7QUFDQSxlQUFPLElBQVAsQ0FBYSxNQUFiLEVBQXFCLElBQXJCLEdBQTZCLE9BQTdCLENBQXNDO0FBQUEsbUJBQU8sT0FBTyxHQUFQLElBQWMsT0FBTyxHQUFQLENBQXJCO0FBQUEsU0FBdEM7QUFDQSxlQUFPLE1BQVA7QUFDSCxLQUpEOztBQU1BLFFBQU0sU0FBUyxTQUFULE1BQVMsR0FBYTtBQUFBLDBDQUFULElBQVM7QUFBVCxnQkFBUztBQUFBOztBQUN4QixZQUFNLFNBQVMsRUFBZjs7QUFEd0IsbUNBRWYsQ0FGZTtBQUdwQixnQkFBSSxRQUFPLEtBQUssQ0FBTCxDQUFQLE1BQW1CLFFBQXZCLEVBQ0ksT0FBTyxJQUFQLENBQWEsS0FBSyxDQUFMLENBQWIsRUFBc0IsT0FBdEIsQ0FBK0I7QUFBQSx1QkFDMUIsT0FBTyxHQUFQLElBQWMsS0FBSyxDQUFMLEVBQVEsR0FBUixDQURZO0FBQUEsYUFBL0I7QUFKZ0I7O0FBRXhCLGFBQUssSUFBSSxJQUFJLENBQWIsRUFBZ0IsSUFBSSxLQUFLLE1BQXpCLEVBQWlDLEdBQWpDO0FBQUEsa0JBQVMsQ0FBVDtBQUFBLFNBSUEsT0FBTyxNQUFQO0FBQ0gsS0FQRDs7QUFTQSxRQUFNLE9BQU8sU0FBUCxJQUFPLENBQVUsTUFBVixFQUFrQjtBQUMzQixZQUFNLFNBQVMsT0FBUSxNQUFSLENBQWY7QUFDQSxhQUFLLElBQUksSUFBSSxDQUFiLEVBQWdCLElBQUksVUFBVSxNQUE5QixFQUFzQyxHQUF0QztBQUNJLGdCQUFJLE9BQU8sVUFBVSxDQUFWLENBQVAsS0FBd0IsUUFBNUIsRUFDSSxPQUFPLE9BQU8sVUFBVSxDQUFWLENBQVAsQ0FBUCxDQURKLEtBRUssSUFBSSxNQUFNLE9BQU4sQ0FBZSxVQUFVLENBQVYsQ0FBZixDQUFKLEVBQ0QsS0FBSyxJQUFJLElBQUksQ0FBYixFQUFnQixJQUFJLFVBQVUsQ0FBVixFQUFhLE1BQWpDLEVBQXlDLEdBQXpDO0FBQ0ksdUJBQU8sT0FBTyxVQUFVLENBQVYsRUFBYSxDQUFiLENBQVAsQ0FBUDtBQURKO0FBSlIsU0FNQSxPQUFPLE1BQVA7QUFDSCxLQVREOztBQVdBLFFBQU0sVUFBVSxTQUFWLE9BQVUsQ0FBQyxLQUFELEVBQVEsR0FBUixFQUFnQjtBQUM1QixZQUFNLFNBQVMsRUFBZjtBQUNBLGFBQUssSUFBSSxJQUFJLENBQWIsRUFBZ0IsSUFBSSxNQUFNLE1BQTFCLEVBQWtDLEdBQWxDLEVBQXVDO0FBQ25DLGdCQUFJLFVBQVUsTUFBTSxDQUFOLENBQWQ7QUFDQSxnQkFBSSxPQUFPLFFBQVEsR0FBUixDQUFQLElBQXVCLFdBQTNCLEVBQXdDO0FBQ3BDLHVCQUFPLFFBQVEsR0FBUixDQUFQLElBQXVCLE9BQXZCO0FBQ0g7QUFDSjtBQUNELGVBQU8sTUFBUDtBQUNILEtBVEQ7O0FBV0EsUUFBTSxTQUFTLFNBQVQsTUFBUyxDQUFDLEtBQUQsRUFBUSxHQUFSLEVBQW9DO0FBQUEsWUFBdkIsVUFBdUIsdUVBQVYsS0FBVTs7QUFDL0MscUJBQWEsYUFBYSxDQUFDLENBQWQsR0FBa0IsQ0FBL0I7QUFDQSxlQUFPLE1BQU0sSUFBTixDQUFZLFVBQUMsQ0FBRCxFQUFJLENBQUo7QUFBQSxtQkFBWSxFQUFFLEdBQUYsSUFBUyxFQUFFLEdBQUYsQ0FBVixHQUFvQixDQUFDLFVBQXJCLEdBQW9DLEVBQUUsR0FBRixJQUFTLEVBQUUsR0FBRixDQUFWLEdBQW9CLFVBQXBCLEdBQWlDLENBQS9FO0FBQUEsU0FBWixDQUFQO0FBQ0gsS0FIRDs7QUFLQSxRQUFNLFVBQVUsU0FBVixPQUFVLENBQUMsS0FBRCxFQUF3QjtBQUFBLFlBQWhCLE1BQWdCLHVFQUFQLEVBQU87O0FBQ3BDLGFBQUssSUFBSSxJQUFJLENBQVIsRUFBVyxTQUFTLE1BQU0sTUFBL0IsRUFBdUMsSUFBSSxNQUEzQyxFQUFtRCxHQUFuRCxFQUF3RDtBQUNwRCxnQkFBTSxRQUFRLE1BQU0sQ0FBTixDQUFkO0FBQ0EsZ0JBQUksTUFBTSxPQUFOLENBQWUsS0FBZixDQUFKLEVBQTJCO0FBQ3ZCLHdCQUFTLEtBQVQsRUFBZ0IsTUFBaEI7QUFDSCxhQUZELE1BRU87QUFDSCx1QkFBTyxJQUFQLENBQWEsS0FBYjtBQUNIO0FBQ0o7QUFDRCxlQUFPLE1BQVA7QUFDSCxLQVZEOztBQVlBLFFBQU0sU0FBUyxTQUFULE1BQVM7QUFBQSxlQUFTLE1BQU0sTUFBTixDQUFjLFVBQUMsS0FBRCxFQUFRLEtBQVIsRUFBZSxJQUFmO0FBQUEsbUJBQXlCLEtBQUssT0FBTCxDQUFjLEtBQWQsS0FBd0IsS0FBakQ7QUFBQSxTQUFkLENBQVQ7QUFBQSxLQUFmOztBQUVBLFFBQU0sUUFBUSxTQUFSLEtBQVEsQ0FBQyxLQUFELEVBQVEsR0FBUjtBQUFBLGVBQWdCLE1BQ0csTUFESCxDQUNXO0FBQUEsbUJBQVksT0FBTyxRQUFRLEdBQVIsQ0FBUCxJQUF1QixXQUFuQztBQUFBLFNBRFgsRUFFRyxHQUZILENBRVE7QUFBQSxtQkFBVyxRQUFRLEdBQVIsQ0FBWDtBQUFBLFNBRlIsQ0FBaEI7QUFBQSxLQUFkOztBQUlBLFFBQU0sWUFBWSxTQUFaLFNBQVk7QUFBQSxlQUFVLEdBQUcsU0FBSCxDQUFjLE1BQWQsQ0FBVjtBQUFBLEtBQWxCOztBQUVBLFFBQU0sTUFBTSxTQUFOLEdBQU0sR0FBYTtBQUFBLDJDQUFULElBQVM7QUFBVCxnQkFBUztBQUFBOztBQUNyQixZQUFNLFNBQVMsS0FBSyxNQUFMLENBQWE7QUFBQSxtQkFBTyxPQUFPLEdBQVAsSUFBYyxXQUFyQjtBQUFBLFNBQWIsQ0FBZjtBQUNBLGVBQVEsT0FBTyxNQUFQLEdBQWdCLENBQWpCLEdBQ0gsT0FBTyxNQUFQLENBQWUsVUFBQyxHQUFELEVBQU0sS0FBTjtBQUFBLG1CQUFnQixNQUFNLEtBQXRCO0FBQUEsU0FBZixFQUE0QyxDQUE1QyxDQURHLEdBQzhDLFNBRHJEO0FBRUgsS0FKRDs7QUFNQSxRQUFNLFVBQVUsU0FBVixPQUFVO0FBQUEsZUFBSyxDQUFMO0FBQUEsS0FBaEIsQ0EzTGEsQ0EyTFU7O0FBRXZCO0FBQ0E7O0FBRUEsUUFBTSxZQUFjLFVBQVUsT0FBTyxPQUFQLENBQWdCLFlBQWhCLENBQTlCLENBQW9FO0FBQXBFO0FBQUEsUUFDTSxjQUFlLE9BQU8sTUFBUCxLQUFrQixXQUFsQixJQUFpQyxPQUFPLEtBRDdELENBQ29FO0FBRHBFO0FBQUEsUUFFTSxXQUFjLFNBQWQsUUFBYyxDQUFDLEdBQUQsRUFBTSxPQUFOO0FBQUEsWUFBZSxPQUFmLHVFQUF5QixLQUF6QjtBQUFBLGVBQWdEO0FBQzVDLGdCQUFJLE9BQUosQ0FBYSxVQUFDLE9BQUQsRUFBVSxNQUFWLEVBQXFCOztBQUU5QixvQkFBSSxPQUFKLEVBQ0ksUUFBUSxHQUFSLENBQWEsR0FBYixFQUFrQixPQUFsQjs7QUFFSixvQkFBTSxNQUFNLElBQUksY0FBSixFQUFaO0FBQ0Esb0JBQU0sU0FBUyxRQUFRLE1BQVIsSUFBa0IsS0FBakM7O0FBRUEsb0JBQUksSUFBSixDQUFVLE1BQVYsRUFBa0IsR0FBbEIsRUFBdUIsSUFBdkI7QUFDQSxvQkFBSSxrQkFBSixHQUF5QixZQUFNO0FBQzNCLHdCQUFJLElBQUksVUFBSixJQUFrQixDQUF0QixFQUF5QjtBQUNyQiw0QkFBSSxJQUFJLE1BQUosSUFBYyxHQUFsQixFQUNJLFFBQVMsSUFBSSxZQUFiLEVBREosS0FFSztBQUFFO0FBQ0gsa0NBQU0sSUFBSSxLQUFKLENBQVcsTUFBWCxFQUFtQixHQUFuQixFQUF3QixJQUFJLE1BQTVCLEVBQW9DLElBQUksWUFBeEMsQ0FBTjtBQUNIO0FBQ0o7QUFDSixpQkFSRDs7QUFVQSxvQkFBSSxPQUFPLFFBQVEsT0FBZixJQUEwQixXQUE5QixFQUNJLEtBQUssSUFBSSxNQUFULElBQW1CLFFBQVEsT0FBM0I7QUFDSSx3QkFBSSxnQkFBSixDQUFzQixNQUF0QixFQUE4QixRQUFRLE9BQVIsQ0FBZ0IsTUFBaEIsQ0FBOUI7QUFESixpQkFHSixJQUFJLElBQUosQ0FBVSxRQUFRLElBQWxCO0FBQ0gsYUF4QkQ7QUFESjtBQUFBLEtBRnBCOztBQTZCQSxRQUFNLFFBQVEsYUFBYSxXQUFiLElBQTRCLFFBQTFDOztBQUVBO0FBQ0E7O0FBRUEsUUFBTSxpQkFBaUIsU0FBakIsY0FBaUIsTUFBTztBQUMxQixZQUFNLE1BQU0sSUFBSSxVQUFKLENBQWdCLElBQUksTUFBcEIsQ0FBWjtBQUNBLGFBQUssSUFBSSxJQUFJLENBQWIsRUFBZ0IsSUFBSSxJQUFJLE1BQXhCLEVBQWdDLEdBQWhDLEVBQXFDO0FBQUUsZ0JBQUksQ0FBSixJQUFTLElBQUksVUFBSixDQUFlLENBQWYsQ0FBVDtBQUE2QjtBQUNwRSxlQUFPLFNBQVMsR0FBVCxDQUFhLFNBQWIsQ0FBdUIsTUFBdkIsQ0FBK0IsR0FBL0IsQ0FBUDtBQUNILEtBSkQ7O0FBTUEsUUFBTSxpQkFBaUIsU0FBakIsY0FBaUI7QUFBQSxlQUFVLFNBQVMsR0FBVCxDQUFhLE1BQWIsQ0FBb0IsS0FBcEIsQ0FBMkIsTUFBM0IsRUFBbUMsUUFBbkMsQ0FBNkMsU0FBUyxHQUFULENBQWEsTUFBMUQsQ0FBVjtBQUFBLEtBQXZCO0FBQUEsUUFDTSxnQkFBaUIsU0FBakIsYUFBaUI7QUFBQSxlQUFVLFNBQVMsR0FBVCxDQUFhLEtBQWIsQ0FBb0IsS0FBcEIsQ0FBMkIsTUFBM0IsRUFBbUMsUUFBbkMsQ0FBNkMsU0FBUyxHQUFULENBQWEsTUFBMUQsQ0FBVjtBQUFBLEtBRHZCO0FBQUEsUUFFTSxpQkFBaUIsU0FBakIsY0FBaUI7QUFBQSxlQUFVLFNBQVMsR0FBVCxDQUFhLE1BQWIsQ0FBb0IsS0FBcEIsQ0FBMkIsTUFBM0IsQ0FBVjtBQUFBLEtBRnZCO0FBQUEsUUFHTSxpQkFBaUIsU0FBakIsY0FBaUI7QUFBQSxlQUFVLFNBQVMsR0FBVCxDQUFhLE1BQWIsQ0FBb0IsS0FBcEIsQ0FBMkIsTUFBM0IsRUFBbUMsUUFBbkMsQ0FBNkMsU0FBUyxHQUFULENBQWEsSUFBMUQsQ0FBVjtBQUFBLEtBSHZCO0FBQUEsUUFJTSxpQkFBaUIsU0FBakIsY0FBaUI7QUFBQSxlQUFVLE1BQVY7QUFBQSxLQUp2Qjs7QUFNQSxRQUFNLGVBQWUsU0FBZixZQUFlO0FBQUEsMkNBQUksSUFBSjtBQUFJLGdCQUFKO0FBQUE7O0FBQUEsZUFBYSxLQUFLLE1BQUwsQ0FBYSxVQUFDLENBQUQsRUFBSSxDQUFKO0FBQUEsbUJBQVUsRUFBRSxNQUFGLENBQVUsQ0FBVixDQUFWO0FBQUEsU0FBYixDQUFiO0FBQUEsS0FBckI7O0FBRUE7QUFDQSxRQUFNLGtCQUFrQixTQUFsQixlQUFrQjtBQUFBLGVBQWdCLGFBQWEsT0FBYixDQUFzQixPQUF0QixFQUErQixFQUEvQixFQUNhLE9BRGIsQ0FDc0IsS0FEdEIsRUFDNkIsR0FEN0IsRUFFYSxPQUZiLENBRXNCLEtBRnRCLEVBRTZCLEdBRjdCLENBQWhCO0FBQUEsS0FBeEI7O0FBSUE7QUFDQTs7QUFFQSxRQUFNLE9BQU8sY0FBQyxPQUFELEVBQTJDO0FBQUEsWUFBakMsSUFBaUMsdUVBQTFCLEtBQTBCO0FBQUEsWUFBbkIsTUFBbUIsdUVBQVYsS0FBVTs7QUFDcEQsWUFBTSxTQUFTLFNBQVMsS0FBSyxXQUFMLEVBQVQsRUFBK0IsT0FBL0IsQ0FBZjtBQUNBLGVBQVEsVUFBVSxRQUFYLEdBQXVCLE1BQXZCLEdBQWdDLE9BQU8sUUFBUCxDQUFpQixTQUFTLEdBQVQsQ0FBYSxXQUFZLE1BQVosQ0FBYixDQUFqQixDQUF2QztBQUNILEtBSEQ7O0FBS0EsUUFBTSxPQUFPLFNBQVAsSUFBTyxDQUFDLE9BQUQsRUFBVSxNQUFWLEVBQXNEO0FBQUEsWUFBcEMsSUFBb0MsdUVBQTdCLFFBQTZCO0FBQUEsWUFBbkIsTUFBbUIsdUVBQVYsS0FBVTs7QUFDL0QsWUFBTSxXQUFZLFVBQVUsUUFBWCxHQUF1QixRQUF2QixHQUFrQyxXQUFZLE1BQVosQ0FBbkQ7QUFDQSxlQUFPLFNBQVMsU0FBUyxLQUFLLFdBQUwsRUFBbEIsRUFBd0MsT0FBeEMsRUFBaUQsTUFBakQsRUFBeUQsUUFBekQsQ0FBbUUsU0FBUyxHQUFULENBQWEsV0FBWSxRQUFaLENBQWIsQ0FBbkUsQ0FBUDtBQUNILEtBSEQ7O0FBS0E7QUFDQTs7QUFFQSxRQUFNLE1BQU0sU0FBTixHQUFNLENBQUMsT0FBRCxFQUFVLE1BQVYsRUFBcUQ7QUFBQSxZQUFuQyxHQUFtQyx1RUFBN0IsT0FBNkI7QUFBQSxZQUFwQixJQUFvQix1RUFBYixRQUFhOztBQUM3RCxZQUFNLGdCQUFnQixnQkFBaUIsZUFBZ0IsS0FBSyxTQUFMLENBQWdCLEVBQUUsT0FBTyxHQUFULEVBQWMsT0FBTyxLQUFyQixFQUFoQixDQUFoQixDQUFqQixDQUF0QjtBQUFBLFlBQ00sY0FBYyxnQkFBaUIsZUFBZ0IsS0FBSyxTQUFMLENBQWdCLE9BQWhCLENBQWhCLENBQWpCLENBRHBCO0FBQUEsWUFFTSxRQUFRLENBQUUsYUFBRixFQUFpQixXQUFqQixFQUErQixJQUEvQixDQUFxQyxHQUFyQyxDQUZkO0FBQUEsWUFHTSxZQUFZLGdCQUFpQixjQUFlLEtBQU0sS0FBTixFQUFhLE1BQWIsRUFBcUIsSUFBckIsRUFBMkIsT0FBM0IsQ0FBZixDQUFqQixDQUhsQjtBQUlBLGVBQU8sQ0FBRSxLQUFGLEVBQVMsU0FBVCxFQUFxQixJQUFyQixDQUEyQixHQUEzQixDQUFQO0FBQ0gsS0FORDs7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsUUFBTSxXQUFXLFNBQVgsUUFBVyxDQUFVLE1BQVYsRUFBa0I7QUFBQTs7QUFFL0IsYUFBSyxJQUFMLEdBQVksSUFBWjtBQUNBLGFBQUssSUFBTCxHQUFZLElBQVo7QUFDQSxhQUFLLEdBQUwsR0FBVyxHQUFYLENBSitCLENBSWhCO0FBQ2YsYUFBSyxZQUFMLEdBQW9CLFlBQXBCO0FBQ0EsYUFBSyxjQUFMLEdBQXNCLGNBQXRCO0FBQ0EsYUFBSyxjQUFMLEdBQXNCLGNBQXRCO0FBQ0EsYUFBSyxjQUFMLEdBQXNCLGNBQXRCO0FBQ0EsYUFBSyxjQUFMLEdBQXNCLGNBQXRCO0FBQ0EsYUFBSyxjQUFMLEdBQXNCLGNBQXRCO0FBQ0EsYUFBSyxhQUFMLEdBQXFCLGFBQXJCO0FBQ0EsYUFBSyxTQUFMLEdBQWlCLFNBQWpCO0FBQ0EsYUFBSyxrQkFBTCxHQUEwQixrQkFBMUI7QUFDQSxhQUFLLElBQUwsR0FBWSxJQUFaO0FBQ0EsYUFBSyxLQUFMLEdBQWEsS0FBYjtBQUNBLGFBQUssTUFBTCxHQUFjLE1BQWQ7QUFDQSxhQUFLLE1BQUwsR0FBYyxNQUFkO0FBQ0EsYUFBSyxPQUFMLEdBQWUsT0FBZjtBQUNBLGFBQUssT0FBTCxHQUFlLE9BQWY7QUFDQSxhQUFLLE1BQUwsR0FBYyxNQUFkO0FBQ0EsYUFBSyxPQUFMLEdBQWUsT0FBZjtBQUNBLGFBQUssT0FBTCxHQUFlLE9BQWY7QUFDQSxhQUFLLFVBQUwsR0FBa0IsVUFBbEI7QUFDQSxhQUFLLElBQUwsR0FBWSxLQUFLLFNBQWpCO0FBQ0EsYUFBSyxHQUFMLEdBQVcsR0FBWDtBQUNBLGFBQUssT0FBTCxHQUFlLE9BQWY7O0FBRUEsYUFBSyxNQUFMLEdBQWM7QUFBQSxtQkFBVSxNQUFWO0FBQUEsU0FBZDtBQUNBLGFBQUssTUFBTCxHQUFjO0FBQUEsbUJBQVUsTUFBVjtBQUFBLFNBQWQ7O0FBRUEsWUFBSSxNQUFKLEVBQ0ksS0FBSyxXQUFMLEdBQW1CLFFBQVEsT0FBUixDQUFnQixLQUFoQixDQUF1QixjQUF2QixFQUF3QyxDQUF4QyxDQUFuQjs7QUFFSixhQUFLLElBQUwsR0FBWSxZQUFZO0FBQ3BCLGlCQUFLLE1BQUwsR0FBYyxFQUFkO0FBQ0EsaUJBQUssTUFBTCxHQUFjLEVBQWQ7QUFDQSxnQkFBSSxLQUFLLEdBQVQsRUFDSSxLQUFLLGFBQUwsQ0FBb0IsS0FBSyxHQUF6QixFQUE4QixTQUE5QjtBQUNKLGdCQUFJLEtBQUssT0FBVCxFQUNJLEtBQUssVUFBTCxDQUFpQixLQUFLLE9BQXRCO0FBQ1AsU0FQRDs7QUFTQSxhQUFLLGFBQUwsR0FBcUIsVUFBVSxHQUFWLEVBQWUsVUFBZixFQUF5QztBQUFBOztBQUFBLGdCQUFkLE9BQWMsdUVBQUosRUFBSTs7QUFDMUQsbUJBQU8sSUFBUCxDQUFhLEdBQWIsRUFBa0IsT0FBbEIsQ0FBMkIsZ0JBQVE7QUFDL0IsdUJBQU8sSUFBUCxDQUFhLElBQUksSUFBSixDQUFiLEVBQXdCLE9BQXhCLENBQWlDLHNCQUFjO0FBQzNDLHdCQUFJLE9BQU8sSUFBSSxJQUFKLEVBQVUsVUFBVixDQUFYOztBQUQyQyxpREFFbEMsQ0FGa0M7QUFHdkMsNEJBQUksTUFBTSxLQUFLLENBQUwsRUFBUSxJQUFSLEVBQVY7QUFDQSw0QkFBSSxZQUFZLElBQUksS0FBSixDQUFXLGNBQVgsQ0FBaEI7O0FBRUEsNEJBQUksa0JBQW1CLFdBQVcsV0FBWCxFQUF2QjtBQUNBLDRCQUFJLGtCQUFtQixXQUFXLFdBQVgsRUFBdkI7QUFDQSw0QkFBSSxrQkFBbUIsV0FBWSxlQUFaLENBQXZCO0FBQ0EsNEJBQUksa0JBQW1CLFVBQVUsR0FBVixDQUFlLFVBQWYsRUFBMkIsSUFBM0IsQ0FBaUMsRUFBakMsQ0FBdkI7QUFDQSw0QkFBSSxtQkFBbUIsVUFBVSxHQUFWLENBQWU7QUFBQSxtQ0FBSyxFQUFFLElBQUYsR0FBVSxXQUFWLEVBQUw7QUFBQSx5QkFBZixFQUE4QyxNQUE5QyxDQUFzRDtBQUFBLG1DQUFLLEVBQUUsTUFBRixHQUFXLENBQWhCO0FBQUEseUJBQXRELEVBQXlFLElBQXpFLENBQStFLEdBQS9FLENBQXZCOztBQUVBLDRCQUFJLGdCQUFnQixPQUFoQixDQUF5QixlQUF6QixNQUE4QyxDQUFsRCxFQUNJLGtCQUFrQixnQkFBZ0IsS0FBaEIsQ0FBdUIsZ0JBQWdCLE1BQXZDLENBQWxCOztBQUVKLDRCQUFJLGlCQUFpQixPQUFqQixDQUEwQixlQUExQixNQUErQyxDQUFuRCxFQUNJLG1CQUFtQixpQkFBaUIsS0FBakIsQ0FBd0IsZ0JBQWdCLE1BQXhDLENBQW5COztBQUVKLDRCQUFJLFlBQWEsT0FBTyxlQUFQLEdBQXlCLFdBQVksZUFBWixDQUExQztBQUNBLDRCQUFJLGFBQWEsT0FBTyxHQUFQLEdBQWEsZUFBYixHQUErQixHQUEvQixHQUFxQyxnQkFBdEQ7O0FBRUEsNEJBQUksY0FBYyxPQUFsQixFQUEyQjtBQUN2QixnQ0FBSSxlQUFlLFFBQVEsVUFBUixDQUFuQixFQUNJLGFBQWEsUUFBUSxVQUFSLEVBQW9CLFdBQXBCLENBQWI7QUFDSixnQ0FBSSxnQkFBZ0IsUUFBUSxRQUE1QixFQUNJLGNBQWMsUUFBUSxVQUFSLEVBQW9CLFlBQXBCLENBQWQ7QUFDUDs7QUFFRCw0QkFBSSx1QkFBdUIsT0FBM0IsRUFDSSxjQUFjLFFBQVEsZ0JBQXRCO0FBQ0osNEJBQUksc0JBQXNCLE9BQTFCLEVBQ0ksYUFBYSxRQUFRLGVBQXJCOztBQUVKLDRCQUFJLFVBQVUsU0FBVixPQUFVO0FBQUEsbUNBQVUsUUFBSyxVQUFMLEVBQWtCLEdBQWxCLEVBQXVCLElBQXZCLEVBQTZCLGVBQTdCLEVBQThDLE1BQTlDLENBQVY7QUFBQSx5QkFBZDs7QUFFQSxnQ0FBSyxTQUFMLElBQW1CLE9BQW5CO0FBQ0EsZ0NBQUssVUFBTCxJQUFtQixPQUFuQjtBQXBDdUM7O0FBRTNDLHlCQUFLLElBQUksSUFBSSxDQUFiLEVBQWdCLElBQUksS0FBSyxNQUF6QixFQUFpQyxHQUFqQyxFQUFzQztBQUFBLCtCQUE3QixDQUE2QjtBQW1DckM7QUFDSixpQkF0Q0Q7QUF1Q0gsYUF4Q0Q7QUF5Q0gsU0ExQ0Q7O0FBNENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGFBQUssS0FBTCxHQUFhLFVBQVUsR0FBVixFQUFzRTtBQUFBLGdCQUF2RCxNQUF1RCx1RUFBOUMsS0FBOEM7O0FBQUE7O0FBQUEsZ0JBQXZDLE9BQXVDLHVFQUE3QixTQUE2QjtBQUFBLGdCQUFsQixJQUFrQix1RUFBWCxTQUFXOzs7QUFFL0UsZ0JBQUksVUFBVSxLQUFLLFNBQW5CLEVBQ0ksSUFBSSxPQUFPLEtBQUssU0FBWixJQUF5QixRQUE3QixFQUNJLFVBQVUsT0FBUSxFQUFFLGNBQWMsS0FBSyxTQUFyQixFQUFSLEVBQTBDLE9BQTFDLENBQVYsQ0FESixLQUVLLElBQUssUUFBTyxLQUFLLFNBQVosS0FBeUIsUUFBMUIsSUFBd0MsZ0JBQWdCLEtBQUssU0FBakUsRUFDRCxVQUFVLE9BQVEsS0FBSyxTQUFiLEVBQXdCLE9BQXhCLENBQVY7O0FBRVIsZ0JBQUksS0FBSyxLQUFMLENBQVcsTUFBZixFQUNJLFVBQVUsT0FBUSxFQUFFLFVBQVUsR0FBWixFQUFSLEVBQTJCLE9BQTNCLENBQVY7O0FBRUosZ0JBQUksVUFBVSxFQUFFLFVBQVUsTUFBWixFQUFvQixXQUFXLE9BQS9CLEVBQXdDLFFBQVEsSUFBaEQsRUFBZDs7QUFFQSxrQkFBTSxLQUFLLEtBQUwsR0FBYSxHQUFuQjs7QUFFQSxnQkFBSSxLQUFLLE9BQVQsRUFDSSxRQUFRLEdBQVIsQ0FBYSxLQUFLLEVBQWxCLEVBQXNCLE1BQXRCLEVBQThCLEdBQTlCLEVBQW1DLGNBQW5DLEVBQW1ELE9BQW5EOztBQUVKLG1CQUFPLFFBQVMsS0FBSyxPQUFkLEVBQXVCLE1BQU8sR0FBUCxFQUFZLE9BQVosRUFDekIsS0FEeUIsQ0FDbEIsYUFBSztBQUNULG9CQUFJLE1BQUosRUFBWTtBQUNSLDBCQUFNLElBQUksb0JBQUosQ0FBMEIsQ0FBRSxRQUFLLEVBQVAsRUFBVyxNQUFYLEVBQW1CLEdBQW5CLEVBQXdCLEVBQUUsSUFBMUIsRUFBZ0MsRUFBRSxPQUFsQyxFQUE0QyxJQUE1QyxDQUFrRCxHQUFsRCxDQUExQixDQUFOO0FBQ0g7QUFDRCxzQkFBTSxDQUFOLENBSlMsQ0FJRDtBQUNYLGFBTnlCLEVBT3pCLElBUHlCLENBT25CLG9CQUFZOztBQUVmLG9CQUFJLE9BQU8sUUFBUCxJQUFtQixRQUF2QixFQUNJLE9BQU8sUUFBUDs7QUFFSix1QkFBTyxTQUFTLElBQVQsR0FBaUIsSUFBakIsQ0FBdUIsZ0JBQVE7QUFDbEMsd0JBQUksUUFBSyxPQUFULEVBQ0ksUUFBUSxHQUFSLENBQWEsUUFBSyxFQUFsQixFQUFzQixNQUF0QixFQUE4QixHQUE5QixFQUFtQyxPQUFRLGtCQUFrQixJQUExQixHQUFrQyxFQUFyRTtBQUNKLHdCQUFLLFNBQVMsTUFBVCxJQUFtQixHQUFwQixJQUE2QixTQUFTLE1BQVQsSUFBbUIsR0FBcEQsRUFDSSxPQUFPLElBQVA7QUFDSix3QkFBSSxRQUFRLFNBQVo7QUFDQSx3QkFBSSxVQUFVLElBQWQ7QUFDQSx3QkFBSSxDQUFFLEdBQUYsRUFBUSxPQUFSLENBQWlCLFNBQVMsTUFBMUIsS0FBcUMsQ0FBekMsRUFBNEM7QUFDeEMsZ0NBQVEsY0FBUjtBQUNILHFCQUZELE1BRU8sSUFBSSxDQUFFLEdBQUYsRUFBTyxHQUFQLEVBQVksR0FBWixFQUFpQixHQUFqQixFQUFzQixHQUF0QixFQUEyQixHQUEzQixFQUFnQyxHQUFoQyxFQUFxQyxHQUFyQyxFQUEyQyxPQUEzQyxDQUFvRCxTQUFTLE1BQTdELEtBQXdFLENBQTVFLEVBQStFO0FBQ2xGLGdDQUFRLG9CQUFSO0FBQ0gscUJBRk0sTUFFQSxJQUFJLENBQUUsR0FBRixFQUFPLEdBQVAsRUFBWSxHQUFaLEVBQWlCLEdBQWpCLEVBQXVCLE9BQXZCLENBQWdDLFNBQVMsTUFBekMsS0FBb0QsQ0FBeEQsRUFBMkQ7QUFDOUQsNEJBQUksaUJBQWlCLEtBQUssS0FBTCxDQUFZLHVCQUFaLENBQXJCO0FBQ0EsNEJBQUksY0FBSixFQUFvQjtBQUNoQixvQ0FBUSxjQUFSO0FBQ0gseUJBRkQsTUFFTztBQUNILG9DQUFRLG9CQUFSO0FBQ0Esc0NBQVUsT0FBTyxzQkFBUCxHQUFnQyxDQUN0QyxrQkFEc0MsRUFFdEMsa0JBRnNDLEVBR3RDLDZCQUhzQyxFQUl0QyxnQkFKc0MsRUFLdEMsaUJBTHNDLEVBTXRDLGVBTnNDLEVBT3hDLElBUHdDLENBT2xDLElBUGtDLENBQWhDLEdBT00sR0FQaEI7QUFRSDtBQUNKLHFCQWZNLE1BZUEsSUFBSSxDQUFFLEdBQUYsRUFBTyxHQUFQLEVBQWEsT0FBYixDQUFzQixTQUFTLE1BQS9CLEtBQTBDLENBQTlDLEVBQWlEO0FBQ3BELGdDQUFRLGNBQVI7QUFDSCxxQkFGTSxNQUVBLElBQUksQ0FBRSxHQUFGLEVBQU8sR0FBUCxFQUFZLEdBQVosRUFBa0IsT0FBbEIsQ0FBMkIsU0FBUyxNQUFwQyxLQUErQyxDQUFuRCxFQUFzRDtBQUN6RCxnQ0FBUSxtQkFBUjtBQUNILHFCQUZNLE1BRUE7QUFDSCxnQ0FBUSxLQUFSO0FBQ0g7QUFDRCwwQkFBTSxJQUFJLEtBQUosQ0FBVyxDQUFFLFFBQUssRUFBUCxFQUFXLE1BQVgsRUFBbUIsR0FBbkIsRUFBd0IsU0FBUyxNQUFqQyxFQUF5QyxTQUFTLFVBQWxELEVBQThELE9BQTlELEVBQXdFLElBQXhFLENBQThFLEdBQTlFLENBQVgsQ0FBTjtBQUNILGlCQWxDTSxDQUFQO0FBbUNILGFBL0N5QixFQStDdkIsSUEvQ3VCLENBK0NqQjtBQUFBLHVCQUFZLFFBQUssY0FBTCxDQUFxQixHQUFyQixFQUEwQixNQUExQixFQUFrQyxPQUFsQyxFQUEyQyxRQUEzQyxDQUFaO0FBQUEsYUEvQ2lCLENBQXZCLENBQVA7QUFnREgsU0EvSEQ7O0FBaUlBLGFBQUssY0FBTCxHQUFzQixVQUFVLEdBQVYsRUFBc0U7QUFBQSxnQkFBdkQsTUFBdUQsdUVBQTlDLEtBQThDO0FBQUEsZ0JBQXZDLE9BQXVDLHVFQUE3QixTQUE2QjtBQUFBLGdCQUFsQixJQUFrQix1RUFBWCxTQUFXOzs7QUFFeEYsZ0JBQUk7O0FBRUEsdUJBQU8sS0FBSyxLQUFMLENBQVksSUFBWixDQUFQO0FBRUgsYUFKRCxDQUlFLE9BQU8sQ0FBUCxFQUFVOztBQUVSLG9CQUFJLGNBQWMsS0FBSyxLQUFMLENBQVkseUVBQVosQ0FBbEI7QUFDQSxvQkFBSSxpQkFBaUIsS0FBSyxLQUFMLENBQVksZ0NBQVosQ0FBckI7O0FBRUEsb0JBQUksYUFBYSxXQUFqQixFQUE4Qjs7QUFFMUIsd0JBQUksUUFBUSxvQkFBWjtBQUNBLHdCQUFJLFVBQVUsaURBQWQ7QUFDQSx3QkFBSSxXQUFKLEVBQ0ksVUFBVSx5RUFBVjtBQUNKLHdCQUFJLGNBQUosRUFDSSxRQUFRLGNBQVI7QUFDSiwwQkFBTSxJQUFJLEtBQUosQ0FBVyxDQUFFLEtBQUssRUFBUCxFQUFXLE1BQVgsRUFBbUIsR0FBbkIsRUFBd0IsT0FBeEIsRUFBa0MsSUFBbEMsQ0FBd0MsR0FBeEMsQ0FBWCxDQUFOO0FBQ0g7O0FBRUQsb0JBQUksS0FBSyxPQUFULEVBQ0ksUUFBUSxHQUFSLENBQWEsS0FBSyxFQUFsQixFQUFzQixNQUF0QixFQUE4QixHQUE5QixFQUFtQyxPQUFuQyxFQUE0QyxDQUE1QyxFQUErQyxzQkFBc0IsSUFBdEIsR0FBNkIsR0FBNUU7O0FBRUosc0JBQU0sQ0FBTjtBQUNIO0FBQ0osU0EzQkQ7O0FBNkJBLGFBQUssV0FBTCxHQUNBLEtBQUssVUFBTCxHQUFrQixVQUFVLE9BQVYsRUFBbUI7QUFDakMsZ0JBQUksU0FBUyxjQUFlLE9BQWYsQ0FBYjtBQUNBLGlCQUFLLE9BQUwsR0FBZSxRQUFTLE1BQVQsRUFBaUIsUUFBakIsQ0FBZjtBQUNBLGlCQUFLLFdBQUwsR0FBbUIsUUFBUyxPQUFULEVBQWtCLElBQWxCLENBQW5CO0FBQ0EsaUJBQUssYUFBTCxHQUFxQixLQUFLLFdBQTFCO0FBQ0EsaUJBQUssT0FBTCxHQUFlLE9BQU8sSUFBUCxDQUFhLEtBQUssT0FBbEIsQ0FBZjtBQUNBLGdCQUFJLE9BQU8sS0FBSyxLQUFMLENBQVksT0FBTyxNQUFQLENBQWU7QUFBQSx1QkFBVSxVQUFVLE1BQXBCO0FBQUEsYUFBZixDQUFaLEVBQXdELE1BQXhELENBQVg7QUFDQSxnQkFBSSxRQUFRLEtBQUssS0FBTCxDQUFZLE9BQU8sTUFBUCxDQUFlO0FBQUEsdUJBQVUsV0FBVyxNQUFyQjtBQUFBLGFBQWYsQ0FBWixFQUF5RCxPQUF6RCxDQUFaO0FBQ0EsaUJBQUssVUFBTCxHQUFrQixLQUFLLE1BQUwsQ0FBYSxLQUFLLE1BQUwsQ0FBYSxLQUFiLENBQWIsQ0FBbEI7QUFDQSxtQkFBTyxLQUFLLE9BQVo7QUFDSCxTQVhEOztBQWFBLGFBQUssWUFBTCxHQUNBLEtBQUssV0FBTCxHQUFtQixZQUEwQjtBQUFBOztBQUFBLGdCQUFoQixNQUFnQix1RUFBUCxLQUFPOztBQUN6QyxnQkFBSSxDQUFDLE1BQUQsSUFBVyxLQUFLLE9BQXBCLEVBQTZCO0FBQ3pCLG9CQUFJLENBQUMsS0FBSyxXQUFWLEVBQXVCO0FBQ25CLDJCQUFPLElBQUksT0FBSixDQUFhLFVBQUMsT0FBRCxFQUFVLE1BQVY7QUFBQSwrQkFBcUIsUUFBUyxRQUFLLFVBQUwsQ0FBaUIsUUFBSyxPQUF0QixDQUFULENBQXJCO0FBQUEscUJBQWIsQ0FBUDtBQUNIO0FBQ0QsdUJBQU8sSUFBSSxPQUFKLENBQWEsVUFBQyxPQUFELEVBQVUsTUFBVjtBQUFBLDJCQUFxQixRQUFTLFFBQUssT0FBZCxDQUFyQjtBQUFBLGlCQUFiLENBQVA7QUFDSDtBQUNELG1CQUFPLEtBQUssWUFBTCxHQUFxQixJQUFyQixDQUEyQixtQkFBVztBQUN6Qyx1QkFBTyxRQUFLLFVBQUwsQ0FBaUIsT0FBakIsQ0FBUDtBQUNILGFBRk0sQ0FBUDtBQUdILFNBWEQ7O0FBYUEsYUFBSyxhQUFMLEdBQXFCLFlBQVk7QUFDN0IsbUJBQU8sS0FBSyxZQUFMLEVBQVA7QUFDSCxTQUZEOztBQUlBLGFBQUssWUFBTCxHQUFvQixZQUFZO0FBQzVCLGtCQUFNLElBQUksWUFBSixDQUFrQixLQUFLLEVBQUwsR0FBVSxpR0FBNUIsQ0FBTjtBQUNILFNBRkQ7O0FBSUEsYUFBSyxhQUFMLEdBQXFCLFlBQVk7QUFDN0IsbUJBQU8sS0FBSyxZQUFMLEVBQVA7QUFDSCxTQUZEOztBQUlBLGFBQUssWUFBTCxHQUFvQixZQUFZO0FBQUE7O0FBQzVCLG1CQUFPLElBQUksT0FBSixDQUFhLFVBQUMsT0FBRCxFQUFVLE1BQVY7QUFBQSx1QkFBcUIsUUFBUyxRQUFLLE9BQWQsQ0FBckI7QUFBQSxhQUFiLENBQVA7QUFDSCxTQUZEOztBQUlBLGFBQUssa0JBQUwsR0FBMEIsVUFBVSxRQUFWLEVBQW9CO0FBQzFDLGdCQUFJLENBQUMsS0FBSyw2QkFBVixFQUNJLE9BQU8sUUFBUDtBQUNKLGdCQUFJLFlBQVksS0FBaEIsRUFDSSxPQUFPLEtBQVA7QUFDSixnQkFBSSxZQUFZLEtBQWhCLEVBQ0ksT0FBTyxLQUFQO0FBQ0osZ0JBQUksWUFBWSxLQUFoQixFQUNJLE9BQU8sTUFBUDtBQUNKLG1CQUFPLFFBQVA7QUFDSCxTQVZEOztBQVlBLGFBQUssTUFBTCxHQUFjLFVBQVUsTUFBVixFQUFrQjtBQUM1QixtQkFBVSxPQUFPLE1BQVAsS0FBa0IsUUFBbkIsSUFDSixPQUFPLEtBQUssT0FBWixJQUF1QixXQURuQixJQUVKLE9BQU8sS0FBSyxPQUFMLENBQWEsTUFBYixDQUFQLElBQStCLFdBRjVCLEdBR0EsS0FBSyxPQUFMLENBQWEsTUFBYixDQUhBLEdBSUEsTUFKUjtBQUtILFNBTkQ7O0FBUUEsYUFBSyxTQUFMLEdBQ0EsS0FBSyxRQUFMLEdBQWdCLFVBQVUsTUFBVixFQUFrQjtBQUM5QixtQkFBTyxLQUFLLE1BQUwsQ0FBYSxNQUFiLEVBQXFCLEVBQXJCLElBQTJCLE1BQWxDO0FBQ0gsU0FIRDs7QUFLQSxhQUFLLE1BQUwsR0FBYyxVQUFVLE1BQVYsRUFBa0I7QUFDNUIsbUJBQU8sS0FBSyxNQUFMLENBQWEsTUFBYixFQUFxQixNQUFyQixJQUErQixNQUF0QztBQUNILFNBRkQ7O0FBSUEsYUFBSyxjQUFMLEdBQ0EsS0FBSyxhQUFMLEdBQXFCLFVBQVUsTUFBVixFQUFrQjtBQUNuQyxnQkFBSSxLQUFLLHFCQUFUO0FBQ0EsZ0JBQUksVUFBVSxFQUFkO0FBQ0EsZ0JBQUksY0FBSjtBQUNBLG1CQUFPLFFBQVEsR0FBRyxJQUFILENBQVMsTUFBVCxDQUFmO0FBQ0ksd0JBQVEsSUFBUixDQUFjLE1BQU0sQ0FBTixDQUFkO0FBREosYUFFQSxPQUFPLE9BQVA7QUFDSCxTQVJEOztBQVVBLGFBQUssY0FBTCxHQUNBLEtBQUssYUFBTCxHQUFxQixVQUFVLE1BQVYsRUFBa0IsTUFBbEIsRUFBMEI7QUFDM0MsaUJBQUssSUFBSSxRQUFULElBQXFCLE1BQXJCO0FBQ0kseUJBQVMsT0FBTyxPQUFQLENBQWdCLE1BQU0sUUFBTixHQUFpQixHQUFqQyxFQUFzQyxPQUFPLFFBQVAsQ0FBdEMsQ0FBVDtBQURKLGFBRUEsT0FBTyxNQUFQO0FBQ0gsU0FMRDs7QUFPQSxhQUFLLEdBQUwsR0FBVyxVQUFVLElBQVYsRUFBNkI7QUFBQSxnQkFBYixNQUFhLHVFQUFKLEVBQUk7O0FBQ3BDLGdCQUFJLFNBQVMsS0FBSyxhQUFMLENBQW9CLElBQXBCLEVBQTBCLE1BQTFCLENBQWI7QUFDQSxnQkFBSSxRQUFRLEtBQUssSUFBTCxDQUFXLE1BQVgsRUFBbUIsS0FBSyxhQUFMLENBQW9CLElBQXBCLENBQW5CLENBQVo7QUFDQSxnQkFBSSxPQUFPLElBQVAsQ0FBYSxLQUFiLEVBQW9CLE1BQXhCLEVBQ0ksVUFBVSxNQUFNLEtBQUssU0FBTCxDQUFnQixLQUFoQixDQUFoQjtBQUNKLG1CQUFPLE1BQVA7QUFDSCxTQU5EOztBQVFBLGFBQUssWUFBTCxHQUNBLEtBQUssV0FBTCxHQUFtQixVQUFVLE1BQVYsRUFBc0M7QUFBQSxnQkFBcEIsTUFBb0IsdUVBQVgsU0FBVzs7QUFDckQsZ0JBQUksU0FBUyxFQUFiO0FBQ0EsaUJBQUssSUFBSSxJQUFJLENBQWIsRUFBZ0IsSUFBSSxPQUFPLE1BQTNCLEVBQW1DLEdBQW5DLEVBQXdDO0FBQ3BDLHVCQUFPLElBQVAsQ0FBYSxLQUFLLFVBQUwsQ0FBaUIsT0FBTyxDQUFQLENBQWpCLEVBQTRCLE1BQTVCLENBQWI7QUFDSDtBQUNELG1CQUFPLE1BQVA7QUFDSCxTQVBEOztBQVNBLGFBQUssWUFBTCxHQUNBLEtBQUssV0FBTCxHQUFtQixVQUFVLEtBQVYsRUFBcUM7QUFBQSxnQkFBcEIsTUFBb0IsdUVBQVgsU0FBVzs7QUFDcEQsZ0JBQUksU0FBUyxFQUFiO0FBQ0EsaUJBQUssSUFBSSxJQUFJLENBQWIsRUFBZ0IsSUFBSSxNQUFNLE1BQTFCLEVBQWtDLEdBQWxDLEVBQXVDO0FBQ25DLHVCQUFPLElBQVAsQ0FBYSxLQUFLLFVBQUwsQ0FBaUIsTUFBTSxDQUFOLENBQWpCLEVBQTJCLE1BQTNCLENBQWI7QUFDSDtBQUNELG1CQUFPLE1BQVA7QUFDSCxTQVBEOztBQVNBLGFBQUssV0FBTCxHQUNBLEtBQUssVUFBTCxHQUFrQixVQUFVLEtBQVYsRUFBMkY7QUFBQSxnQkFBMUUsTUFBMEUsdUVBQWpFLFNBQWlFO0FBQUEsZ0JBQXRELFNBQXNELHVFQUExQyxFQUEwQztBQUFBLGdCQUF0QyxLQUFzQyx1RUFBOUIsU0FBOEI7QUFBQSxnQkFBbkIsS0FBbUIsdUVBQVgsU0FBVzs7QUFDekcsbUJBQU8sS0FBUDtBQUNILFNBSEQ7O0FBS0EsYUFBSyxZQUFMLEdBQ0EsS0FBSyxXQUFMLEdBQW1CLFVBQVUsTUFBVixFQUE0RjtBQUFBLGdCQUExRSxNQUEwRSx1RUFBakUsU0FBaUU7QUFBQSxnQkFBdEQsU0FBc0QsdUVBQTFDLEVBQTBDO0FBQUEsZ0JBQXRDLEtBQXNDLHVFQUE5QixTQUE4QjtBQUFBLGdCQUFuQixLQUFtQix1RUFBWCxTQUFXOztBQUMzRyxnQkFBSSxTQUFTLEVBQWI7QUFDQSxpQkFBSyxJQUFJLElBQUksQ0FBYixFQUFnQixJQUFJLE9BQU8sTUFBM0IsRUFBbUMsR0FBbkMsRUFBd0M7QUFDcEMsdUJBQU8sSUFBUCxDQUFhLEtBQUssVUFBTCxDQUFpQixPQUFPLENBQVAsQ0FBakIsRUFBNEIsTUFBNUIsRUFBb0MsU0FBcEMsRUFBK0MsS0FBL0MsRUFBc0QsS0FBdEQsQ0FBYjtBQUNIO0FBQ0QsbUJBQU8sTUFBUDtBQUNILFNBUEQ7O0FBU0EsYUFBSyxzQkFBTCxHQUNBLEtBQUssbUJBQUwsR0FBMkIsVUFBVSxNQUFWLEVBQWtCLE1BQWxCLEVBQTBCLEtBQTFCLEVBQThDO0FBQUEsZ0JBQWIsTUFBYSx1RUFBSixFQUFJOztBQUNyRSxtQkFBTyxLQUFLLFdBQUwsQ0FBbUIsTUFBbkIsRUFBMkIsT0FBM0IsRUFBb0MsS0FBcEMsRUFBMkMsTUFBM0MsRUFBbUQsS0FBbkQsRUFBMEQsTUFBMUQsQ0FBUDtBQUNILFNBSEQ7O0FBS0EsYUFBSyx1QkFBTCxHQUNBLEtBQUssb0JBQUwsR0FBNEIsVUFBVSxNQUFWLEVBQWtCLE1BQWxCLEVBQTBCLEtBQTFCLEVBQThDO0FBQUEsZ0JBQWIsTUFBYSx1RUFBSixFQUFJOztBQUN0RSxtQkFBTyxLQUFLLFdBQUwsQ0FBa0IsTUFBbEIsRUFBMEIsT0FBMUIsRUFBbUMsTUFBbkMsRUFBMkMsTUFBM0MsRUFBbUQsS0FBbkQsRUFBMEQsTUFBMUQsQ0FBUDtBQUNILFNBSEQ7O0FBS0EsYUFBSyx1QkFBTCxHQUNBLEtBQUssb0JBQUwsR0FBNEIsVUFBVSxNQUFWLEVBQWtCLE1BQWxCLEVBQXVDO0FBQUEsZ0JBQWIsTUFBYSx1RUFBSixFQUFJOztBQUMvRCxtQkFBTyxLQUFLLFdBQUwsQ0FBa0IsTUFBbEIsRUFBMEIsUUFBMUIsRUFBb0MsS0FBcEMsRUFBMkMsTUFBM0MsRUFBbUQsU0FBbkQsRUFBOEQsTUFBOUQsQ0FBUDtBQUNILFNBSEQ7O0FBS0EsYUFBSyx3QkFBTCxHQUNBLEtBQUsscUJBQUwsR0FBNkIsVUFBVSxNQUFWLEVBQWtCLE1BQWxCLEVBQXVDO0FBQUEsZ0JBQWIsTUFBYSx1RUFBSixFQUFJOztBQUNoRSxtQkFBTyxLQUFLLFdBQUwsQ0FBa0IsTUFBbEIsRUFBMEIsUUFBMUIsRUFBb0MsTUFBcEMsRUFBNEMsTUFBNUMsRUFBb0QsU0FBcEQsRUFBK0QsTUFBL0QsQ0FBUDtBQUNILFNBSEQ7O0FBS0EsYUFBSyxPQUFMLEdBQXNCO0FBQUEsbUJBQWEsSUFBSSxJQUFKLENBQVUsU0FBVixFQUFxQixXQUFyQixFQUFiO0FBQUEsU0FBdEI7QUFDQSxhQUFLLFNBQUwsR0FBc0IsS0FBSyxLQUEzQjtBQUNBLGFBQUssT0FBTCxHQUFzQjtBQUFBLG1CQUFNLEtBQUssS0FBTCxDQUFZLFFBQUssWUFBTCxLQUF1QixJQUFuQyxDQUFOO0FBQUEsU0FBdEI7QUFDQSxhQUFLLFlBQUwsR0FBc0I7QUFBQSxtQkFBTSxLQUFLLEtBQUwsQ0FBWSxRQUFLLFlBQUwsS0FBdUIsSUFBbkMsQ0FBTjtBQUFBLFNBQXRCO0FBQ0EsYUFBSyxZQUFMLEdBQXNCLEtBQUssR0FBM0I7QUFDQSxhQUFLLEtBQUwsR0FBc0IsS0FBSyxPQUEzQjtBQUNBLGFBQUssRUFBTCxHQUFzQixTQUF0QjtBQUNBLGFBQUssU0FBTCxHQUFzQixJQUF0QixDQXBXK0IsQ0FvV0g7QUFDNUIsYUFBSyxPQUFMLEdBQXNCLEtBQXRCLENBclcrQixDQXFXSDtBQUM1QixhQUFLLE9BQUwsR0FBc0IsS0FBdEI7QUFDQSxhQUFLLFNBQUwsR0FBc0IsS0FBdEI7QUFDQSxhQUFLLEtBQUwsR0FBc0IsS0FBdEIsQ0F4VytCLENBd1dIO0FBQzVCLGFBQUssNkJBQUwsR0FBcUMsSUFBckM7QUFDQSxhQUFLLGNBQUwsR0FBc0IscUJBQWE7QUFDL0IsZ0JBQUksT0FBTyxJQUFJLElBQUosQ0FBVSxTQUFWLENBQVg7QUFDQSxnQkFBSSxPQUFPLEtBQUssY0FBTCxFQUFYO0FBQ0EsZ0JBQUksS0FBSyxLQUFLLFdBQUwsRUFBVDtBQUNBLGdCQUFJLEtBQUssS0FBSyxTQUFMLEVBQVQ7QUFDQSxnQkFBSSxLQUFLLEtBQUssV0FBTCxFQUFUO0FBQ0EsZ0JBQUksS0FBSyxLQUFLLGFBQUwsRUFBVDtBQUNBLGdCQUFJLEtBQUssS0FBSyxhQUFMLEVBQVQ7QUFDQSxpQkFBSyxLQUFLLEVBQUwsR0FBVyxNQUFNLEVBQWpCLEdBQXVCLEVBQTVCO0FBQ0EsaUJBQUssS0FBSyxFQUFMLEdBQVcsTUFBTSxFQUFqQixHQUF1QixFQUE1QjtBQUNBLGlCQUFLLEtBQUssRUFBTCxHQUFXLE1BQU0sRUFBakIsR0FBdUIsRUFBNUI7QUFDQSxpQkFBSyxLQUFLLEVBQUwsR0FBVyxNQUFNLEVBQWpCLEdBQXVCLEVBQTVCO0FBQ0EsaUJBQUssS0FBSyxFQUFMLEdBQVcsTUFBTSxFQUFqQixHQUF1QixFQUE1QjtBQUNBLG1CQUFPLE9BQU8sR0FBUCxHQUFhLEVBQWIsR0FBa0IsR0FBbEIsR0FBd0IsRUFBeEIsR0FBNkIsR0FBN0IsR0FBbUMsRUFBbkMsR0FBd0MsR0FBeEMsR0FBOEMsRUFBOUMsR0FBbUQsR0FBbkQsR0FBeUQsRUFBaEU7QUFDSCxTQWREOztBQWdCQSxZQUFJLE1BQUosRUFDSSxLQUFLLFNBQUwsR0FBaUI7QUFDYiwwQkFBYyxVQUFVLE9BQVYsR0FDVixxQ0FEVSxHQUVWLFdBRlUsR0FFSSxLQUFLLFdBRlQsR0FFdUI7O0FBRzdDO0FBTnFCLFNBQWpCLENBT0osS0FBSyxLQUFMLEdBQWEsRUFBYjs7QUFFQSxhQUFLLGVBQUwsR0FBdUIsS0FBdkI7O0FBRUEsYUFBSyxJQUFJLFFBQVQsSUFBcUIsTUFBckI7QUFDSSxpQkFBSyxRQUFMLElBQWlCLE9BQU8sUUFBUCxDQUFqQjtBQURKLFNBR0EsS0FBSyxhQUFMLEdBQXdCLEtBQUssWUFBN0I7QUFDQSxhQUFLLGdCQUFMLEdBQXdCLEtBQUssY0FBN0I7QUFDQSxhQUFLLFlBQUwsR0FBd0IsS0FBSyxXQUE3QjtBQUNBLGFBQUssWUFBTCxHQUF3QixLQUFLLFdBQTdCOztBQUVBLGFBQUssSUFBTDtBQUNILEtBL1lEOztBQWlaQTs7QUFFQSxRQUFJLFdBQVc7O0FBRVgsY0FBTSxVQUZLO0FBR1gsZ0JBQVEsU0FIRztBQUlYLHFCQUFhLElBSkY7QUFLWCxxQkFBYSxJQUxGO0FBTVgsbUJBQVcsSUFOQTtBQU9YLGdCQUFRO0FBQ0osb0JBQVEscUdBREo7QUFFSixtQkFBTyx5QkFGSDtBQUdKLG1CQUFPLHFCQUhIO0FBSUosbUJBQU87QUFKSCxTQVBHO0FBYVgsZUFBTztBQUNILHVCQUFXO0FBQ1AsdUJBQU8sQ0FDSCxhQURHLEVBRUgsbUJBRkcsRUFHSCxnQkFIRyxFQUlILGFBSkcsRUFLSCxlQUxHLEVBTUgsY0FORyxFQU9ILGNBUEcsRUFRSCxjQVJHLEVBU0gsWUFURyxFQVVILGdCQVZHLEVBV0gsdUJBWEcsRUFZSCxlQVpHLEVBYUgsa0JBYkcsRUFjSCxlQWRHLEVBZUgscUJBZkcsRUFnQkgsMkJBaEJHLEVBaUJILHVCQWpCRyxFQWtCSCw4QkFsQkcsRUFtQkgsY0FuQkcsRUFvQkgsZUFwQkcsRUFxQkgsbUJBckJHLEVBc0JILHNCQXRCRztBQURBO0FBRFIsU0FiSTs7QUEwQ0wsdUJBMUNLO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQTJDZ0IsUUFBSywwQkFBTCxFQTNDaEI7QUFBQTtBQTJDSCwwQkEzQ0c7O0FBNENQLHVCQUFPLFdBQVcsVUFBWCxDQUFQO0FBNUNPO0FBQUE7QUErQ0wsb0JBL0NLO0FBQUE7QUFBQSxvQkFtRFMsSUFBSSxXQUFXLE1BbkR4QjtBQUFBO0FBb0RDLGdDQXBERCxHQW9EWSxXQUFXLENBQVgsQ0FwRFo7QUFBQSwrQkFxRGlCLE1BQU0sb0JBQU4sQ0FBNEI7QUFDNUMsd0NBQVksU0FBUyxXQUFUO0FBRGdDLHlCQUE1QixDQXJEakI7QUFBQTtBQXFEQywrQkFyREQ7O0FBd0RILDZCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksUUFBUSxVQUFSLEVBQW9CLE1BQXhDLEVBQWdELEdBQWhELEVBQXFEO0FBQzdDLGtDQUQ2QyxHQUNwQyxRQUFRLFVBQVIsRUFBb0IsQ0FBcEIsQ0FEb0M7QUFFN0MsOEJBRjZDLEdBRXhDLE9BQU8sUUFBUCxDQUZ3QztBQUc3QyxrQ0FINkMsR0FHcEMsU0FIb0M7QUFJN0MsZ0NBSjZDLEdBSXRDLFNBSnNDO0FBSzdDLGlDQUw2QyxHQUtyQyxTQUxxQzs7QUFNakQsZ0NBQUssWUFBWSxPQUFiLElBQTBCLFlBQVksUUFBMUMsRUFBcUQ7QUFDakQseUNBQVMsT0FBTyxNQUFQLENBQVQ7QUFDSSxxQ0FGNkMsR0FFckMsT0FBTyxLQUFQLENBQWMsR0FBZCxDQUZxQzs7QUFHakQsdUNBQU8sTUFBTSxDQUFOLENBQVA7QUFDQSx3Q0FBUSxNQUFNLENBQU4sQ0FBUjtBQUNILDZCQUxELE1BS087QUFDSCx1Q0FBTyxFQUFQO0FBQ0Esd0NBQVEsS0FBUjtBQUNBLHlDQUFTLE9BQU8sR0FBUCxHQUFhLEtBQXRCO0FBQ0g7QUFDRCxtQ0FBTyxNQUFNLGtCQUFOLENBQTBCLElBQTFCLENBQVA7QUFDQSxvQ0FBUSxNQUFNLGtCQUFOLENBQTBCLEtBQTFCLENBQVI7QUFDQSxtQ0FBTyxJQUFQLENBQWE7QUFDVCxzQ0FBTSxFQURHO0FBRVQsMENBQVUsTUFGRDtBQUdULHdDQUFRLElBSEM7QUFJVCx5Q0FBUyxLQUpBO0FBS1Qsd0NBQVE7QUFMQyw2QkFBYjtBQU9IO0FBOUJrQywyQkFuRGhDO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQWdESCxxQkFoREcsWUFnRFc7O0FBaERYLHVCQWlEZ0IsUUFBSyxlQUFMLEVBakRoQjtBQUFBO0FBaURILDBCQWpERztBQWtESCxzQkFsREcsR0FrRE0sRUFsRE47QUFtREUsaUJBbkRGLEdBbURNLENBbkROO0FBQUE7QUFBQTtBQW1GUCx1QkFBTyxNQUFQO0FBbkZPO0FBQUE7QUFzRkwsb0JBdEZLO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBdUZELFFBQUssV0FBTCxFQXZGQztBQUFBO0FBQUEsdUJBd0ZhLFFBQUssc0JBQUwsRUF4RmI7QUFBQTtBQXdGSCx1QkF4Rkc7QUF5Rkgsd0JBekZHLEdBeUZRLFFBQVEsVUFBUixDQXpGUjtBQTBGSCxzQkExRkcsR0EwRk07QUFDVCw0QkFBUTtBQURDLGlCQTFGTjs7QUE2RlAscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxRQUFLLFVBQUwsQ0FBZ0IsTUFBcEMsRUFBNEMsR0FBNUMsRUFBaUQ7QUFDekMsNEJBRHlDLEdBQzlCLFFBQUssVUFBTCxDQUFnQixDQUFoQixDQUQ4Qjs7QUFFN0MsMkJBQU8sUUFBUCxJQUFtQjtBQUNmLGdDQUFRLFNBRE87QUFFZixnQ0FBUSxTQUZPO0FBR2YsaUNBQVM7QUFITSxxQkFBbkI7QUFLSDtBQUNELHVCQUFPLEtBQVAsRUFBYyxNQUFkLElBQXdCLFdBQVksU0FBUyxTQUFULENBQVosQ0FBeEI7QUFDQSx1QkFBTyxLQUFQLEVBQWMsT0FBZCxJQUF5QixPQUFPLEtBQVAsRUFBYyxNQUFkLENBQXpCO0FBQ0EsdUJBQU8sTUFBUDtBQXZHTztBQUFBO0FBMEdMLHNCQTFHSywwQkEwR1csTUExR1g7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQTBHbUIsc0JBMUduQiw2RUEwRzRCLEVBMUc1QjtBQUFBLHVCQTJHRCxRQUFLLFdBQUwsRUEzR0M7QUFBQTtBQUFBLHVCQTRHYyxRQUFLLHNCQUFMLENBQTZCLFFBQUssTUFBTCxDQUFhO0FBQzNELCtCQUFXLFFBQUssUUFBTCxDQUFlLE1BQWY7QUFEZ0QsaUJBQWIsRUFFL0MsTUFGK0MsQ0FBN0IsQ0E1R2Q7QUFBQTtBQTRHSCx3QkE1R0c7QUErR0gseUJBL0dHLEdBK0dTLFNBQVMsVUFBVCxFQUFxQixDQUFyQixDQS9HVDtBQWdISCx5QkFoSEcsR0FnSFMsUUFBSyxTQUFMLENBQWdCLFVBQVUsU0FBVixDQUFoQixDQWhIVDtBQWlISCx3QkFqSEcsR0FpSFEsV0FBWSxVQUFVLEtBQVYsQ0FBWixDQWpIUjtBQWtISCx3QkFsSEcsR0FrSFEsV0FBWSxVQUFVLEtBQVYsQ0FBWixDQWxIUjtBQW1ISCxtQkFuSEcsR0FtSEcsQ0FBRSxRQUFGLEVBQVksU0FBWixDQW5ISDtBQW9ISCxtQkFwSEcsR0FvSEcsQ0FBRSxRQUFGLEVBQVksU0FBWixDQXBISDs7QUFxSFAsdUJBQU87QUFDSCxpQ0FBYSxTQURWO0FBRUgsZ0NBQVksUUFBSyxPQUFMLENBQWMsU0FBZCxDQUZUO0FBR0gsNEJBQVEsQ0FBRSxHQUFGLENBSEw7QUFJSCw0QkFBUSxDQUFFLEdBQUY7QUFKTCxpQkFBUDtBQXJITztBQUFBO0FBNkhMLG1CQTdISyx1QkE2SFEsTUE3SFI7QUFBQTs7QUE4SFAsa0JBQU0sSUFBSSxhQUFKLENBQW1CLFFBQUssRUFBTCxHQUFVLDRDQUE3QixDQUFOO0FBOUhPO0FBaUlMLG1CQWpJSyx1QkFpSVEsTUFqSVI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBa0lELFFBQUssV0FBTCxFQWxJQztBQUFBO0FBQUEsdUJBbUlZLFFBQUssb0JBQUwsQ0FBMkI7QUFDMUMsOEJBQVUsUUFBSyxRQUFMLENBQWUsTUFBZixDQURnQztBQUUxQyxrQ0FBYyxFQUY0QjtBQUcxQyw2QkFBUztBQUhpQyxpQkFBM0IsQ0FuSVo7QUFBQTtBQW1JSCxzQkFuSUc7QUFBQSx1QkF3SWUsUUFBSyxjQUFMLENBQXFCLE1BQXJCLENBeElmO0FBQUE7QUF3SUgseUJBeElHO0FBeUlILHNCQXpJRyxHQXlJTSxPQUFPLFVBQVAsRUFBbUIsQ0FBbkIsQ0F6SU47QUEwSUgseUJBMUlHLEdBMElTLFFBQUssU0FBTCxDQUFnQixPQUFPLE1BQVAsQ0FBaEIsQ0ExSVQ7O0FBMklQLHVCQUFPO0FBQ0gsaUNBQWEsU0FEVjtBQUVILGdDQUFZLFFBQUssT0FBTCxDQUFjLFNBQWQsQ0FGVDtBQUdILDRCQUFRLFdBQVksT0FBTyxHQUFQLENBQVosQ0FITDtBQUlILDJCQUFPLFdBQVksT0FBTyxHQUFQLENBQVosQ0FKSjtBQUtILDJCQUFPLFVBQVUsTUFBVixFQUFrQixDQUFsQixFQUFxQixDQUFyQixDQUxKO0FBTUgsMkJBQU8sVUFBVSxNQUFWLEVBQWtCLENBQWxCLEVBQXFCLENBQXJCLENBTko7QUFPSCw0QkFBUSxTQVBMO0FBUUgsNEJBQVEsV0FBWSxPQUFPLEdBQVAsQ0FBWixDQVJMO0FBU0gsNkJBQVMsV0FBWSxPQUFPLEdBQVAsQ0FBWixDQVROO0FBVUgsNkJBQVMsU0FWTjtBQVdILDRCQUFRLFNBWEw7QUFZSCw4QkFBVSxTQVpQO0FBYUgsa0NBQWMsU0FiWDtBQWNILCtCQUFXLFNBZFI7QUFlSCxrQ0FBYyxTQWZYO0FBZ0JILG1DQUFlO0FBaEJaLGlCQUFQO0FBM0lPO0FBQUE7QUErSkwsbUJBL0pLLHVCQStKUSxNQS9KUixFQStKZ0IsSUEvSmhCLEVBK0pzQixJQS9KdEIsRUErSjRCLE1BL0o1QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQStKb0MscUJBL0pwQyxnRkErSjRDLFNBL0o1QztBQStKdUQsc0JBL0p2RCxnRkErSmdFLEVBL0poRTtBQUFBLHVCQWdLRCxRQUFLLFdBQUwsRUFoS0M7QUFBQTtBQWlLSCxxQkFqS0csR0FpS0s7QUFDUiw4QkFBVSxRQUFLLFFBQUwsQ0FBZSxNQUFmLENBREY7QUFFUiw4QkFBVSxNQUZGO0FBR1IsaUNBQWMsUUFBUSxNQUFULEdBQW1CLE9BQW5CLEdBQTZCLE1BSGxDO0FBSVIsZ0NBQVksQ0FKSjtBQUtSLDRCQUFRO0FBTEEsaUJBaktMOztBQXdLUCxvQkFBSSxRQUFRLE9BQVo7QUFDSSwwQkFBTSxPQUFOLElBQWlCLEtBQWpCO0FBREo7QUFHSSwwQkFBTSxNQUFOLEtBQWlCLFNBQWpCO0FBSEosaUJBeEtPLE9BNEtZLFFBQUsscUJBQUwsQ0FBNEIsUUFBSyxNQUFMLENBQWEsS0FBYixFQUFvQixNQUFwQixDQUE1QixDQTVLWjtBQUFBO0FBNEtILHNCQTVLRzs7QUE2S1AsdUJBQU87QUFDSCw0QkFBUSxNQURMO0FBRUgsMEJBQU0sT0FBTyxVQUFQLEVBQW1CLFVBQW5CO0FBRkgsaUJBQVA7QUE3S087QUFBQTtBQW1MTCxtQkFuTEssdUJBbUxRLEVBbkxSO0FBQUE7O0FBQUE7QUFBQSx1QkFvTEQsUUFBSyxXQUFMLEVBcExDO0FBQUE7QUFxTFAsdUJBQU8sUUFBSyxzQkFBTCxDQUE2QixFQUFFLFlBQVksRUFBZCxFQUE3QixDQUFQO0FBckxPO0FBQUE7QUF3TEwsZUF4TEssbUJBd0xJLElBeExKO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUF3TFUsbUJBeExWLGdGQXdMZ0IsUUF4TGhCO0FBd0wwQixzQkF4TDFCLGdGQXdMbUMsS0F4TG5DO0FBd0wwQyxzQkF4TDFDLGdGQXdMbUQsRUF4TG5EO0FBd0x1RCx1QkF4THZELGdGQXdMaUUsU0F4TGpFO0FBd0w0RSxvQkF4TDVFLGdGQXdMbUYsU0F4TG5GOztBQXlMUCxvQkFBSSxDQUFDLFFBQUssTUFBVjtBQUNJLDBCQUFNLElBQUksbUJBQUosQ0FBeUIsUUFBSyxFQUFMLEdBQVUsbUNBQW5DLENBQU47QUFESixpQkFFSSxHQTNMRyxHQTJMRyxRQUFLLElBQUwsQ0FBVSxLQUFWLElBQW1CLEdBQW5CLEdBQXlCLFFBQUssT0FBOUIsR0FBd0MsR0FBeEMsR0FBOEMsSUFBOUMsR0FBcUQsTUEzTHhEO0FBNExILHFCQTVMRyxHQTRMSyxRQUFLLE1BQUwsQ0FBYSxFQUFFLFNBQVMsUUFBSyxNQUFoQixFQUFiLEVBQXVDLE1BQXZDLENBNUxMOztBQTZMUCx1QkFBTyxNQUFNLFFBQUssU0FBTCxDQUFnQixLQUFoQixDQUFiO0FBN0xPLHVCQThMYyxRQUFLLEtBQUwsQ0FBWSxHQUFaLEVBQWlCLE1BQWpCLENBOUxkO0FBQUE7QUE4TEgsd0JBOUxHOztBQStMUCxvQkFBSSxhQUFhLFFBQWpCO0FBQ0ksd0JBQUksU0FBUyxTQUFULENBQUo7QUFDSSw4QkFBTSxJQUFJLGFBQUosQ0FBbUIsUUFBSyxFQUFMLEdBQVUsWUFBVixHQUF5QixTQUFTLGlCQUFULENBQTVDLENBQU47QUFESjtBQURKLGlCQUdBLElBQUksV0FBVyxRQUFmO0FBQ0ksd0JBQUksU0FBUyxPQUFULENBQUo7QUFDSSw4QkFBTSxJQUFJLGFBQUosQ0FBbUIsUUFBSyxFQUFMLEdBQVUsVUFBVixHQUF1QixTQUFTLFlBQVQsQ0FBdkIsR0FBZ0QsU0FBUyxlQUFULENBQW5FLENBQU47QUFESjtBQURKLGlCQUdBLE9BQU8sUUFBUDtBQXJNTztBQUFBO0FBQUEsS0FBZjs7QUF5TUE7O0FBRUEsUUFBSSxnQkFBZ0I7O0FBRWhCLGNBQU0sZUFGVTtBQUdoQixnQkFBUSxnQkFIUTtBQUloQixtQkFBVyxvQkFKSztBQUtoQixxQkFBYSxJQUxHLEVBS0c7QUFDbkIsZ0JBQVE7QUFDSixvQkFBUSxxR0FESjtBQUVKLG1CQUFPLDBCQUZIO0FBR0osbUJBQU87QUFISCxTQU5RO0FBV2hCLGVBQU87QUFDSCxzQkFBVTtBQUNOLHVCQUFPLENBQ0gsT0FERyxFQUVILG1CQUZHLEVBR0gsWUFIRyxFQUlILGNBSkc7QUFERCxhQURQO0FBU0gsdUJBQVc7QUFDUCx3QkFBUSxDQUNKLG1CQURJLEVBRUosYUFGSSxFQUdKLG1CQUhJLEVBSUoseUJBSkksRUFLSix5QkFMSSxFQU1KLGNBTkksRUFPSixpQkFQSSxFQVFKLFlBUkksRUFTSixhQVRJLEVBVUosZUFWSSxFQVdKLGVBWEksRUFZSixpQkFaSTtBQUREO0FBVFIsU0FYUzs7QUFzQ1Ysb0JBdENVO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkF1Q1MsUUFBSywwQkFBTCxFQXZDVDtBQUFBO0FBdUNSLHdCQXZDUTtBQXdDUix1QkF4Q1EsR0F3Q0UsU0FBUyxtQkFBVCxDQXhDRjtBQXlDUixzQkF6Q1EsR0F5Q0MsRUFBRSxRQUFRLE9BQVYsRUF6Q0Q7O0FBMENaLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksUUFBSyxVQUFMLENBQWdCLE1BQXBDLEVBQTRDLEdBQTVDLEVBQWlEO0FBQ3pDLDRCQUR5QyxHQUM5QixRQUFLLFVBQUwsQ0FBZ0IsQ0FBaEIsQ0FEOEI7QUFFekMsMkJBRnlDLEdBRS9CO0FBQ1YsZ0NBQVEsU0FERTtBQUVWLGdDQUFRLFNBRkU7QUFHVixpQ0FBUztBQUhDLHFCQUYrQjs7QUFPN0Msd0JBQUksWUFBWSxRQUFRLFdBQVIsQ0FBaEI7QUFDSSxnQ0FBUSxNQUFSLElBQWtCLFdBQVksUUFBUSxXQUFSLEVBQXFCLFFBQXJCLENBQVosQ0FBbEI7QUFESixxQkFFQSxJQUFJLFlBQVksUUFBUSxTQUFSLENBQWhCO0FBQ0ksZ0NBQVEsTUFBUixJQUFrQixXQUFZLFFBQVEsU0FBUixFQUFtQixRQUFuQixDQUFaLENBQWxCO0FBREoscUJBRUEsUUFBUSxPQUFSLElBQW1CLFFBQUssR0FBTCxDQUFVLFFBQVEsTUFBUixDQUFWLEVBQTJCLFFBQVEsTUFBUixDQUEzQixDQUFuQjtBQUNBLDJCQUFPLFFBQVAsSUFBbUIsT0FBbkI7QUFDSDtBQUNELHVCQUFPLE1BQVA7QUF4RFk7QUFBQTtBQTJEVixzQkEzRFUsMEJBMkRNLE1BM0ROO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBMkRjLHNCQTNEZCxnRkEyRHVCLEVBM0R2QjtBQUFBLHVCQTREUyxRQUFLLGtCQUFMLENBQXlCLFFBQUssTUFBTCxDQUFhO0FBQ3ZELGdDQUFZLFFBQUssUUFBTCxDQUFlLE1BQWY7QUFEMkMsaUJBQWIsRUFFM0MsTUFGMkMsQ0FBekIsQ0E1RFQ7QUFBQTtBQTREUix3QkE1RFE7QUErRFIseUJBL0RRLEdBK0RJLFNBQVMsWUFBVCxDQS9ESjtBQWdFUix5QkFoRVEsR0FnRUksUUFBSyxZQUFMLEVBaEVKO0FBaUVSLHNCQWpFUSxHQWlFQztBQUNULDRCQUFRLEVBREM7QUFFVCw0QkFBUSxFQUZDO0FBR1QsaUNBQWEsU0FISjtBQUlULGdDQUFZLFFBQUssT0FBTCxDQUFjLFNBQWQ7QUFKSCxpQkFqRUQ7QUF1RVIscUJBdkVRLEdBdUVBLEVBQUUsUUFBUSxLQUFWLEVBQWlCLFFBQVEsS0FBekIsRUF2RUE7QUF3RVIsb0JBeEVRLEdBd0VELE9BQU8sSUFBUCxDQUFhLEtBQWIsQ0F4RUM7O0FBeUVaLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksS0FBSyxNQUF6QixFQUFpQyxHQUFqQyxFQUFzQztBQUM5Qix1QkFEOEIsR0FDeEIsS0FBSyxDQUFMLENBRHdCO0FBRTlCLHdCQUY4QixHQUV2QixNQUFNLEdBQU4sQ0FGdUI7QUFHOUIsMEJBSDhCLEdBR3JCLFVBQVUsSUFBVixDQUhxQjs7QUFJbEMseUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxPQUFPLE1BQTNCLEVBQW1DLEdBQW5DLEVBQXdDO0FBQ2hDLDZCQURnQyxHQUN4QixPQUFPLENBQVAsQ0FEd0I7QUFFaEMsa0NBRmdDLEdBRXBCLFNBQVUsTUFBTSxXQUFOLENBQVYsSUFBZ0MsSUFGWjtBQUdoQyw2QkFIZ0MsR0FHeEIsV0FBWSxNQUFNLE9BQU4sQ0FBWixDQUh3QjtBQUloQyw4QkFKZ0MsR0FJdkIsV0FBWSxNQUFNLGNBQU4sQ0FBWixDQUp1Qjs7QUFLcEMsK0JBQU8sR0FBUCxFQUFZLElBQVosQ0FBa0IsQ0FBRSxLQUFGLEVBQVMsTUFBVCxFQUFpQixVQUFqQixDQUFsQjtBQUNIO0FBQ0o7QUFDRCx1QkFBTyxNQUFQO0FBckZZO0FBQUE7QUF3RlYsbUJBeEZVLHVCQXdGRyxNQXhGSDtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBeUZTLFFBQUssY0FBTCxDQUFxQjtBQUN0QyxnQ0FBWSxRQUFLLFFBQUwsQ0FBZSxNQUFmO0FBRDBCLGlCQUFyQixDQXpGVDtBQUFBO0FBeUZSLHdCQXpGUTtBQTRGUixzQkE1RlEsR0E0RkMsU0FBUyxPQUFULENBNUZEO0FBNkZSLHlCQTdGUSxHQTZGSSxRQUFLLFlBQUwsRUE3Rko7O0FBOEZaLHVCQUFPO0FBQ0gsaUNBQWEsU0FEVjtBQUVILGdDQUFZLFFBQUssT0FBTCxDQUFjLFNBQWQsQ0FGVDtBQUdILDRCQUFRLFdBQVksT0FBTyxLQUFQLENBQVosQ0FITDtBQUlILDJCQUFPLFdBQVksT0FBTyxLQUFQLENBQVosQ0FKSjtBQUtILDJCQUFPLFdBQVksT0FBTyxLQUFQLENBQVosQ0FMSjtBQU1ILDJCQUFPLFdBQVksT0FBTyxLQUFQLENBQVosQ0FOSjtBQU9ILDRCQUFRLFNBUEw7QUFRSCw0QkFBUSxXQUFZLE9BQU8sTUFBUCxDQUFaLENBUkw7QUFTSCw2QkFBUyxTQVROO0FBVUgsNkJBQVMsU0FWTjtBQVdILDRCQUFRLFdBQVksT0FBTyxZQUFQLENBQVosQ0FYTDtBQVlILDhCQUFVLFdBQVksT0FBTyxjQUFQLENBQVosQ0FaUDtBQWFILGtDQUFjLFNBYlg7QUFjSCwrQkFBVyxTQWRSO0FBZUgsa0NBQWMsU0FmWDtBQWdCSCxtQ0FBZSxXQUFZLE9BQU8sa0JBQVAsQ0FBWjtBQWhCWixpQkFBUDtBQTlGWTtBQUFBO0FBa0hWLG1CQWxIVSx1QkFrSEcsTUFsSEg7QUFBQTtBQUFBO0FBQUE7O0FBa0hXLGtCQWxIWCxnRkFrSG9CLEVBbEhwQjs7QUFtSFosbUJBQU8sUUFBSyxxQkFBTCxDQUE0QixRQUFLLE1BQUwsQ0FBYTtBQUM1Qyw0QkFBWSxRQUFLLFFBQUwsQ0FBZSxNQUFmO0FBRGdDLGFBQWIsRUFFaEMsTUFGZ0MsQ0FBNUIsQ0FBUDtBQW5IWTtBQXdIVixtQkF4SFUsdUJBd0hHLE1BeEhILEVBd0hXLElBeEhYLEVBd0hpQixJQXhIakIsRUF3SHVCLE1BeEh2QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQXdIK0IscUJBeEgvQixnRkF3SHVDLFNBeEh2QztBQXdIa0Qsc0JBeEhsRCxnRkF3SDJELEVBeEgzRDtBQXlIUixxQkF6SFEsR0F5SEE7QUFDUiw0QkFBUSxJQURBO0FBRVIsNEJBQVEsSUFGQTtBQUdSLGdDQUFZLFFBQUssUUFBTCxDQUFlLE1BQWYsQ0FISjtBQUlSLDhCQUFVO0FBSkYsaUJBekhBOztBQStIWixvQkFBSSxRQUFRLE9BQVo7QUFDSSwwQkFBTSxhQUFOLElBQXVCLEtBQXZCO0FBREosaUJBL0hZLE9BaUlPLFFBQUssb0JBQUwsQ0FBMkIsUUFBSyxNQUFMLENBQWEsS0FBYixFQUFvQixNQUFwQixDQUEzQixDQWpJUDtBQUFBO0FBaUlSLHNCQWpJUTs7QUFrSVosdUJBQU87QUFDSCw0QkFBUSxNQURMO0FBRUgsMEJBQU07QUFGSCxpQkFBUDtBQWxJWTtBQUFBO0FBd0lWLG1CQXhJVSx1QkF3SUcsRUF4SUg7QUFBQTs7QUF5SVosbUJBQU8sUUFBSyx1QkFBTCxDQUE4QixFQUFFLE1BQU0sRUFBUixFQUE5QixDQUFQO0FBeklZO0FBNElWLGVBNUlVLG1CQTRJRCxJQTVJQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUE0SUssbUJBNUlMLGdGQTRJVyxRQTVJWDtBQTRJcUIsc0JBNUlyQixnRkE0SThCLEtBNUk5QjtBQTRJcUMsc0JBNUlyQyxnRkE0SThDLEVBNUk5QztBQTRJa0QsdUJBNUlsRCxnRkE0STRELFNBNUk1RDtBQTRJdUUsb0JBNUl2RSxnRkE0SThFLFNBNUk5RTs7QUE2SVosb0JBQUksUUFBSyxFQUFMLElBQVcsZUFBZjtBQUNJLDBCQUFNLElBQUksYUFBSixDQUFtQixRQUFLLEVBQUwsR0FBVSxzQ0FBN0IsQ0FBTjtBQURKLGlCQUVJLEdBL0lRLEdBK0lGLFFBQUssSUFBTCxDQUFVLEtBQVYsSUFBbUIsR0FBbkIsR0FBeUIsSUEvSXZCOztBQWdKWixvQkFBSSxPQUFPLFFBQVgsRUFBcUI7QUFDakIsd0JBQUksT0FBTyxJQUFQLENBQWEsTUFBYixFQUFxQixNQUF6QjtBQUNJLCtCQUFPLE1BQU0sUUFBSyxTQUFMLENBQWdCLE1BQWhCLENBQWI7QUFESjtBQUVILGlCQUhELE1BR087QUFDQyx5QkFERCxHQUNTLFFBQUssTUFBTCxDQUFhO0FBQ3JCLG1DQUFXLFFBQUssTUFESztBQUVyQixpQ0FBUyxRQUFLLEtBQUw7QUFGWSxxQkFBYixFQUdULE1BSFMsQ0FEVDtBQUtDLDJCQUxELEdBS1csUUFBSyxJQUFMLENBQVcsS0FBWCxDQUxYOztBQU1ILDBCQUFNLFdBQU4sSUFBcUIsUUFBSyxJQUFMLENBQVcsUUFBSyxNQUFMLENBQWEsT0FBYixDQUFYLEVBQWtDLFFBQUssTUFBTCxDQUFhLFFBQUssTUFBbEIsQ0FBbEMsQ0FBckI7QUFDQSwyQkFBTyxRQUFLLElBQUwsQ0FBVyxLQUFYLENBQVA7QUFDQSw4QkFBVSxFQUFFLGdCQUFnQixrQkFBbEIsRUFBVjtBQUNIO0FBNUpXLHVCQTZKUyxRQUFLLEtBQUwsQ0FBWSxHQUFaLEVBQWlCLE1BQWpCLEVBQXlCLE9BQXpCLEVBQWtDLElBQWxDLENBN0pUO0FBQUE7QUE2SlIsd0JBN0pROztBQThKWixvQkFBSSxZQUFZLFFBQWhCLEVBQTBCO0FBQ2xCLDBCQURrQixHQUNULEVBRFM7O0FBRXRCLHlCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksU0FBUyxRQUFULEVBQW1CLE1BQXZDLEVBQStDLEdBQS9DLEVBQW9EO0FBQzVDLDZCQUQ0QyxHQUNwQyxTQUFTLFFBQVQsRUFBbUIsQ0FBbkIsQ0FEb0M7O0FBRWhELCtCQUFPLElBQVAsQ0FBYSxNQUFNLE1BQU4sSUFBZ0IsSUFBaEIsR0FBdUIsTUFBTSxTQUFOLENBQXBDO0FBQ0g7QUFDRCw2QkFBUyxPQUFPLElBQVAsQ0FBYSxHQUFiLENBQVQ7QUFDQSwwQkFBTSxJQUFJLGFBQUosQ0FBbUIsUUFBSyxFQUFMLEdBQVUsR0FBVixHQUFnQixNQUFuQyxDQUFOO0FBQ0g7QUFDRCx1QkFBTyxRQUFLLEtBQUwsQ0FBWSxHQUFaLEVBQWlCLE1BQWpCLEVBQXlCLE9BQXpCLEVBQWtDLElBQWxDLENBQVA7QUF2S1k7QUFBQTtBQUFBLEtBQXBCOztBQTJLQTs7QUFFQSxRQUFJLFVBQVUsT0FBUSxhQUFSLEVBQXVCOztBQUVqQyxjQUFNLFNBRjJCO0FBR2pDLGdCQUFRLFFBSHlCO0FBSWpDLHFCQUFhLElBSm9CLEVBSWQ7QUFDbkIsbUJBQVcsb0JBTHNCO0FBTWpDLGdCQUFRO0FBQ0osb0JBQVEscUdBREo7QUFFSixtQkFBTyx3QkFGSDtBQUdKLG1CQUFPLG9CQUhIO0FBSUosbUJBQU87QUFKSCxTQU55QjtBQVlqQyxtQkFBVztBQUNQLHVCQUFXLEVBQUUsTUFBTSxLQUFSLEVBQWUsVUFBVSxTQUF6QixFQUFvQyxRQUFRLEtBQTVDLEVBQW1ELFNBQVMsS0FBNUQsRUFESjtBQUVQLHVCQUFXLEVBQUUsTUFBTSxLQUFSLEVBQWUsVUFBVSxTQUF6QixFQUFvQyxRQUFRLEtBQTVDLEVBQW1ELFNBQVMsS0FBNUQsRUFGSjtBQUdQLHVCQUFXLEVBQUUsTUFBTSxLQUFSLEVBQWUsVUFBVSxTQUF6QixFQUFvQyxRQUFRLEtBQTVDLEVBQW1ELFNBQVMsS0FBNUQsRUFISjtBQUlQLHVCQUFXLEVBQUUsTUFBTSxLQUFSLEVBQWUsVUFBVSxTQUF6QixFQUFvQyxRQUFRLEtBQTVDLEVBQW1ELFNBQVMsS0FBNUQsRUFKSjtBQUtQLHVCQUFXLEVBQUUsTUFBTSxLQUFSLEVBQWUsVUFBVSxTQUF6QixFQUFvQyxRQUFRLEtBQTVDLEVBQW1ELFNBQVMsS0FBNUQsRUFMSjtBQU1QLHVCQUFXLEVBQUUsTUFBTSxLQUFSLEVBQWUsVUFBVSxTQUF6QixFQUFvQyxRQUFRLEtBQTVDLEVBQW1ELFNBQVMsS0FBNUQsRUFOSjtBQU9QLHVCQUFXLEVBQUUsTUFBTSxLQUFSLEVBQWUsVUFBVSxTQUF6QixFQUFvQyxRQUFRLEtBQTVDLEVBQW1ELFNBQVMsS0FBNUQsRUFQSjtBQVFQLHVCQUFXLEVBQUUsTUFBTSxLQUFSLEVBQWUsVUFBVSxTQUF6QixFQUFvQyxRQUFRLEtBQTVDLEVBQW1ELFNBQVMsS0FBNUQsRUFSSjtBQVNQLHVCQUFXLEVBQUUsTUFBTSxLQUFSLEVBQWUsVUFBVSxTQUF6QixFQUFvQyxRQUFRLEtBQTVDLEVBQW1ELFNBQVMsS0FBNUQsRUFUSjtBQVVQLHVCQUFXLEVBQUUsTUFBTSxLQUFSLEVBQWUsVUFBVSxTQUF6QixFQUFvQyxRQUFRLEtBQTVDLEVBQW1ELFNBQVMsS0FBNUQsRUFWSjtBQVdQLHVCQUFXLEVBQUUsTUFBTSxLQUFSLEVBQWUsVUFBVSxTQUF6QixFQUFvQyxRQUFRLEtBQTVDLEVBQW1ELFNBQVMsS0FBNUQsRUFYSjtBQVlQLHVCQUFXLEVBQUUsTUFBTSxLQUFSLEVBQWUsVUFBVSxTQUF6QixFQUFvQyxRQUFRLEtBQTVDLEVBQW1ELFNBQVMsS0FBNUQsRUFaSjtBQWFQLHVCQUFXLEVBQUUsTUFBTSxLQUFSLEVBQWUsVUFBVSxTQUF6QixFQUFvQyxRQUFRLEtBQTVDLEVBQW1ELFNBQVMsS0FBNUQsRUFiSjtBQWNQLHVCQUFXLEVBQUUsTUFBTSxLQUFSLEVBQWUsVUFBVSxTQUF6QixFQUFvQyxRQUFRLEtBQTVDLEVBQW1ELFNBQVMsS0FBNUQsRUFkSjtBQWVQLHVCQUFXLEVBQUUsTUFBTSxLQUFSLEVBQWUsVUFBVSxTQUF6QixFQUFvQyxRQUFRLEtBQTVDLEVBQW1ELFNBQVMsS0FBNUQsRUFmSjtBQWdCUCx1QkFBVyxFQUFFLE1BQU0sS0FBUixFQUFlLFVBQVUsU0FBekIsRUFBb0MsUUFBUSxLQUE1QyxFQUFtRCxTQUFTLEtBQTVELEVBaEJKO0FBaUJQLHVCQUFXLEVBQUUsTUFBTSxLQUFSLEVBQWUsVUFBVSxTQUF6QixFQUFvQyxRQUFRLEtBQTVDLEVBQW1ELFNBQVMsS0FBNUQsRUFqQko7QUFrQlAsdUJBQVcsRUFBRSxNQUFNLEtBQVIsRUFBZSxVQUFVLFNBQXpCLEVBQW9DLFFBQVEsS0FBNUMsRUFBbUQsU0FBUyxLQUE1RCxFQWxCSjtBQW1CUCx1QkFBVyxFQUFFLE1BQU0sS0FBUixFQUFlLFVBQVUsU0FBekIsRUFBb0MsUUFBUSxLQUE1QyxFQUFtRCxTQUFTLEtBQTVELEVBbkJKO0FBb0JQLHVCQUFXLEVBQUUsTUFBTSxLQUFSLEVBQWUsVUFBVSxTQUF6QixFQUFvQyxRQUFRLEtBQTVDLEVBQW1ELFNBQVMsS0FBNUQsRUFwQko7QUFxQlAsdUJBQVcsRUFBRSxNQUFNLEtBQVIsRUFBZSxVQUFVLFNBQXpCLEVBQW9DLFFBQVEsS0FBNUMsRUFBbUQsU0FBUyxLQUE1RCxFQXJCSjtBQXNCUCx1QkFBVyxFQUFFLE1BQU0sS0FBUixFQUFlLFVBQVUsU0FBekIsRUFBb0MsUUFBUSxLQUE1QyxFQUFtRCxTQUFTLEtBQTVELEVBdEJKO0FBdUJQLHVCQUFXLEVBQUUsTUFBTSxLQUFSLEVBQWUsVUFBVSxTQUF6QixFQUFvQyxRQUFRLEtBQTVDLEVBQW1ELFNBQVMsS0FBNUQsRUF2Qko7QUF3QlAsdUJBQVcsRUFBRSxNQUFNLEtBQVIsRUFBZSxVQUFVLFNBQXpCLEVBQW9DLFFBQVEsS0FBNUMsRUFBbUQsU0FBUyxLQUE1RCxFQXhCSjtBQXlCUCx1QkFBVyxFQUFFLE1BQU0sS0FBUixFQUFlLFVBQVUsU0FBekIsRUFBb0MsUUFBUSxLQUE1QyxFQUFtRCxTQUFTLEtBQTVELEVBekJKO0FBMEJQLHVCQUFXLEVBQUUsTUFBTSxLQUFSLEVBQWUsVUFBVSxTQUF6QixFQUFvQyxRQUFRLEtBQTVDLEVBQW1ELFNBQVMsS0FBNUQsRUExQko7QUEyQlAsdUJBQVcsRUFBRSxNQUFNLEtBQVIsRUFBZSxVQUFVLFNBQXpCLEVBQW9DLFFBQVEsS0FBNUMsRUFBbUQsU0FBUyxLQUE1RCxFQTNCSjtBQTRCUCx1QkFBVyxFQUFFLE1BQU0sS0FBUixFQUFlLFVBQVUsU0FBekIsRUFBb0MsUUFBUSxLQUE1QyxFQUFtRCxTQUFTLEtBQTVELEVBNUJKO0FBNkJQLHVCQUFXLEVBQUUsTUFBTSxLQUFSLEVBQWUsVUFBVSxTQUF6QixFQUFvQyxRQUFRLEtBQTVDLEVBQW1ELFNBQVMsS0FBNUQ7QUE3Qko7QUFac0IsS0FBdkIsQ0FBZDs7QUE2Q0E7O0FBRUEsUUFBSSxTQUFTOztBQUVULGNBQU0sUUFGRztBQUdULGdCQUFRLFFBSEM7QUFJVCxxQkFBYSxDQUFFLElBQUYsRUFBUSxJQUFSLEVBQWMsSUFBZCxFQUFvQixJQUFwQixDQUpKO0FBS1QsbUJBQVcsR0FMRjtBQU1ULHFCQUFhLElBTko7QUFPVCxnQkFBUTtBQUNKLG9CQUFRLHFHQURKO0FBRUosbUJBQU8sd0JBRkg7QUFHSixtQkFBTyxvQkFISDtBQUlKLG1CQUFPLENBQ0gsNkJBREcsRUFFSCw4QkFGRztBQUpILFNBUEM7QUFnQlQsZUFBTztBQUNILHNCQUFVO0FBQ04sdUJBQU8sQ0FDSCw4QkFERyxFQUVILGtDQUZHLEVBR0gsbUNBSEc7QUFERCxhQURQO0FBUUgsdUJBQVc7QUFDUCx3QkFBUSxDQUNKLGlDQURJLEVBRUosb0NBRkksRUFHSixtQ0FISSxFQUlKLG9DQUpJLEVBS0osOEJBTEksRUFNSiwwQkFOSSxFQU9KLDhCQVBJLEVBUUosWUFSSSxFQVNKLGtCQVRJLEVBVUosc0JBVkk7QUFERDtBQVJSLFNBaEJFO0FBdUNULG1CQUFXO0FBQ1AsdUJBQVcsRUFBRSxNQUFNLFFBQVIsRUFBa0IsVUFBVSxTQUE1QixFQUF1QyxRQUFRLEtBQS9DLEVBQXNELFNBQVMsS0FBL0QsRUFESjtBQUVQLHVCQUFXLEVBQUUsTUFBTSxRQUFSLEVBQWtCLFVBQVUsU0FBNUIsRUFBdUMsUUFBUSxLQUEvQyxFQUFzRCxTQUFTLEtBQS9ELEVBRko7QUFHUCx1QkFBVyxFQUFFLE1BQU0sUUFBUixFQUFrQixVQUFVLFNBQTVCLEVBQXVDLFFBQVEsS0FBL0MsRUFBc0QsU0FBUyxLQUEvRCxFQUhKO0FBSVAsdUJBQVcsRUFBRSxNQUFNLFFBQVIsRUFBa0IsVUFBVSxTQUE1QixFQUF1QyxRQUFRLEtBQS9DLEVBQXNELFNBQVMsS0FBL0QsRUFKSjtBQUtQLHVCQUFXLEVBQUUsTUFBTSxRQUFSLEVBQWtCLFVBQVUsU0FBNUIsRUFBdUMsUUFBUSxLQUEvQyxFQUFzRCxTQUFTLEtBQS9ELEVBTEo7QUFNUCx1QkFBVyxFQUFFLE1BQU0sUUFBUixFQUFrQixVQUFVLFNBQTVCLEVBQXVDLFFBQVEsS0FBL0MsRUFBc0QsU0FBUyxLQUEvRCxFQU5KO0FBT1AsdUJBQVcsRUFBRSxNQUFNLFFBQVIsRUFBa0IsVUFBVSxTQUE1QixFQUF1QyxRQUFRLEtBQS9DLEVBQXNELFNBQVMsS0FBL0QsRUFQSjtBQVFQLHVCQUFXLEVBQUUsTUFBTSxRQUFSLEVBQWtCLFVBQVUsU0FBNUIsRUFBdUMsUUFBUSxLQUEvQyxFQUFzRCxTQUFTLEtBQS9ELEVBUko7QUFTUCx1QkFBVyxFQUFFLE1BQU0sUUFBUixFQUFrQixVQUFVLFNBQTVCLEVBQXVDLFFBQVEsS0FBL0MsRUFBc0QsU0FBUyxLQUEvRCxFQVRKO0FBVVAsdUJBQVcsRUFBRSxNQUFNLFFBQVIsRUFBa0IsVUFBVSxTQUE1QixFQUF1QyxRQUFRLEtBQS9DLEVBQXNELFNBQVMsS0FBL0QsRUFWSjtBQVdQLHdCQUFZLEVBQUUsTUFBTSxTQUFSLEVBQW1CLFVBQVUsVUFBN0IsRUFBeUMsUUFBUSxNQUFqRCxFQUF5RCxTQUFTLEtBQWxFLEVBWEw7QUFZUCx1QkFBVyxFQUFFLE1BQU0sUUFBUixFQUFrQixVQUFVLFNBQTVCLEVBQXVDLFFBQVEsS0FBL0MsRUFBc0QsU0FBUyxLQUEvRCxFQVpKO0FBYVAsdUJBQVcsRUFBRSxNQUFNLFFBQVIsRUFBa0IsVUFBVSxTQUE1QixFQUF1QyxRQUFRLEtBQS9DLEVBQXNELFNBQVMsS0FBL0Q7QUFiSixTQXZDRjs7QUF1REgsb0JBdkRHO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBd0RnQixRQUFLLG9CQUFMLEVBeERoQjtBQUFBO0FBd0RELHdCQXhEQztBQXlERCx1QkF6REMsR0F5RFMsU0FBUyxNQUFULENBekRUO0FBMERELDBCQTFEQyxHQTBEWSxPQUFPLElBQVAsQ0FBYSxRQUFRLFNBQVIsQ0FBYixDQTFEWjtBQTJERCxzQkEzREMsR0EyRFEsRUFBRSxRQUFRLE9BQVYsRUEzRFI7O0FBNERMLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksV0FBVyxNQUEvQixFQUF1QyxHQUF2QyxFQUE0QztBQUNwQyw0QkFEb0MsR0FDekIsV0FBVyxDQUFYLENBRHlCO0FBRXBDLDJCQUZvQyxHQUUxQjtBQUNWLGdDQUFRLFNBREU7QUFFVixnQ0FBUSxTQUZFO0FBR1YsaUNBQVM7QUFIQyxxQkFGMEI7O0FBT3hDLHdCQUFJLFlBQVksUUFBUSxTQUFSLENBQWhCLEVBQW9DO0FBQzVCLDhCQUQ0QixHQUNuQixRQUFRLFNBQVIsRUFBbUIsUUFBbkIsQ0FEbUI7O0FBRWhDLGdDQUFRLE1BQVIsSUFBa0IsV0FBWSxPQUFPLG1CQUFQLEVBQTRCLE9BQTVCLENBQVosQ0FBbEI7QUFDQSxnQ0FBUSxPQUFSLElBQW1CLFdBQVksT0FBTyxTQUFQLEVBQWtCLE9BQWxCLENBQVosQ0FBbkI7QUFDQSxnQ0FBUSxNQUFSLElBQWtCLFFBQVEsT0FBUixJQUFtQixRQUFRLE1BQVIsQ0FBckM7QUFDSDtBQUNELDJCQUFPLFFBQVAsSUFBbUIsT0FBbkI7QUFDSDtBQUNELHVCQUFPLE1BQVA7QUEzRUs7QUFBQTtBQThFSCxzQkE5RUcsMEJBOEVhLE1BOUViO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUE4RXFCLHNCQTlFckIsZ0ZBOEU4QixFQTlFOUI7QUFBQSx1QkErRWdCLFFBQUssbUNBQUwsQ0FBMEMsUUFBSyxNQUFMLENBQWE7QUFDeEUscUNBQWlCLFFBQUssUUFBTCxDQUFlLE1BQWY7QUFEdUQsaUJBQWIsRUFFNUQsTUFGNEQsQ0FBMUMsQ0EvRWhCO0FBQUE7QUErRUQsd0JBL0VDO0FBa0ZELHlCQWxGQyxHQWtGVyxTQUFTLE1BQVQsQ0FsRlg7QUFtRkQsaUJBbkZDLEdBbUZHLFNBQVUsVUFBVSxnQkFBVixDQUFWLENBbkZIO0FBb0ZELHlCQXBGQyxHQW9GVyxTQUFVLElBQUksSUFBZCxDQXBGWDtBQXFGRCxzQkFyRkMsR0FxRlE7QUFDVCw0QkFBUSxFQURDO0FBRVQsNEJBQVEsRUFGQztBQUdULGlDQUFhLFNBSEo7QUFJVCxnQ0FBWSxRQUFLLE9BQUwsQ0FBYyxTQUFkO0FBSkgsaUJBckZSO0FBMkZELHFCQTNGQyxHQTJGTyxDQUFFLE1BQUYsRUFBVSxNQUFWLENBM0ZQOztBQTRGTCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLE1BQU0sTUFBMUIsRUFBa0MsR0FBbEMsRUFBdUM7QUFDL0Isd0JBRCtCLEdBQ3hCLE1BQU0sQ0FBTixDQUR3QjtBQUUvQiwwQkFGK0IsR0FFdEIsVUFBVSxJQUFWLENBRnNCOztBQUduQyx5QkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLE9BQU8sTUFBM0IsRUFBbUMsR0FBbkMsRUFBd0M7QUFDaEMsNkJBRGdDLEdBQ3hCLE9BQU8sQ0FBUCxDQUR3QjtBQUVoQyw2QkFGZ0MsR0FFeEIsV0FBWSxNQUFNLE9BQU4sQ0FBWixDQUZ3QjtBQUdoQyw4QkFIZ0MsR0FHdkIsV0FBWSxNQUFNLFFBQU4sQ0FBWixDQUh1Qjs7QUFJcEMsK0JBQU8sSUFBUCxFQUFhLElBQWIsQ0FBbUIsQ0FBRSxLQUFGLEVBQVMsTUFBVCxDQUFuQjtBQUNIO0FBQ0o7QUFDRCx1QkFBTyxNQUFQO0FBdEdLO0FBQUE7QUF5R0gsbUJBekdHLHVCQXlHVSxNQXpHVjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBMEdnQixRQUFLLGdDQUFMLENBQXVDO0FBQ3hELHFDQUFpQixRQUFLLFFBQUwsQ0FBZSxNQUFmO0FBRHVDLGlCQUF2QyxDQTFHaEI7QUFBQTtBQTBHRCx3QkExR0M7QUE2R0Qsc0JBN0dDLEdBNkdRLFNBQVMsTUFBVCxDQTdHUjtBQThHRCxpQkE5R0MsR0E4R0csU0FBVSxPQUFPLGdCQUFQLENBQVYsQ0E5R0g7QUErR0QseUJBL0dDLEdBK0dXLFNBQVUsSUFBSSxJQUFkLENBL0dYO0FBZ0hELG1CQWhIQyxHQWdISyxTQWhITDtBQWlIRCxtQkFqSEMsR0FpSEssU0FqSEw7O0FBa0hMLG9CQUFJLE9BQU8sS0FBUCxFQUFjLE9BQWQsQ0FBSjtBQUNJLDBCQUFNLFdBQVksT0FBTyxLQUFQLEVBQWMsT0FBZCxDQUFaLENBQU47QUFESixpQkFFQSxJQUFJLE9BQU8sTUFBUCxFQUFlLE9BQWYsQ0FBSjtBQUNJLDBCQUFNLFdBQVksT0FBTyxNQUFQLEVBQWUsT0FBZixDQUFaLENBQU47QUFESixpQkFFQSxPQUFPO0FBQ0gsaUNBQWEsU0FEVjtBQUVILGdDQUFZLFFBQUssT0FBTCxDQUFjLFNBQWQsQ0FGVDtBQUdILDRCQUFRLFdBQVksT0FBTyxNQUFQLEVBQWUsT0FBZixDQUFaLENBSEw7QUFJSCwyQkFBTyxXQUFZLE9BQU8sS0FBUCxFQUFjLE9BQWQsQ0FBWixDQUpKO0FBS0gsMkJBQU8sR0FMSjtBQU1ILDJCQUFPLEdBTko7QUFPSCw0QkFBUSxXQUFZLE9BQU8sTUFBUCxFQUFlLE9BQWYsQ0FBWixDQVBMO0FBUUgsNEJBQVEsU0FSTDtBQVNILDZCQUFTLFNBVE47QUFVSCw2QkFBUyxTQVZOO0FBV0gsNEJBQVEsV0FBWSxPQUFPLE1BQVAsRUFBZSxPQUFmLENBQVosQ0FYTDtBQVlILDhCQUFVLFNBWlA7QUFhSCxrQ0FBYyxTQWJYO0FBY0gsK0JBQVcsV0FBWSxPQUFPLEtBQVAsRUFBYyxPQUFkLENBQVosQ0FkUjtBQWVILGtDQUFjLFNBZlg7QUFnQkgsbUNBQWUsV0FBWSxPQUFPLEtBQVAsRUFBYyxPQUFkLENBQVo7QUFoQlosaUJBQVA7QUF0SEs7QUFBQTtBQTBJSCxtQkExSUcsdUJBMElVLE1BMUlWO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBMElrQixrQkExSWxCLGdGQTBJMkIsRUExSTNCO0FBMklELGlCQTNJQyxHQTJJTyxRQUFLLEVBQUwsR0FBVSw2SUEzSWpCOztBQTRJTCxrQkFBTSxJQUFJLGFBQUosQ0FBbUIsS0FBbkIsQ0FBTjtBQUNBLG1CQUFPLFFBQUssb0NBQUwsQ0FBMkMsUUFBSyxNQUFMLENBQWE7QUFDM0QsaUNBQWlCLFFBQUssUUFBTCxDQUFlLE1BQWY7QUFEMEMsYUFBYixFQUUvQyxNQUYrQyxDQUEzQyxDQUFQO0FBN0lLO0FBa0pILG1CQWxKRyx1QkFrSlUsTUFsSlYsRUFrSmtCLElBbEpsQixFQWtKd0IsSUFsSnhCLEVBa0o4QixNQWxKOUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFrSnNDLHFCQWxKdEMsZ0ZBa0o4QyxTQWxKOUM7QUFrSnlELHNCQWxKekQsZ0ZBa0prRSxFQWxKbEU7QUFtSkQscUJBbkpDLEdBbUpPO0FBQ1IscUNBQWlCLFFBQUssUUFBTCxDQUFlLE1BQWYsQ0FEVDtBQUVSLGtDQUFjLE1BRk47QUFHUiw0QkFBUTtBQUhBLGlCQW5KUDs7QUF3Skwsb0JBQUksUUFBUSxPQUFaO0FBQ0ksMEJBQU0sV0FBTixJQUFxQixLQUFyQjtBQURKLGlCQXhKSyxPQTBKYyxRQUFLLCtCQUFMLENBQXNDLFFBQUssTUFBTCxDQUFhLEtBQWIsRUFBb0IsTUFBcEIsQ0FBdEMsQ0ExSmQ7QUFBQTtBQTBKRCxzQkExSkM7O0FBMkpMLHVCQUFPO0FBQ0gsNEJBQVEsTUFETDtBQUVILDBCQUFNLE9BQU8sTUFBUDtBQUZILGlCQUFQO0FBM0pLO0FBQUE7QUFpS0gsbUJBaktHLHVCQWlLVSxFQWpLVjtBQUFBOztBQWtLTCxtQkFBTyxRQUFLLGtDQUFMLENBQXlDLEVBQUUsT0FBTyxFQUFULEVBQXpDLENBQVA7QUFsS0s7QUFxS1QsYUFyS1MsbUJBcUtBO0FBQ0wsbUJBQU8sS0FBSyxZQUFMLEVBQVA7QUFDSCxTQXZLUTtBQXlLSCxlQXpLRyxtQkF5S00sSUF6S047QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUF5S1ksbUJBektaLGdGQXlLa0IsUUF6S2xCO0FBeUs0QixzQkF6SzVCLGdGQXlLcUMsS0F6S3JDO0FBeUs0QyxzQkF6SzVDLGdGQXlLcUQsRUF6S3JEO0FBeUt5RCx1QkF6S3pELGdGQXlLbUUsU0F6S25FO0FBeUs4RSxvQkF6SzlFLGdGQXlLcUYsU0F6S3JGO0FBMEtELHVCQTFLQyxHQTBLUyxRQUFLLGFBQUwsQ0FBb0IsSUFBcEIsRUFBMEIsTUFBMUIsQ0ExS1Q7QUEyS0QscUJBM0tDLEdBMktPLFFBQUssSUFBTCxDQUFXLE1BQVgsRUFBbUIsUUFBSyxhQUFMLENBQW9CLElBQXBCLENBQW5CLENBM0tQO0FBNEtELG1CQTVLQyxHQTRLSyxRQUFLLElBQUwsQ0FBVSxLQUFWLElBQW1CLEdBQW5CLEdBQXlCLFFBQUssT0FBOUIsR0FBd0MsR0FBeEMsR0FBOEMsT0E1S25EOztBQTZLTCxvQkFBSSxPQUFPLFFBQVgsRUFBcUI7QUFDakIsd0JBQUksT0FBTyxJQUFQLENBQWEsS0FBYixFQUFvQixNQUF4QjtBQUNJLCtCQUFPLE1BQU0sUUFBSyxTQUFMLENBQWdCLEtBQWhCLENBQWI7QUFESjtBQUVILGlCQUhELE1BR087QUFDQyx5QkFERCxHQUNTLFFBQUssS0FBTCxFQURUOztBQUVILDJCQUFPLFFBQUssU0FBTCxDQUFnQixRQUFLLE1BQUwsQ0FBYSxFQUFFLFNBQVMsS0FBWCxFQUFiLEVBQWlDLEtBQWpDLENBQWhCLENBQVA7QUFDSSwwQkFIRCxHQUdVLFFBQUssY0FBTCxDQUFxQixRQUFLLE1BQTFCLENBSFY7QUFJQyx3QkFKRCxHQUlRLFVBQVUsSUFBVixHQUFpQixJQUp6Qjs7QUFLSCw4QkFBVTtBQUNOLHdDQUFnQixtQ0FEVjtBQUVOLG9DQUFZLFFBQUssTUFGWDtBQUdOLHFDQUFhLFFBQUssSUFBTCxDQUFXLFFBQUssTUFBTCxDQUFhLElBQWIsQ0FBWCxFQUErQixNQUEvQixFQUF1QyxRQUF2QyxFQUFpRCxRQUFqRDtBQUhQLHFCQUFWO0FBS0g7QUExTEksdUJBMkxnQixRQUFLLEtBQUwsQ0FBWSxHQUFaLEVBQWlCLE1BQWpCLEVBQXlCLE9BQXpCLEVBQWtDLElBQWxDLENBM0xoQjtBQUFBO0FBMkxELHdCQTNMQztBQUFBLHdCQTRMRCxZQUFZLFFBNUxYOztBQTZMRCw2QkFBSSxTQUFTLFFBQVQsS0FBc0IsU0FBMUI7QUFDSSwyQkFBTyxRQUFQO0FBREo7QUFFSiwwQkFBTSxJQUFJLGFBQUosQ0FBbUIsUUFBSyxFQUFMLEdBQVUsR0FBVixHQUFnQixRQUFLLElBQUwsQ0FBVyxRQUFYLENBQW5DLENBQU47QUFGSTtBQTdMQztBQUFBO0FBQUEsS0FBYjs7QUFtTUE7O0FBRUEsUUFBSSxVQUFVOztBQUVWLGNBQU0sU0FGSTtBQUdWLGdCQUFRLFNBSEU7QUFJVixxQkFBYSxJQUpILEVBSVM7QUFDbkIscUJBQWEsSUFMSDtBQU1WLG1CQUFXLElBTkQ7QUFPVixnQkFBUTtBQUNKLG9CQUFRLHFHQURKO0FBRUosbUJBQU8sNkJBRkg7QUFHSixtQkFBTyx5QkFISDtBQUlKLG1CQUFPO0FBSkgsU0FQRTtBQWFWLGVBQU87QUFDSCxzQkFBVTtBQUNOLHVCQUFPLENBQ0gsTUFERyxFQUVILE1BRkcsRUFHSCxPQUhHLEVBSUgsV0FKRyxFQUtILFFBTEcsRUFNSCxhQU5HO0FBREQsYUFEUDtBQVdILHVCQUFXO0FBQ1AsdUJBQU8sQ0FDSCxPQURHLEVBRUgsWUFGRyxFQUdILFdBSEcsRUFJSCxTQUpHLEVBS0gsVUFMRyxDQURBO0FBUVAsd0JBQVEsQ0FDSixPQURJLEVBRUosWUFGSSxFQUdKLGdCQUhJLENBUkQ7QUFhUCx1QkFBTyxDQUNILGdCQURHLENBYkE7QUFnQlAsMEJBQVUsQ0FDTixPQURNLEVBRU4sZ0JBRk07QUFoQkg7QUFYUixTQWJHO0FBOENWLG1CQUFXO0FBQ1AsdUJBQVcsRUFBRSxNQUFNLFFBQVIsRUFBa0IsVUFBVSxTQUE1QixFQUF1QyxRQUFRLEtBQS9DLEVBQXNELFNBQVMsS0FBL0QsRUFESjtBQUVQLHVCQUFXLEVBQUUsTUFBTSxRQUFSLEVBQWtCLFVBQVUsU0FBNUIsRUFBdUMsUUFBUSxLQUEvQyxFQUFzRCxTQUFTLEtBQS9ELEVBRko7QUFHUCx1QkFBVyxFQUFFLE1BQU0sUUFBUixFQUFrQixVQUFVLFNBQTVCLEVBQXVDLFFBQVEsS0FBL0MsRUFBc0QsU0FBUyxLQUEvRCxFQUhKO0FBSVAsdUJBQVcsRUFBRSxNQUFNLFFBQVIsRUFBa0IsVUFBVSxTQUE1QixFQUF1QyxRQUFRLEtBQS9DLEVBQXNELFNBQVMsS0FBL0QsRUFKSjtBQUtQLHVCQUFXLEVBQUUsTUFBTSxRQUFSLEVBQWtCLFVBQVUsU0FBNUIsRUFBdUMsUUFBUSxLQUEvQyxFQUFzRCxTQUFTLEtBQS9ELEVBTEo7QUFNUCx1QkFBVyxFQUFFLE1BQU0sUUFBUixFQUFrQixVQUFVLFNBQTVCLEVBQXVDLFFBQVEsS0FBL0MsRUFBc0QsU0FBUyxLQUEvRCxFQU5KO0FBT1AsdUJBQVcsRUFBRSxNQUFNLFFBQVIsRUFBa0IsVUFBVSxTQUE1QixFQUF1QyxRQUFRLEtBQS9DLEVBQXNELFNBQVMsS0FBL0QsRUFQSjtBQVFQLHVCQUFXLEVBQUUsTUFBTSxRQUFSLEVBQWtCLFVBQVUsU0FBNUIsRUFBdUMsUUFBUSxLQUEvQyxFQUFzRCxTQUFTLEtBQS9ELEVBUko7QUFTUCx1QkFBVyxFQUFFLE1BQU0sUUFBUixFQUFrQixVQUFVLFNBQTVCLEVBQXVDLFFBQVEsS0FBL0MsRUFBc0QsU0FBUyxLQUEvRCxFQVRKO0FBVVAsdUJBQVcsRUFBRSxNQUFNLFFBQVIsRUFBa0IsVUFBVSxTQUE1QixFQUF1QyxRQUFRLEtBQS9DLEVBQXNELFNBQVMsS0FBL0QsRUFWSjtBQVdQLHVCQUFXLEVBQUUsTUFBTSxRQUFSLEVBQWtCLFVBQVUsU0FBNUIsRUFBdUMsUUFBUSxLQUEvQyxFQUFzRCxTQUFTLEtBQS9ELEVBWEo7QUFZUCx1QkFBVyxFQUFFLE1BQU0sUUFBUixFQUFrQixVQUFVLFNBQTVCLEVBQXVDLFFBQVEsS0FBL0MsRUFBc0QsU0FBUyxLQUEvRCxFQVpKO0FBYVAsdUJBQVcsRUFBRSxNQUFNLFFBQVIsRUFBa0IsVUFBVSxTQUE1QixFQUF1QyxRQUFRLEtBQS9DLEVBQXNELFNBQVMsS0FBL0QsRUFiSjtBQWNQLHVCQUFXLEVBQUUsTUFBTSxRQUFSLEVBQWtCLFVBQVUsU0FBNUIsRUFBdUMsUUFBUSxLQUEvQyxFQUFzRCxTQUFTLEtBQS9ELEVBZEo7QUFlUCx1QkFBVyxFQUFFLE1BQU0sUUFBUixFQUFrQixVQUFVLFNBQTVCLEVBQXVDLFFBQVEsS0FBL0MsRUFBc0QsU0FBUyxLQUEvRCxFQWZKO0FBZ0JQLHVCQUFXLEVBQUUsTUFBTSxRQUFSLEVBQWtCLFVBQVUsU0FBNUIsRUFBdUMsUUFBUSxLQUEvQyxFQUFzRCxTQUFTLEtBQS9ELEVBaEJKO0FBaUJQLHVCQUFXLEVBQUUsTUFBTSxRQUFSLEVBQWtCLFVBQVUsU0FBNUIsRUFBdUMsUUFBUSxLQUEvQyxFQUFzRCxTQUFTLEtBQS9ELEVBakJKO0FBa0JQLHdCQUFZLEVBQUUsTUFBTSxTQUFSLEVBQW1CLFVBQVUsVUFBN0IsRUFBeUMsUUFBUSxLQUFqRCxFQUF3RCxTQUFTLE1BQWpFLEVBbEJMO0FBbUJQLHdCQUFZLEVBQUUsTUFBTSxTQUFSLEVBQW1CLFVBQVUsVUFBN0IsRUFBeUMsUUFBUSxLQUFqRCxFQUF3RCxTQUFTLE1BQWpFLEVBbkJMO0FBb0JQLHdCQUFZLEVBQUUsTUFBTSxTQUFSLEVBQW1CLFVBQVUsVUFBN0IsRUFBeUMsUUFBUSxNQUFqRCxFQUF5RCxTQUFTLEtBQWxFO0FBcEJMLFNBOUNEOztBQXFFSixvQkFyRUk7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkFzRWUsUUFBSyxpQkFBTCxFQXRFZjtBQUFBO0FBc0VGLHdCQXRFRTtBQXVFRixzQkF2RUUsR0F1RU8sRUFBRSxRQUFRLFFBQVYsRUF2RVA7QUF3RUYsd0JBeEVFLEdBd0VTLFNBQVMsVUFBVCxDQXhFVDs7QUF5RU4scUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxTQUFTLE1BQTdCLEVBQXFDLEdBQXJDLEVBQTBDO0FBQ2xDLDJCQURrQyxHQUN4QixTQUFTLENBQVQsQ0FEd0I7QUFFbEMseUJBRmtDLEdBRTFCLFFBQVEsT0FBUixDQUYwQjtBQUdsQyw0QkFIa0MsR0FHdkIsUUFBSyxrQkFBTCxDQUF5QixLQUF6QixDQUh1QjtBQUlsQywyQkFKa0MsR0FJeEI7QUFDVixnQ0FBUSxXQUFZLFFBQVEsTUFBUixDQUFaLENBREU7QUFFVixnQ0FBUSxXQUFZLFFBQVEsUUFBUixDQUFaLENBRkU7QUFHVixpQ0FBUztBQUhDLHFCQUp3Qjs7QUFTdEMsNEJBQVEsT0FBUixJQUFtQixRQUFLLEdBQUwsQ0FBVSxRQUFRLE1BQVIsQ0FBVixFQUEyQixRQUFRLE1BQVIsQ0FBM0IsQ0FBbkI7QUFDQSwyQkFBTyxRQUFQLElBQW1CLE9BQW5CO0FBQ0g7QUFDRCx1QkFBTyxNQUFQO0FBckZNO0FBQUE7QUF3Rkosc0JBeEZJLDBCQXdGWSxNQXhGWjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQXdGb0Isc0JBeEZwQixnRkF3RjZCLEVBeEY3QjtBQXlGRixpQkF6RkUsR0F5RkUsUUFBSyxNQUFMLENBQWEsTUFBYixDQXpGRjtBQUFBLHVCQTBGZ0IsUUFBSyxjQUFMLENBQXFCLFFBQUssTUFBTCxDQUFhO0FBQ3BELDhCQUFVLEVBQUUsSUFBRixDQUQwQztBQUVwRCw2QkFBUyxHQUYyQyxDQUV0QztBQUZzQyxpQkFBYixFQUd4QyxNQUh3QyxDQUFyQixDQTFGaEI7QUFBQTtBQTBGRix5QkExRkU7QUE4RkYseUJBOUZFLEdBOEZVLFFBQUssWUFBTCxFQTlGVjtBQStGRixzQkEvRkUsR0ErRk87QUFDVCw0QkFBUSxFQURDO0FBRVQsNEJBQVEsRUFGQztBQUdULGlDQUFhLFNBSEo7QUFJVCxnQ0FBWSxRQUFLLE9BQUwsQ0FBYyxTQUFkO0FBSkgsaUJBL0ZQO0FBcUdGLHFCQXJHRSxHQXFHTSxDQUFFLE1BQUYsRUFBVSxNQUFWLENBckdOOztBQXNHTixxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLE1BQU0sTUFBMUIsRUFBa0MsR0FBbEMsRUFBdUM7QUFDL0Isd0JBRCtCLEdBQ3hCLE1BQU0sQ0FBTixDQUR3QjtBQUUvQiwwQkFGK0IsR0FFdEIsVUFBVSxJQUFWLENBRnNCOztBQUduQyx5QkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLE9BQU8sTUFBM0IsRUFBbUMsR0FBbkMsRUFBd0M7QUFDaEMsNkJBRGdDLEdBQ3hCLE9BQU8sQ0FBUCxDQUR3QjtBQUVoQyw2QkFGZ0MsR0FFeEIsV0FBWSxNQUFNLENBQU4sQ0FBWixDQUZ3QjtBQUdoQyw4QkFIZ0MsR0FHdkIsV0FBWSxNQUFNLENBQU4sQ0FBWixDQUh1Qjs7QUFJcEMsK0JBQU8sSUFBUCxFQUFhLElBQWIsQ0FBbUIsQ0FBRSxLQUFGLEVBQVMsTUFBVCxDQUFuQjtBQUNIO0FBQ0o7QUFDRCx1QkFBTyxNQUFQO0FBaEhNO0FBQUE7QUFtSFYsbUJBbkhVLHVCQW1IRyxNQW5ISCxFQW1IVyxNQW5IWCxFQW1IbUI7QUFDekIsZ0JBQUksWUFBWSxPQUFPLFdBQVAsQ0FBaEI7QUFDQSxtQkFBTztBQUNILDZCQUFhLFNBRFY7QUFFSCw0QkFBWSxLQUFLLE9BQUwsQ0FBYyxTQUFkLENBRlQ7QUFHSCx3QkFBUSxXQUFZLE9BQU8sV0FBUCxDQUFaLENBSEw7QUFJSCx1QkFBTyxXQUFZLE9BQU8sVUFBUCxDQUFaLENBSko7QUFLSCx1QkFBTyxXQUFZLE9BQU8sVUFBUCxDQUFaLENBTEo7QUFNSCx1QkFBTyxXQUFZLE9BQU8sVUFBUCxDQUFaLENBTko7QUFPSCx3QkFBUSxXQUFZLE9BQU8sa0JBQVAsQ0FBWixDQVBMO0FBUUgsd0JBQVEsV0FBWSxPQUFPLFdBQVAsQ0FBWixDQVJMO0FBU0gseUJBQVMsV0FBWSxPQUFPLGdCQUFQLENBQVosQ0FUTjtBQVVILHlCQUFTLFNBVk47QUFXSCx3QkFBUSxXQUFZLE9BQU8sV0FBUCxDQUFaLENBWEw7QUFZSCwwQkFBVSxXQUFZLE9BQU8sb0JBQVAsQ0FBWixDQVpQO0FBYUgsOEJBQWMsU0FiWDtBQWNILDJCQUFXLFNBZFI7QUFlSCw4QkFBYyxTQWZYO0FBZ0JILCtCQUFlLFdBQVksT0FBTyxRQUFQLENBQVosQ0FoQlo7QUFpQkgsd0JBQVE7QUFqQkwsYUFBUDtBQW1CSCxTQXhJUztBQTBJSixtQkExSUksdUJBMElTLE1BMUlUO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBMklGLGlCQTNJRSxHQTJJRSxRQUFLLE1BQUwsQ0FBYSxNQUFiLENBM0lGO0FBQUEsdUJBNEllLFFBQUssbUJBQUwsQ0FBMEI7QUFDM0MsOEJBQVUsRUFBRSxJQUFGO0FBRGlDLGlCQUExQixDQTVJZjtBQUFBO0FBNElGLHdCQTVJRTs7QUErSU4sdUJBQU8sUUFBSyxXQUFMLENBQWtCLFFBQWxCLEVBQTRCLENBQTVCLENBQVA7QUEvSU07QUFBQTtBQWtKSixrQkFsSkksc0JBa0pRLE1BbEpSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFrSmdCLHFCQWxKaEIsZ0ZBa0o0QixFQWxKNUI7QUFrSmdDLGlCQWxKaEMsZ0ZBa0p3QyxTQWxKeEM7QUFrSm1ELGlCQWxKbkQsZ0ZBa0oyRCxTQWxKM0Q7O0FBbUpOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBTSxJQUFJLGNBQUosQ0FBb0IsUUFBSyxFQUFMLEdBQVUsb0NBQTlCLENBQU47QUE3S007QUFnTFYsa0JBaExVLHNCQWdMRSxLQWhMRixFQWdMNkI7QUFBQSxnQkFBcEIsTUFBb0IsdUVBQVgsU0FBVzs7QUFDbkMsZ0JBQUksaUJBQWtCLE9BQU8sS0FBUixHQUFpQixHQUFqQixHQUF1QixNQUE1QztBQUNBLGdCQUFJLFlBQVksTUFBTSxjQUFOLENBQWhCO0FBQ0EsZ0JBQUksYUFBYyxPQUFPLEtBQVIsR0FBaUIsR0FBakIsR0FBdUIsT0FBeEM7QUFDQSxnQkFBSSxRQUFRLFdBQVksTUFBTSxVQUFOLENBQVosQ0FBWjtBQUNBLGdCQUFJLGNBQWUsT0FBTyxLQUFSLEdBQWlCLEdBQWpCLEdBQXVCLEtBQXpDO0FBQ0EsZ0JBQUksU0FBUyxXQUFZLE1BQU0sV0FBTixDQUFaLENBQWI7QUFDQSxnQkFBSSxVQUFXLE9BQU8sS0FBUixHQUFpQixHQUFqQixHQUF1QixJQUFyQztBQUNBLGdCQUFJLEtBQUssTUFBTSxPQUFOLEVBQWUsUUFBZixFQUFUO0FBQ0EsZ0JBQUksT0FBTyxTQUFYO0FBQ0EsZ0JBQUksT0FBTyxLQUFYLEVBQWtCO0FBQ2QsdUJBQU8sTUFBUDtBQUNBLG9CQUFJLE1BQU0sR0FBTixDQUFKLEVBQ0ksT0FBTyxLQUFQO0FBQ1AsYUFKRCxNQUlPO0FBQ0gsb0JBQUksVUFBVSxNQUFNLFNBQU4sQ0FBZDtBQUNBLG9CQUFJLFVBQVUsTUFBTSxTQUFOLENBQWQ7QUFDQSxvQkFBSSxPQUFKLEVBQWE7QUFDVCwyQkFBTyxVQUFVLE1BQVYsR0FBbUIsS0FBMUI7QUFDSCxpQkFGRCxNQUVPO0FBQ0gsMkJBQU8sVUFBVSxLQUFWLEdBQWtCLE1BQXpCO0FBQ0g7QUFDSjtBQUNELG1CQUFPO0FBQ0gsd0JBQVEsS0FETDtBQUVILDZCQUFhLFNBRlY7QUFHSCw0QkFBWSxLQUFLLE9BQUwsQ0FBYyxTQUFkLENBSFQ7QUFJSCwwQkFBVSxPQUFPLFFBQVAsQ0FKUDtBQUtILHNCQUFNLEVBTEg7QUFNSCx3QkFBUSxTQU5MO0FBT0gsd0JBQVEsSUFQTDtBQVFILHlCQUFTLEtBUk47QUFTSCwwQkFBVTtBQVRQLGFBQVA7QUFXSCxTQWxOUztBQW9OSixtQkFwTkksdUJBb05TLE1BcE5UO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQW9OaUIsc0JBcE5qQixnRkFvTjBCLEVBcE4xQjtBQXFORixpQkFyTkUsR0FxTkUsUUFBSyxNQUFMLENBQWEsTUFBYixDQXJORjtBQUFBLHVCQXNOZSxRQUFLLGtCQUFMLENBQXlCLFFBQUssTUFBTCxDQUFhO0FBQ3ZELDhCQUFVLEVBQUUsSUFBRixDQUQ2QztBQUV2RDtBQUNBO0FBQ0E7QUFDQSw2QkFBUyxHQUw4QyxDQUtsQztBQUxrQyxpQkFBYixFQU0zQyxNQU4yQyxDQUF6QixDQXROZjtBQUFBO0FBc05GLHdCQXRORTs7QUE2Tk4sdUJBQU8sUUFBSyxXQUFMLENBQWtCLFFBQWxCLEVBQTRCLENBQTVCLENBQVA7QUE3Tk07QUFBQTtBQWdPVixrQkFoT1Usc0JBZ09FLEtBaE9GLEVBZ09TO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQU0sSUFBSSxjQUFKLENBQW9CLEtBQUssRUFBTCxHQUFVLG9DQUE5QixDQUFOO0FBQ0gsU0FqUFM7QUFtUEosbUJBblBJLHVCQW1QUyxNQW5QVCxFQW1QaUIsSUFuUGpCLEVBbVB1QixJQW5QdkIsRUFtUDZCLE1BblA3QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQW1QcUMscUJBblByQyxnRkFtUDZDLFNBblA3QztBQW1Qd0Qsc0JBblB4RCxnRkFtUGlFLEVBblBqRTtBQW9QRixxQkFwUEUsR0FvUE07QUFDUiw4QkFBVSxRQUFLLFFBQUwsQ0FBZSxNQUFmLENBREY7QUFFUixnQ0FBWSxLQUFLLE9BQUwsQ0FBYyxNQUFkLENBRko7QUFHUiw2QkFBUyxLQUFLLE9BQUwsQ0FBYyxLQUFkLENBSEQ7QUFJUiw0QkFBUSxLQUFLLFdBQUwsRUFKQTtBQUtSLDRCQUFRLEtBQUssV0FBTCxFQUxBO0FBTVIsbUNBQWUsS0FOUCxDQU1jO0FBQ3RCO0FBUFEsaUJBcFBOO0FBQUEsdUJBNlBlLFFBQUssZ0JBQUwsQ0FBdUIsUUFBSyxNQUFMLENBQWEsS0FBYixFQUFvQixNQUFwQixDQUF2QixDQTdQZjtBQUFBO0FBNlBGLHdCQTdQRTs7QUE4UE4sdUJBQU87QUFDSCw0QkFBUSxRQURMO0FBRUgsMEJBQU0sU0FBUyxTQUFULEVBQW9CLFFBQXBCO0FBRkgsaUJBQVA7QUE5UE07QUFBQTtBQW9RSixrQkFwUUksc0JBb1FRLEVBcFFSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBb1FZLHNCQXBRWixnRkFvUXFCLEVBcFFyQjtBQXFRRixzQkFyUUUsR0FxUVEsWUFBWSxNQXJRcEI7O0FBc1FOLG9CQUFJLENBQUMsTUFBTDtBQUNJLDBCQUFNLElBQUksYUFBSixDQUFtQixRQUFLLEVBQUwsR0FBVSxxQ0FBN0IsQ0FBTjtBQURKLGlCQUVJLENBeFFFLEdBd1FFLFFBQUssTUFBTCxDQUFhLE1BQWIsQ0F4UUY7QUFBQSx1QkF5UWUsUUFBSyxlQUFMLENBQXNCLFFBQUssTUFBTCxDQUFhLE1BQWIsRUFBcUI7QUFDNUQsOEJBQVUsRUFBRSxJQUFGLENBRGtEO0FBRTVELCtCQUFXLEdBQUcsUUFBSDtBQUZpRCxpQkFBckIsQ0FBdEIsQ0F6UWY7QUFBQTtBQXlRRix3QkF6UUU7O0FBNlFOLHVCQUFPLFFBQUssVUFBTCxDQUFpQixRQUFqQixDQUFQO0FBN1FNO0FBQUE7QUFnUkosbUJBaFJJO0FBQUE7O0FBaVJOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFNLElBQUksY0FBSixDQUFvQixRQUFLLEVBQUwsR0FBVSxrQ0FBOUIsQ0FBTjtBQXZSTTtBQTBSSix5QkExUkk7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUEwUmUsc0JBMVJmLGdGQTBSd0IsU0ExUnhCO0FBMFJtQyxzQkExUm5DLGdGQTBSNEMsRUExUjVDOztBQTJSTixvQkFBSSxDQUFDLE1BQUw7QUFDSSwwQkFBTSxJQUFJLGFBQUosQ0FBbUIsUUFBSyxFQUFMLEdBQVUsc0NBQTdCLENBQU47QUFESixpQkFFSSxDQTdSRSxHQTZSRSxRQUFLLE1BQUwsQ0FBYSxNQUFiLENBN1JGO0FBQUEsdUJBOFJlLFFBQUssb0JBQUwsQ0FBMkI7QUFDNUMsOEJBQVUsRUFBRSxJQUFGO0FBRGtDLGlCQUEzQixDQTlSZjtBQUFBO0FBOFJGLHdCQTlSRTs7QUFpU04sdUJBQU8sUUFBSyxXQUFMLENBQWtCLFFBQWxCLEVBQTRCLENBQTVCLENBQVA7QUFqU007QUFBQTtBQW9TSixtQkFwU0ksdUJBb1NTLEVBcFNUO0FBQUE7QUFBQTtBQUFBOztBQW9TYSxrQkFwU2IsZ0ZBb1NzQixFQXBTdEI7O0FBcVNOLG1CQUFPLFFBQUssc0JBQUwsQ0FBNkIsUUFBSyxNQUFMLENBQWE7QUFDN0MsMkJBQVcsU0FBVSxFQUFWO0FBQ1g7QUFGNkMsYUFBYixFQUdqQyxNQUhpQyxDQUE3QixDQUFQO0FBclNNO0FBMlNWLGFBM1NVLG1CQTJTRDtBQUNMLG1CQUFPLEtBQUssWUFBTCxFQUFQO0FBQ0gsU0E3U1M7QUErU0osZUEvU0ksbUJBK1NLLElBL1NMO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUErU1csbUJBL1NYLGdGQStTaUIsUUEvU2pCO0FBK1MyQixzQkEvUzNCLGdGQStTb0MsS0EvU3BDO0FBK1MyQyxzQkEvUzNDLGdGQStTb0QsRUEvU3BEO0FBK1N3RCx1QkEvU3hELGdGQStTa0UsU0EvU2xFO0FBK1M2RSxvQkEvUzdFLGdGQStTb0YsU0EvU3BGO0FBZ1RGLG1CQWhURSxHQWdUSSxRQUFLLElBQUwsQ0FBVSxLQUFWLElBQW1CLEdBQW5CLEdBQXlCLFFBQUssT0FBOUIsR0FBd0MsR0FBeEMsR0FBOEMsSUFoVGxEOztBQWlUTixvQkFBSSxPQUFPLFFBQVgsRUFBcUI7QUFDakIsd0JBQUksT0FBTyxJQUFQLENBQWEsTUFBYixFQUFxQixNQUF6QjtBQUNJLCtCQUFPLE1BQU0sUUFBSyxTQUFMLENBQWdCLE1BQWhCLENBQWI7QUFESjtBQUVILGlCQUhELE1BR087QUFDQyx5QkFERCxHQUNTLFFBQUssS0FBTCxFQURUO0FBRUMseUJBRkQsR0FFUyxRQUFLLFNBQUwsQ0FBZ0IsUUFBSyxNQUFMLENBQWEsRUFBRSxhQUFhLEtBQWYsRUFBYixFQUFxQyxNQUFyQyxDQUFoQixDQUZUO0FBR0Msd0JBSEQsR0FHUSxRQUFLLE1BQUwsR0FBYyxHQUFkLEdBQW9CLEtBSDVCO0FBSUMsNkJBSkQsR0FJYSxRQUFLLElBQUwsQ0FBVyxRQUFLLE1BQUwsQ0FBYSxJQUFiLENBQVgsRUFBK0IsUUFBL0IsQ0FKYjs7QUFLSCw2QkFBUyxNQUFNLFlBQU4sR0FBcUIsU0FBOUI7QUFDQSw4QkFBVTtBQUNOLHdDQUFnQixRQUFLO0FBRGYscUJBQVY7QUFHQSx3QkFBSSxVQUFVLEtBQWQsRUFBcUI7QUFDakIsK0JBQU8sTUFBTSxLQUFiO0FBQ0gscUJBRkQsTUFFTztBQUNILCtCQUFPLEtBQVA7QUFDQSxnQ0FBUSxjQUFSLElBQTBCLG1DQUExQjtBQUNIO0FBQ0o7QUFuVUssdUJBb1VlLFFBQUssS0FBTCxDQUFZLEdBQVosRUFBaUIsTUFBakIsRUFBeUIsT0FBekIsRUFBa0MsSUFBbEMsQ0FwVWY7QUFBQTtBQW9VRix3QkFwVUU7O0FBcVVOLG9CQUFJLFVBQVUsUUFBZCxFQUF3QjtBQUNwQix3QkFBSSxTQUFTLE1BQVQsSUFBbUIsQ0FBdkI7QUFDSSw4QkFBTSxJQUFJLGFBQUosQ0FBbUIsUUFBSyxFQUFMLEdBQVUsR0FBVixHQUFnQixRQUFLLElBQUwsQ0FBVyxRQUFYLENBQW5DLENBQU47QUFESjtBQUVIO0FBQ0QsdUJBQU8sUUFBUDtBQXpVTTtBQUFBO0FBQUEsS0FBZDs7QUE2VUE7O0FBRUEsUUFBSSxRQUFROztBQUVSLGNBQU0sT0FGRTtBQUdSLGdCQUFRLE9BSEE7QUFJUixxQkFBYSxJQUpMLEVBSVc7QUFDbkIscUJBQWEsSUFMTDtBQU1SLGdCQUFRO0FBQ0osb0JBQVEscUdBREo7QUFFSixtQkFBTyx5QkFGSDtBQUdKLG1CQUFPLHlCQUhIO0FBSUosbUJBQU8sQ0FDSCxrQ0FERyxFQUVILGdDQUZHO0FBSkgsU0FOQTtBQWVSLGVBQU87QUFDSCxzQkFBVTtBQUNOLHVCQUFPLENBQ0gseUJBREcsRUFFSCw0QkFGRyxFQUdILHlCQUhHO0FBREQsYUFEUDtBQVFILHVCQUFXO0FBQ1Asd0JBQVEsQ0FDSixpQkFESSxFQUVKLG9CQUZJLEVBR0oseUJBSEksRUFJSixzQkFKSSxFQUtKLDJCQUxJLEVBTUosZUFOSSxFQU9KLGdCQVBJLEVBUUosOEJBUkksRUFTSiwrQkFUSSxFQVVKLG1CQVZJLEVBV0osZ0JBWEksRUFZSixpQkFaSSxFQWFKLGNBYkk7QUFERDtBQVJSLFNBZkM7QUF5Q1IsbUJBQVc7QUFDUCx1QkFBVyxFQUFFLE1BQU0sUUFBUixFQUFrQixVQUFVLFNBQTVCLEVBQXVDLFFBQVEsS0FBL0MsRUFBc0QsU0FBUyxLQUEvRCxFQURKO0FBRVAsdUJBQVcsRUFBRSxNQUFNLFFBQVIsRUFBa0IsVUFBVSxTQUE1QixFQUF1QyxRQUFRLEtBQS9DLEVBQXNELFNBQVMsS0FBL0QsRUFGSjtBQUdQLHVCQUFXLEVBQUUsTUFBTSxRQUFSLEVBQWtCLFVBQVUsU0FBNUIsRUFBdUMsUUFBUSxLQUEvQyxFQUFzRCxTQUFTLEtBQS9EO0FBSEosU0F6Q0g7O0FBK0NGLG9CQS9DRTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBZ0RnQixRQUFLLDJCQUFMLEVBaERoQjtBQUFBO0FBZ0RBLHVCQWhEQTtBQWlEQSxzQkFqREEsR0FpRFMsRUFBRSxRQUFRLE9BQVYsRUFqRFQ7O0FBa0RKLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksUUFBSyxVQUFMLENBQWdCLE1BQXBDLEVBQTRDLEdBQTVDLEVBQWlEO0FBQ3pDLDRCQUR5QyxHQUM5QixRQUFLLFVBQUwsQ0FBZ0IsQ0FBaEIsQ0FEOEI7QUFFekMsMkJBRnlDLEdBRS9CO0FBQ1YsZ0NBQVEsU0FERTtBQUVWLGdDQUFRLFNBRkU7QUFHVixpQ0FBUztBQUhDLHFCQUYrQjs7QUFPN0Msd0JBQUksWUFBWSxPQUFoQixFQUF5QjtBQUNqQixpQ0FEaUIsR0FDTCxlQUFlLFFBRFY7O0FBRXJCLGdDQUFRLE1BQVIsSUFBa0IsUUFBUSxTQUFSLENBQWxCO0FBQ0EsZ0NBQVEsT0FBUixJQUFtQixRQUFRLFFBQVIsQ0FBbkI7QUFDQSxnQ0FBUSxNQUFSLElBQWtCLFFBQVEsT0FBUixJQUFtQixRQUFRLE1BQVIsQ0FBckM7QUFDSDtBQUNELDJCQUFPLFFBQVAsSUFBbUIsT0FBbkI7QUFDSDtBQUNELHVCQUFPLE1BQVA7QUFqRUk7QUFBQTtBQW9FRixzQkFwRUUsMEJBb0VjLE1BcEVkO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBb0VzQixzQkFwRXRCLGdGQW9FK0IsRUFwRS9CO0FBQUEsdUJBcUVrQixRQUFLLCtCQUFMLENBQXNDLFFBQUssTUFBTCxDQUFhO0FBQ3JFLDRCQUFRLFFBQUssUUFBTCxDQUFlLE1BQWY7QUFENkQsaUJBQWIsRUFFekQsTUFGeUQsQ0FBdEMsQ0FyRWxCO0FBQUE7QUFxRUEseUJBckVBO0FBd0VBLHlCQXhFQSxHQXdFWSxRQUFLLFlBQUwsRUF4RVo7QUF5RUEsc0JBekVBLEdBeUVTO0FBQ1QsNEJBQVEsRUFEQztBQUVULDRCQUFRLEVBRkM7QUFHVCxpQ0FBYSxTQUhKO0FBSVQsZ0NBQVksUUFBSyxPQUFMLENBQWMsU0FBZDtBQUpILGlCQXpFVDtBQStFQSxxQkEvRUEsR0ErRVEsQ0FBRSxNQUFGLEVBQVUsTUFBVixDQS9FUjs7QUFnRkoscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxNQUFNLE1BQTFCLEVBQWtDLEdBQWxDLEVBQXVDO0FBQy9CLHdCQUQrQixHQUN4QixNQUFNLENBQU4sQ0FEd0I7QUFFL0IsMEJBRitCLEdBRXRCLFVBQVUsSUFBVixDQUZzQjs7QUFHbkMseUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxPQUFPLE1BQTNCLEVBQW1DLEdBQW5DLEVBQXdDO0FBQ2hDLDZCQURnQyxHQUN4QixPQUFPLENBQVAsQ0FEd0I7QUFFaEMsNkJBRmdDLEdBRXhCLE1BQU0sQ0FBTixDQUZ3QjtBQUdoQyw4QkFIZ0MsR0FHdkIsTUFBTSxDQUFOLENBSHVCO0FBSWhDLG1DQUpnQyxHQUlwQixNQUFNLENBQU4sSUFBVyxJQUpTOztBQUtwQywrQkFBTyxJQUFQLEVBQWEsSUFBYixDQUFtQixDQUFFLEtBQUYsRUFBUyxNQUFULEVBQWlCLFdBQWpCLENBQW5CO0FBQ0g7QUFDSjtBQUNELHVCQUFPLE1BQVA7QUEzRkk7QUFBQTtBQThGRixtQkE5RkUsdUJBOEZXLE1BOUZYO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBK0ZlLFFBQUssNEJBQUwsQ0FBbUM7QUFDbEQsNEJBQVEsUUFBSyxRQUFMLENBQWUsTUFBZjtBQUQwQyxpQkFBbkMsQ0EvRmY7QUFBQTtBQStGQSxzQkEvRkE7QUFrR0EseUJBbEdBLEdBa0dZLFFBQUssWUFBTCxFQWxHWjs7QUFtR0osdUJBQU87QUFDSCxpQ0FBYSxTQURWO0FBRUgsZ0NBQVksUUFBSyxPQUFMLENBQWMsU0FBZCxDQUZUO0FBR0gsNEJBQVEsV0FBWSxPQUFPLEdBQVAsQ0FBWixDQUhMO0FBSUgsMkJBQU8sV0FBWSxPQUFPLEdBQVAsQ0FBWixDQUpKO0FBS0gsMkJBQU8sU0FMSjtBQU1ILDJCQUFPLFNBTko7QUFPSCw0QkFBUSxTQVBMO0FBUUgsNEJBQVEsU0FSTDtBQVNILDZCQUFTLFNBVE47QUFVSCw2QkFBUyxTQVZOO0FBV0gsNEJBQVEsV0FBWSxPQUFPLElBQVAsQ0FBWixDQVhMO0FBWUgsOEJBQVUsU0FaUDtBQWFILGtDQUFjLFNBYlg7QUFjSCwrQkFBVyxXQUFZLE9BQU8sSUFBUCxDQUFaLENBZFI7QUFlSCxrQ0FBYyxTQWZYO0FBZ0JILG1DQUFlLFdBQVksT0FBTyxHQUFQLENBQVo7QUFoQlosaUJBQVA7QUFuR0k7QUFBQTtBQXVIRixtQkF2SEUsdUJBdUhXLE1BdkhYO0FBQUE7QUFBQTtBQUFBOztBQXVIbUIsa0JBdkhuQixnRkF1SDRCLEVBdkg1Qjs7QUF3SEosbUJBQU8sUUFBSyw0QkFBTCxDQUFtQyxRQUFLLE1BQUwsQ0FBYTtBQUNuRCx3QkFBUSxRQUFLLFFBQUwsQ0FBZSxNQUFmO0FBRDJDLGFBQWIsRUFFdkMsTUFGdUMsQ0FBbkMsQ0FBUDtBQXhISTtBQTZIRixtQkE3SEUsdUJBNkhXLE1BN0hYLEVBNkhtQixJQTdIbkIsRUE2SHlCLElBN0h6QixFQTZIK0IsTUE3SC9CO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUE2SHVDLHFCQTdIdkMsZ0ZBNkgrQyxTQTdIL0M7QUE2SDBELHNCQTdIMUQsZ0ZBNkhtRSxFQTdIbkU7QUE4SEEsc0JBOUhBLEdBOEhTLDBCQTlIVDtBQStIQSxxQkEvSEEsR0ErSFE7QUFDUiw4QkFBVSxNQURGO0FBRVIsNEJBQVEsUUFBSyxRQUFMLENBQWUsTUFBZjtBQUZBLGlCQS9IUjs7QUFtSUosb0JBQUksUUFBUSxRQUFaLEVBQXNCO0FBQ2xCLDhCQUFVLGdCQUFnQixRQUFLLFVBQUwsQ0FBaUIsSUFBakIsQ0FBMUI7QUFDSCxpQkFGRCxNQUVPO0FBQ0gsMEJBQU0sT0FBTixJQUFpQixLQUFqQjtBQUNBLDBCQUFNLE9BQU4sSUFBaUIsU0FBUyxLQUExQjtBQUNBLDBCQUFNLE9BQU4sSUFBa0IsUUFBUSxLQUExQjtBQUNIO0FBeklHLHVCQTBJZSxRQUFLLE1BQUwsRUFBYyxRQUFLLE1BQUwsQ0FBYSxLQUFiLEVBQW9CLE1BQXBCLENBQWQsQ0ExSWY7QUFBQTtBQTBJQSxzQkExSUE7O0FBMklKLHVCQUFPO0FBQ0gsNEJBQVEsTUFETDtBQUVILDBCQUFNLE9BQU8sVUFBUCxFQUFtQixJQUFuQjtBQUZILGlCQUFQO0FBM0lJO0FBQUE7QUFpSkYsbUJBakpFLHVCQWlKVyxFQWpKWDtBQUFBOztBQWtKSixtQkFBTyxRQUFLLDJCQUFMLENBQWtDLEVBQUUsTUFBTSxFQUFSLEVBQWxDLENBQVA7QUFsSkk7QUFxSlIsZUFySlEsbUJBcUpDLElBckpELEVBcUoyRjtBQUFBLGdCQUFwRixHQUFvRix1RUFBOUUsUUFBOEU7QUFBQSxnQkFBcEUsTUFBb0UsdUVBQTNELEtBQTJEO0FBQUEsZ0JBQXBELE1BQW9ELHVFQUEzQyxFQUEyQztBQUFBLGdCQUF2QyxPQUF1Qyx1RUFBN0IsU0FBNkI7QUFBQSxnQkFBbEIsSUFBa0IsdUVBQVgsU0FBVzs7QUFDL0YsZ0JBQUksTUFBTSxLQUFLLElBQUwsQ0FBVSxLQUFWLElBQW1CLEdBQW5CLEdBQXlCLEtBQUssYUFBTCxDQUFvQixJQUFwQixFQUEwQixNQUExQixDQUFuQztBQUNBLGdCQUFJLE9BQU8sUUFBWCxFQUFxQjtBQUNqQix1QkFBTyxPQUFQO0FBQ0gsYUFGRCxNQUVPO0FBQ0gsb0JBQUksUUFBUSxLQUFLLEtBQUwsRUFBWjtBQUNBLG9CQUFJLFFBQVEsS0FBSyxNQUFMLENBQWEsRUFBRSxTQUFTLEtBQVgsRUFBYixFQUFpQyxNQUFqQyxDQUFaO0FBQ0EsdUJBQU8sS0FBSyxTQUFMLENBQWdCLEtBQWhCLENBQVA7QUFDQSwwQkFBVTtBQUNOLG9DQUFnQixtQ0FEVjtBQUVOLHNDQUFrQixLQUFLLE1BRmpCO0FBR04sMkJBQU8sS0FBSyxNQUhOO0FBSU4sNEJBQVEsS0FBSyxJQUFMLENBQVcsS0FBSyxNQUFMLENBQWEsSUFBYixDQUFYLEVBQStCLEtBQUssTUFBTCxDQUFhLEtBQUssTUFBbEIsQ0FBL0IsRUFBMEQsUUFBMUQsRUFBb0UsUUFBcEU7QUFKRixpQkFBVjtBQU1IO0FBQ0QsbUJBQU8sS0FBSyxLQUFMLENBQVksR0FBWixFQUFpQixNQUFqQixFQUF5QixPQUF6QixFQUFrQyxJQUFsQyxDQUFQO0FBQ0g7QUFyS08sS0FBWjs7QUF3S0E7O0FBRUEsUUFBSSxTQUFTOztBQUVULGNBQU0sUUFGRztBQUdULGdCQUFRLFFBSEM7QUFJVCxxQkFBYSxDQUFFLElBQUYsRUFBUSxJQUFSLENBSkosRUFJb0I7QUFDN0IscUJBQWEsSUFMSjtBQU1ULGdCQUFRO0FBQ0osb0JBQVEscUdBREo7QUFFSixtQkFBTyxvQkFGSDtBQUdKLG1CQUFPO0FBQ0gsMEJBQVUsK0JBRFA7QUFFSCwyQkFBVztBQUZSLGFBSEg7QUFPSixtQkFBTyxDQUNILCtCQURHLEVBRUgsb0NBRkcsRUFHSCxrQ0FIRztBQVBILFNBTkM7QUFtQlQsZUFBTztBQUNILHNCQUFVO0FBQ04sdUJBQU8sQ0FDSCxVQURHLEVBRUgsYUFGRyxFQUdILGdCQUhHLEVBSUgsYUFKRyxFQUtILGFBTEc7QUFERCxhQURQO0FBVUgsdUJBQVc7QUFDUCx3QkFBUSxDQUNKLE1BREksRUFFSixPQUZJLEVBR0osUUFISSxFQUlKLFdBSkksRUFLSixRQUxJLEVBTUosVUFOSSxFQU9KLFVBUEksRUFRSixTQVJJLEVBU0osY0FUSTtBQUREO0FBVlIsU0FuQkU7QUEyQ1QsbUJBQVc7QUFDUCx1QkFBVyxFQUFFLE1BQU0sUUFBUixFQUFrQixVQUFVLFNBQTVCLEVBQXVDLFFBQVEsS0FBL0MsRUFBc0QsU0FBUyxLQUEvRCxFQURKO0FBRVAsdUJBQVcsRUFBRSxNQUFNLFFBQVIsRUFBa0IsVUFBVSxTQUE1QixFQUF1QyxRQUFRLEtBQS9DLEVBQXNELFNBQVMsS0FBL0QsRUFGSjtBQUdQLHVCQUFXLEVBQUUsTUFBTSxRQUFSLEVBQWtCLFVBQVUsU0FBNUIsRUFBdUMsUUFBUSxLQUEvQyxFQUFzRCxTQUFTLEtBQS9ELEVBSEo7QUFJUCx1QkFBVyxFQUFFLE1BQU0sUUFBUixFQUFrQixVQUFVLFNBQTVCLEVBQXVDLFFBQVEsS0FBL0MsRUFBc0QsU0FBUyxLQUEvRCxFQUpKO0FBS1AsdUJBQVcsRUFBRSxNQUFNLFFBQVIsRUFBa0IsVUFBVSxTQUE1QixFQUF1QyxRQUFRLEtBQS9DLEVBQXNELFNBQVMsS0FBL0QsRUFMSjtBQU1QLHVCQUFXLEVBQUUsTUFBTSxRQUFSLEVBQWtCLFVBQVUsU0FBNUIsRUFBdUMsUUFBUSxLQUEvQyxFQUFzRCxTQUFTLEtBQS9ELEVBTko7QUFPUCx1QkFBVyxFQUFFLE1BQU0sUUFBUixFQUFrQixVQUFVLFNBQTVCLEVBQXVDLFFBQVEsS0FBL0MsRUFBc0QsU0FBUyxLQUEvRCxFQVBKO0FBUVAsdUJBQVcsRUFBRSxNQUFNLFFBQVIsRUFBa0IsVUFBVSxTQUE1QixFQUF1QyxRQUFRLEtBQS9DLEVBQXNELFNBQVMsS0FBL0QsRUFSSjtBQVNQLHVCQUFXLEVBQUUsTUFBTSxRQUFSLEVBQWtCLFVBQVUsU0FBNUIsRUFBdUMsUUFBUSxLQUEvQyxFQUFzRCxTQUFTLEtBQS9ELEVBVEo7QUFVUCx1QkFBVyxFQUFFLE1BQU0sUUFBUixFQUFrQixVQUFVLFNBQTVCLEVBQXVDLFFBQVEsS0FBL0MsRUFBc0QsU0FBUyxLQUEvRCxFQVZKO0FBV1AsdUJBQVcsRUFBRSxNQUFNLFFBQVIsRUFBa0IsVUFBVSxTQUE1QixFQUF1QyxRQUFRLEtBQS9DLEVBQXNELFNBQVMsS0FBL0QsRUFYSjtBQVlQLHVCQUFXLEVBQUUsTUFBTSxRQUFSLEVBQWtCLFVBQVUsU0FBNUIsRUFBdUMsUUFBUSxLQUEvQyxFQUFzRCxTQUFTLEtBQS9ELEVBWko7QUFhUCx1QkFBVyxFQUFFLE1BQU0sUUFBUixFQUFrQixVQUFVLFNBQTVCLEVBQXVDLFFBQVEsS0FBL0MsRUFBc0QsU0FBUyxLQUEvRCxFQWJKO0FBY1AsdUJBQVcsRUFBRSxNQUFNLFFBQVIsRUFBa0IsVUFBVSxTQUE1QixFQUF1QyxRQUFRLEtBQS9DLEVBQXNELFNBQVMsS0FBL0QsRUFkSjtBQWVQLHVCQUFXLEVBQUUsTUFBTSxRQUFSLEVBQWtCLFVBQVUsU0FBNUIsRUFBdUMsUUFBUSxLQUEvQyxFQUFzRCxTQUFTLEtBQS9EO0FBZkosU0EzQ0Y7O0FBNkRILG9CQTdERztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBOERnQixRQUFLLGVBQUwsRUE5RGhCO0FBQUE7QUE4REQsd0JBOURDO0FBK0RELHVCQS9EQyxHQStEUyxTQUFTLFVBQVQsQ0EvRFQ7QUFnRUQsc0JBaEVDLEdBZ0VRLEVBQUUsUUFBUSxPQUFWLEVBaEVSOztBQWlFTCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFFBQUssVUFBTCxDQUFnQixNQUFwQyxFQUE0QyxHQUE1QyxFQUFpRDtBQUN6Qyw0QkFEeUMsR0FDOUIsUUFBSyxVQUFMLENBQWdCLENBQWhCLENBRDhCO0FBRXpDLDJCQUZ5QyxHQUUvQjtBQUNWLGdDQUFRLFNBREU7QUFFVixnQ0FBUSxTQUZFO0FBR1YsaUNBQVM7QUFIQyxxQkFGK0I7O0FBTzdDLHdCQUFJLFlBQVksT0FBaEIsRUFBeUI7QUFDckIsZ0NBQVEsTUFBUixJQUFrQixXQUFZLFFBQVEsUUFBUixFQUFrQixXQUFsQixDQUFaLENBQWxCO0FBQ0EsZ0NBQVEsTUFBUixJQUFrQixXQUFZLFFBQVEsUUFBUixFQUFrQixRQUFsQixDQUFaLENBQWxCO0FBQ0EsZ0NBQVEsT0FBUixJQUFtQixRQUFLLEdBQUwsQ0FBVSxRQUFRLE1BQVIsQ0FBVixFQUEyQixRQUFRLE1BQVIsQ0FBM0IsQ0FBbkI7QUFDSDtBQUNELDJCQUFPLFFBQVAsSUFBbUIsT0FBbkI7QUFDSDtBQUNELHVCQUFPLE1BQVA7QUEvRUs7QUFBQTtBQWtGSCxzQkFsRkcsMEJBa0ZhLE1BbEZiO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBa0ZxQixzQkFsRnJCLGdGQWtGOEIsRUFsRjlCO0FBQUEsdUJBbUZpQixRQUFLLG9CQUFMLENBQTJCLFFBQUssTUFBTCxDQUFhO0FBQzFELDBCQUFNLFFBQUssUUFBTCxDQUFlLE1BQWY7QUFEb0QsaUJBQWIsRUFFOUMsTUFGOEMsQ0FBM0IsQ0FuRmpCO0FBQUE7QUFtRkQseUJBbkZDO0FBc0ZELHlCQXRGQyxHQXNGVyxRQUFLLFlBQUwsRUF0Rlg7QUF1RkQsc0JBdkZDLEdBdUZRO0FBQ1QsNEJBQVEsVUFBVSxNQUFWLENBREM7QUFFVCw0QkFBUSxVQUFVLE1BQVYsQ0FGQztBQUdULGlDQUFhLFNBSEo7QUFJVCxnQ0FBWSxRQUFLLE9BQUwsQ0FBYyxTQUFkO0FBSkgsaUJBdkZSOztBQTZGTCx1QkFBTyxNQUFQO0FBN0ZLO0FBQUE7QUFnR0gsbUJBaEdHLHVCQWdHVSxNQWhHVjtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQWlHYyxRQUFLLGlCQUFMLENBQXdCO0FBQ3ZDLDBCQUFNLFFBQUssUUFBTCxDQUFlLE1BQWY7QUFEaUMsaUJBQXhCLENBakdkO0FBQUE7QUFpR0Qsc0JBakdDO0FBb0dELHlCQXBHQyxHQW9HVyxRQUFLLFlBQUwsRUFwR1g7O0FBcUdMLHVCQUFPO0FBQ0gsaUNBQWEsU0FEVjtBQUVILGdDQUFZLFFBQUssT0FBTCxDQUFjLFNBQWQsQ0FGVDtBQUdILDRCQUFRLFdBQVksT0FBTyxLQUFQLENBQVosQ0FITDtBQUlILDJCQUFPLFdBQVksT0FBTyxLQUFQLENBQVosQ0FKSjtBQUtILDJCQUFPLFdBQVksT0FBTyxLQUFQLENBQVosQ0FMSjtBQU1ILDJCQUFPLFdBQVksT0FBTyxLQUFQLENBQVosQ0FOSjtBQU9ILDRCQUFRLFdBQVksT0FBTyxNQUFQLENBQVosQ0FQTDtBQVFILDRCQUFRLFNBUkw7QUFTSCw2QkFBUyxTQVROO0FBVUgsNkJBQVMsU0FWTjtBQVdILDRCQUFRLFdBQVksT0FBTyxNQUFQLENBQVosQ0FYTDtBQVlILDhCQUFVLFNBWlA7QUFhSCxrQ0FBYyxTQWJYO0FBY0gsK0JBQVcsV0FBWSxPQUFPLFNBQVAsQ0FBWixDQWRSO0FBZUgsa0NBQWMsU0FmWDtBQWdCSCxtQ0FBZSxXQUFZLE9BQU8sUUFBUCxDQUFaLENBaEJaO0FBaUJILDRCQUFRO0FBakJMLGlCQUFQO0FBckdLO0FBQUE7QUEwSEgsbUJBMUhHLHVCQTBIVSxNQTFIVjtBQUFBO0FBQUE7QUFBQTs7QUEwSGtCLGtCQTFIbEIsZ0ZBMEgyQixFQTFIM0I7O0FBMkhMLG1CQUFPLFFBQUssaUJBQUwsQ0FBd0IsUUFBSyxNQUFMLENBQWE7QUFDeEMsc0JBQU0sUUFBSyxRQUFMLENBQWUsTUFBZjtBQURrQyxhQUFiLEVBRTVCLE1BRjRCLENBQXhCLENBQVA7QUEzSEs7QUFpSUgsbUJBaklHLHVCQWlJVSxNQWpJVixFQWlJa0IsSUFqSWxCLEVBaUl3QixJQWpJeEIsRUFpSThCLE1Bakk5QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBaUlzQyxpQkFqSXRDLGdGQWlJOEMsU0FqSTlDO0FBaUl5RCxrQkFqSXpELGdGQWlJa0UsRUFqSWxFO0FBa0lELGFBbElDLEdBa0lHLFFBQUssTUFBTCxDQUFhLE1BQWIsQ0FsSUg7O0FBbUlMLG1CQUFPLFFBQUssZ0JBQUwsQ0FBdUIsUUFBSyxNQUFMLENBQWE7QUFDdkMsd0JBQVEsSUFEK0I7QUFFdkMsNEJBQVksRUFBRSxNQUFGLENBRjJCO0FBR3ZDLDBCQUFVLE1BSDZCO0FBSXZDLG9DQUFvQixFQUFFLE9BQUYsQ0FKbUI7QUFLdkMsd0JBQVE7QUFMK0IsYUFBYixFQU0zQixNQU4yQixDQUF2QixDQUFQO0FBbklLO0FBNElILG1CQTVJRyx1QkE0SVUsRUE1SVY7QUFBQTs7QUE2SUwsbUJBQU8sUUFBSyxpQkFBTCxDQUF3QixFQUFFLE1BQU0sRUFBUixFQUF4QixDQUFQO0FBN0lLO0FBZ0pULGVBaEpTLG1CQWdKQSxJQWhKQSxFQWdKMEY7QUFBQSxnQkFBcEYsR0FBb0YsdUVBQTlFLFFBQThFO0FBQUEsZ0JBQXBFLE1BQW9FLHVFQUEzRCxLQUEyRDtBQUFBLGdCQUFwRCxNQUFvRCx1RUFBM0MsRUFBMkM7QUFBQSxnQkFBdkMsT0FBdUMsdUVBQTdCLFNBQTZCO0FBQUEsZ0JBQWxCLElBQWtCLHVFQUFYLFNBQVc7O0FBQy9GLGdCQUFJLE1BQU0sS0FBSyxJQUFMLENBQVUsS0FBVixFQUFpQixHQUFqQixDQUFWO0FBQ0EsZ0JBQUksT0FBTyxRQUFYLEVBQXFCO0FBQ2pCLHVCQUFPLE1BQU0sS0FBSyxhQUFMLENBQW9CLElBQXBCLEVBQTBCLE1BQTFCLENBQU4sR0FBMEMsT0FBakQ7QUFDSCxhQUZELE1BRU87QUFDSCx1QkFBTyxLQUFLLFNBQUwsQ0FBZ0IsS0FBSyxNQUFMLENBQWE7QUFDaEMsOEJBQVUsSUFEc0I7QUFFaEMsOEJBQVUsS0FBSyxLQUFMO0FBRnNCLGlCQUFiLEVBR3BCLE1BSG9CLENBQWhCLENBQVA7QUFJQSwwQkFBVTtBQUNOLG9DQUFnQixtQ0FEVjtBQUVOLHNDQUFrQixLQUFLLE1BRmpCO0FBR04sK0JBQVcsS0FBSyxNQUhWO0FBSU4sZ0NBQVksS0FBSyxJQUFMLENBQVcsS0FBSyxNQUFMLENBQWEsSUFBYixDQUFYLEVBQStCLEtBQUssTUFBTCxDQUFhLEtBQUssTUFBbEIsQ0FBL0IsRUFBMEQsUUFBMUQ7QUFKTixpQkFBVjtBQU1IO0FBQ0QsbUJBQU8sS0FBSyxLQUFMLENBQVksR0FBWixFQUFpQixNQUFqQixFQUF5QixPQUF6QixFQUFrQyxJQUFsQyxDQUFQO0FBQ0g7QUFqS1EsS0FBYjs7QUFvS0E7O0FBRUEsUUFBSSxVQUFVOztBQUVWLGNBQU0sU0FGSTtBQUdWLGdCQUFRLFNBSEU7QUFJVixxQkFBYSxDQUFFLElBQUYsRUFBUSxJQUFSLEVBQWMsSUFBZCxFQUFvQixJQUFwQixFQUEwQixJQUExQixDQUpIO0FBS1YscUJBQWEsSUFMSDtBQU1WLG1CQUFXLElBTkQ7QUFPVixnQkFBUTtBQUNKLG9CQUFRLHFHQURKO0FBRUosbUJBQU8seUJBRkg7QUFHSixtQkFBTyxxQkFISDtBQUlKLG1CQUFPO0FBSkgsU0FQRTtBQWFWLGVBQU87QUFDSCxzQkFBVTtBQUNOLHVCQUFPLENBQ0gsUUFERyxFQUVILFFBRkcsRUFHSCxPQUhHO0FBREQsYUFEUDtBQVFILHVCQUFXO0FBQ1Asd0JBQVEsQ0FDSixRQURJLEVBRUosTUFGSSxFQUdKLFFBSEksRUFJSixPQUpJLEVBS0osY0FMSSxFQU1KLE9BTkk7QUFERDtBQVJSLFNBYkc7QUFnQ1YsbUJBQVc7QUFDUCx1QkFBVyxFQUFFLE1BQU0sU0FBUixFQUFtQixVQUFVLFNBQTdCLEVBQXdDLFFBQVEsS0FBaEQsRUFBdUQsU0FBUyxLQUFoRSxFQURKO0FBRVAsdUJBQVcsRUFBRSxNQUFNLFNBQVIsRUFBbUIsVUFBVSxTQUE3QixFQUF3QyxRQUFRLEtBQWhELEVBQXVELFNBQVMsS0FBaEUsRUFGSjtBQUdQLHVCQUFXLEVBQUUsTUFBTSxTQUFSLEVBQW1CLFVBQVUsU0FBN0IsRUFBd0MsUUFBUSxLQUFoRCxFQUF1RCxTQUFTLEtBQWhFLEVBSEo7QUFJUCx1QkFBVyxFQUFFLE1BQU0sU0FBUixFQUFtQixVQUFVLFNBQTdCLEVBQXdDLFFBQVEsS0FBaEQsRUFBdUQsU0FBUyxLQUFoRSxFQUpKO0FBS1AsdUJBQVcsRUFBRSxNQUFNLFNBQVIsRUFBbUIsVUFBVSxTQUE3QixFQUF3QyxRQUFRLEtBQWhELEVBQXVELFNBQVMsS0FBaEU7QUFMSixTQWhDRDs7QUF3Q0osb0JBeENJO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQXlDZSxRQUFLLGVBQUwsRUF6Q2Y7QUFBQTtBQXlDRix3QkF6Q0U7QUEwQ0YsdUJBMUNFLEdBMENRLFNBQVMsUUFBVCxFQUFtQixRQUFuQixDQTFDUjtBQTJDRixzQkEzQ0UsR0EyQ08sRUFBRSxRQUFRLE9BQVYsRUEzQ1A7O0FBNENOLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksUUFBSyxVQUFMLENBQWdCLE1BQXBDLEVBQTRDLEdBQTVDLEVBQWlEO0FBQ3pDLDRCQUR5QyxHQUM5QixRQUFLLFVBQUwsQ0FBZ0IsQ0FBaEIsQ0FEOEI7QUFFekMsNkJBRnlDLEdBRTdCLFNBQVMsV0FBVCxFQUY2QjtBQUd6QywyQkFIeUMsR0FHL0I7QUFDVixnQ0FBUSxTQURFO0FBRVYsZ0NBQVEsU0FGRTtBQUdWLGlDQUFTO0FBSEMscUJBSCtCOztBQVE3Qyx3QkFBSSxhQUFhLE9BQWpCLEVBQTBCO0FBQ3RCLGdDQUFRLE1BQVIsSUFBa0IsV0FBWSxRQUFRLFNBQVIsRUFBbUIsT0FBbkIsQ0FBWixDQUFsQjtBQUNBLGdDQUFRLE1BQVIsSUFBa0IsV0FBWSxRQUFRLFNBQVIsRUFBbUIsTUFBbkIsQ0FBWixDQUFsQjtBQUNBLGdDQUFRLE9BQVIsSUFBbUIsUUFBSyxHQUFMLENBQVUsUUFBUSxNQUFSLENBQVYsRUFBMkIsUUFBUSxNQUFSLENBQTNCLENBQW5CO0FBQ0g7QUFDRCwyQkFBTyxRQUFQLElBQW1CLE9BQW5CO0FBQ0g7QUFDRCx1QkFBTyxNQUFQO0FBM0RNO0FBQUE7QUE4REosc0JBOURJLDBCQThEWSxNQTlEWjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQThEb0Isc0JBOURwQixnRkE4RDZCLEVBOUQ3QjtBQUFBLHVCQStEZSxRQUFLLGNBQUwsQ0FBcUIsUUFBSyxNQUFMLENBQWE7QUFDbkQsOEJBQVUsUUFBSyxRQUFMLENBQWUsTUFBZjtBQUR5QyxpQkFBYixFQUV2QyxNQUZ1QyxDQUFyQixDQS9EZjtBQUFBO0FBK0RGLHdCQS9ERTtBQWtFRix5QkFsRUUsR0FrRVUsU0FBUyxRQUFULENBbEVWO0FBbUVGLHlCQW5FRSxHQW1FVSxRQUFLLFlBQUwsRUFuRVY7QUFvRUYsc0JBcEVFLEdBb0VPO0FBQ1QsNEJBQVEsRUFEQztBQUVULDRCQUFRLEVBRkM7QUFHVCxpQ0FBYSxTQUhKO0FBSVQsZ0NBQVksUUFBSyxPQUFMLENBQWMsU0FBZDtBQUpILGlCQXBFUDtBQTBFRixxQkExRUUsR0EwRU0sQ0FBRSxNQUFGLEVBQVUsTUFBVixDQTFFTjs7QUEyRU4scUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxNQUFNLE1BQTFCLEVBQWtDLEdBQWxDLEVBQXVDO0FBQy9CLHdCQUQrQixHQUN4QixNQUFNLENBQU4sQ0FEd0I7QUFFL0IsMEJBRitCLEdBRXRCLFVBQVUsSUFBVixDQUZzQjs7QUFHbkMseUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxPQUFPLE1BQTNCLEVBQW1DLEdBQW5DLEVBQXdDO0FBQ2hDLDZCQURnQyxHQUN4QixPQUFPLENBQVAsQ0FEd0I7QUFFaEMsNkJBRmdDLEdBRXhCLFdBQVksTUFBTSxDQUFOLENBQVosQ0FGd0I7QUFHaEMsOEJBSGdDLEdBR3ZCLFdBQVksTUFBTSxDQUFOLENBQVosQ0FIdUI7O0FBSXBDLCtCQUFPLElBQVAsRUFBYSxJQUFiLENBQW1CLENBQUUsS0FBRixFQUFTLE1BQVQsQ0FBbkI7QUFDSDtBQUNKO0FBQ0QsdUJBQU8sTUFBUDtBQXJGTTtBQUFBO0FBd0ZKLG1CQXhGSSx1QkF3RlMsTUF4RlQ7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQXlGZSxRQUFLLGVBQUwsQ0FBc0I7QUFDdkMsOEJBQVUsUUFBSyxRQUFMLENBQWUsTUFBZjtBQUQ2QixpQkFBdEIsQ0F6RmY7QUFBQTtBQXlGRix3QkF6RkU7QUE0RkYsc0JBNUZFLEdBNEZPLFNBQVMsUUFBVCxDQTVGUDtBQTZGRix5QkE3RkUsR0E2RlUsUUFBSyxZQUFMLEVBN0ZWOztBQThGTix1QkFBTztBQUNILGlDQUFhLFNBRFY7QUFFSCxnQ0FBWSxRQUFLLE9BQUwsQ0FBYyxTQUFkLENBRlQ7QUFHSCw0QkFBUSxXQUFZLE9BQU8sTUFBUCxDQUFaLENBSEw7QUFJSCwyQkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBSko7QUFLSCwyQkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBTEo7QUFNSCwyQkFBTyxXQUFZLE9BQU8sTUFBUCxDQUFaLENBTko7QUFPSCw0QkFBUSxTQVBMO0FBUUgsNEJBQVEsU0FSTDtBQVNILDZCQUFTLFNBVE47QUFVSCw2QkFBUyxTQVZOO0FBV0gsNEJBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQVhMO0FBWUgsOEJBQVUsU0FaUDtBQWFILGtDQUFjLFNBYlg7QUFjSCwrQkFBVyxTQWRSO0FBZUgsa0NBQWMsU0FmWDtBQWdCSCxtQ0FBZSxXQUFZLE9BQU8sS0FBUCxDQUFaLENBaEJaO0FBaUJILDRCQUFRO0FBakJMLGlCQUFQO0FBOUZNO0FBQUE7QUFtSEosbUJBbkhJLHVCQW1IUyxNQW5IVDtBQUFBO0FBQUE7QUFBQTs7QUFtSGlCLGtCQW5IakIsZ0ZBbUgwQixFQW5IMUI7O0FBb0hOLG1CQUFPLFFBQUssZUFBTCxDQUFzQixRQUFLLE1BQUwsQ0FBYTtBQUN0QywwQkFBVSxRQUFLLFFBQUwsQ0FBZSxNQUFmO0FBRDRCLGFBQWIsRUFFMUIsTUFGMEIsQ0FBdEIsQ0FBUDtBQXBITTtBQXlISixtQkF6SEksdUJBeUhTLE1BekhULEVBeUhpQixJQXpIakIsRUF5SHVCLElBekh2QixFQXlINkIsTUF6SDdCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBeUhxQyxxQkF6SHJDLGdGQXlINkMsU0F6SDdDO0FBeUh3RCxzQkF6SHhELGdGQXlIaUUsRUF6SGpFO0FBMEhGLHFCQTFIRSxHQTBITTtBQUNSLDhCQUFVLFFBQUssUUFBTCxDQUFlLE1BQWYsQ0FERjtBQUVSLDBCQUFNLElBRkU7QUFHUiw4QkFBVTtBQUhGLGlCQTFITjs7QUErSE4sb0JBQUksUUFBUSxRQUFaLEVBQXNCO0FBQ2xCLDBCQUFNLFlBQU4sSUFBc0IsQ0FBdEI7QUFDQSwwQkFBTSxPQUFOLElBQWlCLEtBQWpCO0FBQ0gsaUJBSEQsTUFHTztBQUNILDBCQUFNLFlBQU4sSUFBc0IsQ0FBdEI7QUFDSDtBQXBJSyx1QkFxSWUsUUFBSyxnQkFBTCxDQUF1QixRQUFLLE1BQUwsQ0FBYSxLQUFiLEVBQW9CLE1BQXBCLENBQXZCLENBcklmO0FBQUE7QUFxSUYsd0JBcklFOztBQXNJTix1QkFBTztBQUNILDRCQUFRLFFBREw7QUFFSCwwQkFBTSxTQUFTLFFBQVQsRUFBbUIsSUFBbkIsRUFBeUIsUUFBekI7QUFGSCxpQkFBUDtBQXRJTTtBQUFBO0FBNElKLG1CQTVJSSx1QkE0SVMsRUE1SVQ7QUFBQTs7QUE2SU4sbUJBQU8sUUFBSyxpQkFBTCxDQUF3QixFQUFFLE1BQU0sRUFBUixFQUF4QixDQUFQO0FBN0lNO0FBZ0pKLGVBaEpJLG1CQWdKSyxJQWhKTDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFnSlcsbUJBaEpYLGdGQWdKaUIsUUFoSmpCO0FBZ0oyQixzQkFoSjNCLGdGQWdKb0MsS0FoSnBDO0FBZ0oyQyxzQkFoSjNDLGdGQWdKb0QsRUFoSnBEO0FBZ0p3RCx1QkFoSnhELGdGQWdKa0UsU0FoSmxFO0FBZ0o2RSxvQkFoSjdFLGdGQWdKb0YsU0FoSnBGO0FBaUpGLG1CQWpKRSxHQWlKSSxRQUFLLElBQUwsQ0FBVSxLQUFWLElBQW1CLEdBQW5CLEdBQXlCLFFBQUssT0FBOUIsR0FBd0MsR0FBeEMsR0FBOEMsSUFqSmxEOztBQWtKTixvQkFBSSxPQUFPLFFBQVgsRUFBcUI7QUFDakIsd0JBQUksT0FBTyxJQUFQLENBQWEsTUFBYixFQUFxQixNQUF6QjtBQUNJLCtCQUFPLE1BQU0sUUFBSyxTQUFMLENBQWdCLE1BQWhCLENBQWI7QUFESjtBQUVILGlCQUhELE1BR087QUFDQyx5QkFERCxHQUNTLFFBQUssS0FBTCxFQURUOztBQUVILDJCQUFPLFFBQUssU0FBTCxDQUFnQixRQUFLLE1BQUwsQ0FBYTtBQUNoQyxpQ0FBUztBQUR1QixxQkFBYixFQUVwQixNQUZvQixDQUFoQixDQUFQO0FBR0EsOEJBQVU7QUFDTix3Q0FBZ0IsbUNBRFY7QUFFTiwwQ0FBa0IsS0FBSyxNQUZqQjtBQUdOLCtCQUFPLFFBQUssTUFITjtBQUlOLGdDQUFRLFFBQUssSUFBTCxDQUFXLFFBQUssTUFBTCxDQUFhLElBQWIsQ0FBWCxFQUErQixRQUFLLE1BQXBDLEVBQTRDLFFBQTVDO0FBSkYscUJBQVY7QUFNSDtBQWhLSyx1QkFpS2UsUUFBSyxLQUFMLENBQVksR0FBWixFQUFpQixNQUFqQixFQUF5QixPQUF6QixFQUFrQyxJQUFsQyxDQWpLZjtBQUFBO0FBaUtGLHdCQWpLRTtBQUFBLHlCQWtLRixZQUFZLFFBbEtWOztBQW1LRiw4QkFBSSxTQUFTLFFBQVQsS0FBc0IsR0FBMUI7QUFDSSwyQkFBTyxRQUFQO0FBREo7QUFFSiwwQkFBTSxJQUFJLGFBQUosQ0FBbUIsUUFBSyxFQUFMLEdBQVUsR0FBVixHQUFnQixRQUFLLElBQUwsQ0FBVyxRQUFYLENBQW5DLENBQU47QUFGSTtBQW5LRTtBQUFBO0FBQUEsS0FBZDs7QUF5S0E7O0FBRUEsUUFBSSxjQUFjOztBQUVkLGNBQU0sYUFGUTtBQUdkLGdCQUFRLGVBSE07QUFJZCxxQkFBYSxJQUpDLEVBSUs7QUFDbkIsZ0JBQVE7QUFDSixvQkFBUSxxR0FESjtBQUVKLG1CQUFPO0FBQ0gsMEJBQVUsK0JBRFA7QUFFSCwyQkFBVztBQUZSLGFBRkg7QUFNSixtQkFBTywyQkFOSDtBQU9KLG1CQUFPLENBQ0gsdUVBREcsRUFFSCxxQ0FGRztBQVBILFNBTE07QUFpQmQsZUFBTztBQUNILHNCQUFVO0FBQ04sdUJBQU8sQ0FDSCxlQURHLEVBRUgsZUFGRyxFQUdILGNBSEc7QUFERCxhQURQO0FBUUgsdUJBQVc7QUFDUCx3QkFBUSxDQUNKLFNBREksRUFFSixjQUZJLEVBR0osT0FISSxFQUlKLGNBSkksRUFLSixZQUxJLEVBTUosYUFOSTtBQUREO0FBUlIsU0FqQk87QUFvQ2QsbUJBQVc7QUFDUCx1QkFBWSxFQUFFLE1BQU0sU0FBUixFQUFtQixVQUFVLFNBQTdCLEVBQXdDLFFBQVEsS0FBaEQsRUFBdUQsU0FBUyxLQUFoRSxFQUF1RSxVQUFVLEtBQWpGLEVBQXdGLFdBQVcsS0FBbkcsRUFETDtBQUVQLHVCQUFZLEVBQUUsTUFBTSxTQUFSLEVBQW1CLFVBQVUsU0FBN0IsRUFBd0MsUUFBUSxLQUFoRCxFQUF1RCxTQUFTLEtBQWhFLEVBQXVFLFVBQVUsS0FBakYsRUFBd0YsV0FBVyxLQUFuRyxFQUZMO0FBR1Asd0JBQVksRUFBRSxNQUFNLFNBQVIsRUFBbUIsVUFBVSxVQUE3QixFQUF5QyxRQUFRLE1BQWpELEVBQXlELFNBQVMsS0FBbEUsRUFBeUUsVUFBVSxLQUFuRixFQUEwRixXQUFXLEtBQXJHLEVBSEw7QUFJUCx3QkFBWSxFQUFFLE1BQU0sVUFBUixFQUFvQixVQUFVLFVBQTlCLEVBQTBDLFFBQVEsTUFBbEQsRUFBMEQsU0FBUyxLQUFuRSxFQUEwRSxVQUFVLE1BQXBGLEVBQTRGLFdBQVcsS0FBdkcsRUFKTDtBQUtQLHVCQUFZLEVBQUUsTUFBTSxTQUFSLEVBQW1CLFVBQVUsU0FBN0IsRUFBd0MsUUFBUSxLQUFoRCxFQUF1RCxTQUFTLEtBQWhFLEVBQXVFLFVBQVUsS0FBakYsRUFBd0YsV0FBVyxLQUFuRyxFQUxMO0FBTVAsdUJBQVksRUFBRSxNQUFNLFNBQVIsRUFBbUIsVUFBVSxTQUE3QixFQUF3QyxRQUFRLEtBQWhELEVBQXVELFNBQVMsS0FBaEUsRUFBdUUsVUFBVSxLQUFqRixFQUF3RixXQUFXLEtBQW5HLEVBTkw7QUFPUCx1QkFBWSxFQUFFLE1BQU0sU0FBUixFQUFtQixVQUFVLFNBQTdCLEVBQXdDLFFBQVEsS0FBaEQsRUFBdUQsU0FBUyxLQUFoRSxFQUF1RSxVQUFVLEtBQWpGLEVBQXdGLFdBQVcsS0FBbkcsRUFQTDtBQVFQLHVCQUFZLEVBQUUsTUFBTSxTQUFSLEVBQW1CLFVBQVUsU0FBN0IsRUFBd0MsUUFBUSxLQUFoRCxFQUF1RCxTQUFTLEtBQWhFLEVBQXVFLFVBQVUsS0FBakYsRUFBd0YsV0FBVyxLQUFuRyxFQVJMO0FBU1AsdUJBQVksRUFBRSxNQUFNLFNBQVIsRUFBbUIsVUFBVSxTQUE3QixFQUF3QyxRQUFRLEtBQWhELEVBQXVELFNBQVMsS0FBaEUsRUFBdUUsVUFBVSxLQUFqRixFQUF3RixXQUFXLEtBQW5HLEVBVEw7QUFVUCx1QkFBWSxFQUFFLE1BQU0sU0FBUixFQUFtQixVQUFVLFNBQTdCLEVBQXdDLFFBQVEsS0FBaEQsRUFBdUQsU0FBUyxLQUFoRSxFQUF1RSxVQUFVLEtBQWpGLEVBQXdGLFdBQVcsS0FBbkc7QUFWTCxTQXBDRzs7QUFpRFIsb0JBakRRO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBa0RXLFFBQUssa0JBQUwsRUFsRFg7QUFBQTtBQWtETix3QkFsRE07QUFtRE4sdUJBbkRNLEdBbURJLFNBQVMsUUFBVCxFQUFtQixTQUFuQixDQW5ESjtBQW9ETixzQkFwRE0sR0FvREcsU0FBUyxRQUFULEVBQW1CLGNBQW5CLENBcERIO0FBcUROLHNCQXJETSxHQXFERyxFQUFFLFFBQVEsT0FBVixFQXJESDs7QUFzRFYscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxRQUFLLFVBQUwsQ0FBZ0IsTUFBcEMsRUFBNEMsR0FBNUMsRUFBaUQ7QUFDekMsNEJBRHlDLEdBQzlCLFFBQUssVUFBTCxDQUFnQixDQUFoQixDQUQ4QjtBQUV6Qyw2QkFGeUMsR0FFN0IsU0FBUyxXQUFULEVBRjZCO0FBR3pDLDJCQUh5QyxHQUcvQjtBQUNWLGdDQUFRLFNBREU7QUFFVixnQ0FBUSxTQUZFO0FBR1YsaUNBQVM7QUFIQyxxQkFIK0I7O0FBUTdDLHdCQUFJLGFBQWEsT0FBakIsRUFBMEI7QUFDdEIsZ0NBQVEsTUFBUixJQUFrQixXQUFZLFFBQVEsU0FBUixDQUFaLENBQWxCO0FBQ0g7QUFDRCx3QkFBSSxhQUFhLE1BQWpCLEVBQXlCO0FBQ3JCLGdDQUFRLE1BQVIsSUFBa0IsV0FBWSxPQUFPLFNBQVAsQ0FBWixDQUFsQjtBQUNIO0FBQ0QsNEJBQVEsT0FBUixJQUFtQixRQUFLLEdBQUwsQ0FBVSxRQUFRLE1BQVIsQ0FBVixFQUEyQixRQUFRLE1BQVIsQ0FBM0IsQ0FBbkI7QUFDQSwyQkFBTyxRQUFQLElBQW1CLE9BQW5CO0FBQ0g7QUFDRCx1QkFBTyxNQUFQO0FBdkVVO0FBQUE7QUEwRVIsc0JBMUVRLDBCQTBFUSxNQTFFUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBMEVnQixzQkExRWhCLGdGQTBFeUIsRUExRXpCO0FBQUEsdUJBMkVZLFFBQUssa0JBQUwsQ0FBeUIsUUFBSyxNQUFMLENBQWE7QUFDeEQsNEJBQVEsUUFBSyxRQUFMLENBQWUsTUFBZjtBQURnRCxpQkFBYixFQUU1QyxNQUY0QyxDQUF6QixDQTNFWjtBQUFBO0FBMkVOLHlCQTNFTTtBQThFTix5QkE5RU0sR0E4RU0sUUFBSyxZQUFMLEVBOUVOO0FBK0VOLHNCQS9FTSxHQStFRztBQUNULDRCQUFRLEVBREM7QUFFVCw0QkFBUSxFQUZDO0FBR1QsaUNBQWEsU0FISjtBQUlULGdDQUFZLFFBQUssT0FBTCxDQUFjLFNBQWQ7QUFKSCxpQkEvRUg7QUFxRk4scUJBckZNLEdBcUZFLEVBQUUsUUFBUSxLQUFWLEVBQWlCLFFBQVEsTUFBekIsRUFyRkY7QUFzRk4sb0JBdEZNLEdBc0ZDLE9BQU8sSUFBUCxDQUFhLEtBQWIsQ0F0RkQ7O0FBdUZWLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksS0FBSyxNQUF6QixFQUFpQyxHQUFqQyxFQUFzQztBQUM5Qix1QkFEOEIsR0FDeEIsS0FBSyxDQUFMLENBRHdCO0FBRTlCLHdCQUY4QixHQUV2QixNQUFNLEdBQU4sQ0FGdUI7QUFHOUIsMEJBSDhCLEdBR3JCLFVBQVUsSUFBVixDQUhxQjs7QUFJbEMseUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxPQUFPLE1BQTNCLEVBQW1DLEdBQW5DLEVBQXdDO0FBQ2hDLDZCQURnQyxHQUN4QixPQUFPLENBQVAsQ0FEd0I7QUFFaEMsNkJBRmdDLEdBRXhCLFdBQVksTUFBTSxDQUFOLENBQVosQ0FGd0I7QUFHaEMsOEJBSGdDLEdBR3ZCLFdBQVksTUFBTSxDQUFOLENBQVosQ0FIdUI7O0FBSXBDLCtCQUFPLEdBQVAsRUFBWSxJQUFaLENBQWtCLENBQUUsS0FBRixFQUFTLE1BQVQsQ0FBbEI7QUFDSDtBQUNKO0FBQ0QsdUJBQU8sTUFBUDtBQWxHVTtBQUFBO0FBcUdSLG1CQXJHUSx1QkFxR0ssTUFyR0w7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQXNHTixvQkF0R00sR0FzR0MsUUFBSyxNQUFMLENBQWEsTUFBYixDQXRHRDtBQUFBLHVCQXVHVyxRQUFLLG1CQUFMLENBQTBCO0FBQzNDLDRCQUFRLEtBQUssSUFBTDtBQURtQyxpQkFBMUIsQ0F2R1g7QUFBQTtBQXVHTix3QkF2R007QUEwR04sc0JBMUdNLEdBMEdHLFNBQVMsUUFBVCxDQTFHSDtBQTJHTix5QkEzR00sR0EyR00sV0FBWSxPQUFPLGFBQVAsQ0FBWixJQUFxQyxJQTNHM0M7QUE0R04sMEJBNUdNLEdBNEdPLFNBQVMsS0FBSyxRQUFMLEVBQWUsV0FBZixFQTVHaEI7QUE2R04sMkJBN0dNLEdBNkdRLFNBQVMsS0FBSyxTQUFMLEVBQWdCLFdBQWhCLEVBN0dqQjs7QUE4R1YsdUJBQU87QUFDSCxpQ0FBYSxTQURWO0FBRUgsZ0NBQVksUUFBSyxPQUFMLENBQWMsU0FBZCxDQUZUO0FBR0gsNEJBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQUhMO0FBSUgsMkJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQUpKO0FBS0gsMkJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQUxKO0FBTUgsMkJBQU8sV0FBWSxPQUFPLE1BQVAsQ0FBWixDQU5KO0FBT0gsNEJBQVEsU0FQTDtBQVFILDRCQUFRLFNBUkw7QUFTSCw2QkFBUyxTQVROO0FBVUgsNkJBQVMsU0FWTjtBQVdILDRCQUFRLFdBQVksT0FBTyxNQUFQLENBQVosQ0FYTDtBQVlILDhCQUFVLFNBWlA7QUFhSCxrQ0FBYyxTQWJYO0FBY0gsK0JBQVcsU0FkUjtBQWVILGtDQUFjLFdBQVksT0FBTyxVQUFQLENBQVosQ0FmWDtBQWdCSCxtQ0FBZSxXQUFZLE9BQU8sV0FBUCxDQUFaLENBaEJaO0FBaUJILDRCQUFRO0FBakJMLGlCQUFQO0FBOUdVO0FBQUE7QUFtSVIsbUJBbklRLHVCQW1JSyxNQW5JTDtBQUFBO0FBQUE7QUFBQTs7QUFtSWEsa0JBbkliLGdGQW1Jc0IsRUFuSXRCOztBQW9JVixtQkFBTyxRQUFLLG1CQUFMLENBQTBCLFFBQUssTUFBTCxDQUFhO0FBQzFDLHdCQUFRLFFBQUssUUFBTCxDQUFlLE1BQWY7QUFEa0MsYUFBYixFQUU5QixNQUY4QixDQUExQixDQUFQO0FBcElVO0FBeUlSLG1CQXpJUSx1QkF5SUssTUF6SUwsRUF5SWEsSUF6SWIsRUF5SW1CLElBekluQixFQXlJeUIsTUF6SXpCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUF5SWlDLGlCQXpJakMsZ0ZBeUl5QyxTQXpJekM7QUF5SW9ELGtCQXpJcEQsZ0ZBeUk2RCxFQXpJN0Q7QUEwSU4sYUExSU0sR0EwSUYsUUFBSyxNQUFMLENBQWEsTUFBYixDQTFJRTtBQTJJTixpQkEzSU0sR0EySUU7QUFDUix3QkFBUSxFQUFFLElBQUYsQ0FEQTtBQUVSLHdCQUFRLElBRkE7QUFHUix5QkFBUztBQUhELGFBM0lGO0FBZ0pOLGdCQWhKTSxHQWdKQyxFQUFFLE1BQUYsRUFBVSxXQUFWLEVBaEpEOztBQWlKVixrQkFBTSxJQUFOLElBQWMsTUFBZDtBQUNJLGtCQWxKTSxHQWtKRyxRQUFLLGdCQUFMLENBQXVCLFFBQUssTUFBTCxDQUFhLEtBQWIsRUFBb0IsTUFBcEIsQ0FBdkIsQ0FsSkg7O0FBbUpWLG1CQUFPO0FBQ0gsd0JBQVEsTUFETDtBQUVILHNCQUFNLE9BQU8sUUFBUCxFQUFpQixVQUFqQixFQUE2QixRQUE3QjtBQUZILGFBQVA7QUFuSlU7QUF5SlIsbUJBekpRLHVCQXlKSyxFQXpKTDtBQUFBO0FBQUE7QUFBQTs7QUF5SlMsa0JBekpULGdGQXlKa0IsRUF6SmxCOztBQTBKVixtQkFBTyxRQUFLLHNCQUFMLENBQTZCLFFBQUssTUFBTCxDQUFhO0FBQzdDLHNCQUFNO0FBRHVDLGFBQWIsRUFFakMsTUFGaUMsQ0FBN0IsQ0FBUDtBQTFKVTtBQStKUixlQS9KUSxtQkErSkMsSUEvSkQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUErSk8sbUJBL0pQLGdGQStKYSxRQS9KYjtBQStKdUIsc0JBL0p2QixnRkErSmdDLEtBL0poQztBQStKdUMsc0JBL0p2QyxnRkErSmdELEVBL0poRDtBQStKb0QsdUJBL0pwRCxnRkErSjhELFNBL0o5RDtBQStKeUUsb0JBL0p6RSxnRkErSmdGLFNBL0poRjtBQWdLTixtQkFoS00sR0FnS0EsUUFBSyxJQUFMLENBQVUsS0FBVixFQUFpQixHQUFqQixDQWhLQTs7QUFpS1Ysb0JBQUksT0FBTyxRQUFYLEVBQXFCO0FBQ2pCLDJCQUFPLE1BQU0sUUFBSyxhQUFMLENBQW9CLElBQXBCLEVBQTBCLE1BQTFCLENBQWI7QUFDSCxpQkFGRCxNQUVPO0FBQ0gsMkJBQU8sUUFBSyxTQUFMLENBQWdCLFFBQUssTUFBTCxDQUFhO0FBQ2hDLGtDQUFVLElBRHNCO0FBRWhDLGlDQUFTLFFBQUssS0FBTDtBQUZ1QixxQkFBYixFQUdwQixNQUhvQixDQUFoQixDQUFQO0FBSUEsOEJBQVU7QUFDTix3Q0FBZ0IsbUNBRFY7QUFFTiwwQ0FBa0IsS0FBSyxNQUZqQjtBQUdOLCtCQUFPLFFBQUssTUFITjtBQUlOLGdDQUFRLFFBQUssSUFBTCxDQUFXLFFBQUssTUFBTCxDQUFhLElBQWIsQ0FBWCxFQUErQixRQUFLLE1BQUwsQ0FBYSxRQUFLLE1BQWxCLENBQS9CLEVBQTBELFFBQTFEO0FBSkYscUJBQVY7QUFNSDtBQTlLUyx1QkErS1csUUFBSyxLQUFMLENBQVksR0FBWixFQUFpQixNQUFqQixFQUF5QixPQUF6QixFQUFrQyxJQUFsQyxDQS9LWDtBQUFBO0FBK0tOLHdCQS9LTTs7QUFnTFYsb0JBQUksV0FBVyxRQUFmO0FBQ0ksMEJBQU0sSUFBSSxhQUFKLENBQW1CLFFBQUssRUFBTCxHQUFVLEdBQVYsR0FBZ0IsU0FBUyxPQUFULENBQW5DLENBQU47QUFESixpQkFFQSxPQUFPLFFBQVA7QUFsTFU7QUFBQTtBQUFBLEtBQWxCOztBQXNMQTs7QUFFQSxRQUFJLFdBQVc7O0FBRVgsY0FBTSxVQUZLO0FBR1gsZ0JBQVEsVUFIRztBQUlYLHFCQUFhLElBSkY7QUFLWCxtQkFBVyxJQUxBO0FBTVgscUJBQWEsSUFORjtBQU9YLGdCQUFRO0FBQ0osb0JBQVEscUdBREo7QUFFSixtQkFBTywwQkFGSDtBQUdKLG1CQUFPLDBCQUhIO0FBSUosbUJBQU8sQ0FDSCxvQ0FERyxFQUVILG9DQUZHLEVBR0gsa0RBSEc7QUFKSCxTQVBHO0FBaUJYLGVBQU87QUFDSCxzQkFBVTtBQUNOLHVCQUFPLENBQ0gsZUFERyxFQUVILGtCQUZHLEVBR0gscUJBSEcsRUFJSCxrQkFKRyxFQUtILG9CQUxHLEVBTUgsZ0JBTkcsRUFPSCxTQVBHLEVBUUgsaUJBUkcsRUFTSCxPQVRHLEVBVUgsaUJBVkc7QUFERCxhQURQO0FBZUgsdUJBQVc7QUFDUCx3QkFBUSxDQUNKLGVBREksRUFFSixVQUZJLEVBR0osZUFISSxFQUlKLFNBSkksRUFLSixhQUxJLEVBTUosZUFOSSxFQU9KLFNBUEksRUFRSixtQkFSSSxFQVNKLFVBVEksRUFVSixjQVZJLEVBV0osVUFYSSxFQVlKLGNBWkksRUFhSixXQWJJLEVBY0osY0FkSSxFQWVKLFFBZkksRUFnQkosY0FoQkksRUFpQkosa0JBakJJLEVBa0JKLG9CQWxCSSxFQW1CSixzQkFuQkksRUFvQkosV0FwQkksRUFxQkosaUJBckJJLEVBc0JKLGNBdEJJLEVBdUJKLFFBdkJJLEVBd0JKLGdCQXhCSSxFQXlCSixXQXpCSSxFQTBCSixTQTFCSSxFQTJCSixhQTNCSSxFQTRCSixtQkE1QkksRUE2QkosVUE3QkksRUE4Qkosb0JBOUJJLEVBK0JKLFVBL0JJO0FBREQ7QUFmUixTQWpCSTs7QUFxRUwsb0JBckVLO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQXNFYSxRQUFLLHVCQUFMLEVBdEViO0FBQUE7QUFzRUgsdUJBdEVHO0FBdUVILHNCQXZFRyxHQXVFTSxFQXZFTjs7QUF3RVAscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxRQUFRLE1BQTVCLEVBQW9DLEdBQXBDLEVBQXlDO0FBQ2pDLDBCQURpQyxHQUN4QixRQUFRLENBQVIsQ0FEd0I7QUFFakMsc0JBRmlDLEdBRTVCLE9BQU8sTUFBUCxFQUFlLFdBQWYsRUFGNEI7QUFHakMsMEJBSGlDLEdBR3hCLEdBQUcsS0FBSCxDQUFVLENBQVYsRUFBYSxDQUFiLENBSHdCO0FBSWpDLDJCQUppQyxHQUl2QixHQUFHLEtBQUgsQ0FBVSxDQUFWLEVBQWEsQ0FBYixDQUp1QjtBQUtqQyx3QkFMaUMsR0FLMUIsTUFMMEI7QUFNakMseUJBTmlDLEdBTXpCLE9BTnlCO0FBT3JDOztBQUNBLHdCQUFJLFFBQVEsS0FBWjtBQUNJLCtCQUFPLE1BQVA7QUFESixxQkFFSSxNQVZpQyxHQVV4QixPQUFPLEdBQVAsR0FBYSxLQVZXOztBQVdyQywyQkFBTyxJQUFQLENBQWE7QUFDVCw4QkFBTSxFQURHO0FBRVQsa0NBQVUsTUFGRDtBQUdULGdDQUFRLElBSEM7QUFJVCxpQ0FBUyxLQUpBO0FBS1Qsa0NBQVUsTUFMRDtBQU1ULG1DQUFXLE9BTkY7QUFPVCxnQ0FBUTtBQVBDLHFCQUFiO0FBU0g7QUFDRCx1QkFBTyxNQUFQO0FBN0ZPO0FBQUE7QUFnR0wsb0JBaEdLO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQWlHRCxRQUFLLFdBQUwsRUFqR0M7QUFBQTtBQUFBLHVCQWtHYyxRQUFLLG1CQUFMLEVBbEdkO0FBQUE7QUFrR0gsd0JBbEdHO0FBbUdILHdCQW5HRyxHQW1HUSxFQW5HUjs7QUFvR1AscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxTQUFTLE1BQTdCLEVBQXFDLEdBQXJDLEVBQTBDO0FBQ2xDLDJCQURrQyxHQUN4QixTQUFTLENBQVQsQ0FEd0I7O0FBRXRDLHdCQUFJLFFBQVEsTUFBUixLQUFtQixVQUF2QixFQUFtQztBQUMzQixnQ0FEMkIsR0FDaEIsUUFBUSxVQUFSLENBRGdCO0FBRS9COztBQUNBLDRCQUFJLFlBQVksS0FBaEI7QUFDSSx1Q0FBVyxNQUFYO0FBREoseUJBRUksU0FMMkIsR0FLZixTQUFTLFdBQVQsRUFMZTs7QUFNL0IsaUNBQVMsU0FBVCxJQUFzQixPQUF0QjtBQUNIO0FBQ0o7QUFDRyxzQkEvR0csR0ErR00sRUFBRSxRQUFRLFFBQVYsRUEvR047O0FBZ0hQLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksUUFBSyxVQUFMLENBQWdCLE1BQXBDLEVBQTRDLEdBQTVDLEVBQWlEO0FBQ3pDLDZCQUR5QyxHQUM5QixRQUFLLFVBQUwsQ0FBZ0IsQ0FBaEIsQ0FEOEI7QUFFekMsNEJBRnlDLEdBRS9CO0FBQ1YsZ0NBQVEsU0FERTtBQUVWLGdDQUFRLFNBRkU7QUFHVixpQ0FBUztBQUhDLHFCQUYrQjs7QUFPN0Msd0JBQUksYUFBWSxRQUFoQixFQUEwQjtBQUN0QixpQ0FBUSxNQUFSLElBQWtCLFdBQVksU0FBUyxTQUFULEVBQW1CLFdBQW5CLENBQVosQ0FBbEI7QUFDQSxpQ0FBUSxPQUFSLElBQW1CLFdBQVksU0FBUyxTQUFULEVBQW1CLFFBQW5CLENBQVosQ0FBbkI7QUFDQSxpQ0FBUSxNQUFSLElBQWtCLFNBQVEsT0FBUixJQUFtQixTQUFRLE1BQVIsQ0FBckM7QUFDSDtBQUNELDJCQUFPLFNBQVAsSUFBbUIsUUFBbkI7QUFDSDtBQUNELHVCQUFPLE1BQVA7QUE5SE87QUFBQTtBQWlJTCxzQkFqSUssMEJBaUlXLE1BaklYO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBaUltQixzQkFqSW5CLGdGQWlJNEIsRUFqSTVCO0FBQUEsdUJBa0lELFFBQUssV0FBTCxFQWxJQztBQUFBO0FBQUEsdUJBbUllLFFBQUssbUJBQUwsQ0FBMEIsUUFBSyxNQUFMLENBQWE7QUFDekQsOEJBQVUsUUFBSyxRQUFMLENBQWUsTUFBZjtBQUQrQyxpQkFBYixFQUU3QyxNQUY2QyxDQUExQixDQW5JZjtBQUFBO0FBbUlILHlCQW5JRztBQXNJSCx5QkF0SUcsR0FzSVMsUUFBSyxZQUFMLEVBdElUO0FBdUlILHNCQXZJRyxHQXVJTTtBQUNULDRCQUFRLEVBREM7QUFFVCw0QkFBUSxFQUZDO0FBR1QsaUNBQWEsU0FISjtBQUlULGdDQUFZLFFBQUssT0FBTCxDQUFjLFNBQWQ7QUFKSCxpQkF2SU47QUE2SUgscUJBN0lHLEdBNklLLENBQUUsTUFBRixFQUFVLE1BQVYsQ0E3SUw7O0FBOElQLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksTUFBTSxNQUExQixFQUFrQyxHQUFsQyxFQUF1QztBQUMvQix3QkFEK0IsR0FDeEIsTUFBTSxDQUFOLENBRHdCO0FBRS9CLDBCQUYrQixHQUV0QixVQUFVLElBQVYsQ0FGc0I7O0FBR25DLHlCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksT0FBTyxNQUEzQixFQUFtQyxHQUFuQyxFQUF3QztBQUNoQyw2QkFEZ0MsR0FDeEIsT0FBTyxDQUFQLENBRHdCO0FBRWhDLDZCQUZnQyxHQUV4QixXQUFZLE1BQU0sT0FBTixDQUFaLENBRndCO0FBR2hDLDhCQUhnQyxHQUd2QixXQUFZLE1BQU0sUUFBTixDQUFaLENBSHVCO0FBSWhDLG1DQUpnQyxHQUlwQixTQUFVLFdBQVksTUFBTSxXQUFOLENBQVosQ0FBVixDQUpvQjs7QUFLcEMsK0JBQU8sSUFBUCxFQUFhLElBQWIsQ0FBbUIsQ0FBRSxLQUFGLEVBQVMsTUFBVCxFQUFpQixXQUFqQixDQUFuQjtBQUNIO0FBQ0o7QUFDRCx1QkFBTyxNQUFQO0FBekpPO0FBQUE7QUE0SkwsbUJBNUpLLHVCQTRKUSxNQTVKUjtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQTZKRCxRQUFLLFdBQUwsRUE3SkM7QUFBQTtBQUFBLHVCQThKWSxRQUFLLHdCQUFMLENBQStCO0FBQzlDLDhCQUFVLFFBQUssUUFBTCxDQUFlLE1BQWY7QUFEb0MsaUJBQS9CLENBOUpaO0FBQUE7QUE4Skgsc0JBOUpHO0FBaUtILHlCQWpLRyxHQWlLUyxXQUFZLE9BQU8sV0FBUCxDQUFaLElBQW1DLElBaks1Qzs7QUFrS1AsdUJBQU87QUFDSCxpQ0FBYSxTQURWO0FBRUgsZ0NBQVksUUFBSyxPQUFMLENBQWMsU0FBZCxDQUZUO0FBR0gsNEJBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQUhMO0FBSUgsMkJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQUpKO0FBS0gsMkJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQUxKO0FBTUgsMkJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQU5KO0FBT0gsNEJBQVEsU0FQTDtBQVFILDRCQUFRLFNBUkw7QUFTSCw2QkFBUyxTQVROO0FBVUgsNkJBQVMsU0FWTjtBQVdILDRCQUFRLFdBQVksT0FBTyxZQUFQLENBQVosQ0FYTDtBQVlILDhCQUFVLFNBWlA7QUFhSCxrQ0FBYyxTQWJYO0FBY0gsK0JBQVcsV0FBWSxPQUFPLEtBQVAsQ0FBWixDQWRSO0FBZUgsa0NBQWMsU0FmWDtBQWdCSCxtQ0FBZSxXQUFZLE9BQU8sUUFBUCxDQUFaLENBaEJaO0FBaUJILDRCQUFRO0FBakJMLGlCQUFQO0FBbEtPO0FBQUE7QUF1TFgsa0JBdkxXLHNCQXVMQyxLQXZMRCxFQXVMUSxNQXZMUixFQXVMZ0I7QUFDdkIsZ0JBQUksWUFBWSxNQUFNLFdBQU4sSUFBcUIsSUFBckM7QUFDQSxtQkFBTztBQUNILHNCQUFNLE1BQU0sS0FBTixFQUFhLFFBQWIsRUFESDtBQUVILHdCQUFRLEtBRkw7QUFHSCw2QkFBYSxTQUhWO0FBSUgsNEJBQVksS0FBSyxPQUFMLENBQWMsU0FBZCxDQUpUO0FBS0gsMEJBQVUsT0FBTyxRQUFQLENBTFA7QUFNSCx3QkFBUSxTQU5MO0FBT0gsd0JBQVEsTUFBTSxNQUFOLENBUEw7QUFRSCx5QkFBUyxXQUFZLE1BQU0sT0FBTixDQUFaLENBUk47QUFTSCwwQkFBVSxXQUFZLE1BQU0sUUFBTixDQUFaO0FBVFAsYUFBUDtBQVdILFNBcE1VO0FBc01MLG1CQXRNSyx1QkFzTVEsTUF0TVI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBc01nQixzQkF0TWhCLGdGQXNNeUIsRUF0TXpCO0FBQUEsdUJBdU1ELFFBQUssV0FBTCxFQXZNQztBQUFBO0FBd01ILGlCQXhNRyxHQXdNQyxRQUFLLE1BQUwsQ0FBYSxNQUFiLENBeE1EO0FBQUEsdUJBeU1ZLFFBQUsscUJBQUwsQ0FBNEIsUUFBSyxNQUFMLENBQWE7QUFDeEQsOEJBQVUsRUFBRSxJQUFGO0FBRDhDLGlCQUFiLEVBRTVDLE1BRjRDLENBQTVCLENBek1aO0FBQUE7QUF5TUgsc0JBek1HOztBQTRNUCx1QkFBTyxRQUFLLFdBQUwsQ0FBa0IsTUFBbEIsRUFBMEIsQ0FBMUIsQ0FBUDtBQTVNTztBQUFBO0FBK01MLG1CQS9NSyx1QkErTVEsTUEvTVIsRUErTWdCLElBL01oQixFQStNc0IsSUEvTXRCLEVBK000QixNQS9NNUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUErTW9DLHFCQS9NcEMsZ0ZBK000QyxTQS9NNUM7QUErTXVELHNCQS9NdkQsZ0ZBK01nRSxFQS9NaEU7QUFBQSx1QkFnTkQsUUFBSyxXQUFMLEVBaE5DO0FBQUE7QUFpTkgscUJBak5HLEdBaU5LO0FBQ1IsOEJBQVUsUUFBSyxRQUFMLENBQWUsTUFBZixDQURGO0FBRVIsOEJBQVUsT0FBTyxRQUFQLEVBRkY7QUFHUiw0QkFBUSxJQUhBO0FBSVIsNEJBQVEsY0FBYyxJQUpkO0FBS1IsZ0NBQVksS0FMSjtBQU1SLHFDQUFpQixDQU5UO0FBT1Isc0NBQWtCO0FBUFYsaUJBak5MOztBQTBOUCxvQkFBSSxRQUFRLFFBQVosRUFBc0I7QUFDbEIsMEJBQU0sT0FBTixJQUFpQixRQUFLLEtBQUwsR0FBYyxRQUFkLEVBQWpCO0FBQ0gsaUJBRkQsTUFFTztBQUNILDBCQUFNLE9BQU4sSUFBaUIsTUFBTSxRQUFOLEVBQWpCO0FBQ0g7QUE5Tk0sdUJBK05ZLFFBQUssbUJBQUwsQ0FBMEIsUUFBSyxNQUFMLENBQWEsS0FBYixFQUFvQixNQUFwQixDQUExQixDQS9OWjtBQUFBO0FBK05ILHNCQS9ORzs7QUFnT1AsdUJBQU87QUFDSCw0QkFBUSxNQURMO0FBRUgsMEJBQU0sT0FBTyxVQUFQLEVBQW1CLFFBQW5CO0FBRkgsaUJBQVA7QUFoT087QUFBQTtBQXNPTCxtQkF0T0ssdUJBc09RLEVBdE9SO0FBQUE7O0FBQUE7QUFBQSx1QkF1T0QsUUFBSyxXQUFMLEVBdk9DO0FBQUE7QUF3T1AsdUJBQU8sUUFBSyxzQkFBTCxDQUE2QixFQUFFLFlBQVksRUFBZCxFQUE3QixDQUFQO0FBeE9PO0FBQUE7QUEyT1gsYUEzT1csbUJBMk9GO0FBQ0wsbUJBQU8sS0FBSyxZQUFMLEVBQVA7QUFDSCxTQTdPVTtBQStPTCxlQS9PSyxtQkErT0ksSUEvT0o7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUErT1UsbUJBL09WLGdGQStPZ0IsUUEvT2hCO0FBK08wQixzQkEvTzFCLGdGQStPbUMsS0EvT25DO0FBK08wQyxzQkEvTzFDLGdGQStPbUQsRUEvT25EO0FBK091RCx1QkEvT3ZELGdGQStPaUUsU0EvT2pFO0FBK080RSxvQkEvTzVFLGdGQStPbUYsU0EvT25GO0FBZ1BILHVCQWhQRyxHQWdQTyxNQUFNLFFBQUssT0FBWCxHQUFxQixHQUFyQixHQUEyQixRQUFLLGFBQUwsQ0FBb0IsSUFBcEIsRUFBMEIsTUFBMUIsQ0FoUGxDO0FBaVBILHFCQWpQRyxHQWlQSyxRQUFLLElBQUwsQ0FBVyxNQUFYLEVBQW1CLFFBQUssYUFBTCxDQUFvQixJQUFwQixDQUFuQixDQWpQTDtBQWtQSCxtQkFsUEcsR0FrUEcsUUFBSyxJQUFMLENBQVUsS0FBVixJQUFtQixPQWxQdEI7O0FBbVBQLG9CQUFJLE9BQU8sUUFBWCxFQUFxQjtBQUNqQix3QkFBSSxPQUFPLElBQVAsQ0FBYSxLQUFiLEVBQW9CLE1BQXhCO0FBQ0ksK0JBQU8sTUFBTSxRQUFLLFNBQUwsQ0FBZ0IsS0FBaEIsQ0FBYjtBQURKO0FBRUgsaUJBSEQsTUFHTztBQUNDLHlCQURELEdBQ1MsUUFBSyxLQUFMLEVBRFQ7O0FBRUgsNEJBQVEsUUFBSyxNQUFMLENBQWE7QUFDakIsaUNBQVMsTUFBTSxRQUFOLEVBRFE7QUFFakIsbUNBQVc7QUFGTSxxQkFBYixFQUdMLEtBSEssQ0FBUjtBQUlBLDRCQUFRLFFBQUssSUFBTCxDQUFXLEtBQVgsQ0FBUjtBQUNBLDRCQUFRLFFBQUssTUFBTCxDQUFhLEtBQWIsQ0FBUjtBQUNJLDJCQVJELEdBUVcsUUFBSyxjQUFMLENBQXFCLEtBQXJCLENBUlg7QUFTQywwQkFURCxHQVNVLFFBQUssTUFBTCxDQUFhLFFBQUssTUFBbEIsQ0FUVjtBQVVDLDZCQVZELEdBVWEsUUFBSyxJQUFMLENBQVcsT0FBWCxFQUFvQixNQUFwQixFQUE0QixRQUE1QixDQVZiOztBQVdILDhCQUFVO0FBQ04sd0NBQWdCLFFBQUssTUFEZjtBQUVOLHlDQUFpQixRQUFLLE1BQUwsQ0FBYSxPQUFiLENBRlg7QUFHTiwyQ0FBbUI7QUFIYixxQkFBVjtBQUtIO0FBdFFNLHVCQXVRYyxRQUFLLEtBQUwsQ0FBWSxHQUFaLEVBQWlCLE1BQWpCLEVBQXlCLE9BQXpCLEVBQWtDLElBQWxDLENBdlFkO0FBQUE7QUF1UUgsd0JBdlFHOztBQXdRUCxvQkFBSSxhQUFhLFFBQWpCO0FBQ0ksMEJBQU0sSUFBSSxhQUFKLENBQW1CLFFBQUssRUFBTCxHQUFVLEdBQVYsR0FBZ0IsUUFBSyxJQUFMLENBQVcsUUFBWCxDQUFuQyxDQUFOO0FBREosaUJBRUEsT0FBTyxRQUFQO0FBMVFPO0FBQUE7QUFBQSxLQUFmOztBQThRQTs7QUFFQSxRQUFJLFdBQVc7O0FBRVgsY0FBTSxVQUZLO0FBR1gsZ0JBQVEsVUFIRztBQUlYLHFCQUFhLElBSkY7QUFLWCxtQkFBVyxJQUxBO0FBTVgscUJBQWEsR0FORjtBQU9YLGdCQUFRO0FBQ0osb0JBQVEscUdBREo7QUFFSixtQkFBTyx5QkFGSDtBQUdKLG1CQUFPLHFCQUhIO0FBSUosbUJBQU87QUFKSCxTQVBHO0FBYVgsZUFBTztBQUNILHNCQUFVO0FBQ04sdUJBQU8sQ0FDSCxZQURHLEVBQ2M7QUFDakIsMEJBRkcsRUFFYztBQUNqQiwyQkFIRyxFQUdjO0FBQ2pCLCtCQUpHLEVBSWM7QUFDakIsMkJBTEcsRUFNSCxVQU5HO0FBREQsYUFEUDtBQVdILHVCQUFXO0FBQ1AsdUJBQU8sQ0FDSCxnQkFERyxFQUVILFlBRkcsRUFHSCxlQUhHLEVBSUgsdUJBSkcsRUFLSCxjQUxHLEVBTUgsWUFORyxFQU9ILGFBUEcsRUFRSCxpQkFSRyxFQVNILGFBVEcsRUFVSCxnQkFWRyxFQVdILGdCQVhHLEVBWUgsaUJBWkcsRUFhSCxnQkFiRyxFQWNILGVBZEcsRUFlSCxjQWZHLEVBZ0JILHNCQWhCRyxDQURBO0FBbUJQLHdCQUFRLENBQ0osVUFESSxFQUVKLFVBRkksRUFHSixnQkFISSxFQUlKLGtCQUpJLEVBS0osaUJBTEksRUFNSixtQkFOSSxFQU9KLHNCQVBJO0FBbkJEO0FBWFIsU0FiSTs7QUF1REwsb0JBdkRLO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQXdEYSxRQUFLLGdCQUFMLEVBeERiO0FBQUE7QUF3REgsdUJBeERHO0FBeURILHNCQXpERyxHQXlETSxFQXpETjs7QUEwRFAscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxRQUFRLE1BQTVCLEVBQW9DLEdBQXBDLEVBQXlDO0FBQ2pDLDBCQURpQyxHQUN4QixRQUFRLENBQVIsQ0FEd0I7QUFFakMsc0JBRmlDLEdBRTVCLE9BQU8sY0FBUCxDQUY0QjtBQUdqQyw4QkFIaUMsR0FHcEIsR0FBRyxLQUFILENBQVUsR0FBVixDQUhvQjtBQUlqQyx3QkFKaUMsR0FJMUIsU0FKMEI7QUFLakMseUJBTGlDLEdBS3pCLFNBTHlCO0FBTWpDLDBCQU5pQyxHQU14QixFQU53QjtBQU9qQyxpQ0FQaUMsR0FPakIsV0FBVyxNQVBNOztBQVFyQyx3QkFBSSxpQkFBaUIsQ0FBckIsRUFBd0I7QUFDcEIsK0JBQU8sV0FBVyxDQUFYLENBQVA7QUFDQSxnQ0FBUSxXQUFXLENBQVgsQ0FBUjtBQUNBLGlDQUFTLE9BQU8sR0FBUCxHQUFhLEtBQXRCO0FBQ0g7QUFDRCwyQkFBTyxJQUFQLENBQWE7QUFDVCw4QkFBTSxFQURHO0FBRVQsa0NBQVUsTUFGRDtBQUdULGdDQUFRLElBSEM7QUFJVCxpQ0FBUyxLQUpBO0FBS1QsZ0NBQVE7QUFMQyxxQkFBYjtBQU9IO0FBQ0QsdUJBQU8sTUFBUDtBQS9FTztBQUFBO0FBa0ZMLG9CQWxGSztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBbUZELFFBQUssV0FBTCxFQW5GQztBQUFBO0FBQUEsdUJBb0ZjLFFBQUssaUJBQUwsRUFwRmQ7QUFBQTtBQW9GSCx3QkFwRkc7QUFxRkgsd0JBckZHLEdBcUZRLEVBckZSOztBQXNGUCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFNBQVMsTUFBN0IsRUFBcUMsR0FBckMsRUFBMEM7QUFDbEMsMkJBRGtDLEdBQ3hCLFNBQVMsQ0FBVCxDQUR3QjtBQUVsQyw0QkFGa0MsR0FFdkIsUUFBUSxlQUFSLENBRnVCOztBQUd0Qyw2QkFBUyxRQUFULElBQXFCLE9BQXJCO0FBQ0g7QUFDRyxzQkEzRkcsR0EyRk0sRUFBRSxRQUFRLFFBQVYsRUEzRk47O0FBNEZQLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksUUFBSyxVQUFMLENBQWdCLE1BQXBDLEVBQTRDLEdBQTVDLEVBQWlEO0FBQ3pDLDhCQUR5QyxHQUM5QixRQUFLLFVBQUwsQ0FBZ0IsQ0FBaEIsQ0FEOEI7QUFFekMsNkJBRnlDLEdBRS9CO0FBQ1YsZ0NBQVEsU0FERTtBQUVWLGdDQUFRLFNBRkU7QUFHVixpQ0FBUztBQUhDLHFCQUYrQjs7QUFPN0Msd0JBQUksY0FBWSxRQUFoQixFQUEwQjtBQUN0QixrQ0FBUSxPQUFSLElBQW1CLFNBQVMsVUFBVCxFQUFtQixRQUFuQixDQUFuQjtBQUNBLGtDQUFRLE1BQVIsSUFBa0IsU0FBUyxVQUFULEVBQW1CLFdBQW5CLENBQWxCO0FBQ0Esa0NBQVEsTUFBUixJQUFrQixVQUFRLE9BQVIsSUFBbUIsVUFBUSxNQUFSLENBQXJDO0FBQ0g7QUFDRCwyQkFBTyxVQUFQLElBQW1CLFNBQW5CO0FBQ0g7QUFDRCx1QkFBTyxNQUFQO0FBMUdPO0FBQUE7QUE2R0wsc0JBN0dLLDBCQTZHVyxNQTdHWDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUE2R21CLHNCQTdHbkIsZ0ZBNkc0QixFQTdHNUI7QUFBQSx1QkE4R0QsUUFBSyxXQUFMLEVBOUdDO0FBQUE7QUFBQSx1QkErR2UsUUFBSyxjQUFMLENBQXFCLFFBQUssTUFBTCxDQUFhO0FBQ3BELG9DQUFnQixRQUFLLFFBQUwsQ0FBZSxNQUFmO0FBRG9DLGlCQUFiLEVBRXhDLE1BRndDLENBQXJCLENBL0dmO0FBQUE7QUErR0gseUJBL0dHO0FBa0hILHlCQWxIRyxHQWtIUyxRQUFLLFlBQUwsRUFsSFQ7QUFtSEgsc0JBbkhHLEdBbUhNO0FBQ1QsNEJBQVEsRUFEQztBQUVULDRCQUFRLEVBRkM7QUFHVCxpQ0FBYSxTQUhKO0FBSVQsZ0NBQVksUUFBSyxPQUFMLENBQWMsU0FBZDtBQUpILGlCQW5ITjtBQXlISCxxQkF6SEcsR0F5SEssQ0FBRSxNQUFGLEVBQVUsTUFBVixDQXpITDs7QUEwSFAscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxNQUFNLE1BQTFCLEVBQWtDLEdBQWxDLEVBQXVDO0FBQy9CLHdCQUQrQixHQUN4QixNQUFNLENBQU4sQ0FEd0I7QUFFL0IsMEJBRitCLEdBRXRCLFVBQVUsSUFBVixDQUZzQjs7QUFHbkMseUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxPQUFPLE1BQTNCLEVBQW1DLEdBQW5DLEVBQXdDO0FBQ2hDLDZCQURnQyxHQUN4QixPQUFPLENBQVAsQ0FEd0I7QUFFaEMsNkJBRmdDLEdBRXhCLFdBQVksTUFBTSxPQUFOLENBQVosQ0FGd0I7QUFHaEMsOEJBSGdDLEdBR3ZCLFdBQVksTUFBTSxNQUFOLENBQVosQ0FIdUI7O0FBSXBDLCtCQUFPLElBQVAsRUFBYSxJQUFiLENBQW1CLENBQUUsS0FBRixFQUFTLE1BQVQsQ0FBbkI7QUFDSDtBQUNKO0FBQ0QsdUJBQU8sTUFBUDtBQXBJTztBQUFBO0FBdUlMLG1CQXZJSyx1QkF1SVEsTUF2SVI7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkF3SUQsUUFBSyxXQUFMLEVBeElDO0FBQUE7QUFBQSx1QkF5SVksUUFBSyxlQUFMLENBQXNCO0FBQ3JDLG9DQUFnQixRQUFLLFFBQUwsQ0FBZSxNQUFmO0FBRHFCLGlCQUF0QixDQXpJWjtBQUFBO0FBeUlILHNCQXpJRztBQTRJSCx5QkE1SUcsR0E0SVMsUUFBSyxTQUFMLENBQWdCLE9BQU8sV0FBUCxDQUFoQixDQTVJVDs7QUE2SVAsdUJBQU87QUFDSCxpQ0FBYSxTQURWO0FBRUgsZ0NBQVksUUFBSyxPQUFMLENBQWMsU0FBZCxDQUZUO0FBR0gsNEJBQVEsU0FITDtBQUlILDJCQUFPLFNBSko7QUFLSCwyQkFBTyxXQUFZLE9BQU8sVUFBUCxDQUFaLENBTEo7QUFNSCwyQkFBTyxXQUFZLE9BQU8sVUFBUCxDQUFaLENBTko7QUFPSCw0QkFBUSxTQVBMO0FBUUgsNEJBQVEsU0FSTDtBQVNILDZCQUFTLFNBVE47QUFVSCw2QkFBUyxTQVZOO0FBV0gsNEJBQVEsV0FBWSxPQUFPLEtBQVAsQ0FBWixDQVhMO0FBWUgsOEJBQVUsU0FaUDtBQWFILGtDQUFjLFNBYlg7QUFjSCwrQkFBVyxTQWRSO0FBZUgsa0NBQWMsV0FBWSxPQUFPLG1CQUFQLENBQVosQ0FmWDtBQWdCSCxtQ0FBZSxXQUFZLE9BQU8sUUFBUCxDQUFaLENBaEJaO0FBaUJILDRCQUFRO0FBakJMLGlCQUFQO0FBN0lPO0FBQUE7QUFrS0wsbUJBbEtLLHVCQWtLUSxNQWxLUjtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQWtLZ0Isc0JBbEtoQixnRkFrS3lCLEVBbEt6QjtBQUFBLHVCQW1LRCxRQUFLLFdBQUwsRUFuS0M7QUFBQTtBQW9LUCx1QkFBTyxRQUFLLG1CQUFMLENBQTBCLFFBQUssTUFBTCxDQUFhO0FBQzFDLG9DQUFnQixRQUFLLFFBQUwsQ0FBZSxNQUFmO0FBRDBCLGlCQUFiLEVBRTlCLE1BRjhCLENBQTFCLENBQVA7QUFwS087QUFBQTtBQXlLTCxtQkF6S0ssdUJBeUtRLE1BektSLEVBeUtnQixJQXpLaEIsRUF5S3NCLElBekt0QixFQXlLNEIsTUF6SzVCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBeUtvQyxxQkF6S3BDLGdGQXlLNEMsU0F6SzVDO0FBeUt1RCxzQkF6S3ZELGdGQXlLZ0UsRUF6S2hFO0FBQUEsdUJBMEtELFFBQUssV0FBTCxFQTFLQztBQUFBO0FBMktILHFCQTNLRyxHQTJLSztBQUNSLG9DQUFnQixRQUFLLFFBQUwsQ0FBZSxNQUFmLENBRFI7QUFFUix3Q0FBb0IsS0FBSyxXQUFMLEVBRlo7QUFHUiw0QkFBUSxLQUFLLFdBQUwsRUFIQTtBQUlSLDZCQUFTLEtBSkQ7QUFLUiw0QkFBUTtBQUxBLGlCQTNLTDtBQUFBLHVCQWtMWSxRQUFLLHlCQUFMLENBQWdDLFFBQUssTUFBTCxDQUFhLEtBQWIsRUFBb0IsTUFBcEIsQ0FBaEMsQ0FsTFo7QUFBQTtBQWtMSCxzQkFsTEc7O0FBbUxQLHVCQUFPO0FBQ0gsNEJBQVEsTUFETDtBQUVILDBCQUFNLE9BQU8sMkJBQVA7QUFGSCxpQkFBUDtBQW5MTztBQUFBO0FBeUxMLG1CQXpMSyx1QkF5TFEsRUF6TFI7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUF5TFksc0JBekxaLGdGQXlMcUIsRUF6THJCO0FBQUEsdUJBMExELFFBQUssV0FBTCxFQTFMQztBQUFBO0FBMkxQLHVCQUFPLFFBQUssMkJBQUwsQ0FBa0MsUUFBSyxNQUFMLENBQWE7QUFDbEQsdUNBQW1CO0FBRCtCLGlCQUFiLEVBRXRDLE1BRnNDLENBQWxDLENBQVA7QUEzTE87QUFBQTtBQWdNTCxlQWhNSyxtQkFnTUksSUFoTUo7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQWdNVSxlQWhNVixnRkFnTWdCLFFBaE1oQjtBQWdNMEIsa0JBaE0xQixnRkFnTW1DLEtBaE1uQztBQWdNMEMsa0JBaE0xQyxnRkFnTW1ELEVBaE1uRDtBQWdNdUQsbUJBaE12RCxnRkFnTWlFLFNBaE1qRTtBQWdNNEUsZ0JBaE01RSxnRkFnTW1GLFNBaE1uRjtBQWlNSCxtQkFqTUcsR0FpTU8sTUFBTSxRQUFLLE9BQVgsR0FBcUIsR0FqTTVCOztBQWtNUCxnQkFBSSxPQUFPLFNBQVg7QUFDSSwyQkFBVyxLQUFYO0FBREosYUFFQSxXQUFXLElBQVg7QUFDSSxlQXJNRyxHQXFNRyxRQUFLLElBQUwsQ0FBVSxLQUFWLElBQW1CLE9Bck10Qjs7QUFzTVAsZ0JBQUksT0FBTyxRQUFYLEVBQXFCO0FBQ2pCLG9CQUFJLE9BQU8sSUFBUCxDQUFhLE1BQWIsRUFBcUIsTUFBekI7QUFDSSwyQkFBTyxNQUFNLFFBQUssU0FBTCxDQUFnQixNQUFoQixDQUFiO0FBREo7QUFFSCxhQUhELE1BR087QUFDQyxxQkFERCxHQUNTLFFBQUssS0FBTCxHQUFjLFFBQWQsRUFEVDs7QUFFSCx1QkFBTyxRQUFLLElBQUwsQ0FBVyxNQUFYLENBQVA7QUFDSSxvQkFIRCxHQUdRLENBQUUsS0FBRixFQUFTLE1BQVQsRUFBaUIsT0FBakIsRUFBMEIsSUFBMUIsRUFBaUMsSUFBakMsQ0FBdUMsRUFBdkMsQ0FIUjs7QUFJSCwwQkFBVTtBQUNOLGtDQUFjLFFBQUssTUFEYjtBQUVOLHdDQUFvQixLQUZkO0FBR04sbUNBQWUsUUFBSyxJQUFMLENBQVcsUUFBSyxNQUFMLENBQWEsSUFBYixDQUFYLEVBQStCLFFBQUssTUFBcEMsQ0FIVDtBQUlOLG9DQUFnQjtBQUpWLGlCQUFWO0FBTUg7QUFDRCxtQkFBTyxRQUFLLEtBQUwsQ0FBWSxHQUFaLEVBQWlCLE1BQWpCLEVBQXlCLE9BQXpCLEVBQWtDLElBQWxDLENBQVA7QUFwTk87QUFBQSxLQUFmOztBQXdOQTs7QUFFQSxRQUFJLFVBQVU7O0FBRVYsY0FBTSxTQUZJO0FBR1YsZ0JBQVEsU0FIRTtBQUlWLHFCQUFhLENBQUUsSUFBRixFQUFRLElBQVIsRUFBYyxJQUFkLENBSkg7QUFLVixxQkFBYSxJQUxIO0FBTVYsbUJBQVcsSUFORDtBQU9WLDJCQUFtQixJQVBUO0FBUVYsZ0JBQVE7QUFDSixvQkFBUSxxR0FESjtBQUVKLG1CQUFPLHlCQUZIO0FBR0osbUJBQU8scUJBSEg7QUFJSixtQkFBTztBQUpILFNBUkU7QUFjVixlQUFPO0FBQ0gsc0JBQVU7QUFDTix1QkFBTyxDQUNILGFBREcsRUFFSCxPQUZHLEVBR0gsT0FIRyxFQUlILFNBSkcsRUFLSCxjQUxHLEVBTUgsZ0JBTkc7QUFERCxhQURQO0FBV0gsdUJBQVc7QUFDUCx3QkFBUSxDQUNKLHFCQURJLEVBRUosU0FGSSxFQUdKLGNBSEksRUFJSixzQkFKSSxFQUtKLG1CQUxJLEVBTUosY0FOSSxFQU9KLHdCQVBJLEVBUUosY0FSSSxFQVNKLFNBVEksRUFVSixrQ0FWSSxFQVdKLG9CQVhJLEVBWUosYUFaSSxFQWFKLHlCQWJJLEVBY0osZ0JBZEksRUFlSix1QkFmSSxFQWdCSixzQkFoQkksRUFpQkosZUFqQkksRUFrQkosYUFsQkksRUFtQkosUUFuQkksRUFvQkosUUFwQkksRUFxQkosU0FyQkksRUFzQkosZUF0QkksRUF1QkosZUF2QkksRUF3QkosVUF4QkksRUF5QkosZ0JBekJJO0FBREQ7QUFYUixTQWRHOztBQXdESixvQkF4REk7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkF5RGMsUUFBSyxjQUFMLEVBekRkO0FBQUE7QUF5REYsdUJBekRFO0FBMERGLHNCQTFERSxHQTBETyxFQTFEUDtBQTJERixvQkEzREUsR0EyREssT0FBTyxJQUFQLENBQWEsT0FBYixDQTNETDs7QUE0RE4scUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxLQUFLLE1BQXpCLEVBQWlDLEdBQWpDLEVBQXNDO0FBQzlCLDBCQUQ4QixHQUNyQixRQUFRLEtBQUssQ0FBTCxDQUFSLENBRHFCO0FBRTlCLHNCQUY4QixHQUV6QixPQUFPLElBQVAsQ0FGeUI7QUFHOUIsMEJBSDhCLEdBR3JCLE9BQU8sTUFBUCxDQUhxQjtBQUFBLG9DQUlaLE9BQU8sS0FBUCxDQUFjLEdBQWQsQ0FKWTtBQUFBO0FBSTVCLHdCQUo0QjtBQUl0Qix5QkFKc0I7QUFLbEM7O0FBQ0Esd0JBQUksUUFBUSxLQUFaO0FBQ0ksK0JBQU8sTUFBUDtBQURKLHFCQUVBLFNBQVMsT0FBTyxHQUFQLEdBQWEsS0FBdEI7QUFDQSwyQkFBTyxJQUFQLENBQWE7QUFDVCw4QkFBTSxFQURHO0FBRVQsa0NBQVUsTUFGRDtBQUdULGdDQUFRLElBSEM7QUFJVCxpQ0FBUyxLQUpBO0FBS1QsZ0NBQVE7QUFMQyxxQkFBYjtBQU9IO0FBQ0QsdUJBQU8sTUFBUDtBQTdFTTtBQUFBO0FBZ0ZWLG1CQWhGVSx1QkFnRkcsTUFoRkgsRUFnRlcsTUFoRlgsRUFnRm1CO0FBQ3pCLGdCQUFJLFlBQVksS0FBSyxZQUFMLEVBQWhCO0FBQ0EsbUJBQU87QUFDSCw2QkFBYSxTQURWO0FBRUgsNEJBQVksS0FBSyxPQUFMLENBQWMsU0FBZCxDQUZUO0FBR0gsd0JBQVEsV0FBWSxPQUFPLEtBQVAsQ0FBWixDQUhMO0FBSUgsdUJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQUpKO0FBS0gsdUJBQU8sU0FMSjtBQU1ILHVCQUFPLFNBTko7QUFPSCx3QkFBUSxTQVBMO0FBUUgsd0JBQVEsU0FSTDtBQVNILHlCQUFTLFNBVE47QUFVSCx5QkFBUyxXQUFZLE9BQU8sT0FBUCxDQUFaLENBVk47QUFXSCx3QkFBUSxXQUFZLE9BQU8sTUFBUCxDQUFaLENBWEw7QUFZSCwwQkFBVSxTQVpQO0FBYUgsOEJBQWMsU0FiWDtBQWNILDJCQUFXLFNBZFI7QUFlSCw4QkFBYyxTQWZYO0FBZ0JILCtCQUFlLFNBaEJaO0FBaUJILHdCQUFRO0FBakJMLGFBQVA7QUFtQkgsU0FyR1M7QUF1R0osb0JBdkdJO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBd0dBLFFBQUssV0FBTCxFQXhHQTtBQUFBO0FBQUEsdUJBeUdjLFFBQUssZ0JBQUwsRUF6R2Q7QUFBQTtBQXlHRix1QkF6R0U7QUEwR0YsbUJBMUdFLEdBMEdJLE9BQU8sSUFBUCxDQUFhLE9BQWIsQ0ExR0o7QUEyR0Ysc0JBM0dFLEdBMkdPLEVBM0dQOztBQTRHTixxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLElBQUksTUFBeEIsRUFBZ0MsR0FBaEMsRUFBcUM7QUFDN0Isc0JBRDZCLEdBQ3hCLElBQUksQ0FBSixDQUR3QjtBQUU3QiwwQkFGNkIsR0FFcEIsUUFBSyxhQUFMLENBQW1CLEVBQW5CLENBRm9CO0FBRzdCLDBCQUg2QixHQUdwQixPQUFPLFFBQVAsQ0FIb0I7QUFJN0IsMEJBSjZCLEdBSXBCLFFBQVEsRUFBUixDQUpvQjs7QUFLakMsMkJBQU8sTUFBUCxJQUFpQixRQUFLLFdBQUwsQ0FBa0IsTUFBbEIsRUFBMEIsTUFBMUIsQ0FBakI7QUFDSDtBQUNELHVCQUFPLE1BQVA7QUFuSE07QUFBQTtBQXNISixtQkF0SEksdUJBc0hTLE1BdEhUO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkF1SEEsUUFBSyxXQUFMLEVBdkhBO0FBQUE7QUF3SEYsaUJBeEhFLEdBd0hFLFFBQUssTUFBTCxDQUFhLE1BQWIsQ0F4SEY7QUFBQSx1QkF5SGMsUUFBSyxnQkFBTCxFQXpIZDtBQUFBO0FBeUhGLHVCQXpIRTtBQTBIRixzQkExSEUsR0EwSE8sUUFBUSxFQUFFLElBQUYsQ0FBUixDQTFIUDs7QUEySE4sdUJBQU8sUUFBSyxXQUFMLENBQWtCLE1BQWxCLEVBQTBCLENBQTFCLENBQVA7QUEzSE07QUFBQTtBQThISixzQkE5SEksMEJBOEhZLE1BOUhaO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUE4SG9CLHNCQTlIcEIsZ0ZBOEg2QixFQTlIN0I7QUFBQSx1QkErSEEsUUFBSyxXQUFMLEVBL0hBO0FBQUE7QUFBQSx1QkFnSWdCLFFBQUssb0JBQUwsQ0FBMkIsUUFBSyxNQUFMLENBQWE7QUFDMUQsK0JBQVcsUUFBSyxRQUFMLENBQWUsTUFBZjtBQUQrQyxpQkFBYixFQUU5QyxNQUY4QyxDQUEzQixDQWhJaEI7QUFBQTtBQWdJRix5QkFoSUU7QUFtSUYseUJBbklFLEdBbUlVLFNBQVUsU0FBVSxVQUFVLE1BQVYsQ0FBVixJQUErQixJQUF6QyxDQW5JVjtBQW9JRixzQkFwSUUsR0FvSU87QUFDVCw0QkFBUSxFQURDO0FBRVQsNEJBQVEsRUFGQztBQUdULGlDQUFhLFNBSEo7QUFJVCxnQ0FBWSxRQUFLLE9BQUwsQ0FBYyxTQUFkO0FBSkgsaUJBcElQO0FBMElGLHFCQTFJRSxHQTBJTSxFQUFFLFFBQVEsS0FBVixFQUFpQixRQUFRLEtBQXpCLEVBMUlOO0FBMklGLG9CQTNJRSxHQTJJSyxPQUFPLElBQVAsQ0FBYSxLQUFiLENBM0lMOztBQTRJTixxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLEtBQUssTUFBekIsRUFBaUMsR0FBakMsRUFBc0M7QUFDOUIsdUJBRDhCLEdBQ3hCLEtBQUssQ0FBTCxDQUR3QjtBQUU5Qix3QkFGOEIsR0FFdkIsTUFBTSxHQUFOLENBRnVCO0FBRzlCLDBCQUg4QixHQUdyQixVQUFVLElBQVYsQ0FIcUI7O0FBSWxDLHlCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksT0FBTyxNQUEzQixFQUFtQyxHQUFuQyxFQUF3QztBQUNoQyw2QkFEZ0MsR0FDeEIsT0FBTyxDQUFQLENBRHdCO0FBRWhDLDZCQUZnQyxHQUV4QixXQUFZLE1BQU0sT0FBTixDQUFaLENBRndCO0FBR2hDLDhCQUhnQyxHQUd2QixXQUFZLE1BQU0sUUFBTixDQUFaLENBSHVCOztBQUlwQywrQkFBTyxHQUFQLEVBQVksSUFBWixDQUFrQixDQUFFLEtBQUYsRUFBUyxNQUFULENBQWxCO0FBQ0g7QUFDSjtBQUNELHVCQUFPLE1BQVA7QUF2Sk07QUFBQTtBQTBKSixtQkExSkksdUJBMEpTLE1BMUpUO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBMEppQixzQkExSmpCLGdGQTBKMEIsRUExSjFCO0FBQUEsdUJBMkpBLFFBQUssV0FBTCxFQTNKQTtBQUFBO0FBNEpOLHVCQUFPLFFBQUssc0JBQUwsQ0FBNkIsUUFBSyxNQUFMLENBQWE7QUFDN0MsK0JBQVcsUUFBSyxRQUFMLENBQWUsTUFBZjtBQURrQyxpQkFBYixFQUVqQyxNQUZpQyxDQUE3QixDQUFQO0FBNUpNO0FBQUE7QUFpS0osb0JBaktJO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQWtLQSxRQUFLLFdBQUwsRUFsS0E7QUFBQTtBQUFBLHVCQW1LZSxRQUFLLGtCQUFMLEVBbktmO0FBQUE7QUFtS0Ysd0JBbktFO0FBb0tGLHNCQXBLRSxHQW9LTyxFQUFFLFFBQVEsUUFBVixFQXBLUDtBQXFLRiwwQkFyS0UsR0FxS1csT0FBTyxJQUFQLENBQWEsUUFBYixDQXJLWDtBQXNLRix1QkF0S0UsR0FzS1EsRUF0S1I7O0FBdUtOLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksV0FBVyxNQUEvQixFQUF1QyxHQUF2QyxFQUE0QztBQUNwQyw0QkFEb0MsR0FDekIsV0FBVyxDQUFYLENBRHlCO0FBRXBDLDJCQUZvQyxHQUUxQixTQUFTLFFBQVQsQ0FGMEI7O0FBR3hDLCtCQUFXLFNBQVMsV0FBVCxFQUFYO0FBQ0E7QUFDQSx3QkFBSSxZQUFZLEtBQWhCO0FBQ0ksbUNBQVcsTUFBWDtBQURKLHFCQUVBLFFBQVEsUUFBUixJQUFvQixPQUFwQjtBQUNIO0FBQ0QscUJBQVMsRUFBVCxHQUFhLENBQWIsRUFBZ0IsS0FBSSxRQUFLLFVBQUwsQ0FBZ0IsTUFBcEMsRUFBNEMsSUFBNUMsRUFBaUQ7QUFDekMsOEJBRHlDLEdBQzlCLFFBQUssVUFBTCxDQUFnQixFQUFoQixDQUQ4QjtBQUV6Qyw2QkFGeUMsR0FFL0I7QUFDVixnQ0FBUSxTQURFO0FBRVYsZ0NBQVEsU0FGRTtBQUdWLGlDQUFTO0FBSEMscUJBRitCOztBQU83Qyx3QkFBSSxjQUFZLE9BQWhCLEVBQXlCO0FBQ3JCLGtDQUFRLE1BQVIsSUFBa0IsV0FBWSxRQUFRLFVBQVIsRUFBa0IsT0FBbEIsQ0FBWixDQUFsQjtBQUNBLGtDQUFRLE1BQVIsSUFBa0IsV0FBWSxRQUFRLFVBQVIsRUFBa0IsUUFBbEIsQ0FBWixDQUFsQjtBQUNBLGtDQUFRLE9BQVIsSUFBbUIsUUFBSyxHQUFMLENBQVUsVUFBUSxNQUFSLENBQVYsRUFBMkIsVUFBUSxNQUFSLENBQTNCLENBQW5CO0FBQ0g7QUFDRCwyQkFBTyxVQUFQLElBQW1CLFNBQW5CO0FBQ0g7QUFDRCx1QkFBTyxNQUFQO0FBOUxNO0FBQUE7QUFpTVYsY0FqTVUsb0JBaU1BO0FBQ04sbUJBQU8sS0FBSyxpQkFBTCxDQUF3QjtBQUMzQix5QkFBUyxLQUFLLEtBRGE7QUFFM0IsMEJBQVUsS0FBSztBQUZZLGFBQXhCLENBQVA7QUFJSCxTQXRNUztBQXdNSixtQkF4TUksdUJBd01TLE1BeE1ULEVBd01pQixJQXhNakIsRUF3TXVCLElBeE12QixFQXdNNkIsTUF4TTdCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBd01xQyxxQkF4TXJDLGdGQXdNNkMsU0F4TTdDO0FBd013RCxzQkF4TXhELGdGQXdNaUUsRUF4TWpFO0FBQUEsdUJBeU1BLFNBQUssV0FBTCxFQXpNQTtBQUFBO0FBME1GLHFCQTFNRSxHQTBNTTtBQUNSLCtCQUFXLFNBQUssUUFBTCxDQUFlLE1BQWYsQ0FESDtBQUVSLDJCQUFRLFFBQVEsS0FBVCxHQUFrQixLQUFsQixHQUEwQixLQUZ6QjtBQUdSLDhCQUFVO0FBSEYsaUJBMU1OOztBQStNTixvQkFBSSxRQUFRLE9BQVo7QUFDSSwwQkFBTSxPQUFOLElBQWlCLEtBQWpCO0FBREosaUJBL01NLE9BaU5hLFNBQUssc0JBQUwsQ0FBNkIsU0FBSyxNQUFMLENBQWEsS0FBYixFQUFvQixNQUFwQixDQUE3QixDQWpOYjtBQUFBO0FBaU5GLHNCQWpORTs7QUFrTk4sdUJBQU87QUFDSCw0QkFBUSxNQURMO0FBRUgsMEJBQU0sT0FBTyxJQUFQO0FBRkgsaUJBQVA7QUFsTk07QUFBQTtBQXdOSixtQkF4TkksdUJBd05TLEVBeE5UO0FBQUE7O0FBQUE7QUFBQSx1QkF5TkEsU0FBSyxXQUFMLEVBek5BO0FBQUE7QUEwTk4sdUJBQU8sU0FBSyxzQkFBTCxDQUE2QixFQUFFLE1BQU0sRUFBUixFQUE3QixDQUFQO0FBMU5NO0FBQUE7QUE2TlYsZUE3TlUsbUJBNk5ELElBN05DLEVBNk55RjtBQUFBLGdCQUFwRixHQUFvRix1RUFBOUUsUUFBOEU7QUFBQSxnQkFBcEUsTUFBb0UsdUVBQTNELEtBQTJEO0FBQUEsZ0JBQXBELE1BQW9ELHVFQUEzQyxFQUEyQztBQUFBLGdCQUF2QyxPQUF1Qyx1RUFBN0IsU0FBNkI7QUFBQSxnQkFBbEIsSUFBa0IsdUVBQVgsU0FBVzs7QUFDL0YsZ0JBQUksTUFBTSxLQUFLLElBQUwsQ0FBVSxLQUFWLElBQW1CLEdBQW5CLEdBQXlCLEtBQUssT0FBOUIsR0FBd0MsR0FBeEMsR0FBOEMsSUFBeEQ7QUFDQSxnQkFBSSxPQUFPLFFBQVgsRUFBcUI7QUFDakIsb0JBQUksT0FBTyxJQUFQLENBQWEsTUFBYixFQUFxQixNQUF6QixFQUNJLE9BQU8sTUFBTSxLQUFLLFNBQUwsQ0FBZ0IsTUFBaEIsQ0FBYjtBQUNQLGFBSEQsTUFHTztBQUNILHVCQUFPLEtBQUssSUFBTCxDQUFXLEtBQUssTUFBTCxDQUFhLEVBQUUsU0FBUyxLQUFLLE1BQWhCLEVBQWIsRUFBdUMsTUFBdkMsQ0FBWCxDQUFQO0FBQ0EsMEJBQVUsRUFBRSxnQkFBZ0Isa0JBQWxCLEVBQVY7QUFDSDtBQUNELG1CQUFPLEtBQUssS0FBTCxDQUFZLEdBQVosRUFBaUIsTUFBakIsRUFBeUIsT0FBekIsRUFBa0MsSUFBbEMsQ0FBUDtBQUNIO0FBdk9TLEtBQWQ7O0FBME9BOztBQUVBLFFBQUksWUFBWTs7QUFFWixjQUFNLFdBRk07QUFHWixnQkFBUSxXQUhJO0FBSVoscUJBQWEsQ0FBRSxJQUFGLEVBQVEsSUFBUixDQUpEO0FBS1oscUJBQWEsSUFMRDtBQU1aLGdCQUFRO0FBQ0osb0JBQVEscUdBREo7QUFFSixtQkFBTztBQUNILDBCQUFVLDJCQURQO0FBRUgsMkJBQVcsZ0NBRlIsQ0FFMEM7QUFGMUMsYUFGSDtBQU1KLG1CQUFPLENBQ0gsMEJBREcsRUFFSCwyQkFGRyxDQU5IO0FBVUosbUJBQU8sQ0FDSCx5REFERyxFQUVILDBEQUZHLEVBR0gsc0NBSEc7QUFWSCxTQU5JO0FBc0JaLGVBQU87QUFDSCxzQkFBVTtBQUNOLHVCQUFPLENBQ0gsc0JBREcsRUFFSCx5QkFGRyxFQUdILHNCQUhHLEVBSUgsZ0JBSkcsRUFLSCxxQkFMRyxFQU1ILG9CQU5HLEVBT0gsb0JBUEcsRUFRSCxvQkFSRyxFQVNILG9CQVRHLEVBVUgsb0JBVkcsRUFXSCxvQkFYRyxFQVlILG9CQVpHO0FBREQsYUFEUDtBQWlCSCx1QkFBVztBQUNQLHdCQUFRLENBQ0osTUFESSxFQUVKLE9BRkksRUFHSixRQUhJLEVBSUosUUFKSSxFQUtKLFFBTEksRUFNSixTQU5JLEVBT0osYUFQSSxFQVFKLGFBUkksRUFTSixtQkFUSSxFQVVKLG9CQVZJLEVBV0osbUJBWEksRUFZSix5QkFaSSxFQWFKLDBCQWJJLEVBY0osVUFkSSxFQWVKLGNBZkksRUFnQkosZUFoQkksRUFpQkosa0JBakJJLEVBa0JKLFNBbEJJLEVBbUJKLFVBbkJJLEVBb0JKLFdBcEJJLEVBcUJKLFlBckJJLEVBc0JKLFlBdEJJLEVBdUJKLGFBdkJJLEVBd0JKLGNBeEJJLEVBeUJKLGNBekJJLEVBMEJKLGtCQTFCSSxFQTJCSixxQkEzQkksRUE0QkosVUE1QkksRUE2QkosVUE3QkksRUE4QkosV0E5Qkk7QUFERDtBQWpCUixTQXRCSztBQTBFWixtQkFBVztBQUNQLHVCQUFXLEVBQUUsTUFBTSxRQUFSLEVBQWtCLFVBQVUsU0FBNUIsRUFBdUMsUUFBUSxLQUEvQyxFQUFzRCxTQUFTLEtBQS9ELEVBREo7QUFFUCx1QkFBVyxFQUFFLE1BQU0sUUFBUixFQUFrQixVQUFVLFNBQTVCLEVBQXVDLFFBQVEsS0FBL0MsRUFBc0QsU0FBUyxLQUEvRCxFQUZKO0FBR1AsdUJBQVcsRUFBRSxNQUFNLFFBQVIsRUFBa0IsVUFBVSxTQUE1QixFQUF1QyxRQUFRLEtBQS9DLEVBQXNELFNBQVMsS0FBL0QsRUFISjtBQUlQLHVCQUFXLEVBQUUsTUFBTSxRQUFSLEVBQWtCLFVBQVUsU0FBNUIsRUFBdUMsUUFBUSxLQUEvQyxFQUFzRCxTQUFTLEtBQS9ELEVBSko7QUFLUCw2QkFBaUIsRUFBRSxNQUFNLGNBQVIsRUFBd0IsVUFBVSxlQUFsQyxFQUFtRCxRQUFRLFdBQTNELEVBQXdFLFNBQVMsS0FBakYsRUFMVjtBQU1QLHdCQUFZLEVBQUUsTUFBTSxTQUFSLEVBQW1CLFVBQVUsVUFBN0IsRUFBeUMsUUFBUSxNQUFqRCxFQUF5RCxTQUFTLEtBQWxFO0FBTkwsU0ExRUM7O0FBbUZOLG9CQW5GTTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkFvRkYsU0FBSyxXQUFMLEVBcEZFO0FBQUE7QUFBQSx1QkFxRmEsU0FBSyxlQUFMLEVBckZiO0FBQUE7QUFxRkosd0JBckZJO0FBc0ZKLG9CQXRGSSxHQXNGRyxTQUFTLE1BQVQsQ0F0Rkg7QUF1RkosdUJBdkZJLEdBdUZNLEtBQUssVUFBTCxDQXZGTjtBQXdGSixzQkF4RkksR0F3RkssRUFBRSxRQUFRLElBQVYsRUF4Rkw7O0FBeUZSLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksU0FBSyxVQUFMLENBQWdCLE1BQXBDLEVBQTRDLEdBQTVDLEVBQWlEO0FBQ3pDLDRCQUR5QyxHQUM5QixTQUFLLFVBQUwsQ0FBZ0IsQ0FBaEIsQ0FEOEI7QUFFekMsMkJBRnlDLEdBRS9CO0FBQ1YsZ0NBQVEsU0FERTtBQUVWLGdDQUFRLFNBRkU7QUFHVixpQ0FBUztBQUhDLHFCQUYrQjs7QUFPN0Msd0JBQUksWUFBWSxRQUFRLFdBQVIsQ0FBaEI7QUFDSSxnQ0FBUSxNQUFSLElBQWtCLFFBQVEsV0FBUixFQUFxQixRQUFyQixDQUFsQjtBQURKLHFCQUVBLElBQUksWUFBWSxRQUFRLFNBQVIsQ0FBaEI7QUFDSSxnQ0FBUSxNQUFSLElBQWtCLFFBQVEsU0FBUixFQUFtQixRQUFuQixDQUFsQjtBQURKLHFCQUVBLFFBQVEsT0FBUixJQUFtQixTQUFLLEdBQUwsQ0FBVSxRQUFRLE1BQVIsQ0FBVixFQUEyQixRQUFRLE1BQVIsQ0FBM0IsQ0FBbkI7QUFDQSwyQkFBTyxRQUFQLElBQW1CLE9BQW5CO0FBQ0g7QUFDRCx1QkFBTyxNQUFQO0FBdkdRO0FBQUE7QUEwR04sc0JBMUdNLDBCQTBHVSxNQTFHVjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQTBHa0Isc0JBMUdsQixnRkEwRzJCLEVBMUczQjtBQUFBLHVCQTJHYyxTQUFLLDRCQUFMLENBQW1DLFNBQUssTUFBTCxDQUFhO0FBQ2xFLDhCQUFVLFNBQUssUUFBTCxDQUFlLE1BQWY7QUFEd0QsaUJBQWIsRUFFdEQsTUFGc0QsQ0FBbkMsQ0EzR2Q7QUFBQTtBQTJHSix5QkEzR0k7QUE4R0oseUJBOUdJLEdBOEdRLFNBQUssWUFBTCxFQTlHUjtBQStHSixzQkEvR0ksR0ErR0s7QUFDVCw0QkFBUSxVQUFVLE1BQVYsQ0FEQztBQUVULDRCQUFRLFVBQVUsTUFBVixDQUZDO0FBR1QsaUNBQWEsU0FISjtBQUlULGdDQUFZLFNBQUssT0FBTCxDQUFjLFNBQWQ7QUFKSCxpQkEvR0w7O0FBcUhSLHVCQUFPLE1BQVA7QUFySFE7QUFBQTtBQXlITixtQkF6SE0sdUJBeUhPLE1BekhQO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBMEhXLFNBQUsseUJBQUwsQ0FBZ0M7QUFDL0MsOEJBQVUsU0FBSyxRQUFMLENBQWUsTUFBZjtBQURxQyxpQkFBaEMsQ0ExSFg7QUFBQTtBQTBISixzQkExSEk7QUE2SEoseUJBN0hJLEdBNkhRLFNBQUssWUFBTCxFQTdIUjs7QUE4SFIsdUJBQU87QUFDSCxpQ0FBYSxTQURWO0FBRUgsZ0NBQVksU0FBSyxPQUFMLENBQWMsU0FBZCxDQUZUO0FBR0gsNEJBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQUhMO0FBSUgsMkJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQUpKO0FBS0gsMkJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQUxKO0FBTUgsMkJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQU5KO0FBT0gsNEJBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQVBMO0FBUUgsNEJBQVEsU0FSTDtBQVNILDZCQUFTLFNBVE47QUFVSCw2QkFBUyxTQVZOO0FBV0gsNEJBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQVhMO0FBWUgsOEJBQVUsU0FaUDtBQWFILGtDQUFjLFNBYlg7QUFjSCwrQkFBVyxTQWRSO0FBZUgsa0NBQWMsU0FmWDtBQWdCSCxtQ0FBZSxXQUFZLE9BQU8sUUFBUCxDQUFaLENBaEJaO0FBaUJILDRCQUFRO0FBakJMLGlCQUFQO0FBOUhRO0FBQUE7QUFtSk4sbUJBbkpNLHVCQW1KTyxNQW5KUDtBQUFBO0FBQUE7QUFBQTs7QUFtSmUsa0JBbkpmLGdGQW1Kd0IsRUFuSnhCOztBQW9KUixtQkFBTyxTQUFLLHlCQUFMLENBQWdDLFNBQUssTUFBTCxDQUFhO0FBQ2hELDBCQUFVLFNBQUssUUFBTCxDQUFlLE1BQWY7QUFEc0MsYUFBYixFQUVwQyxNQUZvQyxDQUFoQyxDQUFQO0FBcEpRO0FBeUpOLG1CQXpKTSx1QkF5Sk8sTUF6SlAsRUF5SmUsSUF6SmYsRUF5SnFCLElBekpyQixFQXlKMkIsTUF6SjNCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBeUptQyxxQkF6Sm5DLGdGQXlKMkMsU0F6SjNDO0FBeUpzRCxzQkF6SnRELGdGQXlKK0QsRUF6Si9EO0FBQUEsdUJBMEphLFNBQUssZ0JBQUwsQ0FBdUIsU0FBSyxNQUFMLENBQWE7QUFDckQsOEJBQVUsU0FBSyxRQUFMLENBQWUsTUFBZixDQUQyQztBQUVyRCw0QkFBUSxJQUY2QztBQUdyRCw4QkFBVSxNQUgyQztBQUlyRCw0QkFBUTtBQUo2QyxpQkFBYixFQUt6QyxNQUx5QyxDQUF2QixDQTFKYjtBQUFBO0FBMEpKLHdCQTFKSTtBQWdLSixzQkFoS0ksR0FnS0s7QUFDVCw0QkFBUTtBQURDLGlCQWhLTDs7QUFtS1Isb0JBQUksUUFBUSxTQUFTLE9BQVQsQ0FBWjtBQUNJLDJCQUFPLElBQVAsSUFBZSxTQUFTLElBQVQsQ0FBZjtBQURKLGlCQUVBLE9BQU8sTUFBUDtBQXJLUTtBQUFBO0FBd0tOLG1CQXhLTSx1QkF3S08sRUF4S1A7QUFBQTs7QUF5S1IsbUJBQU8sU0FBSyxpQkFBTCxDQUF3QixFQUFFLE1BQU0sRUFBUixFQUF4QixDQUFQO0FBektRO0FBNEtaLGVBNUtZLG1CQTRLSCxJQTVLRyxFQTRLdUY7QUFBQSxnQkFBcEYsR0FBb0YsdUVBQTlFLFFBQThFO0FBQUEsZ0JBQXBFLE1BQW9FLHVFQUEzRCxLQUEyRDtBQUFBLGdCQUFwRCxNQUFvRCx1RUFBM0MsRUFBMkM7QUFBQSxnQkFBdkMsT0FBdUMsdUVBQTdCLFNBQTZCO0FBQUEsZ0JBQWxCLElBQWtCLHVFQUFYLFNBQVc7O0FBQy9GLGdCQUFJLE1BQU0sS0FBSyxJQUFMLENBQVUsS0FBVixFQUFpQixHQUFqQixDQUFWO0FBQ0EsZ0JBQUksT0FBTyxRQUFYLEVBQXFCO0FBQ2pCLHVCQUFPLE1BQU0sS0FBSyxhQUFMLENBQW9CLE9BQU8sT0FBM0IsRUFBb0MsTUFBcEMsQ0FBYjtBQUNILGFBRkQsTUFFTztBQUNILG9CQUFJLFFBQVEsS0FBSyxLQUFMLEVBQVo7QUFDQSxvQkFBSSxRQUFRLEtBQUssTUFBTCxDQUFhO0FBQ3JCLDZCQUFTLEtBRFk7QUFFckIsOEJBQVU7QUFGVyxpQkFBYixFQUdULE1BSFMsQ0FBWjtBQUlBLHVCQUFPLEtBQUssU0FBTCxDQUFnQixLQUFoQixDQUFQO0FBQ0EsMEJBQVU7QUFDTiwrQkFBVyxLQUFLLE1BRFY7QUFFTixnQ0FBWSxLQUFLLElBQUwsQ0FBVyxLQUFLLE1BQUwsQ0FBYSxJQUFiLENBQVgsRUFBK0IsS0FBSyxNQUFMLENBQWEsS0FBSyxNQUFsQixDQUEvQixFQUEwRCxRQUExRDtBQUZOLGlCQUFWO0FBSUg7QUFDRCxtQkFBTyxLQUFLLEtBQUwsQ0FBWSxHQUFaLEVBQWlCLE1BQWpCLEVBQXlCLE9BQXpCLEVBQWtDLElBQWxDLENBQVA7QUFDSDtBQTdMVyxLQUFoQjs7QUFnTUE7O0FBRUEsUUFBSSxTQUFTOztBQUVULGNBQU0sUUFGRztBQUdULGdCQUFRLFFBSEM7QUFJVCxxQkFBYSxJQUpKLEVBSVU7QUFDbkIsbUJBQVcsSUFMRjtBQU1ULHFCQUFhLElBTko7QUFPVCxnQkFBUTtBQUNKLG9CQUFRLHFHQURKO0FBRUosbUJBQU8sd0JBRkg7QUFHSixtQkFBTyx3QkFISDtBQUlKLG1CQUFPLENBQ0gsd0NBREcsRUFFSCxvRUFGRztBQUpILFNBUEM7QUFnQlQsZUFBTztBQUNILHNCQUFVO0FBQ04sdUJBQU8sQ0FDSCxjQURHLEVBRUgscUJBRkcsRUFHSCxTQUhHLEVBSUgsWUFKRyxFQUtILG1CQUxHLEVBTUgsNkJBTkcsRUFPSCw0QkFQRyxFQVFILDJCQVJHLEVBU0gsb0JBVEcsRUFVSCxXQVZHLEVBV0gsYUFYRyxFQVlILGFBWkcsRUFhSCxXQWJHLEVBY0gsY0FkRyxFQWVILE9BZkcsRUFnQkgsZ0JBaEJHLEVBaUJILFFBakJHLEVBa0JILHNCQWxCRyxFQW1CSCxZQW5CRyxFQW9CSCxPQXBCRyxFQXFCSCxlQXJCRyxFQXNCSCxPQXRCRyxFQXVCSCxnQkF2Qkc7QUFERCxhQURQO0FBNEJILHVCQUFXO0FBQ1AsdUJBQU8sQ0FDSCxRQURHLEVBRUgsTUFGRyxFQUdILGVBSEcsRUFJSCxnQkFKRyxFQUtILFdBTEcsRUFNSCx3QkFORyxFQU9ILGNBUEcsRUFRSCxPQVJHLEVBU0gsVUFURyxFQVVILE1BVkcsRUFXSCxzQkFYRyxFQVlILHdCQVpHLEVBYUgsaUJBYkcsRUFjSCxxQkFkRyxFQWVILGFBZkcsRUFnQkgsdUJBaEJHLEVBaUJILGFBakJHLEVBa0JILG9CQWxCRyxFQW1CSCxvQkFuQkcsQ0FEQTtBQXNCUCx3QkFBUSxDQUNKLFFBREksRUFFSixnQkFGSSxFQUdKLGVBSEksRUFJSixNQUpJLEVBS0osT0FMSSxFQU1KLFlBTkksRUFPSixzQkFQSSxFQVFKLHFCQVJJLEVBU0osa0JBVEksRUFVSixtQkFWSSxFQVdKLG9CQVhJLEVBWUoseUJBWkksRUFhSix1QkFiSSxFQWNKLG1CQWRJLEVBZUosdUJBZkksRUFnQkosd0JBaEJJLEVBaUJKLGlCQWpCSSxFQWtCSixhQWxCSSxFQW1CSixnQkFuQkksRUFvQkosa0JBcEJJLEVBcUJKLHVCQXJCSSxFQXNCSix3QkF0QkksQ0F0QkQ7QUE4Q1AsdUJBQU8sQ0FDSCxPQURHLEVBRUgsWUFGRyxFQUdILE1BSEcsQ0E5Q0E7QUFtRFAsMEJBQVUsQ0FDTixRQURNLEVBRU4sT0FGTSxFQUdOLFdBSE07QUFuREg7QUE1QlIsU0FoQkU7O0FBdUdILG9CQXZHRztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBd0dlLFNBQUsseUJBQUwsRUF4R2Y7QUFBQTtBQXdHRCx1QkF4R0M7QUF5R0Qsc0JBekdDLEdBeUdRLEVBekdSOztBQTBHTCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFFBQVEsTUFBNUIsRUFBb0MsR0FBcEMsRUFBeUM7QUFDakMsMEJBRGlDLEdBQ3hCLFFBQVEsQ0FBUixDQUR3QjtBQUVqQyxzQkFGaUMsR0FFNUIsT0FBTyxRQUFQLENBRjRCO0FBR2pDLHdCQUhpQyxHQUcxQixPQUFPLFlBQVAsQ0FIMEI7QUFJakMseUJBSmlDLEdBSXpCLE9BQU8sZUFBUCxDQUp5QjtBQUtqQyxxQ0FMaUMsR0FLYixNQUFPLE9BQU8sS0FMRDs7QUFNckMsMkJBQU8sU0FBSyxrQkFBTCxDQUF5QixJQUF6QixDQUFQO0FBQ0EsNEJBQVEsU0FBSyxrQkFBTCxDQUF5QixLQUF6QixDQUFSO0FBQ0ksMEJBUmlDLEdBUXhCLG9CQUFvQixFQUFwQixHQUEwQixPQUFPLEdBQVAsR0FBYSxLQVJmOztBQVNyQywyQkFBTyxJQUFQLENBQWE7QUFDVCw4QkFBTSxFQURHO0FBRVQsa0NBQVUsTUFGRDtBQUdULGdDQUFRLElBSEM7QUFJVCxpQ0FBUyxLQUpBO0FBS1QsZ0NBQVE7QUFMQyxxQkFBYjtBQU9IO0FBQ0QsdUJBQU8sTUFBUDtBQTNISztBQUFBO0FBOEhILG9CQTlIRztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBK0hDLFNBQUssV0FBTCxFQS9IRDtBQUFBO0FBQUEsdUJBZ0lnQixTQUFLLG9CQUFMLENBQTJCLEVBQUUsWUFBWSxLQUFkLEVBQTNCLENBaEloQjtBQUFBO0FBZ0lELHdCQWhJQztBQWlJRCxzQkFqSUMsR0FpSVEsRUFBRSxRQUFRLFFBQVYsRUFqSVI7O0FBa0lMLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksU0FBUyxNQUE3QixFQUFxQyxHQUFyQyxFQUEwQztBQUNsQywyQkFEa0MsR0FDeEIsU0FBUyxDQUFULENBRHdCO0FBRWxDLDRCQUZrQyxHQUV2QixRQUFRLFVBQVIsRUFBb0IsV0FBcEIsRUFGdUI7O0FBR3RDLCtCQUFXLFNBQUssa0JBQUwsQ0FBeUIsUUFBekIsQ0FBWDtBQUNJLDJCQUprQyxHQUl4QjtBQUNWLGdDQUFRLFFBQVEsaUJBQVIsQ0FERTtBQUVWLGdDQUFRLFNBRkU7QUFHVixpQ0FBUyxRQUFRLFFBQVI7QUFIQyxxQkFKd0I7O0FBU3RDLHdCQUFJLFlBQVksS0FBaEIsRUFBdUI7QUFDbkIsZ0NBQVEsTUFBUixJQUFrQixRQUFRLE1BQVIsSUFBa0IsVUFBcEM7QUFDQSxnQ0FBUSxPQUFSLElBQW1CLFFBQVEsT0FBUixJQUFtQixVQUF0QztBQUNIO0FBQ0QsNEJBQVEsTUFBUixJQUFrQixRQUFRLE9BQVIsSUFBbUIsUUFBUSxNQUFSLENBQXJDO0FBQ0EsMkJBQU8sUUFBUCxJQUFtQixPQUFuQjtBQUNIO0FBQ0QsdUJBQU8sTUFBUDtBQWxKSztBQUFBO0FBcUpILHNCQXJKRywwQkFxSmEsTUFySmI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBcUpxQixzQkFySnJCLGdGQXFKOEIsRUFySjlCO0FBQUEsdUJBc0pDLFNBQUssV0FBTCxFQXRKRDtBQUFBO0FBQUEsdUJBdUppQixTQUFLLG9CQUFMLENBQTJCLFNBQUssTUFBTCxDQUFhO0FBQzFELDhCQUFVLFNBQUssUUFBTCxDQUFlLE1BQWY7QUFEZ0QsaUJBQWIsRUFFOUMsTUFGOEMsQ0FBM0IsQ0F2SmpCO0FBQUE7QUF1SkQseUJBdkpDO0FBMEpELHlCQTFKQyxHQTBKVyxTQUFLLFlBQUwsRUExSlg7QUEySkQsc0JBM0pDLEdBMkpRO0FBQ1QsNEJBQVEsRUFEQztBQUVULDRCQUFRLEVBRkM7QUFHVCxpQ0FBYSxTQUhKO0FBSVQsZ0NBQVksU0FBSyxPQUFMLENBQWMsU0FBZDtBQUpILGlCQTNKUjs7QUFpS0wscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxVQUFVLE1BQTlCLEVBQXNDLEdBQXRDLEVBQTJDO0FBQ25DLHlCQURtQyxHQUMzQixVQUFVLENBQVYsQ0FEMkI7QUFFbkMsd0JBRm1DLEdBRTNCLE1BQU0sTUFBTixLQUFpQixNQUFsQixHQUE0QixNQUE1QixHQUFxQyxNQUZUO0FBR25DLDBCQUhtQyxHQUcxQixNQUFNLE1BQU4sQ0FIMEI7QUFJbkMseUJBSm1DLEdBSTNCLE1BQU0sT0FBTixDQUoyQjs7QUFLdkMsMkJBQU8sSUFBUCxFQUFhLElBQWIsQ0FBbUIsQ0FBRSxLQUFGLEVBQVMsTUFBVCxDQUFuQjtBQUNIO0FBQ0QsdUJBQU8sTUFBUCxJQUFpQixTQUFLLE1BQUwsQ0FBYSxPQUFPLE1BQVAsQ0FBYixFQUE2QixDQUE3QixFQUFnQyxJQUFoQyxDQUFqQjtBQUNBLHVCQUFPLE1BQVAsSUFBaUIsU0FBSyxNQUFMLENBQWEsT0FBTyxNQUFQLENBQWIsRUFBNkIsQ0FBN0IsQ0FBakI7QUFDQSx1QkFBTyxNQUFQO0FBMUtLO0FBQUE7QUE2S0gsbUJBN0tHLHVCQTZLVSxNQTdLVjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkE4S0MsU0FBSyxXQUFMLEVBOUtEO0FBQUE7QUErS0QsdUJBL0tDLEdBK0tTO0FBQ1YsOEJBQVUsU0FBSyxRQUFMLENBQWUsTUFBZixDQURBO0FBRVYsK0JBQVcsSUFGRDtBQUdWLCtCQUFXLElBSEQ7QUFJViw2QkFBUyxDQUpDO0FBS1YsK0JBQVc7QUFMRCxpQkEvS1Q7QUFBQSx1QkFzTGMsU0FBSyxzQkFBTCxDQUE2QixPQUE3QixDQXRMZDtBQUFBO0FBc0xELHNCQXRMQztBQXVMRCw0QkF2TEMsR0F1TGMsT0FBTyxNQXZMckI7QUF3TEQscUJBeExDLEdBd0xPLE9BQU8sZUFBZSxDQUF0QixDQXhMUDtBQUFBLHVCQXlMZSxTQUFLLHNCQUFMLENBQTZCLE9BQTdCLENBekxmO0FBQUE7QUF5TEQsdUJBekxDO0FBMExELHNCQTFMQyxHQTBMUSxRQUFRLENBQVIsQ0ExTFI7QUEyTEQseUJBM0xDLEdBMkxXLFNBQUssWUFBTCxFQTNMWDs7QUE0TEwsdUJBQU87QUFDSCxpQ0FBYSxTQURWO0FBRUgsZ0NBQVksU0FBSyxPQUFMLENBQWMsU0FBZCxDQUZUO0FBR0gsNEJBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQUhMO0FBSUgsMkJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQUpKO0FBS0gsMkJBQU8sV0FBWSxNQUFNLFVBQU4sQ0FBWixDQUxKO0FBTUgsMkJBQU8sV0FBWSxNQUFNLFVBQU4sQ0FBWixDQU5KO0FBT0gsNEJBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQVBMO0FBUUgsNEJBQVEsU0FSTDtBQVNILDZCQUFTLFdBQVksT0FBTyxPQUFQLENBQVosQ0FUTjtBQVVILDZCQUFTLFNBVk47QUFXSCw0QkFBUSxTQVhMO0FBWUgsOEJBQVUsU0FaUDtBQWFILGtDQUFjLFNBYlg7QUFjSCwrQkFBVyxTQWRSO0FBZUgsa0NBQWMsV0FBWSxPQUFPLGNBQVAsQ0FBWixDQWZYO0FBZ0JILG1DQUFlLFdBQVksT0FBTyxpQkFBUCxDQUFaLENBaEJaO0FBaUJILDRCQUFRO0FBakJMLGlCQUFQO0FBNUxLO0FBQUE7QUFpTkgsbUJBak5HLHVCQWlOVSxNQWpOVjtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQWlOa0Isc0JBak5sQixnRkFpTjJCLEVBak4zQjtBQUFBLHVCQWtOQyxTQUFLLFdBQUwsRUFsTkQ7QUFBQTtBQW1OTCx1QkFBTyxTQUFLLGNBQUwsQ0FBcUIsU0FBSyxNQUFMLENBQWE7QUFDckMsOEJBQVUsU0FBSyxRQUFMLENBQWUsTUFBZjtBQUQyQixpQkFBYixFQUV6QixNQUZ5QixDQUFyQixDQUFQO0FBbk5LO0FBQUE7QUF3TkgsbUJBeE5HLHVCQXdOVSxNQXhOVixFQXdOa0IsSUF4TmxCLEVBd053QixJQXhOeEIsRUF3TjhCLE1BeE45QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQXdOc0MscUJBeE50QyxnRkF3TjhDLFNBeE45QztBQXdOeUQsc0JBeE56RCxnRkF3TmtFLEVBeE5sRTtBQUFBLHVCQXlOQyxTQUFLLFdBQUwsRUF6TkQ7QUFBQTtBQTBORCxxQkExTkMsR0EwTk87QUFDUiw4QkFBVSxTQUFLLFFBQUwsQ0FBZSxNQUFmLENBREY7QUFFUiw0QkFBUSxTQUFLLFVBQUwsQ0FBaUIsSUFBakIsQ0FGQTtBQUdSLGdDQUFZLE1BSEo7QUFJUiwrQkFBVyxTQUFLLFVBQUwsQ0FBaUIsSUFBakI7QUFKSCxpQkExTlA7O0FBZ09MLG9CQUFJLFFBQVEsT0FBWjtBQUNJLDBCQUFNLE1BQU4sSUFBZ0IsS0FBaEI7QUFESixpQkFoT0ssT0FrT2dCLFNBQUssZ0JBQUwsQ0FBdUIsU0FBSyxNQUFMLENBQWEsS0FBYixFQUFvQixNQUFwQixDQUF2QixDQWxPaEI7QUFBQTtBQWtPRCx3QkFsT0M7O0FBbU9MLHVCQUFPO0FBQ0gsNEJBQVEsUUFETDtBQUVILDBCQUFNLFNBQVMsU0FBVDtBQUZILGlCQUFQO0FBbk9LO0FBQUE7QUF5T0gsbUJBek9HLHVCQXlPVSxFQXpPVjtBQUFBOztBQUFBO0FBQUEsdUJBME9DLFNBQUssV0FBTCxFQTFPRDtBQUFBO0FBMk9MLHVCQUFPLFNBQUssa0JBQUwsQ0FBeUIsRUFBRSxXQUFXLEVBQWIsRUFBekIsQ0FBUDtBQTNPSztBQUFBO0FBOE9ULGVBOU9TLG1CQThPQSxJQTlPQSxFQThPMEY7QUFBQSxnQkFBcEYsR0FBb0YsdUVBQTlFLFFBQThFO0FBQUEsZ0JBQXBFLE1BQW9FLHVFQUEzRCxLQUEyRDtBQUFBLGdCQUFwRCxNQUFvRCx1RUFBM0MsRUFBMkM7QUFBQSxnQkFBdkMsT0FBdUMsdUVBQTdCLFNBQTZCO0FBQUEsZ0JBQWxCLElBQWtCLHVFQUFYLFNBQVc7O0FBQy9GLGdCQUFJLFFBQVEsVUFBVSxLQUFLLE9BQWYsR0FBeUIsR0FBekIsR0FBK0IsSUFBM0M7QUFDQSxnQkFBSSxPQUFPLElBQVAsQ0FBYSxNQUFiLEVBQXFCLE1BQXpCLEVBQ0ksU0FBUyxNQUFNLEtBQUssU0FBTCxDQUFnQixNQUFoQixDQUFmO0FBQ0osZ0JBQUksTUFBTSxLQUFLLElBQUwsQ0FBVSxLQUFWLElBQW1CLEtBQTdCO0FBQ0EsZ0JBQUksT0FBTyxTQUFYLEVBQXNCO0FBQ2xCLG9CQUFJLFFBQVEsS0FBSyxLQUFMLEdBQWMsUUFBZCxFQUFaO0FBQ0Esb0JBQUksVUFBVSxNQUFkLEVBQ0ksSUFBSSxPQUFPLElBQVAsQ0FBYSxNQUFiLEVBQXFCLE1BQXpCLEVBQ0ksT0FBTyxLQUFLLElBQUwsQ0FBVyxNQUFYLENBQVA7QUFDUixvQkFBSSxVQUFVLENBQUUsTUFBRixFQUFVLEtBQVYsRUFBaUIsS0FBakIsRUFBd0IsUUFBUSxFQUFoQyxFQUFvQyxJQUFwQyxDQUEwQyxFQUExQyxDQUFkO0FBQ0EsMEJBQVU7QUFDTixvQ0FBZ0Isa0JBRFY7QUFFTixpQ0FBYSxLQUZQO0FBR04sK0JBQVcsS0FBSyxNQUhWO0FBSU4scUNBQWlCLEtBQUssSUFBTCxDQUFXLEtBQUssTUFBTCxDQUFhLE9BQWIsQ0FBWCxFQUFrQyxLQUFLLE1BQUwsQ0FBYSxLQUFLLE1BQWxCLENBQWxDO0FBSlgsaUJBQVY7QUFNSDtBQUNELG1CQUFPLEtBQUssS0FBTCxDQUFZLEdBQVosRUFBaUIsTUFBakIsRUFBeUIsT0FBekIsRUFBa0MsSUFBbEMsQ0FBUDtBQUNIO0FBalFRLEtBQWI7O0FBb1FBOztBQUVBLFFBQUksUUFBUTs7QUFFUixjQUFNLE9BRkU7QUFHUixnQkFBUSxPQUhBO0FBSVIscUJBQWEsSUFKTCxFQUlXO0FBQ25CLHFCQUFhLElBTEwsRUFLVztBQUNuQixtQkFBVyxJQU5IO0FBT1IsZ0JBQVE7QUFDSixvQkFBUSxxR0FESjtBQUVKLG1CQUFPLHVCQUZIO0FBR0osbUJBQU8sbUJBSEg7QUFJSixtQkFBTztBQUpILFNBUEE7QUFhUixlQUFPO0FBQ0gsc0JBQVU7QUFDTix1QkFBTyxDQUNILGlCQURHLEVBRUgsUUFGRyxFQUdILFlBSEcsRUFJSCxRQUpHO0FBREQsYUFEUDtBQVNILHVCQUFXO0FBQ1AsdUJBQU8sQ0FDSCxnQkFERyxFQUVILFNBRkcsRUFHSCxNQUhHLEVBSUgsVUFKRyxFQUtILGdCQUxHLEVBTUgscUJBTkcsRUFPSCxlQVBHLEVBUUgsUUFSRyxFQVNILGVBVEcsRUFVSCxhQVZHLEVBV0gsaUJBWEcsRUFZSCxvQkFaRyxFQWFILGVBYkcsRUFjSCxhQWRHLEVBZUgsb0JBZkcsRUFnQkgsY0FoQkcsRUFpQkgsYUFqQkcsRUFrQkgsbUJBbEJHLEVBbUJILGNBbkJHLEVBb0JILG1CQXBCRyxDQURBO0FBdUJQLHdCQUFRLENBQ0osb0JBREksRUFFSix1QkFGSSxFQUdKLGtCQUhJLEVBSUosUUFKSSxFQUtKLGNBTEksRUFNSixvQkFOSSxFQU9KLGtCQVBJLEVBUUosaUJBUkksQ0F2QkQ7QUFpQ1AsMEJBQVUsQ0FDTixjQURNLEVBRU4sWUFGTTtBQWpDSDtBQVRSLFNBYkM7O0FBOERGLG9CQTlERTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkErRGdCLFNBQUssdUJBQUwsRUEvRGhCO0FBQUE7QUErREEsdUJBL0RBO0FBZ0VBLHNCQWhFQSxHQWdFUyxFQWhFVDs7QUFpRUoscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxRQUFRLFNBQVIsRUFBbUIsTUFBdkMsRUFBK0MsR0FBL0MsRUFBb0Q7QUFDNUMsMEJBRDRDLEdBQ25DLFFBQVEsU0FBUixFQUFtQixDQUFuQixDQURtQztBQUU1QyxzQkFGNEMsR0FFdkMsT0FBTyxNQUFQLENBRnVDO0FBRzVDLDBCQUg0QyxHQUduQyxHQUFHLFdBQUgsR0FBa0IsT0FBbEIsQ0FBMkIsR0FBM0IsRUFBZ0MsR0FBaEMsQ0FIbUM7QUFBQSxxQ0FJMUIsT0FBTyxLQUFQLENBQWMsR0FBZCxDQUowQjtBQUFBO0FBSTFDLHdCQUowQztBQUlwQyx5QkFKb0M7O0FBS2hELDJCQUFPLElBQVAsQ0FBYTtBQUNULDhCQUFNLEVBREc7QUFFVCxrQ0FBVSxNQUZEO0FBR1QsZ0NBQVEsSUFIQztBQUlULGlDQUFTLEtBSkE7QUFLVCxnQ0FBUTtBQUxDLHFCQUFiO0FBT0g7QUFDRCx1QkFBTyxNQUFQO0FBOUVJO0FBQUE7QUFpRkYsb0JBakZFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQWtGRSxTQUFLLFdBQUwsRUFsRkY7QUFBQTtBQUFBLHVCQW1GaUIsU0FBSyxpQkFBTCxFQW5GakI7QUFBQTtBQW1GQSx3QkFuRkE7QUFvRkEsd0JBcEZBLEdBb0ZXLFNBQVMsU0FBVCxFQUFvQixVQUFwQixDQXBGWDtBQXFGQSxzQkFyRkEsR0FxRlMsRUFBRSxRQUFRLFFBQVYsRUFyRlQ7O0FBc0ZKLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksU0FBUyxNQUE3QixFQUFxQyxHQUFyQyxFQUEwQztBQUNsQywyQkFEa0MsR0FDeEIsU0FBUyxDQUFULENBRHdCO0FBRWxDLDRCQUZrQyxHQUV2QixRQUFRLFVBQVIsRUFBb0IsV0FBcEIsRUFGdUI7QUFHbEMsMkJBSGtDLEdBR3hCO0FBQ1YsZ0NBQVEsV0FBWSxRQUFRLFdBQVIsQ0FBWixDQURFO0FBRVYsZ0NBQVEsV0FBWSxRQUFRLFFBQVIsQ0FBWixDQUZFO0FBR1YsaUNBQVMsV0FBWSxRQUFRLE9BQVIsQ0FBWjtBQUhDLHFCQUh3Qjs7QUFRdEMsMkJBQU8sUUFBUCxJQUFtQixPQUFuQjtBQUNIO0FBQ0QsdUJBQU8sTUFBUDtBQWhHSTtBQUFBO0FBbUdGLHNCQW5HRSwwQkFtR2MsTUFuR2Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFtR3NCLHNCQW5HdEIsbUZBbUcrQixFQW5HL0I7QUFBQSx1QkFvR0UsU0FBSyxXQUFMLEVBcEdGO0FBQUE7QUFBQSx1QkFxR2lCLFNBQUssa0JBQUwsQ0FBeUIsU0FBSyxNQUFMLENBQWE7QUFDdkQsNEJBQVEsU0FBSyxRQUFMLENBQWUsTUFBZjtBQUQrQyxpQkFBYixFQUUzQyxNQUYyQyxDQUF6QixDQXJHakI7QUFBQTtBQXFHQSx3QkFyR0E7QUF3R0EseUJBeEdBLEdBd0dZLFNBQVMsU0FBVCxDQXhHWjtBQXlHQSx5QkF6R0EsR0F5R1ksU0FBSyxTQUFMLENBQWdCLFVBQVUsWUFBVixDQUFoQixDQXpHWjtBQTBHQSxzQkExR0EsR0EwR1M7QUFDVCw0QkFBUSxFQURDO0FBRVQsNEJBQVEsRUFGQztBQUdULGlDQUFhLFNBSEo7QUFJVCxnQ0FBWSxTQUFLLE9BQUwsQ0FBYyxTQUFkO0FBSkgsaUJBMUdUO0FBZ0hBLHFCQWhIQSxHQWdIUSxDQUFFLE1BQUYsRUFBVSxNQUFWLENBaEhSOztBQWlISixxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLE1BQU0sTUFBMUIsRUFBa0MsR0FBbEMsRUFBdUM7QUFDL0Isd0JBRCtCLEdBQ3hCLE1BQU0sQ0FBTixDQUR3QjtBQUUvQiwwQkFGK0IsR0FFdEIsVUFBVSxJQUFWLENBRnNCOztBQUduQyx5QkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLE9BQU8sTUFBM0IsRUFBbUMsR0FBbkMsRUFBd0M7QUFDaEMsNkJBRGdDLEdBQ3hCLE9BQU8sQ0FBUCxDQUR3QjtBQUVoQyw2QkFGZ0MsR0FFeEIsV0FBWSxNQUFNLE9BQU4sQ0FBWixDQUZ3QjtBQUdoQyw4QkFIZ0MsR0FHdkIsV0FBWSxNQUFNLFFBQU4sQ0FBWixDQUh1Qjs7QUFJcEMsK0JBQU8sSUFBUCxFQUFhLElBQWIsQ0FBbUIsQ0FBRSxLQUFGLEVBQVMsTUFBVCxDQUFuQjtBQUNIO0FBQ0o7QUFDRCx1QkFBTyxNQUFQO0FBM0hJO0FBQUE7QUErSEYsbUJBL0hFLHVCQStIVyxNQS9IWDtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBZ0lFLFNBQUssV0FBTCxFQWhJRjtBQUFBO0FBQUEsdUJBaUlpQixTQUFLLGVBQUwsQ0FBc0I7QUFDdkMsNEJBQVEsU0FBSyxRQUFMLENBQWUsTUFBZjtBQUQrQixpQkFBdEIsQ0FqSWpCO0FBQUE7QUFpSUEsd0JBaklBO0FBb0lBLHNCQXBJQSxHQW9JUyxTQUFTLFNBQVQsQ0FwSVQ7QUFxSUEseUJBcklBLEdBcUlZLFNBQUssU0FBTCxDQUFnQixPQUFPLFlBQVAsQ0FBaEIsQ0FySVo7O0FBc0lKLHVCQUFPO0FBQ0gsaUNBQWEsU0FEVjtBQUVILGdDQUFZLFNBQUssT0FBTCxDQUFjLFNBQWQsQ0FGVDtBQUdILDRCQUFRLFdBQVksT0FBTyxNQUFQLENBQVosQ0FITDtBQUlILDJCQUFPLFdBQVksT0FBTyxLQUFQLENBQVosQ0FKSjtBQUtILDJCQUFPLFdBQVksT0FBTyxLQUFQLENBQVosQ0FMSjtBQU1ILDJCQUFPLFdBQVksT0FBTyxLQUFQLENBQVosQ0FOSjtBQU9ILDRCQUFRLFdBQVksT0FBTyxNQUFQLENBQVosQ0FQTDtBQVFILDRCQUFRLFNBUkw7QUFTSCw2QkFBUyxTQVROO0FBVUgsNkJBQVMsU0FWTjtBQVdILDRCQUFRLFNBWEw7QUFZSCw4QkFBVSxTQVpQO0FBYUgsa0NBQWMsU0FiWDtBQWNILCtCQUFXLFNBZFI7QUFlSCxrQ0FBYyxTQWZYO0FBZ0JILG1DQUFlLFdBQVksT0FBTyxRQUFQLENBQVosQ0FoQlo7QUFpQkgsNEJBQVE7QUFqQkwsaUJBQVA7QUF0SUk7QUFBQTtBQTJKRixtQkEzSkUsdUJBMkpXLE1BM0pYO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBMkptQixzQkEzSm5CLG1GQTJKNEIsRUEzSjVCO0FBQUEsdUJBNEpFLFNBQUssV0FBTCxFQTVKRjtBQUFBO0FBNkpKLHVCQUFPLFNBQUssZUFBTCxDQUFzQixTQUFLLE1BQUwsQ0FBYTtBQUN0Qyw0QkFBUSxTQUFLLFFBQUwsQ0FBZSxNQUFmO0FBRDhCLGlCQUFiLEVBRTFCLE1BRjBCLENBQXRCLENBQVA7QUE3Skk7QUFBQTtBQWtLRixtQkFsS0UsdUJBa0tXLE1BbEtYLEVBa0ttQixJQWxLbkIsRUFrS3lCLElBbEt6QixFQWtLK0IsTUFsSy9CO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBa0t1QyxxQkFsS3ZDLG1GQWtLK0MsU0FsSy9DO0FBa0swRCxzQkFsSzFELG1GQWtLbUUsRUFsS25FO0FBQUEsdUJBbUtFLFNBQUssV0FBTCxFQW5LRjtBQUFBO0FBb0tBLHFCQXBLQSxHQW9LUTtBQUNSLDRCQUFRLFNBQUssUUFBTCxDQUFlLE1BQWYsQ0FEQTtBQUVSLDRCQUFRLElBRkE7QUFHUiw0QkFBUSxJQUhBO0FBSVIsNkJBQVM7QUFKRCxpQkFwS1I7O0FBMEtKLG9CQUFJLFFBQVEsT0FBWjtBQUNJLDBCQUFNLE9BQU4sSUFBaUIsS0FBakI7QUFESixpQkExS0ksT0E0S2lCLFNBQUssaUJBQUwsQ0FBd0IsU0FBSyxNQUFMLENBQWEsS0FBYixFQUFvQixNQUFwQixDQUF4QixDQTVLakI7QUFBQTtBQTRLQSx3QkE1S0E7O0FBNktKLHVCQUFPO0FBQ0gsNEJBQVEsUUFETDtBQUVILDBCQUFNLFNBQVMsU0FBVCxFQUFvQixLQUFwQjtBQUZILGlCQUFQO0FBN0tJO0FBQUE7QUFtTEYsbUJBbkxFLHVCQW1MVyxFQW5MWDtBQUFBOztBQUFBO0FBQUEsdUJBb0xFLFNBQUssV0FBTCxFQXBMRjtBQUFBO0FBcUxKLHVCQUFPLFNBQUssbUJBQUwsQ0FBMEIsRUFBRSxPQUFPLEVBQVQsRUFBMUIsQ0FBUDtBQXJMSTtBQUFBO0FBd0xGLGVBeExFLG1CQXdMTyxJQXhMUDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQXdMYSxtQkF4TGIsbUZBd0xtQixRQXhMbkI7QUF3TDZCLHNCQXhMN0IsbUZBd0xzQyxLQXhMdEM7QUF3TDZDLHNCQXhMN0MsbUZBd0xzRCxFQXhMdEQ7QUF3TDBELHVCQXhMMUQsbUZBd0xvRSxTQXhMcEU7QUF3TCtFLG9CQXhML0UsbUZBd0xzRixTQXhMdEY7QUF5TEEscUJBekxBLEdBeUxRLE1BQU0sU0FBSyxPQUFYLEdBQXFCLEdBQXJCLEdBQTJCLFNBQUssYUFBTCxDQUFvQixJQUFwQixFQUEwQixNQUExQixDQXpMbkM7QUEwTEEsbUJBMUxBLEdBMExNLFNBQUssSUFBTCxDQUFVLEtBQVYsSUFBbUIsS0ExTHpCOztBQTJMSixvQkFBSSxPQUFPLFFBQVgsRUFBcUI7QUFDakIsd0JBQUksT0FBTyxJQUFQLENBQWEsTUFBYixFQUFxQixNQUF6QjtBQUNJLCtCQUFPLE1BQU0sU0FBSyxTQUFMLENBQWdCLE1BQWhCLENBQWI7QUFESjtBQUVILGlCQUhELE1BR087QUFDSCx3QkFBSSxPQUFPLElBQVAsQ0FBYSxNQUFiLEVBQXFCLE1BQXpCO0FBQ0ksK0JBQU8sU0FBSyxJQUFMLENBQVcsTUFBWCxDQUFQO0FBREoscUJBRUksS0FIRCxHQUdTLFNBQUssS0FBTCxHQUFjLFFBQWQsRUFIVDtBQUlDLDJCQUpELEdBSVcsQ0FBRSxLQUFGLEVBQVMsTUFBVCxFQUFpQixLQUFqQixFQUF3QixRQUFRLEVBQWhDLEVBQXFDLElBQXJDLENBQTJDLEVBQTNDLENBSlg7QUFLQyw2QkFMRCxHQUthLFNBQUssSUFBTCxDQUFXLFNBQUssTUFBTCxDQUFhLE9BQWIsQ0FBWCxFQUFrQyxTQUFLLE1BQUwsQ0FBYSxTQUFLLE1BQWxCLENBQWxDLENBTGI7QUFNQyx3QkFORCxHQU1RLFNBQUssTUFBTCxHQUFjLEdBQWQsR0FBb0IsS0FBcEIsR0FBNEIsR0FBNUIsR0FBa0MsU0FOMUM7O0FBT0gsOEJBQVUsRUFBRSxpQkFBaUIsV0FBVyxJQUE5QixFQUFWO0FBQ0g7QUF0TUcsdUJBdU1pQixTQUFLLEtBQUwsQ0FBWSxHQUFaLEVBQWlCLE1BQWpCLEVBQXlCLE9BQXpCLEVBQWtDLElBQWxDLENBdk1qQjtBQUFBO0FBdU1BLHdCQXZNQTtBQUFBLHlCQXdNQSxhQUFhLFFBeE1iOztBQXlNQSw4QkFBSSxTQUFTLFNBQVQsQ0FBSjtBQUNJLDJCQUFPLFFBQVA7QUFESjtBQUVKLDBCQUFNLElBQUksYUFBSixDQUFtQixTQUFLLEVBQUwsR0FBVSxHQUFWLEdBQWdCLFNBQUssSUFBTCxDQUFXLFFBQVgsQ0FBbkMsQ0FBTjtBQUZJO0FBek1BO0FBQUE7QUFBQSxLQUFaOztBQStNQTs7QUFFQSxRQUFJLFdBQVc7O0FBRVgsY0FBTSxVQUZLO0FBR1gsZ0JBQVEsVUFIRztBQUlYLHFCQUFhLElBSkY7QUFLWCxxQkFBYSxJQUxGO0FBTVgsbUJBQVcsSUFOQTtBQU9YLGdCQUFRO0FBQ0osb0JBQVEscUdBREo7QUFFSixtQkFBTyw4QkFGSDtBQUdKLG1CQUFPLDBCQUhIO0FBSUosbUJBQU87QUFKSCxTQVBHO0FBYVgsZUFBTztBQUNILHNCQUFVO0FBQ04sdUJBQU8sQ0FDSCxrQkFERyxFQUVILG1CQUZHLEVBR0gsY0FIRyxFQUlILG9CQUpHO0FBREQsYUFEUDtBQVNILHVCQUFXO0FBQ1Asd0JBQVEsQ0FDSixVQURJLEVBRUosZUFGSSxFQUdKLFdBSEksRUFJSixrQkFKSSxFQUtKLGVBTEksRUFNSiwyQkFOSSxFQU9KLDBCQVBJLEVBUUosa0JBUkksRUFTSixtQkFUSSxFQVVKLFlBVkksRUFXSixtQkFYSSxFQVlKLHFCQVpJLEVBYUosbUJBYkksRUFjSixvQkFkSSxFQWVKLHlCQWZJLEVBZ0JKLG9CQWhCSSxFQWlCSixrQkFqQkksRUFrQkosb0JBbEJJLEVBbUJKLGNBbkJJLEVBb0JKLGlCQXBCSTtBQUREO0FBVFIsU0FiSTtBQStDWCxtQkFBVztBQUNQLHVCQUFXLEVBQUUsTUFBTSxRQUFSLEVBQWtCLFVBQVUsU0FBNUIsRUFBdUMsUUFBUSxLQUEvQyxFQUFzRCxTQUFTLEtBQS9ELEVBREo7QUFFUCx1QkFBVyxFQUFFLE1BQU0sUUFBUixFQUFrQixVQUFVLFNBQTVCLEVBQXVDLFFBQVEsS0FBL0MsRUFBc0QsU0FBUyxLQUEvRCxFQUZKO0FBR1AsdUJBQVcsRUFBRSxNQUFNLFFBQVIsRUFBa0IsVUFBVSxTQUE1QixFQUF1QyxRQUFRLEtBQS9DLEVBQXNELFNBQVMsS0FBL0QsRUFISjtBQUlQLHVCQUFXLEVBQUUsTUFBTSxRQUFSLEVBQWtCLFVBQVUsU0FBNUIsRUFBdUMsUUFBUSxLQUEvQyxFQUFzRCxTQUFTLEtBQS9ELEVBSko7QUFLUCx1QkFBVyxFQUFFLE1BQU0sUUFBUixFQUFrQixVQUFVLFNBQTVCLEVBQXVDLFFBQVEsS0FBL0MsRUFBc0QsU0FBUyxLQUEvRCxFQUxKO0FBTVAsdUJBQVcsRUFBRSxNQUFNLFFBQVIsRUFBa0IsVUFBVSxTQUE1QixFQUF1QyxRQUFRLEtBQS9DLEVBQXNELFNBQVMsS0FBL0QsRUFOSjtBQU9QLHVCQUFXLEVBQUUsTUFBTSxRQUFSLEVBQWtCLFVBQVUsU0FBNUIsRUFBdUMsUUFBUSxLQUEvQyxFQUFzRCxTQUFTLEtBQS9ELEVBUEo7QUFRUCx1QkFBVyxFQUFFLE1BQU0sUUFBUixFQUFrQixVQUFVLFNBQTVCLEVBQXVDLFFBQVEsS0FBL0MsRUFBc0QsU0FBUyxLQUEvRCxFQVJKO0FBU1AsdUJBQVcsRUFBRSxNQUFNLFFBQVIsRUFBa0IsVUFBVSxTQUE1QixFQUF1QyxRQUFRLEtBQS9DLEVBQXNELFNBQVMsS0FBL0QsRUFUSjtBQVVQLHVCQUFXLEVBQUUsTUFBTSxRQUFSLEVBQWtCLFVBQVUsU0FBNUIsRUFBdUMsUUFBUSxLQUEvQyxFQUFzRCxTQUFTLEtBQS9ELEVBVko7QUFXUCx1QkFBVyxFQUFFLE1BQU0sUUFBUixFQUFrQixVQUFVLFNBQTVCLEVBQXVDLFFBQVEsS0FBL0MsRUFBc0QsU0FBUyxLQUEvRCxFQVhKO0FBWVAsdUJBQVcsRUFBRSxNQUFNLFFBQVIsRUFBa0IsVUFBVSxTQUE1QixFQUF1QyxRQUFRLEtBQS9DLEVBQXNELFNBQVMsS0FBL0Q7QUFaSixTQS9DQTs7QUE4REwsc0JBOURLLDBCQThEVyxNQTlEWDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUE4RG1CLHNCQTlEbkIsbUZBOEQ0QixFQTlENUI7QUFBQSx1QkErRGUsU0FBSyxvQkFBTCxDQUEyQixTQUFLLE1BQUwsQ0FBYTtBQUMxRCwwQkFBTSxTQUFLLFFBQUwsQ0FBZSxNQUFmO0FBRG9ELGlCQUFiLEVBRTlDLE1BRjhDLENBQTNCLENBL0RmO0FBQUE7QUErREgseUJBL0RHO0FBa0VILHlCQWxFRyxHQWtFUyxTQUFVLFVBQVUsV0FBVixDQUFWLElBQW9DLElBbEU3QztBQW1FSCxzQkFuRUcsR0FtRU07QUFDVCw0QkFBUSxFQURDO0FBRVQsNEJBQVEsRUFGQztBQUdULGlDQUFhLFNBSEo7QUFJVCxnQ0FBWSxTQUFLLE9BQUwsQ0FBYyxTQUFkO0FBSkgsaUJBbkVOO0FBeUVILHFCQXpFRyxHQXlFSyxDQUFFLE1BQUYsRUFBVSxNQUFWLENBekVMOztBQTBFUCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLE1BQU0sTUFBMUIsRUFBa0MsR0FBbEMsRUFBdUM7QUFDL0Isd0JBRCtCLEdBQ3hCLE1BQU0sQ0FBTixDQUR3QjtBQUUvQiwwQkFGK0IsR0FFdEIsVUFBVSxJQUFWLENBRnNCOztBQUduQyx5QkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLE9BQU8sTUFBM0IsRUFBbUMsR0FBbkMsRUFBd0M7QUFDaEMsNkJBRGdDLEdBQ3hCLE9BQU8sQ0FBUCxDQUR3QjtBQUVoQyw2QkFGZ0MsR0FFeEIsV0FBWSxNQUFNLENBQU4sQ0FBWixDQUZ3QjtBQUdoQyw4QkFIZ0MsR0FHdkIsV0FBWSxNQUFNLENBQU4sQ0FBWixDQUh1Qjs7QUFJcEMsK0JBQU8sSUFBUCxFQUFhLElBQWIsQ0FBbUIsQ0FBRSxLQUFGLEVBQVMsTUFBVCxDQUFuQjtBQUNIO0FBQ0o7QUFDRCx1QkFBTyxNQUFQO0FBcEZPO0FBQUE7QUF1RkwsbUJBdkZLLHVCQXVGUSxNQXZGUjtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQXdGWSxTQUFLLGlCQUFMLENBQXdCO0FBQ3ZDLDBCQUFNLFNBQUssUUFBTCxDQUFlLE1BQWY7QUFEaUMsaUJBQXhCLENBeEZaO0FBQUE7QUF3Rkgsc0JBeEZHO0FBMkZILHlCQTNGRyxHQTJGUyxTQUFVLE9BQU8sV0FBUCxDQUFWLElBQWlDLElBM0YxQzs7QUE0RlAsdUJBQU87QUFDSCxpQ0FBYSxTQURWO0FBRUgsZ0NBQVksU0FBSyxPQUFMLENBQWMsU0FBZCxDQUZUO0FBR0gsNEJBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQUhMO0FBSUgsMkJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQUpKO0FBS0gsMkJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQUxKO0FBTUgsMkJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQU5KO0FBT0gsNEJBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQVBMO0FBUUgsNEJBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQVJMO0FBU0gsNkJBQVMsU0FUTjtBQVVILDZCQUFTLFNBVk47QUFXSCw0QkFBUSxXQUFZLE9BQU8sTUFBUCxDQUFaLENBWEw7QUFZSCw4QkFBVSxTQVpQO0FBYUgsa0NBQWMsU0FiWDtBQWNILCtCQUFXLFNBZFI7QUFlSCxrQ0FBYyxTQWZYO0FBZ0JILG1DQUFlLFdBQVksT0FBTyxRQUFQLENBQVosQ0FoQlo7QUFpQkgsNEJBQVE7QUFqQkwsaUJBQVA7QUE1Rk87QUFBQTtBQWlIWCxrQkFqSFcsc0JBaUhDLEtBakhELEVBaUhRLE1BakhSLEVBaUhnQjtBQUN2QixnQkFBSSxZQUFZLFNBQVUsTUFBTSxNQUFOLENBQVYsQ0FBaEI7QUFDQSxnQkFBSSxPQUFRLE1BQU0sTUFBTixLQUFpQixDQUFsQixHQUF1QixLQUF2QixHQUErQixNQUExQztBQUNBLG1CQUFPO0FBQ0gsc0JBQU0sTUFBTSxLQUFOLEVBQWEsUUFBYixFQURIO0FBRUgsd0JBQVEsS0FGTDtBQUdILDZCQUFhLFNBSFY7QUFJSCw0QkFBWSxLQUFLLE9BQUwsQ0FBYyxTQUFkLENBSlQ7QUFLSCwwQkFBVSxPQUFPLFFBQVAsQ0FMUDtBQU1ILHdCQUFRLFNBTkw7QUFPSCx3QkFBUSxJQVBMO0FBUUgseUJBQVMsV0FBWSxNQUFNLE9BQU4sQ0FBWixDQVJOO0FBU0gsMEJBQVUsV0FBWSxNQUFNLFFBQU4sQ0FBWjtBQVRQLGFBQVA7QUFXSCxTQS9IVTtBQWlJTCxtQkFqSUssdUJBaUlRLE1BaklSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQWlJZ0Isc0JBakloQixtRkFpSXlCLEVBakl6QjtBQWtJSCxpQkFsSUcsR0FrSUMsU0FBSyxNQUFMLENBQWEsTUFBYixDQWxJRDtBQUFBLHVCQW1JYyxTQUFLLHVCQUFMLENBQThCLFNBQUssTUFBTCxDQUFhO0FBQzVELDBCQUFNLEVBQUUsSUFBRixDQURzRDtBQUU1RCw0QkFBUTtBQUZvRCxpQkFBYixFQUdoRCxNQUhnRCxDQUE5QixDQW5JZDtBQUFBO0FBbUlILHdCQW5JRzs7QUF1SVAsdUJBQU8sU0FBSyxXQUFMLENBQWtCLFFBQWxCLEVBQTRCLENBQTVCLENBQVA7QUF2SU87QUFBQTtBQTBJTCxvQkExSUs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQTJJYSxTQUFLLGtCQUFMLEVBM0liO0FBQUE7QUEySUgsdUJBM0lHO0FBNElILHNCQTVJRyxHQTRJTSxFQUFFLFFBQVEsT0FBVixFQTVJTjs7QUE2SVAscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxTQUFLLFVBQUwsQ0FBZ0IsTUFBcEMsRUFBNEMsR0FBNUMsRUFBaUQ7QUFDekMsNEJBRHlDLEdBQzlCLFNBQUssVUFBTCxDQUFnQixDQUFoQixDQUQ4QjtBQUV6Qyw2QkFGeUMsR0FFN0IsU0FBUyxXQUFULEVBRjZCO0FBR3pDLHlCQUh5QyxHQUdqQyxZQUFZLFVBSHFCO0FBSXpDLHdCQUp5QyxHQUlsQyxZQUFZLFlBSnNCO0FBS3pDLHdCQUx5QyxHQUtsQyxZQUFZLFdBTHNCO0FBTXpDLDJCQU55QyxHQU0vQjtBQUNWLGdDQUFRLFNBREU7QUFFVixnQ0FBUSxTQUZFO0FBR1YsaUNBQVM7QUFIQyxxQkFOK0I7O0FBVzdDLHdCQUFJLFFBQVEsT0FBWjtBQUNJLGdDQUFRLE1BQVIsSUFBa0IsV0FBWSxRQUFRLElBQVIsQ0FBWixDQUFsQjtBQURKLHFCQUVBLElBQUksUUFBUSxPQUFaO0FBQ0ksZ0NBQVEsTUFBUixJQUFrQixXQUFZLFFBQVEsSUFBUixDQUFaLENBQWxCO0FBREoscUJBRUEsSUFBSSxTQUFTLE9BQWI7QUFDSSxnQ0FBUSxPQUFSLElBQW1CLFdBQVksUUFBUSxLQUFSLENBQVosQ0FBbkI7QUFESixxQkFFQSxPQUFPLFFBQVAsSUFBbUIsT0FBbkI7QUFDSDtBQUNELHVCQUFPLE1BQVA7QUFoS087QUFBQTtBQW1LTCxtQkFuS0ssdUJBbUtRLE1BbktSLEVBbUtnQixJQW5LaEIsRUFtS3NCLElBbkt0QixFQW1LNEIsTUFuSzVCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFtS29DLHFCQW5LcEMsbUZBbUs0QyxTQW5LNUM7QUFtS3VELHNCQW5LdkQsbUZBbUtnRSxFQW5LaEU7QUFvS0gsc0JBcEtHLEdBb0tNLGdCQUFnQixTQUFLLFVBQUwsQ0FBaUIsSUFBakIsQ0FwS3RCO0FBcUtILHFCQXJLRyxHQXFLSztBQUNSLDBCQUFNLFNBQUssUUFBTCxDQUFlLE1BQWYsQ0FERTtBQUVSLDhCQUFVO0FBRkYsaUJBcktMOztBQXlLUCxvQkFBSSxRQUFRLFFBQVo7QUFDSSw4QkFBVSxRQUFWO0FBREo7QUFHSSwwQkFBTSxPQUFOLElBQWlCLEtBQWpCO0FBSEosaUJBSUEsVUFBVSxJQUFWO0FBN0tPLHVCQThLYyxTQUFLLE1BQUwsRUFBYyxTQUFLLE1BQUwsQ0FBYSxLQUFiLEVBQW9CLE1BQXBCLENBQWQsQ0E5S2Q7QUFBQTtBQThLSCx3QkE5S0c7O0FBK0tQLHVCQUFPO0FBQ0gsNEJBQVEsUUFETDtBQUVILDBCQUFNLFNBQVMsSUFBVDtBQUZILGlCQUFQO0FBL0tPO0FBQUE7QUFxTEwsbUJBckxLLHVCQXFMUSxFQXJMUjtBQUFBOztBQXNMUCxtQkFBTyxTQUFLLHNCQUFMLENBQTZCLEVBQUUsTUFBTSxFQUFSLEVBQTdCLENBQVA7QUF0TE87QUF5TEwsZUF6TEssbUJBeUxJLElBekxKO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUF5TFUsbUJBekxWLG1GQXlMZ0IsUUF6TGhCO0FBeUwwQixzQkF6TDFCLG1GQXlMbUMsS0F6TG5DO0FBeUwwQyxzQkF6TDFDLG1GQXlMbUQsRUF6TG5EO0FBeUx1RCx1QkF6THZELG1GQXlMaUUsU0F6TGpFO0FBeUw0RSxvQkF6TDVFLG1GQXlMbUYsU0F6TG5GO0FBMExILG1CQTFMRyxHQTBMRyxTQUFLLElBQUwsQ0FBVSxLQUFWLElBQW1CLEdBQW5CLEdBQXlCLFNBQUssT0FBOUIsR0FBd0MsR0FBeEMsR0FBOEMsU0FBSyxhQUFMLENBQW9CLElBQXBCLEVBQTBCLE1BQTFCLENBMUxqRDtBQTJMSCxxQkEzTEcsR0EyTEssU0FBSyxJQUFMLENBQVcsTUFBWCxFQUFtQixTQUFLLGFBQUwsQ0FBb0IsSUFBcEIsQ0FBbkIsQ0EzTEw7O0FBNExQLG9CQUFJLE9BQU8sUUFBWCxFQUFxQjtBQUNqQix3QkFBSSxPQUFPLElBQVAsQ0FBYSxLQUFiLEVBQW9CLE1BQXhCO0FBQ0ksK0JBQU8sTUFBTSxTQUFLLFNBQUwsQ0FBZ0IsS0FBaEIsQ0FBYjtBQURKO0FBRUgsaUJBSEQsTUFHTztBQUNILHdCQUFJLENBQUMsU0FBSyxHQUFWO0FBQ0ksOEJBQU0sSUFBSSxtQkFBSixDQUF5QixTQUFLLEVBQUwsR0FBVSxhQUFWLEdBQTBCLFNBQUssRUFBL0IsR0FBb0MsbUNBQTdELENBQU47QUFESixxQkFFSSxLQUhELEdBR1MsU0FBSyxLQUFMLEdBQWMsUUFBZCxFQUhUO0FBSUMsd0JBSkQsR0FJUSxRQUFRLFNBQUssR0FBYixHQUFtQixTQUFLLE1BSmhDO0FBS0MsNkJBTEQsR0FLYSxTQUFLLE1BQUwsQ0FBYSxTQUFLLElBQUwsQ0FBVyxTQUFLLE1BQUwsQ0FBYSxJQUFiLENBQVgsRUFBK0IsU0FBSyxNQUFMLENBQWEsU0FBSyxNQUFsQixDQUEvQixDQUFiLENBTGI7O0FBTUgsNEJBQVEsU0FBSyxNQUFMLENBQWE7QUFDakIsK0JBQU8sU0FBSyxNQURLO0FBRWpCLHFDQUFhLFVBQVUsV0FBVixFQUZJO0FBR2pCLGlDQUFTO0FBSFEscUJBQWIsRUFJTCxLQUpLLENBQVI7QUFLQSwyQkFBTyxTQUFLLFNBQUwsQ0FBZ0IsS0FBaEIsQ0FBUDtBQUNBLDhCQUFVO0FBQ04sd0NBQWdCLG1DQURWO0FBRU4sMENBQWtCLEtBQUssTUFBTCxDQUFZLFFBQVo7QUFGWixxQkFBVjtBQUlIO0FBL01NLHVCQWdOYyxTQUFLLEtBQUwsQ0FBWSxHQUFaLEVBQWlCLE1BQWpCLEVBQXlCLE9BQXpCLEVBQWtDLElBQWxDLENBaE5kO0FBQUE7QUFnTkgsd0JBaE5HOztBQWlOUCxvQkFBSSxZQUFZLFFBQWhCO0FBQ0ksd0JBQUksU0FBUyxRQUFULEtBQXNCLE9BQTFCO0FBQ0ksOEJBQU0sSUFBSSxhQUFKLENBQW1CLFNBQUssRUFBTCxHQUFVLEdBQVYsR0FBZ0IsU0FBSyxJQUFMLENBQVcsUUFBWCxDQUFuQyxDQUFOO0FBREo7QUFESixpQkFHQSxPQUFPLFFBQVA7QUFwTk87QUFBQTtBQUFBLEtBQWY7O0FBd05BOztBQUVBLFFBQUksVUFBVTs7QUFFVixjQUFNLFNBRkk7QUFHVixnQkFBUSxTQUhFO0FBSVYscUJBQWEsSUFKSDtBQUtWLG1CQUFXLE1BTEQ7QUFNVixxQkFBYSxJQU5IO0FBT1YsMkJBQW1CLElBUFQ7QUFRVixnQkFBUTtBQUNKLG9CQUFRLHFHQURKO0FBRUosbUJBQU8seUJBRkg7QUFHSixtQkFBTyxxQkFISDtBQUlKLG1CQUFPLENBQ0gsOEJBREcsRUFFSCxnREFGRztBQUpILFNBUkU7QUFpQlYsZUFBTztBQUNILHNCQUFVO0FBQ04sdUJBQU8sQ0FDSCxZQURHLEVBRUgsZUFGRyxFQUdILFNBSEcsRUFJSCxpQkFKRyxFQUtILGVBTEcsRUFNSCxXQU5HLEVBT0gsUUFQRztBQURELGFBRFA7QUFZSCx1QkFBVztBQUNQLHVCQUFPLENBQ0gsU0FERyxFQUVILFVBRkcsRUFHSCxnQkFIRyxFQUlILGdCQUpHLEVBS0gsT0FMRyxFQU1ILGNBTkcsRUFPSCxtQkFQRyxFQVFILFVBUkc7QUFEQSxhQVpSO0FBd0JILHNCQUFVO0FBQ04sdUJBQU8sQ0FDSCxVQURHLEVBRUgsV0FGRyxFQUdILFFBSEcsRUFJSCxZQUpHLEVBS0gsV0FMRyxFQU1ILFlBTkc7QUFERDtBQXhCUCxTQWpCRzs7QUFxREosb0JBckRJO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBc0RjLFNBQUssZ0JBQUwsRUF0RGQ7QUFBQTtBQXNERix1QkF0REU7QUF1REYsc0JBdkRFLEdBdURPLEVBdkRQOztBQXdETixxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFFBQVEsUUFBUixFQUFrQixNQUF0QyxFQUE4QyxHQUE5QyxFQUFtRDtBQUMzQywwQkFEMkMsR0FDbEMsUUFBUSxRQUFSLEVBQWtCLENBQWxCLENBRGtDO0FBRTNDLHNCQUYyQyxHQUV0QyxPQUFPLFlBQVAsQ0FGc0M7QUFHM0Msd0JBSDJDLEdBR3BDLE9BQU8sZ0JBQVAsQ0FIb0M7QUFJM0MseUJBSjJDLEdBSW5DLE9BQU8sY0FBUCxDQUptQzs7QUFLL0MsMkJBQU8sU0FBSyxrQkFBTCxDQUF5QixJQUF6QixDQUFQO0FBQ0EsNEJBQVEsU0FBSyxrQkFBTCxDQUF5QixLQUF6QixDQUFSO0FBQ0ksMEJBUDJDLEdBT2xDLE9BQU8sR0FBUCxHQUFhLEtBUHFCOztBQVEvQywyQkFBTyxJQUFQLENBQWE7QUFDVCw4QkFBTSxFQURHO0FBRVQsa0NBQVUsTUFGRDtBQUdULGdDQUFRLElBSEM7QUFJVCxpQ0FBUyxLQUpBO0FBS1QsZ0NBQVE7QUFMQyxxQkFBYjtBQU9IO0FBQ0QsdUJBQU8sTUFBUDtBQXhFTTtBQUFBO0FBMkVKLG9CQTNFSTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQTRFQSxTQUFLLFdBQUwsRUE1RUE7QUFBQTtBQUFBLHVCQTZFZSxTQUFLLGtCQUFMLEVBN0VmO0FBQUE7QUE2RUYsd0JBN0VFO0FBOEVGLHdCQTlFRSxHQThFUyxTQUFTLFFBQVQsQ0E5RVQ7QUErRUYsc0JBL0VFLEdBK0VPLEVBQUUsUUFBUSxRQUFWLEVBL0VQO0FBZ0ZGLHVCQWhGRSxHQWdGUSxTQUFLLE9BQUwsQ0FBYyxRQUFkLEVBQXdCLFVBQXhCLENBaEZSOztBQWlGTixxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFNBQUssVUFBTCxDQUFnQixNQUFwQyxFQUE0QyxHQUE1QyxFQUFpRDtBQUN6Qyw0QkFEeUMsR0FDOUIsU0FBSyxVQUFMLENBQWdCLENBQWhCLENBRDhCO0FBRXpDLDJCQUZ5QyxHQUUvQjtBQUNWLGdDQUFRLFNBREU7QUFFVixnQ0FBUSxTQUZFO0FBR1YsaUNBQVM7QUFIQyxxQkFGK0I7O0FBTzdDLHdCQUFJLFlBQVksT0FBaEIsRUFBeUI7QUFDakIsK0JBRGlCLEdBQ1AsUUFBUSxRQUFSLENBRE87O0FBRXJCLGdDQUFRLE1BQVIsSUFBa0IsUUFBUSxXQUFSLENBQWxCO0FBQ0EsZ0NBQVEsTUFBUixJQUFrQixRQUFRLFNBQVIsSUFBcUIsUUFBUSxXQUFSLENBQXZDO0FBQ0EsZ0NBQVEsT0FBUixJQUFtQixRQUFRLFNBQVIsQ0FBbkI7QUFDSDtBQUNELDJCQUFPLFFBQVAsSUFBbUIsT0FBbkI7QUFDSDtBQUNELHVCQUFPLE1BQVA7QUFoR007QUFBQTtBQW1HVixtQkFuR1UsdUJBbUdHLE1BbkdILEVBbUdXO0FBQ2pCLGdCQUFJLFFBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQUFaO0FBQ0EsZ0JBQUksU0FBUyxXQUFZLE9BQU8sVUFBUCxDQUFaLENBQWI7QUFDQSxtQkFBTyxDQUFFLEtBQUYsRUFBUyxNQUFULENBQVA7QUFDSCxTQXZHUztBQXlHVixvQkF6R1Usd0JBeUdJLE9BekdKLEVBeUdhO0FBQ25CLGdCQUFJLFNBQVMsRUFBYjtBQUNBLGlCQUFLLElBQUksSUFBSSxDQUFiLEVBQWdCLElBQUksUUFBUSxNQUE1QixFQUFvQyxHQUFwQyxFQUF5QztBQUNyQyx1QkFBTyxJQUFQLENBQWEsS0FBSyxXQUFMLENBQWtCLFFBQVEsQ0FBUixDQUFsQixDQUFiO0FBQ0g7QUFDRCxtQkFBTyxNQUFQO0FBQ0gsU0EvR1M7QUFpSEosc0JBakhJLDBCQWlIWSxNQWpIWjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQWlIb0Isc0JBakhwQixtRkFpSDZCLEVBakg3QjtBQUFBLHVCQWtIQSxTQUFLLFdBQUwsRUFsSEE7QUFBQTtBQUFBLHVCQW1IZSxTQUFLLGtCQUFMLENBQXlCLFNBQUssTUFBTCxDQUFhO0FBQ3ZELDhCQUFVLFNBQUssUUFBTCxDQUFlLE1BQWYsQ0FENkM7QUFFdkQsNEJBQVEsTUFGK0M7QUFHdkQsNkJBQVM7QUFIOEMsaUJBQWIsRUFJM0MsTUFKMkMsQ0FBekIsQ0FuSGY7QUFBQTtBQW1IRix3QkFuSEU7QUF3SEYseUJBeEhFLEdBd0hVLFNBQVMsUUFBVCxDQXhIVjtBQXlIRix5QkF6SEUsR0F5SFUsU0FBSyxZQUFMLEVBekhWO0FBMEhGLHNCQTFIRSxHQTBITztBQUNULDRCQUFRLEVBREM7QUFFVCw0QkFBUSxFQUZDO0FBR1QsaUNBQWEsU0FISjtBQUlULGdDQUFZLFNBQUssT0FBTCxDQUFjLFNBQWQ7QUFKSCxpQkExSFA7QUFnSUYscUJBaElFLEdBZ0lNLEVBQUUsUUFBUSxLQUFWLEVBQWlCLFFBQVEsTUFBekIsRUFoSU47QUFpSUYsb0JBaklFLEdBaUlLLE9BQU8sSUFBUCxDQUFhLEtBQWIsQ0FqSUw7O0FBa0lOLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksS0FBSyxNQUF6QixFQUFpQyxHQUFqQyxFQUFzQztBQUM5Qix1QkFEOEIsR0FDeEIsS0FBSyxDQUFMLENBRHdCO0FBRTlCLHdCQUY4QixHQUV2QixNQUFNLEdBQU4sQ0FGdUI7O0FBR2xDLDJCQUFPLEdBQVAsSUFBYyxTQUFLLFlBQUwsQ0FBbUIsVUFBVSxJQUFWLENBQW5CLENBQWQ7QUFDSDtBQUNELHVCQUFPLE1BQVA7QUF2SU07QUFBQTtBQTBJVixtQkExSVUsdUJBMElHLE1BMUlILEVBMElXLE1BMUlYLEVBMEltQjtBQUN6QixnQkFBSSxZQUFZLEtBQUssU0FBTCxDQUFnQixPQUFPLFdBQVAsQ0FBaEIsQ0FBaEI7QUFDQSxtQkFBTztBQUNILDZCQUFhLFNBRFY7QUFFSCw0QkFBWSxLQUFLLE9BQUwsQ0FBYyxTQUFkLENBRlQ7QUFHSCx3QkFBUSxXQUFZLE9BQU8sTUFBUCxDQUFaLENBSEw7QUFJSCx1QkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBSko7QUFLSCx1QkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBTEo7QUFNSCx1QkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBTko7QUFPSCx3QkFBUSxTQVBMO0FBUUgsd0JBQVEsU0FSTDtBQVNILHlCQUFTLFNBVE47QUFVSCx5QkFBUyxTQVZOO0FBV0gsd0JBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQVhMO0FBWUgsMEJBQVUsU0FaUDtBQWFILDhCQUFjLFNBYlg7QUFjSCwyQkFBVyxTQWRSO0FBZUgsOEJBQWMsV0FBWSxPQUFPLFlBQVAsQ0FBWixDQWZYO0FBZ0JILCtCQUFlLFdBQVksT0FBTyxRQUFQLENBQVosQ0FoQlo7QUFpQkgsd0JBQVE7QUFqQkwsYUFBUDtBQW1CSCxTQS9KUztBQWlLSixvQkFqS0k7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQWtLQSxTQUFLLFdBQUwsRUFsS0E7QUFBQTtBQUFBLHVCQW1LZSxTQUFLLHdCQUFMLEVBbktmO0FBQUE7QUFtS0Ysd0JBbktFO0FBb0tGLHVCQXBLRSxHQW9LUSxTQUFTLFFBQVQsQ0FwS1I7QUFxS0Ysc0JBcktFLEdBcUtPLEVBcktQOztBQXNLTixxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFFBQVEsTUFBNUIsRUFBb0MsR0FBcEMsRUFBeUM7QUFDakMsMEJBRGlDLEdBQ3hCLFFBQVEsQ0FBUixDQUR3QjtBQUVqQyxzQkFGaUMsR0FFNUIsT0FBTyxZQUFQLENBRjRCO0FBR2pDLDBCQUhpQyxHQUd4QixTQUh3QjtBQUlqQywwQkFKaUMsR0FJeEIsRUFKd0I7O0FBS3JDLHdCQUFJLE1BQU0sU0FBSyxhQUFmLEVBQThCO0FBQzFCLGlDQUFTLFNBQUssYUFBTCxDQUFtQixFQUFuQixDQUFUO0FBQ0EsaUNBQVMsT0FBTyxRQUFQLENBQVQ7QUFDSCxxQkFIRCxNQUdPO0FBQUEsb0NBQ21CLEdBQUcsS0FBSCxDQUFVLEdBQVYsQ0FEbkI7QUFBQTtBQUNHLDZCQURIO0FBQ1UsNEJBRFY7O0FBRUgsK0JBQU8sU0FBSyxrQkFBTCxDQUF5QixJQUF6QixDQUFQO0FBQ0EsZ0NBQVEsU0FBSyxrQkFBTCxDQUF5QixLQUF6QixDQUFSO0FBQ0EsaUNBQVMsT0FBTyxHQUFQLEdBQWEsS0FBdEI7QUFDSDtBQUNELDJCQUFPLE1BQVAsSUFBaUIsU0FBSyxXQUFMLENBQWtCLE1BQWxCLEVBQTBCLE1BQTFCLENBQWpCO0FBQ0g7QUFDRCx1QkFBTyxNQUFQO0FBdExNO0FBQUE7QUF5TEosbUJBekxJLHVCQXlMUyxNQXpMVDtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBMExBLFNBQUssV0FBTCxFQTFMQTtBQUFBO0FBMkxGLGlCQTNMRSxHQTJMRSxTQUFLLE1BQUwsQ0FBYSxNQUFiLENBM0xGO0FBQUEsdUJBNExlLFNBQUssc0JBQUwsQ0FBNkI7QUFDOUMsOEJBQVUsRUFBRSxJQUFGO0FBRG9DLGlCQUE3QixDQTVMZjtBQUFBO0FBNExGLHdCQTVMRTtBQStMRixzQkEvTEUsR0ErTE8sU0FBUyxRQUFULEVBQW1CLENBQW5CLENBL0xQOztBQWdNTix1QkFBTyxTQUFLLFdBQUwsQ0FBa0IsTUFBbEIsRUFBMEIsQ0FBMUIsQ0FBUDtBQWhNTTtBQUFBO0FBbU1WLGtCQW5NVSxzQkFtTUUsS0FuTUYsRUFtTTZCO0FBQUEsZ0JBQXBCLE1BQW9CLHVFQUFYLFNBQVc7O0FBQ25DLGdCQUFJLFlBQVksS0FBSyxTQUFMLENBQWdCLE1BQU0sV0FBTixDQUFoQixDQUFoQjtBQUNBLGdCQUFJLE9BQU8sU0FBWDtBQUNBLGdCQUFJLE1BQU0sV0FBTixLQUFzQixLQUExQixFQUFpQztBQUM3Qix1QkFBTyxLQUFQO0FBQ0gsYUFGRCxNQUVPLElBQUksTUFBTSxXQUFOLEtBQXNCLE1BQTFCLEVBQWtDO0FBQ3JDLHVCQUFPLE1BQVA7QUFDSDtBQUNELGdCQUFJLE9BQU8sU0FBWDtBQUNBLG1CQUFPO0FBQ0gsc0JBQU0sTUFBTSxJQUFOLEVBQVksUUFBWixFQURIO0FBRUgsd0JBQVEsS0FGTDtBQUdILDZCQUFhLFNBSFY7QUFJSCw0QkFBWSxLQUFLLE9BQUwsQ0FBYyxTQUFkLENBSlQ7QUFLSCwwQkFBVSxPQUFPLFFBQVAsQ0FMUDtBQU1ILHdCQUFRLFNBTkw7QUFPSCx3QkFBUSxJQVBMO0FBUUgseUJBQVMsTUFBTSxPQUFOLENBUk47QUFTSCwwQkFBVSxNQUFNLFVBQU47QUFUUCxhQUFQO0FBV0gsU0F2TlM7QUF5TkosbUJBek5JLHVCQXlOUyxNQXpOVDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUF5TmlCLHNCQXpOakIsbUZBeU4wQixFQXpOMUI7QUFBQSx1QkEwTkEsU0FBSyxXQUFMLEVBMU5BO0FBQUE7QUEyTkYsaUJBM05FLEdBMk5FLFNBQUssTUFBTCxDQUFhLE1BQWIsQ0EzTkY7QUFBQSx1QkE0TmUsU0FBSyxzQkFBTCxDQUE2QixTQUFLLE1BQUwsQ0FBYTtBQUMzRCw4QkFBVSxFQUFFLElBQUY7QUFEaUQsaUJBQWIsRUFFL0MsTUFGK0MsQ0FBN0IsQ0E1TmY7QUFBQTtBQTRORix3QkE1TkU7O0FBK05OLHVCQUFPLFNBQUssV0FBTCxDQUFrQixTQUFTLFFBQVQsQ0FBbEIsRUFBc0MsQ0FBdEMsQ0FBUDtBQS9OTTtBQUFBO0FBa09KLHlCQWxPSTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQWtPZSxzQkFsT2YsbUZBa093QixTQWxPeEI7QUFrT21DLHNCQWxPbkMsbUZBa080QyxFQWxPNUM7QUFtT0YsaUJBbk9FLEdBbU9FLFNBQUssTUFBTCxDQUFhLE1BQWIsQ0FuT0Y7QUFBQSx1QkFvT2UsU0FBSywyQkFBTCxDQUFrQyxTQUFLLE1BQUwsQ0FBYTtBQUNoRSxvQ0FBZ0IsRUFBRSxJQUFGO0FBRGdELGlCQUFiLENBQWxDLENBcE9mO0FBQUE7QUFvT0Ysd0JBcE9FOztBQXVPTix1QkFBTyxTQUFLLFdBQUwsQ0FBa0IsU0FBUyxRQUFULENBQWxCLEVBQXNDLE1BQXRDLENBQVA7QUF2T007QUFBQTtBQTBPSixtQkExT0ksdUJBME9TLE1BMU9ULEVBME9pQixJQTFPakIsRUEwT3VCLElBMU92QixFQTBPNkIsTUExTzdCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQTBPcUMscUJBMU9yQyxtRkEwTzZDLFNBMU83QztBQTBPd0Qsc0JBMU94RCxtRkEwT2lFLEVBMU9qRTtBQUFBLHVCQTJPQSxTQUFLLFdBQUwsRUEzT0E7QUFBQTtBQTRPRixzQkE1T0UsR0E0T08sY0FBYyxTQUFLLFVBQUwsQ0FBaUIsSUFBakIsQ0FBZCxHQUF1QyxJQTVPOUM7QUE2T0YscUJBN09FLEdBNk9NO0FBQ1IsOEJBQVUsU0FBSyxRQUFMLENBQWUsTUFBZixDQURGO0FBRVIsZ0NBQVk7QUFGSixpQkE3T047O0FBaVBOLG9CQUFJLFFBQVEsT0FBWjtBQUNJLDBCQUFNLE1BQU4sSUFBZ0IsS0FBaEI7QUFESixpQkFqUE0sT0FtUGUsU0FBSyxNQUFMLEVBQWMsU0FBSyxNQUFMLENBQWEsS0FBYixFQUFvQixNQUFwQixDQUFkLENBblBmO0FBQUE7QUFtUEYsd0JBblBFO0FBb1BGLHNCQXBQRSxHQW9QTztBQUNULDRCQUFRLFFBREM7QUFFVCwwQkFBTSxTQUFTLFFBQVQsRUFBbUIsTUFBbkI7QUFGRyxpQkFwUFA7O0FBd1BOLHVCQUFPLE1BQVA7QUF4UE07QUFBQTtBQTJQSixtQkEzUEksdUJBMlBTLEVBM1BUO0FBQUE7O0FBQUE7QUFBQSx1QkE0UEEsU0FBSyxXQUFMLEVBNVBBO0FBQUE7QUE2UE4sdUJBQU8sU0FBSyxlQUFMLENBQXNCLEVBQUUsUUFBUSxFQUFWLEVBQXRCLENBQVA7QUE3UE07QUFBQTtBQWdRVixrQkFoUVUsc0JBZ1FFLEtBaFFGLEVBZ1E2QjtBQUFBLGdCQUFwQixNQUFvQix1RUFBWCxTQUFXOztBQUNuQyxnQkFBSSxPQUFRLE1BQU0sTUFBTixLQUFpQixXQUFsQixHQUFpQyxLQUFqQyxHQUF5QyxNQUFwRDtBQUNBLGdCQUFJLE9BQU8sTUFBTSxRQUFOLENBQVg7QUFDQSxnQkFBSSxXQUFXLE1BQU0saUJBQU4sQ0FBZjtBQUNBLGdCQUFJLFNBQVMsU0FBYjtBQUNBLGdCQUFJLElBQUosRUFBVTtBQUNOLHlCQUFTLE1BQVQ7QUFDSCxhQUZELE1BRU8sSUFBSSxRQUFKLEVBQWM7QUFDakIseUJBQVMsVUFBVDtBQUNILGFBRk0sTUFFQTtBQUNILHlCQUFTLFFBQVQ7QUFDSDtBQUNELGdCQUFJLFNBQVMsU0FBYjtBQUNBLGdCQUFJLE1BQUosRUFBWTtBQUNSLHlCQUFTLE9BQU8sUUFBUCxDQUFUO0FBQ0gsYUFGRCxNQUVPO0FBQ0gsb0JBQUksV0FBVyxNQUFNLFVBQU4sQ0FBZjtBQUNBLG9CQUFJLFlBQVksS0FBSyxhQUFyQixFQUFvQztBQUNoQyw2QkFBUyxLQUFLLGFBQUwsQ0FBbUIsUUFBbkIsQ0FBVDtBQUNBLDZCQUFTLENBQUMsUUFBRCxDQUFUO0FBQ0g7QUFDSjtBQUNELGdCQUFJLFlBQVksS0FBSyxTQUFMLENBQWdCLE1BQU0sUUFBTixDQUFoQixDQUFoQjtBQUNBLGdCQUFJLFNBQVM7QUFDVCx3QkFBUSxLQURDO0FBRVQsc0JBQU0sTUFBTSxXQUFOLENBRkc7QUFHVCw2QkFBYSxTQUhKO0FBSVQsNEJBQVksS0FBSyxPQUFMLENBQWMsU0FBZCxDQUpIO0FBS1QsMEJBQVUsTUFMRDtBQU1ULHdCQUFRLE9BTkM7QUFPVCx3QkFBUSxJQVBDO0FBUVQseUJBQVMsTUFBTSxjQUFOLENBUkE7QUFTVCwwQkFBVSxNQUFNLFVBQU4sQ0FURDtBQVVULDZCQUFhLE1BQU0sbUJBQU4sQ0FWSjtBQVdULDBCQUFVO0FBWEQsYUFBYjtBQWFBLG1CQUFPLE1BQVA7QUFDSCxTQXJTUztBQXVTSixrQkF2U0ksc0JBdVNRLEVBdlNSO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQXdTQSxTQUFLLFdBQUwsRUF4U0E7QUFBQTtBQUFBLHVCQXlTZSxTQUFLLGVBQUwsQ0FBc0IsRUFBRSxRQUFRLEVBQVYsRUFBdEIsQ0F6U2Y7QUFBQTtBQXlTRix3QkF6U0U7O0FBMFNOLHVCQUFPLFNBQUssVUFBTCxDQUFpQixTQUFTLFFBQVQsQ0FBakIsQ0FBUDtBQTFTTTtBQUFBO0FBNlNKLGVBN1NJLG1CQTZTSyxJQTdTTDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQTZTVyxtQkE3U1gsbUZBNlNpQixRQTdTakI7QUE2UzJCLHNCQTdTM0IsbUZBNlNvQyxLQTdTcEM7QUE2UzJDLHNCQTdTM0MsbUZBNlNvRCxFQTdTcEQ7QUE2U3dELHVCQTdTeEQsbUZBNlNrRSxTQTdTbEU7QUE2UzZFLG9CQTdTN0UsbUZBNlNvRixTQTdTcEY7QUE4U0YsbUJBOVNFLEdBOFNJLFNBQUssSUFBTCxDQUFVLEtBQVYsSUFBbUIsR0FBbkIsR0FBeUIsU0FBSyxPQUE5QixHQUF3QyxHQTlTNUM7O0FBK1NOLG9CQUFJLE9BQU8sUUFBWCxFQUFxQjtBQUNqQiwyQkFBTyxNQUFNLEdBQU4sR0FBWSxPQUFPLFdBQVAsRUFBWixHQUFvQyxJQUEzQztBQUNBLHdCQUFJLE9BQU8sSUFBUCxDQUFhLE1BQWIsRUFBcUIsTUFBekI7QUFDSSwrQkFBTyxNQUFNLFNBQUssU0FBTCxDQUFnQixNQUFoQixDQUFiO0FBREo7QUFFSCxpQkFKRCxNQUlPO0FBQ0MseUJBREQsR0FDUyxTQUFLLEtBQUwsRUFEVDs7QUFFSCwyQkFBTyxNQUFNLEdBQWI7QUFDQSx3QkFBTSxPQUFPLFNBQVIsSUFBdUIsUUFBUSxVQUFoQyxJQUFpRCxRQUFRLFlBQTdEO0FBQ0ksK0JBQU8sT0FBTyxXQUFQLEVBQVA7QUFESixxQkFFQSxPQUFPLE9BQU8sR0FBUCxHQUFhLFNBQUssU0FBTCxDQUFnQixTQUFLLE1BQUwsQ0FBYTtBQUM3QyxpQ0FBUyxLQURvQztBQUU3QyxrQ0FBVSxTQUFLO0FBRjhCLHFCQUFiLEVBR2pDLE1BSGlDLENBQWhCLENBQXBCO0FBSUksNkJBVEQsR0FTYSxTQUFLLElBQUwsQ0FBVyxTQUFLLE1BQUwsQ0FBYSxHQUFiLENBQVgsRUFBOEIsU0FBSyxNQUFMLENBQWEsU0FBSyxNQUFsQixDQUE5QixFQUF5RCxRQUF6RCxDQVRiOztBQVVILDhCQUFVLEVBQUUsV0FBVyxTQUFiLEVBQVY7QUFDSDtBQTlUSyx1QkErVGUsU0FBSyxLQUFMLENBQVksR0FBWixFQUFpQixNQUFqQixFQUF5QixPQUF6QixFQUFrQyxJQUFsQyxDQS9UZjtBQUFBO0FBK1RGLHdCQS9URTtBQUFBLHlCQWdVRixhQUFhLFFBaFVYOztBQWlVRiw4QkFBSSxTQUFTLFNBQVQsQ0FBSjtBQUNJLDJCQUFPLFFBQVA7QUFESjtBQUVKLDBCQUFNLElBQUksYUFBSixDQUFtQixTQUFLLEVBQUwsR0FBVSxHQUFWLEdBQWdCLFNBQUssSUFBTCxDQUFXLFFBQVgsQ0FBbkMsQ0FBTjtBQUZJO0FBalVFO0FBQUE7QUFBQSxLQUFkOztBQXVVQTs7QUFFQSxRQUFJLGFBQWE7O0FBRWIsY0FBTSxZQUZPO0FBR2IsZ0JBQVEsWUFISztBQUliLHFCQUFhLENBQUUsSUFBRixFQUFRLElBQVIsRUFBYyxJQUFkLEVBQW9CLElBQXBCLEVBQTBCLElBQTFCLEVBQWdDLElBQWhDLENBSkE7QUFLYixxQkFBYSxJQUxBO0FBTWIsbUJBQVcsSUFORTtBQU9iLGdCQUFRO0FBQ0osb0JBQVEscUdBREo7QUFFSixtQkFBTztBQUNILDBCQUFVLGdDQURQO0FBRUgsMkJBQVc7QUFGUixhQUZIO0FBTUosbUJBQU8sd0JBTkg7QUFPSixtQkFBTztBQVBILFNBUEs7QUFnQmIsZUFBTztBQUNILHNCQUFVO0FBQ04sdUJBQU8sQ0FDSCxtQkFERyxFQUNxQjtBQUN4QixzQ0FGRyxFQUVxQjtBQUN4QixtQ0FIRztBQURELGFBRFA7QUFRSCx1QkFBVztBQUNQLHdCQUFRLENBQ0osR0FESSxFQUNHO0FBQ1AsbUJBRkksRUFFRztBQUNQLG9CQUhJLEVBR0c7QUFDUCxvQkFKSSxFQUlHO0FBQ1Asb0JBTEksRUFLRztBQUNQLHFCQU5JLEVBTUc7QUFDUCxxQkFQSSxFQU9HO0FBQ1AscUJBUkksRUFRRztBQUNQLHFCQVRJLEVBU0c7QUFDUCxxQkFWSSxFQVVHO0FBQ1AscUJBWEk7QUFERDtBQVJSLFNBaEJNO0FBd0NiLG1CQUFXO0FBQ1AsdUJBQVcsRUFBRSxNQUFNLFFBQVIsRUFBa0IsVUFBVSxTQUE1QixFQUF1QyxRQUFRLEtBQS9DLEVBQXNELFNBQVMsS0FBL0QsRUFBc0UsWUFBWSxDQUFsRixFQUFxRixVQUFVLFlBQS9GLEVBREo7QUFFUCx1QkFBVyxFQUFFLE1BQU0sUUFBUixFQUFrQixVQUFVLFNBQTVCLEVBQXVDLFFBQVEsS0FBL0MsRUFBc0QsU0FBUyxLQUEvRCxFQUFzRSxZQUFZLENBQWxGLEVBQXFGLFVBQVUsTUFBL0YsRUFGSjtBQUdQLHVCQUFXLEVBQUUsTUFBTSxRQUFSLEVBQWtCLFVBQVUsU0FBNUIsRUFBdUMsUUFBUSxLQUEvQyxFQUFzRCxTQUFTLEtBQS9ELEVBQXNFLFlBQVksQ0FBbEYsRUFBcUYsVUFBVSxRQUEvRixFQUhKO0FBSVAsdUJBQVcsRUFBRSxNQUFNLFFBQVIsRUFBa0IsVUFBVSxTQUE1QixFQUF1QyxRQUFRLEtBQS9DLEVBQXNELFNBQVMsS0FBL0QsRUFBc0UsWUFBWSxDQUFsRixFQUFxRixVQUFVLFNBQS9GLEVBSko7QUFLUCx1QkFBVyxFQUFFLE1BQU0sUUFBUixFQUFrQixVQUFVLFNBQTVCLEVBQXVDLFFBQVEsS0FBL0MsRUFBc0QsU0FBUyxLQUEvRCxFQUFzRSxZQUFZLENBQWxGLEVBQXFGLFVBQVUsVUFBL0Y7QUFMSixTQXhDRTs7QUFnRFAsb0JBaERPO0FBQUE7O0FBaURULG1CQUFPLFNBQUssYUFBTCxDQUFvQjtBQUN2QixnQ0FBZ0IsU0FBSyxLQUFMO0FBRE8sYUFBcEIsQ0FBUDtBQWpEUztBQXNEUCxzQkF0RE8sMEJBc0RTLE1BdERUO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBc0RpQixzQkF0RGpCLG1GQXNEMEIsRUF0RDFCO0FBdURMLGlCQXZESyxHQXVERCxTQUFLLE1BQUwsQ0FBYSxNQUFiLENBdkRDO0FBQUEsdUJBd0RhLFNBQUssMEJBQUwsQ0FBaUMsU0FBSyxNQUFMLENBQWE7QUFDaEUsZ0NBQVksRUFBRSxPQUFGLENBRG9EO0FBRWhFLHVDQUFtQixFQUFFLE1BQUY7QUFGNkMsaUJBQWIsRUFHcEQsTUFIb0QsQ0FBakMsQ0F4RGI7QUFBQTtBQXdETCx5QkF4REs7QUE0REwseUJBNURLLEdBNERPLFNBQUssWUFBTCxFQTVEUDtBQTZETCxzQkE3REssR0E2REk7QUFDVCw0QkFBUSxFQURDO0FBRVQsNEJBQVEsRUFGQztBQUdULGlDQUFhLFNBSEo7QUFJVCxnQ0FBWSxTQUFLLE9BQUwsQ0FBYyxTQUFkO0FBSkgsaUJBN0RKO0FBbUVMLHFCQW5FSyxHQW1FRyxDQUFFLE1BQUYsRUFBVSxNQUFWLENBbkVIOztBQW9FVCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLE1BQU0sTUFBMUIsRUFBa0MsR0FBbEMsRUFBdUM7QUFDL0Isd0JBRCtCLEdBQ3hCLE1BQU0sQ0FBTixDQUR3QjtBQUUvQiwwQkFGK0IsR0FFdEIsVUFBVSxJQUFWLENBRnNCOztBQUduQyx5QkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLE9BQU8sTUFBM0IsRUFBbUMsR0FBbkMsRUFBd0M7QUFDaEMsNkJBRGdDLEdBQ3hCLE9BQU8sQ0FBUCxDQUR3QjtBQUVoQyw2QkFGZ0MsR0FFeEIsV0FBWSxNQUFNLENBQU4sQ0FBWixDQUZ3QjtBQUdoQyw4QkFIZ0MsR0FHdkIsV0FBWSxNQUFNLENBQU4sQ0FBWixDQUh1Qjs7QUFJcEMsK0JBQU8sSUFBUCxFQUFhLElBQWIsQ0FBbUIsQ0FBRSxLQUFGLEVBQVMsTUFBVCxDQUFuQjtBQUNIO0FBQ0o7QUFDRCx1QkFBTyxNQUFQO0FBOUVTO0FBQUE7QUFpRlAsbUJBakZPLHVCQWlGTSxNQWpGTjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQWtGTCxpQkFsRkssR0FrRkQsU0FBSyxNQUFMLENBQWEsTUFBYixDQWxGQztBQUFBLHVCQW1GVSxTQUFLLHVCQUFMLENBQThCO0FBQzdDLGdDQUFZLEVBQUUsT0FBRixDQURpQztBQUU3Qyx1Q0FBbUIsRUFBRSxNQUFGO0FBRjBCLGlCQUE5QixDQW5GVjtBQUFBO0FBbUZMLHNCQW5GSztBQXVGTCx5QkF2RkssR0F1Rk8sU0FBSyxZQUFMLEVBdkZQO0FBd0ZMLDhCQXhGSyxHQXdGWSxFQUFFLE9BQUYsRUFBVyxXQUFYLEVBeEZaO0FBeUZMLDJCQXpGSyxHQXlGUyxTQUFTLGNBekZsQjs7QUEwRlQsdUJBQU87QUFDSCxpQ0FBYSxTQURWO0FBRUgsZ0NBQVksU0FBSyxPQUFMLENBQWMsU0FBZCxDQUZUO0FBR0gsNEJBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQUhMO0FBSUgsMkJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQUpKO0FBS0gsMkJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQUxKO0FBTUgsMkJBQU8sV0FBWSxPQUFPLE1BQVAsQ0FBWixDQU5KO0FBT0gsNEJBQVEsU0FQTDtBQVFILDRCQUFRLFNBUkw7QUFTSCw2QkFBUyxTQVROO0FBVUgsNkJBQVMsU0FWTjtBQVdILDRCQUFRLFdBQVksT0FBTyxNQUFQLENBQVosQ0FYTDtBQVlILDhCQUFVLFNBWlA7QUFhSCxrQ0FBYyxTQWJYO0FBY0gsK0JBQVcsU0FkUjtBQWVILGtDQUFjLFdBQVksT0FBTyxLQUFQLENBQVosQ0FmWDtBQWdCSCxtQ0FBZSxXQUFZLE9BQU8sV0FBUCxDQUFaLENBaEJaO0FBaUJILDRCQUFRO0FBakJMLGlCQUFQO0FBMUZTO0FBQUE7QUErR1AsbUJBL0dPLHVCQStHTSxNQS9HTjtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQStHYyxrQkEvR2QsbUZBK0d1QixFQS9HdkI7QUFnSEwsYUFoSEssR0FnSEQsU0FBSyxNQUFMLENBQWEsTUFBYixDQWhIQzs7QUFpSFQsbUJBQU8sU0FBSyx1QkFBTCxDQUE4QixTQUFLLE1BQUwsQ0FBYTtBQUM5Qyw0QkFBWSxFQUFFLE9BQUYsQ0FEa0M7QUFFOUMsbUNBQW1CLEVBQUUsTUFBRjtBQUYyQixhQUFiLEVBR2xDLE1BSGtDLENBQTlCLENBQVA7QUFqSFM7QUF1SFAsbUJBdkhPLHVCQXVITSxNQXZITixFQXVIYyxJQXZIZCxFQXVIb0IsSUF2SHBCLEVBdUgwQixNQXZIMUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQXVIa0MscUJBdkhsQyxtRkF1SDBDLFNBdkgxQztBQXVIcUQsc0JBdkhyRCxtRkF1SDhELEVBdkg5RDs7QUF3SFQsb0JBQUksUUFBUSxRQUFaO0FBQ0ksMEJBQU0sSUFBSSxhQUFKLENBQW1CLFNBQUssRUFBTCxHQUFVLDJCQUE3QixDQUFOO0FBREosaUJBRUksQ0ExSEssR0EwSEQsU0FBSyxNQUFMLENBQWEsTUFBYixDQTFIQztBQTJITCxxQkEzSEssR0EySEc7QUFDUiwrQkFBVyxTQUFLLEtBQUwsRUFESDtBQUVSLDhCQUFVLEVBQUUsSUFBRixDQUZGO0FBR1IsNEJBQVEsU0FBSyxVQUFMLENBQWlCLElBQWpCLENBSEE7QUFJUiwrQkFBVyxDQUpIO0FBS1IsNkJBQVMsS0FMRDtBQU1SLGdDQUFZLE1BTko7QUFPUixnQ0FBWSxFQUFFLFVBQUY7QUFQSixpQkEzSEg7QUFBQSx1QkFvSVksU0FBSyxZQUFMLENBQW1CLFNBQUssTUFBTCxDQUFhLEtBQWIsRUFBb0IsTUFBcEIsQ0FBbkIsQ0FwSVo7QUFBQTtBQW9JTCx3QkFwSUs7O0FBcUlULHVCQUFPO0FBQ0gsNEJBQVEsUUFETDtBQUVILDBCQUFNLFNBQVMsU0FBVDtBQUZILGlCQUFQO0FBcklTO0FBQUE7QUEySVAsbUJBM0lPLHVCQTJJTSxFQTNJTjtBQUFBO0FBQUE7QUFBQTs7QUEySVUsa0JBM0lWLG1GQTJJbUIsRUEzSW5COztBQTRJVCxtQkFBTyxTQUFLLFlBQUwsQ0FBbUIsU0FBSyxNQUFMLENBQWE7QUFDbkMsMkJBQVc7QUFEd0IsYUFBYixFQUV2QixNQUZ1QixDQUFuQixDQUFQO0FBNUlTO0FBaUpiLGVBakphLG1CQWlKSixJQWpKSSxFQWlKc0Y7QUFBQSxnQkFBcEYsR0FBb0YsdUVBQTlFLFFBQThFO0FBQUEsZ0JBQXBFLE1BQW9FLHVFQUEzRCxLQUEyRDtBQUFBLGdCQUFwRCxNQUFvRCx1RUFBM0MsRUFBMkM7QUFBQSxnQkFBdkMsT0FBdUMsdUVBQTdCLFNBQTZCO0FBQUEsZ0JBQWxCLElBQWtCLHVFQUFYLFNBQVc7O0FBQy9GLGdCQUFJLE1BQU0sS0FBSyxJQUFMLENBQVUsS0FBVixFQUFpQixHQUFqQixJQUF3QixHQUF4QixHQUE4QixLQUFLLE9BQW5DLEdBQTZDLEdBQTdDLEdBQW1ELEtBQUssYUFBTCxDQUFvQixJQUFwQixFQUEwQixNQUExQixDQUE3RDtBQUNBLGdCQUFJLFFBQVEsS0FBSyxJQUFMLENBQVcsTUFBWCxFQUFtQixLQUFLLGFBQUwsQ0FBb0IsSUFBcEIsQ0FBbkIsQ0FBWjtBQUNBLGdCQUFJLE9BQU8sUUFBWCxFQUFxQjtBQUNqQixvQkFBSSxPQUFPLElBQVAsQ0FBYSxLQUFiLEVBQW9CLE1BQXhCLEVBQ0ksT0FBTyxNQUFNLEtBQUssU0FBTCxDQUFnQixLQUFoQixDQUFiO0FBQ1AsYUFIRCxNQUdPO0FBQ0gsb0JBQUksUUFBUSxLQUFLLEtBQUwsR0FBYyxRQUFkLEVBQVo7QUFDQSxvQkFBSSxVQUFVLEtBQUssTUFBTCxDQUFhLEVBQUUsV0FBVyxJQUFiLEVBQWIsRUFBa0MsS0FBbEMsQ0FBZDtBQUNBLHVCQUFPLEtBQUssSUFBTCxDQUFXLE9BQVgsQ0FBUDtBQUNBLDBCQUFVO0FBQ04sOEJBQVUsS0FBSyxNQURUO0FBRU4sNkJBQVMsS0FGSDtBQUdOLGlDQUFhLEtBQUssSUFBTCxDQUFXLEtBQUssTUFBTCxDQUFhLEtBQWIsQ0FBWCxFQUFnQyxLQUFLLE1BQUwsQ0FBYSxLQUFLLE1BQWxCLENBQWhDLENBSFA7QUFJTixvQ0FBZ0I7QUFKVixpQkFBVjtBQU1IO0FBQ0QsbUJBQU8sS0FBSyxLQUFMLENBQVksR0FBWixFQUFpQixNQUFqQixFQUF5QixPQUF6QixFQUFrQyxJQUFsQyxDQUFQO0FBQ0g7QUFuS1ksS0FBakI7O0FBc0tBOztBQUVBLFFBQUksT0FBTzs7QUFFUCxjQUFNLE1BRkM7QUFHUCxnQkFBUSxNQUhEO0FBSVAscUJBQWEsQ0FBRSxJQUFGLEVBQVEsSUFBUixDQUpOLEVBSXNCO0FBQzdCLHFCQUFhLElBTE47QUFNUCxtQkFBVyxHQU5KO0FBT1AsbUJBQVcsaUNBUEo7QUFRUCxnQkFBUTtBQUNKLG9CQUFRLHFHQURKO0FBRUosbUJBQU8scUJBRkg7QUFHSixtQkFBTyxDQUNILGlCQURHLEVBRUgsb0JBRkcsQ0FISDtBQU9KLG1CQUFPLENBQ0gsd0RBREcsRUFFSCxxQkFGRyxFQUdILDJCQUhHO0FBUEgsU0FSRDtBQXFCUCxlQUFPO0FBQ0gsc0JBQVU7QUFDTix1QkFBTyxDQUNILGlCQURHLEVBRUgsb0JBRkcsRUFHSCxpQkFIRztBQURELGFBRFA7QUFRSCx1QkFBVztBQUNQLHdCQUFRLENBQ0osMkJBREksRUFFSiwwQkFGSSxFQUdKLDZCQUhJLEVBSUosNkJBSkksRUFLSix1QkFMSSxFQU1KLCtCQU5JLEVBT0osNkJBUEksRUFRSixtQkFSSSxFQVNKLDhCQVRJLEVBVUosa0NBVkksRUFXSiw2QkFYSSxFQVlKLHVCQVpJO0FBREQ7QUFSUixTQXJCQTtBQThDUCxtQkFBVztBQUNQLHVCQUFXLEVBQUUsTUFBTSxRQUFSLEVBQWtCLFVBQVUsU0FBNUIsRUFBdUMsUUFBUSxLQUEvQyxFQUFzRCxTQUFTLEtBQS9ELEVBREo7QUFFUCx1QkFBVyxFQUFFLE1BQU0sUUFBUixFQUFrQixVQUFVLFNBQTVCLEVBQXVDLFFBQVEsS0FBL0MsRUFBc0QsU0FBUyxLQUEvRDtBQUZKLFNBOUNKOztBQW1ERCxvQkFuREM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBb0RrQixTQUFLLDBCQUFMLEVBcERsQjtBQUFBO0FBb0RDLHdCQXBERDtBQXFEQyxvQkFyREQsR0FxRFEsU0FBUyxNQUFULENBckRSO0FBc0RDLHVCQXRERCxHQXNEVyxLQUFLLFNBQUwsQ0F0RFg7QUF1REMsc0JBdkRELEdBdURVLEVBQUUsUUFBUSxJQUFWLEVBdkRWOztBQXdESCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFNBQUssVUFBTCxDQUFnQixNQUFwQyxFQUE0QyxHQUE1QyxFQUFpRDtBQUN6Qyw0QkFEeUMsR0FDOUIsU0FBSyxVQUFMLENBQWdCLENBQWhCLENBRDhCO0FBRXpDLDJCQUZ5QyxHQUUvQjtBQUNWLGdDQUFRLFNBREU7QUFFVixnQ0FBUSxTQUZFO0FBR1YsaUNBQVM7QUFIQyxxQkFGK0I7O0FBTzdDLHdCQUFJLFlBQVksT0FBaEIsRUFBeUI7QUFDckIsNEJBQUksZUFBZSxRQUFRLFFBQVIsQ0FBbkIsRUFBc0M7QUFDbEMsb0NBQVEsTUFBUixJQUFrQixXQUFZLFFBQVEsUUFBUixFQUFrQixXQUFsQixFQUErQixPQUEvQixDQUFaLENBQWxCO0FBQ0g7QUFDSjtBQUNELHdCQUFJLFlBQVksT0FBaEIsRUFBeUI7QUFDckIsNEJBQUksYUFBYSxRQUFRLFFBQVIsQ0FBakIsRUFBb0M7QUFDaEMsb0NBQVEsT0FBUixJQUFtQixXQUFZLFFBQVEsUUFBUixFQUFrQixTQUFsQixFQUE2QixPQUE3QixDQUFaLENBQW5CO0FBQ0g7QUFDSjtBQUNELHdCQUFJLFFBQVEsT0FBUixDQUFKLEVBQXNCO0FBQ2xCLDRCQUFJLFFBQVEsTUFBUixDQUFKLEVBQXFCO0FBQ2pCLG9DQUFRLE1BQVIsSUFBa0IsUUFBUSxPQUFSLElBQW1CLFFBQVEsTUFBUixDQUFyQztBQUNIO0FBQ0o7QUFDRCwyQkFBTyxRQUFQLElBQW1CLE9BQW5CO0FBQ0g7QUFDRCx1QkFBTyxNQUFQO0FBaEZHO0FBQUE7QUFtRkQsc0JBbkZDLDBCQW1GZSxNQW5GZjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBbUZ1QixzQkFuRnZCLG1GQW1GZ0MsRUFuRmhDO0FBb0ZDLGlCQXBGRCxHQW9GSyxTQUFLLE1BQUwsQ0FBYSxNQUFiLENBcEZMO0FBQUEsdUJBcUZrQixTQUFLLHdCQUFMLENBQStCLFNBQUssTUFBTCxDQUFhO0FBQzdELDhCQUFVLEVBQUUsSUFBRjtBQURtRCxpQkFBYixFQUVqRCxNQUZpRCxDQUEvQixDQXJGbEI7QUFBQTtBQXFGQyx3QkFyRkQ7QUF3RkMseUJBeEZELEdBd0ZhLFNBQVMsTUFBVCxDQXhGYjtBQXlGQyx5QkF6RkQsR0F5RmEsU0FBSyxZQUFMLEVBekZiO0FBMEZDLHNCQTFGRCxHQTBGVTtBQUNULDRCQUFRLEVBREM7QUFFVCw0QkFBUSxFQUZDO0FBR1QsaUNBQWEsU0FISjtBQUlULGdDQUFZLFNBQUssT0FBTCxDQUFjLFNBQWQ7QUFKSCxpQkExRlY7QUFnR0MscUJBaEdELEdBZ0dTLENBQUUsTUFBRixFQUFVLE1BQVYsQ0FoR1Q7O0FBaUdILHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksTUFBTSxNQUExQixFQUFrQyxHQUFsQyxFQUF1QztBQUMvQix3QkFEK0IsR0FDeEIsTUFBTSxDQUFOLENBRHdCO0FBRS9CLDBCQUYrQixHQUV0QixVQUFVLElBQVYsQ0FGc0I7O0FBR25DLHlCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksT0FBTyxNQUEzQixFQUFtQyxHQUFuQyxFQUF3QztBQUNoQyw2QkFEZ0MsR0FDeEIsT0FBTyxDQUFQLENBRHdCO0FBRWhDLDZCQUZnQyxHQUV4QixNQUFNLFdBQU4sSUFBcUIsTUFGRztBQUdoQyw4QkFIZ0MsR0FHdkIsTUFBTSxZQUFOLElBQXNCLFNBSEM7O0FBSXBDLCtCQUFPLElBQVAsRUFBYSxJQUFiLENBQW1CLENBQUUsS0FBRixFQUFTLE1BQVQsQ0FBbkI7QUFDSDtBQUNKO0FBQ0QsdUJBQU8sTUFBUDtBQTNHRztBQUFBO0FBOEdELG1CQTlHQyx1QkE4R1ksTUE5R1o7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkErR2dCLFNBQUsscUJBQUwsQ0FBNEI7QUFDM0MsOEJBQVUsU0FBSyxRQUFMLENBQWUsTUFBZjtBQURpQyxpQkFBNUIsQ0EvR2hCO0FBQUE7QUErR0Msc0JBL0dEO0FBa0hDLHlCQWxIRCxHQWtIYSxPQUFPLFdBQVAsSUFBc0IsSUFsSG5DOztBQW1ISCx1QkFBTztBQUNILGlDQUFhLFNBRFY7QUFFSCxnQ0FBWSxTQUFLLE9BQUwsQ0FBYyxTQUFkLENBRlQ7QUFHSCw0QkFBUSxXQUFZLE9BQU8sTUFBUCxDQUFaLENBSEw7QUFJSCwyQkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBSko7QUFLSCwyQkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBTEo7QUFNSCwyQkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBTko7QUFPSCw0QkFBUSxTQVBMO0FBUUgsNEJBQVEsU0FSTDtBQVNILDZCQUFTLFNBVE47QUFVSCw2QkFBUyxTQVZOO0FBV0gsNEJBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQVhMO0FBWUgsOEJBQVUsU0FaUDtBQWFILGtDQUFjLFNBYlg7QUFjSCwrQkFBVyxTQWRSO0FBZUgsa0NBQWMsU0FmWDtBQWdCSCxtQ0FBZSxXQUFZLE9BQU8sUUFBUCxFQUFpQixLQUFqQixDQUFaLENBaEJaO0FBaUJILDRCQUFRO0FBakJMLGlCQUFQO0FBbkhHO0FBQUE7QUF3SUQsbUJBeElDLHVCQXdJWSxNQXhJWjtBQUFBO0FBQUE7QUFBQTs7QUF3SW9CLGtCQXhJcEIsbUZBd0k2QixFQXhJN0I7O0FBeUlILG1CQUFPLFNBQUsscUJBQUwsQ0FBNEIsU0FBSyxNQUFMLENBQWE7QUFDNUMsMEJBQVUsU0FBSyxRQUFMLENBQWUsTUFBZjtBQURrQyxhQUFiLEVBRWhDLE1BRmdDLENBQTVCLENBQVA7QUF6SUc7QUE4SUQsbUJBOUlDLHVCQThJWSxNQTlJWixFQThJb0IsSUE5SXBCLEVBOEkwQixJQTlJMUIsRUE4SWdDLE1BOUloQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBOEl3QyxxQkE5SXhDLG1GQThJZ0QsU0E5SWhEO0FBOEkyRCxzQkE5STNELG1GQThJb0UsRUE5SXBFO0FBK0lDLGlCQS9JRCxHQStJSyxTQUFLLE1BQUwsQ0FBYSxNQUFiLENBL0lMO0FBZ0pDLHFCQWhKRCxHQWdKUztBQUNSLDhCQUFVLEVBQUUsSUFBRixDQURGO0FBRVIsa0NBQWMsTUFGTjtBQUdSLG9DQUFnQixFQUFFLE9BQUYsQ0FIUjtBQUlSLDRCQUFTLFFBQVEsS0FBVCxHQUFrQixLQUFsQixHQUEwQjtBQUoxQixpQkFoSlQ7O0FBc0pILG9CQUFJLFFBQVEsT0FBWjtBQUNJLDBCQUFNLFdBQU4sSUFBcUIsS0FBckI7QUFESixpQkF0SkcsT0F3SmtCLFNBQUssOEJBQUwsQ0FBcUMsU0FBSyxNQUFMLENBQWEsS0FBYixFQUFvQixNQUFwQixDQUFyQyxDQXhKbEI7QUFBQTtBQXdKQyx3QkF4SkQ7O0FBeUpILHVCQUFPO0FBQ0gsNEJBQVEsUUFETDtBQUVILDBCQUFNLFNBQVMsVUFBVCxFQUFxQixRQUFyQjtBQUZILGlCQUFQO0FBekpHO0FBQUE7QUErSkQsbUJBL0pDLHVCQStKWSxFQS9KWjtBQUFBOztBQWdLSCxtQkFBTyxTQUFLLGlDQUFMLENBQXdDLEVBQUUsWUFBWSxFQUFkLEVBQXhDLENBQVA7QUFoS0c7QUFtS0QsZUFuS0MsbUJBbUtRLElBbktSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFtS2MsZUFuS2QsbUZBbUtvQixRQW5LcEI7QUFtSzhCLGtCQW5LOUIsbUZBbUt1QyxLQW5LdkM7QUFtSzhDLGtCQW5LOUMsbUZBbUt1RCxFQW5LdkQ7QUFtSzJELG1CQW5LM0QsbUZBbUtxRSxTQW5LckU7QUFtS2dGLGdCQW5LaEYsbUZBbUt1RixTQW5LdkY7QUFvS0MsbUJBcEtELEdBb0tXLFNBQUssYUFBTCxDQUFvQixJQUFwQixFQUEwQixNQUExQixDQXBLWDtBQXFLQyxlQXJLRCxHQXFLTyxTQUFLLElBQUwsQ0FBVSxLQUFWLElBQW1CLEdBQW5CLEdBQXlCLFNBQUssT0FBOUIsR0FBd0MsR0FBeEMsR0FBOEMsT0FyS3JEO0FBc0tDLGlCQXRLRCxHQXNLUyxTQUFLLElBQUwsQ0FBVyxNQUFYLEVBQW1CLFNBQUssYUFBTCxDQUFvQixJQUFwQixDQUFuQixDQXRLVDs7QUF1S0gsZ0JBQUksT0FBTyxRQUFYLEVBQXFCO0FBQ2pCLG9CQUFJLE9BQU8sSUFBUCxDQUFhLEtBQWIsRUFBb0IsTUFBeEI7QUFDSSwyQkFBTyxNQUFNLFNBQUssU0FBTCxDQUFnQixLQUFoQixDQUFiO0FBREo7QUFFSCxhQUhELE1BR087QUFDQyxxQkFERCxHQUNTLFNBQUssS0FBTCxFQURUOztBQUVILHVCQUFPLFNBQUssU0FBTCxDQUFnQixTQUFLLE1BQUwsQ0FBYSxFQUFFLFNBQVMsS0FBWCxFQUFiLEVBQWlDLEtBQWpDLENBQWhCLENBQVA7QUFDSSxzQkFIRCxHQUdVLFNBQUssY0FBTCxDQUFxQixTQUFLLE1BQTFCLENBSFY7QUFJQyxvQkFKRCxHQUlRLFVBQVUsSUFBVixHQUFpQixJQUp6QjtBQUtDLHlCQUxELEdBS2EsU0FBSyxJQUFMLENBQVcsU0FBSyxNQUFMLENBQWEsSUFBYixDQUFYLEVBQStCLE1BQS9CLEVBQXVDLFFBQXZDLEVBQWlELFFBQWpELENBTGI7O0FBTUgsMEJBQVU7QUFDTixvQ0FBZ0IsbUNBRFY7QUFFTixzQ0FBa0IsS0FBSyxNQUZqQjtBQUdOLGdDQUFZLFNBQUssTUFIWDtBQUlOLGlDQUFhO0FBSlAsaUJBQVY7QUFNSDtBQUNELG1CQUFPLFNBQUssS0FBTCxDQUFZLEdBQVosRUFBaUIsTUFBakIsRUFBeUIsT0FBekIsRUFBa0MsSUFBbEMsQ0FBUDtBQXZMRztBQUFBLEtBQVg7O0FBMkxBOztBQUVBLFFBQUksV0FBVzs7QUFFWCxjQUFNLFVBRks7QUFHWCxnQkFBUSxVQUhHO0FBSVgscUJBQWEsSUFKRjtBQUtYLHFCQUFhLElBTEY7QUFNWCxtQkFBVyxJQU5BO0FBT1gsZ0JBQVE7QUFDSixvQkFBUSxxR0FESjtBQUVKLG1CQUFPO0FBQ0gsMEJBQVUsZ0NBRFA7QUFFSCwyQkFBVztBQUZSLGFBRkg7QUFNSixtQkFBTywwQkFOSDtBQU9KLG1CQUFPO0FBUEgsU0FQRztBQWdCWCxlQUFPO0FBQ0gsc0JBQVU7QUFDTix1QkFBTyxDQUNILGFBREcsRUFFSCxXQUZHLEVBR0gsUUFIRyxFQUlILFFBSkc7QUFERCxhQURQO0FBU0gsdUJBQVc7QUFDUCx3QkFBUSxDQUNKLGlCQURJLEVBRUosVUFGSSxFQUdKLFdBSEksRUFJSixjQUpJLEVBS0osb0JBTEksRUFNSixhQU5JLEVBT0osaUJBUEksRUFRSixnQkFSSSxFQVNKLGtCQVRJLEVBVUosbUJBVkksRUFXSixhQVhJLEVBWUosaUJBWkksRUFhSixrQkFiSSxFQWNKLGdCQWRJLEVBZUosaUJBZkksRUFnQkosVUFoQkksRUFpQkosV0FqQkksRUFrQkosY0FsQkksRUFtQkosZUFuQkksRUFvQkosaUJBcEJJLEVBcUJKLGVBckJJLEVBc0JKLGdCQXRCSSxFQXVCSixtQkF2QkksRUF3Qkosa0JBeEJJLEVBeUJKLFdBekJJLEVBMEJKLFlBMUJJLEVBMkJKLGVBM0JJO0FBREQ7QUFUUixTQWhCSTs7QUEwREwsb0JBMURLO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBMkRhLFNBQUssZUFBTCxDQUFzQjtBQUN0Qyw4QkFBVTtBQUQ0QixpQkFBdEIsQ0EzRGI7QUFBQTtBQTJESCx1QkEzREc7QUE4REgsc0JBOURHLEdBOERNLEVBOUROO0FBK0RILG9CQS9ERyxHQStESSxPQUFPLElBQVAsQ0FBYSxPQUFiLENBL0RKOztBQWdFUCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLEtBQUssTUFBekIsRUFBaUMsR0FBakMsRUFBc0M7QUFDOUIsdUJBRDhCLEdBQ3hCLEtBQUssQ0FBTCxDQUR3QjtBQUU5QiwwQkFGOEIsR0FFckIsUUFBUSxHQUFSLENBRnFCO0FBRzlCLHlCQUg4QixHQUd0QixJQUFJLEtBQUosQ0FBVyxHQUFYLENBSHNCO0FBSTlCLHNCQUo4QixHQUl6QixNQUFNLENBQU4sQ0FKeUI7QUFLOUIsd0JBTDhCLEdBS3ZCLEdBQUcsS0FBSCxDQUFVLENBQVYsRUFBYSxDQUFiLENBTHVCO0FBTTlCLHlCQU44QixHQU10QixHQUFHLEtBQUgsQ0FBVSxDQUFWLEVBQWEsQ0FBYixDQU5zQjs7QUFPbEMsMkJBQU8sS0FBSyxXQUFMLEVBQVA7QUFDQSw0QkFBUSxNQUFNLFdBQU4sRUFBUjtBQUNJLDBCQVQ4QixHQVNyQixPQUFPLEdBQVAsR0FBYSxLQVRROztBQVVsQywyQkFBTyxJQUFQLENBQWE7QUFDVCw4QkFBTSxFQURHO0FBRVQsa0NBQVUsTUFGRDtBQUdULGdDQUFRLElBSEM7QUFJVCxpQ0FBUyxLQUpBO0FBS1QsZ0NBQVE7QUFMQyxxQkFBYjtBQU9IO0FBQ0QsdUJBQU8sTUFBUDtBQWxGTztBQUFBO0FBcUZMLG9CQXJGSztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkFzRkQsU0FBSyxXQUFMLEVBdEZDO0FBQUE7QUFBQSx1QkF1RmMsU0FBSyx5QkFBTCxFQXZGZDtBQUFBO0FBdUZILHdCQXZGRztBQXdGSCx3QkF4RkcsR0F3RlEsU0FBUyxRQUFULENBeEZSO0FBeUZILHNCQXpGRyxHQXlGTSxFQUFFLFFBQVEsUUFBVixFQXpGTjs7O0FBMkZQLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksU0FBSyxVQUFMLENBQWdCLE1BQXBDLEVBQTRDLEdBQTVDLEVBQWlEO0FBQ3pDLDRCQUR5QyxHQUM5QixTQUFLLFVBQUwsQ0FBZ0IsQ0FBaEIsQ0FEOEI7QUFFekMsNkJBRnlDLEdBRTdCLFNBQVMsV0FBVCxFQUY2QjtBQUd6QywyQkFIeUMsR0FHL0I7QUFDVixnQ0FBUSxTQURFO0FBRVYsZ0NBQVEsU0FGRTtBQUdWLGlDQUFTO0FBSEMscUJBSCtCOztBQVE3Qyx3QkFBSSxhQUFhLFNBQVMsU0FBVCxDQUFqQjtBQUNJLGdDQUFRLE9BQVIsSUFBbUIsV0FBWSxTQUFTLFNBQVQsRUFBb0IsU0FBcEIsRUFBK0IsUUFBL0IsQ0FBWixDQUFuQjtBQURKLHFCQUVBLElBQUksYUFBYSxTQUFTLFFBQVQsQ0FBakI7QUFDSSxnQ0FBUSxNQUFSLElBQWtCLFdBQVksU0FBUyxRQUFULEVBQW1CLFNBQW5CLEVBQThCLFFBQTlCLENBQVosQ0FBbEI7QUFESixxQkFFQSxRQUFRLE1BQVIsSUFBa0IsUUFBUSxPQUFSLElBQW1CLFFBQVEsTUFBUixDQUFyQztBQUNBLDJCQUFPLFFBQVAsSUFBbUIsT0FBbkI7QUFDSDtBQUNELHVCQUFPLE1BQVA7QUExR087QUFBQTtBQTZHTCxzQkE3R0ssMEJBNkdXLE1BN0dYO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBNkdtQixzQkE3R25CLG1GQTZHNEIsRUE3RzVCO0FBQUEsdUJBOEdELFNBQUssV0FBTCxFQTlHQztBQUFBO0FBQUEsdUJBK0dlLFNBQUssa0JBQUwsQ0FBeUIsU0FBSyxNQUFMLENBQWE7QUFDeEQsOEJBQVUsU0FBSyxRQUFMLENBQWUsTUFBZjtBQUQ4QyxpQkFBYixFQUU1QyxNQUY0QyxDQUF6QixDQS9HZjtBQUFBO0FBK0dILHlCQS9HRztBQWtISCx5QkFsSEcsR0FrSFMsVUFBVSxNQUFWLElBQW9CLElBbEg3QjtBQWtIa0M7QUFDckMsc0JBbkhHLEdBbUhNO0FBQ1QsNEJBQVEsVUFBVSxNQUFWLENBREM7QUFFVCw0QkFBUSxVQUFVLE1BQVYsQ0FGQztBQUdULGlDQUFhLFNBSEo7QUFJVCxnQ0FBWSxTQUFLLE9BQUwsQ0FBYyxTQUFkO0FBSkgsaUJBbkhOOztBQXlIUCx1QkFBTyxNQUFQLElBQWlCLFNBQUssTUFBTCxDQUFhLE9BQU8sTUFBUCxDQUFiLEVBQTZCLENBQTdCLENBQWpCO0FBQ0EsdUJBQU8sTUFBUDtBQTFITztBQUFBO0FBNkhMLG1CQTdISyx1QkE2SFEsTUE3SFI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBOEhELFNBQUssV0FBTCxFQTlIQztBQUFBO0FBK0hILGlCQS9IRyxHQStIQyxTQUFLLE1BQUwsQ0FBYSxNQUFiLENBL0hEO0FBQUEsdUJBZ0lhLFNBQUssZUFBTCxDQUFzQjtBQUN0Qyw4QkFBVSxFQUFFLElBQUY7QUFENEIsaUJBQXRCLENBaEliO0FBQUE7QUFnSUgsdUJBaElHO0FBbUlILHNCQW5JRyxHQW1JTSxRQUFRLFFBQVIsQ0FuSU47QUFvSUgseUJBcElHLEdBb0lTLE9BQU8sTUFBUCxJQUFpQixJQXBJMUI7O0FBcUlQLHVCQUFPO0FBQ0gsaUNBQWEsU0FEVjtBQUVILGdDQUFZLFNBQUssT0FBTCxDQUFjLFNBQWQsQ0FGVDtBQUdILDRCQUFRLFdBQVksT0FBTyxNQUFQLENBQVosQ0FITDtBQUlILDJCQUFPLFdBQVksT0FBTyxLQUFQLENBQVosQ0FKSjtBQUtILDJCQUFPLFdBQVksT0FBTyxLQUFQLENBQVosQ0FMSjtBQU1ILDJCQUFPLFdBQVksT0FBTyxNQUFQLENBQVosQ0FOSjtBQU9ILDRCQUFRLFdBQVksT0FBTyxNQUFQLENBQVosQ0FQTDtBQVFILDRCQUFRLFdBQVksT0FBTyxNQUFQLENBQVosQ0FSTDtBQVNILDZCQUFTLFdBQVksT0FBTyxZQUFQLENBQVosQ0FUTjtBQVVILDZCQUFTLFNBVk47QUFXSCw0QkFBUSxXQUFZLE9BQU8sTUFBUCxDQUFaLENBWEw7QUFZSCw4QkFBVSxTQVpQO0FBYUgsa0NBQWMsU0FiWDtBQWNILCtCQUFXLFNBZFI7QUFlSCxrQ0FBYyxTQWZYO0FBZ0JILG1DQUFlLFdBQVksT0FBTyxLQUFQLENBQVosQ0FoQlo7QUFpQkgsNEJBQVE7QUFqQkwsaUJBQVA7QUFySU87QUFBQTtBQTBKTCxtQkExSkssdUJBMEpRLE1BMUpSO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBMEpnQixzQkExSmhCLG1GQTBKeUIsRUExSnpCO0FBQUEsdUJBMkpELFNBQUssV0FBTCxFQTNKQztBQUFBO0FBNEpQLHVCQUFPLFNBQUssZUFBTCxDQUFzQixTQUFLLE1BQUwsQ0FBYTtBQUN0Qyw4QkFBVSxTQUFLLFFBQUwsQ0FBZSxNQUFmO0FBRDRCLGlCQUFiLEVBRTFCLE1BRjBCLENBQXRCLENBQVA7QUE1Sk87QUFBQTtBQWlLTCxtQkFqS0ssdUJBaUtRLE1BaktSLEVBaUtnQixJQWpLaEIsRUFpS3NCLElBakt0QixFQWlLNEIsTUFqSzVCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBaUtvQyxxQkFqS3BDLG1GQWlLNEMsU0FqSzVDO0FBaUt1RCxzQkFqS3ZELG1GQWlLZ0UsRUFqS2hFO0FBQUEsdUJBa0tELFNBQUssV0FBTCxFQWxLQztBQUFBO0FBbUtILGlCQW5LRyxHQW1LQyxTQUFLLE1BQUwsQ0FBYSxNQUFiLENBbktEO0FBb0tILHNCQXBLRyxHQW9LTSxnQkFBZ0IsU0FBSyxVQUFMLENBQWlCLElBQWpCLENBQWhCLEdBQXlDLFFBcEsvQztBQXFLSCxxQkFyS0csR0FxS0ssRUFyS0w7QUFzS0gsa0JBdEtHLEdBc0tFLEVBQUUsSUFBRixFQUFRLFdBQVIsRUF0S0Y7O0FBdUtQLG9CQUFJLFFBQVEsUUFBWixFQUFzQjtBQUNsQiwwQkFBTSxRQUFOLElBQWtCLENBQUUsU0FBRixFQUFhLE1BQWIsRUFBcUIsRUFBckIsQ0FBbEI7QUFDSCxpQkFGRCxNQUVPO0FBQ0gsMEJBQU0sUUFBTixJQUFrQixDQUFFLEtBQUYsRUFBUyxNQUFULEVBQWlCLEVBQWpCLENBQWxCO0FBQ0g7QUEzS00sdUJBNEtjLFNBQUssTUFBTCxFQUFjLFNBQUssTUFBTCxDQUFhLEtBQWIsRUFBb0IsTUFBcEIsQ0FBZCxDQTVLZDtBQUFBO0FBNEtILHdCQTVLRzs7QUE2S1AsdUJBQU87QUFDSCw0QkFBUSxRQURMO0FBRUgsMEJBQU0sU0FBUyxJQUFUO0FBRkgsaUJBQVA7QUE3S087QUFBQTtBQW1MTCxtQkFuTEssdUJBbUxRLEVBbkxSO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFtTFksc0JBbkxaLG1GQW1McUIsRUFuTHJCO0FBQUEsdUJBb0xELFNBQUssV0FBTCxFQXBMQztBQUFBO0FBcUxILHNCQXJMRyxHQXFMTSxPQUFPLFFBQVAsQ0FyTE4sRUFxTHdCOztBQUMvQix1QkFBTyxTQUFLLHNCQUFMLENBQTZCLFNBQUssTUFBTCxDQUFhO0FBQzdDLDhCQUFVLENBQUUsRUFBRixFQUFNLE1BQU47QUFEbUMsaUJBQWIsRUFFakMsTUFGaUMsQ0FBN0IsQ0FBUDtBQXRMTztBQUFBO0FBMkxYLGFBM0xXLG1CQTJMRjtBQUNMLG1CQUFPLEtBQUssWUFBTCxFQUFQO0FBQ0gsU0E3TFU7QUErTFgsZUEvTFcsbUJBK0xGLElBL0xFLEVBK0x3RjtBQUFBLGdCQUFwRixHQUFvRix1RUFBOUUsUUFBOEU7QUFBQSxnQkFBcEUsTUFBb0UsdUVBQTNELEtBQTJEO0FBQUEsZ0JBQXBELE1BQW9ELHVFQUEzQyxFQUEyQztBQUFBLGdCQUF2QyxPQUF1Qyx1RUFBN0IsU0FBNkI7QUFBQSxnQkFBbEIsSUFBa0IsdUVBQVgsU0FBVzs7QUFDL0YsZ0JBQUksTUFBTSxLQUFLLElBQUwsQ0FBVSxLQUFWLEVBQWlCLEdBQWpCLElBQXdCLEdBQXhCLEdBQThCLElBQXhDO0FBQ0EsZ0JBQUksT0FBTyxRQUFYLEVBQXFCO0FBQ2pCLG9CQUFJLE9BQU8sSUFBUCxDQUFhLE1BQWIsRUFBcUIsTUFBekIsRUFDSSxPQUFPLE1BQU0sS0FBSyxTQUFMLENBQWdCLE1BQWhCLENBQWI7QUFDUCxhQUhELE1BR087QUFDSCxvQkFBSSxDQUFDLEtBQUssTUFBVixFQUNJLE1BQU0sSUFBSSxtQkFBSixDQUF5QixLQUFLLEVBQUwsR0FBVSxhQUFWLEdBQTBCLEtBQUssRUFBL0IsR0FBb0Msc0NBQTdELENBQU47QUFDSixvQkFBSSxDQUFDLEtBQUssTUFBVixFQUNJLE1BQU0sSUFBSSxtQkFBSixDQUF5QixLQUFLLEVBQUwsR0FBVSxhQUFWLEdBQTBCLEtBQUssRUFBL0IsR0FBb0Msc0NBQTdELENBQU47QUFDSixvQkFBSSxJQUFJLEVBQVI7QUFDQSxvQkFBSSxZQUFZLE1BQWhCLEVBQ0ksSUFBSSxPQUFPLFFBQVAsQ0FBSjtBQUNKLG9CQUFJLFFBQVEsS0FBSyxLQUFMLEVBQVo7QUFDQSxvQkFBSSxVQUFVO0FBQ1YsOEJBQVUsSUFEQTtBQUVWLDBCQUFNLEtBRkk7QUFHViw4QkFBVTtBQUhBLGlCQUFkO0FBS0Esb0JBQUksRUFBRSxJQUFGLENBQVEsR0FBUixDQUFKO0FBQ0EsdUJBQU8sS0FBSyxJQUFMLENBQVcsT0FBWCxDQUFQO0FBQ0Esb0JBQUksUUFDQSxXQUFXLEtBQVgsR0FDQSxhQURBLEdBQ2dCLEtBQUssTUFEckIsR0FFQSxpQkFGQSxHQUVvQixPQUFPLFdBQVAsRUFGcEIsR0FHQSxNQUhBLEdBR1MsS0FIVCxHQUlBLFVBSkEsR0FJYSxJQUpiLEdBS0EsVUFMQSxHQUthLENBTmpCO0FBUUEsb0JBQUksWUFBWSxLQUFLLElBQUwsQ0FBVyxLQUFLLE1BQUwsQ0FBYSxLQUFiLENBQVgsRUFBZ0MsS0FBSyxNQUFMLENBQWEsS0FBSyxNQUFsQixDQUFoQyxFQUEyRCxNQUEzRCxDQUFoQjtBQUNBLG9CQUFJLE9BQU8sS0FBSyxNQUFMLEdBQWMsR0FBZCxHQUFvQixTQUEvQjtBQUNBLDBCQUFVO0FBQ04sc0NBQWtCLEtBQUssTUFEakI7QUFFTixxQ0FBaUIsV0FBVyxLQUFLLGNBQUwsQ0FBcUIsSUFBckIsQ0FGdEI7QUFHTixzQ0FBa0I7QUFIWixpQkFBVjtBQUtIO0FBQ0QsbUJBQU8sS0FBSyxLQUFMLENBQVksR0FBWixFQUFpQixNQUFqQixFQUF5QixPQUF6QixFQUFrQyxJQUFsQyxDQUFQO0FBQ0g7QUFyT1UsS0FBZjs7QUF3T0E7O0FBRUEsUUFBSSxPQUFPOztBQUVQLGNBQU0sTUFGQztBQUdQLGdCQUFRLE9BSEQ7QUFJUCxxQkFBYSxDQUFFLElBQUYsRUFBUSxJQUFSLENBSk4sRUFJc0I7QUFDN0IsbUJBQVcsR0FMSjtBQU1QLGdCQUFRO0FBQ0osb0JBQVEscUdBREo7QUFFSixtQkFBTztBQUNILDBCQUFVLHVCQURQO0FBRUgsMkJBQVc7QUFGUixhQUZIO0FBTUosbUJBQU8sbUJBTkg7QUFPSixtQkFBTyxDQUNILDhCQURHLEVBRUgsNkJBRkc7QUFQSCxTQU5EO0FBa0JQLGVBQU87QUFDSCxzQkFBVTtBQUNOLHVCQUFPLENBQ0gsTUFERyxFQUVILGVBRkcsRUFHSCxjQUhHLEVBSUgsZUFKRztBQURELGFBRFA7QUFTSCx1QkFBVztBQUNQLHdCQUFRLENBQ0osU0FESSxFQUVKLE9BRkksRUFHSixjQUhJLEVBSUosV0FKSSxFQUtKLGFBTEksRUFNSixjQU5JLEVBT0osY0FQSSxFQVFKLG9CQVJJLEVBU0osY0FUSSxFQVVKLGNBVkksRUFXSixjQVhJO0FBREQ7QUFUUixTQWxCQTs7QUE0Q0Qsb0JBNUNDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkE2Q2tCLFNBQUssYUFBTCxFQTdDbEI7QUFBQTtBQTZDQyx3QkE3Q0Q7QUE4Q0MsdUJBOUNELEdBOENXLFNBQVMsT0FBVCxDQTlDWDtBQStDQyxvQkEvQ0QsR0ErQ1EsT0FBTyxJQUFQLENBQWEsT0FBYixDQS9DUjtBQWdEQyxzQkFoREQsR0FnRFUsRUFoRFY7O0FBaURILHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksS0FBSyxNQUF6QixFQUFpQyxHQUFqQyxFQUFzQztBQUM5QixzQkFEOEIsR0FDekIsS0FBSyxDQUFMLENBRHlCO0FBRTlCLDBCQUY4QixHQUVyQixRQUFRLEVBQVIsQ0FGcUI7QUFBQSxpQ0FHWixHQUFHLEtBQUgsQ0FBVSxHQUFWLENBSFk7QUFBQTtBQUc1Qix3QkFINEI7QUFHdEIseUJBSHNCOztBQUlsQywyQkFBTyxLQUFLLFdBQUwsRUFBUDtBQUNBLDRCQUFRLE1BQU0sV0FBTixFQUFSO0FBQ0Esd0JBQUksUUFBUSxLQUFaO0FBQ0ksK0JBQU8sTUFBUDtBQURKLHFCQUVBLE9BQU8sU0FBSyxrQkFBTCxDQUF5QixJQUF6QixDQUFQO0FBQ0EsNEJBQVEsU0FBSyxrQkFBTCxDQUF5QixLQUF6QixDQUFSO0FBQ0ksMEJBVjhCLEdBVXJCLE9BQU8sR0FBUCxHQUFhLEtBVlE7O0FBV2xDLDJCQUFPLElBQVAsQ0FBYTtBQUNULDhCQUFNLEVBREc7QUFFVCxrQ0FBVSxNQUZEO0FBR1QsZ0NBQVEsSUFIQztBQUlULGlDQUFTLEtBSkE7QUFLVCxnQ0FBUTtBQUxDLHFCQUFiO0FBT0g7QUFDRCx1QkFBTyxNQUFQO0FBcEVHO0FBQUE7QUF1RUQsb0JBdkVDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkF3RUcsU0FBSyxXQUFMLEVBeEVIO0FBQUE7QUFBQSx1QkF5RWtCLFNBQUssa0JBQUwsRUF6RWxCO0FBQUE7QUF5RUMsd0JBekVEO0FBMEVDLHdCQTFFRCxHQTBFWSxTQUFTLFFBQVQsQ0ExRVo7QUEyRUMsc0JBM0VELEdBMkVVLEVBQUUsUUFBUSxRQUFWLEVBM0VWO0FBNEVDLHFCQTVFRCxHQTRFUyxTQUFTLE9BQVQsQ0E1RVQ7QUE2RUMsMEJBN0VELEdBNkVjLE9BQU8sSUFBUCxDQUFhLEtBQWIsQ0E3RWQ7O0FBOEVILHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksV0FBVyxNQUEvQixFQUF1QyxHQUF2QyxFQUE0QztBQUNwQyw0QkFEb0MsR0FDekIsV0FBVyxDQUFYLENBRHlCO0FBRXBDLDZCQUZvQyxHQUV4QixTQUFTLFdBQVQsRUFGd0I7QUFHeEM7O0FBQ0Esd0JBQUksYUFBYSxLQUFqQjtBQUNJLG9DQUFZLE1BQVo7QUFESixxQkFFSSxPQU5vQyxHQU0xQjtBQUNWLGdDQUFRLE1BQU0sUUFBTixDQURFO0FBRVYsZ0NBQVEsU0FGRTtBQUdWLGlDQUFTLE1BQU0sUUFBTjtBQUhDLHFCQU4wQjs7QUFXeEMsMkJBQU8sU0FBUCxJQUFvQixPQUFwQjtBQUNIO0FBQ0QsdUJBQU8sTUFBUDtBQTNGRztBQUFBO0FBOEZELHNCQTlGQywwQkE4RmUsTUE5RmY7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBOEZ1QixzQkE5RnZCLG1GQThGZ0MsRUE5RmhDO0FBQUEsdUJBK0ZHLFNBQUssV0FBTCxFQS9GSDtBQUFBO0FBZ0dDLGlCQWhHRCxHQWdHSyxTQUFLLE1BQUwsQ0FBYSxNQUFiLENBaEdMO0FBQUEsdUJBaUdrQixTQUFLLGtCQUFMLENBQXlCLFNBQUssTUFBTCxDQUFhO0FBQ3ZELDRCQUFRLEVBQUUsSUFBRjtBQUQrQyxpQkFBYixFQUUzQyxNQUYyQyxDQUF6QixDQWpHbEI7QUFBQTtBQWlHQyx3QkFqR0Q7O0FBb0dILG9CQUFJLEVBQUUsSUFBRixLQUFXLFFBQWYsRUFBeUI7QUFDakIsNkJBRGlCLEdBQ0wsU0FBUyxFQUFFLElBQUYsQ0FBVCxDQURLO0FBRWpCLDZCQUZpQixHQUVMLFNBQUssWUFBTCxFQUZLO0FBR2pCLDBCQUhpQixHQUdSO0FBQ1QsZ0NBQVEsVUFBVSxNQUFWLENBREM7QUFFVCxnQ0FBUSxVQUFVLE1BQVYsQ0FGQztBQUdULHFDQUFhLFNBSEo7QUFJVCxvQ0FBWSxTQUFLLE9BQUwsQ0FBYyxTQUFkO0FBSkgscUJBSFE7O0FBU3JCLDJCQUFPLE1BQVAsSUFBaUIsU0FBSyxNQUFMLENBQWEsT0FBTyxNQUFQLENBQWIsRUFBNkIsQ0FBN0IsRUFBZ0MsSUFBaEMsQ0FBakI7QUFDQSwyQkFBTyxNQUFQLElBQWlCLFNBQUssTUFBTCxDQUFhLE9BQU8sTUFBUCxDQUFiLEVBQTZCLENBQTdCLENBQWpCO0FBQ0EsMkJBQU8sTUFBUDtBQUNILGlCQVpEO0FBYUEsMEJBQU0sSUFBSSxhQUFKLENBQW1CLFNBQUssRUFBTCxHQUFVLEdBQVYsR0FBZ0IsRUFBRSxRQUFGLENBQWhCLEdBQThCLHVDQUFqRCxDQUFOO0FBYkE7QUFwR0c7QUFBQTtBQW9IRCxtQkFwSEMsdUJBb0hZLE1BcEhaO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQXFIRyxTQUFLLFdBQUwsRUFySEg7QUFBQTtBQXNIQyxpQkF0SEQsR0FzSEssU0FBSyxNQUFMLENBQWEsTUFBYixDQXRITDtBQUFBLHVCQXVIaUIsU0FBSyxtQkFBTCxDQUEwQjtBQUMxQyw0QkFBUSxFQUFFLElBQUY7QUFEa0MsaUJBQTFCLENBdkhqQjtBQUFBO0FBdUhDLHVCQXZIRDtBQTBIQyxzQkExSEQsR0EwSFUsUUFBUSxFQUFFLElBQUYsQ0FBUixDQTFIVjtBQTJIQyx5QkEzSEQsR0EySGEsT0FBTyxTQUFQLElBQW9CLElBM0hqQzs7QUE0SEgsdUJBQU87QUFDSCxpQ0FBYSxTQURWO0FBRUgsZ0NBQVksU0FBSyxPQUFMLENBQWMsU0FBZCxDQUZUO0FBR0gsNEJBQVEsT0FBTyxNQUFQLElBQWlCLE9BQU8sTUFBUCxDQUFqQixHQUFrQyxTQUh2QztBQUlILDJCQUFPLE9BQU8sS0FBUCxJQUFnQixPQUFPLEtBQVAsQ0FBaEIsR0FBZ0MsU0FKcEM7QUFLSCwyQkFBTyxPQUFPLE1BQVAsSUFBaUIsT0FBTyxLQUFQLENBQWpCLEdBQWlDLFNBTHJDO0FBTUgsMkJBQU8sT0FBTyxLQUFQLElBQWdCLE9BQU8sTUFBUCxDQUFoQixHQUFpQyxTQU5yQztBQU9ILDRCQUFRLFNBUEw7QUFRSCw0QkFBUSxTQVJMO0FBU0gsNkJBQVMsU0FUTjtBQVVILDZCQUFTLFNBVk47QUFXSCw0QkFBUSxPQUFPLE1BQVAsSUFBaUIsT0FBTyxNQUFQLENBQWpCLEdBQWtDLFNBWHZDO0FBWUgsOEJBQVUsU0FaUDtBQWFILGtDQUFjLFNBYlg7QUFjSCwrQkFBVyxPQUFPLEtBQVAsSUFBZ0IsT0FBTyxLQUFQLENBQWhCLEdBQWdDLFNBZHhDO0FBZUgsa0NBQWMsT0FBTyxTQUFQLElBQW9CLE9BQU8sU0FBUCxDQUFwQixHQUF3QyxTQWZuRDtBQWdCSCxtQ0FBZSxPQUFPLEtBQVAsSUFBZ0IsT0FBTyxLQUFQLENBQWhCLEdBQWdDLFNBaEI1QztBQWlCSCw0QkFBUTtBQWpCTCxpQkFBUDtBQTVIRztBQUFBO0FBaUpELG1CQWpKQyx1QkFpSlksTUFqSlo7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFpSm9CLHNCQWpKcEIsbUZBaUo2QixFQWpKN0I7QUFBQSx1QkFrSkcsU0FBSyxXQUFMLEVBbEpIO0FBQUE7QUFtSkgsdUJBQU8sU0FBSyxtQkFBTCxDQUEwQixTQUFLLE1BQUwsQ0FBYTtBQUMxQyw0QkFBUSxTQUFLLFFBQUwsQ0FBZSxNQUFmO0FBRGtDLGlCQUFiLEVBRTlCLE1BRjhCLENBQTFCLENBQVA7QUFuSkc7QUFBQTtBQXdKRCxtQkF4SkMsdUJBd0pZLE1BeEpaLEVBd0pvQixJQXhKcEIsRUF3SjBCLElBeEoxQixFQXdKZ0MsTUF4SmhDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBd0p3QyxxQkF4SnhDLG1GQXdKZ0QsU0F4SmhEO0FBd0oyRCxzQkF4SjNELG1GQXdKb0UsRUF4SnBFO0FBQUEsdUJBeUpHLFNBQUssV0FBTCxFQXpKSDtBQUFBO0FBMEpDLHFCQTFKRCxHQTBKUztBQUNSLDRCQUFRLFNBQUssUUFBTCxDQUFlLE1BQWYsQ0FEQTtBQUVSLDRCQUFRLElBRkE7QUFHUiw4QkFBVSxNQUhGO0FBSVIsNEJBQVE7QUFKQSxpQkExSlQ7QUFBQSx1QkFnS2tCLFNBQUssZ0JBQUwsQ0FBdUIsU0FBSyxNQUFMLENBQWEsS0FBYixFQUFvQixNQUFwQixDQUF2QixDQWhLbEI7QUFBQTtBQWdLQyx3QkFoS0Q7O0FBaUtILHVCQUFPO0FBQ0gsNEJBQVEsUUFETDtBQUVILDBCQUFNLFNBQVMsUUFBVCxFQUFtQixVQUFuQjtBQUZILGlCQUFQO0FBaktHO0FBQUE7QUF1S0QsbUJBdktDLHVCQXVLWSxFQXZLWjtBQUFBOztBQUFBO0FBQUEsdUJBd0tHLFNBQUssV0FBTCxFQXhLSDtBQUFBO0FBeUtILHVCQUFPLFNBQUssc0JBQUwsQ0FBNkIsRUFBRSxZQUFZLEVBQWQsRUFBN0IsQ0FBUDtBQXpLRztBQUFBO0FBNEtQLGtCQTVLTyxzQkE0S0ssS0E1S0wsRUE0S1k7QUFDZixnQkFBSSxhQUFhLE1BQU0sUUFBTixDQUFqQjtBQUNBLGdCQUFJLFNBQVMsU0FBYjtBQUNBLGdCQUFJLGNBQWMsQ0FBbEIsRUFBcUI7QUFDakIseUJBQVMsTUFBVDtBQUNILGFBRkQsTUFFTyxJQUFLLGNBQWMsQ0FBZixJQUFzQixjQUFjLENBQXhDLEVBQTRDO0FBQy9DLHlCQUFTLFVBQVQ7QUFDSCxhQUZNLE1BRUE7QUFDSCx5QkFBUyxRQUFUO0FBQ0g7QUFDRCxnQkFBSSxZQUFZLE1BQU0sbUJBQU4sSUFBNkIsSUFBN0M7QUFDQSxnQkFBSSxTQUFTLEtBQUssYUFBTCxDQUFtQixNQUFNLE1BQU4sQ0FBbkIsQ0FBYjtBQUNBLGdCQUFJLFNBQVM7QUFDVCx3QkFBUSxLQURDO0FBRVQsc0JBQU0sTUFBTSxJQUFOLENBRkc7QUFHVCwwQkFBVSxPQUFPLFFBQVAsQ0FIRDtBQUlULDZCQUFhLFNBSko7QUFLVCw0QkFBWSxLQUFLLE9BQUwsQ0FBYyxTQUFkLENBTEg7QUFNVCx3QkFBUSxPQU5DO0FBT1Qsd0JBQVEsTUFBTSxNQUFOLENBUEM7QUFRVCx5QkFBUyxNQUFNLE1BQU4sQ0FSQTtBQVNULDBCQUFVLE1BQU0sY0FBTixDQVREO0FBVVQsNkJBQWEsTUFBTSxRQUFOLENBVko7QUFXVCwwQkFBVTtBQVhELGFBQWI7QUFhQSxtQkFBTyxNQUFQO0FBQ0gsU0F0TU07QUF3TUQsa0JBeE1DLHNCQXdNVyxFQXhNWDtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQXlNRyxTQUFLLFdBQUwsRUF6TUg7QUFBQTtBQUFBLHVCQTBNa0IsU0FBSyxvQkFBTCxDQUEyQixFQUFFLFlBQVksRUFBZCxFQUEzQixDQTFNbEI7QUFBQTtBQTBNQyx3QkExTUQ7QUEyTUMscUJBM01ELEdBMk1TLFNBQVMsUUFBVCxFQUFtQixFQUFuQixDQTNNVDs7QUE0TUgsdUJBQU8sU0FBSyxVQUFMLENBQWlCLFNBQUssTUFBTCxDQUFhLEVBQUUsTUFBTSxFQUFSLEVBQWIsRUFBMkIsS0FBM0IsQ0FBakIsQ0FBUDtBQTVNRztBQUFBO0FBK01ELGVBL01DLG1CQStNUSxJQS9NUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUErTWMsbUJBL01kLG1GQStNb0IsUUEvTXBCO0FBK004QixzQkEvTTlCLG1GQStNdUMsS0EvTXZDO0FBK004QyxzQkEvTTlDLG1GQStNdUQsRUEvTXZEO0FBK00yRCx1QkEvTTNELG1GQStNcUUsU0EvTXJFO0FBK01nRixvQkEvTWhGLG1GQStNdUYsU0EvTXZGO0FBZ05DLG1CQWhORCxHQWdOTyxTQUFLLElBQUwsQ0FBVSxLQUFWLEVBQWlCLEdBQWpCLElBQXdCLEdBQXhCLEdBQThCLFNBQUssT0FBbkMsR0FBNkMsR0FBN0MsR0FBbUQsU0FBSyxhQUFMLENBQW9CLElBQXBCLEVBQTBCLE1BQTFCLENBaE4xRDtBQWlOQyxxQkFqTkQsR0FpTlMsU0FBSyxJQUFMLENBQVcsTUFBWCxFQUFtQixTQUFLLGFBQUwsQ0FBb0IsSUFBcEIsQ0FBbkIsQ0FqTlQ7O0FBa05ILG9CQUFJLE9BQU8sUUFBWCxFQUFxQjtBQUNqQix3QkFBSSxPQUFPLElBQVAsQ0FBYSxLQUFiLEVBQW9CLE1BQXhCO0FBQ0ksK0JBQU8sTUFBTSxTQUFLLFNBQUwsQ0FBZ0IsS0FBaEIsQ0FBYjtBQURKO0FBRUgsaUJBSEQsTUFHTztBQUNDLHlCQURELEdBQ1MsU0FBSyxLQUFMLEVBRFQ7O0FBRUgsMkJBQU8sU0FBSyxTQUFMLENBQWdCLFNBQUssTUFBTCxDQUFhO0FBQ2hDLGlDQUFTLEtBRHVCO0FBRWhDLGtDQUFVO0FBRnNCLHFCQUFiLEVBR3BCLEtBSG9CLENBQWhCLENBQVA7QUFJQSw4QkFBVTtBQUNOLHdDQUFnQixtQ0FEVjtBQUVOLDBDQUFrQixLQUFLLE1BRmpCO0FBR04sK0JBQU8sU0FBSyxNQUhOO0FBSU4sZ0NBQVEsU0FBSyxJQUFMLENBQVcsU0FBSyxNQUFMLENBQWEsSUFBYixDQUFYLEVBQStCLFNBQUssTUFBTCxDQUFhLFNBQUssTUFBbEIsQ0FBL0IsRUFBMEQsUUFBMUQ7QUFKRixxQkFBVjtBQU1IO0FBak9FLHVCQWtPa0IsU0FBSyxLQUFMLENBQVksR0FBWixFQUFpQixNQUFqQixFQUF5QixPQUF6QixFQUFrQyxJQUFsQyxDQWxPbEI7QUFBQTtBQWtPQyx3QkFsT0Q7O0FBbU9ILG9CQUFJLGFBQWEsUUFBakI7QUFDSSx3QkFBSSxDQUFDLFNBQVMsU0FBVCxDQUFMO0FBQ0ksOEJBQU0sSUFBSSxhQUFKLENBQW1CLFNBQUssRUFBTCxHQUFVLEdBQVYsR0FBZ0IsU0FBSyxJQUFMLENBQVcsUUFBWCxDQUFuQyxDQUFOO0FBREo7QUFESixpQkFHQSxPQUFPLFFBQVA7QUF0T0c7QUFBQTtBQUFBLEtBQVg7O0FBME9BOztBQUVBLFFBQUksYUFBYTs7QUFFYixjQUFNLFlBRk87QUFHYixnQkFBUSxhQUhLO0FBSWIscUJBQWEsSUFKQSxFQUlNO0FBQ25CLHFCQUFhLElBTEEsRUFLTTtBQUNuQixnQkFBUTtBQUNKLG9CQUFRLHFHQURKO0FBRUosbUJBQU8sNEJBRkg7QUFHSixtQkFBTyx5QkFISDtBQUlKLG1CQUFPO0FBSkgsU0FOSztBQVliLGVBQU87QUFDSCxzQkFBVTtBQUNOLHVCQUFPLENBQ0gsa0JBREcsRUFFSCx1QkFGRyxFQUdILG9CQUhHO0FBREQsYUFEUDtBQVFILHVCQUFXO0FBQ1AsdUJBQU8sQ0FDSCxpQkFERyxFQUVILHlCQUZHLENBREE7QUFLUCx3QkFBUSxDQUNKLDZCQURJLEVBRUosMEJBRkksRUFHSixjQUhJLEVBSUosY0FKSSxFQUtKLGVBTEksRUFNSixZQU5JLEVBT0oscUJBUEksRUFRSixtQkFSSSxFQVFpQjtBQUNyQiw4QkFUSTtBQUxEO0FBUlIsU0FaTTtBQXNDYixtQkFBVztBQUNQLHVCQUFXLEVBQUUsTUFBTSxTQUFSLEVBQW1CLFVBQVUsU0FBN0IsRUFBd0MsUUFBUSxLQUFoRCxFQUF1RCxTQUFTLEtBQWhFLEVBREo7QUFFUCx1QkFBVyxFQUFFLE1BQU0sU0FBUixFQUFtQixVQUFVLFNBQTdCLEVBQXdDLFFBQVEsS0FBaEQsRUFBdUQsU0FBUyxLQUFoRSxFQUZKO0FBR1AsdUJBQVcsRUFBRSxNQUFNLFNBQVIsRUFBbUIsVUFBVSxTQUE3QixFQUF3QyxRQUFRLEtBQWhELEVBQXVELFNBQVMsS0FBaEUsRUFISjtBQUlQLHVCQUFXLEVBQUUsTUFBTSxTQUFSLEVBQW1CLFVBQVUsU0FBN0IsRUFBd0MsUUFBUSxLQUFoRCxFQUF1RCxTQUFTLEtBQWhFLEVBSko7QUFLUCx1QkFBVyxFQUFFLE1BQU0sU0FBUixFQUFtQixVQUFVLFNBQTdCLEVBQXdDLFFBQVEsS0FBaEQsRUFBdUQsU0FBUyxLQUFoRSxFQUxKO0FBTVAsdUJBQVcsRUFBRSxNQUFNLFNBQVIsRUFBbUIsVUFBVSxTQUE3QixFQUF3QyxRQUFRLEtBQWhELEVBQXVELFNBQVMsS0FBaEUsRUFOSjtBQU9QLHVCQUFXLEVBQUUsTUFBTSxTQUFSLEVBQW1CLFVBQVUsU0FBN0IsRUFBd0MsUUFBUSxLQUFoRCxFQUF1RCxTQUFTLEtBQWhFLEVBUEo7QUFRUCx1QkFBVyxFQUFFLE1BQU0sU0FBUixFQUFtQixVQUFVLFNBQTdCLEVBQXdDLFFBQVEsS0FBaEQsRUFBdUQsU0FBUyxLQUFoRSxFQVJKO0FBU1AsdUJBQVcsRUFBRSxNQUFNLFNBQVIsRUFBbUIsVUFBVSxTQUE3QixFQUF3QyxRQUFRLEtBQWhELEVBQXVELFNBQVMsS0FBaEUsRUFUSjtBQVVQLHVCQUFXLEVBQUUsTUFBTSxTQUFSLEVBQW1CLFVBQVUsU0FBN0IsRUFBd0MsUUFBUSxLQUFoRCxFQUF1RCxTQUFTLEtBQWhFLEVBVko7QUFXUCx1QkFBVyxFQUFFLE1BQU0sU0FBUixFQUFtQixVQUFVLFNBQTdCLEVBQXdDLFFBQVEsS0FBaEQsRUFBdUQsU0FBUyxLQUFoRTtBQVhKLFNBdENFOztBQW9EUCxvQkFwRE87QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQXFESCxTQUFLLFdBQUwsRUFyREc7QUFBQTtBQUFBLHVCQXNEWSxTQUFLLHdCQUFMLEVBdERaO0FBQUE7QUFzREwsd0JBdERLO0FBdURMLHNCQXZESyxHQXVESSxFQUFFLFFBQVEsUUFBVixFQXZESjs7QUF3RFQscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxTQUFTLE1BQTdCLEVBQXFDLEdBQXJDLEVBQTBDO0FBQ2xDLDJCQURrQyxHQUN4QixTQUFTLENBQVQsQ0FEd0I7QUFFbEMsNEJBRmtDLEdBRXZCLFFBQVEsVUFBUixDQUZ1QjtBQUdsQyw4QkFIa0MsR0FHckIsU0FIcUI7QUFJbEMsd0JBSmtDLEdBSTNCLFdBQVksUUFBUSxTQUFSLElBQXFCLFVBQWpDLENBSjJCO0FBS2xDLHdCQUxrQyxHQUszQixXQUFZLFFBQVEsY0FBUixJQUEwQixVQUF0QyxDQUwyQjtBQU1sQywyQkFOa0MsR0FNeEI7QUFDVixnQ0FBUSxJQURFO0FBRVYsZ0NBQVEsSUFGRTtBQUdWLGlDQUFTLFNBQUssR0FBTCxDQUFVLElBQVYsRUFBZ0IsSUFBaEI7QUFIQyxxQkFOd0I7O0FBV3RDLDJCQUFPLFFBQVAsSUFBbUIsT0FBbkI7QUFDSDtBQUNELHVCQUFPLE1BQVA7QUFyRVM7QUFBQTtBQXdFYixtQkF4RWEsdUJBd0VBLE1BeEVBLEVBd0VRO0FBQ2pCLGdCQUFJLFFBQVEsT0FBTyxDQUFQLENBQVo7QUFDQSxnQkFBSSxTQUFTLE9BQU8sQ0FBUCxDQUFiO0FBQ0EsbUJBQU8sQ0FBRSxLQUFGLEVBQVMsTUFBVCxDQUFQO0FBQ0gsU0E1RVk7QUE4RWIsb0JBOUVhLHdCQThFQyxPQTlFRCxFQThFVTtBQUNuQixnQkFBSSxTQUFTLEVBQWI7QUFDQSxpQkFBSyxJQUFJLElBQUksQ0FBYixFQUFnQixJQUFJLFFBQVEsTUFBNUIsRUFBb0MsR0FBcEMsRUFBeUM7QUFDckMsdUJBQU8sSUFBUCxDQUFhLEtBQUssV0FBTCxDQUFrQixRQUFRLENBQVIsQ0FBbEIsQ0FBYjtBQUNIO0FBQ0QsbUJBQU8sTUFBUDtBQUNILFNBcEZZO0FBc0ZQLHNCQXRGTywwQkFzRlMsTUF0RlQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQXNGaUIsc0JBdEZqQixtRkFzRjBCLEVBdEYxQjtBQUFBLHVCQXVGSCxTQUFLLFdBQUwsRUF2Rkc7QUFBQTtBQXdGTCxpQkF4RkssR0F3RkQsU0FBSyxNQUFMLENBQWEsTUFBYixDQXhGQztBQUFBLHVCQXlGYSxTQUFLLDBCQUFMLENBQWlDLFNBQUssTUFBTCxDQUFhO0FBQ2hFLDBCQUFNLEVBQUUsSUFBRjtBQUQwRCxpQkFBYixFQUVwRCxNQUZvRCxDQUFqQyxDQXpGYjtBQUFBO0FBeUZMLHlCQXpGSztBQTRGTCx5QkE1RkssR0E0Rk8sVUFBVSxXQUFWLElBQXlCLElBNUZoQztBQTZGTCxzQkE3RkssR0E2Rkk7QUFDVCw0QkFBUSxFQURDO0FBRVQsNEJBQVEsRUFGQztBQUdULGlDQUFhLFNBSEo7QUFJVCxnQ0FBWSxTQUFLLE9BQUwsQ0FBYyxTQUFkO0FBSkgsaUJBN0ZKO0FBbUdMLHFCQW5HSyxHQW1HRyxDQUFFLE1BQUYsRUFBVSxNQUFWLENBbkdIOztBQW9HVCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLE1BQU0sTUFBMUIsRUFBa0MsR0FBbEMsRUFBdUM7QUFDL0Isd0JBRCtCLEdBQ3hCLE1BQU0sQ0FBTixDQUR3Qjs7QUFFbkMsMkJBQU8sSUFBUCxJQUFlLFNBQUssWUFBTCxDQUFtQixVQUFVLElBQVYsQ0FBbkIsQ0FBZjtBQUNIO0FBQ0QsdUJBQU8sTUFBUDtBQXhHUztBQUFBO0FBMkdiLG1CQTNHYSx1QkEyR0EsTUEzR0EsRUEyR1EsTUEzR1IsRUEyR2dCO0FBQ3pCLGdCQUFJLFlBQVksT0FBTyxXQUFQLElBQXNCLElBQXRDO0FBQ0EsbUJBQU87QUFDSCw2QkFBYSxTQURWO0FBRUgsNEJBQVksS0FBSyxPQUFMLENBQWMsU0FBZCxDQUZUO0FBR0gsd0JBQVEsU0FITDtBQUlILHVCQUFPLFNBSko7QUFLSCx1QkFBTyxXQUFZLE9BQU8sU0FBUCxDQUFaLENBTEo7QUFNSCx1QkFBTyxXQUFZLE9BQU8sU0FBUCxDQUFaLENBTko7QUFPSCx3QkFBUSxTQVBMO0FBUUgsd0JBQVEsU0FSTDtBQVNILHlCQUFTLFNBVE47QUFVSCx5QkFBUyxTQVZOO0FBV0gsd0JBQVEsV0FBWSxPQUFPLFdBQVAsQ0FBWixDQVhMO0FBWUgsMEJBQVUsU0FaUDtBQWFILDhCQUFjLFNBYlg7QUFjSCwyQkFBVyxTQWRSO0FBZUgsOEJBQWMsU0FmWDtBQWdCSCwrQkFBZSxXQUFZLE9BQU8sV0FBUCxDQUFaLENBaEJaO0FBaUJILHdCQUFRO0FBakJMLGFBQVA7QUFtQkgsU0FoSVk7QUFrSVAsbUJBbElPLHVCQWtJTSxNQWxJTjtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQW1JSCxTQUFLLFdBQUwsRUFuSUc7QUFBQTtBQW9JTCxpQkFwSUssR0FvSUQsU0FBSyxNQUFMLENBQWEsTUFBYixDQXBJQztBQUFBLHVCQXFJVSxTQUFLLHFCQUFMLENBQTRCO0FBQzNDLDBCQUFNLEVBQUUsSUFBRjtBQURxQyxpQkFBNUIsQ0FySVY7QUFBQTtBQXFJTCxzQkFySUs7O0FBd0lULHVCQUFPLFNBQUssV0FBTCxDQUFrQixNQUFsQixFQUEwQixDQUExQixDQUFQO0FBeElTO0FBQUE7QUEySVAsbUJBM0lPLHVCQTJJTSxNQTNJTjtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQTJJYyxzQkEzSWQsbUZBMkl1QixFQTNJdkI7QUFBQSx1QkE0SUgsU0FBSyxXQUFMLEVBNUlHO0FBQUE7QUE2SVQsdUJBQU8sU0FBSyx1QkFBTCxDQUE4QixTQUFLLE1BQUwsQ0FBYTtBQUM5QztBQUNBLDBCQUFNLFNBQUssUUFBTCxDQUFlLE1BQWY7QUFGd0MsaUJBQWIsRUFHbEMsTUFIa0MsQ0FBOUIsQ0FBUDtBQTdJUztBQUFBO0FBbUpQLG1CQW5KTyx1QkFtSk0sTUFuSk4sRUFtSmMsSUFuSmQsRUFtSm9CLElBbkpwQixFQW1KMEIsTUFuSjFCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBbUprQyxxQkFuSmxDLG1GQW1KMEMsU0FuSjFDO0FBbUpxRCxzQkFuSnJELG1GQW1KOEQsRUFuSjlEO0FBQUEsdUJBb0pILFNBQUssV0FBTCxFQXBKRztBQUFBO0FBcUpMLGlCQXJKSyxHQXFKRCxTQUFLLE1BQUwsQ0FBYSxNQUFiLENBckpDO0FBc0pMLDBCQXRKSyxHQXNKUSxTQXRKUixFQXNKbUI7QUFDNUI7O0FBQ0kseUJBeEpLLEdBd0pRLFFBQVEsS0FBVCxHQUFrQixLQUFsQixHQUEwQixLQXhKakM7QUF5SkwscUJBekpLLEdBeUpHLFNBQUssT0FBTCxDQUFjO0FBQ3RCLGdDQUFZLEVBQUUsT0FBRixDQURVO0FBRXRCLGtDQUFjLEVBQUUsTUFBRixDQUZRO0FBR3RCLDZCQUFTLFFBQVEsVUFISztBQUl0Qiw4QkFBVSxTQUFTLFVBSkc7QUFLdEIsaUNBQWEsU0FMUztBQU10QixpQ0FBYSxTQUFLLFVBQUwsQ0FBaUIsSUFBakIsQ0FOUztBQU90Qix1Q0FBbUIsU0FBSyxLQUFMLEdBQWMsUUFBZDtBQVBHLGlCQUFkLENBekpIO0FBQUEsdUJBa0tZLFNBQUssc0JBQUwsQ0FBNkIsU0FBSyxNQUFMLENBQWEsS0FBYixFQUFvQixNQUFwQixDQUE3QixDQWxLWjtBQUFBO0FBa0tMLHdCQWxLSzs7QUFtS1QsdUJBQU87QUFDSCw0QkFBUSxRQURMO0FBRUgsMEJBQU0sU0FBUyxJQUFULEVBQWUsUUFBZjtBQUZILGlCQUFQO0FBbktTO0FBQUE7QUF5S1Asb0JBektPLHdCQXlLTyxHQXpLUDtBQUFBOztBQUFBO0FBQUEsdUJBMEtILFNBQUssV0FBTCxFQTFLRztBQUFBO0FBMktULHVCQUFPLFNBQUssc0JBQUwsQ0FBNkIsRUFBRSxhQUFhLEdBQWYsRUFBN0IsQ0FBUDtBQTNLUztBQUFBO0FBOEtQLG1CQTlLTyx1QkE4S00sRUE5S047QUFBQTs7QUFBQTtBQUFBLHVCQStLSCxTQUFLLFdBQUwsRUEvS0c7QUFBQTtBQWdMVCx1QkFBTyxTQUFLLFlBQUwsQ0FBbUIsQ0FBRSxFQUFGLENBQW5CLENBQVA7QUFoTFM7QUFBQTtBQW1MYixhQW5MYSxtQkFtTEo7QUFDTCxtQkFBTyxLQUFLLFlBQUwsRUFBUDtBQUNILFNBckxZO0FBdUxQLGVBdkxPLG1CQXVMRSxJQXZMRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBdUxRLG1CQXZMUixtRkF1TGMsUUF2TGQ7QUF1THdCLHNCQXZMeEIsbUZBdUxpQyxLQXZMakM7QUF1THdDLHNCQXZMeEMsbUZBdUxpRCxFQXZMakQ7QUF1THFELHVCQXZMckQsbUZBdUwrRCxTQXZML0Q7QUF1TDBFLG9CQXZMMUUsbUZBdUxpRixTQXZMakY7QUF3TEwsbUJBeExLLEdBd0xDLE1BQU0sU0FBSyxhQUFMLENBQW9CLElBQXBCLEVBQTBCLE1BQTFCLENBeExQO0FBeUxMLG1CQXpMSyxHQXlMQyxTQUFLLElBQUwsQ0FBVSxLQUFWLElBQW1CLEdBekxwQjtBQTBMTCxxQkExTEssR0EwTEcsU0FBSyxJQUFMLENBQVcsTUFBWCxFQUFtQixTQUFLLGFBQUwsQ0FBb0IsSUFBcEIsQ0FBbkIsQ0ExTEg7O0FBMkxULG9CQUFJLE9BQU8sUUFBWCxFQUFxQjtBQUNqQix3QkFBSSxPQUFPLElBQVAsQ0FBYSxNQUFiLEVBQXFCLE1BQXpCO0FBQ0ksK0JBQU8sTUFBTSxTQUFLLFNBQUwsQ0FBZ0IsTUFBaEIsQ0FBYjtBQURKO0FBRUgsaUJBSEQsTUFHTztBQUNDLHlCQURELEdBQ1MsU0FBSyxLQUFMLEdBQWMsUUFBZCxFQURUO0FBRUMsd0JBRkQsR0FFUSxNQUFNLElBQU4sR0FBYSxLQUFiLEdBQXFCLElBRjdCOztBQUdILDhCQUFVO0FBQ04sd0NBQWdCLGtCQURWO0FBRU4sa0NBQVUsU0FBSyxNQUZUO0FBR04scUNBQWE7QUFIUCxxQkFBVjtBQUtBLHdCQUFJLFVBQVUsTUFBZCxFQUFzQjtBQUNsQiwrQkFBTyxTQUFLLFNBQUwsQ0FBZ0IsS0FBaEIsQ0FBUDtBQUNBLGdDQUFRLGdCQUFSLElBQTRCLEtBQUssTUFBakM7QUFDQSxnQ0FBUSxJQUFSO0FBQ0g7QUFDRywwQkFiRCxHQWFVLFNBQUssY0FBTCxDQUFxQixTQUFLLE1BQTFCLENBYlY7QUFjQyw2QkFkRCxHQWNhLFNBQUssSUFBTCxDQUFXLFNBQUssTUFBTCxDQUFhLElBQWIsQ0FBWCxFQUErQixNQUEvQixFQUF1QyxRQUF2QyxFQUFpRCxRQUFqRCxDQWRiOztBQWVILDRCQUFRLFdBQVIsSUFBdUIsU0FBdkI7QUFDSDtBQTlNUSx1QkErTVksU0FBSyxLQUFMLENBQVksR0FBWixFQUFpQixNQUFqQixFQUF5QixPQUF6QixFQUFrQyxJQUFsQyxDQS9NWjtBQUFBO0FBK01MLHdCQS9NSztBQUFBLHlCQWdOTCxPQUFPLFNBaE5GOztBQWlOTCw4QkFBSSxhQUFhLFFBQWpCO0FBQ0ksd0JBQUksQ0FBQyxTQUFTLFNBQVQsQ0FBTDtBQUNJLDhCQUFNLElBQUksYUFBSixDQUFtQixTQUFLLEVBQUwsR0FBVSxHQUFWLEdBQWdCLFNBQUssSUFBTCxDQUFXLFFBQVgsQ0FBbkMsQ0FBTjtBQURKO0FBREo7QUFqTks7QUFvTkwsMkJBQU8sUUFBUDtBQXBOSztBQXNOVCwyQkFBTyxRQUFQO0FBdE5TO0FBQUE7QUFBQTtBQUFBLEtBQWpCOztBQTBOQTs7QUFFQSxRQUFJLFlBQVk7O0FBRVosY0FBTSxXQUZNO0FBR1osZ0JBQVEsV0FISTtBQUlaLHFCQUFhLENBQUUsSUFBRixFQUFRLElBQVIsRUFBYyxJQUFkLENBSkQsRUFJdUI7QUFDbkMscUJBQWEsSUFMRDtBQU1aLG1CQUFXLG1DQU5DO0FBT1osZ0JBQVE7QUFDSixvQkFBUSxxR0FESjtBQUVKLG1CQUFPLCtCQUZIO0FBR0osbUJBQU8sMkJBSEg7QUFJSixtQkFBTztBQUpILFNBUEk7QUFhWixlQUFPO0FBQ0gsc0JBQVU7QUFDTix1QkFBTyxDQUNILFVBREcsRUFDUztBQUNaLDJCQUZHLEVBR0gsUUFIRyxFQUlILFFBSkc7QUFERCxhQURQO0FBU0gsdUJBQVc7QUFDUCx1QkFBTyxDQUNILFNBREcsRUFFSCxZQUZHLEVBR0gsa0JBSEcsQ0FEQTtBQU1QLHdCQUFRLENBQ0osS0FESSxFQUVKLGFBRkksRUFHSixNQUhJO0FBTkQ7QUFUUixTQWJLOztBQW9DTixvQkFwQ007QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQXFDYSxTQUFLLGlCQUFMLEVBckNiO0FBQUE7QUFxQ0osd0JBckNJO0FBc0NKLHNCQXRDSSxHQXNDSyxFQUFFLFFBQVEsUUFBVixFQXRDTDtBQXVDSixvQkF2Q0ksR0F1Q0c7QUFDUCw0QkFBUSxTQUFTLG1CQUFULENBREQ7QUFFUCw0QkFBUSxTQUFTLGtCQUFULENBRkQ7QUFHUCw2QkFBUyxTQUFTLGlCQUFUO0FBSEYsaUJBdkNIO0FBNENKLHFCQTVDSSxHQTRDSTtBQUNSLDRCQUFRLFNBQVMsaUJBQVQsQ0FEQTtBQUVSLDRCQUFRLFNBQVMsZ0JBQVQsQ0FGQTtBQUdSLDZCQUFTLFNBQVMsZUFBVDtBQUhELGlCQTVDSjtBQWlESixzQkFqREksR0FpREssU0FBSyxPQUFMLENBQWEsQ0FBYixDQWpETDtBQWtESixzQkFsREksR0FrREssU0FBSyxPQUFMLENBQWEsTUFBYixDQWxETDs7QUFtRFIsdUJBQU8sT0FBTyxNQUFQLENBQVAsSUFBeUIsSUFBekI7QUFDQSx1QkFBTyxPQUFPLE9BQVAsQ0FBUCxJQUEwQixLQUExQjtBQUNBLHVCQUFPLE1BQVA7QUFyRFE7QUFBQTtBQXdETixzQkF4RE0sMEJBd0RVLE1BeERWO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQXdEa0Isc0JBeERsQixtRkF3RDJCLEVBeEQzQjtBQUFBLHVCQXlEYyxTQUFLLGtCQUFMLENBQXlCLE1BQXpCLENBekRkO0FBQUE7QUF5REoseUJBekRJO0FBMERKLHlCQTFESSxHQTBEUSxTQUFVLFVBQVUsV0FBVixJQUF5QixJQUFuQyxDQTFEUjtBQTJESixzQkEzREksR0EyREs7QUFDVCw0QkFBUSxFQURDO0FBRVQsNEJBQVEsRUFGQztBQUdULGlDQUFhLFNBSEo7QUFJVCxnQ0FBWSxTQUFLLE9BQUwsQ0FBYyxTQUFkO0FBSkgsaUJBM0RMO0FBaUVKLHFCQWpFSSxHQWlFSSxDQUFFLE1BQUYsRUFBVSxNQUFWLENBakVKOztBQWtFUixxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLE1BQU0sTUFBMUIsRUFBa0MsR0FBbEMsRUFBdUM7QUFDL0Isd0JBRCtCLEdBQ3hCLE1BQU0sQ0FBTixDQUR3QjtBQUUvQiwwQkFGK0IsR0FFdEIsVUFBVSxJQUFWLENBRnNCOztBQUduQyx5QkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLE9BQU8sTUFBM0IsRUFBbUMsR0FBbkMsRUFBd0M7QUFDaEMsNkJBRGdDLEdBQ3hCLE9BQU8sQ0FBUCxDQUR3QjtBQUVoQyw2QkFGZ0MsR0FFeEIsV0FBWSxNQUFNLENBQU4sQ0FBWixDQUZ3QjtBQUdoQyw4QkFIZ0MsR0FHdkIsV0FBWSxNQUFNLENBQU4sQ0FBWixDQUh1Qjs7QUFJcEMsK0JBQU8sSUFBUCxFQUFhLElBQWIsQ0FBbUIsQ0FBRSxLQUFGLEVBQVMsTUFBVCxDQUFuQjtBQUNIO0FBQ0o7QUFDRCx1QkFBTyxNQUFQO0FBNUVRO0FBQUE7QUErRU4sbUJBL0VNLHVCQStFTyxNQS9FUDtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQWdGVyxTQUFLLGVBQUwsRUFoRlg7QUFBQTtBQWdGSixzQkFoRkk7QUFpRkoseUJBakZJLEdBaUZRLFNBQVUsT0FBTyxXQUFQLElBQXNCLElBQWhDLENBakZSOztBQWtGUix1QkFBTztBQUNILGlDQUFhLFNBRFY7QUFFSCxnQ0FBWSxTQUFLLE9BQUwsQ0FBYyxTQUFkLENBRlQ7QUFHSCw0QkFBUSxXQUFZLE9BQU8sTUFBUCxDQUFaLENBSEw7QUFJSCwyQkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBSko7QUFLSCwyQkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBTEo7QUFNSCwyQkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBTko7QUFPSCw0QkFBUSxTQVBMO0FBUUgsNEJBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQVJMO0FBU0gsNkJBQVMsU0FUTjtBQVVILDZCQUFTLFNBVk47QUFXSCw0QkFBUSxXQUFZLE9BQU8sTUFBUCxDQUFaLENBWEw7QUFZSCw4QkFBVSxTQVpQO0FBYUgsa0NBQWMsU0FiWDtBQWNILCtCQUFXLFdBQVksT0FBTyxTQUFQLENBQVosQ0FkUjtBQWVILGtDQUFjLFNBZlg7QUFnQkgsbUNBQWUsV0FBWSxPQUFPLFFBQVAsQ0FBWixDQWhCWjtBQWlCSCw0QkFBUTtBQWpCTCxpQkFBUDtBQWxGUTtBQUFBO0FBdUdOLG1CQXZHTSx1QkF1R08sTUF2R1A7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUF1R2Usa0JBdkdmLG1GQXVHd0IsRUF2R3hCO0FBd0dKLG9CQXhHSSxHQXdHTyxFQXhHUDs7QUF5R1IsbUJBQU8sU0FBSyxlQUFMLENBQXNCLE1BQXRCLENBQVA7QUF6R1E7QUE0R04sbUJBNUdNLHVCQTRHTyxNQTVHUCxFQTRHZSxJQTVHZixFQTRHcUIsSUE1R3JCLEVBNEcyQixNQTVHM0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQTRHbUMscUJBNUduQyxtRkE0RzJDLFNBNUczQztBQTRHc0Qsc0JBNUd0RCxtRkE0RytELEVBNUcvRDtBQTZHSixzQkE3R0ksR0E2R0ssZ0JBQWdCLFNBQUssVUFBTCxDQUFpQixJQUFqQixDQTdHckI7QUE4R0oscUJBOUdJLEdBOEdJO0FBQ1IsNEJBQVMsUUFBUSxLQUFULEdBQWtCLFFBQWxCLEdBQTZCLFFBRDdCO0FBRVIscUNBQWtCLFFBQVEsUUFBVCxHQUFxQixDQUFyQixHQUF5QjtBQUZsQyxpQkE5R0o7O0FBa0hSLG9CQUFJLFFBQVEsUUFBWixFQUFzQjtBQUNsQix3QkFBSSxRQUFRLEtBQVo7QUFDSSw4QkFBTSxPQUFOLElBQWlCLE1BQWpCO0FBREo7QUFHSSw4QkFBTSxRQUFOLElBQWtCLE1BQWxCO0FBSEo7QUFJSCxpQkFMRCxNQUtPO0FBQ0gsMEJBQU0sT0FBTixJQUFpQixLQUFqQjtBQUNBLDBCQUFNLFFBQU4sSUFBa0IsTUFBbEI7QUFDSDtBQTFITyx1QkEySGEsU0FBSyxNQUFMLEVBQWMsU0FBSyxNQUFMLENBQWEsS0FBYixFQUFvQixNQUFwQixDQUFkLENBM0hiO0FBQUE7QUEySEosd0JBM0hJOztBQTRIUix1QkFBTztBQUNILDRCQUFRLFFBREw7QUFFSCwwQkFBTSxTQUFTLElBQVQ7QUFGSCxpQkFBUDtBQTVIUTtBQUFBO0FBa0lOLG1CQWxJTSx1QkFrSU8sRUFsSVA7QUFBQTs7QUFtSVIsbUJBQU8sU0FBSyxzQkFBTCxDQUE2QixFQUFFLE1BQU0sRUFBUixFQUE3QixDQUFQO0FBbklRO0FBc0laLGVBdElZLG1CQXNJSCxJQXRJRyxFQXNJdUY7QUFBQSxnQkFBcEYsR0FBb0YsdUVBQTlFLFFBQThFO0FBQUEsZ0JBQXBFLE1BQW9FLHVFQUEzRCxLQUEyRDtBQUFBLGdCQUFwRCxNQUFvRCx1RUFBM0MsRUFBMkM7QUFBQSxnQkFBdkMsT0FBdUMsdUVBQTdCLFNBQTZCO0FBQUEsZ0JBQWxCLElBQWtCLHVFQUFYLFNBQVc7O0FBQy9GLGdCQUFJLEtBQUssRUFBTCxJQUFXLFdBQWYsRUFDSSxNQUFNLElBQUksYUFBSixDQUFtQixLQUFLLEVBQUwsR0FBVSxtREFBN0IsQ0FBTjtBQUNKLGdCQUFJLE1BQU0sS0FBSyxJQUFMLENBQVUsS0FBVixJQUFtQixHQUFuQixHQUF5QixJQUFuQztBQUNBLGdCQUFJLE9BQU8sUUFBWCxFQUFxQjtBQUNqQixvQkFBSSxPQUFPLElBQVAsQ0FBYSxNQUFiLEVBQXFCLE1BQXpCLEVBQ0ksT0FBTyxNQUFNLEtBQUssU0FBTCxDQUFnQixNQUFoQixDQUFiO0FBQ1AsYUFIRCxNQUdPO0FBQ0gsb0JBQUksUUFBUSxLQUFLLEtBQUwsR0FBYyxRQUExQjtBQUNBLHVCQUFPLEtBQUssU0FBTCxDQUFnQixNQUFoQixDQUFQO0FBQ0Esb0JBQUksU0FBUyxLQUFLLGNBQUwsQ0FBcUIsS0FBSyxNQUExQixDQUFiO0FBQ0Esb0JBQUksT0FBTyxLQUFLLE1BQUwsR0FBYyxLQUF6QjtBQUNBLDBCQUFVO0FBQ04sNkJBQVMsS0FBSyxNQURSO0FBRU4sK0JBQVcsTUFBTSxRQUFOLEVBRkw7QUFHTixtQ0FBZSxLQUFLLElBQUwsQ0FBVyxLQUFLLE1BQUwsQ0FBYSxJQUFiLENBQVgsRUFBK0IsTUFBL0IsRUFBdUMsUUFBdkMsRUFBaUQsUUFBakQsQ0FIVDtBQUlOLG9DQUFnQixtQ0FKVjtBQUtOLHNDQUFrQixLQUFLO0FBTGpCLGlCQUFWO0FBT0g7QUFDRCxtQkFBTyxLQUFLLEtBQUwsQ0FBWSxHQUFaLEVBQWlCLE1BQWpCLEVBQXlCLE9BQXpCLEVBQWtDLElBQWxDLENBQVA7QUFDSDtBQTNKVyxLQUFoQjs7QUE4SkE7O0FBRUEsUUFBSSxjQUFjLE9BQVEsU0FBUixFQUFtQjs7QUFFakMsY0FBTSxhQUYyQjtBQUdqQyxnQkFBUSxhQUh5QjtBQUlqQyxxQkFBYSxJQUpvQixFQUlkO0FBQ25CLHFCQUFhLElBTG9CO0FBTWpDLGdCQUFRO0FBQ0osb0JBQVEscUdBREo7QUFFSixtQkFBTyxnQ0FGSDtBQUdKLG1CQUFPLDRCQUhIO0FBSUosbUJBQU87QUFKSCxTQU55QjtBQVlqQyxtQkFBVztBQUNQLHVCQUFXLEVBQUUsTUFBTSxTQUFSLEVBQW1CLFVBQVUsU0FBN0IsRUFBd0MsUUFBUSxLQUFoRCxFQUF1RCxTQUFTLEtBQWhFO0FBREo7QUFac0IsS0FBbkIsQ0FBbEI7O0FBaUJBOztBQUVBLFFBQUksYUFBYTs7QUFFYixjQUFNLFlBRk87QUFHYixnQkFBUSxjQUhLO0FBSWIscUJBQWEsSUFKQSxFQUlNO0FBQ25CLHFCQUFhLElBTEE7QUFNYixnQkFBUTtBQUNKLG9CQUFRLHFHQURKO0FBRUosbUJBQU8sOEJBRkg7QUFHSixtQkFBTywwQkFISDtBQUlKLG1CQUFPO0FBSkgsU0FOSztBQVliLGVBQU87QUFDSCxzQkFBVTtBQUNOLHVCQUFPLENBQ0gsZ0JBREcsRUFFSCxzQkFGRyxFQUdILHFCQUhHLEVBSUgsMEJBSkc7QUFERCxhQURQO0FBU0gsdUJBQVc7QUFDUCx3QkFBUSxDQUNKLE1BREksRUFFSixjQUZJLEVBR0osU0FISSxFQUlKLGNBSkksRUFLSixjQUxJLEVBTUosb0JBTkksRUFPSixtQkFQSSxFQVFKLG1CQVJJLEVBU0osZUFUSTtBQUREO0FBVFIsU0FaTTtBQW1DYixtQkFBVztBQUNQLHVCQUFXLEVBQUUsTUFBTSxTQUFSLEVBQW1CLFVBQVUsU0FBN0IsRUFBd0MsUUFBUSxLQUFoRCxFQUF1RCxTQUFTLEtBQWhFLEVBREo7QUFFUCx1QkFBVyxFQUFFLE1BQU0sU0FBUixFQUFtQixVQUFVLFNBQTdCLEVBQXdDLFFBQVEsS0FBaEQsRUFBdUQsU0FBUyxLQUFoRSxFQUZKO0FBR1AsdUJBQVcsRUFBRSxNQUFNLFNBQVIsRUFBbUIsVUFBVSxTQUE3QixFQUF3QyxRQUFRLEtBQWhELEVBQXVELFNBQVMsS0FBaEUsRUFISjtBQUlQLHdCQUFZLEVBQUUsTUFBTSxVQUFSLEVBQW9CLFVBQVUsVUFBOUIsRUFBMEMsUUFBUSxNQUFsRCxFQUEwRCxTQUFTLEtBQW5FLEVBSkw7QUFLUCx3QkFBWSxFQUFFLE1BQU0sVUFBUixFQUFvQixVQUFVLFVBQTlCLEVBQTBDLFFBQVEsTUFBbEQsRUFBMEQsU0FBUyxLQUFuRSxFQUxMO0FBTVAsdUJBQVcsRUFBRSxNQUFNLFNBQVIsRUFBbUIsVUFBVSxTQUE3QixFQUF3QyxRQUFRLEtBQWhELEVBQXVELFNBQVMsS0FBaEUsRUFOSjtBQU9QLHVCQUFXLEVBQUUsTUFBTSxTQUFSLEVBQW1CLFVBQVUsU0FBN0IsRUFBd0MsUUFBUSxLQUFoRCxFQUF1RCxTQUFTLEtBQWhFLEVBUEo7QUFRUCx1QkFBVyxFQUFFLE1BQU0sU0FBUixFQUFtQixVQUFVLFNBQTdCLEVBQXdDLFFBQVEsS0FBaEQsRUFBdUQsU0FBUyxLQUFoRSxFQVJKO0FBU1AsdUJBQVcsRUFBRSxNQUFNLFNBQVIsRUFBbUIsVUFBVSxTQUE3QixFQUF3QyxRQUFRLEtBQWhELEVBQXVELFNBQVMsS0FBaEUsRUFUSjtBQVVQLHVCQUFXLEVBQUUsTUFBTSxTQUFSLEVBQW1CLFVBQVUsU0FBN0IsRUFBd0MsUUFBUSxLQUFoRCxFQUF1RCxTQUFTLEtBQWhFLEVBVko7QUFXUCx1QkFBVyxFQUFFLE1BQU0sU0FBUixFQUFtQixVQUFVLFNBQTdCLEVBQXdDLFFBQVEsS0FBaEQsRUFBdUQsU0FBUyxLQUFoRSxFQVhKO0FBWVAsd0JBQVksRUFBRSxNQUFNLFVBQVIsRUFBb0IsVUFBVSxVQUE5QixFQUEwQyxRQUFRLE1BQWxELEVBQTBELFNBQVMsS0FBbkUsRUFaTDtBQWFQLHdCQUFZLEVBQUUsTUFBTSxVQUFSLEVBQW9CLFVBQVUsVUFBOUIsRUFBMEMsUUFBUSxNQUFsRCxFQUEwRCxTQUFTLEtBQW5FO0FBYkwsU0FuQ0U7O0FBbURiLGNBbkRhLG9CQW1ESDtBQUNOLG1CQUFPLEtBQUssZUFBTCxFQUFQO0FBQ0gsU0FyRFk7QUF1RFAsb0JBdkRPO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQXdEWSxTQUFLLGtCQUFMLEVBeERaO0FBQUE7QUF3REwsd0JBeERLO0FBeURMLHNCQXpESyxHQXlESSxFQUFFLFFBQVEsUUFBVixFQXpESjs7QUEwRFQsb0JBQUksY0FBYyxNQUFsQixFQUEwQjtBQUNsQiw0QkFEa0IsR0FDUCxTQUFTLFVBQVQsQ0FETzs7QUFFdEIseUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxTQUFTLE1BQTdCLEVBQXFDLEdBQXJDLEVBQTBDO0FBQ2xDLCtCQURrQyxHQUN4QixTQUFTLENBQVQsQ0FEd0I7QUFFbEMsZ0NBRmtDLEdBRXZCLFFBQVEsVUFBUixDQUZ1QjtBQUdsQywrQkFIa0MsR0FHeEIsV0FBWSxRQUFRLFNBQVIsQ0FBWixDQUh3Qjs7QUFJdEMsK0JBQU8sUUFBUCxJQUFtQjtBQUNmLG9DQUFRLE9BRE87QUFFZixvQ0FBUSxTQUZPO0FBR2YscUNBQVM7QUFITSx5QkFBbkI7QUFLSDtBQUNKO0FBQ0QsdUJBQU8sTUFBUDtBQXZFUztBQUFBO0FBMEVQLHNCQTFFTywwQkEwRVMsTUExRVQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBMEVpQixzQkExRWpCLG1GQTBFMEIsRUExRTFCO0FBMkVMLGlCQTNFSyxHQTJFRCxTQUFLLE1BQUwsQ0FBYSxNQUFiLENBM0VDO0FBQUEsdUJBNEVRLFNBQUssd0JBQUwsQ0FBK0IsU0FBSyxNQUFMLENBQWE7QUFDekQsOEJBQVUsRUFBRSxJQUFGO0FBRCtDLGlCQUFiLEVBRTdDLE1BRjZDLENBQS9CLENBNUVSO0FBQUE7QUE0RUwsb0JBNUVLO0FBQUEsdUJBK0VRLFNBQUsseUJBQUwsQ0FBZ0MsU0FBSyxNQUFMLENBQWE7QUFDMUQsOEJBQVUsRUFBRSxJQUFGO0FBRGdELGlCQUFiLEVBRTlDLE1BRjhDLENBQWhDLENBL0VSO0FBQUE7QUErRUwsb0JBL0VLO0FBa0ZMLHlCQWxGSyxHQWtGTztBQUNaLDRCQUFRLEVBREk7QUFFWiw0QkFBUTtBQUZJLGlCQWxGUDs7QUFzRlQsb0JBQUksSUFBSixFQUFVO0FBQ04sd0JBQUksVUFBVSxJQUFkO0FBQ0ksa0NBQVUsTUFBVixJQUFvQixLQUFLLE1BQUwsQ0FBcEI7QUFESjtBQUVIO0FBQ0Qsb0JBQUksSUFBSixFQUFVO0FBQ04sd0JBQUksVUFBVSxJQUFkO0FBQ0ksa0NBQVUsTUFBVixJQUFvQixLQUFLLE1BQUwsQ0FBcEI7QUFESjtBQUVIO0FBQ0cseUJBOUZLLEdBOEZPLFNBQUssWUFBTCxFQTlGUDtBQStGTCxzQkEvRkssR0ErRkk7QUFDVCw0QkFBUSxFQURDO0FBRVQsNEJBQVEsRUFGQztBQUdULGlDQUFhLFNBSEo7QUFJVCxnQ0FBWSxTQUFLLE9BQUwsQ0FBYyxTQUFkO0FBSkgsaUJBL0ZKO0FBcUdMLHFCQXJHSyxHQXFHRyxDQUFFLE1BQUYsRUFBVSxNQUFWLENBckdIOztBQXNHVCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLE1BQU0sTUFBMUIsRUFBa0MsR0FBbEMsRUFBdUM7QUFDL0Isd0JBRCtCLEdBQ3hCLE1BQU0sQ0FBTixDQUR3QjtBQUUvQiwwQkFGK0IsR0FFdEIsVUFBVSxJQUFWLENBRnNCOztBQUduQyx5QkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLE9BQU8sTUFBM0IsRUFBbUMsR0FBbkMsRUFBd0M7QUFDaEMsNkJBRGdDLEdBQ3hCLE9BQU8sQ0FBUCxDQUR3QjtBQUVoQyw2QkFGZ0MsR0FFeEIsV0FBWSxNQUFNLE9BQU4sQ0FBWixDQUZ3QjtBQUdoQyw4QkFIZ0MsR0FHdkIsV0FBWSxNQUFNLGdCQUFOLENBQVosQ0FIdUI7O0FBSXBDLCtCQUFPLElBQVAsRUFBYSxJQUFiLENBQW1CLENBQUUsS0FBRixFQUFTLE1BQVQsQ0FBbkI7QUFDSDtBQUNKO0FBQ0QsdUJBQU8sTUFBUDtBQWhIUztBQUFBO0FBbUhQLG1CQW5ITyx1QkFtSE0sTUFuSE47QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQW9IWSxTQUFLLDRCQUFMLENBQW1DO0FBQ3BELDhCQUFVLFNBQUssUUFBTCxDQUFlLE1BQWY7QUFEMEMsaUJBQW5DLENBcEhaO0FBQUE7QUFvSEwsd0JBcEhLO0FBdUhMLHNCQXZISyxHQXVISSxTQUFTLFFBQVQsQ0F2SEo7QUF3SEwseUJBeEhLLEdBd0hPLFNBQUssWUFBTCxFQXhIUDtBQXlITCxzQkF6SEssR0F5SEk7QUFDVCxpQ0FBYSxTQURKO0FBRVQsZ0NBQVksU0FBSyxPQUFMLENBQWMsU0FBZCxDQUZIO0FBR1QsNEJBQVEsU0FIQztBQUlULDJCQUFPLFNBSkU7QUFLVCwyQkFBTyxTQUxFO0FBTVQsMkJBQU8sU0FORTtBQU9ULDRCQUFRLFNBUEM7QUFRVCw0QkFBUSxTQVJDO0FBU1QsNkJBQVMsU0FUQTtBQVVULDZCQUFTLFNBVkE7QUFXVCw0QkFBUSxTQVhDO0FBWVQsOEJBQVUsU0FaRDtBQWFULGtDQUFjLFNBYkw7QUFjVCwrQkFBVyxTQWRGO0FBZVQsa0NBQWMsU0FmTDtBQWdCVCxtQ0FBZSxTQWhCTjtBQWlCVCw0QkFBUTtBQWpCQyxpQkF6SEo7QUE0SUwsNEJBNUlLLEdBNElVLE9BQU8sTUE1SWpCOztBQTZJVCxvQkFBSSxlQUFlLENBQW5CLEVBQXNCO0FBQ2QseUJBRGMsR0FDTixLQUFLLEdBQUwsQ0FBVSxlQUFlLEVBQXpCLEVBQTZCLENBQTdCLENBRE07O0FBRWxCLHlCQUFTLENBQVQsR0FBYSxLQUFiLEVBQW9CLElBQUksT0FBTyxNQUEvQixFQUF1QyxHQUF2QyxFQUE0QztBQUNwQyw4QkFEb0MsR0FDM0IsT0FBTyxDQUFQLENBRDJCOztBQUV4Qyw0QkFBSSxPQUFPLE9BQU8sTUFBUCxDQUFQLElBQXlCLFdBQTdCO0FBQ0ksbUNBQU8sTUFBUCxJQUFpQixPQUFPLENBQVAsQ0FBakI7QUFESix5QkFFQSxJQUFLLE9BQU8sT0FBTyxNQUFQLENBQVAsSUFBeUIsV0FBMUIsSUFBMkMsT0FBTyxNQUFQLElBQWlCLE9BQU8sQ0FBUCxDQUFoRTtBQUNJLG1DQUFPLE1BQVAsSUFBaUIsT0FBTyxDQUFQLENBQWpCO0FBREoseUJBRUEsSUFBSyxPQUFPLE9BQU8sS0FBUCxDQUFQLElBQXdCLFdBQXpCLElBQTBDLE9BQU8sS0FBUCxJQUFnQixPQUFPLENBQVAsQ0FBOUQ7QUFDSSxtQ0FBTyxLQUFQLElBQWdCLE9BQU8sQ0FBUCxDQUFoQjtBQURKLHlCQUVBLElBQUksT0FBTyxPQUFPLGFBQVAsQ0FBUCxJQUFnQyxXQUFwQztBQUNJLG1DQUFPLGFBQVAsSUFBd0IsQ0FBQyxPQUFPLENBQVAsQ0FBekI7QUFESjtBQUdJLG1DQUFPLGFBQVAsS0FBeUIsT0FBTyxDQUFQLENBQXpCO0FBSEo7QUFJSDtBQUNHLHdCQWZjLEdBZVAsZUFBZSxDQWZSOztBQWdCbEIsMkJBQU8sT0FBUCxJQUFrQixPQUFPLElBQVAsRUFBYSxDQUFiLENBQWxCO0FBQ0EsMkJBQU8sYUFBUCxJQUF3QixDQUFDLENBQUQsR0FBSyxPQUFPLGFBQVAsQ0FBN0I7QUFDSDtBQUNELHVCQUFPLE1BQVA7QUFoS1M7QUFBQTtBQW1LUCxtQkFuS08sdUJBbUtNLE1BbktOO0FBQUE7QUFBQTtBQUFBOztBQW1LYyxrQkFuS2QsbUZBbUt1QixFQW5LdkI7O0FBb0tULG1CQUFPLFNBQUssb0JBQUwsQ0FBMkIsU0FBSyxNQUFMLENBQWE7QUFDM0MsMEJBQVUsU0FBSyxRQUFMLENBQWUsTUFBZjtBQURpQyxhQUFiLEVBRS9CLE1BRitCLENBQTNCLENBQVA7QUFwS1M7QUF5S1AsbUJBektPLHVCQXlLTSxNQXpLTixFQXlLYyxJQXpLZCxFQXlLb0IsSUF6S3BCLEVBeUswQixNQXpLMUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUF5S2tDLGlCQXpLbEMsbUZBeUswQyxTQXpLMUM7QUF5S3FELGtCQXpLckQsbUZBeUs4RCxFQXpLOUQ7O0FBMEtULGdCQUFJLFFBQVEsUUFBWjtBQUNJLHNCQUFNLElBQUksYUFBSixDQUFtQixTQUFLLEVBQUwsR0FBVSwyQkFBN0IsQ0FBTjtBQURKLGFBRUksQ0E1S0ssR0E0S0QsU0FBSyxNQUFMLENBQWEsTUFBYixDQTVLQztBQTZLTCxrQkE3S0ssR0E2S0ksZ0JBQWdCLFNBQUssVUFBTCxDQUFpQixJQUFqQixDQUFoQixHQUF5QyxJQTdLN0M7QUE4S0wsaUJBOUtLLEdBOEtHO0FBQ1IseUJBQVMsTUFERDtBQUVSLDZCQUFhLEVBQUUsT0FBRixDQUZMO0FBR1IsNEJBQVksRUFBRSxNQUFGLENBSEo7QUFJUix5QkFBUztBQUpELGFBOUtIOztBQW9MVCxtQkFBTyxTQUFLLE1BQUwsRUFBYyxTQUFLLE1BQUwsQ0FBYSxLQUFiLEVBQW9CLE1BQXBCLENBQWQsQ0FBUDtBQXBMUztBQXVMUCxtQkF2TE8sdUJBdUxNLEVBdkxOO0FBQUE7O0FBd0xULG1CQUFPLFNBQUssd0JBQUwsQ0FBK0IsRUFBRSxNQUFNLEVBQVIsRUFBL0IsQ0FBUDtBQXhMUztBQTJMYixlQTNMYSxtQkEyTEosSUEzTEksRUEyTHNGO0FBQUEsZ0JBQXBGLEdBQW9GLHVFQUE5RSxRQUE4RTtBQUFBLGdCQUFwRSxNQUFvRSx1RUFBM0QsS0FBMkQ7QUFBQSxnQkFBcEQsTUFBb0QsdUVBQTNDLEVBQTJDO0FBQUEsZ0JBQXZDLE9BQXVDLHVFQUE3QixTQUE2QjtBQUFBLGdCQUFsQixJQUFrQix1RUFBWCxTQUFXOztBQUMvRixnQkFBSSxNQUFNLEtBQUssSUFBTCxDQUFVLEtBQVYsSUFBbUIsR0FBbkIsR0FBeUIsS0FBSyxhQUFMLENBQW9CLElBQXBCLEVBQTBCLE1BQTFCLENBQW5DO0FBQ0EsZ0JBQUksUUFBUSxLQUFLLElBQUwsQ0FBVyxNQUFYLEVBQW1CLEtBQUssYUFBTCxDQUFvQixJQUFwQixDQUFuQixDQUFaO0FBQ0EsZ0JBQUksT0FBTyxRQUFYLEVBQXFCO0FBQ2pCLG9CQUFJLE9BQU8sSUFBUCxDQUFhLEtBQWIsRUFBb0IsTUFBeEIsRUFDSSxPQUFPLEtBQUssYUFBTCxDQUFvQixJQUFwQixFQUEwQixLQUExQixDQUFQO0FBQ1AsYUFIRCxNQUdPO0FBQ0gsb0JBQUksUUFBUSxLQUFLLEtBQUwsRUFBWjtBQUNBLHVCQUFPLEtBQUssU0FBTCxDQUFnQixLQUFLLE1BQUwsQ0FBYTtBQUNoQyxvQ0FBZ0IsS0FEZ0I7QUFFaEMsNkJBQVM7QUFGdUIsaUJBQWIsRUFHcEIsS0FIb0IsQ0FBaEIsQ0FBUDtBQUlBLG9CQUFJLE9BQU8sT0FBTyxLQUFLLE1BQXZCO0FBQ0EsMEJBQVU7QUFDTixrQ0FBYyxLQUFLLE1BRGI7QUFFTixnQ0FBWSxLQUFLLElBQUwsQ0FBVyxLQUFLLE1BQUwsQ0FBYSxJQUFiLENBQVgsRUFBK0IsUUFBL0IsQ0FGTjtBQUdOLG9DQUFnQixtQ0FIVjtBQUlOLHNDQUFrQixLQUFLO0FBSmpCLGlCQUFWO0FBTUg7QUFDRCxtQkFBTyxLQUFLLEtBQUwsQ0FBWSxHQUFaLEVBQWlCLE1BQWpCLEVBQXlCLE9BQXpCLEVBQWtDLElBQWxDLENBQVA7QUFDSDtBQWhOWSxLQUFqQjs7QUFtTkE7O0FBRUEsUUFBSSxVQUFVLE9BQVEsU0FBUixFQUFtQjs7QUFFN0IsY0FBTSxTQUZ1QjtBQUc3QixnQkFBUSxTQUhxQjtBQUk3QixxQkFBYSxJQUpnQixFQUlWO0FBQ25CLHFCQUFhLElBTGdCO0FBTTdCLGdCQUFRO0FBQ0osb0JBQVEscUdBREo7QUFFSixtQkFBTyw2QkFGSDtBQUdKLG1CQUFPLHlCQUhIO0FBSUosbUJBQU87QUFKSCxTQU5xQjtBQVk3QixtQkFBVztBQUNQLHVCQUFXLEVBQUUsTUFBTSxTQUFSLEVBQW1CLFVBQVUsU0FBN0IsRUFBd0MsUUFBUSxLQUFoRCxFQUF1RCxTQUFTLEtBQWhFO0FBREo7QUFaa0IsS0FBbkIsQ0FBZDs7QUFpQkE7O0FBRUEsUUFBSSxPQUFPOztBQUVQLGNBQU0sTUFGQztBQUdQLGdCQUFRLE1BSEQ7QUFJUCxxQkFBYSxDQUFFLElBQUYsRUFBUSxJQUFSLEVBQWMsSUFBZCxDQUpOO0FBS1AscUJBQWEsSUFMTixFQUtZO0FBQ25CLG1CQUFXLElBTko7QUFPUCxnQkFBUTtBQUNKLG9CQUFRLHFHQURKO0FBRUosbUJBQU8sc0JBRkg7QUFHSixtQkFBTyxrQkFISDtBQUlKLG1CQUFPO0FBSkgsU0FQRDtBQWFQLGVBQU87QUFDSCxzQkFBVTtBQUNOLHVCQUFPLENBQ0gsb0JBREcsRUFFSCxhQUZHLEVBR0gsb0JBSEc7QUFERCxhQURQO0FBUUgsdUJBQVc7QUFDUCx3QkFBUSxDQUNKLFNBREksRUFFSixRQUZJLEVBR0osU0FISSxFQUlKLE9BSkksRUFLSixRQUxJLEVBTUosT0FOSSxFQU9KLFVBUEk7QUFERDtBQVJSLFNBYkE7QUFpQ1AsbUJBQVc7QUFDUCx1QkFBVyxFQUFFLE1BQU0sU0FBUixFQUFtQixVQUFVLFNBQTdCLEVBQXdDLFFBQVEsS0FBaEQsRUFBdUQsU0FBUyxLQUFoRSxFQURKO0FBRVAsdUJBQVcsRUFBRSxNQUFNLFNBQVIsRUFBbUIsVUFBVSxTQUE3QixFQUF3QyxRQUFRLEtBQWhELEVBQXVELFNBQVMsS0FBaEU7QUFGSixTQWpDSjs7QUFzQ0Qsb0JBdENDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQXVDa0IsU0FBSyxrQkFBTCxFQXZDbEI7QUFBQTtBQXVDQyx3QkF2Q0Q7QUF3Q0Msc0JBeENELEdBd0NVLEVBQUUsUUFBUSxRQUFWLEVBeENWO0FBeUNDLDBCQXpDRCxHQXlDYyxPQUFPLElBQVAsQ0FBYSxRQUFiLENBekNkOztBQTBDSCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFdBQVcsTUFBL0IsRUFBdUMsR0FBdkMsRUFBNEM7QUFDcEMsNEJBRG9DLEdBQ3pCLFdBQVcsQ0FBWCxDQUR5QjtBQUVwQyw2QkFGb0MsR0FFeEIsU0FBUyxXQUFULEVBRndCO0FBR3BDLDJCQUhvQyxHQUcxQjtBQUNWLGdDQUFRLFNBQVMsUUFBVCxDQURFO0FBRVYsZ0NBQVEsU0FGRTtBQUdWLGlDQUFTLFNBQVMsUUFBVDtBQUhDLHFCQUgwQjs7QUFReEMsMkJBQU8sU0FBUCxJQUFvQixPQUFwQjtBQUNIO0FBQ0QsdUJBQU8sTUFBUDtBQXBERztBQUFBO0FBdURELHNCQXZEQywwQkF1RGUsTUF2RGY7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBdUR1QixzQkF2RHZCLG1GQXVEZ0MsRUF2RGhDO0FBQUEsdUJBd0RtQixTQUFLLHFCQUFMLENBQTRCLFNBQUssTUFBTCxDQUFhO0FBQzNELDBCQUFNLFNBQUssUUFBTCxDQUFlLE1BQWYsQ0FEcUQ7QUFFM0QsNkJBQVM7QUFGa0QsaUJBQWIsRUFHL0MsTUFIK0MsQ0FBNUIsQ0F4RG5CO0FBQUE7QUF3REMseUJBeEREO0FBNERDLHlCQTVERCxHQTREYSxTQUFLLFlBQUwsRUE1RGI7QUE2REMsc0JBN0RELEdBNkRVO0FBQ1QsNEJBQVEsRUFEQztBQUVULDRCQUFRLEVBRkM7QUFHVCxpQ0FBYSxTQUhKO0FBSVQsZ0NBQVksU0FBSyxPQUFMLENBQWMsU0FBZDtBQUpILGlCQTdEVjtBQW1FQyxxQkFuRUQsR0FtRVMsQ0FBRSxNQUFGLEVBQVUsTUFBVixDQW5FVDs7QUFvRUgscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxNQUFNLE1BQTFCLEVBQWtDLEdBQWxDLEVBQXVDO0FBQy9CLHdCQUQrQixHQUN4QixNQUFNLENBQU4sQ0FEd0I7QUFFL0IsMEJBRitCLEdBRXRCLFVBQVUsSUFBVixDQUZzQjs7QUFHbkMseUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxPQUFPLE1BQTNCLEVBQW1DLEdBQW5DLEVBQXdDO0FBQ2hDLDZCQURnQyxHQUN4QixPQUFPLENBQVAsQ0FEd0I7QUFFaEMsNkJBRmdDLEdBRXhCLE1BQU0sT0FBTixDQUZ3QjtBQUdoQyw4QkFIZ0MsR0FHdkIsTUFBTSxRQUFOLENBSHVCOztBQUlwQywrQkFBTyxJQUFQLEVBQWEsSUFBYixDQUFtQixDQUFFLEtBQUYsRUFBUyxNQUFULENBQW5CO0FBQ0g7QUFDSjtBQUNELHVCQUFPLE1BQVA7QUE5RUc7QUFBQTtBQWlGRCxtQkFqRkMsdUJBaUZZLE1BakZaO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBa0ZnQixTQUFLLGlCQUFMLENBQXdCO0FBQ3ZDLDBCQUFNLFNBQUssUUFBTCxDQUFlLE1BQWY7QUFEaUMsaUJBQXhCLENBbEZoQjtBQUFBO0FBa0ZDLHNCQWxGRDtBQXFGQyx5QkFyRkQsR0FxRmEsT0FBTyxNQUFQLElBQWlCLElBckY5Qjs7QUFzRkgsdUJBQU87QUFDSCxpQ0FBYSxTQURWO0FBRUgsZ0NBQVksU0FBSyxPQUFMLENBQWMsU0FBZCxDQUZUO0FBR0gsNEJBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQUhMO0FBSUgsMkJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQUpKO0FBS0gsMkJBQU8sV0FBWSxPQUFPLE1BQVAsQ0FBWixDQUxKO0FBTUgsMkJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQU5KO0FBT0gsNEJBQVEsU0FQTDtBQVFILDRCQUFRLFNBUkw7QUFTSCw2QkFBUyxTQVROO0FBVUgsNkJBQVMsU0FWTjtBQVdILDRCQUFRLFdBQVksT0FBTyxNQUFQLENBQVosQ0FYTDtBQVlILDhCQUFVLFNBWlA7QUFhSCxrQ0FBYyxTQWJYO0FBY0gsK0JBQVcsU0FkUjtBQWVILGtDQUFjLFNBZlg7QUFnQkgsbUNBQWUsV0FBWSxPQUFPLFFBQVAsQ0FBWixDQWhCWjtBQWlCSCw0QkFBUTtBQWpCTCxpQkFBUDtBQXRGRztBQUFBO0FBMkdELG1CQTNHQyx1QkEyR1ksTUEzR1o7QUFBQTtBQUFBO0FBQUE7O0FBMkdvQixrQkEzR3BCLG1GQTJHNkIsRUEzRzdCOztBQTRHSCxtQkFBTyxTQUFLLHFCQUFMLENBQTRCLFNBQUssTUFBTCxDQUFhO0FBQzVDLHNCQUFNLFNBQUssUUFBTCxDQUFlLE1BQWYsQ0FEc0M7QUFFNUMseUJBQVM7QUFGbUMsYUFBYixFQUdoQyxNQUhnQyxDQUE1QixDQUFQO0FBNUdHO0FBa0hELG1CQWxIQyx1QkFrSFksTUFsSFosRUFrSG9CLElBbEhwQixFQWtIMEIsSUFsSDFCLEVBa0hnQyxNQWxIaEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBa0h3QyxxQkFsSHhDLG1GQWtIZ0QsU0FsSGhEO0FBa0gyRCxzQkFsSDNELG1GQWtIb0UsRUFsSHBFO0FBQUEsdUJBbUhrQixTQUFLLGdCQUFMLENBQXVCLFNBQUssTUFBTCxDQUFhO0FBQ3JELDRCQUFRLEtBQUssV0FBTCxFQUQ2QztBQUVyRCw4QkFBVSxTQUFLLFFBQUwsQ0FBZSxNQUFmLENBRjJDO0FBR3JELDhCQUFVLE1BSDJDO0FBSXJELDZCQUFTO0FBSjRDLGlCQUFiLEVBS3pDLE1BTHlDLENBQXZCLENBbkhsQjtBQUFBO0FBbUhDLHdCQW5IRDs7QUF5SEgsdUJBQU87QUFDSCw0QkFBUSxRQURMO0FBRUgsMEJBQU0sU0FBUyxPQUFULEVBQWtCLElBQWxCO0FBRkgsaUJBQVA7QUF6SEc7QUFBQTtBQStIRCxtQkEvSEMsdUJBK0hZLEVBL0haO0FBQUE7O0FBZ0lILG1CQUFPLFNBQUssaUJBQUwsQ0FBd0IsRUFBRSxTQUFTLEVBQVgsRUFBeEIsQ0FBUDtBQWhJRztBQW1JRCxlQW5JQyxtQkFtSVEsSUFuSVI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQW1JYyxtQkFuSWQsbUZBbUlvQixRQW5JcEI7QUFtSThCLHNCQW5JOUIsbUZBbUl1QyxLQW5JdkM7QUFtSThDLHNCQW5JOUMsbUZBbUl1RCxFQW5JdkQ7QUFtSTJELHVCQW5JM0QsbUZBbUlxRSxTQW5JckU7QUFtSWdGLG9CQW5JaEYsbUZBbUl1RixTQW5JdkY7QUFvSUMsbUJBcElELEdBb0lPLFNBQUssSUFBTCxDQUFVLEtBQVYsSUFBbUIsR0FBbkIsR0FBeUIsU0FBSyxPQUE5QixHQUF3QyxHQXBJL0M7O0FBcUlILG9CQUFJLE9BQU8sUUFBWCxFQUFxQjtBQUNqQiwyQkFBTyxTQUFLLGFBQUwsQ0FBb0IsSUFBcEIsRUFBMEIsTUFBMUIsQ0FBUDtBQUNILGlCQUZELE1BRU87QUFDQyx5QkFERCxHQUNTLFNBQUssS0FBTCxFQURUOztBQUVILDJCQUFPLEdBQVA7QUFDQSwyQkFBTyxTQUFLLFNBQUwsQ0FBZ0IsU0FBSyxNQUFMLENBQWE7QUFDaEMsa0NBQVUsS0FBSyxXQUFMLEVBRHNCO0FBRWhDLGlDQUFTO0FBRnVCLHFCQUFiLEVBR3BCLE1BSG9CLENBQWhCLENBQVA7QUFJQSw4QkFBVTtBQUNOLHdDQUFnQixtQ0FEVjtBQUVOLCtCQUFPLFNBQUssTUFGTjtBQUdOLHFDQUFhLFNBQUssSUFBTCxDQUFXLFNBQUssTUFBTCxDQUFhLElBQWIsQ0FBWCxFQUErQixTQUFLLE1BQUwsQ0FBYSxTQUFLLE1BQWxCLENBQS9CLEVBQTBELFFBQTFEO0FBSFAscUJBQVY7QUFLSDtBQW5KRSx1QkFvSmtCLFNBQUssS0FBTCxDQUFZLEdBQVosRUFBaUIsTUFBakIsRUFBeUIsT0FBekIsRUFBa0MsSUFBbEMsQ0FwSmxCO0FBQUE7QUFvSkMsd0JBcEpEOztBQXFKSCxvQkFBSSxXQUFXLFFBQWY7QUFDSSwwQkFBTSxJQUFJLGFBQUosQ0FBbUIsU0FBSyxFQUFMLEdBQVUsR0FBVixHQUFnQixTQUFLLElBQUwsQ0FBVyxTQUFTLE9BQVQsQ0FBWCxDQUFuQyxDQUFOO0FBREosaUJBRUEsT0FBTyxRQUFQO0FBdkpHO0FBQUE7QUFBQSxLQUFYOztBQTJKQTs7QUFFQSxRQUFJLE9BQU87QUFDUCxjQUFNLE1BREM7QUFFUCxnQkFBUSxNQUZEO0FBR1AscUJBQWEsQ0FBRSxJQUFGLEVBQVEsSUFBUixDQUhOLEVBR3NCO0FBQzdCLG1CQUFXLEdBSko7QUFLUCwyQkFBbUIsSUFMWjtBQU1QLGdCQUFRO0FBQ0osb0JBQVEscUdBREo7QUFFSixtQkFBTztBQUNILDBCQUFVLDJCQURQO0FBRUgsMkJBQVc7QUFGUixhQUZIO0FBTUosbUJBQU8sa0JBTkg7QUFPSixtQkFBTztBQVBILFNBTkQ7QUFlUCxlQUFPO0FBQ0gsc0JBQVU7QUFDTix1QkFBTyxDQUNILE9BREcsRUFFSCxZQUZHLEVBR0gsWUFIRyxFQUlILFNBSkcsRUFLSCxhQUxHLEVBTUgsZ0JBTkcsRUFPSCxZQVBHLEVBUUgsbUJBUkcsRUFTSCx5QkFURztBQURELGFBRFA7QUFjSCx1QkFBVztBQUNQLHdCQUFRLENBQ0osVUFESSxFQUVKLGdCQUZJLEVBR0osWUFISSxFQUlKLHFCQUpJLEVBS0osS0FMSSxFQU1KLE1BTkksRUFPSixhQVBJLEVBUUosaUJBUkksRUFTSixVQVRJLEVBVUosWUFWSSxFQVdKLGNBWEksRUFZSixVQVpJO0FBREQ7QUFkUixTQWZBOztBQStDRCxvQkEvQ0M7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQWdEa0IsU0FBSyxtQkFBTCxFQWhEbEI7QUFBQTtBQWdEQyx3QkFoREQ7QUFpREMsdUJBakRELEdBaURXLFNBQVMsTUFBVCxDQWpEWDtBQWtEQyxzQkFsREQsR0FrRFUsRUFsRFY7O0FBbURILHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksUUFBUSxNQUE1QixFQUFvQyxHQUFwQyxFQUF5QztBQUNqQywwQkFEaUMsR0FDeEIsUUFBUSxDQUFSLENBRHdCO0FBRWpDLHNCQUZpQyxHQUU1QixPQUFPLE1BQVAsQ0FGNEI7QUFHakMsd0JBSGlDLEdBRzFCLE9BQU8sUUFBUCxDQUgwQjtBQUlqQyx5QkFKaUMsR0FJekIsT0FBTyxRQUFQLENBSnlCOztBQUtyQywyQkFBTyxTQUFLLGtCQUFMLENBQXlCLElBQXpCLENBQVA7QUFDQSw0QkFBUSxTQUFLLGtCQUFMLENBQXlCLEtBQXpCLENBQVI7QUFDSSwwQkFQaUMsR0FPeEIsT0FBTyxHQUFQLEdBQWEsS0FQVzs7QUFRckMsMkJBQU8sSUFBUCxDQUFhO0FBQ1QsOEJBQU0sRUFERztBQUVULGtDQUFVLE1BRkQ7QUFHVCxnQ0FBUSxJQUhDO0FBSVQsaUNBQVMsS0FKQTtBQUtULGdDQUFRO0FBTEMscUJBQWI7QUFPSDtBQUNELHVCQUFPLE1BQVA7QUFuRUc7QUFBQTtBQXNFRCxvQkF0RUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQXVFRyxTQUFLLFdBQUwsRUF2RUg7QUFBQTtBQUFBLHVCQXdFaUIsU0FBSyxtQkFBTCxFQXhFakI7QUFBQTtBQXdFQyx1QkF4RUQ7QUF5RUMsc0JBekVELEdBeUVVLEVBQUUsUUFBUSxPQUFWLEVBekVWOztBQTBFSCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFNBQUssVUFBTCxDQUFnQixNQUFwQyxFQUE0QyxHQUE1QyxFQUFpRDtBQUN6Qyw0QkFEeUMsR0FDOUIsU0FBSyxVQUFMLENBQWdCLENBQWhCLENBRDhCO0FBRXpDLHdCQUZ5QyxHQUVsQyxTQUFLLGtCQUFMLENBQXlCLFFBQXpCLENBRmtDO0FBR3pDLDJCQUh5QyxHQUcvQjtBQUNWLGdDQUFRLFNBREU7QUFFVixnQ0FBUSxTQUZFO0FBR1YsaUNBQVM7QUFIQyxxQkFIK0I7O0FBUTdDLHdCQUFJLGVBQWUsT0FBbkIsRUFBNEI7QUFDeEIsNEJBQUksWUFBWSxRQUFRLFdBQVIsQ0FBaEIsRUFBc0M7QUFDbEMsb0NBQVEsTUFBUixJQUFrQixXQUFZLFFBQVEsV0FBUixFQUFxQixRQUFyQixDQUFaLENBQWxCO0FBQ0g7QUFDSjtBQUNELHdCQUFJLFlBQVksT0FBaEIsRUFBeUI7QUFDckIsNEJBQUksWUFBWSxRQUFRLFFBQVIsQ0FBaEIsRUFBbUM7QUFDL0Isb0NBQVEsTUFBUixJQUFrQixXQUFZLFFBQVEsUUFBUixFQUFrQixRQUFsQixDQUFaLENBQWxCO0FBQ0g7QUFDSjtBQUNELDRCQUFRLE9BQVIsSUFBbUIsU0FBSyxHQUFMLENBQVUsUUFBUSxNQUFSLENBQVYsRUFBMkIsUUFBUSxNQUFSLENBQTNCLENBQW5CO0FBQ0EsMkJBQU8sSUFBUCxJQUFlLE9BQWY7QUFDSDtBQUNELHVCQUFPLE1BQVA7QUEvRkc7QUFBQTtBQWtHRCxzQkFsR0MsMEJBa0dlLE1BbEdmO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQWtHdUIsc0JBbEd2QixtRkFrR2dDLEVBbEdoQztBQUFBLHVCQW1HRyxTQUFLLFdBQUwsRUFuR0g7QUFBQTtBQUFBLHVCQW9HbUIsU0FBSyxvQkFBTCxDQUEyQixTQUFLLE1BQUwsQ0FBYTtBQUMxRCwwQkFBTSxTQUFLLFFBQUwsQ0FBZSxNQUFmO0FBRG9ELGlCQUFiLEVBRTlDLE1BRjhDLENBQTNCLENBcEduQjtBQUFBO0FBb0dDLHlCQXBHRDtBQXVHQyx5QkF2R0QsR0F1R2EsU0FBSyxZQUFMLEVBdkdiO0FBd0dDLHNCQXhHRCxHQXdHVTtBQUNULDRCQUFRLEVBREM7QUFFVCw0QkFBUSxFQUZDO0FBR1QsaUNBQWEsU0FISjtBQUlULGdDQUFZLFNBQUssT0FBTCxDQUFjLFNBQWQ7QUFKSCxpQkF4R1Y7QUE4R0MscUJBOUdELEdBOEdTLENBQUUsTUFBRixFQUFVLE1BQVYsQ0E5R1Q7O0FBK0dILHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksTUFBTSxNQUExQixFQUFrQyxHQUFsQyxFQUF1QztBQUMvQix3QkFEK0IsR0FDeEIsTUFBTSxDQUFOLENBRHdCO0FBRS9CLDBCQUYrQixHQUV0QixVQUFVLElBQVYsQ0FGc0I7O0FBR25DLHlCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksT0FBTyxNQUEzQixFQUFtQyxHQUFuQyxFQUF3QztBQUNoQyw2QkFEZ0MsR0FDeEIsT0FBTyxDQUFQLENBRHdCO0FBRWhDLDZCQUZnQyxHQUV4QixXQUFZLE1BQU0sQ0FBTixDQUFaLENBRndCO0FBR2hDLDhCQUhnQyxHQUd2QixXQUFZLE1BQU0sQ0FBTixDQUFaLENBSHVCOztBQUlwQywrQkFBTyxJQUFQLEVBQWEsSUFBYixDQUFtQixDQUFFLEtBQUYsRUFBUyxNQUFULENBQW5CO0FBQ0g7QUFDSjtBQUNELHVCQUFPLE1BQVAsSUFBaUIsU0FBSyxNQUFMLENBQWEsT0FBTyxNQUFQLENBQWIsRUFBNkIsQ0FBN0IsQ0FBakI7QUFDQSx1QkFBTyxNQUFQO0FBMUhHO0FBQUE7QUE2SFAsbUJBN0hPLHVCQTZITSxNQTdITixFQTZIa0M7QUFBQSxnQkFBcEIsTUFBb0IsdUVBQVgsU0FBVzs7QUFDckMsZ0JBQUksWUFBWSxLQUFLLFlBQUwsRUFBaEI7QUFDQSxtQkFBTztBQUNILDZCQUFhLFNBRFY7QUFFSCw0QkFBWSxLQUFLLE9BQUwsQ0FBYyxTQUFkLENBRlQ7QUFHSCx3QkFBUSxXQUFZLE9BQU8sVUFBUCxDQUFaLENBSEw7QUFJSCx1QkFBTyxXQUFZLE9BQU8sU0FBUCxDQUFaLENBSko7QUFLSCx1QkFBTyxXQUFZLE9BQU8sWUFBUCxDQUFaLENBTEo7QUFNSCx1QkFBTyxXQUFZLE9BQU8sV0FBUCxDQUFaLENBTko7QUFPSCx3QkFBUSxTQVBMO0FBUUgsd0JBQVEsU0FSTDtBQVNILHlCQUFTLFNBVE47QUFVSCx5QkFBUyxTQVZOO0FBV0gsd0JBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQVhMO0FBWUgsMEJBQVUsV0FBWSxPQUFPLGVBQVAsQ0FBWixDQVpQO0FBYUgsOEJBQWMsU0FiWDtBQWNILDJCQUFXLFNBZFI7QUFlSCw4QkFBYyxXQUFZLE9BQU8sWUFBUCxDQUFaLENBZlg7QUFnQkgsK0JBQWUsV0FBWSxPQUFPLGFBQVAsQ0FBWixDQWhCWjtBQWlCSCx3QkFBUTtBQWpCTCxhQUFQO0FBbUJILFNBbEpNO0FBb0pELG9CQXBKQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQXFKRyxTQUFLLFdBQUwsRUFySkg7QUFBQTtBQUFBLHVCQXNKaUIsU0FBSyxnQkFBTCxFQXRKakI7QUFBQTtBQXNKQyx1QkF0SkQ7QUF1SkMsc0JBdkpELEdBdUpVLEVBdkpWO0FBd0pDLG1CQXhKRCxHQXdKTyxPQUFPLElBQVAsQ0FBYSxPQUFiLENBeEpQOztBQXlKSCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLElBQUksTUFBeEIsRUFBZ0MsR0FBaEMsRUFBcUM7QUFDN0Isc0JBRDZCLEdBQ3hCLElBQUksQ0FBSixDQUR3QjtBQUFBLGlDQUVQLEdBQUcsS0FBSCxDQUFVLEdBQVYsQ0FGTztBQUFBO0FBRTNCLDBCQUYyQjtBQUVuQiwyQkFGbUI7QUFHN0Isd0JBSDZCLEdBR3RCLE9BQU8sV0FBUCxFQUhzQjtBQUk3Qix5QkFKNkIsR0FJckIsUUFBUSxXQUFSLEVBSnFCOztBQUtqQywyQkFBTyxTQUFLLGtCQUFMLENBQXlCLElBQXpCLENBQVA7QUFDQSw0QkFBUSxTQUFLLGtCQUFMLENBQXlCLEtBQXpCLENBQVI7QUFDSSwwQkFQNkIsR0FPcEIsT0FBTyxHQUFQLEdBQWEsS0FQTztBQVE3QiwwQkFSNkIsR0FRcEIsUUFBUSxFQUFSLENBUm9CO0FBUzdCLDBCQVQ2QixHQVNwQixTQVRvQjs7QUFVakMsd0JBQUksVUFBVSxTQUFLLE9BQW5CO0FBQ0ksaUNBQVMsU0FBSyxPQUFMLENBQWEsTUFBYixDQUFUO0FBREoscUJBRUEsSUFBSSxNQUFNLFNBQUssYUFBZjtBQUNJLGlDQUFTLFNBQUssYUFBTCxDQUFtQixFQUFuQixDQUFUO0FBREoscUJBRUEsT0FBTyxNQUFQLElBQWlCLFNBQUssV0FBTCxDQUFrQixNQUFsQixFQUEwQixNQUExQixDQUFqQjtBQUNIO0FBQ0QsdUJBQU8sTUFBUDtBQXpLRztBQUFBO0FBNEtELG1CQTVLQyx1QkE0S1ksTUE1S1o7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkE2S0csU0FBSyxXQUFMLEVBN0tIO0FBQUE7QUE4S0MsaUJBOUtELEdBOEtLLFNBQUssTUFBTCxDQUFhLE1BQWIsQ0E5S0w7QUFBQSx1QkErS2dCLFNBQUssaUJBQUwsQ0FBd0I7QUFDdkMsMEJBQU0sRUFBRSxJQUFGO0FBRGlDLGlCQUF4QixDQS9LaEI7QUFBQTtBQStLQyxzQkEvS0Q7O0FBa0xILHVCQUFPLFNBQUssV0FBTCxDQUFrQixNQUFsQixFQUEwQixDQUExQixDQUFQO0FBbExHO0FBQUE7QUFxTEQsbUJBckxDLHVCQXFMWSxNQXJMWjtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQXFMb0Isc0JBckxwQixtRkFxTDZCLEVBckw3QjtBQUFBLHVCQXNMRyxTQUFLLFdBQUwsRUF0TEg7QUFBQTtBQXVMSCx1QkFBTyxTQUFLLHVCQUFMLENBQThCLFNBQUssTUFBTCxDQUFhO0FBQzlDLDBCQUFNLFNBQUssUUFBTCxDQUFlLE1BQWY7QUFEd0MsaUJBQWIsRUFFbEMsTUFGa0MsQ0FBOUIsQ0FBUDtBQXZMRztBQUFBO0FBNExELG1CQTVMQyx1QkE0TFksTUE1TFosRUE0TG9CLElBNUxwQixFQTRMMEIsSUE1TDFCLEVBNExnQyxNQTVMaEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQTRMd0MscUJBNUx4QyxtRkE0TGdELFNBNUxoRDtBQTRMMkQsc0JBNUwzRCxtRkE0TG9FLEVBNUxwRTs7QUE2TEgsb0JBQUksUUFBUSxRQUFaO0FBQ0ksMEJBQU0sSUFBSSxhQUFKLENBQW1CLFNBQUssRUFBTCxHQUFVLDJCQUE3QixDQUFOO0FBREosaUJBN0xHLE9BK0xHLFNBQUssV0FBTCxFQS9MSDtBQUFBO0FBZ01DLHNCQWhNRCxHQWdNVSxnQkFBZ0IsU0FBSyxVQUFMLENBQWlCLElBQWpCLENBaE0xQjtBQWlNQyxxQkFqTUQsR0FpTVM7QUFDUixvQ0FBZ0IsU0FBSyxRQUFMLENBQWUsTUFBZixDQURSO0FBRVIsNEJBQVEsS0FGQTtBQUdSLDhCQUFVO0FBSEYsaUJBak1UO0FBQUEsdUJBc01rQixTQUFLLE1BQUwsRUFBYyxTQUFLLE1BQUwsQ0FBYSxLQUFiLEVBQW9CLE1BQXBCLENBQWQsQ0F0TWxCO0FBQUE7QUFzTUMsd0JBdE1EOztBQXVNSCx1QkFBTztBQUNILDRCQUFRLFFBREw7QUFFSCwwQkFBTSxTQUFTLGFBQVQ7QUFGSCxpQkFBUDtBQXZNRztBQUFBO0FBNk1ELG1CQTdNQyx1QkE2TVksRUE3TVo7QUFBQTs7QUFBQTtBQUFBLHVCQThNRyxTQUFLLFdBQUwsRUE5TUg7QUFBQTtBQStNSCx1QkFBTyxTQUFLLHNCQUFMLENBQTZCLEVBQUUsZUFBZSxFQUFqQixFQUE3QixDQUFQO0FBL01HO0FBQUE7QUFrTkQsZUFsTkMsbUJBa05RLElBbE5SO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQWtOYyxtQkFsTmQsbUZBa05vQixRQWxOcEI7QUFrTjhCLHNCQWxOOUIsbUZBa051QyxLQWxOdkM7QUFrTjhDLHNCQWxOOUMsbUZBa051RCxFQWxOdkQ7QUFrTjJELHVCQWxOM0QsbUZBa05xRSxTQWxOckU7QUFrTmdGLG9CQWxOaEYsbUZBa051RixTQWxOdkY7QUFtTkMsc0JBbk5ELEdBbU5XLE9BQU8sU0FBUixHQUFzQixNQUFNLEdBQTVCLEdBQW1DLEVBbk43QztBQW9OQyxtQkFwTkQsR0FvTk8sU0FBSyxJQUFMLENBQVUsS0FBVixFQUFpQixHQUFqQixJQUF3QixTQUFLLE9BQTdCLEdBQXVDLEtBQXZDLEdBQStDLE1BQS9DLEdBQXdELFNBQUssYUFBTCxDQUFvQixJQUFwQixFQUEwQixNQUExQixDQXBOL0Q7QUFxTkMscUJBck5ELEdBcU5TLFNBQUssSUFBTCxDQUFXLE1BQVgsRUFBbUIsU0FBSyxhQUFMLENBQW9CLElBQXBCLENBQW5CLENBck5UOztBQXNOSCxvQkFBSSxPQUFPLFFBQVgsRUFBcUI7QUFDakIsd0JBQUksT0FBTyxJQUFQLENBQWEsS0FBYixFQUFvQixNQUF4QjtBQUNJLCtCQUFPLE1BQU0sU0FBSyxTQUFMLENBQWdCLEtBQWhCLENBQWI7QUFESjtBQUVILGlCQUhELE1BR087QUFDQyx5QkFERCxHQUNTLFNBQUssS0FBTCxFQURUO0FBRUMsMkJBRkQsR0FFVyxFQUFFLFNBQVMsS0FBWCxFQUZYOztBQUdILDJCQUFPLFNBQUssU0FBTCxDQUFnQixTQUFLLE1BQUwsQ0FBYSxPQUFiLEVBQXNCLEtBQXRCLENBQWhCLENBQVA7QUFDSSw2QkFKRCxHQUlhLFNBQUssSUFBTCxDQUFXLFNBQUssTUFBTCxDQUFhLElBQWIsQ0FBWCxFQUErQixTQUFLLE1BQUwsQ0FBYSxTQUFLLE1BQWxCLENBQS9CLEVBQTBELFFBQTFELENBSmI7O0FBS0gsOEJBQVU7QUFDTiwrQkFBTyxTQUFLLE1BRE47QUFFTixnQ0FBUSxTQUZGO0FBR04sd0NBQWdCLG1DQUhWO0FBSU4sMENBQWtCLEtBQUssTUFBTCxDQUFZLFFBQVo7QUFKWixxQkFBVjtBQU1IO0FBcE9FLHVCQXFPa0IsU0FBSyxLQUFMLENBQVksR0FBWixFQUFpQixNQUFqQixFQUF5QixPQUF6QixFQUFrQyxJQUFsQyxDQXJPbEI7QUFBQTtBQXFPQyx3QkFyT0Q7O0FBc09ILG9CQUFJLFlBQVksUUFBaEI7QUFDSSx3QkFBSSxTQUFTLFFBQVQsS0FBc0IsTUFBMUI7QUFDSSw4QkFBTSxJQUFJLGFBQUosQ0FBbUIsU0FBSyxFQUFMLEdBQVUsR0FBVixHQUFnQixTQUFLLElBQUwsQ0FBVyxRQUFYLENBQW5DLENBQU47QUFESjtBQURKLGlCQUdBLE9BQU8sUUFBUDtBQXpPRztBQUFBO0FBQUEsS0FBWDs7QUE2T0E7O0FBRUEsUUFBSSxTQUFTOztBQUVULGNBQU0sUUFGRztBQUdULGdCQUFRLFVBSEM7QUFJVCxxQkFBYSxJQUpKLEVBSVU7QUFDbkIscUJBQWEsSUFMSjtBQU1ULDJCQUFtQixJQU5WO0FBT1QsZ0JBQVE7QUFDSixvQkFBUSxxR0FESjtBQUVKLG1CQUFPLHNCQUZIO0FBR0osbUJBQU8sa0JBSEg7QUFJSixtQkFBTztBQUpILFNBUEM7QUFhVCxlQUFPO0FBQ0gsc0JBQVU7QUFDTix1QkFBTyxDQUNILEVBREcsRUFDQztBQUNKLHlCQUZHLEVBR0gsWUFIRyxFQUlILFdBSkcsRUFLSCxTQUxHLEVBTUgsT0FORyxFQU9ILGNBUEc7QUFERCxhQURQO0FBWUgsdUJBQVc7QUFDUCx3QkFBUSxDQUNKLFNBREksRUFFSixRQUZJLEVBR0osV0FISSxFQUlKLFNBSkksRUFLSixRQUxJLEVBTUosU0FOSSxFQU9KLFdBUEksRUFRSixTQVJJLEVBU0osY0FUSSxFQVVKLFlBVkksRUFXSixhQVhJLEVBWUosZ0JBWkksRUFhSixjQWJJLEVBY0osa0JBZEksRUFlSixpQkFmSSxFQWdCSixlQWhCSSxFQWlCSixnQkFqQkksRUFrQkosT0FsQkksRUFtQkosWUFuQkksRUFvQkosb0JBcEJJO0FBREQ7QUFaUixTQWJFOztBQW1ESCxvQkFuREc7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQW9EZSxTQUFLLGdCQUFMLEVBcERmO0FBQUE7QUFvREQsdUJBcERDO0FBcURELG9CQXJEQyxHQXFETSxPQUFPLElBQVAsQ0FBYSxPQUFiLENBckROO0FBc0RELHNCQXREQyxHQXNEUSxFQXREUjs7QUF1REwscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxLQUFLLE1BQXpCLEVBQWlDLEdBQWpDLEVBQXNDO0FBQzlCLDBCQUQ4QixHQUNyQixRQUFRLEtBQUssQ0FBTCxDQUFSLENBRHFCO0FBRTlCLHNCQUY4QixHQUV6QixPQUFPLFlBQVAsRUFBcUIsUUFBckIsRUFGeUI7QUFHOUIsd0JBSDhCLEdBR3ZCLE9BQU8sa0JBQVAsQ0FIdUI7QUFJOUIseUJBSjhCLEdBSXRCLE9BQU8sb0JBQVAsQ0FKc0I7O0FBS2xDLDJCQUFPLFNBQUssa0JBQUwsQ0FBeUIsSUFBekIsQ0FBUDtBQUNBLDRCQUFRLFNBQUssa0JBQUwsQ0FBeUIsS0FBekIsQ0FBUjtBQUNJLDBCQVA4QixHQU9yQixPQUFPLEdBQVAsR0FBYSxLQVBROztBQVFsQywyQkFBTyxJQUFQLENBQWE7QUFDVCw4QkFBTSxFQURHO0FBRVQsa0NBQVUsTUFGRDtBQUdULGdDQUFRLElBSEM7QUFJVCxpQ0FBUyxLQUpBO0FBS1QsZ0NBQVE7QUFMQyxxQkFBYjtBQU9IO0FBQ0QsdUJBQU8sTUFBUDtBQXZFSztBQUFBO0FBMEVULDBCQTFFUyw4QkEwRVcsUUExRVgsRUEwRXFCO0FBQzFCO0FBQ0EsZ0JBQUksWUFBWSxLQUFoQixFQUNJLE9BQU8sTUFBUDtBQUNKLGdCQUFJLFlBQVksS0FBaEIsRUFDSSxPQUFPLE1BQVA7QUFDSixtQkFBTyxRQUFQO0FBQ0gsU0FqRlE7QUFtRkgsb0JBbkZHO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBb0ZDLFNBQUssV0FBTCxFQXBGRDtBQUFBO0FBQUEsdUJBcUZnQixTQUFLLGtCQUFMLEVBckZoQjtBQUFBO0FBcUZELHdCQXJGQztBQXNGRCx1QkF0RkMsR0FzRlMsU0FBUyxTQUFULENBdEZUO0FBdUZELHNCQXZGQyxHQXVGUSxFQUFFLFFBQVEsT0FBVixFQXZGUjtBQXdGRCwwQkF4RkMsR0F3RlksT0FBTyxJQUFQLENBQWEsT0FBYixDQXhGWjs7QUF5RkwscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxXQUFXLE1BQS9CLEVBQXVDLEdBQXZDLEVBQTRDO0FBQ3BDLDRCQURvQyxHQUN6QixXQUFXLENBQVgsQ0FEeUI7QUFFcEMsd0JBRm9DLEdBRTdCLFNBQUssa0JBQUwsQ0FBeUIsUUFBekIsQ0FGNkI7QUFHcEMsMkJBSG9DLEdBRzFCO0FBQ1YsZ0NBQVEsV0FBWSxRQUFRLFFBQVIsRUFBa0IsV0FBbEIsQ0FBWixDQURFO0FBRVYsZ0NBQVEsU0FGRTtBQUdWLGlDQUFTLFdBQVksUUFBUSxRQUFSLEVBQWtCLE9BQWxCLENBQVo7QUFIQyxxQkFIMEI7O0FBUXhDLDRCQUFRLE1BQVIsSUFBa0IsUUFBUSxPQUFSLElBQW1CLFFBQVEsTUFBUixDQUFyQztBQUNBLDJCQUFPLElBQVAsSUFBZSxPQUFmO0FBQ0g7QUFDRCx1QkFBTyxNQUFQO0FBcEdLO0FBQUE7QUF1R0gsc0JBdkdHLDBCQXVHYSxNQXZHYjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUF1R3FCLHNCQXZHckIsbUZBdUc4QixFQXZHOUI7QUFBQSx1QkF3R0MsU0FBSyxXQUFMLEVBeEdEO0FBQUE7QUFBQSx1QkF5R2lCLFNBQUssa0JBQUwsQ0FBeUIsU0FBSyxNQUFMLENBQWE7QUFDeEQsK0JBQVcsU0FBSyxRQUFMLENBQWUsTUFBZjtBQUQ2QyxpQkFBYixFQUU1QyxNQUY0QyxDQUF6QixDQXpHakI7QUFBQTtBQXlHRCx5QkF6R0M7QUE0R0QseUJBNUdDLEdBNEdXLFNBQUssWUFBTCxFQTVHWDtBQTZHRCxzQkE3R0MsR0E2R1E7QUFDVCw0QkFBUSxFQURDO0FBRVQsNEJBQVEsRUFGQztBQUdULGlDQUFhLFNBSEo7QUFJVCxnQ0FBWSxTQUFLLE9BQUwsQ0FBYyxTQUFkO0FBSkgsaUJBN0dSO0FBbUhELHFCQW5IQyxHQW1ITyxDQUFFLE1BQUYsRUFBVSxNQUFWLENBbkhQOztBQW9ITCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLE1BQU0sTUFBMUIsRUFBa0MsR0FBbEMsRUFBdUM7QUFDL0Isd0JBRCtCLEdBQ3hCLE1BQU0sQ0FBTixDQUR3QjtBQUUvQiwwQkFGK0IsR0FFdEIsVUFBVSxJQUFWLENBRnNCOztBQUduQyx5QkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLE9BQU8sTUFBM0IsRUFBbUMsR0FBbkMsRUFBd0M7QUFDaEMsNkJBRGdDLEdBQ3hCLE9BQU8sQ0FBUCxDQUR3QjtBQUVoQyw2QkFGZ0MsR0FFeEIsV0FBWSxNQUFNLENBQU4sQ0FBWixDQUZ3QjtBQUdoQyw4QkFIZ0MsR0FHdkIsV0FBWSxNQUFNLENBQU4sQ0FBWixDQUh1Qjs7QUFJcEMsK0JBQU8sSUFBUCxFQUFhLElBQWIsQ0FBbUIsQ0FBRSxLQUFGLEVBQVMsTUFBVCxDQUFuQjtBQUNIO0FBQ0o7QUFDRCx1QkFBTyxNQUFQO0FBOUhLO0FBQUE7QUFpSVQsbUJBaklTLHVCQWlJSSxNQWpJSixFQWlJWSxNQWpJWixFQWlJb0I7QUFDekIsZ0JBQUksWUFBWSxLQUFLLFlBQUwsRUFBaEI7QUFDQSxtQkFBTztBQUNILDZCQUFhLFNBRFY7QUFFSCw0QkFBWSxLQUFLLE9BQUwsQ0FBYyxTQUFkLENBRlQ7QUFHSCx3QkFBUSxTQUhMO0FBSUgsdUJBQU8sU0FKSjtBQUtILHVCQUFPLFdBQVksT0FBTyxXQUFQLEVBQW9CLE1BQXBCLEVBQTRCLFNBQTVCLENBQVosQ0FMSjtBQU1ILHVCQUFPLFdBQVksT0FBTyxXQUFQLEVBQW9CLE1BQXBCLEVBQTRCLFNBQTVCLENBQVosQ0FOSjtBQU9ILHdCQUFRLFNBUEw7QUFRSCx3QkFBUSxTQVJMO0FBU0gseUJBQVMsU0FUTjtBQVVILHlCQUFTLFNBVk47QUFXSCx3QkFBUSxXQUFZLE9BQU8sWUFBUCxDQUFaLENBWEw7QUFZSCwwQkFBVSxXQUFZLE9BQU8sUUFBUCxDQUFaLENBWlA7QUFhSCw4QkFBYyxTQWJYO0FBY0gsMkJBQVcsU0FkUjtBQWVILDhCQUFjLFNBZlg7QUFnQkgsK0JBQWUsV0FBWSxPQUFPLGdCQUFQLENBQVosQ0FoQlo7QUFpQkgsd0JBQVE7QUFqQkwsYUFBUDtBQW1CSCxTQXRKUTtBQXdKSCxvQkF4Skc7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkF5SkMsU0FBSyxXQUFMLEVBekpEO0FBQUE7QUFBQSx1QkEwSmUsU0FBSyxTQUFMLEVBMUpmO0FBQUE7QUEwSkQsdUJBMUpDO0FBMkpELHNCQTNKQyxHQTJKUSxFQTNKUjtBQTRKRCxtQkE1SkMsR0E0SkssT0FBTyxJQUFQLENBQWEsT0FBYixDQTVKTDs7QUE2SkwscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxJQUFJLE1BQXhCLEVBQWdDLEdBQWhDLEVBQXFDO0FBQzdCLHNCQUQ2QixHQUN4QixJQUFJLENBQUosQ0FEd0I7QUFFN0IsMEJBRjZCLEdBRXBCLFFBQVEsRUFBUixDQUZvQjtBQUc3QiwwQkFINkIsR0FHcEIsU0FBSyxhQUFMLENBQW1CLEVBQW5CLENBSG9CO0FBSTdCLDBCQUo2QixHQUlwQixPQUFPLFFBQVAsQ0FKb0I7O0FBS2pDLDJCQUFPLE1BQVAsSUFBaUIsU0FBSyxXQUFMLENBQWtCLE1BQWxCLEVBQTBCLE1BQTFCLENBQWpCO0FBQ0g7QUFDRCx1QkFBTyxNQUFQO0FBcEtLO0FBQUE7QUF1S0gsbUJBdktHLHVCQXVLVSxNQXZLVjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkF3S0MsU0FBSyxXQUFMLEVBeEtEO0FBQUE7QUF5S0QsaUJBektDLEdBeUtHLFNBQUssTUFBTCxDQUFhLE1BQWIsQ0F6S0g7QUFBQSx1QkEwS2UsU0FBSyxTQUFMLENBQWdCLEVBQUUsV0FBVyxFQUFFLElBQUYsQ0FBYixFQUFoQixDQTFLZjtBQUFBO0FBMEtELHVCQTFLQztBQTJLRCxrQkEzS0MsR0EyS0ksRUFBRSxJQUFGLEVBQVEsUUFBUixFQTNLSjtBQTRLRCxzQkE1S0MsR0E0S1EsUUFBUSxFQUFSLENBNUtSOztBQTZLTCx1QkFBTyxTQUFLLFdBQUwsQ0FBa0IsTUFBbEIsRUFBMEIsQ0FBMUIsQ0FBUDtBQTdLSztBQUFBO0FBZ0xILG1CQWhMRyx1QkFnTFUsTUFoTFY7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFnTGtCLHNCQWhMbEIsbUZBZ0wyQixFQWhMM0I7QUFBQSx1QkFpTEMsU0FBSyxXQUFMLEVBakxEO0FBQUE7QUFrTEwsdUJBQU8sU0FBSyxjQUFMLENBQXFCLFNBQUssTUFBTCxDQUFhO0FBQ3JDLCtCQUFXLFNBQUssUUFBTCxDQUFlLE1BQWY7QUFEMEIsaUJBQWIsRUFFekIsTUFGeUIsQ0FBckIsQ0FBUDtBQWxMSztBQUFBO0FBdUxILG1CQXZMRyx1QkF1TFUsTUF2TFYsRUF1TGtCLElBdkxsQixFQXVMd0IsSUF2THhCLEVBdUw4QixNQXZMOUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBdUxzQyxxQkF2THRDLG1GQXVMOEMsU0F2TDlDO0FBdUx5RCxzQkF2THpELG1GQXVMa0UsRUF2TGxFO0FBQUEsdUJBd0xDLFNBQUssV0FBTCxFQXhMRDtBQUFBO0FBQUEsdUJBeUxnQixTQUFLLGdCQUFMLENBQXVCLFNBQUssTUFBTCxDQUFhO0FBQ3JELCtCQUFXLFNBQUssUUFBTCxDQUFlLE1BQWYsQ0FEMEM7QUFFckQsNEJBQVEsSUFGNkM7QUFHckQsOEJBQVUsTUFIMkM7QUFJckQsNEJBQVE7QUFKNkMsaUJBQWIsRUFLekMsTUFMeUMsQ0FBdkIsQ0F6TGhCO0FBQUE7QUF5TEQsd0JBekxDOztBQStMTCx1QkFBTztBQUNILDRCQUFRLFFBREw7QUFFSCwwQkFBTSxTQUFTLFVBQVQsRUFBcUIsUUFBckI7QUFGSCxpQkFBUDtBQS9MSztBQUFBO0FBcU1ILG1CQXJNRyx1QkFxTVUsRUFyTVY7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBc01DLFNBQUssV0FBTCxFQXRNRDtBQUFBO0FBdU1ELHVCQXZNQyxHQXVNUyxTQXZNVCxFQXVNb0I7O0FBQ3pCLHVCQUFPLFNBQUssaUJBQUwsQ0FBd0I7QUFDM0IsZ0NBQVksRUFEZTtBQUUzQiwrQkFBVztBQUZnQixpQkFBeEIsQ0FBUDtBQXhNSztBQUFBO0FBOE1ILGVBOU1HLG1CQThNTSxJQTlNTjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBOE1ZLG1CQTlNWixtRkE4TWtCLFFBOU1sQjtBQThNNEIsc0JBOU01QixtRkE4TXFDLEtBOU1yQztBQThNNEMsc0JBOU01QyxtRkE4TXFELEVBOU1yRDtBQThNeUQsdUJBOU16RCxtRkE4TW1FLFNBOU1uRTtBQThNOEUsb0JBOU05RSxtRkE4TXFGLFNBOU1yRjtBQStNRCxtQkEvTUMsR0ErTUssU0FBSyxJQUFMLENBQVUsS0FBVixJQUFtQixHQS9NeEI7O0FBZ05MLG9CQUFJLElBQUo7QUFDSSwyQkFBTyxPQUFPLEdBQWQ7QUFESixpQkFFQSxJQUFJLE9BQU8sSUFBUCxDQUFhLE1BQWIsRUFBcUIsTUFBekI7QUFDSSwyQkFBTyxNQUFNLFNBQUssU0FBTCxDQUFnQixNQUFoQixDQUFiO0FBREosaUJBRUEsSUFBSSxPQUFPLFNBQVgsRUFBc0I7QUFDZCx5QkFEYyxHQUNOLFNBQUssS0FBTCxFQURNO0FBRWQsd0JBRmMsR0FFUCxTQUFLLE1BQUwsR0FBYyxNQUFNLFFBQU4sRUFBZCxHQUFrQyxTQUFLLE1BRmhDO0FBR2QsNkJBSGMsR0FHRixTQUFLLElBQUwsQ0FBVyxTQUFLLE1BQUwsQ0FBYSxJQUFiLENBQVgsRUFBK0IsUUFBL0IsQ0FIRTs7QUFJbEIsMkJBQU8sU0FBSyxTQUFMLENBQWdCLFNBQUssTUFBTCxDQUFhO0FBQ2hDLCtCQUFPLFNBQUssTUFEb0I7QUFFaEMsaUNBQVMsS0FGdUI7QUFHaEMscUNBQWE7QUFDYjtBQUpnQyxxQkFBYixFQUtwQixNQUxvQixDQUFoQixDQUFQO0FBTUEsOEJBQVU7QUFDTix3Q0FBZ0IsbUNBRFY7QUFFTiwwQ0FBa0IsS0FBSztBQUZqQixxQkFBVjtBQUlIO0FBbE9JLHVCQW1PZ0IsU0FBSyxLQUFMLENBQVksR0FBWixFQUFpQixNQUFqQixFQUF5QixPQUF6QixFQUFrQyxJQUFsQyxDQW5PaEI7QUFBQTtBQW1PRCx3QkFuT0M7O0FBb09MLG9CQUFJLE9BQU8sUUFBWDtBQUNJLDJCQUFPLFFBQVA7QUFESjtBQUFBLDZCQUVJLGFBQWEsUUFGakI7O0FBR0ksa0NBQUksU0FBUyxTQUFULENBQUo7QUFDSSwrQkFBTyxRQUFQO0FBREo7QUFFSiw4QkFBTSxJQUFJLGFBQUosQ0FBbUIsU0FBSyxFQUFMLEdBQVUsR0FBVixHQUFnQixTQUFLLElBQUwsQ0FBVyxRQUFYLENBQW5DLENBQU47QUFGSTtBQUhKO0FBcE9LO0FBQUE7QUFBQSxLQUFiOztBQTZPQTs7QUFFQSxRQUFJLE9BQU87O0FBRVAsY0FBTSxNQUZDO0FBR1AsZ0JBQVEsT0FIRDtBQUlQLHFCQUFhLENBQUUsSUFBRixFQUFRLElBQVIsQ0FKTjtBQUtQLHFCQUFhLElBTE47QUFNUCxnQkFBUTtBQUNKLG9CQUFRLHFHQURKO0FBRUosbUJBQU87QUFDSCwyQkFBVyxxQkFEUjtBQUVILDBCQUFVLGtDQUZQO0FBR0gsMkJBQVc7QUFIUixhQUZIO0FBT0osbUJBQU8sbUJBUEg7QUFRSixtQkFBTztBQVJILFNBTkQ7QUFnQlAsZUFBTztBQUNILHVCQUFXO0FBQ1AsdUJBQU8sQ0FDSCxXQURHLEVBRUgsVUFGRyxFQUdILE9BSEcsRUFJSCxRQUpHLEVBS0gsZUFMRztBQURBLGFBRFI7QUFVSCxzQkFBVTtBQUNOLHVCQUFPLENBQ0gscUJBREcsRUFFSCxlQUZHLEVBR0gsU0FIRyxFQUlILGlCQUpHLEVBS0gsV0FMRztBQURELGFBVlA7QUFtQkgsdUJBQVc7QUFDUCx1QkFBTyxDQUNILFVBREcsRUFFSCxRQUZHLEVBR0gsWUFIRyxFQUlILGFBSkcsRUFLSCxlQUxHLEVBTUgsVUFORyxFQU9ILGlCQVBHLEVBUUgsVUFSRyxFQVNILFdBVEc7QUFEQTtBQW5CUixTQWhCQTs7QUFrREQsb0JBbERDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBbURpQixTQUFLLGdCQUFMLEVBbkRqQjtBQUFBO0FBbURDLHVCQW5ERDtBQW9EQyxzQkFwREQsR0FvRFUsRUFwRFY7O0FBcURILHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksUUFBUSxRQUFSLEVBQWtCLE1BQXRDLEVBQThDLEdBQTlDLEVBQW1EO0FBQzNDLDBCQUQyQyxHQUNsQyxRQUFRLFFBQVIsRUFBa0IsQ0FBbEIsQ0FEa0M7QUFFM0Msc0JBRjJDLEdBRXRDLE9BQU8sWUFBUCxDQUZzQztBQUczQyx3QkFIMkMsR0FHcEMsT0FBTyxnQkFBUCxDQUhvQztBQUkzQyx5QkFKMkMsR0FJbkMsT0FBTyxjQUFQLENBSm1DO0FBSzNDLDBCQUwyQyxHQUtsQyxPQUFPLEdBQVAsR0FBYSxLQUxxQjs7QUFNL0MsMkJBQU8sSUFBUCxDQUFhO0FBQ1QsOEJBQU0sRUFERztBQUVULGtDQUFVLE1BRkQ7QUFHVCxnQ0FBUSxJQUhDO0FBSVQsaUNBQVMsS0FKQTtBQUtULGdDQUFRO0FBTEMscUJBQWI7QUFPSDtBQUNELHVCQUFPLE1BQVA7QUFuRUc7QUFBQTtBQXNFRCxvQkF0RUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBdUVHLFNBQUssV0FBTCxFQXZFSDtBQUFBO0FBQUEsdUJBd0VrQixTQUFLLGtCQUFMLEVBeEVsQjtBQUFBO0FBd0VDLHdCQXhFRDtBQXlFQyx3QkF6RUQsR0F5RVksU0FBUyxRQUFULENBekVaO0FBMEVDLHNCQTFFRCxHQTBFVSxFQUFFLFFBQVEsUUFBVixFQTFFVjs7QUEyRUgscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxTQUFTLE1BQTdCLEVBQXFDLEdBQXJDLEVBQTBDO0FBQ2xDLDJCQURrQyxHQUN4QixTQUFTLENBQVQsQ0FEd0I7QUFFbEMsNEJBRmtDLEdBRXZCLFFBQVEsVUFBUixDQUZ1QjtBQUdsQywyQkFIa0MsR0FHeEI7QUFDVixnQ0FBUSxRQUFRLFdBQVIsQ0FERTtBQUVWLGdDQUFRLFFBQVEsU0FBUixDQUZFO0FBR1YsaUNBQVMsUUFBUSxTQUFSO0FBSEMscUJBSHdCOztBQVF0QywyQkFBTyxRQUFQLElBQW1CLE9BQW5CO0FBQ0g7QUFDRCx1QkFBTyxNQUFQO0FBckZHO0FBQUE7QUF3RkQsc0JBeEZDLDBCQXdGZSxNQXhGZjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUF3RnVCLHNCQXhGdkIsbUZBd0ZnQyxFQXhGaEM7QUFBQSx1QkF5RkcsU0FBSyxXQUFMLEVBekZIO0FBQUE7QUFBQSx1QkEwRmtCLFNBQUssa0JBQUwsQ0FBeUIsU0FBSyxNQUFMLENBQWE7QUFDdkQsOEJBQVUsU0FBSyxRQUFMLENBQWUsTUFBZixDQUQ2QztBQUV2RCw0QkFBUSxNQUYrQztBQUd2RCw2QkFBUztBQUg4QyxpQkFBYixFQUkzQyxNQUoyQyxDQUF6QixDQTFGbEI7QUFBQTtBQTBGQyx3QkExRkQ7QUErRkMseUJBL0ZELEdBK0ZhLFNBQVMsUUFBVCxDQS9GYjtBQWdHQyx5QkFoR0QsR0FnR2EsU0FBSyxZQUFMLEVBaEdiO0FBaUdDLHNCQWpHRCxHQWlHVTtBQUNULDRCQUFRLEVBREM7QUFFVCw0QkFBUSxFQUZDO0FBR1QsaUNBQWEsU0FISjtBQUlULGdDQUFZLFNBQUssT0FBTCxDQUFjLFNBQWQ7QUFKSCxpQkFqR1Y7QUF1R0MscUJBdkdELEdBdUdTLEVBQUUsUUFBUSxLQUFWLEVBQWlCLFFBQVEsTUFBekIsRUF2R1Q7QUF3R0Msb0JBeEdELEdBd0dRLE9BQU8sSUFBUCxDQUFhLEtBQWIsQ0F4R1I7O0FBeUdILHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksS0FBSyxNQUF6QixFQUFpQyxHQUFqQyxFQUFzQztBQUM5Qix1QkFEOEIsR0FDeEIsS0FBSyxDQUFMLENBRHdCO0FBRTlCLHdCQUY4QixHQUV2QixNQUFNLEdBQU4sQ0FGdUI7QUFHOUIsMEJBSDhCLEdBR3JCLFVBQVUsSUFBVixDQUhxQjs7QUFJbEMseUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxPQUFPLE1BQTNCLEVBQW1DLEdBQW5DLEVBQXdDO0FBQ2hDLDZCQURnQyxHQUN4QixPQUFPLENBQVAsQ0FEd0I7QUFFaEMsNkJBRmdDLEdBRXhCLFdBQVksTUFBTSxNQUFOLENBQVosQ0FGd0I7QUFHaEMsOEJBSGdDLEdBR3ZCLFdBQVksTUFBTSxVQUFOLENBQVosQ0FIdUI7O0FBSXBDLCtCQUFPLEdBQVAsRUFBWSxJQUFaLENBQWtCLENBQUUsS0FBRixFQUFTLE1BQVQsQ0FBbEI7QUFDSDtBQUNKO0FBQ0QsdUJBQU8sTUFBUDtBQXBIRztBQUFBO0FBdUhQLG1CQXZITyx1QkF1SE0sTUF2SE4sRUF1SGMsTUF2SGQsRUF1SHNCO0FBQ3pCLGdCQUFJLFlBQVksT0FBTyxTQUFQLElBQW9CLElBQXBDO0FBQ0EsbUJBQU87QUFDSCw2QkFBYSxTQURWO0FBRUgsNEJBQVksS0FBSyxPQUFMLENBQWMsU0FBZCxDQUZUO0FBR0gsd0JBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQUhMO0FBSUgsdUJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQUpKO0FBS0gsdUJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQUxKO0FBTUgsdUJBQU8sV0FBWSxPQUFPLE1BQVAsQ0FBWixDQU5KO0FBT0gsd0JBQVEsU0FQTDtBQVFILHdCQUFRLFNBUkw7QUFTSCx5QkFBUyxTQVROO0FBVUgseUJBQVMsU0FWTjtBQVdILHdCQUFRLFdBQVksT0FBTyxXQUFQLENBQVosQ0FYTDtBQVlILDBCQUFVLFNBWlA7QUFhSCw4QkFBYyxTQWJYO0FBY0gsMkJBQVcsV0FBWSxPQUFPLEtBQVAsQ0FBWixDQWRSO0FBZUgsOEJBQWMsU0FmWDtBQWdCSCwrQkFBZSxXQUFZLE9BQU8sWUFBUCxDQUFaLENBaEJaO0FBaUJILHdCQUFRO0FBakJMLGFBQVA7QUFtQkgsU0E1SU07QUE4SUQsbUJBOUlDLHVCQThJWSxNQTlJWjtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBK0lHLFNBQUssV0FBTCxFQS9JSDtBQUFBO0FBZ0pDLGlCQWhKRCxHQWdKSyxTQUFLLE1BQUwsQ0FBYSxNQUFiLENBaEpMO0FBQUEsdUJBaUprQixTQUFLLGdCQUFMLENBQXVCO0FBQ3hDLDhCQUFVLEVBQUUsSUFBRixFQUFRLFdBQVI7QUFEOEIsaUJBQXZCLENBakpsQjtBQUFBO0FBaUpDLHdCQWpKRDtBQW9KQyxzQkFwSkQsR0FvSlUsU0FBUyxRQUFULENBcEpWOztBQXFKSCx1QkFBTyxTQUFLLFdBQUwsQ0FBa0IsTUFBbEIsRUFBMEIsQ0FBMUIsQ0FBUDtBQXJKRztBQUFBO0FBd0pELG1CQXhKQyx1QkF3SlksTUF4Slo7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUF3Sm9CLHNCQXhKcEIsbUZBd0o2QixFQXhKN0I7QUFBQSx1QkF5SkcsU0FBSyxXQUFMLEVBekpIO0FBQUE7QUEwSkgsdUJBQU8sU0FBSyxzQkFBTCxDQUE2QixTQUFLLE1BQUwsQ0FBYTtBQUM3Qyw4QkFBVSxTQUFLLFFBQUwsQ0FBZSxNQUFmLENBRG1DO0FBRTdDLDRCQUFRLE1BRnFDO0FBRzdDLDZCQUFTO0FBSG9DLGlCQUFiLEVBSWpDLE1BSmlDLENBQTdCLENBQVA7QUExSkc7QUFBQTtBQWlLRCxtQkFqS0MsdUJBaUtZLE1BaktaLEVBaUtvQixJQWpLcEIsRUFpSzBCLElBaksxQixFQWlLZ0MsTUFqS2hDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBaUt3QyxxQkFqS3hDLG1GQWlLZ0QsU0FqS2hEO0FBaUsyRCxzQkFqSzNELG1GQWlLb0UsRUFqS3BFO0FBQUEsdUJBa0tHLFNBQUssV0FBTCxFQWxLSDtBQUFBO0FBbUtDLHNCQW5LRCxHQW1LVSxlQUFlLFNBQUssVUFBTCxDQUFpQixJQUFqQixDQUFmLEdBQXdDLElBbktsRDtBQUFBLHVCQW9La0IsU0FBSyxNQUFMLEVBQWMsU0FBSyxNQUFMLENBQWE7QUFDNUMsOEJBQVUsU0FBSyxRQUFMLENBQWUsTUFBZixDQURrQztBQUU1QyxnQ0FBWSxNQUZnQztBQUc1Qyw0QkFBUTtBQUhvQyxpQkFBYixFQUloQyxNQUpnQyxDQUFkLENBcEtsQjtBQUFBO0FBb0tDLHdCQXBLRDs7QUF5S0gsdUJBQU87QUFDSCw0QkFBUSxRQURMO0FBRUgsMEJBQU0sU0FBUyxRQUFULEVBQW1CLE1BQW5CO0FBRkgsaUJBQVA7QUF6S0c7QUFBQTtBQStLRCxtQkEvS0MsdUJBK0tZLEVBL0taO0FBQUE7O0FBQUE7QUFBQSx1QkFnTEcsU0FBSyxXQUFMLEVBaExIO0FBQUE7QUFpTEgsdUJBQU8sU0FBSyxnQkFBTCxDQUF1QixFQUFFLFFBQVEsRUFBVixFQUF2QixDQUFQO0FBakxHO0FBQUE7QUFvTEQsZUFwTEMsbUJBb0xRLElBcExSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBb0xjLG1CQXBMZCxtRkFvTG9CLFFBcExwQjtBQW9MOEIsc0JBcEw5QixtRkFvTHVDLEtBcEx2QztBQW9MOEMsc0JBcEw5QyxtRkFvTHVELEVBcEx2RDtBQW9MMkQsdUJBcEwzRCxtRkFvTHFFLFNBcExyRTtBQW9MZ0Ysb0JBcExoRixtRkFvTHVGLFNBcEx2RjtBQXFMQyxtQkFyTEQsR0FxTE8sU0FBSyxJQUFMLENBQVUsS0FBVixFQUFpQixHQUFqQixDQXJMUDs7QUFzTEgsb0JBQUksT0FBTyxTQUFYLEVBQXNCO0FBQ2QseUJBRGMsR0FDTixTQUFLLEtBQUwsR0FBYyxRQUFkLEVBRE07QUFFZCx5QkFGYyxHQUVOLFNBQUssT0FBTCxDQUFjLFNBQUssTUFBTCxDQUFhO0FBQ25DLDZCQUFLLElBRDhCO0FBRW5DLGtDQUFVLFNBQUssTUFGb0I7QUFHbkMsaUNBQVM7QUFIMEIscUJBQWIsRUFJdkIsTUFKdUIsQ0FBZCxDQUZNOztBQU9sQiwyQkFBTyxNQUFNLFNBQUssU0FBTCxDQUFnQixLQUFoQixDQUFiO0FBQ0EsOEJBQVUsRUFBRSxXQUFXLFNBQUssSUFBTCxDQUFXLFNBQUssTUFBTCxDQUFhLEdBQWIsQ0FBWCxFQUE4QixTQUFLLE1BQUwsQ0FBYSxTQUFLLE1BQWxCLENBQTlCLEVBQXlELFFBQXpELENBQWIsRUFBVjtBQUNILGlCQVREO0FBU08sd0JBQUksT0FBTyxRQUFYLEVBQXFCO0FBQ3hCLCtCQUFPLE1BQU0sU0FBSyxTQUFMLENBQWdCLFNBQUssTUFBTCxDQUFhO0FBQ3RDLGlDQUFLLFFBQVE7QUFEeUIseUJBQWIsRUFFMUIsTUFGMEIsQ0FBaEIsQ0FBYjtBQUdILHFCQUpNLE1BSUE7QUFDSCwrQkFBTyxNQUFNLFNBQUssYUFBTCxDQUFvQixJQUFwQixFQUEwQixNQUExQixDQUFOLEdBQTBDLE9BQWpEO0FBQ0g7QUFmRCxpQkF0TEcsT0FzTWtCLFNBQUssS0FBTCxDQUFZLEdBQVosRUFBaUIsTUFBakIsRUFBeUIsT0FBekIsRUFBa0MsSUFBbEMsQ0F0TWxCO0FBQUE7QUFzTUMsd0JBdE1EOztBQXVNSCxvQkFBSSxPQUFPLFNBQVg7QUFDSSwyQkFBTyxRQUFQO0FBREo7QUFBQSw2QkFFSSxhQUFhLFFBRmpCOztBQUdJLGtDQUFJLFNBQVMsU0FBVCxDQUFKO0FBQ0ksK0JBQU8sUUFBUDtBQURKO0FBRUosOEJBQU0sSUFBSSxhQUFKLENBQW1CLFNBQUssRUFBTCxHQUFVLEdBQVYsR0FBZ0IsU0FBSyxJQUFMLENBQVcsUUFBWCxDQUFuQyxDQUFOO0FBRkk7QUFISjtBQXZNRztBQUFBO0FBQUEsS0FBWDs7QUFnTkE7O0FBRUEsUUFBSSxNQUFNOztBQUVOLGNBQU0sS0FGQTtBQUdOLGdCQUFRLFFBSEY7QUFJTixxQkFBYSxDQUFFLElBQUYsRUFBUSxJQUFSLEVBQWMsSUFBZCxFQUFvQixJQUFwQixDQUpQO0FBS04scUJBQWEsSUFMUDtBQU1OLDJCQUFtQixJQU5iO0FBT04sZ0JBQVE7QUFDSixvQkFBUSxxR0FESjtBQUVKLG1CQUFPLG9CQUZIO0FBR0osbUJBQU8sZ0JBSEg7QUFJSixtQkFBTztBQUpILFNBUEY7QUFhTixlQUFPO0FBQ0gsc0JBQVU7QUFDTix1QkFBTyxDQUNILGlCQURHLEVBRUgsbUJBRkcsRUFHSCwwQkFIRyxFQUlILDRCQUpHLEVBS0gsbUJBTEcsRUFNSCxlQU5HLEVBT0gsc0JBUEcsRUFRSCxzQkFSRyxDQUREO0FBV04sd0JBQVEsQ0FDSixnQkFESSxFQUVKLG9CQUZJO0FBWEYsYUFEUDtBQWlCSCx1QkFBVztBQUNQLHdCQUFRLENBQ0osdUJBREksRUFFSix3QkFGSSxFQUdKLFVBSEksRUFJSixlQUpJLEVBS0osc0JBTEksRUFNSiw2QkFOSSxFQU9KLHVCQVBJLEVBUUosY0FSSSxFQVNKLFlBVEksRUFVSixZQVZJLEVBV0osZUFYSSxFQVlKLG9CQVpJLEVBYUosY0FiSSxFQWNKLHNCQWRJLEVBZUosdUJBZkksRUFnQkosb0JBaEJJLEVBaUJKLG9CQWpCSTtBQUREO0FBakJSLFNBYkQ7O0FBcURBLG9CQXJEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkFzRGtCLFNBQUssdUJBQUwsRUF0RGxCO0FBQUE7QUFzREUsdUJBdERGO0FBdURFLHNCQXZERixHQXVEVyxFQXZEWDs7QUF3REYscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxRQUFRLE1BQVIsRUFBZ0IsT0FBaEIsRUFBeUIsTUFBN0MsRUFBcUQsR0FBckQsRUFBMEQ7QUFDbEQsMEJBRGtELEdBQ3pDLFFBQVEsTUFBUixFQUFnQixPQUFoQixFQUF5QixDQUF6QixDQUR5QztBQUVsRCxzQkFGa0QsR0FFN0MsT0FBTyxTQUFQLElBQW9CLEdBQXBCLEdBQTBCLE9BQU8sU0FBUCxDQUZtQjtBQUdsRCwwQkFIa0QsR0FHekMsRUFIeUM7QUFBQSxxQ0FJaEMsT0FBTyxLQUFQLENBQWMsR0FBZCxDQUpnQztBQUFBO0FBSWhELHdCQUpnRDtBQUkxQyx5QkFKMEM7O0FBS3RELDJCQUFPLElBQVAsQ0FBYTtBQUNULDhCQUFNLEVBREc7QUFFVCxrQ0FBVSxNQUZEO0FBR1QsZ0NBQVEsSUFIQztBQUlULGlDQUFTLEtBSkE7QUFLVCxnQ0FBUTtBQUxDLHFCQUFiO0FBT0g7QUFDRCx1QkFBTyxNQUFQO0FBckVFO0FBQUE7QUF3RUEsb0JBeEVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBeUVJLFNBQUssV0FBTCxFQXpFSjtBQUFBO0FBQUEsdUJBMEVtQixTQUFLLGtCQUFMLEVBMUVuQjtBQUFBO0FBMEVFLHdCQTFFRjtBQTJFRSxzQkEzRUYsR0EyRVcsRUFBRSxRQUFRLFFBQVYsRUEzRVg7O0FBNEVGLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksU0FBSyxVQUFMLENBQWdCLE1BQXBDLEVBQTRDLEdBQTVDLEVBQWlEO0FBQ3pDLDRCQUR5QyxHQUM5QixTQUFLLFVBQUwsQ0FBZ0IsQ0FBaEIsQ0FEOEI7QUFFekMsMkJBRnlDLEdBRS9CO0FBQ1YsZ0NBQVEsV0FBWSxTQUFTLFFBQVQsRUFBbUIsV0FBbkIsQ0FBWixDQURFO0FBRVYsZ0NBQVEsV0FBWSxTQUFTLFFBQVQsRUFBbUIsUUFBbkIsQ0FBWixDQUZFO0FBR1YsaUNBQVM7QUFIQyxxQkFGK0I7O0FBTzdDLDRCQUFRLE9BQVIsSUFBbUIsU0FBSyxHQUFMLENBQVUsUUFBUSxNQUFSLENBQVYsRUFBMkIsUUFBUSxNQUFSLENBQTNCLENBQW5CO0FBQ0EsMkJBQU8sUUFBUCxJQUFtQixPQUFuQjtBQUNIO0FBQ0QsdUJBQU8sTUFBUDtBQXRGRTtBQUFBO0FBeUZBLHNCQXpGQSwwQkF5RmdCLE1BekZoQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQXlGd0Isc0JBekZ4QixtRkF5RmlDLEVBekZqQztBQUFBLHVCQTBGSSxTQUFLLFdBQUwsRUExRko7QUFBQTtBQUFBLHVCQTJGcUIsU0FBSyxzQkFBTCxDQUE2QixTQUFLLE1BQUwsQ0FBYTtBQUM3RCw0QkFBUSxTQUFLLFFBQUwsQ0FBZSxNQUFmO0FBRHFELGlCQUFiLEVBRWpELE1BRmlELENBQTdCLENBM0ZyQjtBQUFBO0FBMkZFLHlCQTNGRjtBQThGRSx5QkE5RkYsR0E4RmMsVUFBVSxXQUFWLElBQXlCLElBOUZ2QztBQStGRSxzQkEvRkYsR0ErRlc7QUFDVCw0QkFBUSxVQUFVLE1BQVYsQ0FEQztBQUVULDRCQUFRLFVBQVUsTUFBVixDQUZDO0FBR1QsaUNBQWEsU0FISjtBQUlULGdDQUFZLFNBQUssT0FBTCxDQUFjLFNBQWQ7QUFKSCxpQkEvRlg7O0FBcUdGLHVCQUFPLE1BQVA7QUFyR0U7QUFBQTtBQXdHTixtQkF4R00sdUJBd0dPLE1BeEdQLEVBd0dlLE1BeEdmLEVBd0d1QjtBQUN6QixnQkFBSSxZQUFZLFNBQVUsT0FBTyxXQUFQLENBQVYsSUFBaUMsSUFBakQ7QUFDQSxtQkFBTztBQUNILDZCQUFhLFNBRFY7QUFFSCw0QkFBWSxLQUFLLE9BQUwsQ0FBYyxTQUFkLENBRlQ7QUFHSCx3QkFBUSxXQUFZLE9BQU8sTUFBUCxDQUFaLENBSEw7QUFJSCx1QkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBSko7QUFLSCx1QkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBTEo7QUFNSCx1QkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBTko7QUFPSCx3QkFBUSxTQVBMO0FBUUgsd0JBQVEsU0FSTDtBQVNILHlCQUFTLFNBVE47QUFVSCx5QkFBUyxTQVZOO0FBV0gsd0JBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQVhMO0FBWUgsMEJBQVUsU0FaUDtBQWFILDhCQUFjLFNBYlg7QUFjSCwyQkFBVyxTQWRSO0FBZUgsOEJBQWMsU0FmWDtBQWdCSCwrQkFBZSxXQUFZLE9BQU8sUUFBUCxDQUFaLENBaEJaO0FBaUJILHdCQUFRO0FBakJMLGFBQVA7QUFtQkgsU0E3SEs7QUErSEEsb0JBL0hBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBZ0lJLFNBQUssV0FBTCxFQWhJSjtBQUFBO0FBaUlFLDBCQWpJRixHQWlJZSxTQUFLLFVBQUwsQ0FBZ0IsSUFBaEIsQ0FBc0IsR0FBdEIsQ0FqSWY7QUFBQSx1QkFrSW1CLFNBQUssMEJBQUwsQ0FBaUM7QUFDbEQsa0NBQWM7QUFEb0MsaUJBQWpDLENBbEluQjtBQUFBO0FBa0lFLHdCQWxJRjtBQXFJRSx1QkFySUYsR0FxSVksU0FBUyxNQUFULENBcklaO0FBc0lFLHNCQXRJRixHQXNJVyxFQXRJWDs7QUF1SUYscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxRQUFRLE1BQTVCLEVBQW9DLEdBQXBDLEVBQXlDO0FBQ2pDLDBCQURpQyxHQUN4QixRQUFRLENBQVIsQ0FEd0I7QUFFakMsMEJBRmlDLEdBRXhCLE9BQU8sTUFBUCxFQUFlLE9BQWYsQ0FBd0IsR0FBeEIsRUFBNkIsR0FBN0IsQ0FGd0I7QUFHakMsMEJBSGlDLEdBR3hCLFNBQUssT0FBTCxDQUFhLE1BQWIsQ0FId0I7O0FBSXJDLDJCQUFPLE1BQVAsSUFBaUIsU0FBSyxXQUFMLENBQWtCLE1BQWxCLEVBQTBCLE1BQTFCLENBQWpCO0FBQ0g7QUFDRCx1QkFBTyxNQUFQO0FBN0lFO0FBQUE7QUFnSkEsbUJBaEpBLHVCQWdKYSxNQWhKYjtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQWlKSSxTQUFLLFdBQUwsRUFqSko7QUFBQTtBQWtKRSxpQkFsSkYsR0FrSk0sU0FBSyxNQUFMLENBQWEsTUFBYixDQWxKTjtBQUFBLHVCQW1KaUIsU0FBSyxtQkFBTCxDQUEwQjtBQUN6Qyw0QkFBUSxFQUFFLElBQUY7QUFEaUMsaUJBQTFCLENBbkpqQjtBQUFBO0FBbUpFLHNCQW5KRjs7QUFzSkYsdUJBQU8sU0FBSyxXQUFMLENBQWtCLE1BQWxCLEVBQTBCLENBQTFCLENBQVA7QUF0SkU7QUFBQTtBQXlKQSxtQkF6SkEsdUJBeUphLE1BekpiO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBeUpxQixzQkF6SnJCLG1GQXlKOEIsRUF6SjlCO0FBQUEsdUJBMEpJLFNBQUssV0FBTCxFQTFKSjtBQUFBO0FBMkpGLHVCQUFPLFNBQUsseUJBQUwsQ0FBZ0MsU0FBSyxNQUFMLENBQWE7QUFDaEQsNEJBQVEsU0FBSyxRQUFMLENBQWUsTUFBZjtBQUR3QyxpQkFBYixFQUVwQyxNQUZvQyxDQUFoQyxDQUFQO0FBM0pFO0FBQUE7QUFnS0EsbUJBaEtBLHVCQWdLYSxNQWhLYixFQWdLcUIsSUFoS3JCLEVBZ0syQixJQWhLM0IsRUFnS2lDLE1BaEtqQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQWdLeUMscUJBaEt6QyxtRkFnS2lELFNBaEtqRDtBQWdLNEQsc0JBaEs1RCxtRkFnS3FFLEVBaEtyRTtBQUFBLHVCQWlLSSxTQUFLLFdBQUwsRUFqS0o7QUFBQTtBQWtLRSxxQkFsS0YsR0FrS1U7QUFDUiw0QkFBUSxTQUFLLFFBQUwsQ0FBZSxNQUFmLENBREE7QUFFUiw0QkFBUSxJQUZBO0FBR1IsOEJBQVU7QUFIRixpQkFsS1Y7O0FBdUtGLG9CQUFJLFFBQVEsT0FBWjtBQUNJLDBCQUFNLE9BQU4sSUFBaUIsS0FBakI7QUFESjtBQUdJLDBCQUFNLFlBQU4sSUFBc0IsSUFBdEI7QUFISixpQkF2S0UsT0EyS21CLFNBQUsseUJBQUwsQ0FBZ0MsU0FBSyxNQUFMLENBQWEsS0FBYixFQUFvQixNQUFwQixDQUFoQyxDQTNLbkI7QUFBQTtBQTJLRSx3QkEzS0Y7O0FBNEtGLHVCQUFPO0FBQ0gsNEJBQVEsUUFETDtBQUVILDBCQUFNLFNBQVMsSUFBVDtBQUZILGlCQUFQO0FBNUtFO0FBQUE7QUFrTEEsbUJBbExBLHVCQWtMYSxFQWxMYjtBQUFBOztBQUFBO0FBQUEsdUJBbUxJLFNBQUssV0FBTCxFQW5MSjtBQUFBO0FBb0xGLHVCQUFPLFNBQUssc0JBQUwsQ0FBNkIsRUFBRSxNQUFNLEVBQVIsRUFBN0IsQ0FBUDtBQXBMRTtBQUFBO0FBdUxBLGVBdkxBLG1CQXVMUyxJQXZMVDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQXVMZSxtQkF2TGYsbUZBdUxxQixRQXZMckI7QUF1TCtCLHNCQXZML0IsbUZBdUx3QyxLQXZMeEM7QUF1TCtDLHNCQXZML0MsbUZBdUx3RCxFQXZMeEQ7QUF1TDRELHVCQXZMNUQsbUZBdUxzRSxTQXZMdEU7QUF1TGlGLG9CQXZMakYsbUZBdUx3RixTQXZMeEY7QUF3TEUsbUJBeExGLEdBd0xRLFNBQUssSUFBTCxDQUFVLEtBQVYsSUFBbUIsR0FBbkIsR0FBeUIsU0FBSyxhQUFMLENBQW9CLElBQXBCLEVBQTBCLE1BQTFCLENBeExqQztBQXlMRSxxQkF6TEYsR0F5TFUsU0FBSyxJQUFMLENBQVcsTUFBWCxFQUFtQixTQUFLLGFBQUwsQ0FBb0IsSUFBcEIsQ0FBbkIsQ0F6TFY7O0FBMExGLG9CQUFJLE9BQU8sUUFBWCxFQUFxQjtBQUNqQix3QkFBSSxPQUFPLElBQVAsQ0FBYSxLQUFiLEVBQW9CLE1BQXhCO0FBQ0ksK0JBQU8sTUFBTSxTQUFLLFNBQUwsQ0FBZ0IsS0FBaEIsQ0FBYjtBQURKO0FBRUgsaUJBSEQsTUFHTztBQUNILHdCQUFJLENBQUMsU0FBSyxHQUFWO0FBQ0ksOEJBQU0sSUFBSSxtQkFBSixDQUF5QixTQUFLLEVBQUwsR0FBVSxhQUFWLEdBQTBCLFNBQUssRUFBL0IsR0FBb0MsbUNBQTdELENBQU47QUFESixxQkFFSSxLQUhELEdBR1MsU0FBSyxLQUFMLEdBQWMsUUFBZCxFQUhUO0FBSUMsd0JBSkQsR0FJUSxRQUFRLFNBQUssR0FBYixHQUFtQixTQUFLLE1BSmhDO0FBS0MsNkJBTEQsR0FLYSxTQUFLLElBQUwsQ0FBVyxTQUFLLE1BQUwsQ0FBYSxJQUFiLENBQVgsRUFBK0IsU0FBSyxNQUFMLENBQWEsU0FBSyxNQUFsQixDQUEvQixDQUxiOztBQU1ILDJCQUFPLFNBQUssU0FBTCxDQUFnQixTQUFLLE1BQUwsQ0FBYTtBQUNoQywrQkFBTyxTQUFLLE1BRG9CO0FBRWhDLHFDQUFhLFVBQVUsV0FBVixFQUZtQjtBQUdoQyxpQ0FBUztBQUh1QixxQkFBYixFQUlwQixLQUpvQixDQUFoQixDQUFQO0FBS0EsOEJBQVU7QUFDTix3Q0FBZ0IsbUNBRFY7QUFFTiwwQ0FBa0IsS0FBSztBQUZqQixxQkFBVjtBQUlIO0FBNU1DLHVCQTZNbUIsU0FBSyxLQUFMLENBQVksR0FBWixFQUFpQixNQUFqQixFQUF5QixPQUF6QixFQUFrQyxJQUFsQyxDQTdNbkI7QUFBQTtBQTZNRSx3QkE3TUY7QUFBQSx5QkE4TUUsT0FBTyxRQTlNVDtBQUFBLG1DQStNTSxRQUFRLFFBL01kOztBQWdOTSw4QkFBSSxTQUFTLElBQVQsS0FBa0IsSUFBdEI7QUFDSSwyQkFBTyxRQUFQO0FBREo7QUFBQTtBQUVKLDhCQUFNLElBQUksYUFBSixDQUFtQixTQUFLLEVBQUwsR0FBVSxHQUFWLEdBQWdCLFNBQUssSUFBTCxDQUFXLFFBQVgsQ0FBbkMsQ0FBTjtBQUZJOztBQUlSLDJCQUFPLFFBQVA7QUFKUTtBQWhOTjtBQUFBO0FBQUEsS0FBVjs7QUF3TkE7O0FBRUEsUUFBSSxRQUFRO0FBQ1IsY0FBTSxPQURFO0FBRVIsZ0JBQVEsT0FGQTtBQUdSLHFCQUFhLElBSEw7QUFJUixxQkFBYSxJQUpMO0FBS1IsbUJBQVcsSUFMSDtBQU1SLGdCQUFRO0FBQ0osb0JBQVEscUdBREo7QUFFSixtQkFBTztBQUNILDBCQUFVLDJCQURQLEVBQ29DO0FBQ3ZDLDJCQUFXO0FBRlIsYUFGSDtBQU1KLG1CQUFPLDZCQU5IO0FBT0osbUJBQU87QUFQSCxTQU5BO0FBZVIsZUFBTztBQUNILHNCQUFVO0FBQ04sdUJBQU8sQ0FDSCxRQURHLEVBRUgsT0FGRyxFQUdILFFBSEcsRUFJSCxPQUpHO0FBREQsYUFEUDtBQVNILHVCQUFXO0FBQ1Asd0JBQVEsQ0FDSixPQURJLEVBRUosYUFGSSxFQUdKLFVBSEksRUFJSixXQUpJLEVBS0osY0FMSSxFQU1KLDBCQU5JLEVBT0osb0NBUEksRUFRSixnQkFSSSxFQVNKLGdCQVRJLEVBVUosb0JBVkksRUFXSixtQkFYSSxFQVlKLGlCQVpJLEVBYUosc0JBYkksRUFjSixvQkFkSSxFQWVKLFVBZkk7QUFERDtBQVRSLFNBZkM7QUE0Q1IsbUJBQVc7QUFDUCx1QkFBVyxFQUFFLE1BQU0sU0FBUixFQUFtQixVQUFVLFNBQTdCLEVBQXdDLFFBQVEsS0FBaEQsRUFBdUQsU0FBUyxLQUFoRSxFQURKO0FBRVAsdUJBQVcsRUFBRSxNQUFNLFNBQVIsRUFBbUIsVUFBVSxTQUE3QixFQUF3QyxRQUFRLEtBQWhELEVBQXVELFNBQVMsS0FBaEUsRUFGSjtBQUdQLHVCQUFXLEVBQUUsTUFBTSxTQUFSLEVBQW1CLFVBQVUsU0FBN0IsRUFBd0MsUUFBUSxLQUFoRCxFQUF1RCxTQUFTLEtBQWhFLEVBSEo7QUFJUCx1QkFBVyxFQUFFLE1BQU0sU0FBUixFQUFtQixVQUFVLFNBQTdCLEVBQXdDLFFBQVEsS0FBaEQsRUFBdUQsU0FBUyxLQUFoRSxFQUpKO0FBS1AsdUJBQVcsRUFBRSxNQUFNLFNBQVIsRUFBbUIsVUFBVSxTQUE3QixFQUF3QyxRQUFRLEtBQWhELEVBQXVELFNBQVMsS0FBaEUsRUFMSjtBQU1QLHVCQUFXLEVBQUUsTUFBTSxTQUFSLEVBQW1CLFVBQVUsU0FBN0IsRUFBd0MsUUFBUSxLQUFoRCxFQUF1RCxTQUFTLEtBQWhFO0FBTkosU0E1Q0g7O0FBcURGLG9CQXJERTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBc0RpQixTQUFLLHlCQUFMLEVBdERqQjtBQUFBO0FBc0RBLHdCQXREQTtBQXVEQSx3QkF2REEsR0F1RFcsU0FBUyxRQUFULENBdkRYO0FBd0RBLHNCQXhEQSxHQXdEUyxFQUFFLFFBQVEsUUFBVixFQXhEVDs7QUF5REoscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxTQUFLLFVBQUwsQ0FBZ0IsTUFBcEMsRUFBNEMsR0FBNUMsRUFBaUQ7QUFDekMsNEJBRHlDLEdBQzlCLFNBQUssVUFBTCxDQUFnQixDQUFoQixDQUQ4QjtBQUV6QywyQkFGeUMsR0FFL0I7QUFDVixnQ0FBUSxTQURFO0FBRVYsZ0NBQVEsU0FGRTtBQUdWLGlDQUFTO0FBSEMscUJBRitCOztBQU83Qyx3QkFBSSxZQUFZLFNBQVMsU0FBVCxDQUFoQjtBQUNJLGdDQUFRLE1BQVIsSUFBa0IsU0FBUyxTQUFULEVBQW9CLFFBQXBCLEVBQThCLFFBQTlCLENBQWxCO0FBREoscUJBRUEsSUFBSSxZQUFZLFNBQVMsUUFBVCxDQUFoQjtBQUNJLGdDQUFRLE1BQVIsSUFBa0IsU0FBUyxRQUFULEVBQW1CLFFBQW5CLEVBQTZCLFFBQTdCLENBQWxCO0FBREoscUJBRUEsUUFBUSxPQUFSLElBQW1CLFNBQUssR0FBTCxDQUFVLFFBQVEsTUFBUixDQUFWLEVBQTJCLFFBQVEsTUFBUixDQUEzQixDQUFuQjtBQUNBLDJCQUFPLFFBQVAsSUFBbUIsT0FBbkI7QUFDSDtBQUNELHVCQUFPLE1BQVA7QUF2RUk7QUFBQTtBQTBFRixzQkExRUUsMEJBMEVjLE1BMUVkO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBMEVzQixzQkExRXRCLG1GQTBFK0IsRUExRS9CO0FBMkVBLGlCQTNFQSxHQTJFSSxTQUFLLE1BQUwsQ0FBYSxNQUFiLENBM0VKO0FBQUEsdUJBNEVrQixTQUFLLGNBQUwsQ0FBcUIsU0FBSyxNQUFMLENBQWE7QUFDcEQsZ0NBQVksRUFBRSxJQUFGO0FBRHdDLGlCQUFiLEVBRXhDLE1BRndDLENBQXJCLENBNUVsQjtBQUFBO0FBNEVBLHlCQTVFQTtBQStFQSx5QkEvRUEsR0ErRVksU0FBSyxZQUFMLEVBL0VaO0FBZ0ZBLG9CQWhGQSxHQWdGTyxTQWhGUDtBQWlGQSxvQkFqRkEsR0FpRk8sU0FqRlA7O0FBa0ZKLG9CQUFJLFVBQVUsU0FBZDtBQUNJLDJCQUFPLFVBQVUsTUFBVixDQUFQO0FBREosaUJBRUEsSUFBSSxVQUFVLFNBQWQ7QUFDSSwyQkFBTyxVQUFVLE1BQVYsQ0FBUDtBQURKLGlCQUVJLE1BdEZBLEdBc0ZTO0FBQ1QsNEJBQVEsSUFEQztBQUVULDRCQUFRLElBRkM7QUFHVCxpQ0FBYSxTQUhKO0FBSVQsZ0NBQVksU0FBSyxPQUFMLENBQWMsU0FBZDtBQUpILGlCQXRGVDs7QUE0Rkosb0JBQUksT0FBTyxNQUFQLENBQUo7QUFDSSwyQkFBTyxNQUFQLElBQWlCLFNBQUssTUFBTCxDQUFhLE9BQU8sTUFBUCxDQUFiLEVBQTZCLENBQTdCLEVBQWdDLElBQWhDLENBQWpCO0FBREosaUJBRUEsSUFBSSxPQUFPLE1BQVAsQ0FBSjtBQUNJLDJCQUFPLE1BQVAsSUFBaUIsU0FBSyxNQUFMLENBQWEsT0FBTyxNQUFQLENBQWIsRUFBNkIsQ0FBN0IsQ0FBakI7QUFESixpQkFFQSxPQUFPLE1BQVA7QUFoR0k7QUFBQTtBQW1HRixtQkFuR0UsdUJBbUdXLE1BbkdYO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkFvR2lCLFNBQUssZUFBTCxDQUFzQjtBQUN2QyxnQ0FBWSxTQUFLLFFBQUwsQ0FBZSxNQUFmO0FBRDJCLGlCQUF0QixDQXBHakI7QUFBQTtBQW9HQSx3QkFwR0E7QUF1R0Esc0JBdkdBLEdBdUdTLFNBQVMsUUFBVCxDQXZHVDtBQXdHQSx5QkF4R0EsR0F3R1ksU0FBSyxZQUFMLEVBeEdaOztBQXlHSix1QkFBTztBQUNILGlDQUFhLFNBRFY7QUFFSCxnQ0FBWSxTQUFLLE9BQUwsQ0FBYyxTQUFkLENBRlQ7QUFHSCw0QkFBUSxXQUFZLE9BQU8sTUFBUCxDQUFaLENBSEw7QUFJSCwyQkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBSko7QUFLSCwyQkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBTEo7QUFNSCwyQkFBTyxXQUFZLE9BQU8sTUFBUCxDQUFaLENBTko7QUFPSCw0QkFBUSxTQVBMO0FBUUgsNEJBQVEsU0FSTDtBQVNILDZCQUFTLFNBVE47QUFVSCw2QkFBUyxTQVZOO0FBV0gsNEJBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQVhMO0FBWUgsOEJBQVUsU0FaUDtBQWFILGtDQUFjLFNBYlg7QUFjSCwrQkFBVyxTQWRSO0FBZUgsa0NBQWMsU0FmWDtBQWdCSCxtQ0FBZSxXQUFZLE9BQU8sS0FBUCxDQUFaLENBaEJaO0FBaUJILDRCQUFRO0FBakJMLGlCQUFQO0FBekdJO0FBQUE7QUE4SEYsbUJBOUhFLHVCQThIVyxNQTlIWDtBQUFBO0FBQUE7QUFBQTs7QUE4SG1CLGtCQTlIbkIsbUZBOEg0QixFQTlINUI7O0FBK0hKLG1CQUFPLFNBQUssZUFBTCxDQUFzQixTQUFLLE1BQUwsQ0FBYTtBQUN0Qyw0QkFBWSxTQUFLLFFBQUwsQ0FBZSxNQUFmO0FBRDBCLGFBQWIsRUFFMUIsTUFGMEIsQ0FBdEIsQ0FBUDtBQS9ISTtBQW9JRixtQkFwSUUsdUJBb0lXLE1BcElYLEVBb0ltQixJQXBJbkIsRUFvSXlCLElBcEl6QixFQW9JK0IsTUFwSS9CO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFvSXVDLHFCQXBJdkMsbUZBb0krQyxTQXBJL0M7QUFvSTBELHNCQXBJMUQsbUZBb0ltRSxFQXBJbkU7QUFxSUEsMkJBcklBLEdBcUljLFlBQVksTUFBTSxRQUFOLEVBckkxQjs7QUFzSUosK0JBQWUsYUFBYSxPQUFPLFFBQVAsRUFBNUI7QUFDSSx5QkF2SUEsR0F1SWEsUUFBUSxLQUFULEdBQWtCLEdBQWxCLEdBQXdCLEdBdklwQzs7QUF3SUosK0JBQWUsZ0JBQWdCLFNBQS9CO0FBQ0EsK0JBQWUsZUFBZSxTQUFLLFFBQUwsQ0FBZSxNQUFmLENBQTlCO0FBeklJLHVCQTBJaUIsU0FBSyxnQkFBTCxDQUF1QixXQUF2QixDQTFJakI7QUFBQTtBQTBJQSx3QkExSUE7O0FBMklKLHVCQUFPO0FBQ0gsNEJBQVEsUUFETDtBQUVILDBCQUFNLFNBQVMsSUFBVDtBQUZILGlCQUFQO0FBM0lJO0FBQUE7QUFpSkYsbUJBakpFLHVCQWlKVyxFQWpKWDtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQWlKZSxrQkFqSmYsbUZBaUp3QixFQWpKeEI7QUFrSkEsdUJBbEpBLEdBa0pjLFNBQVMsR0FBRyxRQUFILEVBbEp2Qjs7QUFtSkosZ0JBQUksY0FBYyxNQUFsQjtBQUNJLCtCQUFlLGVBQWUsT0FBTyxVQUFQLENBQTlCO0FBREosYUFFQSxPQUFPLFNBQUssc0JBQUwsQ0FBNkIsV0FBN0IsQ0FBUDtBQXJKSTtBQXdKRixrQkF4SkUsc0JBd0pVLEVBeEpWO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBd0pjLGtCQXhKZCxtRkF3SnVCLEVBeEp2QjtBQXlKQSx1QkF6SkEsR0F5SmMsU0FBUyxHQUFHLFFBQUgsRUF6SnZCOztBQTBKSixnQkFBSSxjQUFjLE1BQWxCO0FBQ0ksK0JBQWUsZUFBZSxPQUFPLFVBQVAsQ0FBOUI7QUFESixhQUVBLE9BQU8sU0FBSyxtQkFBTCxDQUEwQixXQUExQixDQUFQO0FBNUpJO0FBK0pSLGFBL0pRLG1CQStKQztBQUNMLG1CQUFPLEtBQUssWUFBTCxFQUFQO0FBQ0gsU0FqS087QUFtS0YsZUFuS0UsbUJBbUtPLElBbktQO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBbUthLG1CQW5LYixtRkFtS21CLFFBbktuQjtBQW1LNkIsc0JBbks3QixtRkFtS3NDLEtBbkt0QztBQW1LNkMsc0JBbks3QyxtRkFtS3NELEVBbkt0RDtBQW1LMEQsdUJBbksxRCxtRkFtS29FLFNBbktwRTtBQW1LK0Usb0JBbksvRSxtRkFtS3NGLFNBbkt0RjtBQW9LQSxtQkFwS0EsR0FvS00sU0FBSyxJQUFMLENBQVUsS0FBVixFQUFpQixHQUFqQixDQXBLTjs7QUFxS0osb0JBQUksT0FBTyxRQUFYLEVBQXFCO0FBQ2pCLDJCQUFPLE1BQU0sU0FBSyxPQUFYLEdBQXFCLEdBQXJCLEdBQTJCLElBQWxDO0FBQ0Esd0JBQUksT0FBTyxJQUFQLENBQWEsTUFBYixFQUFxQixNQUF6QjtBQUNJLCtCQUFPLE1BQU0sU0FBSyxTQUFMLENBQWdCLE1BQWhCLENBQWI7QUFESjtBQUVILGlCQUpELE1BSU87QUFDQyxnQ0FERCxHQUNnQixPQUFPLE1BRHZCLEVBQytCOztBQUM5Qix5QkFGRCxHQUVTLFNBQUssS0FBTCxFQUZUO0FBR0Msd0JBSEQsR0FHUSxZQUFZLElBSHBCOztBQUlILDRCQUFRLGdCQUFnQixTQUFLLE1BQTdCO0FBQ0EsNEJBQVEsZUFBZSxNQUFmLEdBQXdCLEVBQWhDO0FBQ0ksMEJBTkQsR0FNVSxTQUFLLElBQUwsQ0FBVyxTQUFLLE1BQUwsQ0FBYSxTQUFLLE1BQWxCLENBQVgsRUFBc0MsTUFBdEMsQ0FOVjtBQU9DLDZCQVBELEdBT2EsU0FBSyxJQUFMLENBQVcsU0FBSyxNQUFMLENBQWEsSUFBYixDQUFYLEVBQStCLFNBQUssTUFBTCxDQUFhLE1BQWIsQ0FBL0IsRUFBcUQsS0FBckQsQ0FQYjtBQVFDLDBCQVJELEdBUVUsVUFBVSxTQUFWLEdBQXNCLFdBQXRCLEdBQW9DLE1BQU0sUUFBTixFQVI5Qzs7QUFTSCwyQkFBTyxNQUFNLElBQU4sR0FBYSxHQUFiLEdBQW1CLElBQW5CLEdBQTBCLEdBQTFCLEdBQWdDLE1BQXZDO0FBQ0g7QUFuTEcsdUJBb0xpQixTQUFLLEtBQUwsQ0FBWSxHQUFaLEVBQWlCLE1BQWpCLEVBQXlCLE9BQXpCLEVBQWtDLElBQWxDLENBcExqQjtBQUFBO0FBb0xBLHdCQXBMQTs7QUFxTEosb0JBQUksT0FBTyxTQUFYO0FBQ0ksd0JBQUksVUFBVSxRQUFkO0FBQ0ksOEJBQU0sSUFBSSxhQUFKLENBQW1CLFNBQUssRUFBTCxHQUFVLEdBQVYsR0FBZ0IsU0FBSyxJQUFMLENBQVcsUUFBWCxDQUFuQyxDQUFOO0FBREo7QUFESixpQkFHQSxPQUFPLFFBQVA7QUF4TEk7QUFBQTtBQUFBLEtBQVo7O0FBNExBOztBQUVBLFFBQUksV0FBVyxPQUFRLFVBQVIsRUFBb0I7QUFDL0IsY0FBTSxVQUR5QjtBQUUvQixnQkFBUSxVQUZ1QjtBQUcvQixxQkFBYSxJQUhrQjtBQUkvQixnQkFBUTtBQUNKLG9CQUFRLHFHQURKO0FBRUosbUJBQU87QUFDSCwwQkFBVSxnQ0FEUDtBQUVILDJCQUFXO0FBRlIsYUFGSDtBQU1KLG1CQUFPLHNCQU5IO0FBT0osbUJBQU87QUFQSCxTQUp1QjtBQWEvQixtQkFBVyxnQkFib0I7QUFjL0IsbUJBQVc7QUFDUCx1QkFBVyxFQUFFLE1BQU0sUUFBUixFQUFrQixVQUFVLFNBQTVCLEVBQXVDLFFBQVEsS0FBL0MsRUFBc0QsU0FBUyxLQUEvRCxFQUFzRSxZQUFZLENBQWxGLEVBQXFGLFVBQVUsVUFBL0Y7QUFESjtBQWRvQixLQUFwQixDQUFmOztBQW1CQTs7QUFFQSxRQUFJLFlBQVk7O0FBRVosY0FBTSxXQUZNO0FBR1osZ0JBQVEsV0FISTtBQUlaLHFCQUFhLENBQUUsSUFBRixFQUFRLElBQVIsQ0FKRDtBQUtaLHFCQUFhLElBTEQ7QUFNWixnQkFBUTtBQUNKLG9CQUFRLHFHQURKO0FBRUosbUJBQU8sMkJBRkg7QUFHSixtQkFBTyx1QkFISDtBQUlKLG1CQUFPO0FBSkgsU0FOSTtBQVlaLGVBQU87QUFDSCxzQkFBVTtBQUNOLHVCQUFPLENBQ0gsc0JBREcsRUFFSCxhQUZHLEVBR0gsYUFIRyxFQUlILFFBSkcsRUFLSCxRQUxHO0FBREQsYUFEUDtBQVVILHVCQUFXO0FBQ1AsdUJBQU8sQ0FDSCxVQURHLEVBRUgsa0JBRkcsRUFHSCwyQkFIRyxFQUlILGVBSkcsRUFLSCxlQUxHLEVBTUgsdUJBTkcsRUFPSCw4QkFQRyxFQVFILHlDQVJHLEVBU0gsNkJBVEcsRUFVSCx5QkFWRyxFQVdILFlBWEcsRUFZSCxXQVpHLENBREE7QUFlUCx3QkFBUSxDQUNKLGVBREksRUFFSix5QkFGSSxFQUdKLGlCQUhJLEVBSUosZ0NBSkksRUFLSixrQ0FMSSxFQU1KLGlCQU5JLEVBT0osNEJBUEksRUFRSixZQVJJLEVBU0osV0FUSSxDQWZEO0FBMEJQLDBCQUFVLENBQ04sb0JBRE0sRUFFTixzQkFGTSxFQUdOLGdCQUhNO0FBMUJIO0FBVlIsU0FaSztBQXVEWixtQkFBVztBQUNQLHVCQUFZLEVBQUUsTUFBTSxTQUFSLEVBQW9CLFVBQVUsU0FBOUIsRUFBMEMsUUFBUSxLQUFsRCxFQUEwRCxTQUFTLEtBQW5FLEVBREwsRUFDaUY7QUFDeEYsdUJBQVksRUFBRSxNQUFNLFNBQVIsRUFBb0IsVUFBVSxTQUE5QixFQUEwQyxRQUFRLEtBQWxELEVBQTBELFNBQVMsS0FBbkUsRUFGTDtBQUdQLHVCQUFZLEVBQUUsTUFBTSxTQUFSLEVBQW9CLFVBQVUsU0FBOUIsRUFBMEMsUUFBUSxLQUFsRCxFQUEwRCxTQUFTLEtBQW5FLEVBSEw7QUFJUCx1QkFBWSxFQUFFLE1BQU0sU0FBUixFQUFvQixVQUFVLFNBQTlCLEVBQTBDLFFBQVEsS0FBbEQsRUFBMEQsU0FBUyxLQUFuRSxFQUpMO0FBS1AsdUJBQVksRUFBRSxNQUFNLFNBQVIsRUFBb0IsVUFBVSxTQUE5QixFQUEwQyxRQUFRLEtBQWxELEVBQTBELFNBQVMsS0FBbkUsRUFMTDtBQU1QLHVCQUFZLEVBQUUsTUFBTSxTQUFSLEVBQW9CLFVBQVUsU0FBOUIsRUFBMEMsUUFBUSxLQUFsRCxFQUEwRCxTQUFTLEtBQW5FLEVBTkw7QUFPUCx1QkFBWSxFQUFFLE1BQU0sU0FBUixFQUFvQixVQUFVLFNBQTlCLEVBQTBDLFFBQVEsS0FBbEQsRUFBMEQsU0FBUyxLQUFuRSxFQVBMO0FBUVAsdUJBQVksRUFBRSxNQUFNLFNBQVIsRUFBb0IsVUFBVSxTQUE5QixFQUEwQyxRQUFRLEtBQWxELEVBQTBELFNBQVMsS0FBbkUsRUFSTDtBQVNQLHVCQUFZLEVBQUUsTUFBTSxTQUFSLEVBQW9CLFVBQVUsU0FBOUIsRUFBMEMsUUFBUSxLQUFsRCxFQUEwRCxTQUFTLEtBQW5FLEVBVEw7QUFVUCx1QkFBWSxFQUFFLE1BQU0sU0FBUixFQUFvQixVQUFVLFNBQTlCLEVBQTBDLFFBQVEsS0FBbEQsRUFBMEQsU0FBUyxLQUFuRSxFQVZMO0FBV1AsdUJBQVksRUFBRSxNQUFNLFNBQVIsRUFBb0IsVUFBVSxTQUE5QixFQUEwQyxRQUFRLEtBQWxELEVBQTBELFNBQVMsS0FBbkUsRUFYTDtBQVlQLHVCQUFZLEVBQUUsTUFBTSxTQUFSLEVBQW9CLFVBQVUsU0FBOUIsRUFBMEMsUUFBUSxLQUFsRCxFQUEwRCxTQUFTLEtBQW5FLEVBWkw7QUFhUCx3QkFBWSxFQUFFLE1BQU0sVUFBUixFQUFvQixVQUFVLFVBQTlCLEVBQTBDLFFBQVEsTUFBbEQsRUFBMEQsU0FBUyxLQUFuRSxFQWJMO0FBY1AsdUJBQVksRUFBRSxNQUFNLFNBQVIsRUFBb0IsVUFBVSxTQUE5QixFQUEwQyxRQUFRLEtBQWxELEVBQTBELFNBQVMsS0FBbkUsRUFkTDtBQWVQLHVCQUFZLEVBQUUsTUFBTSxTQUFSLEVBQW9CLFVBQVUsU0FBOUIsRUFBMEMsUUFBUSxLQUFsRCxFQUEwRCxTQUFTLEtBQW5FLEVBZkw7QUFnQlAsdUJBQVksRUFBRSxNQUFNLFNBQVIsRUFBb0IsVUFBVSxTQUE5QixFQUEwQyxRQUFRLEtBQWxELEVBQTBELFNBQVMsS0FBbkUsRUFoQkw7QUFpQlAsdUJBQVksRUFBRSxNQUFNLFNBQVIsRUFBb0IsVUFBVSxTQUE5QixFQUEwQyxRQUFRLEtBQWxELEVBQTBELFNBQVMsS0FBbkUsRUFqQkw7QUFrQlAsdUJBQVksRUFBRSxNQUFNLFNBQVIsRUFBb0IsVUFBVSxTQUE5QixFQUEwQyxRQUFRLEtBQWxELEVBQTBELFNBQVMsS0FBbkUsRUFsQkw7QUFtQlAsdUJBQVksRUFBRSxNQUFNLFNBQVIsRUFBb0IsVUFBVSxTQUE5QixFQUEwQyxRQUFRLEtBQWxELEVBQTBELFNBQVMsS0FBbkUsRUFuQkw7QUFvQlAsdUJBQVksRUFBRSxNQUFNLFNBQVIsRUFBb0IsVUFBVSxTQUE5QixFQUEwQyxRQUFRLEtBQWxELEVBQTBELFNBQVMsS0FBbkUsRUFwQkw7QUFxQlAsdUJBQVksRUFBRSxNQUFNLFNBQVIsRUFBb0IsVUFBVSxTQUE5QixFQUEwQyxRQUFRLEtBQWxELEVBQTBELFNBQVMsS0FBbkUsRUFyQkw7QUFzQlAsdUJBQVksRUFBRSxNQUFNLFNBQVIsRUFBb0IsVUFBVSxTQUE5QixFQUEwQyxRQUFRLEtBQWxELEVBQTBELFNBQVMsS0FBbkUsRUF0Qkw7QUF1QlAsdUJBQVksRUFBRSxNQUFNLFNBQVIsRUFBb0IsVUFBVSxTQUE5QixFQUEwQyxRQUFRLEtBQWxELEVBQTBELFNBQVMsS0FBbkUsRUF2Qkw7QUF3QlAsd0JBQVksRUFBRSxNQUFNLFVBQVIsRUFBb0IsVUFBVSxVQUE5QixFQUEwQyxRQUFRLE1BQWxELEVBQTBELFNBQVMsS0FBbkU7QUF4QkwsU0F2REM7O0FBa0ZOLG9CQWxGTTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkFtRmEsU0FBSyx5QkFBTCxFQW5GYjtBQUFBO0FBbUZKLHdCQW5GSTtBQW9GSixzQkFwRkksR0FvRkssRUFBRSxRQUFRLFFBQVYsRUFwRkw7O0FBcUZSLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksU0FBSyxVQUFMLENBQWdCLE1BQXBDLEVBQTRDLEdBQTVDLEVBQWlEO0FBQ3pDLDRCQUR5QyxHQUM5QixTQUFLLFVBQUwsQ0FBZ0IsQ0FBaEIsQ0FEOEI7QUFFekMsNkJBRnlDLEdBRTdCLFNBQVMsV0FBVCxFQUY2QjtBQUd6QywyQkFIeUMsR0FHL0I7QUFDVixnQ0FBUSxTQURFO0FBRVYsZ0NBQVEsU0FGRTtBQUdWLGlDQUFTO0FBSEMscUJBSCtCOztBQVE3Qyx3QkFBSSxhQUFhLFFBQWpCO0FBQ0ksZ0NBQVEsTUFBUixJQUFrQixXQUFZLFNBQVMsU0FBVCxDQUFaLENBQWxCO0FBREoscUJBRUksUUFWeUMsR0FVOUIsWUFBWSxXQVZrQjs7QUFXN0Msd0JBQUksWUFBWSxRQUFoQjtBQUNJLGdDQUFRLE1BQVIsSUFBa0IsV0FBWSxTQUFTLFFBQVQsQ0FBWixDQUFsQjtBQURKLHFCQUVBLFFBQVEsT0FBUixJQUFtQixTQUFLLEdBQUwsQ0FBVSxRQUFRLE1BQVIsQ0FBVixFQUEyQixRQUFRLE1BQVIsQ0FBM0IsQ0FBbkI7QUFDQSwyQkFBTyxRQUFQLElBQW1CLE9BQW5CO0FBQ0g7QUFDRCx1QkFBTyxNQUFQO0FBckdRO0FBQUE7QUF3R04sc0JBeEdNLDBCQXdHVSxNQXhHVjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUF3R2tCLHNCQXhHbEIsbUZBd0cyQixFQXhHM0I7QUFBQSx1QkF5R2UsU0FBSyxtQkFBTCxDQUEwQixNQUExQixDQXpHZjtBQUFBO0FBeUdKLHlCQXpHSTtBQTBHSix5QkExR0ksR0EwR1EsU0FBSyxZQUFMLEVBMUdSO0FBMkdKLHNCQTNHSSxHQTJHSztBQUNULDRCQUFRLEVBREM7QUFFVCw0QkFBUSxFQUZDO0FBR1QsaUNBQWEsU0FISjtBQUlULGdDQUFZLFNBQUssT0FBTCxDQUFjLFNBQWQ7QUFKSCxpQkEzR0w7QUFpSEoscUJBakhJLEdBaUhJLENBQUUsTUFBRixFQUFVLE1BQVYsQ0FqSEo7O0FBa0hSLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksTUFBTSxNQUExQixFQUFrQyxHQUFsQyxFQUF1QztBQUMvQix3QkFEK0IsR0FDeEIsTUFBTSxDQUFOLENBRHdCO0FBRS9CLDBCQUYrQixHQUV0QixVQUFVLElBQVYsQ0FGc0I7O0FBR25DLHlCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksT0FBTyxNQUEzQixFQUFtQyxHQUFuQyxFQUF3QztBQUNoQyw2QkFEZ0MsR0FDeEIsT0FBTyxDQUFQLENBRHdCO0FBRWhDLDZCQUZnQyxHQUV4QixXQUFZLE1BQU0sQ0FBTixDQUFaLENBRndCO0FBR2hDLDhCQUhnQyxHQUd2QixXQUFZLE1BQU0sQ0FBTixDQUFaLENBSHVCOztBQUlwQywrQkFBTyxJQUFQLEVBQWEsSUFBYixDQUFtQixDQUFFLEtBQUYsRUFBUyxNQUFULENBQW5CO0FBQ0g7QUFDSjtBQUNELHVCQUFPLE1BQVA7QUE1SFE7QUFBQTtBQStITixtQkEvSE0sdUJBK0hPLE1BL0hQO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBZ0lXLFNBQUssZUFBTCxFQWhJWDtBQUFBO0FBZ0lKLHNCQWhJSTtBQWlJSix5QkFqSUksR0FpSVEsT0FBTyxXQUFQLElBQXNCLElBakk5Qjs7QUFrSVIsdUJBQU87QUFDSCxpQ0FBYSxTQURWO0FBRUgsZ0NBQVksU0FBSyxPQUFMLENBQWMsU0FBZCxDQUZUO0FBR0gsNEJBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQUhMO0FBSUgsMkJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQUpKO0FBS0gsMkJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQUxKO0FBTUgsMkJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQU5KO0FBT0gsNEJBQVEsU0FQTDtBQVFILDRCQUFRLFNBUkw7QUFTSCw2QkFBUyxTQVROO0FBVUgsNkJBQVMsU0FWTjtBQVdILDRCQUFRLFdBQVksT0FBTyxNQUFQLENBQVosQ0FYTDtBQVlILDhCQUFVLFNBWlA7QUFhSCxrQ0FBYyxTQWJYO0FBY0gsK0JBQVcsU0FkUjtBQWVILGtDQUFjLFNBZlg7QUFnQkgsbUNBQWUsV0FBWSxPQUFPLFFBQVAsQ0FBWixDQWhCWjtBQWlCSCw0QkFBUTtBQWpCTCxpQkFBUDtBQWxJUTtBQUFBO0FBdUpOLG1CQXZKTSx1QkF1Sk8sTUF2SlA7QUFBQTtBQUFBO0FBQUE7O0FBdUplLGtCQXZKZixtRkF1SndCLEVBdkp4Qjs7QUF3SlIsbUJBQU8sU0FBSyxlQUFMLENBQXNCLE1BQXRCLENBQVA7QUF4SlE7QUEySk4sbUJBM0pNLHVCQTJKTyxNQTNKUCxFQTJKZSxJQTNKZixFQTJKcUIsSUEzSnJCLEVBMkoyQixNQTNKM0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUEySm1DLHFCQTNKbkMsbUZBMkoyQyxTQTNKM0M7QUEySnNELHNCQTNKdEQsbUZBMkorRCxFQTNKL0Q7QUE0Skosc0JBNUpJLEdBNEpLLEVBNUpMO0FBNkpKLHFCQTdKSSxHQTZKSTtBQUNSLDRCQUFRLFNBQUssUUFBTCxDQUFlLE1BQWY7QUFEQSxpQkE3Sko7O0FBZ0tSLG9CQUFJLFFBQVEsUUFBWixFQUFzQjtBQUNkLDhCQURjLEdBQ0QsT0FBTyxHQUFQLEdBQWEsSUFEWjs7QUFFbEIsMEJBQU0sWUFBTixJQUFzQixVQUF0QjtBQUNJLDJCQUhjLEdBR0osUUFBUSxLQUFULEdBQW1CLGFBQWEsR0FBaEMsR0FBdUMsRUFIbEM7O0FBSWxCLDBCQUFNLFVBQVMsUUFBZixJQUEyQixNQUEzQjtBQUNILGlCQUxELE1BS087QUFDSCwwQkFBTSxZQUFOLElBQXNCLElBQXRCO0FBQ0EsMEJBQU0sTUFBTixJQUFnQixLQUFoQjtBQUNBLDBCQUFNLFFBQU4sSUFBa0IsTUFBbEI7QUFDSDtBQXpLTyx1QkEwS2EsU0FBSyx5QkFBTCxDQUFnQyxTQUFLLE1BQUwsQ0FBYSxLQUFiLEVBQW9CLE1BQXBCLENBQWhDLENBMUtiO0FBQUE7QUEwS0osd0JBMUtJOztBQTJLUix1QkFBTztBQUNILDRCQUFRLFFBREw7QUFFSCwwQkFBTSxTQUFTLElBQVQsRUFBZSxRQUFmO0FBRkgsaUJBQVA7QUEzS1E7QUFBQTtBQWlMTixtQkFqTE0sdUJBaUxPLEVBakxQO0FBQUE7O0FBa0xSLG1CQUFPLFNBQUssNkJBQUwsQ0FBb0MsRUFBRSxNQUFNLEVBQVIsRUFBcEMsQ0FBUDtBQWxMUTtBQXFMTixlQXJMTSxtQkFxTEcsSUFyTEg7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBcUxTLG1CQXJMVCxtRkFxTGUsUUFyTGY7QUFxTHlCLHNCQXJMekIsbUZBcUxrQyxLQXJMbEM7QUFxTHlDLHNCQXJMekMsbUZBcUxrRCxFQXJMbEQ7QUFxTHNELHVCQXJMdEQsbUZBcUxnRSxTQXJMaEU7QUFxTDJFLG9CQXJMM0UsbUZBcUxrRixTQXJMbEY7QUFzTEosbUJBdExJLEdBc0xFLFNBQUssSUFBTCxDQUFVLEtBQVYsSUFBbUIsR0FBbkIsR0FBeUIsU0FBSyxhQUFMLENBQW9CLElBQXBCLEVBQTBCLE1BQTFCLENBdEwzQjtBQXVMSixxQkF2TEksR0F1TEksU0FBSyxJQUFMLENBQVcsTUFBWCxFQUFtQixTQUFLLGFBQUwsQ0FBb0IsSUFBcEIsQ0FBbkIsQ0F2TEo7O0FBd0xSLG9CQUFJLE9BQU8sUUFBWCxFQUFxQjtBQUNqQix3QkFBSSxPQUFPLElBQVAsQ0FBYSxLQUFiLEVBQW9CLE1BQXhCO0FBQ0ksK0JBQU8sTUFBTSxTQUFLLFNBQUwsQ0FBZ0IsS0FBaEIsQ0FBYjtBQURKO0FBRUgsaUJBSEQsTUFHTztBQUNDLHlCQURELEdBQ1MsU0FBSyxLQUFMLEdBQWMsUUFBZCxFQURUO0FBRUMsMEJBRkQsR0FFVSxDQUZWOztBQUdILHdCQUFJLE9BQU8sSUFBUCxDQUFhLEtBQWIsRUFBb0IsTUFBeEIsRUFBZ0M7QUFDNUIsK0JBQU8sU0FBSyxTQUFMLENBQWdCLFNBQUssT0FBTCxDQUFjLEtBQWQsQ0FBaEIsQ0FBUDtBQUNBLGlDQUFTLEtBQUssTUFBZDtBQUNIO0FBQ0csd0JBUEQsR0FPUSxRQUFRLEdBQVIsSUFBZSxRQUFRLEVBQXZCLENBUFI7O0FBUUgsOEJBQVU7QUFDTix3Q0FBZ0IsbUNBRFY7QUFFTiwwQ0FBa0IsTUFGWjtBQUdOLHNDQUFjLFNBQUssTUFIYjtBQUlOLHdDQUFnQixLQUpWO0FBS04sNENBQW9CLFNBQUssSUFBTCxDQUFXLFNBQUssTUFBTCxDQUFhLElBQWIsQ0FBWCxFQUErQixTQUFLLE1BQUwsQ0FBYSxTQUFLLE1BQWxCLENBQS9CO0FBTGQscUJBQVY7QUFPSDtBQTFNTyx1QkEyTWEsU0FBSyxLQUFMLENBQVksR0FBWixFQUFpQixNQUFqQixFQUF5QixPQUF6QixFQUFrQyxJQUFsQyxDQTNNYjtBQUFBO0FBMk1KLHdCQTNNSTs7QUE0TVIsb0JBQUksT0FBTyxRQUFYO0FBQ0ksMkJBQU8sUUFBUDtBQURKO0FBQUEsOEJBRUksYUFBYSxRQUZqQjs7QUFHSSxtQ0FBSSxTQUFTLFNBQVQsQ0FBSjtBQUNJLCtCQUFPLFFBQVA7QUFESjtBQUVKLDhCQUFNLElBQUksYUFBSixDQUFtQixTQUFLLEVBQUwsR0FBVSxHQUFWLEdBQWdCLFNBQUssSUFBTCxDQUFXLFFBQVgsQ0FBbkMsQ0FBTjtBQUZJO0FBSEo7QUE1TVE7QUFBQTtBQUFBLEtBQWhCOztBQXFOQTs7QUFFQSxRQUFJLFlBQVk7O0FBRVosY0FBTSxXQUZNO0FBR1osZ0JBQVEsV0FISTtBQUlaLHFCQUFhLElBSkQ7QUFLWixxQkFBYSxJQUxEO0FBTVosZ0JBQVE7QUFDSixvQkFBUSxxR0FESjtBQUVKLG1CQUFPLDBDQUZIO0FBR0osbUJBQU8sNkJBSEg7QUFJSixtQkFBTyxDQUNILGtDQURHLEVBRUgsaUNBRkc7QUFKSCxTQU5JO0FBZVosZUFBTztBQUNILHNCQUFVO0FBQ04sdUJBQU8sQ0FDSCxjQURHLEVBRUgsa0JBRkcsRUFHSCxvQkFIRztBQURELGFBRFA7QUFRSCx1QkFBVztBQUNQLHdCQUFRLENBQ0osZUFESSxFQUVKLHlCQUZJLEVBR0osbUJBSEksRUFJSixvQkFKSSxFQUtKLFdBTEksRUFNSixZQU5JLEVBT0osa0JBUEksRUFRSixtQkFSSSxFQVNKLDRCQVRJLEVBVUosMkJBVkk7QUFERDtBQVJSLFNBZks7QUFzQ1osbUJBQVc7QUFDUCx1QkFBVyxFQUFFLE1BQU0sU0FBUixFQUFtQixVQUFVLFNBQTdCLEVBQXdDLFFBQVEsS0FBaEQsRUFBdUQsU0FBUyxLQUFoRSxFQURKO0FBRVAsdUJBQVcsRUFBRSxNQUFNLFNBQVIsRUFBbUIsVUFBVSxTQUE3QixFQUF3QyxRQUFRLEtBQWhELEVBQXVELFNBQVMsS0FBaEUsRUFGSjtBQUdQLHVCQUFXLEVBQUUsTUFBTSxTQUFSLEVBQW1CLFVBQVUsU0FBN0IsRUFBd0MsUUFBUSxLQUFoRCxFQUF1RCxTQUFTLEtBQWhFLEVBSEo7QUFJUCx1QkFBVyxFQUFFLE1BQU0sU0FBUixFQUFtQixVQUFVLFNBQTdCLEVBQXdDLFFBQVEsS0FBaEQsRUFBdUQsU0FBUyxLQUFoRSxFQUpKO0FBS1AsdUJBQVcsRUFBRSxNQUFNLFNBQVIsRUFBbUIsVUFBVSxTQUE3QixFQUF3QyxRQUFRLEtBQWhELEVBQXVELFNBQVMsS0FBaEU7QUFMSixTQXRDQzs7QUE4Q04sb0JBOUNNLHdCQThDUSxNQTlDUjtBQUFBOztBQStDUixtQkFBTyxTQUFLLG9CQUFMLENBQTJCO0FBQzlCLHNCQUFNLFNBQUssUUFBTCxDQUFlLE1BQWY7QUFEd0IsYUFBM0IsQ0FBUDtBQS9DUTtBQW9ETixzQkFwRE0sMEJBb0RVLE1BcERWO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBcURjLFNBQUssb0JBQUwsQ0FBMkI7QUFDN0MsMEJBQU0sU0FBSyxRQUFMLENBQWUsTUFBZjtBQUR1QyxpQkFBM0IsQ0FyRGQ7QUFBQTtBQXFESix5QkFyREk7QUF3REoseUJBeERJLEdBd0RRLFNBQUssWUFBTCxFQXhEUjtBQXlESixzQkF6REksR0F5REs7QUFDVCw0QkFBUSxFQURDO0FBRVQsNEJBQVEsRUFGQztBQUdULGlDQUFhLFNBSEo7QUFJVCxnQ0FBWSxTQUFLLE9BQUwsQ0FBYyxTQUFkO0FBSkgsaUJBekRMO0FBK0RKLHFCQS9ESSxHQStESSxDQUFFLE1BQUYsRUFBVSxNQUFWLENBL0RKOztBQWdFUixxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLE1BQU0sTUFBMUIsRUFBa0MsR0FBbEMsRUFBdUM7QUFDL0Isd0JBRCtCLEdBQ3hCLE1BQU0sQ0FBTixDQUR3QjtBQUUvQiwwQkFGK0IsR0FFdEIsVUFBVSxJQUFWLENBRnNCOztBQUduQyx5QkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLE9BQU8sTUFBM0IsRUFBbUMsR0FBbkMsRUFBd0M7QUFDaEMsNkJBRGdDLEdBQ3hCLE9BQU8sQ0FBUCxDQUR3QjtBQUVoQyw2QkFGZ0MsR0FFeEIsV0FBWSxNQUFNLENBQU4sQ0FBWixDQUZ3QjtBQUdoQyw4QkFIZ0MsR0FHdkIsV0FBWSxNQUFNLENBQU4sQ0FBWixDQUh1Qjs7QUFJcEMsK0JBQU8sSUFBUCxFQUFhLElBQWIsQ0FBbUIsQ0FBRSxLQUFGLEVBQVMsTUFBVCxDQUFuQjtBQUNIO0FBQ0o7QUFDRCx1QkFBTyxNQUFQO0FBMUVRO0FBQUE7QUE2RVosbUJBN0VZLHVCQTZFQyxNQTdFRCxFQTZFUyxNQTdFVCxFQTZFaUI7QUFDekI7QUFDQSxnQkFBSSxZQUFZLEtBQUssWUFBTCxFQUFoQjtBQUNBLG1CQUFPO0FBQ0gsNkJBQWEsU0FEVjtBQUVILDRCQUFZLEtBQUssT0FBTCxDQUFjLFNBQWQsQ0FGVDtBQUdILHdCQUFRLFdBQVksT0FBTyxNQUFQLENBQVosQ0FITDtBQUlILHVCQUFPLFdBQVksT0FBTyxLQUFQLENBQVosQ0FKSjtBQUtILHVCQUFPLFdBQVksT0FBTyxLQUFQLENBQVosQ0FMSjtBQU1ILHVCQUFPLFdBQVksT0FBTyxLQUFQLENBQVosQ0FOSjtBQU9ILHdCQUFRLFdBQVksT0FBTyxNQUFQLENBQVosQ0FQTDtBQVFILHdCQUFRLFNBUkw7QUFTSCx5QkFBUyxTQVROO0FBVUgseUJBQVMsU0FWTjtBQVdILHdCQUFRLFdBQVksT0FBTyxNQUFQLENBQVosQ0FYTDtBQVlILDBCQUFVLFNBWlA7QUFhSCw4QkFBYyxTQWJYO0FBY0gsMkJBQVcsU0FkUjtBQWVILDhCQUFjLFNBZlg7QUFnQkgsK0JBQWUsV0FBWSxPQUFPLFFBQVAsQ0FBWixDQWhCWjtBQWlCSCx3QkFBUTtBQWpCTCxhQUFQO0FBbUJILFNBbkdXO0FBcUdOLG1CQXJHTSx1QkFxR08sTUFyR1A7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFzR0osaUJBdEdJLEdBc0dBLFNBQUssTUFBTCxDQUFhLE1BQWIsQ0F0R0E7QUFBQSx1QkF1R1csU0FBSyxpQkFBTCxDQUF3QjtBQUN2QywwQkFBTSxFQUFFLElBQUY7QUFEaUMsaUJBQXhCLENBdkdYO0FBQUE7QUF1R0osc0JBdkdJOztBQTBHUix1QkFBTyxTQUFLLFdBQUwsQ0FBa0IsTUFBbEIsRUFBMEIsQ0FBMUIsQ0FBUDtBQTFHUTtBQUFBO0FBNkdOLG1CQTdHTSx1QkE2R08sTUE3R1A7QUFBQTtBQUFBO0FBQUE7O0FBNkdlLGtCQTdHZixtRkE2R3dCLEVBN0d4Qjs7QUE4R1IsbUJBQU8sU0FBSyx1QkFBTCxDQUE4QixTQUFLLE1BQUwsQ0FBYTtBQUM5QyxzQkFBTSxTQUFLLFFBQUwsQ0FBZSxNQUFmO0FBRHdDLGFBQWIsRUFFbEMsTUFGa0MsQ0FBOUIsQ0FBUDtBQTlHUTtBQW1ITixtQkFuSE0sdUJBbUhPLE1BbkhQLEVBbUhlLElBbkhmLEVBbUhxQixJQW5IckIsRUFtSDJCLE1BbkgzQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFtSG1DLGlCQW5IbkMsbUZBbUgyQyxTQW5IM0M7QUFtSHNELGtCQW5IdEQsbUZBbUgrRCxFQW5IL0Q7QUFvSEosaUJBcEhJLEdBb0hJLEVBQUUsTUFBTSxTQUFLLFFBQUwsQ0FBZSxNQUFmLENBQVIsRUFwSEo7QUFxSEosa0JBckhJLEdBcUhLLGtCQUFrQixTQUFLLFVBQUwsQ0FBaUIsSUFBakIsQ0FySHZCOztBQXNIUixnQkFBSSxRQUFRLFFBQVosRUFBc0I7QUFDbEIsc0JBQU0sVUFBTixJQUFvQixNQUFwQjtBQUNBLDBCQUFVLFFBQVY7QUFDSCxhQUhELE1BR087QUFDSCxzQkFBTSxPQUFOLElBQWlCLEtBQWpCO0FBQ0Esc0JBQU0sUUFBTixJQUFrQixNQUFsQjtBQUNIO0FBQ0QsbUJBQU8sU0FBSyxNQUFMLEVBQWMsU0FBSyxNQUFMLENBQWEsS0FBYixFQUFvQixNQUFwQixDQUFkLENBQVA7QUE3SFE7QUFnSU4sbUJBaElNLHVCQWdJTyxFQWhJUDtBQUFBOztBQWlJUixtQkFBTyxTQUFLLHdCQUFMLENBQStCLEVBQUUsTUFBTSxFQUFSLEVBQS9CLENBQVA7QUFqSVE7QUFvSVosZUFwSVksbUJBb0lILElBcElHLEVBb0l3RjtBQUFBLGdCQUFyRixJQUFxRix1RUFBOUUsUUFBOEU7QUFBQSxnQkFBcEUsTUFBb0UsdUVBQTNELEtBQTJEO0FBQUEsZ0JBQXBELE1BQW9ELHVFQUEzQyxFQUEyQztBQUFBLGdCQUF2QyxPQUF1Qyx1RUFBN0IsU0FBNkI7QUFBQSxnQkFBbEIsSUFBa0IsdUVBQVgsU0FBVzs7QUFDaEc7QUFDQSxnQkFBSSxNQUFNLEtBQUssSUFBTCxDQUFVLEtBQVYsSUFBbUIsR0FBbkIsR0FBeUIsS0FBSyxhQUFMLENBQW9CLElBQXBCLEVBQTBCLE1BQTFCLENBQW5DO0FBQ0EsZ0JBQUksUUFBUSxLQUFLLElBQUwsQ0FBVyxNQUFYLEVBQW1CLEtBQUssYUFBTCxDQUFvQixJQUFwQixDQUFuQixDQUFaO0FBQ0EsZ0JBQUksUUFBUSxRQUFaLEVBQXNCO0FBQ2xCLG9CQUFJLE9BQU8sSUFBUCxDQUFhLEtBQWIsRUFBb0IsTUFBeEIsRUFDSSxPQUFPLE1BQU0sS0FBSyxTQUFMLENBQWdCLEtBQWhCLENBQWI7QUFDUCxhQUhELE1BR087QUFDSCxvQkFBSSxRQUFRLEtBQUssS0FBTCxFQUFaO0FBQ0EsdUJBQU8sS0FBSyxTQUFMLENBQWdCLEtBQUssTUFBTCxDQUFhLEVBQUUsU0FBUyxLQUFYLEVBQWIsRUFBaUMsS0FBakMsQ0FBaEIsQ0FBUDtBQUNBLG9CQUFJLE9BQU8sS0FBSyxHQUFMLEdBQVcsR0FBWCxHQUFpQixLQUFLLE1BQXRCLEdBQStCLEdBQS9CLEdBQXFDLEtBQUssUUFBckQ7QUFDQSxvQkFBSSxZQUFZLEtBQUssY0FBTCxDQUFxQixJQUFyQixDQUFoQjtBQUNBLDBCQUFVO0FBQ04sb0NBQWdCLG1DQURWO0FBRU4sc0NBQWtCLEtBQUssTUFGakI7QUFHTixxQ0FBaUIsV0FBVztBQUh0QixpQkFBVjtBQUtIO0FBQ0QsbUJBQU8sS0FBSyxLQUFMLENBQVksR0FBWixFQUFpQixNQUFqQixFQUF5QixPQUF6QixFQUFrQyxJQUFsQyxDQUFQO0FBQ0g7QUF2SlcsS0FBaEI7O0FBMEpBOztBQUVBLFFBQUksU0FBUzs7QUFFVCxjQUFNLFFBRkc7QUFHVCxnQkFBUSxRQUhDO0FBSVQscUJBQWEsSUFKSjtBQUtULHFCQUFhLENBQUUsSUFBRixFQUFRLElBQVIsRUFBYyxJQUFkLEVBQW9CLElBQXBCLENBTEosRUFLZ0M7QUFDekMsMkJBQW1CLElBTlY7QUFPVCxnQkFBUTtBQUNKLG9CQUFRLHFHQURKO0FBRUosbUJBQU8sd0JBRkg7QUFHSixtQkFBTyxvQkFISDtBQUlKLG1CQUFPO0FBSkgsU0FQQztBQWFULGVBQU87QUFDSCx1QkFBVztBQUNQLHVCQUFPLENBQ0gsaURBREcsRUFFSCxnQ0FGRyxFQUdILDRCQUhHO0FBREEsYUFEUjtBQVFILG9CQUFRO0FBQ0osd0JBQVEsQ0FDSixTQURJLEVBRUosV0FGSSxFQUdKLGNBSEksRUFJSixRQUpJLEVBS0osY0FMSSxFQU1KLDBCQU5JO0FBREo7QUFSTCxTQWJFO0FBZ0NULG1CQUFXO0FBQ1AsdUJBQVcsRUFBRSxNQUFNLFNBQVIsRUFBbUIsVUFBVSxTQUE3QixFQUF3QyxRQUFRLEtBQWhELEVBQXVELFNBQVMsS0FBaEUsRUFESjtBQUVQLHVCQUFXLEVBQUUsTUFBTSxTQUFSLEVBQW1CLFVBQVUsU0FBN0IsRUFBd0MsUUFBUSxLQUFoRCxFQUF1RCxTQUFTLEtBQWhFLEVBRko7QUFHUCx3QkFBWSxFQUFFLE1BQU0sVUFBUixFQUFvQixVQUFVLFVBQTlCLEVBQTBDLFFBQVEsTUFBbEQsRUFBMEQsU0FBUyxLQUFuRSxFQUhMO0FBSVAsdUJBQVcsRUFBRSxNQUFNLFNBQVIsRUFBbUIsVUFBVSxTQUE3QixFQUF3QyxRQUFRLEtBQWhELEVBQXVELFNBQVMsS0FBaEUsRUFKSjtBQUtQLHVCQUFXLEVBQUUsTUFBTSxTQUFSLEVBQW1CLFVBQVUsU0FBN0IsRUFBd0MsUUFBUSxLQUFoRCxFQUF1RCxTQUFTLEtBQWhFLEVBTEo7QUFNUCx1QkFBVyxFQUFFLE1BQU0sU0FBUixFQUFtQixVQUFVLFNBQTdCLEVBQXdDLFFBQVEsS0FBaEQsRUFBdUQsU0FBUyxLQUFoRSxFQU5KO0FBT1Asd0JBQVksRUFBRSxNQUFNLFVBQVIsRUFBb0IsVUFBVSxVQUE5QixFQUEwQyxRQUFRLE1BQWxELEVBQTBELFNBQVMsS0FBbkU7QUFQTCxTQWhDRjs7QUEwQ0gsb0JBMUNHO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUEyQ0QsMEJBM0NDLEdBMkNZLEVBM0NaOztBQTRDTCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFNBQUssVUFBTCxDQUFnQixNQUFwQyxFQUE0QyxHQUE1QyxFQUFpRDtBQUN6Qyw0QkFEeUMsR0FDOUIsU0FBSyxVQUFMLENBQWdCLENBQWhCLEVBQW1CLFdBQW5CLEVBRDhCOztBQUU3QywrQkFBVyxJQUFYLENBQWlCLFFBQWpCO0FBQ0g7QUEvQ0ksdUJBZ0RnQixTQUFLLGVBQUwsQ0FBc0I7QUFDdkMsa0NBQWMsV0FBVyxJQUFYLENBQWlCLEdBQWpCO0FBRHlCLGlCQUF0QixDQWhEaEI7QUFBQTtBQWdERCx3QkFoREM7QUFtREQsc0JBbkRDLEdBbURRLEVBQUUsUUFBUSxRQUFWLEVBbkRSOztBQW9ETCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFNBQVMsTUFBN0IsRUFBcUMsR0FBckMsRUFBMEM7QUFDbEMsMkJBRGtDLEdBQ3hCLFNBQVMsQ0FBVCxDQUR3QjtBQUVsQyw4QkFGa0MsR0FFdkIsUUFBUSxVQUFSLEVBQW9CLE1BQXBCLENBRnVCOztBQUd0QyxpQ0FBVyxXQUFTLFdBQVQsRUFBWDtBQUNJLDJCQUprQyxHQUl4QjtBQUNWLGdDQUFRLFFBQVEsV0FBUixDQURFO0FBRVYsZ0NBQVEsUUFBUSxTQUFSLElBQXFCLFFBQVEsVUFBUixDQUFyQixHQUEyQyxRQUFRLGFBQVIsQ0FGekM7QUFHVixpQ0FBUztBQUhDLHFCQUp3Qjs7QUFTdEMsNEJBQVEsT0FBUixJQUFtQixTQUFLLEdBQUwsQ0FBVSxRQUFRLE1BQVIsQ0FBVixFQUEyQixRQUFRLE1BQVIsQ0FBM0IsQ0FBbkI7QUFDQSwyQkFBTyxVQUFQLElBQW1CLE9BQW5CO0FBQ0g7QUFDRCx1QkFBTyxNQUFQO0FBaEVLO0FBQUE7QUFtRUgsc0JBbkVHLDBCQW1FYSxNQW5FYjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQW1FcUIsc0JBbkVyQixtRkFtRThCLEVBbkU5QjtBQW9FRCxpQkFwRUMsR0FvRUcsU0FBSyxNQUFMLENBQWEsTUFBYixDQXBFSDtBQUFBLHVCQXFFaUIsU0FBSyw0Q0FBTCxDQUFtRCxTQUFLLE1BQUwsQ0FBYTtBQUNsRiw0QkFBUSxFQUFFLElBQUYsQ0FEMEU7QUFFbEYsZ0NBQVksR0FGc0UsRUFFakU7QUFDakIsZ0NBQVksR0FIc0UsRUFHakU7QUFDakIsNkJBQVMsRUFKeUUsQ0FJckU7QUFKcUUsaUJBQWIsRUFLdEUsTUFMc0UsQ0FBbkQsQ0FyRWpCO0FBQUE7QUFxRUQseUJBckVDO0FBMkVELHlCQTNFQyxHQTJFVyxTQUFLLFlBQUwsRUEzRVg7QUE0RUQsc0JBNUVDLEdBNEVRO0FBQ1QsNEJBQVEsRUFEQztBQUVULDRCQUFRLEVBRkM7QUFHVCxpQ0FBYSxTQUhKO0FBSVQsZ0NBQVksU0FBSyxPQUFMLENBQWMsU0FBZDtBQUpILGlCQTVFUjtBQWtGRCxxQkFsRkMsR0FrRk8sQ0FBRSxNQUFGLEVBQVUsTUFBVixDQWxGUDs7QUFtRkwscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxNQUFNLE1BQTFCLEVBQWtDLEdBQWxDLEVBQXVDO0FBQy9CLHdCQUQrQixHQUN4QixNQUFNLENBQU4sQ0FEd0I7QUFFL0IsMEJBRitCLEdBRXRCLFVBQVUsSUFBVixDQUZzQjs7QUFHbkMseUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxPQUFPLE1BQTNCLEVBQW1DLEdBQW5DLEVBQXdDO0FBQ2hDLDZCQURnQyxHQUN4QixPQUFPLENBQVAsQ0FEd0I7QUFFaEMsNkJBRmdDLEdBRXhCLE1BQU0sT0FBTixDQUZ3QjtBQUdoQyw4QkFIZ0MsR0FHdkIsTUFBTSxZQUFOLENBSHVCOztBQUlwQywrQkFBTyxJQUFQLEVBQWEsSUFBYixDQUFtQixDQUFFLEtBQUYsRUFBUyxNQUFULENBQW5CO0FBQ0g7QUFDSjtBQUNELHVCQUFPLE1BQVA7QUE3Rks7QUFBQTtBQWdHVCxtQkFoR1MsdUJBZ0dJLE1BaEdKLEVBZ0dZLE1BaEdaLEVBZ0dvQjtBQUN6QixnQkFBSSxZQUFZLEtBQUssWUFBTCxFQUFoQjtBQUNBLG1CQUFPO0FBQ0gsNkJBQWEsU0FEVjtBQUVILDRCQUFZLEtBQUssT0FBTCxDQUFjLFNBQWQsQ0FGVDtBQUdILHdCQUFRLE9BQU8sTUFBUCxDQUhMO0FBSUgsdUJBQU8sT0FBTyxLQUFQLENBSko7QUFLSCx1QkFBTyxPQUFPLFlBQVAsQ0FMSjtBQU1ILHVCQUFPLE9BQU8sV0FBUCxDQU5KO0FBT0gsd0JBQVEsU0FQTDtBQVFILHdCQUFRLFNBUkw7QUFTSCx5QkFBUyxTQVROO0FBVUgseUJBQVMsU0FWTjtBQVdILHdCQUFRLFNBWEw7QUFZSCwwQkFBVSxTQVpQO0FBYUgsOEJBQWMsU0FiWDtBQWNILDJCQUFXLFNBZFI7QUFlSCw4QkFBYyxPQUFPLFlBQVAsQ0FmWDtBQWdCSCwrQkFBZSxPQUFPLGVBQVAsQ0FoQlo7QUFpQkgsd0JBQVE7QUFqQkwsYUFBUDtBQW1CQSxtQkFBTyxNQUFQO0FBQ0gsU0F0SFE7QUF3SEgsb0JBeEhHO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBeUhnQixTQUFLLGtDQUFMLEVBekhoQjtBQUFBO0FBeUhELHdCQXpIQztBQTBIRCxzQkExSEMsR0EwSFEsRUExSFI7O0FBMkhMLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksU0FBUyxNQUE3QixFQUFxQyxHQUFyQyxFQUEwQztBQUNsQywwQkFEa0MsR0FDekIsU0FBUyxDQUFULENBRHlCO0FBRWxDLHdCQUZrQyxHQUUzQixPQUFPLGNBQVAsRUFBdUIsTUFBdkIsRUFBK0IsV0FBL0IsRUFGMkI7QUFHbEMseUJBSGtDLEdBRzFCLE9BQU8sY0FBUCxFQUF1QixTQUF2QixFQUFrQyxXQUFsQyxFQUgwQjtBQUlsQywwQkFKa0MsR0FJekIsT0FBTyxHQUFQLEdBQWEsS0FKWTtBQUtsQywwQkFMa0MsR0FLekIsU0FBSyxPQUFMLENBQWEsTUFBYixDQUx5Qjs7QUFNdEMsMkJBQU8sTUFBUCxJQUFpQixTQUFLLFdBQUwsQ0FBa0IsTUFBbEIsRUFBMEIsTUFBMUIsQ0FBakI7QUFDSDtBQUNELHVCQUFPLE1BQVA7QUFuSUs7QUFBQTtBQXNJSCxtQkF0SUcsdUJBc0lVLE1BdElWO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQXVJZ0IsU0FBSyxrQ0FBTCxFQXZJaEI7QUFBQTtBQXVJRCx3QkF2SUM7QUF3SUQsdUJBeElDLEdBd0lTLEVBeElUOztBQXlJTCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFNBQVMsTUFBN0IsRUFBcUMsR0FBckMsRUFBMEM7QUFDbEMsMEJBRGtDLEdBQ3pCLFNBQVMsQ0FBVCxDQUR5QjtBQUVsQyx3QkFGa0MsR0FFM0IsT0FBTyxjQUFQLEVBQXVCLE1BQXZCLEVBQStCLFdBQS9CLEVBRjJCO0FBR2xDLHlCQUhrQyxHQUcxQixPQUFPLGNBQVAsRUFBdUIsU0FBdkIsRUFBa0MsV0FBbEMsRUFIMEI7QUFJbEMsMkJBSmtDLEdBSXpCLE9BQU8sR0FBUCxHQUFhLEtBSlk7O0FBS3RDLDRCQUFRLE9BQVIsSUFBa0IsTUFBbEI7QUFDSDtBQUNHLGlCQWhKQyxHQWdKRyxTQUFLLE1BQUwsQ0FBYSxNQUFiLENBaEpIO0FBaUpELHNCQWpKQyxHQWlKUSxFQUFFLFFBQUYsQ0FqSlI7O0FBa0pMLG9CQUFJLFVBQVUsT0FBZCxFQUF1QjtBQUNmLDJCQURlLEdBQ04sUUFBUSxNQUFSLENBRE07O0FBRW5CLDJCQUFPLFNBQUssV0FBTCxDQUFrQixPQUFsQixFQUEwQixDQUExQixDQUFQO0FBQ0gsaUJBSEQ7QUFJQSwwQkFBTSxJQUFJLGFBQUosQ0FBbUIsU0FBSyxFQUFMLEdBQVUsR0FBVixHQUFnQixNQUFoQixHQUF5QixtQkFBNUMsQ0FBTjtBQUpBO0FBbEpLO0FBQUE7QUF5SkgsbUJBekpHLHVCQXlKVSxNQXpKVjtBQUFBO0FBQUE7QUFBQTs7QUF5SmtCLGtCQXpKbEIsbUZBeUoyQixFQXpKM0I7O0FBMEpMLG1CQUFPLFNBQUssa0NBQUwsQ0FBeUMsU0FBSyxNQUFMLENBQWE7QUFDekQsd0JBQVEsU0FBSyxRQUFMLENBQWUsTUFBZixDQURpRDtBQUV6RCw0QkFBWTtBQUY2QyxhQUFiLEVBRzdDLE1BSDZDLENBQXpDLENBQVA7QUExSks7QUFnS0gsbUJBaEtHLHVCQWdLVSxNQWhLVixFQWdLa0IsSUFoS2xCLEVBZ0t3QixJQWhLeEIsRUFnSzhCLE1BaEs5QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQWdLc0MscUJBaEt0QyxtRkFnSzhDLFNBaEs5QztBQWdLeUQsc0JBaEt6RCxtRkFnS2tFLEVBaEtsRTtBQWlLRCxxQkFqS0MsR0FpS087QUFDUixvQ0FBZ0IsU0FBSyxRQUFMLENBQWUsTUFBZixDQURSO0FBRVIsOEJBQVUsTUFGRjtBQUdSLDZCQUFTLEtBSEQ7QUFJUixpQ0FBYyxRQUFRLEtBQVQsR0FBa0IsQ0FBbEIsR0FBc0I7QUFKM0IsaUJBaktQO0FBQUEsdUJBdUtnQixTQUFLLGdCQUFMLENBQXVCLFNBQUssTUFBTCxDQUFhLEtBQWIsRUFBb0IsTUFBcEIsQ0FBdkIsQ0F2S2hCO0FBQUE7QUF1S0Qsd0JBdktDOztBQXdLTCx1QkFBTztBQUNILDRCQUFRLFFBREw7QUFFSCwwQkFBTSxTQUFTLFFBQVQ7QUFGSCxpQkFBUDtBQXhLSztBQUFBO0FBOEtILG1CQTlLRyx1QkE4S1UsRUE5S1Y7QUFBQTs7QUErS0wsbUJBQU8sU0FBSyxtQkFBTCxDQUEwQixFQUFFLFdBQVcsRUFBYixFQUExQixDQUFQO0FBL0tLO0FBa0xILGVBbExHLG1CQWtMTSxJQWxMTjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBa0xZLG1CQWxMWixtRkFrTGtCLFFBbExsQjtBQWtMNEIsc0JBbEw1QixtRkFrTHFDLEtBbExyQztBQWtMNEMsc0JBbEw1QyxtRkFrTHFELEVBbExyRDtBQWtMeUQsdUJBbEx6RCxtRkFrTG1FLFNBbExuRTtBQWtMOEUsb0JBbEw5RSxtRkFrTHFGLFNBbExyRjtBQW1MRCxtQkFuTEMsR0FtTEssU0FBSyxJQUFMLENBQVUsS0FBVixJQUFtQixHQUFuQixHQUF5QixHQUF6QixHQUErQixHQUEvQixHQUFxQyxTQUFLLGFBQUwsQ0FBb0IsSUFBcEIsRUFBMEIsTUFBMUIsQ0FuTDFDO0FBb0xELHFCQXBMQyxHQW9MTyxTQUFLLElBQUwsQ0FBVyxNQUFYLEVBQW1CLFNBQUssYUFBTCxDQUFvQixJQUFwQixDQUFuQixDQXBMUDs7QUFxTEwsb0JBQUksT0FBTyxTQUFYLEVBQXNCO0FBQ2xCLHdCQUFJLE9BQU8sSUFBUCxDQUFhLEtBQWIsRUFBb0IsTUFBeEI7QUFDSSwrQkFBTyxNQUFNLFNBQUssU0FBTCxDQUFnQixLQUFoQixDQUFiO0FBREo7QUFFSCxpQkFIRCxNQUdPO0FBQ0MseUJBREQsR0FDUyxTQUFLLEtBQUwsRUFEVDtBQUVDLDJCQUZELEdBRVcsU0FBSyxNQUFMLENBQWE7QUFDdkIsaUNBQVMsU0FBSyxNQURTO0FBRXZCLGlDQUFTO0FBRmMscUJBQWIsRUFHWCxLQUhXLENBRlg7QUFNQyx3QkFORCxHQU1RLE1BQU0sUUFBTixLQUFvQixHQUFwQixHQUEwQixTQUFLLE1BTnZDOztBQU9ILDRCQUFRLFdBQVIsSUFBdUIsU0FBSyxJQUFMLENBQVcsU0FBSyxNQUFMLENBQWEsSUFBYixDQUFYLEVBQStCLFNBQUssTUFBTCxDQUFhLFNBQUssTUFBbEIsQ0FBL0IsQ0FBdkI7QUFDQSwyQkFBTyxTQUFLLElBQUwsQ0FBVyxPQUFYLENBQVA7QUFDQSw4QkFBVTtBQUNOLHdDQUFnQixrQkFEVjtBQUVOLDBDQUFrQixLQUFLO0FBRmpCLHFCQUFWO0FBSUg7QUFyTUksdUJBc01nQixTQUFLLEtBQUwsQ0FBWSxHQUFaLEVBQWlCLE1BQWpCLEVBQXlCLE9BQXpCLEVBQWtDLElBQWxDLENBdE1oQjtBQUFBO0FBc01ELHdCQXRNQzs7QUF1TUwsb0JBQUksWUFBWSxRQUFoQjtBQUNJLDBCQUFNLElBQUksYUFBSixDQUFtQixTQUFLLEVBQUwsR0FBVSxHQUFWLEdBQWdCLFNBQUssSUFBTCxDQUFXLFFBQVgsQ0FBbkMsQ0FBTjtBQURKLGlCQUVBLE9BQU8sUUFBUDtBQXpNSztBQUFBO0FBQUEsS0FBYjs7QUE2TUE7O0FBRUEsUUFBSSxnQkFBZ0I7O0FBRWhCLGNBQU0sZUFGVTtBQUdoQixnQkFBUSxlQUhRO0FBSWhCLHFCQUFhLEtBSkc7QUFLaEIsbUJBQVcsSUFMSztBQU1oQixxQkFBYSxJQU5HO0FBT2hCLDJCQUFtQixJQVBIO0FBUWhCLGdCQUFRO0FBQ0osb0JBQVEscUdBREo7QUFFSixtQkFBTywrQkFGSDtBQUdKLG1CQUFPLDJCQUhIO0FBSUosbUJBQU87QUFKSCxTQVJRO0FBY2hCLGVBQU87QUFDSCxzQkFBVTtBQUNOLHVCQUFPLENBQ0gsU0FERyxFQUVILGNBRkcsRUFHSCxTQUhHO0FBREQ7QUFEUCxTQWRTO0FBdUJoQixzQkFBYyxDQUNWLEtBRFUsRUFFVixLQUZVLEVBR1YsS0FIVSxFQUlWLEtBSlUsRUFLVixLQUxVLEVBTVYsS0FOVSxFQU9WLEtBUFUsRUFRVixLQVJVLEVBU1YsS0FUVSxFQVVWLEtBVlUsRUFXVixLQVhVLEVBWVYsS0FaVSxFQWFWLEtBYlUsRUFjVixLQWRVLEVBZVYsS0FmVSxDQXZCRTs7QUF5Q1Ysc0JBekNVLDBCQXlDTSxNQXpDTjtBQUFBO0FBQUE7QUFBQTs7QUF5Q2Msa0JBekNkLG1GQXlDdUIsRUF6Q3ZCOztBQTBDWixrQkFBTSxJQUFJLGFBQUosQ0FBbUIseURBQXlELFNBQUssRUFBakYsQ0FBTjtBQTFDWTtBQTZDVixvQkE3Q1U7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkE4Q1EsU0FBSyxlQUFMLEVBOUNSO0FBQUE7QUE4Q1IsdUJBOUNRO0FBK0NSLHNCQS9DUSxHQStDQyxFQS9DRDs7QUFnRFoscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxRQUFRLE1BQTVCLEVBQW9DLEdBQXBDLEVBQXlDO0FBQ2pDLDBCQURpQyxHQUN4QixRQUFRLENBQVIsQ0FEd0I7O0FBRXJDLHlCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksU0FBSyxVQUFMLENBQWdCLE1BQXBDLEVBQTRDLEdBQTVDLEVBQWlEO0FBQ3pDLDRCQUR5QyxHQUNsQyxPQUFPLFFBQVAsQ0FEa0M7QUFFekMsOEJBRnlDLEdBRWhDLE9BQU8sSUFBUCxDQUZnQztBQUd6Qyw2QkFIeUMsR0FHakMsU0FBSyxVQUFMLENBQWdCLENBQWhCLENBSGlDO0FBSXpDLCtCQUp5QyxHQUkvQixNQUFNLFdBQU4sRUFKK0I7QUFLekMsOEJBTHlDLEdBS2hDLE9BQU8sR0FBUCxHQUFhLEtBTG1CO0FBTXpDLDBCQU55QyxHQU1wQyxTQUFTLEdBQVQsR0FBZSxLQU5xQjs7QUFPN0MsK0JBQU8sSUFBUCxDQUFhO0FBQ1Qsa0NBQU0sRUFERztBQUVULHNDQUFVLE1BRkQ7QUFHVCxvQ0FBUSxJQUhDO0FBSVQscUNBQVMsS0FKQTtBQUtULHNDQUFVLE1BTEQ7QUFNVCx1Q0FBVyxPQU5GO0FBT1Qsb0NBQVE7QUFQQyx5QkFBYjtBQVNIO0FBQ0o7QUFDRCx1QkFBTyxNQUFQO0FBcEVZO0FBQUE7QUF1RVYsbUJBdkVVO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUF1RUcsd0JBdkVILG1GQXVFYyxLQXZFZDtBQUFBLHVCQXdFTixTQUFLLFdBQUwsRUF4RU07QUFBQTtBQXlFUix1QkF6RVEsR0F5RUUsRUF6RUY7O0FBMEVaLG9CQUFJLFFBQUo7QUFDSSw0QkFBUSxTQUFSLElBQXFCLFFBQXJCO0FBREosaUJBRUEsT0FBTyxTQUFLLGVBQUwsQ0FBc0IsT0FBdEIsQ0FBUDtBQTVFWTtBQUFBO0FBK0VoQixtQkEvRWdCLHVCQStFSCxNQS9FRyxFQStFSyxNQS9FTCxFQStFYTtBQUN6QixnQkFBSSxZQUFZLEtBQUssWUFBTCxFQUFoQjtBQUNBLGdCQUFJLGtCQUFrQixNQUF0QixFQUNJLElBQUksT0FBTyxjQUFQLENBQUosRUFDSSxZQUFZLFNBQVUsT0FBTyxjQUFQLENBQVYsSUFBb0MsSUFBaEQ7QUFDUixnQkFBSSxTQUFTLFNBQWI7QUFDQSxnQkFBSSxZQUFZLGdCQUFnQixPQUFPLFNBQVAsQ0FBaEM7QUFDQSxnQkFBSSxPQUFPLFNBQVAsQ0FBSixFQUNJLFNBQVMsV0FBWSxPQUFPLFNBQVAsQ0FBWixDQUFUO0FBQ0osZ0JBQUksUUFBUSxXQUFXLE9BQU8sU0FBUCxDQUF2QjtBQUNBLGdCQUFJLFNBQVMsU0FBYjtBQUNBLGdCQUFJLFlBQVksb0JBQWhCO0FBQ0EsZ0JBQUksT0FBTyxTQUFQLENBQUosRUFDSSxTQUFTLFdBQVksT0FBTyxTQUFQLENBQVosQ0FBVDtBQUNKLGdCQUFJLE9BQU8sU0FBWDtBQUNBLGdCQUFJLFNBQVMsTUFBYixFQUNJLElBQUksT0FBTyxLQUFQLENBQUosRUFDSSxPQUFPLFdBQVksT0FBTyxLQUFQLENBQVosQ0FBUDtBQUNSLG1CQUFPO0FBQ0gsNkJBQWEsU0FEVjtBQUVILDRCQUFZLEtBQUssT0FBTCxDQUFjLFNBQWQsQ0FGVDtBQUdILHdCQUFRLFNBSEw7QUFJSCx1QkFBTyxTQUpKO0FBS0gsdUJBQU8sU0FMSjtBQU1ILHVCQUFPLFNBTko7QUFPSCx3QkFBUSxTQVBMO0FBUUgsd0JBQVEsU0FSTDtBQVNILHlCQUFTLFNBVE47QUFVSCx5QkFBUyxTQVZOO0FBV0gsd0JBQVEsSUFYTDtBQVlILDBCQUFVLE1BWlA7QUFhSCw4QkFBYyxTQWJYO0FBY0gsMkJBQVcsU0FkUjtBQWVILDhCQUFjLFNBZlg7QUFnQkgsK0JBQWUsTUFoQlo7QUFpQkgsd0JBQVE7QUFqQkwsYUFBUDtBQW1CSCxTQXBIZTtBQXNIVixvQkF0SFU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBc0hJLHdCQXRISixtRkFzSGUsS0F0SGY7QUFBQSx1QkF1SE4sU0FBSyxXQUFMLEVBdkhNO0FBQUE7QUF3SFIsdUJBeEhRLEdBd0hFLEVBeEhGOztBQXlIWixvQkFBSSxRQUFKO0FBQ0ksNEJBQVEsU0FBUixJQUFxQixRQUFyQjtBQURKLGlCQXpIWSxPQTJIUyxTQUFLLGVBQUwsQ0FBc0IsT0FBdEIsQ0EzSFQ7QUFBQTtBQTJIUix3QkEzSFE7QUE0SFIsdUJBNUhRLEdBNEhFLEVBNUhGOztBQTZIWixxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFNBQVMsTUFBN0IsRUFBcUMsR0FBckMsRUFBMEM7QUFDbEMsMEJBRGtDLEdBQ3pCLFNBQVMsQ0FBVCxDQUR5QjtBQUVsQyxzQkFGa0MsR0FFN0IsT0FBTyxJQUFQLElBQWUsR0FBZixHQUFxQixRQUZRO0FBR2xDLDBCQUhrQyxHQUd6QixTQUFLLGFBQUwsQ0FBbUIsRUFBbkIsQ0FIeUI7QUFJbEMsMEJBSmtDLEdBSXpCLE9BQU8sUUFBUCxDQUp5Qjs7QUFLdEMsNEJBQVEsTUFBUixJQUFrQixTQUFLLFdBQUwsQ0FBa0IsTUFBbEIsRUFBMEIsTUFBMUIsQ0FBbEI7QUFDSDtBQUNELHVCQUFPLE9BQVA7QUFwSVk7QUFBQTtBQXVJVixtQkF2SVUsdUJBdUlHLE1BdklIO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQXdJTixTQUFLLFdBQUwsRUF4SU07QUFBQTtBQXlJUixpQkF6SVEsR0F5SUosU0FBSyxNQUFMLENBQWEsTUFBYixDQXpJSTtBQTBJUix1QkExSVEsR0EwSUU7QUFDViwrQkFBVyxFQUFFLE9BQUYsQ0FERDtBQUVWLDBCQUFNLEVBQUUsUUFBRjtBQUZJLGlCQTFJRjtBQUFBLHVCQThJUyxTQUFLLGlCQUFMLENBQXdCLE9BQXhCLENBOUlUO0FBQUE7QUE4SVIsd0JBOUlRO0FBK0lSLHNCQS9JUSxHQStJQyxTQUFTLENBQVQsQ0EvSUQ7O0FBZ0paLHVCQUFPLFNBQUssV0FBTCxDQUFrQixNQUFsQixFQUEwQixDQUExQixDQUFQO0FBaEpZO0FBQUE7QUFtSmhCLGVBbkpnQixtQkFtSlAsSUFuSk8sRUFtSm1GO0FBQUEsZ0JBQXBGLEdBQW9GLHVFQUE5RSxRQUE4RTtBQUFBLGdCQUFwRSxNQUFvRSx1RUFBM0QsS0FBMkQ7QUFBQSxnQkFBcEQsTUFBb0QsdUVBQTNDLEVBQTJDO0FBQUEsZ0JBQXZDLE9BQXVDLHVFQUE3QixTQUE2QjtBQUFBLGdCQUFsQixJQUFrQix1RUFBWCxTQUFXOztBQUMvRixnQkFBSSxNQUFNLEtBQUssSUFBTCxDQUFVLEtBQVYsSUFBbUIsR0FBbkIsR0FBeUIsS0FBSyxPQUE5QixHQUF3QyxHQUF4QyxHQUE4QyxLQUFLLGFBQUwsQ0FBb0IsSUFBcEIsRUFBMEIsTUFBMUIsQ0FBeEQ7QUFDQSxnQkFBSSxRQUFRLEtBQUssSUFBTCxDQUFXLE1BQVgsRUFBbUIsS0FBSyxhQUFMLENBQW9CLElBQXBCLENBQW5CLENBQVo7QUFDQSxnQkFBSSxPQUFPLElBQVAsQ0FBYSxLQUFiLEVBQW9CLE1BQXhCLEVBQ0ksT0FBTyxNQUFNLEtBQUssU0FBTCxDQUFnQixLQUFoQixDQUFiO0FBQ0osbUJBQU8sS0FBSyxLQUFMLENBQVksR0FBWixFQUFpQixNQUFqQixFQUF5QixPQUF6QixFQUFrQyxJQUFsQyxDQUFQO0FBQ0g7QUF6SmUsS0FBcEI7O0FBNEpBOztBQUVBLFFBQUksV0FBVzs7QUFFWCxjQUFNLFVBRks7QUFHWCxnQkFBUSxVQUhHO0FBSVgscUJBQWEsQ0FBRSxJQUFGLEVBQVEsSUFBUixDQUpGLEVBSWtCO0FBQzdCLHFCQUFhLElBTEY7QUFNWCxnQkFBUTtBQUNKLG9CQUFRLHFHQURKO0FBRUosbUJBQU8seUJBRkg7QUFHSixtQkFBTyxxQkFISDtBQUlKLG1CQUFPLENBQ0gsZ0NBREcsRUFFSCxnQ0FGRztBQUpILFNBTkc7QUFlWCxlQUFPO0FBQ0gsc0JBQVU7QUFDTix1QkFBTyxDQUNILFdBREcsRUFFSCxRQUZHLEVBR0gsY0FIRztBQURELGFBRFA7QUFRSCx1QkFBVztBQUNQLHdCQUFRLENBQ0osVUFESSxFQUVKLG1CQUZJLEVBR0oseUJBSEksRUFJSixZQUpJLEVBS0osVUFMSSxFQU1KLGFBTkksRUFPSixxQkFQSSxFQVFKLGVBUkksRUFTSixZQVRJLEVBVUosZUFWSSxFQVdKLGFBWEksRUFZSixXQVpJLEVBYUosb0JBYkksRUFjSiw0QkFkSTtBQUREO0FBUlIsU0FmSTtBQTBDWCxtQkFBVztBQUNQLHVCQUFXLEVBQUUsTUFBTSxTQUFSLEVBQW1CLFVBQVUsU0FBN0IsRUFBd0MsUUFBUSxLQUFoRCxFQUF1RCxTQUFTLEtBQWhFLEVBREo7QUFFUCx1QkFBVyxFQUFFLE1BQU0sU0FBUixFQUFtQixVQUFVLFNBQTdCLEVBQXdDLFFBQVEsS0FBaEQsRUFBdUQsU0FBUyxLQUFoRTtBQUZKLFNBMUNBOztBQStDTCxvQkEvQ0s7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQWdEYyxTQUFLLG1CQUFMLEVBaERkO0FBQUE7QUFnREgsd0JBaERHO0FBaURILHdCQWpERyxHQWlEUSxTQUFTLE1BQVQsQ0FqRFI7QUFrREgsc0JBbERHLEdBa0RNLEVBQUUsUUFBUSxRQUFWLEVBbEROOztBQW1EUCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFNBQUssVUFBTCxDQUFnQixNQUFwQyxFQUE0QyxHQUE1QyxFQUFpRDtBQUN6Qyw0QkFEeUMsR0FDOUIsU0FBSyxVQUFMLENBQWdCLENBQWhCLENBRDhCO0FBRXpDLDJCQUZ5QyxHQUUvQjtBQUNWLGdDQUFRLFNBREU7QUFFVixnQ0FBUSxTQUZFO0FBR1YsaUNBQVM7QUFIQyxxQkFGK0I7O0FBTzdDLHdCQUFJLFlBQVksUUFBaEIsRUFBMEI7QUFDdEIsZ0NBQVEsTUFBUixJQUFrQixTQUFTLFFBQVQsRUFBbUIsV0FBbkIsQ0FBbEI7QUFDQSxnQ0FBUSxNQUFSLElBQWtCLFNBQVMsUUFBVCxFQUFtQixVQUFuQixDQUFsQjtBQUNBLGdDQUFRLE9BQVIsSUFBbUIsU0FBUyxRQUFULEVBQW1CLFNBQW5CLENBQW5CO0FBQ0g7QUFDRCwyQkFBTyxRQUFQLElBQW1CLE9BQW5CO0FBQ0g7QUFDRCx1QkFBTyxNQUFQO0FBakVPO0FBQUE7QUFvRUwsc0JBcEVLLDBCQW9FVyxNQXBFWDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQW9FbUIsc0JBcEVuQixtRkFvRTRCLEVBcEU1QjtBQUFBLHVCQXFFYyxTQUFLLGtCQUFMLENBQXlCLFNBQUssTUFBTCxDQUFhO0FBQ3ZELG9DQUFnQixTQUFLLFFBQUwsQ0FBZSxNQUFmLENBRHVDO0FBRXZELHlDQUFxQjtBQUZrQyxpQkFBYixFQUczQyxNQUgyQyxDQUF6QixDQXJFZDtBQUFBO0FBcUVILHdCQXJFRztBQXlFSCx5QkF6RUcsR0F5RVMsU0FBUyxNQUFULENBekVUO0FBMEVILHlCQTFFRyxHQTBFUyxVQUFVLFdBQVYsSUFBeUIsSUExRWxDO0FBMkVILHNCQTNFRyxHQTJFTTtBQUNULDRCQUFRLEVBREM7QUFFVCw0QkFBUSxFQUZDO0FBR1QsaUNBQWEsU0FISjtBQUlULGdDQUFZLFNBQUssT0FBTCxDQUFjLFNBQWQ7QUFKSCxpQkEzRU47QUFpRkgscUJBakZHLEdBaUZLLENBQUUsTUFBRixFQUFVLE1BQVYsQ0FqRkw7O0FBa0ZQLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksTUFBTSxNQUExQixFQUFrQyxHQUFsQyxFQUF1QztBQUMvQix3QkFEK0IsR0FDeEIsTUFBTSxDQUFOLENBRHdCO0FBRS9CLDBCQUYrQixHQUV0QixVQUFVLElBQVYsQ0FGc0I7O0FBR25DLHlCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksT0FBTyxNQUEzQixFQUFtQyxHQUFuQyxFQUF3QztBQUNoQyw2QkFEZ0MsR0FDeEIsT0FBTyxDQUFQLENBRHdCO0FBRWhDLDZCQUZnQyxHQUV4QixNQUFNLE9BQU4sQ0FGd0I7QUFHaEMsOEJBSGdDLEdBR3ZCLE1BQU0sUUFBTixDQUh1Qjs7QUFJcEMsK0JBQU8sSUFBUCxFQUFhLElBQWIsQ0FBbUIsQ0FBRSxLQUFGLEVBQVMsTUFBVCxDQUFuQjtBQUNIO0FBQ0o7QUFDRCx1QkFBTyxNQUFQO0FBNUZPO0FBQUE7QUErRkwsbUJBL0ZLLHVCQStGUSxNQS9GUjtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBZ0djLFNBQUssZUFBTCxDQUFzQjtBQUN2QyxvQ0FBZ0IsU0FBSyxRQUFMLENBQWUsTUFBZjtBQUR1QixpQkFBdEIsQ0FoR2Q7QUFBQTtBQWdHSCx3QkFoR0c7QUFtR0gsc0JBbkdHLEdBbUdNLFNBQVMsTUFBVCxDQW5HTjtBQW9HSCx5QkFwR0csR0FvR1MsT0FBTyxXQUFQLElBQXNCLElBcEcvQjs7QUFxR1AsdUJBQU87QUFDSCxpQ0FBYSxTQURWO0FBRUgsZ0NBQVksU0FBSyxPQUFMLENBQWMsU0FBZCxDQUZUO0FBR0gsNEJBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQUhMO0FBSUgsMkJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQUpKO0FBS0gsMkJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQUxKO0FBTUgsMkJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQU5KO0FBT0gsNEJBQVEsU0FQTDtBQVFILDRCQUFRLFNBUkw7QUFTSCw2QkFBUyxTQVROO0FBVUgsNkJBQVMsU0FWTjtBQVdILDRCQUFRLFdBQVksT0FBTyxNQUFQLENBQVosQ0FYTDtBQVlILDhCQUFVLFNBWlA7QUFhSCxrQ0FBYyxTQWJYO0FBY0gsK0JBQVcsU0FkUjtBQWVILGtDQUFjLFNBZlg7QUFnQkgsbUNBQWUsV0FBWSxPQUFPLFFBQVAsQ0FBWixDQWhCWjtBQWlCSCw0QkFBUTtBQWpCTCxpQkFBUDtBQXJHTztBQUFBO0FBMEhMLG1CQTFISyx1QkEwSFEsTUExSFI7QUFBQTtBQUFBO0FBQUE7O0FBMEhnQixrQkExSGhCLG1GQTBIeUIsRUExSHpCOztBQTJIUCxtQkFBTyxTQUFLLHFCQUFMLENBQTRCLFNBQUssTUFBTCxDQUFhO0FBQzVDLGdDQUFnQixTQUFLLFFBQUwsQ0FBZSxNQUFmLENBRDRCO0FBRTVDLHNDQUFzQjtBQUZzQixhQUFiLEVBR2hDLE1BSGdDLENBQTVCLENBQVA7QUEzSE87QUFpSUwsbUJBaklLLHVCQWlJUSxNQWpJUixFQWlJZ0IsSUFqSWhCLEVBaUlzQixJQWpJdEIsRUFpSTRCLE1Bakk1QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBaUlvQyxxQkFqSXBDLG1GQWlJNEMsU0FqSTVDO0FBaUl1RCxzQkFqSXZELG1GQWlJZ0UsRUFqSWhFO0FBa0lILHNCQWxJRyxHQWtJTSxnQkFBZ0IsU0FBSyxVQUFMLENBQWlCLElBQWpCLENBbEl0QjtBQW1JSCxxQkFuSUcsR0FtSUs7QUFDUixvQ0FBZ0IsU0FBSyxRQUFMLENBQWUsTUFBZjtBQURSLGlCQW5JTDs7QUFzSVAsb0JBQUksUUFBUSxRQUFaLEVBQXNCO0FBQ2xCLHdCQUFJLFFBQVEsS0FBWjtBQUNJLDhCQUFNLE9BQU4sSUFBaUIsTUFBakIsQ0FESixDQUM2QjtBQUQ3QjtBQUdJLDhCQUFNLFFBQU4sSUFBa0IsTUFBbEI7QUFISixxQkFEa0IsQ0FJWTtBQUM5Qiw4QkFBVSxTQUFWO0FBQ0gsaUJBTkQsTUFNTztBQUNILDBCQUFNLFFBQU4sSUFBa0IsTUFBbEIsQ0FERyxDQUN1QjtBQUMxQiwwQkFBTSxPQUFOLElBQWlCLEtBQWpCO0FBQ0EsOEJBQVUsU0FBSyxVQUFMLENBQWlCLElBQWpCLENBQVY7QUFDSDtBQWhKTSx1QkFpSmMsU0FBSyxNQUFMLEVBQWMsS0FBSyxNQUFMLENBQWEsS0FBYixFQUFvQixNQUFwQixDQUFkLENBakpkO0FBQUE7QUFpSkgsd0JBakpHOztBQWtKUCx1QkFBTztBQUNILDRCQUFRLFFBREw7QUFFSCwwQkFBTSxTQUFTLE1BQVQsRUFBaUIsUUFBakI7QUFGSCxpQkFBUDtBQWxKTztBQUFBO0FBd0pMLG1CQXhKSyx1QkF3SlEsRUF4SlI7QUFBQTs7QUF5SlAsbUJBQU8sU0FBSyxzQkFBTCxDQUE2QixFQUFFLFdBQVcsRUFBYixFQUE3QixDQUFQO0FBekpPO0FBNEpMLGVBNUpLLG1CQTRKSSxJQTVKSjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQTRKVSxtQkE1SlYsbUZBNEpnQixRQTVKaEI7QUE0SjBCLHNCQTVKMUIsbUZBNEptQyxLQTVKbkM7QUE0SjBDLHNCQTVKMUMsbUZBNEptRCxFQTVKbkQ7QUE0SnVELHVCQTVKdkQsbUZBNEppRSxTQTVKakU7QUE0SjRFLG9CQTVKNUUsbUZBNEptRixTQTVKbkY7QUE2SkgsbUJBN0pHLEdBNkpHLFNBQUssSUFBTCxDQUFVLEtBQVYsSUFBbUIsR0FBbkIsR0FBeUIsSUE3SjVCOztBQThKUCxvQkFBSSxPQUFPLFFBQVgsRUFBcUI7QUFDakIsd0JBQUksT0FBTyxJQUFQLENBQWEsTUFBYixFQUFxQixNQUF6QjtBQUNJLCtCQUFPLE1BQU0sU0FBSyxTQUFMLENBQWdCLE1BQWhCLENBQWI7QUFESjtBQUVILGlCQUhELE1BR087QUFDSCx3QkFBSSxDQUFDLFNBQUssR0FBVjtBQUNJLDhCQUFNLElBQUksbUJBQUosQ0FBeUIsU0FBSyxFQUFMLEdBQVUsYUFBVixHQUEwQixTQUFLLEVBQS9CLEdBQW9DLG1DQUE3RCxDQUFOO0FBREoscUJBRUksS0FIRCxHQUdTLFNBQUssS0FBTCxHQUFjLFFBQWQsRUFIVDtBQUlDLHdCQUpELEdBSVEsUUFBUSxTQUFLLEdBQWIsR0FBbUIsU0FBSyxNQUpoQztBQUtDLDZCQUxELEdBS2EsU0FBSyxJQUFMLENBQVcsU0FBSyxNQUFMLENBQWEsSUFBYixDQUFYLEVBQStCLFNBQUssTUFBTCxDQUFhLFNBQUssTUFBbEIsQ0FBL0IsQ0FMYjs7QUFNSCwyQkFBTyxTQUFLLFNBQUwsQ0FBZ0IsU0FBSyxNQUFMLENBQWE7QUFDaEMsb0NBQVksU0FBSyxHQURlO0FBRWhDLGlDQUFTLEtBRnVCO0FBR2hDLHFDQUFhLFNBQUssTUFIYztBQUloQyxxQ0FBYSxVQUFVLFdBQVY7QUFKbUIscUJBQWIsRUFLcEIsTUFMb0IsQ0FBaEIsQ0FBUDtBQU1BLDhCQUFVO0FBQ04sd0NBQWlCO0FBRFgscUJBQVY7QUFHSDtBQWhMTSx1QkFpTGMsU0FBSyxLQUFMLENBQVksR0FBWixFQUFpQixNQUFqQixFQUF5QixPQUF6QixFQUFrQyxJQUFsQyxDQWpMZDtBQUFBO0FBaUxILHdCQWpMRzs7QUFrTFAsb0JBQUksV0FBVyxRQUFmO0FBQ0ksd0JBQUksU0FBUyxPQUFULENBQUo7QUFDSSw4QkFBTSxJQUFJLGFBQUosQ0FBbUIsU0FBSyxFQUFMLEdBQVUsR0FBVixHQUFnQixTQUFLLElBQUwsQ0FBVyxRQUFYLENBQW5DLENBQU47QUFESjtBQURKLGlCQUdBLE9BQU8sUUFBUDtBQXJMTztBQUFBO0FBQUEsS0FBZjs7QUF5TEE7O0FBRUEsUUFBSSxhQUFhOztBQUViLGNBQU0sWUFGTztBQUdiLGdCQUFRLFlBSEs7QUFJYixxQkFBYSxJQUpBLEVBSU07QUFDbkIscUJBQWEsSUFMQTtBQU1iLG1CQUFXLElBTkU7QUFPYixnQkFBUTtBQUNKLG9CQUFRLHFHQURKO0FBRUosbUJBQU8sMkJBRkg7QUFHSixtQkFBTyx1QkFISDtBQUlKLG1CQUFPLENBQ0gsMkJBREcsRUFFSCx1Q0FGRztBQUpILFNBUEs7QUFnQmIsZUFBTztBQUNILHNCQUFVO0FBQ04sdUJBQU8sQ0FDSCxvQ0FERyxFQUVILGtCQUZHLEVBR0gscUJBSEcsRUFJSCxtQkFKRyxFQUtILHFCQUxHLEVBTUgsb0JBTkcsRUFPSCxrQkFQRyxFQVFILGtCQVJHLEVBU0gsaUJBVEcsRUFVSCxpQkFWRztBQURELGFBRFA7QUFlSCx1QkFBVztBQUNQLHVCQUFPLENBQ0gsZ0JBREcsRUFFSCxlQUZHLEVBR0gsMEJBSEcsRUFJSCx3QkFKRyxFQUtILHVCQUxHLEVBTUgsaUNBTkcsRUFPSCwrQkFQRyxFQVFILHdDQVJHLEVBU0gseUNBVEcsRUFVSCwwQ0FWRyxFQVdILDJDQVhHLEVBWUgsMEJBWkcsRUFhSCxrQ0FiRyxFQWNILDJDQWRHLEVBZUgseUNBZkcsRUFnQkgsdUNBaEJHLEVBaUJILDJDQWpCRyxFQWtCSCw0Q0FsQkcsRUFtQkgsMENBbkJHLEVBb0JILDRDQXBCRyxFQXFCSCw0Q0FyQkcsRUFzQkgsNkNBdEJHLEVBdUJILDJDQXZCRyxFQXdCSCw2QkF4QkcsRUF5QkgsNkJBekJHLEVBMEJILDJCQTFCRyxFQTJCSCw2QkEzQkcsRUE0QkgsNkJBNUJHLEVBNkJILDJCQTdCRyxFQThCSCxtQ0E5QkcsRUErQkgsMkNBL0JHLEVBZ0NILHlDQWhDRyxFQWlDSCx1Q0FqQ0csRUFrQ0gsMkNBbENHLEVBbUNILDRDQW5DRyxFQW9DSCwwQ0FwQ0csRUFxQ0gsNENBckNHLEVBc0NILDRDQXRDRyxFQXVDSCw2Q0F2Q0csRUF3Q0gsMkNBeENHLEVBeUNILDRCQXpDRyxFQTBDSCx3QkExQ0csRUEyQ0gsd0JBM0NHLEVBNENILG9CQTVDRyxFQTZDSCxrQ0E3Q0csRUE4Q0gsd0NBOUNHLEVBK0NILGtDQS9DRyxFQWdESCx5QkFoREcsRUFpREgsNkJBakRHLEVBa0RILDBCQWxERyxFQW1ESCxjQW5ERyxFQW9ESCxxQkFwREcsRUFxREgsZ0NBckRHLEVBc0RILGdDQXRERyxFQXVESCxpQ0F2REcsRUF3REgsK0JBeERHLENBREE7QUEyRFAsd0JBQVEsQ0FDSixPQURJLEVBRUosZ0JBRkksRUFHSix1QkFISSxFQUlKLG9CQUpJLEVBS0osaUJBTEksRUFNSixRQU5JLEVBT0osbUJBUEksRUFRSiwyQkFSSSxFQVNKLDJDQVRJLEVBVUosZ0RBVkksRUFXSiwyQ0FYSSxFQVlKLGdEQVpJLEVBYUosc0JBYkksRUFjSixxQkFkSSxFQWVKLG9DQWZJLEVBZ0JKLG9DQWhCSSxDQTNERDtBQTZFUCx1QkFBTyxDQUNILHVCQURHLEVBRUgsbUJBRkcsRUFHSCxxQ0FIRyxFQUlILHVCQUpHLEVBS0gsdUJBTEcsRUFNSCwyQkFORyxFQU9ILDRCQVBHLEVBUUgseUNBUkcsRUFTSCxxQ0FURyxFQVVILHlDQVZHLEVBV0gsZ0NBWEcsRUFZSCw2QkFaRyxFQWFILG1CQWJHLEVBY0gsd0JBZEcsRUFlSCw4QkFmRyxFQWdCSCxzQkFoQkcsRUFpQkgsMENBakJHLEVBa0JILGtDQWxCRyxDQTdFQTtBQWlHUCwwQkFBVSxDQUNOLGlCQURNLEVBRU4sYUFGTSxFQUdOLGlFQUhNLEVBSU4sb0RBSk0sRUFLTixvQ0FMTSxFQU1OLG9DQU5NLEVBT04saUVBUE0sRUFRTiwrQkFSTSxFQVNOLDRCQVRNLEVBVU4sMkJBVk0sRUFXTix1Q0FYTSxFQVlOLDBEQVpNO0FBakdIO0FBZlIsU0FoQk07QUFnSmIsbUJBQVc7QUFDUCx1QkFBVyxFQUFFLE1BQU0sU0FBUixFQUFtQixVQUFVLFNBQTdCLEVBQXdDLFFBQVEsS0FBaEQsRUFBdUQsU0FBUyxLQUFoRTtBQURKLFNBaEpFOztBQW9KUCxvQkFwSk87QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkFxSlksU0FBSyxpQ0FBTCxFQXJKWjtBQUFBO0FBcUpMLHdCQXJKSztBQXNKTCx1QkF0SkssR0FzSkssU0FBUyxTQUFULENBdEpMO0FBdUpMLG9CQXZKSyxHQXVKRTtBQUNQLDRCQUFRLFFBQVEsc0JBQVIsQ0FERDtBQUVQLDRCQUFRLFFBQVEsb0JBQVIsQ0FGRDtBQUdQLDZCQUFTLFFBQVEsa0JBQVI7QUFIRixpQkF2SkY7QUE0Skwsb0JBNUpLLEdBNEpFO0FBQ1AsNEJBQVEsUUFBUSxzQkFBUixDQUREO0FBRVAsNEJBQVEsUUFBUSxvQkFBUixDQUZEO0FBR1AsNkJBQVMsUUFBUSxrQkFBUjtBQUhGLGlCQTVKRjtBQWlLTCxzQkFqS0ssR0FpS0k7QUFDVCw0QkFBUSxPQURDO0FBRVQsMkJBQU8sSUFGRTtBQUdULDJCQUFPO0FBSEUsaUJBaktKOztBQXNLVCx1QkFBTyxNQUFQO0FBdEtTO0FBQUE7QUF5S1Asc0JBektPLDBCQXlLUyxNQXpLVDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBeUtpQixzQkF6S2pCLG1GQXlLMEIsRUF6SzFCO0FBQUEsdUJBMEtRLFNBQUssMEJBQUwsQ0FBaUMsTUFBakMsQ0ExS1I7QUFBQTtBQTBLTCxvQkExS0s7QUFBQSx1QkEyS1EsU0FBSywwQkFBTCxDQUFpQyxNQUFqQyxDQTNLUjtBQUFBO0FBMktMLG9CQTNLSztBQTRLTCx5QkE1S0ssR0E0S087QUFDWiw0QkFBUSxLQUFLLFNBQUwsQ0FESTtBQUVaLDRCQUFRLEtBQUssU0FBTDtBQUZJLGlCQTVLUDtBQWdMTCx5QkFoTEssR0FnTE8sU0FBSyxZQUFMLEVBaExQO0FBaUxMLHNCQWpMSyxHQWlMSTtBQUNULDRCQUFRLEVBREM7QUFFVCw0QkFBUSxFQUZDO0FBR1QsaUNBQWEsU0FISjtBQUlULGdDQUFZLFNBQUssT0FBTCxDQUFjLFNBQWQ7QUFKSCxpQkFqTEo7QUF1TEwscUJBdkxLLEdBdUxHLENBQUUsTUFBRixFQUFVLE1BQVYsQ0F2TEg7O0FBd0xULHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksTUFBTSxNQUExQixFQUFrQyxHQUFsQyxFQUF1QztBQUMvQix3QkFEK0IsR0FDeEIsTUFBTSxDQUFOLENBRHdCO0FBRS9CLDBCQUYrQixHQUV0QixVQUFVLElBQVYsQ0FGc0I7O0FBR25DLHlCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksT0FBTyxNQUEzQixFQUFtQyxHQUFuQyxFQUF3QztBQUNoQyw2QkFEZ0MsR0FDeEIsT0FBTyxDQUFQLENBRHdCO0FBRWhDLDZCQUZnQyxHQUV4QixNQUFNLE1BQU4sQ0FGd0I7QUFHaEMsOEJBSGdDLEdBR3ZCLE1BQU0sS0FBTixDQUh1Qjs7QUFJcEMsK0JBQU8sSUFBUCxFQUFhLElBQWIsQ0FBbUIsQ0FBRSxLQUFGLEVBQVMsTUFBVCxDQUFuQjtBQUNIO0FBQ0o7QUFDRCx1QkFBTyxNQUFQO0FBbE1TO0FBQUE7QUFxTVAsbUJBck1PLHVCQXFNTSxNQXJNTjtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBc01ZLFNBQUssdUJBQUwsRUF0TVo7QUFBQTtBQXNNTCx3QkF0TUs7QUF1TUwsc0JBdk1LLEdBdU1JLFNBQVMsU0FBVCxDQXZNSjtBQXdNTCx5QkF4TUssR0F3TU8sT0FBTyxXQUFQLENBeE1QOztBQXlNVCx1QkFBTztBQUNILGlDQUFhLFNBRFY7QUFFSCxnQ0FBWSxTQUFLLE9BQUwsQ0FBYyxTQUFkLENBRlQ7QUFHSCw0QkFBUSxXQUFZLE9BQU8sTUFBUCxDQUFaLENBSEw7QUFJSCwyQkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBSko7QUFLSCwyQkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBTEo7QUFNSCwyQkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBTko7QUFPSCw0QkFBUSxTQVBMO0FBUUgsNEJBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQVJMO0FBU0gsNkJBQVMsU0FUTjtBQVVILDZCQUFTLFNBVk47QUFXSCw0QkFBUSxXQUFZLE9BQU8sV0FBUCxDQUFaLENBWEw7QUFZSCw4QkFBVSxTQVpQO0FBYUgsa0NBQWMsU0FiWDtBQWNILCtCQUFXLFNBZFI7QUFlSCxrQ0FBYyxXQUFZLE9BQU8sWUFBUCxDQUFaLENBZlg7QUFnQkgsbUNBQWUsV0FBWSxPQUFPLFlBQVAsQ0FBWixDQWhCWjtBQWlCSCw0QkFBUTtBQWpCTCxpQkFBUDtBQXpNUztBQUFBO0FBOE5QLG1CQTlOTyx1QkE4Tk0sTUE5Tk47QUFBQTtBQUFBO0FBQUE7O0FBOE5jLGtCQTlOZCxtRkE4TnVCLEVBOU52Qjs7QUErTlQsbUJBQU8sU0FBSyx1QkFBTCxDQUE4QixNQUE5QixDQUFQO0FBL05TO0FBa09QLG1CQWxPTyx1QkFrT00sTUFsT04sRUFrT2MsSUFsT2QsRUFrT29CLElBbE9wQixFQWtPMEIsTUFsTzFCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQWtPa0MscUJBbE9sQyxtRkFrTzBDLFNBbE8xQztBQWtPcUQsc0JBbE9yRCxtRkFrTzhELEVBbE85RDtBQW1PTCxzQkFuT0ssR0FtT0ksd0JBbk9KO0FBb09MLHFCQXBPSyxHQW9PRyxFQXBPSDs7QUFxT1Qsb0JBQUksUUFBUSxRQUFaLEVBQXNCO0FBQ2xCLDhCQUFVLFlBQVksU0FBSyxVQUFMLENBQWlCLElBQWpCLENBQXRCO0FBQ0Esd0JBQUksUUFBUSxLQUFaO0FBQ0ksOEJBQU0sU0FBTixJQUFtQixNQUFuQjtBQURKO0FBR0ksOEJBQU0sUUFBTixJQUFrQixNQUFsQjtBQUhKO0FBSUgsaUJBTkQsTUFNTztBQUNDLDZCQURELEdBQ2MsUUFBUSxLQUFULEdBQWtCLEtBQWxCLEdBQTBCLEtBRHZDOztBQUVILDhCQUFVLFlBQVksS0FBdEI7QUFDQSwwQkFBTSxNQUFOLElBQWdCLEtBQWhCO0FBQ0EsMEJBQU0sS0FBTixJQUFlLE1BQWY7QUFDSDtBQWhQUSx1QkFpUFksU0FBSyxNQUFMLEVBQWMsS0FBSyxNQUFMLENBQWEsS0FBYixFQUFvQixNQUFwQixDQUFkLENBalBaO0FBQUE7QUFpUEwsd0JBalBLOztBQWtQVCx1QkFBTztBQUNILDRCQUFRLFFBREw7QUFFSCwwQkFBTSxTQUFTLFNBQVQsRUFBb0IsU0FBcEI7QUFGSCxpQkFBUDtBQWxQUztBQUFBO0FBd1BQLG1CQXhQTyx1QkF3UE0sRUF4UE47QUFBQTtBQUFBOztBQXlQVCxrQkFBTSxJQUFJLGFBQUosQ0FBbUIsU0FBSyxFQUFMLEdBQVUsOENBQTdCLENBQU47QUFDSSxrQkExUEssR0EwUEksMkNBMVBKLEVBMFBpRDs7QUFDMUQsbUJBQU8sU0FBSyxNQUFMLEVBQWMsRUFBRSxXQUFXLEVBQWIsRUFBZCxDQUFQO0FBM1BTO0FBOFBQLGVBOVBPLG1CQThQRSxJQTlQRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUE4UFEsbUJBOVBSLG1GQThQYyxRQTlQZDtBQThQd0Isc0JBOVB4QixtRkE4UGlDLEtBOVBqQztBQThQd0Msc0JBOVB4QyxtRkE4UGlELEVBOVBqRDtBQThQcUQsdUJBOVByRCxtRkE4UCtELFNBOVAvRDtBQThQMEUsb0JBOVAxRSxtRkE4UGlGLFNBOVBqRjtBQStQTCxtQkEvUEssR0ErUEMsU0FBSyxJQUFMLENBQVUsS0FBVixJQUFtQixHQUFuQixHQUF5QixTQUFLLE9BQTlCLEdBQXdDLEdBQXhDLEdBQThDLFNBQUssYUFBTCxDQUFvQixJQUFwQixFQUEwQixNQUExQixDQS9QL0M7QUFnUUwscUJBaFFLLEdBZ1FHLFNBQUssSUFBTCxDQUFXLE1BQVgsRUFBbUIsU0FBSyxhQUFMLENBQW9CLElBQXBCLENBQW5CLENBaFFIOztBQWlRVCxvQkFBSSxPQUFPLFNBQVgsRUFBc0I7QUFDbEIsOEJBQVUsRUFBRSxpQkFBaUIsU0FBSyxNQUF4QixFQUFWO0FBQ0Esd0JBQUksT0FBTyxJQUFQLENBQWEsS0FBYixFQUFvQixNQUF4QixFQUFnQztBQUM1QiwrQkFBTyxTQUFLLElBQUwsQ0FBVyxLQUFYLENBQVA7QUFDQSxnQ0FBUSxjQUFSLElBQTBCLGtCQUExQjtBQUNIO0FBQ0o7QUF2UVEsdUJBd1FZLFNBQUssS0FBTCxDQUFZLEdBQVosRUFBaUIsTUFBakIsRUFBeUIsT0FBekIsRUFBa0MsSUFBbEMsQ0F4UVo7QUFBQTtBQXdRTCx3QkF4UUs7QUFBQSwwQkF5UUwsYUFBYSxRQXpRUjs7QUEwUUwsK0JBQUksU0FBUyxTQUFULENBQUo7QUFDSSwyQkFBTyxRQUFQO0FBREo7QUFFSiwwQkFBTSxJQUFJLGFBQUosQ0FBbUIsU0FBSyxFQUFMLEdBQVUsR0FBVixHQUFnQixTQUFLLElBQUwsQ0FBVyxRQUFYLENBQW5DLENBQU47QUFGSTtBQTFRSztBQUFBO0FBQUEsS0FBakI7O0FBZ1JBOztBQUVBLFFBQUksV0FBVzs7QUFFWCxjQUFNLFVBRks7QUFHWCxnQkFBUSxVQUhHO0FBSVgscUJBQWEsSUFKRixFQUlRO0FBQ25CLHFCQUFhLElBTEY7QUFNWCxnQkFBUTtBQUNKLG9CQUFRLHFHQURKO0FBRUosbUJBQU87QUFDSCwwQkFBVSxvQ0FEUDtBQUVILDJCQUFXO0FBRlIsYUFGSDtBQU1KLG1CQUFPLDZCQU5IO0FBT0osbUJBQU87QUFQSCxTQU5HO0FBZVgsZUFBTztBQUNILHNCQUFVO0FBQ04sdUJBQU8sQ0FDSCxRQURHO0FBREQsYUFEUDtBQU1ILHVCQUFXO0FBQ1Asd0JBQVEsQ0FDSixRQURJLEVBRUosZ0JBRkksRUFHSixpQkFISSxFQUlKLGNBSkksRUFLSixXQUxJLEVBTUosWUFOSSxFQU9KLGFBUEksRUFRSixXQVJJLEVBU0osUUFUSSxFQVVKLFNBVkksRUFXSixlQVhJLEVBWUosZ0JBWkk7QUFERDtBQU5SLFNBZkk7QUFzQ1gsbUJBQVc7QUFDUCx1QkFBVyxFQUFFLE1BQU0sS0FBUixFQUFlLFVBQVUsU0FBekIsRUFBb0MsUUFBUSxLQUE1QyxFQUFtRCxTQUFTLEtBQTVELEVBREo7QUFFUCx1QkFBVyxFQUFFLE1BQU0sS0FBUixFQUFlLFVBQVUsU0FBekIsRUFBb0MsUUFBUSxLQUE1QyxFQUFtRCxTQUFTLEtBQTVELEVBRko7QUFHUCx3QkFBWSxFQUFFLE1BQU0sTUFBUixFQUFnQixVQUFVLFVBQTFCLEVBQXNDLFFBQVEsTUFBOUMsRUFBc0QsU0FBUyxLQUEvRDtBQUhMLFNBdENBOztBQTRDTCxvQkE1Q0s7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkE2Q2MsU0FBSyxxQkFBTCxFQTdDZDtBQUFBO0FBNkNILHdCQTdDRztBQThDSCxzQkE5Q0csR0E4Q00sRUFBRSxRQUFRLFFBQVYsRUE5Q047O0FBK0NQLG9CQUFJLGFBQWEsUUFBakIsRUFBMkI7QUFDbkIsNEJBRG1CLEdBQ1IsU0FBUyxTQUFULENBRFE7QUFFbkIsOEJBRm1CLEdBRU4sT0FBTyxJQUFQLENBQWEsUUFBYixDQUZNOztBQUd2Qix5QkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFdBQVcsTUFBL0IsRUFBdUMsR0FBdkMsRUFBNEM7QUFDcEMsZ0NBRG9DLEdBQ3pCLFdBQVcsQ0FBWCxDQUR5QjtBQUVwQyxpQ0FGb0MsR0FFeEIsU0FBUyxXQUFULEVBRndCO0FBR3BDLCtCQUhvQyxHQUcxQjtBQUNWLG9DQUFRLFNBQVMsUUFBVCxDQURFO0FBRVYsb0NBQVEsU0FGRTtBQUdWLHFDQUFTLFNBQVMsUUFBVDtBQUhDLHlCQUgwQjs7QUFReEMsNEJBQUksYUFBYSxLQUFqQjtBQUNJLHdDQUFZLE1BQVo7QUFESix5QkFFQSxPQUFPLFNBQVAsSUFBb0IsT0FBcEI7QUFDSDtBQUNKO0FBQ0QsdUJBQU8sTUFBUDtBQS9ETztBQUFBO0FBa0VMLHNCQWxFSywwQkFrRVcsTUFsRVg7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBa0VtQixzQkFsRW5CLG1GQWtFNEIsRUFsRTVCO0FBbUVILGlCQW5FRyxHQW1FQyxTQUFLLE1BQUwsQ0FBYSxNQUFiLENBbkVEO0FBQUEsdUJBb0VlLFNBQUssaUJBQUwsQ0FBd0IsU0FBSyxNQUFMLENBQWE7QUFDdkQsZ0NBQVksRUFBRSxJQUFGO0FBRDJDLGlCQUFiLEVBRTNDLE1BRjJDLENBQXhCLENBcEVmO0FBQUE7QUFvRUgseUJBcEVHO0FBdUVILHlCQXZFRyxHQXVFUyxTQUFLLFlBQUwsRUF2RVQ7QUF3RUgsc0JBeEVHLEdBd0VNO0FBQ1QsNEJBQVEsRUFEQztBQUVULDRCQUFRLEVBRkM7QUFHVCxpQ0FBYSxTQUhKO0FBSVQsZ0NBQVksU0FBSyxPQUFMLENBQWMsU0FBZDtBQUpILGlCQXhFTjtBQThFSCxxQkE5RUcsR0E4RUssRUFBRSxRQUFRLFdBQVYsRUFBdUIsUUFBUSxZQUEvQixFQTlFTDtBQStFSCxvQkEvRUcsR0ErRUksT0FBTyxJQUFQLENBQWEsS0FBYixDQS9FSjs7QUFnRlAscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxLQUFLLE1BQXpCLEVBQWlDLEdBQWpDLEVBQXNDO0FBQzlCLHVCQUQ4QixHQUN4QixLQUFLLENBQUwsQ0FEd0I7QUFFOUIsd0JBRjhCLEdBRXZCLE1BQU0sR0FBTixDQUZ1QjtBQUc5QiwwQkFIOEIsR0FHckIsVUFBVSxJQUFWLENBSHFCOztBQUlsQyx5QkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLE9BQU8sTUFBM0IsRUFBbUMsR0FBbkMsRUFBd0M7QUFDaEMsNkJBRGdDLEdBQ3hCLE9BQU8sQ0FBUCxDQUR3QjtBQUVoQyw2QkFGZ0MsR0FFeEIsV0FBWSxNQUFNLE1BQU4sQ0FBWixDQUZ3QjtBQUdoQyw4QkFIZ0MsR0FHdkIsV0FBWSxNQUFNLFFBQU4sQ0FBWixDQUh1Qjs7QUFJcEMsK0JBQU8sR0FBUCxFQUFZLElBQVosQ0FBa0IsQ0FBRSxLQUFGLEVBQVMsTUFBVCxDQUFsQjtBQUNIO0FBQ0o7QUFDRCx1QkFBTyxNQUFQLElBQWlCLFNBQUssTUFBTCxDQUFhLE9BQU8sTUFBUCxDQUFiLEVBQTZCLENBQTdCLEVBQWdDLElBQWhDLENBQWpCO0FBQ0EsdUJBQU8sTUFBUCxJQUFpQixTQUFLLE1BQUwsQ0FBYSxPQUFPLE1BQVAsQ0FBYixFQUE2QixDQUE3QixDQUFqQjtBQUNBLHVCQUFPLE1BQVA7QUE3Rk87QUFBQTtBQWdHTCxtQkFoR0ssdUJBZ0dRLE1BaEdSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQWlHYyxTQUFLLGVBQUwsRUFqR2Q7QUFBQTtBQWlHSCx3QkFqR0c7QUFrR0gsa0JBbEdHLEdBa0dFLFNBQUssUUFBTCxDQUFlLE1BQWYsQ0FsR0Y7O0FBbUdQLHFCQUFLLEdBQUcsV0FBSCxFQUFMO0FBQ0ksc0JBcEdHLEdBb0dNLFNBQVMsUUFBVCxFQUFtQixFQUFuQixDQXBHTjtBQXFHSCx5QkFyR0csR0FxR1MsU0FBSyxZQUFMLEVBckdUOztBQXNHUCx1QkFBTztBQUNILGlDQUFhLFNBRFY7QUFFSCxnQ0FBWSxTQUFLLE9BQUwsQ0FBYyxTQUFkLENBRlQ7QUFHSCw0QkFBUSxTQUhMO0FBSUgsMkJBQU8sU0FKSjtBQUtILDJCQUFPLFdBQVksT0FBTyxLQUFQLENBQVosQ0FMSjtBQU1ILDJCQUFPLFdBQVksT0FBTyxLQUFQLENBQVosQ0FOSjtBQU9ILDRCQUFRLFNBUEw7QUFRSCw0QkFBUSxTQVJMO0FBU0gsNkJBQVMsU0FUTjtBQVVILDZCQUFTLFNBVk47QUFXSCw0QkFBUSxXQUFZLE9BQU8sTUFBUCxDQUFaLENBWEw7QUFZSCw4QkFBVSxTQVpQO0FBYUgsa0NBQWMsU0FiWDtBQWNILCtCQUFXLFNBZFI7QUFlSCxrQ0FBYyxTQWZYO0FBZ0JILG1DQUFlLFNBaEJaO0FBaUJILDRCQUFRO0FBakJMLGlCQUFQO0FBdEdPO0FBQUE7QUEySEwsbUJBM0hLLHVCQTJIUSxNQTNIUjtBQUFBO0FBQUE7QUFBQTs7QUEySGdCLGtCQTNIaEIsbUZBMkh5QixFQTNIekI7O0FBNEhQLG1CQUFPLFNBQUssd0JBQUwsQ0FBK0IsU0FBSyxNQUFMLENBQWE7QUFDL0MsNEJBQVksU0FBSyxRQUFMLENBQWUsTUFBZjtBQURtQyxhQUFiLEVBRW5DLE1BRm1DLENBQS9CLENBQVA7QUE1SE87QUFpSUwsbUJBaklLLHVCQWlJUSxNQWpJUixFQWlJZ0IsSUFqSWhCLEVBaUlzQixJQWpJdEIsRUFpSTRCLE1Bakk1QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFpSW9DLGlCQWpJcEMsbUZBaUk0QyxTQWpJNUM7QUFpSXVELGtCQWpJdkQsbUZBaUlnRSxFQWpJaEU7QUFrSUgsa0JBbElHLEdBa0lNLGtCQUFrQixTQUFLLFVBQUwsQ0FBaUIsSUFBakIsQ0FsSXhCOztBQW1JUCxnQkFBSSxRQUFRLFFBQVo7QUFDSSxzQkFBTSxJQUFJLGFBQUosQ0FBbUIsU0FBSyxFQUFMLEdBQVUsMkJBQTdCLENBQU47QUFESixhQUVJLEtBcklHLEdBcUlLO0FBQ1IsNEJBQVksU0FBSyxRQUFMLENBQWUsTUFBZixDQURKO0FBRVIsMEJBQVUsTUFGRjtBQUdSLHdCQUFRO0FBSEEsYUFySUw7O0FBMElQLG1CQUFPLFNBQUssTUFBTCxFQUFjLFNBQUssTUFBTCxDQUFhLEtBQWIsRUFBb0IsTUFBcEIsQ0FBZCxDQUFQO0FBMUlPO0FBNklMLG1CQTdJSyx1QkE2SVEsRUE3SVI7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUE2SVksa0JBN0laLG1GQTZJcUIsRUE3SXJCOztBQThJUCxrQkFBTSxJQUFJLGFBQUosQ0FBbUIsU0FBSyxFQUFMLEdBQVUsOENBQTdCLENBQU47QUFDSSxrQkEvSUcsR0ErSU0sa0JBL0lOOztBQWdKUCxtQkFBTyxTQUFLLE1BQUwsRUFBYyxFQUFFLE1BQU0sRUFBUixFQUFkLENBQVA7QUFoSk87QUFtSkwsZUFuSkssbUJBbUpJLElBbkpKO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQW1KVSxlQW5KVixtRkFtSmdCLFFBbkpoQjtBQW1KMEIsa0JBbkoxQixtRkFtSm1DLEtBbkpuQztBQW1KMEMsa0JBbkoxQyxtRkFtSm1ELEVBbkpuRDtBQW1KdUQsbUJBbkp2RCxtRkFtSmlFLFNBbkpqRTtBQW1KNEUsZ0JBbko1RSxtRkFtSm1GLFNBbkpuRjs7QUFvSlAsZ0JBQUksQ0FBQyxTQUFLLE1BQVY7QUFDSSxzQkFBTSxJQUFJLG1CQUFKLENBQXlCLFNBQUssRUFBTCxHQUFVLG1DQUFuQyxDQUFOO0FBREosYUFFSSxHQXRKRyxHQXNKRyxTQUFLLElBQUwsQ0FBVSxLQUFWLEVBQWlCLEdBQWpCLElBQXdCLEdBQXhCLEdBQThCLElBdEpqQzs7QUF1SlAsZ0JBQUksT0FBTyxTQUFYLEVBQXNCO0FBQ2QscUJBRGMsR0FDTixTQUFLLEtBQUwsRUFETTs7QUFFbEIsdUJBQU8sU0FBSyxJQUFMLENBQVcsU0FBSyxNQUFMLENBQWEsRUFBRSxTQUFTLEtBQVgsRUFBYixFQUFpQyxNQUFqQyxDQUFYLENBQVA7QUFDQSwwQkFBVTtBQUNOLG9DQUFnQixrQkFEVjtBQUVOLHNDQUFrQixLQUFLLE1BRmpCO0FBR04sMkJBQU8sU0FBSyxNQUhOO0FBSU4sNEJBQVEsU0FBSyxJQUFMLENBQVcsU0FBSyxNQUFMLENBQWEsSUFBYixDQUFYLEVBQStCLFNBQUssTUFBTCxDQUFhLFNBQUssTUFBbEIsQ0FBL0IsRUFBMEQsUUFBMUQ7QUFKRixpQkFBVjtBQU1IO0FBQ0QsbUJBQU8sU0FBSyxLQUFMLENBQVksR0FBWixFQUFpQixNQUFqQixFQUF5QixPQUF6QixFQUFrQyxJQUFsQyxDQUFQO0FBaktPO0FBQUEsS0FBZjs7QUFxS0E7O0FBRUEsUUFBSSxZQUFZOztBQUVaLGNBQU0sV0FGTTtBQUdaLGdCQUFRLFdBSEk7QUFJWixxQkFBYSxJQUpEO0FBS1oscUJBQWEsSUFMRCxFQUtPO0FBQ25CLDJCQUFtQixJQU5QO0FBT1osZ0JBQVE7QUFDSixvQkFBUSxxR0FESjtBQUVKLG1CQUFPLGlDQUZIO0FBR0osbUJBQU8sNkJBSEg7QUFJSixtQkFBTyxDQUNILDhDQURHLEVBRUgsOENBRkc7QUFKSCxTQVBJO0FBZ0JaLGVBQU87QUFDSCxzQkFBVTtBQUNOLHVCQUFPLENBQ0gsZUFERyxFQUVILGVBRkcsRUFHSCxZQUhHLEVBSUgsaUJBSkcsRUFLSCxvQkFMRyxFQU1ILHlCQU5HLEVBT0gsZ0JBUEcsRUFRSCx3QkFSRyxFQVNILHVCQVRHLEVBVUgsK0JBVkcsRUFXSCxzQkFYRyxFQVlILDhCQVpHLEVBYUgsb0NBYkc7QUFERCxhQURQO0FBa0JILHVCQUFXO0FBQ1Asd0JBQVEsQ0FDSixhQURJLEVBRUosWUFGSSxFQUdKLG1CQUhJLEVBSUosZUFKSSxFQUtKLGlCQUxJLEVBTUosaUJBTkksRUFPSixXQVBJLEVBUUosYUFSSSxFQVNKLGdCQVRJLEVBVUosZ0JBVkk7QUFERDtBQWxCUixTQWhCSzs7QUFrRE4sb0JBbERNO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBbURhLFNBQUssZ0JBQUwsRUFuRGI7QUFBQTtBQW1ESix3QkFuREk7QUFvREosc0JBcERJLEdBb0RLLEVBcERMO0FBcURKLHVCQXJESSxHQXFETSxTQUFTLE1BQVQsQ0FyRE47O0FBc0RSLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksUUFBUSxNQUE1QixFQUFvQyxHQUFwQyxFQUF5QztBQUNqQywwQkFEaUMsR0FDeEIsUUFBUSxDQUFSLENBRHdCO0FBRWpDLHNCQUZpQyxHQUU1QixPQUFPLGFBQVAsQ0FGNEI7QUFHakMsMEJBSGlDLEdBR3hCLE9BQU8sT0FBUCxDQUh3QjtBQUFBLHFDQUlmLE9BQU8sS0FBUCxDQUFjLEdBQWQsQ0FKZTtBQUFBO0FBSS9CLHdCQUorQjtBQUl6Qix5QkFKeUI7O0FBS3JDLDJCQUFPLElBQVAsQ0FBYTtBQUNULDhCQUFNLEVBREc7QUFFVCxrQ0FBVSxNQUZEO0FBR1QsZ0NBQVEsSUFIQztBQUlULGlDQUFTLEtBSkE7QUFLVCxnQ0FBUTtBQUxDLHFCQUFiO0FBT0g7QUFDRCx1QkFBTyxNQUFQO0FBbkVRO0FBQUE7QUFzRU4sc0JBdEVNLDBCQXNFVSxNQXRFVjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFzRWtCLHNCQXRFbEIsbUZBc0UyQixFQXRFM0I7QUFBQSx1QkF1RUYsU0FBSyxXQUFMLEVBdkVFO0FBQUE7QUFBQSx1QkF3RWEsU0FBSyx1QkFBTCxDQUE4QixTQUFLLE1BQUwsQ0FBYTtBQUM1RCwwQkFBTSxTQUFLLFFBQUwsQ0FBZSxNQUFmO0FBRHNELGlCQUFiLEVBRWhELE1BRmdELENBQTlCLENBeEViO0FBQUE7QUF3RUosd0JBeEVJO0FBMkVKLHlCQTNFSSxHQTJFUSxTQUFTLE1BQVQsQ0EzRVI7QUE0RUoseUJBNUVJLEdBNEVRLFNBQUssWUFBTCxFQTVFUjtBQTZFSixzQkE3RUksR0E2RUs7QUFDVCw0QkFBUSxFQURDO0FBRVQsNEJBQVEsRUFGQztBQUdULGlDQUFhLFNBSEo7QUFJVCxnQ0FBWSxTQUFLLE9BQUwsQ0FBYyxTQUFkO0FBSkgsaUJBN0VMO0FBbUZKLHFCQW5GSSxHQW1GSSxFQUFFLFFBQVEsS0FBVixFQUFpQixRQUFRLE1BQXpCLEVBbkZKO0FBb0ZKLG9CQXBGSSxHQW9GRyxPQUFPLElBQVAsQ0FBYSxLQUFiLENBcEZIOztBQXFGUixxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLEtBQUssTUFBekIsRUFBaUMsR0FBakMsRUFBc0M7QUFDOUIsdUJBRDhCLEdBQ3hCLEtBQUssQ0FBTCxDQUR3QjtBQUU5Qix3QkFGOEIsR0FFdkIsTUFBTSxHQUFOLENBRnVCO0FBRzlCLDBCQUg4QixHQUdyQixVQUFVLElBQVYsQ0FIcUI7O0FBSWxDLHlCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksT0FBTyxNQUEzQixFQUFtQyxHQUFuQyxFQUF3QztBQUNoQyw2QkFEZ0MsR0FDeEIsT0FBTyxDQUFQLENBRHdCO0FBRWhDLDZCQUZnQyxHQUV4QixXQUFZLE1BQU0sT0FBTixDQUFaLENBRndCO0FBR2hDLDhCQUhnQyxHQUd2QixXQUFZLE1BQU0sT0FBTixDQUFaLENBSHVCOztBQUlwQywrQkFBTyxHQUFQLEVBQVksSUFBWixDQUFrQixDQUFFLEtBQUYsRUFBUyxNQUFULENBQWxCO0FBQ0g7QUFDSjtBQUNELHVCQUFPLE1BQVA7QUFoR1E7QUFBQTtBQW1HWixtQkFuR1ksdUJBbUdDLE1BbkdELEVBbUdTLE1BbkdULEVBbUdpQjtBQUN6QixnQkFBSSxZQUFZLEtBQUssWUFBTCxFQUFoQjtBQUNBLG1CQUFPO0FBQ0gsd0JBQVEsTUFETDtBQUVILDZCQUFhLFNBRlY7QUFHSCw0QkFBWSxLQUFLLE9BQUwsQ0FBYyxTQUFkLENBSFQ7QUFJSCx3QkFBUSxXQUFZLE9BQU8sTUFBUCxDQUFaLENBSkw7QUFLSCx1QkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBTEo7QUFNSCx1QkFBTyxXQUFZLE9BQU8sVUFBUCxDQUFaLENBTko7QUFPSCx1QkFBTyxXQUFZLE9BQU8sVUFBUCxDQUFaLENBUEo7QUFRSCx3QkFBUSxTQVJMO0FBU0gsd0JBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQVRMO0FBVUgseUJBQVMsV0FBWSxPQUFPLE9BQVAsQ0FBWixDQVZOO0FBV0gseUJBQVMsU0FYTjtBQVlILHdCQUFRLFdBQVksT0FBTyxXQUFQLENBQVosQ0FaTDtBQWFILDBCQUFVLFdBQVksT0FBTyxRQUFQLENBQVosQ0FiUDtBQWNILDhCQUFjLFNBZFg7QUFlSCwyQkFBVyxTQWZSO0FBZ0JILDhCQUFjLFdBQVksT0FBTyxZQUFQLENBQVosQ0FoQlg7QUFpQkgsK0JBQWUsV0FBWSxPQUFPLFFBQVAsQ0FBWjtBQWpCWixhQUFQO0FBbUJILFNBeEhXO0FBMEhOLG1CQTFITSx1QkEwSE8sTUExSFA7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQTJIRixTQUFLLFdBQUwsRUEzSEU7QUFBQTtBQTRISixpQkE1SEksR0E0SEEsU0FBSyxNQUFMLENBQWEsTUFBYixDQTVIQTtBQUFBLHVCQTZIYSxTQUFLLGlCQUFMLENBQXdCO0FBQ3pDLDBCQUFNLEVBQUUsSUFBRjtBQURtQyxpQkFBeEIsQ0E3SGI7QUFBQTtBQTZISix3QkE3SEk7QUFnSUosc0JBaElJLEdBZ0lLLFNBQVMsTUFBVCxDQWhJTDs7QUFpSVIsdUJBQU8sU0FBSyxXQUFMLENBQWtCLE1BQWxCLEVBQTBCLENBQTFCLENBQVA7QUFqSVE7QUFBQTtBQW9JTixvQkFwSU07QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkFxSUYsU0FBSyxXQUFMLEVBcklFO0FBQUE7QUFBQSx1QkFzSWEsU0FBSyxnQkFBTCxFQXRJYjtBQUFBO0FBc0lKLHdCQXRJSTtBQXVJSixzQkF2SUksR0F1SUssRUF2SUw7QUF3SUosdUJBeElJLEdBd0lNLFNBQVMsTUFBVCxDQXhJTjs7QUF5SVIscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxRQUFRLE1BQTVCLEVBQW9DLEdBQXBDLEVBQXlDO0FBQ2pDLDBCQURpQyxHQUN4QixRQUFRLENBQVIsQ0FEd0I7QUFFakMsc0JBRmlDLEdBRTVCLE9BQU8sYUFBUCxDQUY0QjtBQUdqQywwQkFIaUMsR0FHeEIsU0FBSyxhQUFMLENBQW1CLEVBQW5CLENBSHdCO0FBSWpDLDBCQUppQyxHQUl4QixPQUFPLFFBQVAsQ0FKd0I7O0FBS3JDLDJCQUFPLE1BQVAsSUFBaUIsU0FBSyxXQUFMLENBQWtCLE1BQWxCLEVBQTBCLE1BQTFCLENBQWpCO0FBQ0g7QUFDRCx1QkFBTyxNQUFQO0FBaEpRO0FBQUE7QUFtSlosa0JBbkpZLHNCQW1KQSxLQW5KQSxFQW1KTyxNQW5KUCxFQW1KZTtBQUN2QixnQkFBSSxZQUFZLE1BQU0sV0FBTixJQUFxQixJQUFyQztBQUNBLG1CQUFPO0FBQ0gsc0JBQU0sU0FESDtBQUVILHdCQUFRLEtBRkw7QUFHSCw2QkFBYSxTQUhWO0FBSUgsNEJBQVksS0FBSyxPQUFMLENBQWMsU0FBZCxDQUpUO0FBS0gsMEJBQVUsT0FBTyxRQUFQLENBTFA7QUFNSCx3QkFBUSxTQU5MO0FBT0gsd0JBQVEsTUFBTSxNQUFOLEVBQWMsV0FBZCxFQVBMO0FBUUgseUJBQVMsTUFBTSxPQUFOLENBUk47QUFTSCwwQkFBVSxNQUFNLFFBQU47QUFUUCxhQUFQO0FBV0gsU0FoS1c7QUFrS04sbUJBbEtNLHVCQWtLTyxNQWxLUDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQWtLZSxzQkFsS2YsbUZBa0t3QixFQWxLeEI7QUFBQSx1QkFtS0YsU0FBSyxXQUFMLEVBbktFO0FBQUE7QUFvS0osaUJBcEtJLEdBb0tBLFNBQUssTUFBTCxDQUFhLE1BQWIsQ0FwS0E7QUFBQSx1QkFxS2EsU0FBSyw2QkFBTCxDQUFvQyxTQUFLLE1BQUwsQ0FBYTtBQUNsRSwwQkFBTSxFQUFFLElBQUYsQ0FENEQ7QUFFbEUsNkJBQVMsRUFGeUQsQ0FFckQ7QUFGcUQsaUJBQWIsRUFHdEQsTUFIc0QsQ0FBcEMsQ0FyS2I7QUFBQTtBQXFLSix3QkFyS0k7QUF5S0osc0JBektJLEdBeUtLLFNBQVMsTUFBVCxDQXpLTDs7QUEwS1IsdUJBQU8sU0FBSyxXQUFMLENBQWtCLE1BQWxCLEVBQTBCLENBQTFCLENBQVA7QUExS1E7QUFBQTtBQTZLTixvQkE3S007QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBOEtGLFNBQUssV0FBTCxFQTlLRTtBQUFBO0FBQUEsdUJBK0thLFNBQUsscUJBQUwsRUEvS2I7QUFBQTtBQStLSix3QkEvS0k7QUFnTEosd0JBaExJLEdBZ0xPLFNBQVMsTUFBVCxDQWhMUDtBQWlMSixzQkFqTEksR0FpTEssRUFBRSxRQUFRLFFBQVYsRUFqTEw7O0FBa0xSLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksU0FBUyxNQUE3QixFQUFxQyxHQUFyQyxFQUEwQztBQUNsQywyQkFEa0MsR0FDeEIsU0FBUyxDQUFULENBRHdCO0FBRWxDLDRCQUZrQyxHQUV2QixRQUFRLFFBQVIsQ0FGdUI7QUFHbEMsMkJBSGtDLEdBR3hCO0FBQ1YsZ0NBQVEsUUFBUSxXQUFSLENBREU7QUFFVixnQ0FBUSxTQUZFO0FBR1YsaUNBQVMsUUFBUSxPQUFSO0FBSEMscUJBSHdCOztBQVF0Qyw0QkFBUSxNQUFSLElBQWtCLFFBQVEsT0FBUixJQUFtQixRQUFRLE1BQVIsQ0FBckM7QUFDQSwyQkFBTyxRQUFQLElBQW1CLE9BQW5CO0FBQ0g7QUFDRCx1QkFBTyxNQUFQO0FBN0xRO0FBQUE7QUFnTU4sbUJBaE1NLHVCQWdNTyxNQWhNUCxFQWdNZSxJQWhNZixFQWdNcUIsSUFoTXJCLEVBZ00yQixNQWhNM0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFnTW1DLHFCQWhNbkMsbUZBZ00yQyxTQWhNM0M7QUFnTXNELHNCQWhNdEQsbUZBZ00rRCxFQWhNL0Q7QUFBQSx1QkFpTUYsU0FBSyxXQUFMLEVBak1FO0FBQUE7QUFrTUoscUJBbE1JLEdBa01JO0FBQ1IsOEJBQVUsU0FBSyxRQUFMLENBQWUsTUFBZixDQURGO0FBRVIsNEJBQVEsU0FBSyxVQUFMLENBQWlCLElBQWpCLENBRkE7QUFHUiw0QkFBUSxLQUhBO0FBSVIsOEJBQVU7QUFKRixpQkFsTUo7QUFBQSx1QkF3TWEsU0FBSyxzQkFBTCxDQUE2QixTQUFLLE1BQUwsQ0FBYSxLQUFiLEVBQW9CLE1BQXBCLENBQTdCLENBeE1iO0FBQUE7QUF3TUosd0JBeE1JOztBQXlNUix1QkFBTztBQUNILDRCQUFRLFFBREw7QUFFSCwwQkFBTSxTQUFTLE1BQVQsRUFBaUIsU0FBakIsRUFBNEIsUUFBNUI7QUFGSCxpQkFBUDtBQXpNUTtBQUFBO0FBK01OLG1CQS9NTSx1QkErTU8sRUEvTVA7QUFBQTs7QUFBQTtBQUFBLHVCQWdORixTQUFLLFdBQUwsRUFoTkU7QUFBQTtBQWlOUix1QkFBTyxTQUFLLHNCQUFMLENBQTZCO0FBQ2hDLDRCQUFRLE9BRHdCO0FBRWhDLCtCQUFXO0FBRnFCLGlCQUE3QixDQUFQO0FBak5RO0FBQUE7QUF1Tk4sZUF2Tk0sbUJBdU5HLElBdk5IO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUF1TlMsbUJBdk5ULG1GQXVOZSxRQXZOZjtBQXVOeUIsc0JBdk56QixtRkF1TmtDLEtBdk5sQztBQXVOeUMsc0JBdk56QyxtRkF1TmtELEVBdk5sRDtBQXVOc0QsdUJBdk50RCxtRkF1TmdFLFNBdk5oRTtBQXVOMkUsb0JBdk4zRSxtRkF1TmtGLFNBdk5sRjtBQXdOSixtQkF4TkksR0F3TkUsU0FBSyxJQUFMLENBQVUsS0FBVixJQUFtQixHQUFuQixHQUF5QixTQUFLLGFBQUwsQ0FBb0IsSUFBcEIsRUFBMEIsTUFBMUIsQ0F4TjNCO0FBeU5KLHFCQXpOSSxHQXlOSSxTQUFLLElBQUwsQ0FBVyxNQUFYLEVBQW1CLFNBQUssYUFBTCxDQUFvQixJQUFwQixDQUFuQixDQXpOSjs7QUEwTlIsb0JBQUksT0FBTyxRQUFYLEVBQXFCO0FBQ2pCLHdCQUFJLE9BQU8sSUFBUCxDQUFhLEtBQWIsRUFBb0IsTUFBeEI7QUFDSSwrQkFBTyxNQUFNLFNBQUssU0FBTCxDQUFnQixLQUFoQixDQUFiO0FBREo7QUFFSCxpQkFIRCxNQUdPO0FBQ0MseUJBREQsR0FDUyxTQUFLLEtBQUwsR0FBYyxRQUFkLEVBRFQ7O0FBRUgsMkJBQU8sU0FBSyxJQUFMLENBQVcsS0FBWCxDQUFQO0FBQ0kseUJBSEQsR0FHUSxTQUFLLElBQUwsQ0FBVyxTQUFLLE1BQUwsQ0FBYSxJQUFiLENBQVgsRUFBK0IsS0FBL0IsRUFBc0MsUUFBdEMsQ0FIUjtBQUlDLDBCQUpELEdBSVUsU0FBSyxjQUFMLENBQXFCLFNBQUssTUFBMUIsQ0FKVjtBQUtDLHVCQUxELEdBS08sU0FBSyxrQkFBTCxDQUF5QixHQUF6QixDQUxQO0FBTUMsNkJBTkQsR0FNYSxJQUFJLFdBQUosRUFOYjtBQU9DLDJCQVBELEdBT1csU0FBSyxNQUFMLEdBQWMsTUFBZCxHQUF1QixTQUF2QixHQUFtQyxLQUFuQyxHQUEyQyxTQUFLLGNBQUwsQ0FBcUIsS0FBckIsQ0FQdEQ7QUFRQyw2QkFSRCxHQVFhLFNBQUssSUFBTCxDQUFXLFNBQUssTUFBTCxDQUFhLE9BQWIsQ0FBWCxFQUFrQyxNQUFsQyxFQUEwQyxRQUExQyxFQUFvRCxRQUFwRCxDQVJiO0FBU0Msd0JBVEQsR0FTUSxTQUFTLFNBQUssTUFBZCxHQUF1QixHQUF2QixHQUE2QixTQUFLLGNBQUwsQ0FBcUIsU0FBckIsQ0FBN0IsR0FBK0QsR0FBL0QsR0FBcUUsS0FUN0U7O0FBVUgsOEJBQVU7QUFDTix3Q0FBZ0Isa0JBRFY7QUFFTiwwQ0FBa0IsS0FBSyxNQUZqQjtBQUdOLHlDQUFpQjtBQUhYLHFCQUFWO0FBS0g7QUE1T08sdUJBNk9hLFNBQUssS0FBTCxDQUFZLEdBQVosRUFBaUIsTUFBakIsRUFBeUIsT0FBekIsRUFBa0MsSUFBbEMsQ0E3T2I7QUFBQTtBQTZPSix3QkE3T0k7QUFBQSwwQkE4T0osYUFBYSxRQTlPVDs7QUErT0osK0JBQUksU0FBUyxTQUFULENBQUo7QUFDSSwyQkFBTyxRQUFQO0FBREo7QUFFSiwwQkFBTSxJQUFJLGFBQUosQ0FBbUIsU0FBSyxFQUFMLEdBQVUsR0FBVixHQUFnQixTQUFLLElBQUwsQ0FBVyxRQUFYLENBQW5DLENBQU47QUFGSTtBQS9PSTtBQUFBO0FBQUEsS0FBaEI7O0FBcVBBOztBQUVBLFFBQUksTUFBTTs7QUFFTixjQUFNLEtBRkE7QUFHTixnQkFBUSxLQUhGO0FBSU4scUJBQWEsSUFKUDtBQUtOLHFCQUFhLElBTFA7QUFNTixnQkFBUTtBQUNKLG9CQUFRLHFHQURKO0FBRUosbUJBQU87QUFDSCx3QkFBUSxxQkFETCxFQUM2QjtBQUNoQyx3QkFBUSxxQkFGTCxFQUU2QjtBQUNoQyx5QkFBUyxzQkFITixDQUc4QjtBQUg5QixhQUZIO0FBT0osbUJBQU8sZ0JBUEg7QUFRSixtQkFBTyxDQUNILG9CQURHLEVBRUgsZ0NBRkcsRUFHSCxpQ0FIRyxFQUlILEVBSkc7QUFSSCxTQU5GO0FBcUJOLGVBQU87QUFDSCxvQkFBUSxFQUFFO0FBQ04sdUJBQU8sQ0FDSCxzQ0FERyxFQUNxQztBQUN4Qyw0QkFGRyxFQUdILE1BSEcsRUFJSCxpQ0FKRyxFQUlnQztBQUNuQyx3REFMRyxFQU1ILGFBTkcsRUFPSCxhQVBHO0FBREgsYUFETDtBQVlILG9CQUFRLEVBQUU7QUFDTix3QkFBUSxDQUNKLFNBREksRUFFSixjQUZJLEVBR0osY0FISSxFQUlKLGNBSkksRUFLSixjQUxJLEVBTUosT0FOSSxFQU9KLGFBUEk7QUFESixhQVpMO0FBdUJILHFCQUFTLEVBQUU7QUFDUCx3QkFBUSxDQUNKLHlCQURJLEVBRUosZ0JBRkksRUFHSixjQUhJLEVBSUosc0JBSkksRUFLSixpQkFMSTtBQURIO0FBdkJOLFNBckJEOztBQXVEQSxvQkF2REE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQXdEbUIsU0FBSyxXQUFMLEVBeERuQjtBQUFBO0FBd0RFLHdCQXhERjtBQXlERSxvQkF6REYsR0F5RFMsT0FBTyxJQUFQLENBQWEsU0FBUyxPQUFULENBQWIsQ0F6RFQ7QUEwREUsc0JBMURGLEdBMERXLEVBMURYOztBQTJERixxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLEtBQUssTUFBekIsRUFBaUMsR0FBakMsRUFBc0M7QUFDOUIsc0JBRDhCLEdBQ3pCLEtBQUssQ0FBTCxDQUR5QjtBQUU5QiwwQkFGOEIsR0FFckIsU0FBUyxPQUFULEVBQWtCLEVBQWxCLENBRnFCO0FBRzlCLHdCQUg4QixHQUd2QixHQUFHLEtBQUgsQ0FBVSxDQUFWLEVBQWEsQ0FBYixDQUh1QjtBQUk5Qix5QkFKOEIsR0FJdEIsR0FBRyxLQUFILENBQVUsQ0FBVixFQUFhLENBQWIsQ0FKc0I7O0FBS2xDLDJCQUFPLEtBQUssV0FBTCxFQUFQO0FBQ0EsNEJBQVEsTUFBTSxXQUFOLEVBQVI7QUFDSSwwQkFQOEIsR0FPckIsT0FBTyxHQUFQLEdBQWEsS0FQUTs7QUFRbEMsMkJBQU8sSUFBUCxDQUFhO0FBQ1QsOEJBQU0sRUFERztBQUVULGtDQUFVLE1BRkQ7QUFHVCxnQ0FBUSxJQUhDO0FBSVQsaUNBQVMsS0FKQTtBQUtULGdDQUFRO0FBTEMscUJBQWI7QUFPSDtBQUNELHVCQUFPLE1BQVA7QUEzRUU7QUFBQTtBQThFQSxvQkE5RUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBK0VJLFNBQUssV0FBTCxFQS9FSjtBQUFBO0FBQUEsdUJBZ0ZtQixTQUFLLGVBQUwsRUFoRm5CO0FBQUE7QUFnRkUsd0JBaEZGO0FBaUZFLHdCQWpGRixHQWlGYSxTQUFTLFFBQVQsQ0FqRmI7QUFrRkUsc0JBbEZGLEdBa0ZXLEVBQUUsUUFBUSxRQUFWLEVBbEZYO0FBbUZFLDBCQW5GRixHQW1GZSxPQUFPLElBQVAsQ0FBYSxTQUFTLE9BQVQsQ0FBYixDQW5GZjs7QUFvRkYscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxXQUFXLE1BQS9CLEVBQXVDLEdBQXZDLEVBQTRDO0FBQ3BDLDRCQURvQyxHQUN6QixXQUFXLENBQVgsQ0FEeUI7QUFFcEMsMkJBRm9DLEdBRTFCO0FBQ1YsZ0NBQVEsU0FBUyxPQUFULEVBQWtCLFFBQWxCLENBREU7QUFFVixnQ0FBUSxTQUZFO0FBR1YsaUNBQVMsU0FBUyxPQUFULEVBQWtCLFFBQWxCO0FBSEMscUJBRjBCOztBQU94Qyw0QkFBUSxNQUFSLElBQWtCLFFBQVEsT0FBUixJQUFtQixRQUFRLE1BQVIsQ0FBckM7QUFDQSwyQkFBTyxRQUFQLElBQW1CLE9BQW5CO0FBQ0g7QUFDRCx1QkFBTyxNQUFQO0FBOUZFO0FBQUE7QUFpR0Esc0JBakdBLDBCQWlHZ0IsTUFqR2hCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFpR3dCLHNCQWpHeEIsbUZBaUdpQyxFQWpHakM7QUFBQSx1QkFrR0ksU0FBSyxXQUFMLEVBbEdKO0FBQUE7QUFtR0UsaUJBbkdGLEdBbUdNLFNBQUssTUFBTCxDQUFhLE1BQWIsQ0FuR047QUFBQSx1QkFvR21CLFNBQUssY0FBTCxDQUFxQixTQUFLLE1BQUwsQ0FBYTtBQUNuRCwwQkFBTSxFQUFFLElBQUY7QUFENkMsaUJBQWIsRUFFdkMsTUFGdUMsQ0FBckIsQ0FwR25CO0FBQUE7QUFvR0Usd0JBcEdGO0FBdUdFLHlCQXZHRixHQXVHYyxTQUFTLEVBQUUsSUFBRixDQUFULENBdkdkO0FBd0dFLHlCQXhHRixHQXdHYyxTQUFLLFlBQUwsRUF4R2Q7QUF5R0Usc0JBekdGLEdBeUdXO0FBQ1QsNEJBQVEsRUFEQztBQUVULDRCQUFRLEVBRkM7QUFHVCxpQ0FBYSxTQUhKO0FBSVQsZ0NBQVksU0FBSyxPQUFMLENBQWMsU0FBZDtBQUpILGlCQXpHWDtBQStHRSxxQkEvR0YsR0ErR1UsQ0FBRSxNQUFGLEVBQVUsTUFBVixDQS9HVjs7QUFnSEYscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxNQUFNLE1BQTFCLEVBQWtDLEdBQWxDLEVBQXVDO0FBQy9CLHdCQUQrQixHQUN4QixNQUFNLENBQU4sQ0FEd0I7QUFFL0IsMEJBRitCLEdBRXRCLFVBQVUsSUFBVixDQUZzQjs7QUFHbkMseUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxPQUFPLE1BQTNCLEVBQW1DLEdBQW5DLEVBQXdDO0FBQ2hDLDZCQURnQyxHQUN4QixPQUFPLENBQVAsQ0FEd0I7QUFFaEMsNkJBRmdDLEdBRXhCLE1BQU0sQ0FBTixDQUZ3QjtBQUdoQyw4QkFIZ0MsR0FHdkIsTUFBTSxDQUFOLENBSHVCOztBQUlwQywrQkFBTyxJQUFQLEVBQWEsSUFBYixDQUFtQixDQUFFLEtBQUYsRUFBUyxNQUFULENBQW5CO0FBQ0g7QUFDSjtBQUNELHVCQUFPLE1BQVA7QUExSEU7QUFBQTtBQTZIQSxtQkE3SEEsdUJBNkhhLE1BN0hiO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQThISSxTQUFLLFdBQUwsRUE5SEo7QUFBQTtBQStIRSxpQkEvSEYsR0ErSE0sU0FBSyxNQUFMLENBQWEsTUFBYixDQS9ITjtBQUFBLHVCQWdJbUIsU0FBSyxlQUFMLENBQXNCO0FBQ3ZDLDBCQUFNLEVBQUUsSUFBRjtBQURpQyxpQkFBdEIsQ0FoSW5CO0FBQUE7QUFnSUUsd0JBaElGO0FBbUlFLHNCQW5JRixHQW1JVyxTQUFTLEVBQUUsSUFBRixDQUFULENBbklYO0FBb0lFLHlCQXBJRixHQW9JYyxPQUFPLFNBQVAsSUFBb0IsSUFwSWxDOztBQXFJRix1QkFBTztBQUNILGlDQUFhLFNBRFY7QUFFSCxnQ0FBWSxTQUFLLE9BQUwsQ0FBYyxTQUFkLENBRlQ7QUFHSCw0QkFBUSxXQUFZLE9BQU8sTUFBUCxDQUFaLENBSEw7QUFJSCwyQkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBSko7QUFLSCwyQkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBTEo7QUFNSCwyQkFBTyxXQUFZLE9BQU8sTUFBUCxDQUFaLENBTko7QUFPSCw0QkFBUSxTQVBMO0FBUUgsNEJBQVEsU0FSTDtBQVNILDZCQUFTLFNBVE47QUFVSCw2QkFBUyxTQVZOO0FBV0gsNEJBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQVhMO0FBWUgsOEJBQVUsU0FaUDtBQWFILGtDQUFjLFNBYlg7QUFjSCwrQkFBVyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBZFI7QUFlSCxrQ0FBYyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBZlg7QUFnQkgsbUNBQWUsV0FBWSxPQUFPLFNBQVAsQ0FBWixDQWhCWjtBQWlCSCw0QkFBUTtBQWpCTCxpQkFBUDtBQXJJRTtBQUFBO0FBMEpBLG1CQTFKQSx1QkEwSmEsTUExSmI7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUEwSnFCLHNCQTFKckIsbUZBMEo4QixFQTFKOUI7QUFBQSx1QkEySkksU0FBSyxXQUFMLEVBM0pKO0FBQUE7QUE0SkYsdUJBQU8sU0FBSyxlQUFMLENBQXNCLFNBQUssTUFBTCxDQUFhO0FBQ3RDLDBCQUFNLFNBQUssUUFBTCxDQUFlLE1BQWY7QUFEZ0MsaUJBQWIsRUFFMUIsTUFGMEIsQ0FBdEIsQ0FBUDtBQTVKRTtBQUFBO0FBaUtBLG1CQWpLQSx1QkFpS2EsTUFqS2IsRUFpS3FCLElBaktyQixFQWlLMkIsSUFqSzNCLEVBaUtpQyxNQWpLakM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFpS3lDLHFCQWpLekMsbUZBaUtpRCxTQWpLakQ7QUFpSzRELHNCQWpLNUQsbUZBaUtxRSxFQWpLckU7QUFBQSx1QkFrS0ksU0FBSyxXQUFMLEVBbEtKO0FBQUE7QUFtS0Ysb0JBQUksUUFBUSxRQUFaO0FBQ0ksMEJBQU0sSUFBSSxhQUFKLENBQW1CLFNBQUssRUFBTCxHQUFVLDJCQUE3QixDQUFOO0FBREosaUJBRUksS0FyS0YsR0FxS1U7QUFDUiw0QkFBUSxTQUFLLFFBQUwsQ0FBZSxNQUFmLENBREE7QUFFUiw0QkFBUSxJQUZBO0FBR1IsNEJBQVEsS0FIQTtBQUlSLDhCQUFVO0FBSkYsaUJBcktWO0FBQUEsdUJBMkttQixTQUFLLGFBQUwsQ0FBb0IsU0FBSyxNQUFMLENBQWEsS0FBYixFQUFvQixNQUFwQixDQUFwQixDQTNLbkI7QUFBQTtBQTJLRSx3QkEzS0Y7O0FBNEtGLHVCQUFPO0FBQ0gsNEJBQVEsUUFETDtBQUVILDBCQUFNLFNBQVMsUUFBVCxFQUFtQixTQUFuQixFQUE4QixRQUE5QjtBQUZILGlCQUFQO0FBNUtFO0FBQUE7QUFrTEEsbUJBbExBLHVCQWtMYSxFQWxMYjtBQUFBOztBQUFBO0FBQUEsdUJBbUxJLFNBQUssV0FBTCxFQW5MSjtBQUFBO0FBb0xGLHVCQUFPLFNBQUssbUJBQUwsQ0FBMEIsRUFBRSxXQUFXLEVBQWIsRUFBMUIsQ0FBUDtBQXBMRTtBQUFBO0FBdUxBLGVBdkxBLG1CQXVMUyxJQXZMVDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBdUxlLG1CQXZMZixtRkF1THFCLE1BdkxyQjtBQXVMNkIsc0JBdkw3QixtRkF1THNDLEtBdkx0QztBQXVMNkMsc0JBdkw3QyxtRkF1THNELEVBdkx0RDtBQXVMMEQsdUJBdkwxRCxtRkF1TG9FLFNBdkxwRTtBQXVMK0Usb0JBdkwvRSxtRkF1THNGLFNBdkx0RjtBQXdMRSxtQkF4TEYsR0F3TFEsU0FBSyxJQUFMLENBQVUsS0FBVixFQUFpQixHQUFqQixDQXhMUjs7QUF5TEYsb0JBQUssT0FBTyxNQUFSLElBQW9CLE9BQU8sT0FBL0I7QUFDSSwyQkFBTyxNQUFNLFNBQUssYUFBTCxDQUFvQixJQUFwQixFQUEwQixNQUExQixDQUFiO0FBREosaUJBRUksS0EzTEYsR0EyTFUsU0FBSyxJQUFMLENBQVcsTUFBWCxFQUFtQixTQUFLLGFBQUwsQ0FBb0IsSUFBcEIsQ0FBbkIsQ0EzTFY7O0FBNExGLG9CQUFJLE9BQU8sTUFBWCxFQUFtQjtBQUNmLHdCQUFJLE9BQU8sSUFBUCxDQUFhLEtBQWIsRUFBb0IsTUFBeEI7QUFDSSwrQkFBTyxNQUFNLFNBQUssU0FBTCxDQUFnQixLQUFoQixDQUFiO0FBREo7QUFFSCxpQkFIRCxNQUdPO0FBQ0MseUJBREQsR0FDUyxTQUFLLEtBQUwsRUFEVDtBQUVDLDJCQUZELEdBRVUsSUFGVjs7QUFHSCwyQkFBTyxTQUFLLFNBQUwsQ0FBZ0IsU0FBSyxNQUFMLENBQWE7QUFDaEMsa0NBQVUsSUFEc0I7QUFFaEMsaUNBQVM7QUFGdUIscUJBQWIsRUFHcEIsS0FIb0IsQ0FBaEIsQ0FBUDtBQUlBLDhCQUFVO0FBQ04sd0NBQWdCLG1DQURWO0FBRU4sMENBQWtCLEtBQUssTUFGakI7QUFHTiwrQkFBTyxTQUFLLE1BSE47QUFJTixnQ0FBUSxTQUFLLElBQUwsQ0FBVyxTQUFLLE1BQUwsQ0FBYSxJQUFiLENBQVgsRUFBK0IsU0FBSyxNQUFMLENBQWEsU0FBSyxNQUFsQixDQUEvQixFQUEwRCxRQUExRCxFQUFvRSxRQUFwRTtBQUpGLHFCQUFWO0FBTUg7QUE1TUMsdUJBNk1tQixTQUFLLEtBQUwsQ0FBWSxHQUFaLEVBQWlCLE1BQWpCLEVBQXlCLE9BQXpCLEVBQWtDLElBQWxDLENBN01uQjtBQUFBO0FBNk1FLHdCQTdNRjs7QUE4TUYsb0JBQUksT0FBTyxNQUFYO0FBQ0ksMkJBQU8sUUFBUDtBQURKO0FBQUEsOEJBRUksYUFBYSxRQUZqQjs7QUFHSSxtQ0FBSSxTQUFTLFNBQVQsQ0FBSjtBQUNJLCtCQUFPLFFBQVA7QUFESjtBQUVKLDhCQUFNLElBQUksYUFBSixDQUFtQixTQUFLLEVBQUwsR0FBVSxHQUFWLEdBQWdCLFNBQUssSUFBTCxDQUFXLFFBQVgsQ0FBbkMsQ0FBTjtBQUZJO0FBSEo7QUE5TUU7QUFBQTtBQUFBLEtBQVY7O0FBdU5BOztBQUVBLFFBQUksT0FBTzs7QUFFUCxjQUFNLE1BRkM7QUFHUCxnQkFBUSxNQUhEO0FBSVAscUJBQWEsQ0FBRSxJQUFGLEVBQVEsSUFBUixDQUpOLEVBSXNCO0FBQzdCLHFCQUFhLElBTE4sRUFLWTtBQUNuQixtQkFBVyxJQU5KO0FBT1AsMkJBQW1CLElBUFo7QUFRUCxnQkFBUTtBQUNKLG9CQUFRLHFHQURKO0FBRUosbUJBQU8sc0JBRkg7QUFHSixtQkFBTyxpQkFISDtBQUlKLG1CQUFPLENBQ0gsNEJBREcsRUFFSCw2REFGRztBQUpILFNBUkQ7QUFpQlAsZUFBTztBQUNILHNCQUFVO0FBQ04sdUJBQU8sQ0FDSCxVQURHLEVBRUgsWUFGRyxFQUdILGVBSEcsRUFJSCxRQUpHLEVBS0gsUUFMRztBQURELGFBRFA7QUFVSCx1QkFBVztBQUNQLHdCQUFRLENBQ0osV0FESSxFQUVKLGNBRkksRUFHSixjQUhJLEVBSUosa0JBSkksRUFLSixhQUxJLEVBTUosdUJBTkksRUFPSixjQVBJLEVBUUosaUJBUkksRUFTSixpQkFUSSxFQVVKLGdCQVZJLEVBV0osbUJBWEksRUFZSixlQVpJLEVBYUosYUFiSSxFQWNKLGdCQWRJO0FBREQ7QUFWUixTQWpCQTs7QUErQ0Qsb0JBL0NDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBZ0RpQixTQUFLLHFCQUFMLEVBaERqQjtBQUFBO0FBZ0RDLHVCQWhERDtBQWlEQyxvQkFqREQsR0FpRFEsT0FBTyxJQUFQLENBQWEsT0FBYixDQWpEUjtBQWtEQyxzQkFsREQsR0FrRFUsRUFsRFY7O0FBbURILHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksS0FBSyxNQUF6QixFQUFpQyxHQUFqQyxFQUFzQztBQUM5QixzQkFEOEIsR0FDekIsS0FBSyxDQUFMLENBRHlCO0FBRTlCLDBCQUY4QixHQUVyQixRQUFRLEVBQVIsQ0FGcUI7QUFHOUIsMEJBSDhCLEdBR3JCLEdBQUcsT0FBSCxDQUFZLEdBQVosRUFBaUIsR0FBakIsQ0FIcUI7QUFBQSxxQ0FJWixPQUFPLEtBQVAsQ0FBYyxHQUFkLENBSlk7QUFBQTtBQUk1Qix3QkFKNEI7QUFJdEIseUJBSnNCOztBQUtsQywyQkFBTyxJQUFQLENBQWE7QUFDVCw4QkFBTSxFQURHO0FBRVQsa0NBQVUsTUFGRDtBQUdULGdDQUFRLElBSEM7QUFJVCxpQ0FBUyxLQUpBO0FBS1QsZ0NBQVE7QUFMQyxxQkFBYjtBQU9IO0FBQ0QsdUJBQU8sTUFBUDtBQWhFRztBQUFBO0FBbUVELG9CQW5FQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQW9FRyxTQUFLLFdBQUwsRUFwRUg7QUFBQTtBQUFBLHVCQXFFa0IsU0FBSyxtQkFBTCxFQXJFbEI7QUFBQTtBQXFFQyx3QkFyRUQ7QUFzRUMsc0JBdEVELEdBc0VVLEVBQUUsUUFBUSxRQUFWLEVBdEVWOztBQXVFSCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFNBQUssVUFBTCxDQUFnQixNQUFwQyxFQUE0QyxHQUE1QyxFQUFpRDtBQUN6Qyw0QkFEeUMsR0FDOUIsU0FBSyxVQUFMLENBQWdCLENBQWhCLENBRDhCO0FBRXpDLDJCQUZ5QyxHQUUvQjtBQUNWLGdDQUFRLFNBREU7QUFFVixnQ0FBUSxTQUZFO0FBR1YsaUNBQVM7QUFIQyxxQkFGK0I7O0FBTzdDLHdCQUFJLFlBQVksU0FBUyxVQUFULENBQWhCO0FBQ0ksZ0NBQVEsTUFBUixJQUFrQixXQUFZLFNBQVMsVUFBVCxFQUFxQixRQUFyQixDQUFaLENBQWxCO0FBREoscUJBRUEsSUFBSSxZQUFZLFNBQVMsVUFBVCxDQUFoQjtBQUNJLGdDQUFRLE1BQVIsSUFBa0IsV0FBWSxTQUFTLFVBQVQsRUFBcUIsUUFBckIsQ0FBWixDQUFsQjtBQURKLHFCQUVBLFFBQVEsT0FBUixJQUFtQixTQUFLLEdBQUwsQ0FBVSxRQUFRLE1BQVIsQ0FBVixFQUEyQixRQUFRLE1BQVIsQ0FBM0IsQ0FBbkI7QUFDQSwyQkFBTyxRQUFQLElBQW1CLE9BQW5CO0FBQ0g7QUFDRCx1QkFBTyxNQUFQO0FBckZHO0FBQUE7QUF3RkQsc0JBeEZDLDBCQXdGZSxNQXhGZjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQXdGdUIsc0JBeEZ2QixtRkF3RmdDLEVBeEZoQztBQUFBLHVCQXlGRyxTQUFLLFdBQUwsRUF6Rkg7QUFBQTtBQTBGQyxpQkExRkQsR0EwRkssU0FBSyxNQUFMLENBQWEsTUFBYixDQTFGTDtBQUFBLHVCQTJGa0IsU0FBSyxrQkFBTCxDQUF5QixTQUFLLE1BQUwsQ0FBYTtBQUN2RCw0QkFBUSxFQUFFLElBQUY7QUFEK0MsaUJBQWIsRUFFM0MsTUFGMkMsQ0FBekIsQ0EzRmxCO0FBQUE7QUEyRkMsd0JBM0ZEO0FBOEZDLHlCQTlGRCxHQThGYSxTQUFTLEVBQUUsSUFBRixDQUFULENBOUZiO0FBK0ZDLHlCQS9GRCxHQStGYSxTQUFLLFlBQUwsRUEvRmI7QUFnR0Msc0JBaEdELEdBZ0dVO0FBQ1QsNEJBQVEsRUFEQztBQUVULDRCQUFRLEVBRkM7QUFHVCxpQ0FBYSxTQUhKO0FBSVQsZ0NBQVksU0FBSyxPQUFMLENBQWMsU0FBZDtBQUpILGlCQWhHVjtBQXNHQyxxQkF0R0QsR0FzR1MsRUFBRSxRQUFRLEtBQVYsRUFBaUIsUUFBUSxLQUF6QixFQXRHVDtBQXVHQyxvQkF2R0QsR0F1R1EsT0FBTyxJQUFQLENBQWEsS0FBYixDQXZHUjs7QUF3R0gscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxLQUFLLE1BQXpCLEVBQWlDLEdBQWpDLEVBQXNDO0FBQzlCLHVCQUQ4QixHQUN4QixLQUFLLENBQUwsQ0FEd0I7QUFFOUIsd0JBRjhCLEdBRXZCLE1BQU0sR0FBTixDQUZ1QjtBQUc5QiwwQkFIOEIsR0FHckIsVUFBVSxJQUFWLENBSHFCOztBQUlsQyx5QkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLE9BQU8sTUFBM0IsRUFBbUMsR0FBbkMsRUFBd0M7QUFDaEMsNkJBRGdDLEdBQ3hCLE9BQU8sQ0FBUCxDQUR3QjtBQUVoQyw2QkFGZ0MsR0FFeEIsV0FBWSxNQUFNLENBQU4sQ0FBWixDQUZ3QjtBQUdoQyw4QkFIZ0MsR0FHdkIsV0FBWSxNQUFNLENBQU4sQ0FBWixDQUh1Qjs7QUFJcEMsK0JBQU8sR0FBUCxFQUFZLElBQVosQ0FBa0IsQ0FBRSxLQUFGLEVBQVMsTUFBVCxDQUFsQjtBQUNIO0FBQ0o7QUFDRCx1QkFBTyxNQUFQO0FBbkhHO0FBQUE7QUFzSFAsbUJBdEhPLHVCQXNITSxNQXRITixFQXNIYyxNQXRIZCxFQXNIc0I7QUFDekIsZ0JBQUksWUFBWSxPQUFPLFNBQVAsSUFBb0IsSUFBcEM7QUFDQSxtQkFBTztBQUNILDZCQUFhLFNBRFY7QUFFSCw0QkFBWSxLQUFLLE9BQUwsQ0FBYyxTQUFkLENBRlQ7QUFHSCx3QkFBUSxXQUFZLE9BQU8sTUFBUCxDQUFaLENBSEw7QUFJSCx1QkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBSko7QUFLSCx1QkFBTyxXQUFZLE9BQU8sV0FBUCxDQUFaLENBTEo7QUFNSCx1QkFBTyxXQUFZLE9BQU8sWUFBUCxDQUFaLENBTko7QUFPSCx3QkFBUSxTQVBMO0FBUUgsd0JBQVEsU0FSTDtBQVNILHlCQUFTLFNBVE47QUFVSCx5QkFBUyxTQVZOO0FBV0gsd0JBQVEsV0FBWSxPQUFPLFlBQVAsQ0FBWixDQVhMO0FBWUgsMEJBQVUsU0FaUDtBQWFILDhCQUFjLFNBYlg7QUFjSCwyQkFBVyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBZFI7QUFlSCw4QkFBYyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBZlg7QUFnQkgsK0JBQWUsV0FBWSxPQUFPLFVBQVAsQ0FBWixDQWhCWjtBQWlCSCx3QkFBUTtBQWpCTCxhQUFQO0FBbUJILFNBM0lNO0FBNklELG9CQTdJQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUE2SWEsd0JBN0liLG1GQTZJd0IsS0E3SXhCO0FBQUEsdUJBOElHLFNBQUssV0FBTCxFQTlJSDtBQUFBO0FBQUEsdUJBK0lrQixTQUFLLGVBQUwsRUEvSWxCO0FBQUE7QUErSUMsd0JBL0lEO0FBZ0pDLHNCQWhKRCxHQWdKVSxFQWhKVjtBQWlKQyxtQkFqSkQsR0FpSk8sT0FBTyxJQUFQLENBQWEsUUFBYixDQWpKUDs7QUFrSkgscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxJQUFJLE1BQXhCLEVBQWdDLEdBQWhDLEVBQXFDO0FBQzdCLHNCQUQ2QixHQUN4QixJQUFJLENBQUosQ0FEd0I7QUFFN0IsMEJBRjZCLEdBRXBCLFNBQUssYUFBTCxDQUFtQixFQUFuQixDQUZvQjtBQUc3QiwwQkFINkIsR0FHcEIsT0FBTyxRQUFQLENBSG9CO0FBSTdCLDBCQUo2QixHQUlwQixTQUFTLEVBQVQsQ0FKb0I7O0FBS2pDLDJCQUFPLE1BQVAsSUFBaUIsU0FBSyxXQUFMLENBQWtCLE1BQWxCLEVBQTBCLE1BQTFCLENBQWpCO0FBQ0g7QUFDRCx1QkFBTyxNQUFQO0FBekpHO0FBQUE7QUE0SkQsbUJBNUpDLHVCQTRKWSxNQTVKWjtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQTZKRyxTQUFLLFdBQUwsRUE3Skg7QUFBQTtBQUFBLHVCQThKa0IsU0FBSyxlQUFMLEVBOUpsQjtBQUFBO0FBOEpDLHdCQTlKRDtBQStKQyxpQkEvSkQsR0ErSkssU0FBSyxNQUFMLENBQWEsTUFBYixDQS9KTDs7QUFnS0gsdUJBQU8sU0FBSyxXQUFMLENBQWtCLFNBQVMsRUFBRSxJQUFGLENBQVQsQ0FBbEIsRUFBcUMsQ0FBckMsQ0FBUDtBQWhLRztBQUFBO0FBbUtELG1CQW5LQyx1QkFtS1ksTUFuS1o7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFtS29CLHNCQW5LcEIsbUZBbUs2QixFQW5LN0I7QUFBQSx1QkFvS0csU0FBSyxXQUFMLEVBcEtIO0FBQUE7QUFxS0gsdUJBQU8sU0FBSyxlQUFMLENBQXNCLFNBQUssTUFBTCxDQUFhO0FBQ3RDLDRCQUFRLFNBQUssUUFBTCxDQUFlLE1BQWY7QUFEOEIsaUJBQWIsRUFFMUIsTUFGMEIsQ0FBdEIsQ0FBUDtBQXJLRztBQUFBO0FBMEtELG1CQTFLQyx1QkEwS1ksTUExS1osRUEwS29CLElBMUtwQixFQTBLMEIsSUExSzFCLEVBMEtnQyxNQTFLaEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQTBLd0MscUJBMUt4QyxtRkEwS2dELFNBMUtoRDtBQTBLMkQsc0JBMUszRCxtRkEwS29FLEVBMUtwRTtBQUFBLHVCQTJLRyxTQUFLLFdBQUwsRUEzS0g7QUFBQTtBQTRLQyxzQkE1S0QsR0E0S1UsRUE1S1Y7O0FBNktILG9CQUFJLFFBQVEsUUFBWjtBQUNJLDZCQUFTLFNBQVQ7QUFESixpQkFFSSxLQS9LRCxHQStLUztBQUNSLDRCQUFRLFNBQUssUUFBTCxDQUFlLE1BQWYsQ0FEQTtBQUVSLGdDQUFZLE1BRko7QUFHUiw2QkFBUyxTQUFTLENBSFY7QUFJUiw0QkFBUSxTQUFTO0FBSlQsaUJBL0tUO0FBQUEsdUJBcUxrQixTQUFLLHNCQUFMLENBQTZCLFNBQUssTUFBTCxDQUFhLEtBQWIsRUFBb0IsTUFBcEIsQ0FBN0IsQ0FyTGxCO0FBQUE7QUFxTEMsd0JBckxEOztBQXNMSCx1QkFBTztBQUNILDRCQUFRLFFBREw7QUFFSCwwQkFBTSxTQUFTLFVBQVQsRUFBcUIsUUFBckI7QUFGSCxpQkFBUDtBQXRMRztBQUFBO0FBNExELG1CQTVMQyx1QkE0TFksRUE1TFo7QUFBQTs7QUFBQTtBQUFBLHVCQTZMRyxTQUFLLFdBQUwsRUE3TEg7QUFBQTtBQThMSCx1QkFBTyxTQUFLLHNCQUFMLENBQTZCLEVBQUUsWUFBWSxFQUFkLEVBQTdCLENBQVA7QUE5TEc7QUFBQTtBQWlNRCxlQWpNQyxtQkFpTVEsSUFqTVI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBaU1jLG1CQWpNZCxtRkFpTW9CLFFBak1wQjtBQWlNOEIsc0JBak05QixtRkFpTXVDLEtBak12QztBQWlNOEMsc0JBak05QyxtRkFpTXVELEVBak12RDtBQWlNMkQsdUJBak0zRCxtRkFpTXFFLFNBak1yRTtBQWlNZ0Ysb0JBak1oRixtRkFpTXVGLFNBak12RjtBQWtNQyxtQkFsTUQsR0FrTU8sU0FBSyxJQUFMLENBQVUsS0FBVixJQUFtQixHQUFuQixHQUF5QixTQUFLLE9BQTlCLEdBQXdDLEdBQXhDLEdBQThDLElBbE1yRDs7QUFtTUgsb0JBQUksT0FBTyxRQUFYLEVBQXFCO0FBQ2pCLHdCQUFJLE9BQU8sSUFBUCxDQUFhLE1BQWIsRUFBcUIsTUFBekI7QUFDSSwrQkFBTyxNQUFNLFNBQUssU0FBTCxDQUFnQixNQUFoQixDQUFiO0FBREo7QUFFSCxpQkFIRCxNQUdPO0FBQ0MseUJBREQsR0FDUyxTQUFLLEtBQUwsRUFEVDs7QUFFSCwyQkFBTyxTQUFLLFNBQUwsQ0FBZ0IsU0FBSyxNQUFMLENBQWEsRUFBRSxTQUFTLEtBQVgsRUFBYixFQUFpQyxNQUFqQyxDQUFoQixDQUFQO0FBQ0EsOEJBQVU7QUFDTix3Q0FBZ0IsbUNBRFY7QUFFTiwwQ0FBa0IsS0FBSyxNQUZqQjtBQUdOLCtCQUFPLFNBQUssTUFITjtBQUlOLGdDQUFRLFNBQUssSUFBTCxDQUFXLFNBQUssTUFBTCxDQUFhLElBQWIsQ0FBWCxFQUErQixTQUFLLE1BQUwsQ0FBYSxTQUFLLE1BQWxCLENBQS9CLEVBQTBELFFBQTFEO0FBSkYscUJBQVY7QUFNSDtBQS9NRSx1QkFnTmtCLFNBQUssS0FBTCxDQUFZLEdBQVosRUFBaUIsTUFBakIsRUFBeUIsT0FBekIsRUFBa0MsSUFBbEMsQ0FoTmxCO0FBQUE7QUFnTkMsd0JBaE5EO0FBQUEsMEJBaU5DLFlBQVksUUFqTmI7O0FBa05DLCtCQUFJLFNBQVMsUUFBVCxDQUFKO0FBQ0ksMkJBQU8sUUFBUDtBQURKO0FBQUE7QUFFQSw4QkFBTSxJQUFJLGFBQUosQ0FBbUIsU0FBSyxFQUFMLEdBQVUsR0FBVixHQUFnQixTQUFLLElBQUwsQ0FBVyxRQUFYLENBQW5DLENBQU47QUFGQTs7QUFJSiwyQkFBTyxRQUFQO0FBSkk7QUFsTkQ7QUFBQTtBQUFBLEtBQVg7O0FBME5BOztBQUVBLFFBQUksVUFBVTs7QUFFVixjQUFNLFNBRkk7QUFHVixnQkFBUSxTQUhFO0FBSVYscUJBQWEsSUFKSCxFQUlTO0FBQ25CLG1CQUFXLElBTEQ7QUFNVixxQkFBYSxJQU5IO0FBT1YsZ0JBQVE7QUFDSixvQkFBUSxxR0FESjtBQUVKLG1CQUFPLG1DQUZIO0FBR0osbUJBQU8sNEJBSEg7QUFJSixtQkFBTztBQUpILFNBUEU7QUFhVixlQUFPO0FBQ0gsc0JBQVU7QUFDTix3QkFBUSxDQUNKLFdBREksRUFFSixXQUZJLEVBR0osaUJBSEksRUFJSixjQUpJLEVBS0osaUJBTEksRUFNSixhQU5JO0FBREYsYUFEUDtBQVdILHVCQUFXO0FBQ1Asd0JBQVEsQ0FDSixlQURJLEVBRUosYUFGSSxFQUdKLGFBSEksRUFJSixnQkFKSSxFQUtKLGtCQUxJLEVBTUoscUJBTkksRUFPSixVQVBJLEVBUUosYUFSSSxFQVNKLGFBVEksRUFVSixhQVZJLEVBV0osaUJBWEksRUFZSixzQkFaSSxFQWFKLGFBYkk7QUFERDtBQVhSLFNBYkc7O0FBMkNKLG9CQTNDSTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBNENlLFNBQUsseUJBQUwsRUE1Q2Y7QUFBQTtBQTRDRix3QkE1Q0U7QUE2Q0YsdUJBN0NFLEdBNkNRLFNBQVMsY0FBVCxDQTdDUjtBQThDRixzQkE5Q0UsR0E4Q08sRUE5Q1A7O0FBK0NOLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksUUFBUSxNQUE1QixFQUFvQyxHQUFwQyxFQUF5QztBQUNqQywwQkFEaUMsR0FDeEIsUUFBUSxDQUFSLENBRHdCO0FBRWpDLHNCQUZpQyxHQUU1QixPQUFPLE1BQVAsQ0FGNEI7QUFHakMsd0JBSGlDLEdBRzFCLE9BQU8sZUFBUCxDQUgwQjtBQUlqQyx5QkFKaUMsR0FJekIsT0FBTyxlQUFQLENBSnlCO0FBS2pDLDBCQUxpQyxHQUt4QixPQUFPLEdBQVAsR0FBYSxLQUxXOztBQU1yQywyQkFBTyxJQUFQLENBQWE7QUFDVCw4QkFBTSxFQURHO0FBRVQsa0NBQVUsTUFGRDtBQUdULGdDQUFRLElBSEM7QUFJVCxpQ0FBUyxLQUpBO0FBS1QsZ0NBQVE7QUFMQyxxQkFBYjtBQU9IO0FBQ0QsdUJBQU8sTUFBUDtBQTdETTtBQUFBO0FBZ0VKLG9CQWhFSTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkFpRUEsU0FBSyxXQUFMLEVBakVBO0FBQUE7QUFBQSx1QkFrRWUsU0FBSyx5QkFBTCxFQWxFZjtBQUFBO0FBa0VGLHdCQWxFRTtBQW1FRix3QkFuRUUsR0FtRVMsU0FBUyxZQUFULENBbkVUO0FBb0VGLHNCQXBFRSxHQW9FTyxFQUFFLFFBQVEsUUFBVixFQXBFUDs7QUFxRU4scUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxTQUFTLE1BQTdCLEVBQXFDLEdBQXJDLEVBQTBDO0FBQ2xDLDJCQURrQyxHQUN4QixTQUFTLENBQVQsQ0FEd0I7QUFFbEMsNEJBRmtDLEdBRXZCLFFBQVEsTUFBUixDQUZ1QjtBQUdsQywyQkFIa0MsR0FHeEI7QUFDVixnQ0FBUSxRQUFRLFNBQVIsQ0FERTtBQUVWLGdDQUFRLFFBQVEsTUFBUixDQUZFO0FBR1YsaUNBQVM7QUFIQyxxQkFId0I7O0FBUXRDLDRCQUFRLE9BQVIsSUFBbUIsU0FBSyxHQUFMLENBQVUsUUFBUSxNQUFSLENBQVYsRUFBMkIsUUFBUSxNQUFSLENBQTNCLENBQW5CO0FBQ0EsMkJBQU8sUUFBUCxJQUFtQixPQUFuQjtBQUNIO0FBQ0QsdUJBQU8sTUFBUDtBQWhGTTtBQUFBO0FBbUZKLHNCQW5GSSwwQkFtRlksTUFuRlo7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFtRm9CLHNCQW5GcEIsbUZBbUY2QixFQW5GN0I7QUFBQSx1QkFvRkEsU0FBSyxXQUFMLEVBcEZBO0FBQUE7QUFxRkYsaUJBckZFLEdBcUZFLFNBQUssTUFBTCxDQUFhLE1BQWIsQ0FyRkY7QUFBQSx1QkFzRmdCLFNBQUssc0JBQUwsQ0FBNkIsU0FBSyxNQUFMLENBQWE7QUFDNUQsbUNBQWUsRUFBRSxJQUFGO0FBRDZDLGlCQUFiLEVBRWhELE1BRmdELENBQTdCLENBdEZoQjtBQUFBO0FBc0ZGLHlCQXRGRTtBQXlGRix5QkF6RkUsR0F5RlUsU0FBSyxZQUFMLEVBekZWO0FBMEZGLHNCQTFGRSxHQTBGTztBQUNULDRCQUFRLEVBREM7QUFFVCw0QkFBUSxFQUZDO0FBR1QsaUNBQWEsU0FISjtBQUlULGdDQUFZLFNBQUssT0FBTCxDQUFjLFNBQWQ7QUFKSCxpQkExRlA7QUFnR0YscUJBaEdFLEdBZ0dNLENBQUUsTUFBRixFQUFVLE1BQVYsQ0FoR047O0FBaUdOLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksTUFBTSxNQUExQixFQUFrQyxHQUFsQyxFQUF1QztBQUMvQix3QkFEK0IsR0FDeEIsTUFBTSxDQUFOLENBRHdCO0FBRS9CLDBCQUYrQixHQUV0QixVQUFVLElBQVYsQ0FGc0I7O0FBR25DLHlCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksT0FBTyxNQUEzQixFQUFtQyxHQUFuQyxFQUF3QztBQUNoQyw2QkFEZ0MsR0FDeEIsT0FBTyxDQUFQLENBRHdCO0FBRWhDLDZCQUZnQyxHQUV4QixXQUFZLE1BQU0sSUFBTixDQUFaLENBRndCO0FBR2hDLDhCQUhnQyxHQUd2QixXQUFZLE1BQU0sS0FBTixDQUFaLENBSHVCOztBQUlwQywrQkFBTyxJQUFQLEVBQWEsSUFBYixDQUFtQixDQUFFLEtBQUYsRUFBUyxNQUFULENBQW5CO0FBQ0g7QUFDSjtBQUNELHVCQUFPLE1BQVA7QUEzR007QUFBQTtBQThHSixtQkE5R0ksdUJBOEdTLE1BOUdUO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkErR0EsU0FBSyxXQUFMLEVBL0dBO0FBQUE7QUFnSEYsaUJBaEhFLEdBZ0hFLFNBQUssTUFBTCxDQUFhLE1BQWIsQ0FoSEY7QUFBQSx1QkFpSGEsU0FBSyxtQkFBTCxDQUEwQjtBQUN6QyxtQ0FBZSxFQUFFLElBQUY7QUFEMEIsaUJBQTFCLENBakhiO0FBQUE7QUFpSEYsc0JBakhFO0FBb0hGLHlCQXBIRSxHQW9IVSxTQUFLLFlBQUwsRUFwSFY7O0FBcUhOLHVCQUFPO0FBQ0gsaUNBQWEsU0FEVjtBQUVILGdDQUFZLFNBQUssT0FBTCxDQUFjLFNBQWQsQ0FGVDtBQUdILDRCQUFRLFdBQVksT0FBTyxNQUFQLENBQVosQ0FITDtBQUlILDJCQUFPLFdBQVksT0FBTyxLQUFQLENBQVosQ0FKSjtBQUtILDJCQUFPLFdBQVksT0FBTyxLQUFQLENBQVosQ0FMSjtBQU1ILDJCQUFPLFdBQVksT0FBTyxLQUFQLENBQVosQ0FOSjtBQU9ILDRCQUFRLFNBUEw7QUFRSCw0QkFBUSxTQVJMO0FBU0gsNkJBQVMsU0FUTjtBQVVILDZCQUFTLFNBVk47QUFXSCw0QkFBUSxXQUFZLE9BQU8sTUFBUCxDQUFaLENBWEw7QUFZSCw4QkFBVSxTQVpQO0FBYUgsa0NBQWMsU0FiWDtBQWNILCtCQUFXLFNBZFI7QUFlSCxrQ0FBYyxXQUFZLE9BQU8sWUFBUCxDQUFaLENBZlg7QUFnQkgsbUNBQWUsV0FBWSxPQUFPLG9CQUFQLENBQVosQ0FoQlo7QUFpQkgsNEJBQVE7QUFqQkwsaUJBQVA7QUFySE07QUFBQTtBQTBJSixtQkExSUksdUJBMElTLE1BMUlUO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBMElpQixzQkExSWpCLG1GQTBJMEIsRUExSTFCO0FBQUEsdUJBMklBLFNBQUssV0FBTCxFQTNJQTtBQUFBO0FBNElOLHVCQUFPLFNBQUssbUJBQUwsQ0FBMEIsU0FBSyxNQUFMLENBQWE7QUFDMUMsMkJBQU8sU0FBSyxRQUFMLENBQWUsTUFBZjtBQURtQyxpQkFBYixFQUU5QixNQUY4QixDQUExQixDQUFQO0FBNUlNO0FBQUE7QUFpSkosbUJBakpJLHVCQWlKUyxNQWpKVCxFQWlKaUIsSUFqSmpCLEVBaUp1QixJQWpKdkIsRUFpSjZCLE1Bako3QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBaUpxQyxxQkFqSnJDLG1GQWlKNkMsU0FqSjdDO0FBaUp3RCxzQkFqSnhELG1GQWlKaUUsRUFqSmpFO0FBQUEsdUJBa0pBLFNBQUssV0FBTCxFQWxKQTtBQUFBO0FBbUpGLHlCQW5KRSxHQW1KVyxRQUFRLFFBQVQsR0FBcUIsQ0FBckIsR0FBeUIsQ0FuSm5DO0FBb0pGLHFCQXBKRSxHQW9KTTtBQUNSLDJCQUFPLFNBQUssUUFBTCxDQUFlLE1BQWYsQ0FEQztBQUVSLDRCQUFRLElBRkE7QUFHUixpQ0FBYSxTQUhMO0FBSVIsMkJBQU8sTUFKQztBQUtSLDBCQUFNO0FBTEUsaUJBcEpOO0FBQUEsdUJBMkplLFNBQUssc0JBQUwsQ0FBNkIsU0FBSyxNQUFMLENBQWEsS0FBYixFQUFvQixNQUFwQixDQUE3QixDQTNKZjtBQUFBO0FBMkpGLHdCQTNKRTs7QUE0Sk4sdUJBQU87QUFDSCw0QkFBUSxRQURMO0FBRUgsMEJBQU0sU0FBUyxlQUFUO0FBRkgsaUJBQVA7QUE1Sk07QUFBQTtBQWtLSixtQkFsS0ksdUJBa0tTLEVBbEtUO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBa0thLHNCQWxLYixtRkFrS3NCLEVBbEt0QjtBQUFBLHVCQW1LQSxTQUFLLFdBQUwsRUFuS0E7QUFBQTtBQW9LTixvQkFBSSxTQUFTLE1BQWIsRUFBcUI7QUFDakIsMkJBQU8sU0FBSyxzQkFBTCxDQUE2QixTQUFLLE1BQUwsQ0FBYTtBQUM3Qyx5Q0FBaUI7QUFENEIscUJBQWIsRUFFakMsTUFGaUMsQ0FBN0IsQ0FBUDtBQUdILGlCQUpEO0FBS0EsMEJBQU0sSUFBSSxhQUFKLENBQW1CLFNBQUssRUFBTCxHQUFVLDBEQUE3QixDQUFOO0FBTEE7QUFwS007QUFBQTtBQTRLSixlQTVLSSxtQkE0S0ssSUE1S0w7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQTRLVyxtQkE1S1gsbUZBNEtpQixRQTVLakI7QUE0SzJCLHNCQTVLM0IsbUZBNEtvQyxLQTVLcEM7QUE0SzJDLHNCQTVLM0MsbUZBNEtvRCxFQTVLcEQ7QUE0S3dELHVCQTVLeEQsbUZBNEtrRSxTQTVLbEU7QUE0SzZFLG9CQTVLN0UsbUZBNEtvRixTQTVLcEY7QUE2S0YsbUJBN0tFLEdBNktJLFNBQUssSUFBTCxDQUFVLEtBQVYsSUFBbUIsR0FBbkIsR0FBeUIsU0FBSyxPQUE5QixHQUF3QyxHQUF4QyxHQUE4QyxJQTdLbEQ7O0FBOEtOLG9CQUFJLE9BQU8sUUFBWCxFQUFxQjtBQUNqQix3QkFBSSxPQUFPLElBQVAsQ0FBYSxNQUFiLEVBQXFCLE1BQXpCLEVBQWlDO0FBQzdCLCtCQUFPLFNBQUssSUFBTCxDQUFXLE1BQVgsQ0FBUDtBQUNIO0FBQ0osaUJBSkQsTUFJTztBQUNILHdCQUFJLENBQUMsU0FBSyxHQUFWO0FBQ0ksOEJBQU0sSUFBSSxtQkFBSixDQUF5QixTQUFLLEVBQUwsR0FBVSxhQUFWLEdBQTBCLFNBQUssRUFBL0IsR0FBb0MsbUNBQTdELENBQU47QUFESixxQkFFSSxLQUhELEdBR1MsU0FBSyxLQUFMLEVBSFQ7QUFJQyx3QkFKRCxHQUlRLE1BQU0sUUFBTixLQUFvQixTQUFLLEdBQXpCLEdBQStCLFNBQUssTUFKNUM7QUFLQyw2QkFMRCxHQUthLFNBQUssSUFBTCxDQUFXLFNBQUssTUFBTCxDQUFhLElBQWIsQ0FBWCxFQUErQixTQUFLLE1BQUwsQ0FBYSxTQUFLLE1BQWxCLENBQS9CLENBTGI7O0FBTUgsMkJBQU8sU0FBSyxJQUFMLENBQVcsU0FBSyxNQUFMLENBQWE7QUFDM0Isa0NBQVUsU0FBSyxNQURZO0FBRTNCLG9DQUFZLEtBRmU7QUFHM0Isa0NBQVUsVUFBVSxXQUFWO0FBSGlCLHFCQUFiLEVBSWYsTUFKZSxDQUFYLENBQVA7QUFLQSw4QkFBVTtBQUNOLHdDQUFnQixrQkFEVjtBQUVOLDBDQUFrQixLQUFLO0FBRmpCLHFCQUFWO0FBSUg7QUFqTUssdUJBa01lLFNBQUssS0FBTCxDQUFZLEdBQVosRUFBaUIsTUFBakIsRUFBeUIsT0FBekIsRUFBa0MsSUFBbEMsQ0FsTWY7QUFBQTtBQWtNRix3QkFsTUU7QUFBQSwwQkFtTUYsZ0JBQWdCLFFBbk1kOztBQW9NRiwrQkFBSSxTQUFTLFlBQVQsQ0FBSjtBQUNJLDJCQUFPLFFBQVA7QUFESjtBQUVKLDBCQUFNLElBQUksYUFBSixDQUFtQixTQUFLLEVBQUwsR0FBVSxHQUFWLEdBQWdCLFNBQUssSUFBTCxDQUFXLFFBQVgsQ0FBbkMsQ0FBTjtBQUZJO0FBcE1FO0FBQUE7QUFBQSxLQUFkOztBQTBNQTs7QUFFQSxRQUFJLFNBQVMsT0FBUSxVQUFSLEVBQW9CO0FBQzdCLGNBQU0sUUFEdUI7QUFFN0IsZ0JBQVEsUUFGcUI7QUFHN0IscUJBQWEsSUFIZ0I7QUFJN0IsZ0JBQVE7QUFDSixvQkFBUSxxR0FESjtBQUVKLG1CQUFPO0FBQ0gsMEJBQVUsZ0NBRFA7QUFFSCwyQkFBVztBQUZSLGFBRkg7QUFNSixtQkFBTyx5QkFOSDtBQU9KLG1CQUFPO0FBUEgsU0FKcUI7QUFhN0IsbUJBQVcsZ0JBYmtCO0FBYzdCLG1CQUFXO0FBQ1AsdUJBQVcsRUFBRSxNQUFNLFFBQVIsRUFBa0IsVUFBVSxTQUE1QixFQUF1QyxRQUFRLEtBQS9DLEVBQXNELFNBQVMsS0FBL0QsRUFBc0UsWUFBWSxDQUFsRixFQUFxRixVQUFVLFFBQS9GO0FBREo7QUFka0IsS0FBcEIsQ0FBYjs7QUFtQkE7O0FBRUEsUUFBSSxNQUFNOztBQUVOLHFCQUFhLElBRlA7QUFHTixlQUFPO0FBQ0gsc0JBQVU7QUFDTix1QkFBTyxDQUNILFFBREcsRUFFSCxnQkFGRyxFQUdILFdBSEcsRUFJSCxRQUpHO0FBREQsYUFEUDtBQVNILHVCQUFXO0FBQ1Asd0JBQVEsQ0FDSixNQURJLEVBRUosWUFGSSxFQUdKLGtCQUhJLEVBSUosaUJBSkksRUFLSixvQkFMSSxFQU1KLFlBTkksRUFPSixVQVBJO0FBREQ7QUFUUixTQUhEOztBQXlCQSxvQkF6QkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkEwQmtCLFNBQUsscUJBQUwsRUExQmxCO0FBQUE7QUEwQkUsdUJBMUJGO0FBMkJFLG1CQTNCRixHQTJCUSxXQUFZLFFBQVEsUUFBUixDQUFaLENBM0JSO0FBNEJFLHNCQTVCRixHQTRCVyxTQUFLLE9BQUwsQ0FBYSxDQUFiLENBNUJYO0FBNkJFLHFCQTdCRixHQTZCVSxTQUFLLE9BQUwsQ0FBYSxNQUFiLEVBQXFCLE9BQXJCLENBN0JWO0FBOEJFLHlCQTlCRixHQThCYyxNQUFNLFdBQU4sS0FBdUIsS0E5QnJDO0FBK0JFLG9CQS9CRixHQStCUyxXQUFZLFFBQVEsU0FBUixDQUFaLENBL0JUO0FBZ0NFLHNCQWhDRixHQWdDVztBQUNULDRCQUFRLEdBREM7QUFFVCw0QkFBUSxTQUZDO0FBR1QsNkJBQVM7QUFIQSxpQkFoQ1g7QUFxQ0Usd0JBckNGLEdBcUNhLEVBQUUsT0FBTyxNQUFULEVBckNiOztBQXNDRix5QkFBUyxLQUFULElBQWtCO0FBQ2QsNEJBQVEsSUFETTtBQUVkLDRCQUFRLFNBRk07QUFHZCw2QkFBUztBQUhLLGlCQUFsQjtBQUtBLHlCQUFTLE1BQVQsSUFBbUIsT0FBbkI7QUFDQSx1QkFBTyxRQUFQO0FBNUNFO0FBQUE7QUErQ0Esc0JBL0NBLDBCQStDZ0IsTUEvQ2hCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQStDd0Isc0JBL0N4QixtRkErQ2lDLEVBL0NqQztBQUFBLHVCQWdEb0IsU0FBSyxrQkFBTCxDQUF5QixNQUF6QixDQWhEcEI7QUFBQTtBQWdERSx5QkFoREY7QUFpREUseUJBakRGLEdBaURjLFNBQUssWUFBTCxFQWpEZDtBQWtERSxzQkFsREYsR0FrRFc7QUFDVCw0QkFBUSxFQURDO0FBRVQsNEJBQVEsRUFGQztBQUdULGlDQUFhLFNBSEo7QUFJVCxnQ0FBWSxTQUFLLE9BQUwsQ0FBYyxTQUFkO0FBSkgsaUJBbERYO0FBd0RFLHFCQXhERixHQXdEVSxDQUFFLE1BQUYsRUFBVSxNQUFWLENBeERWOztBQXlERixxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLE1BQU0sTUFBMUIsRUFBa0MsR0FBbEMsRUFBdUM7QUFDL0Isd0JBRCtCLEdBQ3hCLE1BQU0sQ0FBTixDQUR3QjtBQUUvQiwwQkFGK0IsR0FFdEIsVUFBVSxJQUFWLENBRnNCOztBQUduQyx5QkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLE9BQU8sTUFBM0IsRUFBbUMsR0FBbkMsRUFBd0M7QUFDaEMsNkJBRGdDLEdBQ3hCLE9BQU8sQ0FBUCxDQUR3QjtBQUVoQyw2QkFGZ0MsR0FFeEIsV0FBWSxNQUFNLENBQU4sQ0FBWixDQUZ3QjtBQUdoQyw4QkFIZ0MsR0FHdkIsV0FBWSxNQUFNLENBQU4sQ0FBWixDQUh1Qjs7QUFJcEMsK0JBQU8sSUFBUCxFQUFhLElBQWIsQ0FBbUIsQ0FBRSxLQUFGLEVBQVMsTUFBVCxDQUFuQjtBQUNIO0FBQ0o7QUFDRCx1QkFBTyxNQUFQO0FBbkVFO0FBQUE7QUFzRUEsbUJBdEVBLHVCQXNFYSxNQXRFYjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkF1RWlCLFNBQUssdUJBQUwsRUF2RWpCO0FBQUE7QUF1RUUsc0JBdkVGO0FBd0VFLHlCQXhFRixHQXdFYyxTQUFLLFlBQUwsRUF4RWQ7QUF5RUUsb0JBekVGLEdBeUVTLFNBekVUO0FBMEVFLHNCQTFFRixHQTBFVyxTQTFFWDs7QUEyRUYsb0JBQUksVUFBVSxNQUFkO0FBQ0ksMkJBQU8sV0FBWSxPQUFPLE1BQVAsQ0FBWixDQUFQO0FBREosaUJBRUEsSUFBSSxTQUFTLE1BQWI7QUFDSSw2QkFBUyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBQVQ7QUFESixpQkFFQSxPQUFPO0FBQ0gsaUNBQWEsU0FEVjtBQUVILGdDQUFZLFNBQUssT0FBTCxDQUFjLFNBQWQsQ0FGVDtBQUdILDRCQUFRLFNBSEw7QUFJSCwyQkFBTyxTQUpKO0FBS0gsMkJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQUxKO0FBTUgsMkJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQU5KO0FBT0gsNEJBQVEsU0FQTDtBQVFILDRCQUFRLFNBUkw7QUFTSCw2QkFBUyxTQVROO0FBVUgsNkJBQVMsU0FWTjtBQVdILDRCQUFRLElBWEw7QUFZSCw4QkFBVSxTQVpQO0FBYUgsa0NBQWMsU0FiWDtBQWNILCtCQUFXLFNBZFI7QUFlSCxrQ0FBYyxTQWZYO0FBZ0JILG1DQUFlLE1BaEJaO0FBaUJILDRCQUFRO0FBakJMLGlCQUFQO0FBL0VFO0FBQUE7QUFvR0EsbUJBcEdBLHVCQW9HYSxNQXBHYjtBQUFBO0FBQUE7QUFBQTs7QUFvR3FCLGtCQXBHckIsbUZBb0c4QixFQXBHOUI7O0FBcUdGLG1CQUFPLFNBQUssZUFBTCxDQUFzQixNQUF0QixDQUFQO0FBckdFO0FBd0dBLG1CQXhHQSx1QkF3R2EsTUF4R2IsRUF3R3FCLElBeEdyQixFQXdHMkIsSUF4RzNCLEVBd0dpQyxNQXhHakM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBd0d5QyxxQkF4R3pDLG1GQXdHaUQsU0F4R2pEO0FBd0c0RCxzQkF4RzVELG1GQXdHcUUsRUF4R3JFO0FBQUEsdUJBeUdtQixTQUFLLHFCQUFMLENBQTRCLFNBQUssTUFBTCxDQUFhO0FBQzFELDJCQUFPLE1BRG1EO0FBRTFELDZCQUFTLEtBRmlEO0FBRzFELDRCQUFRLEtBQUssQ0FBTCxFQUFRLFdBQVI7QUFIa0QsaUJBQWIsRUFJOUMsTUFKOEMsQ0FBNUIsQ0F6R25CO0FBQUE7QUF5R0Usd0JBekdGOztBQThHRix1QkFBTztBQUNILDRCQUFRLFFBREw7QUFFSCwwQkFBTSxTQUFTLGFBQVQ7QUFGSCxpQkFBUDtBQTlHRTtBQUFBO0FBb0hBLG1CQXBIQSx1QkFvSGEsRUFwSGI7QUFBQTs7QUFxSEYsbUJBQU8sU0FBSyw2QkFBTCxDQUFvQyxFQUFFLFdBQVcsRUFBYixFQUFwQyxDQUFQO0FBckhFO0FBd0hBLGVBeEhBLG1CQXdIUyxJQXhIVDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBd0hlLG1CQXhIZixtRkF3SHFCLFFBeEhyQjtBQXdIK0Isc0JBeEgvQixtRkF3SHdDLEtBeEh4QztBQXdIK0Msc0JBeEgvQyxtRkF3SHdELEVBeEh4RDtBQXdINEQsdUJBeEg1RCxtRkF3SHNFLFNBeEh0RTtBQXdIaUYsb0JBeEhqRixtRkF3SHdGLFNBeEh4RjtBQXlIRSxtQkF6SEYsR0F5SFEsU0FBSyxJQUFMLENBQVUsS0FBVixJQUFtQixHQUFuQixHQUF5QixJQXpIakM7O0FBMEhGLG9CQUFJLE9BQU8sUUFBWCxFQUFxQjtBQUNqQiwyQkFBTyxPQUFQO0FBQ0gsaUJBRkQsTUFFTztBQUNDLHlCQURELEdBQ1MsU0FBSyxLQUFMLEVBRFQ7O0FBRUgsMkJBQU8sU0FBSyxTQUFMLENBQWdCLFNBQUssTUFBTCxDQUFhLEVBQUUsYUFBYSxLQUFmLEVBQWIsRUFBcUMsTUFBckMsQ0FBaEIsQ0FBUDtBQUNBLDhCQUFVO0FBQ04sd0NBQWdCLG1DQURWO0FBRU4sK0JBQU8sU0FBSyxNQUZOO0FBR04sK0JBQU8sU0FBSyxJQUFMLENBQVcsU0FBSyxNQUFMLENBQWEsSUFBYixDQUFYLEVBQStCLFNBQUssTUFBTCxDQUFhLFNBQUssTUFBbEIsQ0FBL0IsRUFBMEQsTUFBMUQ7QUFIRCxxQkFBVjtBQUtIO0FBcElDLHVCQXFJbUIsU0FBSyxLQUFMLENBQVksR0FBWixFQUFpQixNQUFqQixFQUF5QixPQUF6QixFQUFrQyxJQUFsQyxDQXJJbkI7QUFBQTtBQXFJRSx3QkFySUY7O0FBc0lGLG9CQUFJLE9BQU8sU0FBWDtBQUNJLHdCQUFJLFdBQVcsUUFBZjtBQUNJLDRCQUFJLFNBQVMsT0FBVCxDQUFKO0FBQ0ksa0NBQU0sSUFBSSxhQUFKLENBQW1CLFNBQUssRUFBTCxHQUFVLEdBQVYsR0FBZ0IsU0FBSyxJQUFMLENBQVcsUUFBWCxDQUFuQyxDQUFOO0FBREo7QUFESjtBQURKLGlCQUlBLE9BQU8sUUFBUDtBQTFJRTtBQUFBO0FBQUEsS0FBVjs7QUE4SUE7O0FBRUEsUUFBSSxRQUFRLE9BQVEsR0FBUixFQUFhO0FBQ3JCLGNBQU0sT0FEZTtBQUVyQixnQkFBUSxRQUZhO0FBR3JCLHFCQUFhLElBSFEsRUFHRjtBQUNuQixnQkFBUTtBQUNKLG9CQUFRLHFHQURKO0FBRUosbUJBQU8sOEJBRkg7QUFHSixtQkFBTyxzQkFISDtBQUlKLG1CQUFPO0FBSkgsU0FKYTtBQVVyQixtQkFBVztBQUNQLHVCQUFXLEVBQUUsTUFBTSxLQUFSLEVBQWUsVUFBVSxTQUF6QixFQUFvQyxRQUFRLEtBQTVDLEVBQW1ELFNBQVMsS0FBNUQ7QUFESjtBQVZVLEtBQWIsQ0FBWjs7QUFlQTs7QUFFQSxRQUFJLFFBQVEsT0FBUSxHQUFSLEVBQWE7QUFDckIsY0FBTSxPQURlO0FBRXJCLGdCQUFRLFFBRmE7QUFHckIscUJBQWEsSUFIUSxFQUdGO0FBQ25CLGdCQUFRO0FBQ0osb0JBQVEscUdBREo7QUFFSixtQkFBTywrQkFGSDtBQUdKLG1CQUFPLHVCQUhIO0FBSUosbUJBQU87QUFKSCxTQUphO0FBVXJCLG1CQUFXO0FBQ1AsdUJBQVcsRUFBRSxNQUFNLEtBQVIsRUFBZSxVQUFVLFNBQXpCLEVBQW9DLFFBQVEsS0FBNUMsRUFBbUQsU0FBUyxLQUE1RDtBQURKO0FBVlUsS0FBYixDQUFaOztBQWVBOztBQUVBLFFBQUksV0FBVzs7QUFFWCxjQUFNLFVBRks7QUFHWCxnQkFBUSxVQUhHO0FBSVgscUJBQWEsSUFKRjtBQUtYLHFCQUFhLElBTEYsRUFLUTtBQUNuQixtQkFBVywrQkFOQTtBQU9YLDJCQUFtQixJQVBSO0FBUVgsZ0JBQVE7QUFDSixvQkFBUSxxR0FESjtBQUVKLG1CQUFPLDBCQUZIO0FBR0osbUJBQU8sc0JBSEg7QUFJSixtQkFBTyxDQUNILDBCQURHLEVBRUgsd0RBRkcsRUFHSCxnREFIRztBQUpILFNBUkc7QUFrQlgsZUFBTztBQUNILHNCQUFVO0FBQ04sdUJBQU8sQ0FDSCxxQkFERyxFQUNvQjtBQUN2QixtQ0FGRyxFQUVrQjtBQUNyQixrREFIRyxFQUdpQztBQUNwQyxvQ0FKRyxFQUltQjtBQUN0QixtREFMRyxFQUtrQztBQUNyQyx5REFORyxFQU13QztBQUMzQyxxRUFQRyxFQU9vRDtBQUN2RCxpRUFSRyxFQVFnRDtBQUNuRCxvREFURyxFQVNtQztBQUN0QywyREFWRyxFQVUwQztBQUM3Qyw4Q0FYRyxFQVc2QjtBQUNoQyxxQ0FaRyxFQVlvQjtBQUN2QixzQ0FiRyxFQWFxQjtBQUN4Qix5Q0FkRyxFQWN3QjtBQUMzQiw2Q0FmRyxFQWU0QjtBQUMvQiwrQ0FoQkcsRUFnQjhCO0FBQ2pDLDJDQWpCRyxFQWlCMEI7QUFDN0IsNENBbEJHLEVBa0IyQjtBQUM5QixpREFuQkcsRUFtQmdDO0FBQ25DLHNDQXBCRyxDQUREO0FBdUJOLHdCQUFRLENBQ0oscUJBREksRUFDbUI7QUFDdkIsc0JBRkksRUFFSTtBQUNSLGdEQUhJLEVBRzhCO0FBQ2xDLDhCQUpJO0FBdkJGLGFBRFA7QUErQkgsdUJBQVc7QUFDUCx1QkFBTyxDQUNILHVCQURHLEVBQ3NCO0FBQ3pCLHlDQUZHLEVBRXdCO0FBQzNCLDZDQUhHLEVBRzRCO0FBQy9CLG9DQUpHLEVBSW1CO0FBQ3RCLDZDQUxHLEVBSzRCO0FBQy9CLCtCQU5HLEVBTWM7QUFDakIsaUNBUEcsRUFPZ0I7QUFDbkIsK0JBUkcsRUFRYztBQUNqQiw2Q0FURyxFQVM0QjtBQUMvQiwrQkFWRyxFQVVjO0FBQ2pCLGlDQVhHLEVBV2dCO0FBQ25CLHVDQVpHLEVBWXNCO0FBQ3pCLGtDQWJHLEVBYWlCO0FBQ3BCLHNDQWRHLEVBY3FCO0FBQ3hCLHVDQWZHLEVBZXNCO0FBQ3pCLHdDQWhCRyxFQWdCdUI7QUFDMUIsc0NBakJHLEVBaUJxQjtBQUN4Qiw2Q0FsQkcsRUFrQjRCO0FBQy9CLDBDQW5CRyxFQW1CeUI7QUFDNUIsOEJBcEJHLEVBb0JhO0FBQ2hCLCtCQXJCRyxFQXFCYztBQUNqQix3Q0F0QkcsRUFzQnVCO0FBQzFCLGtDQXZCRyxFQXVCaUI7QUFDcEIsNkNBeEJHLEVBd0I0QjtBQUMvQixrQ0F6QkcsRUF5QmlCO0FBQ3BCLHFDQTFCRyxFQTBCb0I7QUFDdkIscURBM0JHLEVBMkJvQztBQUN2QyxtQ0E1QkcsRUE0QmtCO0FBQ3JCLG1DQTdCRyxFQTZCa0I7QUFDckIsOENBOUJHLEVBOEI2QjtBQUNoQyxpREEvQkcsRUErQmdDO0FBQ25DLGdFQWhDRyxFQWdDK0M7QUFDbEQsK0NBakNHLEVBaUM4QjtBQUNqQyw4REFsQ0csRUFrQzZDO0FBQ2hELDhDQW5DRyxFQW1DNkI7QUFDaEMsNkRBcENHLEVBb0M0QztBQUMvQyx3Q0FyQ0csRUFxQ3VCO0FBQzFCLHdDQXRDRyxFQXNDdUI7QUFDMUIsdUNBdkNHLEVBdUNzQjtBQUN6Qiw4QkF4Q0csRUF3Q2E7QUFDaEIsd0NBekNHLEVBeUN1QjtBQUMxQixrQ0ExQ0csRUEwQ2lCO0FBQ3BCLHlDQTNDRyxFQTJDd0I7QUFDM0IsOEJBNUNHLEVBNENhO0FBQ2hCLGtDQTdDRyxDQURBO0FBZ0RQLHdCQUFRLENBQ0oseUJBREksRUFDdUI7QUFDM0IsNkNBRkksRUFFMkI7QUFDL0Isb0NBSEksRUFHa0I7QUFDdEIsNkNBSkksRUFJMkI7QUFDL0Isc0NBTEksRUFLb0I7QUFDeEIsb0NBTkksRUFNa0I7QUFDdEIsK0JBUEksRUFPYTtBQUNqQix1Q0FSSSxFQVFxQjtBQUN6QixrQ0FUSSxFQVNnQjtBQUNwQiwrQkFWSSxFQVVhO0FBQ2pCLHFDQVhJLEVBV21CO0FBQ3ZCLHFDQVpJLEVBWW1CO0FBQ3ZCLG1DQWJJLEVBYWlCO0FBQ3JCLDRCQWRJLEVBY1U7QUFDZCw2QkFmSSxFQWVXO0FBQ2YsMENBaEJJLEVBZ0J3QjtBQUM1QixvQ0FqQkksRUFpQmtCO0FBQ3RCLG1DQWxCSSxFQWtCaUI7QUFDckIsbUNBbkJJLEVBbUJpQjtBQUNyQixnRUFwQkksRUFvQjhDO0FBQ2xELHVFQXJCSSxFQXFCcUQ7QUFDekQsMEVBdEJJLEVBc0J3RDtBQUM1RCw2REF2QkksRUF1QjJDO0FBQy9DLDZEQXhCSSxFQXdCMkM7QUFDL0MsdUNBekJJLEVBeUJxQjtBQUN6Qiw0Q0ExQkksRUEwQjBCO0FBQzlCLDhCQTNCSSxFQTJCWTtBQUNoQixrQ0E1QkksQ0FoREQ7QUE4RVAsdUJBQU8sQ0FDSCx1QkFERyxFQUNzQjtBQUN6QixvQ0FGRyxFQUVtQjtBQUN0Qiw2Q0FIRyxFQUc0QjtBQUMvQiwrQkFKRyxFQUljO0FBQ2pCLDZDQUxHLEVBSzRCO0FBQy9CLCtCQU5HLEVBTWM7QUFDakIsdUNBUEcsRUFPc0I7QUFDekIsc0NBUkcsRUFRcUI7QUFDeEIsNkNBVEcsRUFTNEI7QUFDL0IsMENBVkcsRUFVeUI7QUFDNUIsOEJBWEcsRUFXYTtBQUNoQixtQ0FaRyxFQVlrQjtBQUNyQiw4RUFiRyxFQWE2RDtBQUNoRSw2REFkRyxFQWM0QztBQUMvQyx3Q0FmRyxFQWV1QjtBQUMxQix3Q0FoQkcsQ0E5RUE7QUFnR1AsMEJBQVUsQ0FDTiwyQkFETSxFQUN1QjtBQUM3QiwrQ0FGTSxFQUUyQjtBQUNqQyxzREFITSxFQUdrQztBQUN4Qyw4RUFKTSxFQUkwRDtBQUNoRSwyRUFMTSxFQUt1RDtBQUM3RCw4QkFOTSxFQU1VO0FBQ2hCLHdDQVBNLEVBT29CO0FBQzFCLGtDQVJNLEVBUWM7QUFDcEIsdUNBVE07QUFoR0g7QUEvQlIsU0FsQkk7O0FBK0pMLG9CQS9KSztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBZ0tjLFNBQUssMEJBQUwsRUFoS2Q7QUFBQTtBQWdLSCx3QkFoS0c7QUFpS0gsdUJBaktHLEdBaUtPLFNBQVMsU0FBVCxDQWpLUDtBQWtLSCxzQkFsS0csR0FrS00sRUFsS047O0FBbUtQLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksUUFBUSxNQUE1QixFQUFvQyxHQUFwQyxFQUF5QztBQUNqQywwQkFEaUMsR0FDeEIsUUFBUSxDQUFSLENBRHdCO0FBRWpDLHNCQUZpQyxHQUU1QixPQUFPLGNBQVAsQ0FGNEI7QUFHakMsd0JBSGlDLEdBRzFCLEdBQUcsS0FBSCxDQUFVLENBQVYsRUFBYSxDQUFiLENBSDBCO0FBSWpDLHlCQUppQyxHQUl6QixHQUFHLEtBQUgsQ0FBVSxDQUFWLEVBQWEsQ0FBYixDQUp5QjtBQUtqQywwQkFMaUMsR0FLeEIsT0FBTyxHQUFQLEdBQWEsS0FMVzs7QUFNckMsMkJBQU8sSUFBUCxDQUFhO0FBQ1QsOEJBQU0sRUFERztBQUVULGtDQUFVLE1BRkQ7QUFHVCxnQ0FBUSxJQUhDO0FBSVQsaUNBQVMsS0FKQTtBQUtULGdDQUFRO0FBTEMscUJBQWI7QUFPSDtBQUNELHVCQUFPLE1BQVA7QUFqTE87QUFBQTtBQW9MTCxvQkFwTEs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBcUxELFNBQUssV0FBTCxFQXJMQztBQUFBO0FBQUEsdUJBc0xjLFNBQUsseUJBQUwsRUF0TGQ7QUFBQTtBQXNMSCx3QkF0TEc7QUF1TEgsd0JBdkxHLEdBdUxRLFNBQVMsVUFBVCxDQXZMUjtBQXdMSCxzQkF4TEcsR0F3TE0sRUFBRSxRQUFRLFFBQVYsRUF4TE47O0FBeUxQLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksU0FBUyxNQUE3QixFQUFxQyxHQUFyQyxFQUEwQztBQUNsQywyQkFEa0MsR0FDeEIsU0FBUyxDQUFULENBRHdCO0FBRWxDLDRCQUZrQyxHQUV2QixRQUFRLFVBQVIsQ0FGdUI7QUFHbEMsMkJBSGtDLEdBR3hCO0FBQ1YsZ0NBQVEsUUFBUSxrQkFBUixDQURFO0FBRVYsZ0NBQVEsU0FBSyxHQUFMLENBQ0osUUFBUSxpQkFBUixDQURJLEVBRUosUUFBUSxpQkFBUixDQUZJLEVBR0osUUFBUSxXQUFSLENBSEksQ0FGRTtBQU1WLGlDQUFTLFFBQVEsU0FBUjtBQU5DLHFCQUh3Qjs7QUFXdEMsMkJBQU8sUUFBUCxJQUFtQixPQUFuQjtBQUNIO0FBQ0QsdUJBQU8sTUFBUDtBQXRNTztBQUFBO0FBeU1MLHNCQXpNSywwQkF5TVcsTUF6TVg7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUF5TW1CLHNCQXpNbkIsbUZBeU00QixFQXpNNUI7QUFBQSx1QkEwTUQsU0FBSyxXQUFMLEVBMU1DO0FBQUE7QUEyTUgsaUJBM01HLEdBMk1DLFNBQUssTUFBTCxDQUFhLE1BQWIsQ0EzTUQ7QUFBQSx1QkE0TWUsU0FBSyxzQ0FBTCxDQUE2QyxTQUFLLE1BQUwsQ0FBYTtBQUM1RSxvQ0FBZ0IsRUFBRSxJQUFGO0FBRDRELGlCQUFiLEVBRWhFLE1BRmdFLENBQTdDLENBNU1mO0FBQUE7QUE0TUgseUJBNU1HO0FBK01ILHlCQS9NRyxHQStNUyxTQUFLLFlBQUwsRUEvTVQ7QUFnTkgsc0JBaE5HLEdBZ05NO0FBQ1QsNEJBQVEsRUFEQztBQUVULDRCQUFRLEVBRkM7QUFHVCxpQ0FBYSxTQUhKO0FBSVQsZ0NBQVksU0FBSyxPQUFMLENBQWMsU0FBZDtBQUpILGlCQWhOTjtBQXNOSCxxQkF0TkcsR0FzTkssQ0FBRSxNQUFGLEVBQVUsTUFBVixDQXROTDs7QUF1TlAscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxNQUFNLE1BQTFCLEVBQWtDLEdBQWxDLEVBQXVDO0FBQy9CLHdCQUQrQixHQUN4QixNQUFNLENBQU4sQ0FEd0I7QUFFL0IsMEJBRitCLEdBRXRCLFVBQVUsSUFBVixDQUZzQjs7QUFHbkMseUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxPQUFPLE1BQTNCLEVBQW1DLEdBQW5DLEVBQXdDO0FBQ2hDLDZCQURnQyxHQUN4QixPQUFPLENBQVAsQ0FEd0I7QUFFaEMsNkJBRmdDLEdBRXhCLFdBQVksTUFBTSxPQUFOLENBQVosQ0FGd0I7QUFHaEMsOEJBSGdDLEdBR3ZCLFdBQVksTUFBTSxRQUFOLENBQVosQ0FIdUI7O0FBSXBDLCtCQUFPLElBQVAsRUFBYSxJQUFiLENBQW1CLENBQUUsS0FBRixFQUFTLE1BQVQsQ0FBbkI7QUFDSDtBQUNKO0FBQ0QsdUJBQU8sTUFBUDtBQWpPTztBQUFBO0FBb09YLG1CQXBPVyx1QkFvT0UsTUFwT0YsRUFvT1UsTUFwT1YsRUFvT2tCO0FBQ3pCLGdCQUFJLFlBQVksU0FBVSxPQUFPLGdCQUFQLENBQVYsSUFBc0MsSUFBdEQ7QUFDQSxtQkFBTztBQUNILDZCQUFhLFNBRFY7QUFFSCw0QkFBWSxLQUFLLE9BQUwsQ0FBYyxTQUFkLENBRlQ7QUFHSCx3QkFBUSxXQUFZLE9BQU8sTUFBUCxDQUFaLENBSEw7QUFJSCx1QkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBSko7QUFLSCx1QkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBTEo7QUFNSCx1QkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBTko7QUFPSCx3QkFBUSxXQUFZLE9BQU8sTUFBUCxDQUFaLENBUEw7QUFRSCx3QkFBUSxXQUFZLE9BQU8sTUFBUCxDQUFaLENBUkw7QUFTSCx5QkFBUyxTQVROO0FBVUgseUJBQVMsU0FWTjtBQVdILHdCQUFRLFdBQVksT0FBTyxNQUFQLENBQVosQ0FYTDtBQVlILDBCQUFVLFNBWlA7QUFhSCw4QkFBYyxTQWJYO0FBY0gsMkJBQVcsU0FkUjtBQWVILDhCQUFjLFNBZlg7QUFnQkgsK0JBQWUsV0FBWSxPQUFPLFFBQVAsQ0FBWixDQWhCWjtBQWlCSCx3QkFBUTtBQWpCTCxhQUFQO0FBbUJILFNBelBVO0FBMlBMLG9CQTNQSztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQTRQRCxTQUFLLFdBQUwsRUE1UEM7QUFBQTtBQUFBLHVCQTZQYyxTQUFLLDBCQUFMLEVBN1BkO0FBQUE7QUE2UEgsd0JBN1BHO0FBOFBILHVCQTlQRyxHQThQTyxTQUFTLFNBQVQsQ0E5UFA7QUErUEgsc0JBL1BHLEdBK1BNLEVBL1BOOztBQWdRUCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFFBQVEsTUFBNUIsRUFBb0MsR0FBcEMsRUFBeUM7QUFDakMsMEJBRGlDLEdBQ3hCLFFBQVEsQ0FBUixDQUR3QjtBQUVqQyxzQkFGaUMsR0FFNUIsT0FBTyxjQUFQLENBRjRCO0FBR2pDLDBCQUhpQyxHQUd4QixTQUFLLGFBQUwsQ0FBbUIsRUFBbkIsQ0FId0I7QUFJakMsMEJBSmlDLEdBSXhCLE9BQU8sUUFBUCxDQUp3Qjs7QUFLckMsMkJBQU8sTUFBUCxJQUFpQixTQUFLLFdBQUwsQ0FBa0IsTUFBbEIsRUFBMEIsTUFBMUIsQ0FBakI7QUFDSDtBQUNELHVCQUFPLE1BQVA7QUF2UU87QUFBQTtBQTBRTCxtQkExUUssdUJBMFFRLE1BMVFSO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkEyUUQsU0FBSyxXQUFMLEVBM1FDO0FBQUE7QUE0UUgsaUJBNVFHLEdBNFFDLFNBQUssTUFBTCxDQUFhLE1BQWIsQ0E1UUQ7QUFBQSx1QkE2UWMsU0FBSyxxQ0FBTCxDQUE0QztBQUM3RCxvQ0FBZ0IsRUFBRSxJQUFGO0FBRDZDLGlCQUE1QyxDQTdRZDtBQUFBO0FBNlFILHdCQTdRRztBQWdSSCxzQkFoUkcsR0FnUk0sU0FBUyxRQUFULENBaFJOOztBQWlSUCx1QkFBTyxTQUFLLFdBQUwsQ0FBa0IsTUFBbEIsRUFBMEIsQ0FBMUIsQ0FBUDtBQWpSTztBQUFBO0FBb1JMLG1CQXBSSyx1QkFvUlEsTUFwUlI7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFvUmdCLHNCQXBSaEIsbUZBb1J5QixFQXBSekI7QUFBQSx1QkFxUkQsU0FBSyxXQUFMLEVBclJDO0FBQUE7QUFzUlAsdUJBQU8sU0FBSyx1Q0FBTCxDQUE4QyxTQUFLLE1BQUwsQ0FBYTtBQUM5RCxvQ0FBZ0IsU0FBSyxRQUFMLENBQWUsTUFBZjtBQUQ4QyxpQkFBYixFQUVsRCxNQUZrRCxDQUE5QyxDQUFQO0FBdFJPO0FBQUE7QUEyUkwsbUJBM1JLLHVCQTJSUSxNQTNSUixFQTJSZ0IsSUEzUmhCLEVBMlJzQixJQTNSdEIsRUEyUjRCLE1BM1I1QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQTJSb0MscUJBM1JwQyxtRkEyUjRDLFNBM1I1QztBQTJSdUQsc0JBM1J2RCxtRkEyUmdFLEVBM1JoRTtBQUFBLHVCQTRSRCxTQUFLLFdBQUwsRUE1UkM7QUFBQTtBQTZSSCxxQkE3UkcsR0E2Uks7QUFDUiw0QkFBUSxTQUFLLFFBQUwsQ0FBZSxNQUFmLENBREE7QUFFUiwyQkFBUSxRQUFRLEtBQVQsR0FBa0IsS0FBbEIsR0FBMEIsS0FGekI7QUFHUiw4QkFBVTtBQUhGLGlCQTdSTDs7QUFrU1Asb0JBQUksUUFBUSxPQUFaO0FBQ0ksMEJBQU0sT0FBTixJQUFpQixLQUFqQjtBQURKLGlCQUVBLElBQUksU0FBSyxLQUFULEVBQWdCO0FBQ1osd0JBQUksb0JBQW9CLE1BQXhCO0FBQ0ksOEJBQU0sZ0JBQU4sSUFBMEIsT0FBTyxnQkFBUCxDQUExQjtBQURKO0FBR0ksOEJBQU0sSUFBSSxtQkFBSixDQUF5QixTQUFLLEVBQUwsR0FBVSx3RUFBbkMsQ0FBTjtBQUhKO0FBSUg7QUF6U00sdUJBMFNjLFNBQUssc0JBQUwsQ0FBNkIsU0FBSyxNQUFMLENBQWEsS0FBYixFQUFvQixNQUFwQixDQUE3QixDQTFTZDtBQUFBO0FBMFNILHdCQTFTRzs7QUEyU1AsdUJBQU87QUFDSCw0QkFBUSxRQURMO0FBRUgsMEJBQU0sU0FBUyxXQUFUO0FBRkgsaUJBQVA7QUEzU087QUFBQTtBQWlUTCxtQkFqVEssdUJBaVRRLEVBalRSO0FBQUE7O0FBQUE7QUFBQSx1QkFrVEQsU0FBSyxXQUFMLEVBbFRDO0FBQUE7QUFtVFAsdUJBQU8sU0FBSywrQkFBTCxDQUFzQyxFQUFFLFdBQVcsRUFBYixFQUF0QyxDQUFQO0FBblRPO0FBQUE7QUFzVEwsZUF0VEssbUJBc1RJLElBdFRKO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFzVFUsbUJBdFRWLG1GQXNUZ0IsUUF0VGhCO0FBc1QwQixzQkF0VDFCLG1GQXNUbUMsS0F0VG5DO0FBc1QwQyxzQkF0VDFDLG1GQXNUbUQsRUF0VG5EO0FBc1R1RCx1QkF0VHZELG1GQXNUaUUsU0F0VGpFO0FBc1Q0RSxvQkF0VDVFLG1GQXNUbUYsU0F0VG5GO0FBdVRILG1CQXZURyxHQXVURyxTQUFLLElBQUwsQ0FBVSxLQUFWLElBQW1CLEdBQW5CLEdBQXlCLFNBQUssYUFBTCxDQUFvQixJQUFwQixFQUEwQixNQUExQixDQXZUNUI7QUF3VEgscUJBeFRHLEdBd1RLLFNBQUssSUFBTCxDQUFXLE1BQVgsRUFBbUIsU0FBSyxhQUFMLENBQW9CLElBQXBCLENBQW5CLENBeFRMOztBQXlUUCxvQkFBSSxPQUFPLFFBQVgsRUFBcUI7QUFDakIsd0JBQUksT0FBTyxJQUFQLENBQWEsS0FBYixFQUFvQixNQUF4QjtBQUNJLCtCQUFPLE1BQU0sU0FBSyxTQUFMLENBQWdCLEtBQWhCLENBQWI7QUFESjtBQUVILGlCQUhELE1BR087QUFDQyx5QkFERCxHQUNTLFNBQUssS0FBTCxFQURUO0FBRUMsK0JBRkQsR0FFZ0IsVUFBVSxLQUFYLEdBQW9CLEVBQXBCLEdBQXlCLGtCQUZ4QztBQUdDLHdCQUhELEdBR1EsU0FBUyxHQUFULEdBQWUsV0FBZixHQUE2QixNQUFNLFFBQU4sRUFIckM7O0FBSUgsMkJBQU8sS0FBSyxXQUFMLEVBQVA7QUFDSSw2QkFMRCxHQUthLFNBQUssSUFBTCxDQUFXLFNBQUssTUFBTCxDQUFhLElBQWIsQ0FBWCxFQUErQixTQUFLLE1BQUwsQ0FBYSxTQUFLLE1BQWxCLENBQS9CLEVBQTBELFFBQTFELEVBQW9FLFFBQXBFLENBTGI7O0FBTUgsOEJBQVU7QUFDTiwwQ0FBa0IsU0FBSyxNQURqQjtBQUVOLGlEQUF5QixTQUZuQjtBQUdOLDRDQUFvQjtBQUhkLHFCQUFWO0FBS0Esd0JBQUksVUFBVSxLQUFkLEVBQXFCO0FBQ2pCLGdDQUFRLGNBQVIsSUFBMEIsV0FBMUI7QUFDQSwrQkFBTyxTQUFLLElBQUwsQ0FBVyxTQUFLLE1BQUwsQ0FBYSxFQUFFLFNBQVMsS0FBWCxFQUFiLEVBQWlDLE1BQWpDLENBQVgsQ0FBUDtBQUNIO0FBQ0o7QUEzVU0sdUJBNFVjLFNBQUssS0FBTCxDQUFZLEdBQVosRUFBaUIsTUFBakIsRUFBeUIsT0FBekIsRUFBa0MsSUFBbEMsQ0E1VWQ7QUFBQTtBQTRVSCx3QkE1VUc7QUFBQSwwQkE2VUgsb0JBQW9CLFFBN1VqQjtBQUFBLHFDQThVQyxhQUFhLFNBQVMsZ0JBQVQsQ0E5VWQ7O0FBK1VDLCtCQUFJLFNBQVMsZ0JBQVQsRUFBMkIsU0FBM0IsS0FBeUMsSUFBN0M7QUFDSSwyQkFBTyxRQUFQO0FBREo7QUFFUiwwQkFBTSxJQUFJLGFBQUosQ0FBbUIsU0FBSyxFQUFMLEdBQVUsR0FBVixHQUFnQixTQUFLLElBQUwsQ0FBVyxRQUFYLENBQW5DLENBQU47QUFGUTtBQS9VRDtBQUFBO0FBQUEsS0FBZjs7QUFxVkE7O0FBRUEsUUFBSSxPQUFPO0FBQ1AsY0FBTSxNQURDO0FBRVAsZ0JBQVEsTUFGRDtBQUdQLHFCQUFhLElBSE47QUFJUCxxQkFBYSxJQUpOO0FBS1AsZ0JBQVE7QUFDSixvQkFBUSxxQ0FESjtBQUVKLG9CQUFRLHFHQUZKO0FBR0osbUJBQU8sc0JBSEg7QUFJSixtQkFBTyxzQkFKSDtBQUtKLG1CQUFPO0FBTEgsU0FMRDtBQVlQLGVBQU87QUFDSCxzQkFBVTtBQUNOLHVCQUFPLENBQ0gsWUFERyxFQUVILFVBRkcsRUFHSCxvQkFIRyxFQUlILHVCQUpHLEVBS0gscUJBTEcsRUFNSCxzQkFORyxFQU9ILHNCQVBHLEVBUUgsTUFSRztBQURELGFBRFA7QUFhSCx1QkFBVztBQUNQLHVCQUFPLENBQ0gsVUFERyxFQUVILGVBRkcsRUFHSCxxQkFIRyxFQUlILHNCQUpHLEVBS0gsbUJBTEcsRUFNSCxPQU5HLEVBT0gsU0FQRyxFQVFILFFBUkcsRUFTSCxhQVRHLEVBVUgsaUJBVkcsRUFXSCxVQVhHLEVBWUgsY0FaRyxFQWFILDRCQWJHLENBREE7QUFnQlAsd0JBQVEsQ0FDSiwyQkFESSxFQUVKLHlCQUZJLEVBR0osZUFISSxFQUlKLFFBSkksRUFLSixnQkFMSSxFQU1KLDBCQU5JLEVBT0osU0FQSSxFQVFKLHNCQVJJLEVBU0osb0JBVEksRUFVSiw0QkFWSSxDQWhCRDtBQTRCUCwwQkFBVSxDQUNOLFFBRE0sRUFFTixhQUZNO0FBNUJIO0FBYlIsU0FaQTs7QUE0REQsb0JBNURDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBNkRpQixTQUFLLGlCQUFMLEVBN0RqQjtBQUFBO0FBNkRDLHVCQTdERDtBQThEQyxzQkE5REQsR0E4RFUsRUE5RFY7O0FBK0RILHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksUUFBUSxNQUE1QixFQUFvQyxHQUFwQyxFQUF5QztBQUNqQywwQkFEaUMsR0FDeEIsUUFBUSxDQUFSLENBRHdCO0FBRWpDLHNCQUZpQyxHQUU1QixPQUFPLElBQVAsQ0FGNEI7QUFHakMsd0JBSGlDLEdBRzFCLE9BQU8sZUFBUCxDQUgwQjtBQUlqQyx5QkFKaUMsR0FJekIsT0FBTyxnQkFBUCxDQUp5QjtBQUtqQywwQkFMaUMsR0FLeEIsT0FBTyxHQUFQLEdBQWEsS0FMVzs7QUFNckMsMkJBQU8sSUFBUCxDQUFhO0FBQ1QsOEJBQU0sRUFERztBQUVULGtDQUFVLE1BRkQ7QUFHVCxnQ0FBUSxJQUhDO0FBSVQsaUNBQVMsS0FKQTtBQUtULGdDQUFRO0FBTEMscUJBQWI7QUFPSDtBQUNELHVCQUFPLE1BQVA7QUE3RUc7QUFBQTtBQWdGRCxvQkFoRkM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQWlGRyxTQUFLLFdBQUwsRUFqRkg7QUFBQTtBQUFBLHVCQWtGa0IsU0FBSyxrQkFBTCxFQWxGbEI7QUFBQTtBQWtGQyx3QkFsRkQ7QUFtRkMsc0JBbkZELEdBbUZVLEVBQUUsUUFBUSxRQUFWLEVBbkZWOztBQW9GSCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFNBQVMsTUFBN0IsRUFBcUMsR0FBckMsRUFBMEM7QUFDbEMsMkJBRGtDLEdBQ3hCLFNBQVMsQ0FBVCxDQUR3QjtBQUVsQyw0QkFGa0MsR0FFdkIsUUFBUSxVQUFSLENBRnVCO0FBR2xDLDJCQUhrQyxHQUd4QjtBQUNWLGdDQUFRLFdBQVksUUFBUSxXQUFSLENBQVosQ0FERTtBQUVWLGdDQUFRLFdBQVksUUFBUSxNQUFSLENBQVosQ0FGRTtBQUdWLGlDQUFTLFdBQVksUUFBUSxTQUFSLENBQVo7QUFIQyxxQkFId0I7O0FBUXRDLDJCQUFPLFFBQVAsSUFBbUIsT0FBbkI7QUFDSDtBQUNELHVCQUFPLE1BQVA7QUE5Rkc7QUFBQTtBQWlHRCxzQkFqR0MsMEJBaUdlLE1BakdmO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQWlHdUIsc0JBakd2QixtRkFpR2dDLEVBakdoQztBQUFBLHVCQWtHRyxTQUFLLFdBQUwsRUFsR0g7QUFBQTtBQUFBLHVCQW1HbUIsU0FBSyx1QkFBTCxDQUE4QixTQUFLLE1BQUwsQ0FBYTtBQUM3RCwwQkFBTSxTQUFLLFFBQUwsQ0FBZSxNQUFmLENBRHVEO0FBRTdELDZCQUFTLENBRm9ELENBRWpEO0FBRmlELGlCQUFiLEVBR2pELE1BSGlELENBQTlCLENBbkduQjtBQUFBO0FBbUdDLHlCQW5HRDtBQXVHQyx5QkF2R0QsR0F1R2EsU0FBSyxZQUFMLEVBdkdiO0FBd0dDLHNCQXhHRCxHQXdHVTtBQUNULDRCQUFRLEVBREM7QUFFVCw0QkFBUSxFQUZDO0FBR1QsaUNBQWEsU0FISjtBQUlULGdDQUFZLFNBQUssT0FBTCxDQUFjLFNBQWQ7QUFKSCxpQkF4R1Y7QUE4R0MscUJBOUdELEdBOEdTLENBQUUsTUFBRixFQUFVLE1BQVYsQ0E5R1Q7O0FBK0dILHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksTUFBTSxNQUExQixFQUFrQyxHQUFsQyxFQUF1QztBQUMvQix3QkFEK0IsR0FDeEIsTUFBTSxDQUFOLENBRHdCO0FBRS9CLDBCQUYrQixHQUV0QixVQUFVLElBQVYsQ0FGc0I7O0FBR25DLHlCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksT0FBTyxNQUEzQixFQUFtQyxHQUFuQyxFQUF3QztBQUNoQyw2QkFEZ0MsR0FDeEIsT0FBTyxDQUFQLENBRHdCO0FBRWhDLDZCQUZnQyxHQUV4QixXQUFZLE1BQU0sQ0FBTixDQUFaLENBRndCO0FBR2hDLDhCQUhnQyxHQUd2QixXQUFZLE1BQU0sQ0FBTixDQUFaLENBSHVCOztBQUlwQywrQkFBTyxJQUFQLEVBQWEsSUFBYixDQUFtQixDQUFFLEtBQUYsRUFBUyxNQUFULENBQW5CO0FBQ0g7QUFDSjtBQUNELHVCQUFPLE1BQVA7QUF6SEc7QUFBQTtBQTRIRCxtQkE1SEMsdUJBNEhZLE1BNUhaO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkE2SEcsU0FBSyxXQUFMLEVBN0hIO0FBQUE7QUE4SEMsaUJBOUhELEdBOEhLLFNBQUssTUFBTCxDQUFhLE1BQWIsQ0E5SEw7QUFBQSx1QkErSGdCLFNBQUsseUJBQUwsQ0FBZ0M7QUFDL0MsMEJBQU0sRUFBRSxJQUFGO0FBRHlDLGlCQUFoQyxDQS9IaEI7QUFBQTtBQStIQyxzQkEvSEQ7QUFBQSx1QkFrSWUsU0FBSyx3QkFBTCxDQUErQjtBQUM3QywwQkFBTSxFQUFFLElBQUY7QUFEdUMsaUJBQS9CLENBbElmO0FBQUE7QUFrSUMscUJBbElEO0FBcUlDLHlCQXJJRCxHQXFJYSxTQUFLLFNBQUwsQ0FBZ0IsT0FBTyxNQUFQLENBQWhCLENBckliO0FBc0lDLG1CQXRJRCxHQXNJTyxTQXRJUDtBQXVJQyxtQkF2SUQsR0F1SU8sU0F2SVA7O0FBd0lILG9CQUFJLFNBQVMsTUFBYjtBQUNJLDBCQUFNLFdBQVksT0FBTyxLQUFQLENBQVosQ0FBTjtBQURKLGlCQUVBLElBQUksU0FBUyxNQUFiO0FBQ0ksMEJBQU0sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQUFOO0FBREosaUJBRUEsT0FBTztBQUNILGlDQUFhLFNBRFY7QUFFSCxnQ0FBWSxTQUFLLE9BQUwsQ0FBYyxTQUFkLENBRlQ7QUFHSCw0QkFBUSxXQUFZLE1BQU0sTUFBTixDQUFaLENBSEw7QUFJSCwyQkFBTyxXQUFZLE1BQU0sS0FBTixDQUFaLENBSko7QUFLSCwyQkFBTyxHQUxKO0FBTUgsMkJBQU8sR0FOSjtBQU9ILDRCQUFRLFNBUEw7QUFRSCw0QkFBUSxXQUFZLE1BQU0sTUFBTixDQUFaLENBUkw7QUFTSCw2QkFBUyxTQVROO0FBVUgsNkJBQVMsU0FWTjtBQVdILDRCQUFRLFdBQVksTUFBTSxNQUFOLENBQVosQ0FYTDtBQVlILDhCQUFVLFNBWlA7QUFhSCxrQ0FBYyxTQWJYO0FBY0gsK0JBQVcsU0FkUjtBQWVILGtDQUFjLFNBZlg7QUFnQkgsbUNBQWUsV0FBWSxPQUFPLFFBQVAsQ0FBWixDQWhCWjtBQWlCSCw0QkFBUTtBQWpCTCxpQkFBUDtBQTVJRztBQUFBO0FBaUtQLGtCQWpLTyxzQkFpS0ssS0FqS0wsRUFpS1ksTUFqS1osRUFpS29CO0FBQ3ZCLGdCQUFJLFlBQVksS0FBSyxTQUFMLENBQWdCLENBQUMsTUFBRCxDQUFoQixDQUFoQjtBQUNBLGdCQUFJLE9BQU8sU0FBWDtBQUNBLG1CQUFPO0FBQ0gsc0JBQU0sTUFBTSxVQUFOLEVBQWtCLFFBQWxCLEVBREg7QUFFSCx3QkFBUSxLQUZMO0FBR0gsNkJBQWEsU0FIVjtBQUlILDRCQUFZLEtBQUssT0FBTCxDQUFjLFNBQWQsQ0FKVDtBQUtILDBCQUFVLE9BQU8sUUFBUCxDQUxQO0FBTUgsd0JBQVEsU0FOTDtBQU9ILHdCQUFRLE1BQU0sTUFBTixDQVBMO0FBUUgseUJBQVMsV0FBWSxNQUFNLE9BQU4sQ0FBWixDQVJOO0FBU0gsMEJBQVUsV0FBWSxNQUFNLE1BQU4sQ0FBWjtBQVRQLGFBQVA7QUFXSCxTQS9LTTtBQWlMRCxtQkFqTEMsdUJBaUxZLE1BakxaO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBaUxvQixzQkFqTHBCLG1GQWlMNkIsRUFqTDdCO0FBQUEsdUJBa0xHLFNBQUssV0FBTCxFQWxMSDtBQUFBO0FBbUxILHVCQUFPLFNBQUsseUJBQUwsQ0FBZ0MsU0FBSyxNQUFMLENBQWE7QUFDaEQsMEJBQU0sU0FBSyxRQUFMLENBQWUsTUFBZixDQUQwQyxDQUNsQjtBQURrQixpQkFBYixFQUVwQyxNQUZvQyxDQUFoQyxDQUFQO0FBbkxHO0FBQUE7QUF3TFAsa0JBeExPLHNCQXdMSyxLQXhMTCxFQXdMc0Y7QUFBQSxnQkFBMUUsTUFBMEUsdUVBQWpFLFNBQWlFO0FBQUEsZ0JBQXRELFNBQXNELHVFQUExQyxFQUEwQztBQUFBLGdCQUF0QyxLQUFzQyx1RUFBOUIsU0FBOEI7QUFBQSxnQkFBbkIsS0FBbUIsdUVBQVgsU0FBVzs7QUFDekYsbUJBQU8sQ0FDSCxNQUFNLENBQU4sSUFBVyxJQURSLEVBRUgsTUFBTSxDQUFOLENBRkcsRUFHSCxNQUFNLENBQU4sQ0FIRyxFQUlILE1BQU0sQ0FBTixDQUpHLEVBS0gsTUFBTSxDQUFOLENBTEcsRUFNSCxNQUFNLENBQU4sQ0FORyxDQUFQO0FBUUgsU0FqTU07QUFtTUQsa0JBbk1DLHNCQW1NVyxNQW5NWDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBbU1tQix5QkFuTW5CLG1GQW1NK0IsRUFuTS9CO0FBbU1tQyxxQkFuTW5DLG1GQW1NMkMsU0FuTTNDO0FBbU1zRCxxQkFuTXRELG1GQW1NOEQsU0FuTTlEO0FBb01DLGlCQXBNRCxHQW9NSyxTQUFLLE1BQUwsQ0FBYSxNQUFiLENBcE1MO0FBQUEsdUJBcU1rQixTQUFLLDBCQUFMLENBQWlDO0FBQ2xELDBCQUFNLEVBQUUsSUFBRixDQUQ0QztBQUVsRCxtQ0FBZSxTQUZtQztBQUdsRCw2QkFBUyxLQUh5QztBQUlsRCwyQkFBTztBQUoyQyxpQkFBakMsQ0FyTWxCO0FBQUE7QUFxTUMsd0JBck1EOztBQTJNSCx1QkFBTyxTQUFLLFdBQUwsQ0FBa0IsQ0FBbEIsRUFBcUIsUUFBckIsRUFBK0IsU0FBL0IsRUFBMEMsS0FBMUMsRUFBaUQsS0FBakQsQ0FBUDtBQTNNRztBQUFBO0FBOE1ELG1CQTlNQyx1QkE4TVksTUE5TVosRUE4TW9CLElBOU1wQixFQThNMEIsSUE5TTFCLEVBOE1nQyxNQTlNaEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQThNd0MscUJBOU14QyxtRkE4TWdELFNBOU1oRDtBQThNMkQsc0JBOU0zRCxtRkE4TW9FLEVBOU1wRTtBQUFBLHVCQStNRyxTQUFLLFdBQUwsRUEvTUg7QUFBQTtBQWdOQyxtQkFoTkQsR0FnTk8sU0FBSyxLQUFMLEdBQWMsUUFBZCxFQWhOUDtBQWlOQyxxQkFqTkQsR0FpTlM7QUFDUixrQ0FBYyxTQUFLLFFBQUwsQ0FBZSxNQUFmLENBRE47QUFFUiw0QkFBUSxJQUZBO0FBR1IsNEJBQVEsTUFIQTtBQUlSLDRCQUFRO0FBSkEsaUJBak5UOztBQXVOSCxvQkFBSSxRQUFRLE9BQVo7QUFDSSwwQkFBTSxPQUFOLElBQWlCLEtBQWpCO0FBREosaUJBdk5HLE9BeU5rQixTQUFLLGlCQUFMLENBQXdCLFNBQUssTUFBTCxDQUFhLEtBQWIsRUFBb0IsTUFBcEIsQ0FBeEIsQ0F6TmxCO0FBQUE7QUF5TkMsd0JBek5EOztBQTBOSCx1QkFBTztBQUNILDRCQUFRLFFBREw7QUFFSCwwQkFBTSxTQUFTLElBQVQ7QUFGSCxpQkFBUDtBQTFORztBQUFBO0FBZ09ELG1CQWhPQyx1QkFnT1ksRUFoT1o7QUFBQTs7QUFBQTtBQUFBLHVCQWlPRyxTQUFLLFdBQUwsRUFqT0g7QUFBQTtBQWtPSCx1QkFBTyxTQUFLLHFCQUFMLENBQTRCLEVBQUUsTUFBTSxFQUFSLEVBQTVCLENBQVA7QUFsT0c7QUFBQTtBQXFPRCxlQXJPQyxtQkFxT1EsSUFyT1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFxT2MsbUJBck9kLG1GQXFPb0IsUUFyT3BCO0FBcU84QixzQkFyTzlCLG1GQXFPdUMsS0FyT3ZDO0FBcU84QyxzQkFyTzlDLG1GQXFPdUQsRUFyT3ZEO0FBcU8yRCx1QkFyTzNELG1GQXFPcUUsU0FyT3JFO0FBcU9nRixvQkFyT2hGLG1GQXFPdUYsU0FyT3ZGO0FBc09DLHVCQXRPRCxHQXNPVyxNQUFNLFNBQUssYUFBTCxDQUFvQixJQUFwQixFQUEwQixNQUExQixDQXRPakI7QUF1T0MsbUJBdk9ELEdBdU9PLFNBQUssSUFBTCxDQUFVLEtBQVYsSUFBbUIsT0F2TzFCO0FBd09DLHFCQXhPRCxHQXdPUyxTQUFLLElBQUwsQ0FBVyxNQUFYLEVBQW1CLFNBQUssYUFBTCxDQUFvQixJQUFwQixDQUFuQixDQXhPVDs7QUF5T0gsb0JBQUksT0FBTyxRQUFYLEVBQXFCO0FBQ2pCLHdCQUFJLE9BQU8sSUFBUCxDQUFhLEtBQWIsRUFBb0IsTUFBeEI7QUFDSSwrQkFBTyxNQUFNLFNBQUssU0FBTCxDQUFnQixLQUFoQixDQUFiO0FBREo7QUFFSCxpQkFIRCxNQUdPO0FBQ0gsd0JBQUksQ0FBQyxTQUFLLE1BQVY7QUFDSSw4QkFBTSxJQUFJLG1CQUFKLENBQXlCLFNBQUssRUFBTCxHQUFVLDBEQUFuQyxDQUFOO0FBREoscUJBRUEsSUFBSSxDQUFDLFNBQUssTUFBVjtBQUNJLDhCQUFNLElBQUksbUJBQUosQ0FBeUIsU0FBSyxFQUFMLEdBQVUsMERBQW5DLENBQU47QUFESixxQkFFQSxJQUFJLENBQUMsU0FBSyxRQUFWO0FBQ0ksOEJBQU0sSUFBSSxtQkFBSixDQUF5QixTQUFLLEVBQUwsR0FBVSw0REFBbkMsQ0FBTjtBQURKLHFCQUVJLEtBUEQsR0FPUyxTQUFLLEtBQUwsR0FBYyxRQUFkLEVBUFQ7O0FBUUgsd0JBQUksT0FBTyxJQUFQLENBQWEsS0FBYixFQUFvQixNQUF4QjtBQUNJLCtCQUFPLFNBQUssSUFBTCxDQUFXLEtBQVgsQ0FBUDtBQURKLHFCQUVJLElBVkQsR0FVUSxRQUFRLE1BQVIsR0FBaUIsT0FBakIsSUFBNEIsUUFBUSxFQUFwQyxDQVZSO0FBV0MsMEJBWEQsR0FXVSxTQUFLLGNBQUwsQ0FBcUIsU0FBSyxNQUExQixDQVhWO0FBWUMsNkJBWkQsR0FZYSxTQUFLLElBQUwsQ0FBVyxTQUFLLE1BQUwsQ0FBYSxJQUFiLENBQVgsRUFBK0IsTUFBL0IsRUFBdUMsUUFBdkMsRUFBaUQsUUFBakQsQ0FaYjs7QUFhSCw4QkFBVTtBQUNOLHlDQUFpQixTQUFLLE1BRGhCO0FBRU4sMENBQWtCLFNBQUssTUFBTCxDQUFhLFNBQWIsQ0FGWjtBQUdOLCtDQUF1QixLQUhqQjtBQUlOLGdEQUF3QixTQUFLLFFBSnZCO0FBS04sd0NBQWdCO0FBTFYscUJBQVY7QUFPSDtBQWhRRSx1QkFpUWtCLFNBQUssS0FBTCxDQUFZLEdBQVosRUFBaUIsTUFBakIsRUFBeUIsT0FBekIsRUFBa0MsSUFBbEMsQ0FqUWxCO0FBQUE7QUFpUUMsd0JBalFEOztBQWtRSCxvQkFBSSxhQUFhLFFBQWpCO0FBQ0ksMEJBQU0sSUFBSSxhQUFKLENBQW1CLFNBQUssRUFBTCxHQUFVLEdBQVYsR0FBZ0IsU0FBSyxJQUFMLENBQVcsUUFBWCxDQUFuQyxDQUFOO0FBREosaUJBRUEsT0FBTyxRQUFQO0FBcFFHO0FBQUE7QUFBQSxLQUFYOztBQXdRQTs7QUFFQSxRQUFJLFNBQVM7QUFDVCxjQUFNLFFBREc7QUFFVCxnQkFBUSxRQUZDO0FBR1QscUJBQWEsSUFISjtBQUlULHFCQUFhLElBSkosRUFJVTtBQUNuQixtQkFBVyxJQUxGO0FBTVQsZ0JBQVE7QUFDSixvQkFBUSxxR0FESjtBQUVKLG1CQUFPLHdCQUZIO0FBR0osbUJBQU8sb0JBSEg7QUFJSixtQkFBTztBQUpILFNBTkM7QUFZVCxlQUFPO0FBQ0gsc0JBQVU7QUFDTix1QkFBTyxDQUNILFNBREcsRUFFSCxvQkFGRyxFQUdILGVBSEcsRUFJSCxpQkFKRyxFQUtILGtCQUxHLEVBTUgsMEJBTkc7QUFERCxhQURQO0FBV0gsdUJBQVc7QUFDUCx3QkFBUSxDQUNKLFdBREksRUFFSixjQUZJLEVBR0osc0JBSEksRUFJSixrQkFKSSxFQUtKLGNBTEksRUFNSixRQU5JLEVBT0osVUFQSSxFQVFKLGFBUkksRUFTSixVQVRJLEVBVUosK0JBVkksRUFXSixxQkFYSSxFQVlKLFdBWkk7QUFERDtBQVhSLFNBWkU7O0FBeUNILG9CQXpDRztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBMENlLFNBQUssZ0JBQUwsRUExQ2Y7QUFBQTtBQTBDRCx1QkExQ0M7QUEyQ0Qsc0JBM0NDLEdBMkNRLEVBM0NSOztBQTRDTCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFFBQVEsTUFBNUIsRUFBb0MsR0FBcEMsRUFBeUM7QUFDakMsc0JBRGlDLEdBQzVCLFFBQVEsQ0FBUixDQUQ0QjtBQUVqQywwQkFGaUMsR0FFeEIsRUFGd0I7QUFHakMsNkJBSGlDLEdBR3JCLE9BQU8sV0FBUCxFQUhxQjtBQUlqQyx3QkFKaUMsR0FJMUIsVUFBVSxLQUFWLENBQWlCLENBQWpCLEVBQW9CLENBQXBCLENBSjBCO0FBS2pDLHlCQUxpQyxHQUt6QixVQUFVLEtBQVYsQ0FBaUIsQ0FBakIsRUFBb0IsQ0FBcEIsQ0FMeUI7QUFNakMsMEJBTmlDLEdBTXhCLE9BQU8sR0FBUCxHQUFhLEtBTlc7O0FBT3JDLDJCQUFPLElBQVAsQ0FBYTtBQUNULDhCQUFNLEVBREc7QUFFVCxrQ0FBVSxNQUZEO0FBR1QsZ0NBQVEsSUFIQztBQUlULGlDQUFTLEtBSkE7QUFLVCxnQ0FBUTtBQUxDLHFCQUFiO0FBT0g7QUFDRCx1QkFBTyxNQUFQO0FBM0RLO0FBQUE7QUE4REgsc0JBOURHLDBCQThEYSxNQTlEYjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQThEcUIsc0JBOURyQixtRkE4RDhCLEVBOUQ5QjtBQUFBLHVCQStEQyxTQUFLLFdBQUwsRUEvREQ7QUFBQTtBQUFBLHVCQWdFaUIsU0FBSyxtQkFBTCxDQUEwQixTQUFLLE1BQUwsQ0FBYTtBQUN6RCw4QkFBVSxTQUFLLFFBQUwsQ0FBZSxNQUFmO0FBRCtDLGlCQUFiLEVBRTdDLE1BRjZDLENBQTFCLENBaEVqQjtBQUFBO0FBZ0VELHlCQWhFQztBQW1FRCx5QkFuRUMsR0FtRVcsU0FBSyxZQUFMLEVBbkVYO0FBb0VELHNCQXBFQyxHQW9FUTtBQUNULDRCQUFRLEVBREM7QUFFVCw0QkFBUSxFQUZDO0FBR1QsaUNBQWEsU0FISjtBQUlULGdDQUFZLFNBQUssT0FBTCxDQUFjLFNBQWQ7QUFKSCxpQkFwRVI7QUEwRUQscUJBMUVDLEdBMEVPLENBQUUsTUFBRixFQUFVLE1BQVYsQ0ExRVA7O0FBMkVMLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksTUFBTSxNQUExQixFQUFrQyxHQUFsQyxFQUF1QztBQUMvQix3QkFEK0IsR0FDeEIsTUFBTSxDQUFOLENBRHdCO0FBRS9CLDBCQUYrQixHQUV0QixVQUFVLElBQVYsQ0FGc0I7O0FBR25DLHlCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksT0FBTyxNQUEzQixFQUFtQyxHQUFuQyxFQUF3QztBQUNoQyw2QkFEZ0MsR0FDeEIsT0FBTyxDQUFQLENBRHdCO0FBRWhDLDZCQUZnQyxHQUV4QixXQUFZLE1BQU0sT0FBTixDQUFaLENBRndCO0FBR2hDLDhCQUhnQyxHQUd2QixXQUFZLE1BQU0sUUFBTixDQUFaLENBSHVCO0FBSWhDLG1DQUpnQyxHQUlwQixTQUFVLE1BQU0sV0FBTixDQUFWLElBQWdDLElBSlo7O0FBS3BDLCtCQUFPLElBQVAsRUFBYSxJQUFiLENBQW1CLENBQUUsS0FBRixFQUFTLE1BQVQsRUFBaUIsV0FBakIsQ0FBbkI7QUFDSDtBQUNKO0FBQ0QsdUJBQU8sTUFBUDtBQXRGSztBQUFBO0FBeUZILG1CQXpGRyx1QkF5RlUsTUF6RlY7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkEwRkMsU0FBSyxXQUFMLEVBMUZEO0FBQUE7QUEyRkQsaUJBM0ZDLEdBMkZHLFNBQUssTUFBTCxDQUFhLE1BQWIsQ0EzRkg7QUFBQSx1QkE0RmMsU0FBSyx3QkFBTCxDQUErQjtBQUM5Qyw4QkFBVSxFQUFFLElBQUY7QUFEb0MsaUJBQS9CLENBNUZkO0FBQUE7QUE0RkQsc0JBNUZDO0FBK0ZELHlCQS9GQyxHQStGVyxPQUFPLFFBQVAsRUFBaUIsV0FBakIsQ0EvRlg7QUFnR0QsMEJBaEdDLEdBZ0dZLEVBQUUsTUFBRixDQWhHWjtBQWlHRCwyQkFqR0MsR0FpR2EsRUFBRSxPQUFGLENBakdiOztBQWtHTCx1QkFBTztBQUNILGlDQUFhLFNBRFY7QUFFSCxnQ0FBWSxTQUFLLE9BQUwsQ0FBYyxTQUFkLENBRlQ7QUFHSCw0QkFBUSxTQUhMO0FBSUgsMkJBQU8sU0FKSjtBQUtILDJCQUFPLFdBQVksT0FBTyxLQUFQLENBQVosQ0FMSjtBQU1ILDJCQUFPLFdBQVksT0FBTyxLQUFQLENBQVosQ0FOSjtBQU9ILDRCQUFRLFNBUEw7QUFRSCw0QkFBUSxTQVJMO0FBU0gsNkJBQVMsU0FUTjtBQVVILDZCQUFTLFNBVk47QUFXSCw0QkFBUSxXQUFZLE9BQU8sTUFBUCxDQUFaLENBWEw7QUFZSCw4QkFBVSxTQVpQO0FBYUgsa0NBQWMsU0FiWDtBQWNILCtCQUFXLFNBZFI7QUFlSCxrQ0FBYyxXQUFZLE9BQU8sUUFBUCxFQUFpQixVQUFqQixDQUFaLENBZlg7QUFnQkgsbUNBQWUsV0FBWSxPQUFPLFFBQVAsRUFBaUIsV0FBakIsQ0FBWixDQWhCWjtBQWlCSCw0QkFBUTtBQWpCTCxpQkFBUDtBQWxHSztBQUFBO0FBdUhILG1CQXZIRyx1QkF1SFUsTUF2SFY7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUF1SGtCLHNCQXZIbEIsbUZBdUgyQixFQXZIM0I7QUFBQSx1QkF3SEMsU0FBSyxXQUFMLEVBeEhEO0FBQUE7QUF5SEwsdUJBQU8sU0FBSyxxQkFBTCxDQUE0QixTQUFLLE1BQUwsQ0FBYTtBQUM1Qyw4QkFBVSxTQUFLLFFBQUwsQ0FBZSxNQUFmO0FBRGtDLGlCQUFiLEVBRWhDLE1BRmdDLENBQTVCLENBQVA7QUF6SEs7QUFBQTtBQThISCxvQkE5SEc7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQStIQyxTQUFLLFdBQUwsRUEvSEQ7QUFBQTtBQUFBLHVCQWdJZ0IsU0FBSyxtQkFBTCxFQWhJaEI7QUFBQTtBQWdJRCx3QkFoSUM7QUFpSUQsc0JBaklDLEdBaUlRLEVBQUUsUUFBUSxRQUFWLEVBaklSOztBQWtJTCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFNBQVMsTUFBN0IsRUFBcUMsR0FBckMsRUFBMEM7QUFDbEMsMkJBRGtDLEdBQ3hCLFNBQVMsQ0FBVCxDQUR3QjtBQUVsQyw0QkFGa0MsR0FFdkIsUUFBUSxVQUFSLENBRnVCO0FBR2xDLDJCQUhrQyxHQUd4QjtBQUNWLGdDQUFRLFdBQVksUUFBUSxXQUFSLENBQVosQ0FERTtBQUVWLGdDQUFRLFNBRkU7QUFHVixpQ0FBUyxXQUFZLFFBQVEsUUFBUixDQUFaO0FBSEMscUJBSHdCOztBQVF0Qyw0QkFBUSxNQUFSLElBQWtCLFFBQVEsT0FBUixJQUFtQixRQUFRLE1BQVIsQ0FBckM7QUFDQSwyQkFBTyxRQUFQLElBQW1CLE9BQW5CO0FBQ0g7QUFDRCx1QkFBTyxNQUFQO0FBN0lLO0FBQUE7QUFnSkgsbUJBaEpHLHVCQWdKVSxNQWhKVixFQWdKa0IsSUFoSmxCLEVBZ0p3QixJQWhKeEIsRUFnSjhCLE1BaEo5QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQWdKc0MscUJBaEp0QyxtRkFnSjhDLFNBaEo5QztBQWdKeUQsc0JBaEp6RCxtRkFnSmtFLEVBaEpsRTtBQUFBLHVCQWlKQyxTQUFLLFdBQUwsRUFqSkQ7QUFBQTtBQWtKTCxvQkFBSSxRQUFRLFFBQVo7QUFDSSwwQkFBTSxJQUFJLGFBQUosQ0FBbUIsU0FBSyxFQUFMLEdBQVUsMkJBQTdCLENBQU47QUFESixpQkFFSSxLQXBKQyxHQW9KTztBQUNSLHVDQUFtQixTQUFLLEtBQUwsRUFEWDtBQUVSLDhCQUFVLFNBQUssUUFBTCxDQUFlLE1BQWYsQ0FGRjtBQUdSLDhCQUFVLE9BQU8sUUFBUCxFQUhGO0FBSVIsNkJBQVMsTUFBTSxRQUFOLEVBSkQ7QUFLUiw0QkFBUSxJQUxBO0FBTVIsNEJBQVEsZ0JBTkEsQ0FNa0I7QUFObEIsaUJBcEpQO0FBQUEsdUJBNEpnQixTQUFLLG1CQUFMLENBQTBCLFNBQUssTUFBTCxDQUFhLEtBQWIsRUFBb0IsTUFBcEIsQ0FBMUIsQ0E1SmhCO0FBQUE7QUE0SkQsd0JBNUpDOztBQTZKTCx1QkFBTztBQUNILDRCQUFRLFFBREw7QUFFSCwwQkFBTSxTQUFTLFVBQVQ7QUFGSCxpQkFBUDtBQTdKSztBQUFBO0FBbUtILG1CQW5LRyx1QkFtS1UsRUFuS1Y7QUFBQTs7QUFBQTtBQUFBLHVCQW9LQyxTQUFLLFdBQUwsRUFwS0Q7QUFBQTtBQXFLTCx1QkFBTyxTQUFLLHNCQUFMLENBQTZCLEVBQUUsWUFBWSxFQUFkLEVBQTdCLENBQVA7QUFyS0s7QUFBQTtBQXdLSCxlQXhLRyxtQkF3S00sSUF4S047QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBd0tZLG1CQXhLWixtRkF3S2tCLFFBeEtsQjtBQXdLNEIsc0JBeEs1QixtRkF3S3FDLEtBeEtyQztBQXdLNEMsc0JBeEs1QyxtRkF3S3FELEVBeEtyRDtBQXdLeUQsdUJBeEt6RCxtRkF3S21FLFNBeEtuRTtBQXdLOEUsb0JBeEs5RSxtRkF3S3FGLFNBeEtyRjtBQXlLRCxtQkF6S0MsR0F5S0ssTUFBTSxTQUFLLE9BQVgsR0FBcUIsR0FBckIsR0FBMkIsU0FBSyxhQUFMLENBQW9CLElBQXBCLEVBQTBCLE1BQTFCLENBektoQztBQTBLRCxxQkExS0MsR0EwS08sU0FBSyxJQUFMLENBQVcsTUFBWCxFQUFtQixTQUFLLGFBQUwsQ0FBb0IsSUFBcEIsQ0FBbkIsQ0ExS1A7O0FBMktMLG9CQUFJLE9BQU8sUUFBWCxFQUFxQjtBQUNqQix3QkFBSSxPQUFPLElBQVAsQ0FBYSxLQUFiLEVBQW9CLE1BQXhCO0FBQ0ksK0JBQU8sTUFBTSxTQUFLLFNBQUwsQ0FBZ0IsS0FBaEIsQ0FBYjtBQURKO0FBRUgsaUJBSEQsTUFHTztBQUNDLHlCQURELEdBQ1MsU0FBSyxLQUFMLEVBRFQ7QUFFQywyQkFGRCxHQUVXLFNBQUssTUFBTCxDQUFhO0FBQ3ZCLG1DQUFXLEdBRFk7QUFFdkIsaUNBQVM7QUFGYyxxQkFBYixFQUdYLEtBSFcsQ0FGWDtBQU1DLDJCQU5ELEdBTVcsU0FBSyxJQUFMLENBQVcsT0FBWCxDQU5YOztBQU9ILDhCQUFVLFNBQUssY0FBTCxDQUFxQixTQUFLLE1BQUwsQ0FBYSxPQUFiLENBQXJCLENBQVY7QUFDSSw2QkFSRCxHQVFhLFNBQUssSUFBTCxDQUFXLE9BQVgsRUFBb0IsU0FBSyxNQUFMLENBQWEsU0FBSyxNQUFsQixDQUFwQixFQUErQyxRQUEvQyxDQVJiOztBQVNILDhCQUFVO0FBQ04sd0NBQWdCLFlBRFY7QUFFTiwwQ0FBa0IsQ0FGWjtBQUdOLDJDQUFtQixTQUFLLE1BSGxCO0FBSU4sNENBQW9CLE9BSmQ7QUFLTiw4Q0FBc0I7QUFMaEIscUJBQVY7QUFPSDtBQUNELHNCQUFNLFNBQUssSUFBTCxDQUFVLEtBQVYsSUFBbUIsR0FBekI7QUEvTEssdUJBZ01nQixTQUFLLEtBQUwsQ0FBWSxHQUFaLEVBQWlCLE1BQWpCLEVBQXlCLE9BQXpCLEVBQWtDLElBQWxDLENBaE1oQjtBQUFBO0FBZ01ELHdCQWhNQzs7QUFpTUwsb0JBQUksWUFBWSxRQUFoQjtBQUNJLHdCQUFJLFNBQVMsUUFBVCxLQUFzQixPQUExQjtBQUNJLDhCQUFNLElBQUksYUFBSixDQUFtQixTQUFLLEVBQUwsR0FBVSxHQUFWLEdBQWdCLFNBQUssSUFBTCxDQUFXLFFBQVgsQ0FBbkMsQ0FBTjtBQURKO0FBREosaUJBR0EsT0FBTyxRQUFQO0FBcE1LO0FBQUE7QUFBQSxLQUFiOztBQXdNQTs7QUFFQSxRQUFJLFNBQVM7O0FBRVQsY0FBTSxRQUZHO0FBR1QsZ0JBQVEsUUFIQztBQUlULHFCQUFhLElBSkosRUFJVTtBQUNuQixxQkFBYSxJQUxKO0FBTVQsbUJBQVcsR0FORjtBQU9ULDJCQUFtQixJQVBWO0FBUVQsZ0JBQVE7QUFDSixvQkFBUSxxR0FESjtBQUVKLG1CQUFPLHVCQUZIO0FBR0osbUJBQU8sb0JBSEg7QUFJSixtQkFBTyxDQUNILHdCQURHLEVBRUgsd0NBRkcsRUFHSCxvQ0FIRztBQUpILFNBUkM7QUFrQlQsZUFBTztBQUNILHNCQUFVO0FBQ04sdUJBQU8sQ0FDSCxvQkFERyxFQUVILGlCQUZHLEVBR0gsaUJBSEcsRUFJSCx3QkFKRyxFQUtILFNBTEcsRUFNSCxRQU5HLEVBT0gsT0FQRztBQURELGFBRFA7QUFZSCx1QkFBVztBQUNQLHVCQUFPLENBQ0gsU0FERyxFQUVILGVBRkcsRUFHSCxlQUhHLEVBSUgsT0FKRyxFQUtILGlCQUxHLEVBTUgsUUFORyxDQURBO0FBU1Asd0JBQVEsQ0FDSixXQURJLEVBRUosY0FGSSxFQUdKLGVBSEk7QUFURCxhQVpSO0FBMkJILHVCQUFXO0FBQ1AsdUJBQU8sQ0FDSCxTQURHLEVBRUgsb0JBRkcsRUFHSCxjQUhHLEVBSUgsNEJBSkcsQ0FEQTtBQU9QLHdCQUFRLENBQ0oscUJBREksRUFFSixrQkFGSSxFQUdKLG9CQUhJLEVBSUosUUFKSTtBQVBEO0FBM0JSLFNBbEJFOztBQTZESCxvQkE3REc7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBOERlLFNBQUssZ0JBQUwsRUE5RGY7QUFBQTtBQThERCx1QkE5REM7QUErREQsc0JBL0RDLEdBK0RRLEVBL0RSOztBQWdFTCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFFBQVEsU0FBUixFQUFtQixNQUF2QyxFQUErQyxHQUEvQyxFQUFvRDtBQUM1QywwQkFENEMsR0FDbkMsUUFBUSxTQUFSLEVBQW1CLENBQW5CLENBRG1DO0FBRTVDLHNCQUY0QyxHQUV2QyxPQUFPLFFBQVAsQ0FGdUM7QUFHNUMsd0JBSDRDLEdBR3JDLE9BQU8sV0FBUCxDQUhxQztBQUk1Qyx5QkFKNEMsR0FJcEMsT0FBTyxVQUFQLENBSm9DO0FBSzVDLHVCQUw0QyxHQUt0QyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBTHNDO0FBTTVDLHdCQU40QyxHQU1yQyxXQUFZLE9BQU8sTUFBUCxDQUFaLENBTnFDOztBQU9oRCwyQkFBTyxTQUFLLGtCQUFMLENBQXlCLElBQXpCLENBQVA7QUFDQSw0QkFBUSxTQUFLLGtCQUFMLENBQXlCLEtBQXpCLENBQVI7QUFDSSwwQkFUNEMsR0FTbkMsT0FBTyxHQUFQLEdBQWEsS0FUc0I7O0FBVWhELDJCQUFPLElBQVAsQ0FBYTtBQUNULDhCQUFNLEVBREc7QUFFVCxrQ0FBVSxNQUZEO0FBR1QsZ0NBQVEsSUFIQztBQUlULGlDQUFTLEtBSkE7QUFLVCwrQkFBTyxHQUxFO0FBTVQsZ0NBQVEsSUFOQztBQU9ULGdDQUFRO0FBUEMscUJBQWI7QUFTSDtBQUNELHVCQUFPLE1BQVA7QUFwRks7QUFBQTtBQXVGSCxvQkF2Rkc7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBd0ZDLFNBQUssV0FBTCxFQXhGRDtBQUFBO0FBQUEsdUJBeUZnQixTQUFLLGlCQUFMLEVBekZoQjtBQUFBO0FBeUZELHdCQXpGQztBQTBGRCx3QkExRkMsR0EwRlUsU0FBUyxTQUFULENBMUZWO0FBMkZELHNCQTNGQyxHQTJGUSxFQUFFLFFBQVEsUUFBVixFQTNGUjs7QUE0RkwscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxTQUFTLE1BQTdCLEVBQXFDLEdBQXJDLEVBQTBDO0FBQ2xDLDJCQURrQyxHQUN4QixTQUFTLENBQVQsQ0FEd0I7QUFFbEMsNEJBRmtDLEdBRXZCLFFBQVEsZUFBUixDQUZ1QjtBQUdsQywyQkFIa0MsR0FHeEI7QUFDVixnQ0FBUSxXQUFZLFFBQVEsTUFBUixDQUFaLENBREU7QUFFVixnQ0FBUSxXQUFZLFFBQVEsVUFBUixDQUFaLENBRkU7QUFHVixpQ0FBUztBQUhDLHFCQUh3Qjs7QUFRdEMsNEJBQVEsT0FBUixJQUFtQixTQUFLLEdBQUwsQ0FBVSxRQUFRLE1BQVIsQ0FBVixFQUEyQixRQUFRLE1BQVIsQ0FBM0IsQ0FBbkI7QUFDQSwyQkFBTyxRQUFQLElBQW1CLE9BQW5CO0FBQ0g7QUFDRCx1QkFBTyxNQUFQO0FBdkdLO0FBQUE7QUEwR0gsc0JBMUdHLDBCQTBHYSxNQTFHYjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUEwR3FCLHNCQTFHckIsbUZBMEc4QixFQTFHOUI7QUFBQSx1QkEyR0MsU0FBSyxXQUFMLEVBM0dEO0FBQUE7QUFBQSx1QkE0R2lCLFNBQUssd0JBQUwsQ0FBK0IsU0FBSyxNQUFMLENBQWE7QUFDOUQsOEJBQVUsU0FBSyxRQUFMLENBQWUsTUFBZjtBQURvRCxpQkFBYixFQUVsRCxNQUZrRCxDQUEvQixDQTVHakI7QUFBQTtBQTRHRCx5QkE1R0M7QUErR0QseUJBL0dDLEdBK0dXLFNBQUssWUFBTCxFQS9HWDtBQWdIRCxzQkFoSEMsR0FnSFE7QUFDVCw0QkFBUSxFQURDO0FBRVQsNEJBQVEsRUFGQztBQUdULGlDQUFhLFNBSEo7QUFJVCxnQ0FBWSxTQUFLLE9BQUwsQ0FBYyxTQUFkO0FBSkgsaUJBaEhSO0FBc0hELHFCQXRIQyxHQXNITyxDQUFFLE1BQUYsRUFBVSxNQUFWLENBdEhQOztBQXVITCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLE1BQU0sTUFBMUIsRUFBa0MsR0FBbEMsRUFBdUM7QUFDL0Isd0JBRCtCLEdBQ3hCLE1BQU0sQ0FBTixDQUR3QjtBQUUvQiwwQkFGK0IsR0FFdEIsVUFBVSxJQUFWLENBRnNCOztBQUduQyx5QkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLE9BQU8sTUFBM0IsRUFBbUMsR0FBbkMsRUFBd0M7QUFDaEMsNkJBRGdDLEdBQ3hCLE9BQU8sQ0FBUCxDQUR3QjtBQUVoQyw2QkFGZ0MsR0FFeEIsV0FBWSxNQUFNLENBQU4sQ0FBWixDQUZ3QjtBQUdoQyw4QkFIZ0MsR0FHdkIsV0FBWSxNQUFNLENBQU4sQ0FBWixDQUh1Qjs7QUFJcEMsK0JBQU8sSUFBUCxFQUFhLElBQWIsQ0FBbUIsQ0FBRSxLQUFGLEVBQVMsTUFBVCxDQUFuQjtBQUNIO0FBQ0o7QUFDRCx1QkFBTyxNQUFQO0FBaklLO0FBQUE7QUFvSVQsbUJBcElTLHVCQW9JSSxNQXBJSixFQW9JWSxNQXBJWixFQW9Jb0I7QUFDekIsZ0JBQUksWUFBWSxPQUFPLFdBQVAsQ0FBaEI7QUFDQSxtQkFBTztBQUNILDZCQUFhLFNBRFY7QUFFSCw0QkFBWSxLQUFLLE9BQUwsQ0FBYyxTQUFkLENBRlQ7QUFHSCx3QkFBUSxXQUFZLE9BQU8sTUFBUCxDQUFaLENBSEw7QUFJSCx1QkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBSko7QUFLSCx1QkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBTEo7QUFNSCx1QkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBTko7QUFPSCx3QkFBUSxTQVBMO0FBUUgsd0JBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQVJMO0FBU0gseUJBQVMsU0FUTjtBQVVILHlCQUFTLFNBVk47QUFXSCx3QkFBUSxXQUFZLE9BQU8sTUFBUCxDQUFaLENBWEw7QUFZSCwwQkFBVSxTQVpQO0FBYUgsOEJBQWMsU0FiWDtBQWNILDJCQUFXLFNBZFI7QUFlSCw4QkFBYyxXQUFZLE9BQU8sUUFBUCxDQUFaLENBZlg7QUFnQkgsK0JBQWUsV0FBWSxPQUFPLGNBQVAsQ0FBWixDQWhCWjtBQWlCSCx3QkFBUTtBQWpCTCxhQUFQO0FBbUJILFNBekpRO0FBMkpILG9CQTNKRztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQTRKQyxTQUFLLFdBQUwsRUE1SkQ7QUFBQTtBQUFBLHVCQTZKZSxTQUFLLGVBQUwsRUE3SmY7QUFBQTtBQTZKRCx1QkE3SkM7QUE4SkQsbUJBOUpDLEdBOEpLLE9BQU8sSUFBUCxDQUFhLE9BQWIsQ0E5Skw7QUErSkQsc0JBL0pDLEdBK0pRLEVBL0pSOztBQWdLTCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLElBQUksTUFBeEIsRUFBZ0MsR0FBaEMsRUFBcUM7QUFDN0Isc0JBRDZCLEdBQ3hCLElBQUksQ0FBSixDQUR3QjtBQUU3QiwwQkFGNkIsR0FFcEIsU0FBSyxhQUFMLENBQW1CLEVBQW5CLENBRm9CO0FBRzdCLDBCQUg2QixHQUdwQixPQUFPLFFBQVAsQ0FIb0I7QUFJN0IsMEJBSjZCLEdBSXBCLFFBQVEsRUFBUixDQUpvQjs7QUFLakMsMkJBQU8sTUFBUCxJQUFpQixTQUFLLFdBQUwsQ0FBa0IsTUFBbEIsRUFBMEIsTUFBMUIsQ0FBakI7QUFDSDtBQUNELHVCQUFPLE1BQVA7QUF2S0s7QUFBQTtBQTBLSCxtQkExS0csdUJBMEtVLE1BMUtWO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBMktDLFNBQUssV0FBTCxFQTNLRDtBQUFBO0FBNEtELGlCQTVLQyxHQTRLRyxTQUFLLE1BQUwsQ0FBYSxNQUFiLENBNUtIO0FBQUEsdUJBNktjLFNBQUsscUJBQUwsQ0FBNEI7QUFDM0MsOEJBQVUsRUFBRSxJQUFGO0FBRGlDLGlCQUE1QixDQTdLZDtBQUFBO0FBNktELHNCQTdLQzs7QUFnTEwsb0JBQUksYUFBYSxNQUFqQjtBQUNJLDBCQUFNLElBQUksYUFBSixDQUFtQixTQUFLLEVBQUwsR0FBVSxHQUFWLEdBQWdCLE9BQU8sU0FBUCxDQUFuQyxDQUFOO0FBREosaUJBRUEsT0FBTyxTQUFLLFdBQUwsQ0FBa0IsTUFBbEIsRUFBMEIsQ0FBMUIsQ0FBUDtBQWxMSztBQUFBO0FBcUxILG1CQXJMRyx1QkFxTFUsTUFyTFY7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFxTGtCLHNCQXJMbEIsbUZBcUwyQixFQXJMM0I7QUFBQSx1QkFzTEMsU0FBSyxXQUFMLEVBdExEO0FBQUE7QUF1TEwsdUJBQU8sU0FBSyxxQkFBTCxDQUE0QixTQUFLLE1BQUwsQ0FBYTtBQUM1Qyw4QkFBVSxTQUFLLFFBQUwsQ0FBZSxNQUFmO0FBRGtDLGlCQUFiLEVBRWhDLE1BRmdDLENBQTVCLENBQVA7QUF2TEs7QUFBQTtBQTRMSCxtQkE1TEcsdUJBNExVLE1BNUxWLEVBNExrQixJQTVMbEIsRUE0THdCLElBNUx4QixFQTRMOEIsTUE1TDlCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQTRMc0MscUJBNUx0QyxtRkE0TDhDLFNBNUw5QztBQTRMeUQsc0JBNUx6RCxtRkE0TGtFLEVBNUxsRTtBQUFBLHVCQTZMQyxTQUFLLFdBQUwsRUE3TEQ7QUFBQTtBQThMRCxpQkE5TEMsR0E4TEcsU0FBSyxNQUFMLENBQWEsTUFBYixDQTlMSDtBQStMTDtBQUNBOztBQUNJLHdCQWpNQyxHQWlNVSxXQUFZLE1BQVosSUFBc0IsRUFBRSxLQUFGLENBak1oQztBQWtNRCx5QkFsTUMsR0FrTVcsS0FBSyxLQUFMLENBQVksUUFBWixDQWxNWDtBQW1NRCwwQkFuTUMsR0FtTVksV0FBVyxTQW5NdkI7O0FBb01MLG9CQUFJLEtBQUssR0FBTCxDQUFVLFVBQVYsSUFBd0IsRUFBRSxNQUFGLENBQTVCO0FBQ0ksMEJBQU0sSUFBSSxhQUFKLENBQW1CLFNBQUssRUFBTCxHQUFVLCtEQUFWLEdBQTRFLEVBQUUsS0FBRixFQUFTLFFBQVQsRUFBL0YsQ0FBTjtBQURKLGlCQUVJLGFBdE1DLEdBc01lLFNBQUssS0FBTCxFQXRNZjtBQXVNRCxxQkF2TUMsR0F1TU87QUFDUixxQ0FBaUIsY0FBYyxRQUFkLEVBRFQ7QUFFUiw4QkFBVSxFQUFFLElBQUYsQ0FGRjtBQUdSLDRCQUFRLElBSEE7QUFJUixnQ0FBWSxVQUFVLFFBQVYsRUFKSixFQUkyQjtBQUNuQyw0QkFBUTtBQUxBLGlCQXZNUDs7QUE4TUwsb0JBQUksUUFBUSxPQUFaO0FBQ0ksMEJBQU0sT0FBTixJQUFpQixRQUFRLE9BQVIsQ0FBaUIsS0FBakIsQ0FBakI7QUFESixpQkE5TUssT0FnTmdCLFNBQUssbUJBQUwsQ0FBMEIsU0FBSyxNQUFMLENBQWEsS0FBYixFQUFvQixNQUFwQixDQUExQixDQWhOaEI7QUFBQTtBQWdORCx3QkFoTkM7O0FBaU5MLHVCQUFPO0FBQ0gsNEJBQVEsUUFETDtBQUVILDBCQUFNLFNBQVMsaUJBQVQsRUFBNEIsZUFBNUI7QUFGSCxpQkFBUDtBQWpOSztBQUFBO0FBdU5ILG1CQXZORyx1QkF1TlUsRUF2TlY7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUF1TmMsc0JBdk5kLG1GQXVOdUIsRUF2TnZCO0FBQUEsdUJBd05DLFNBQUssV0FBTCxFQXhORDtBQUFBO0FBeU5MLHVCQUFPLFNBQUssc0JBQUwsQ0FBNkIsU0FBSyxNQUFMLENBQWE7QUFDN0MscUNBQWlCO0FBRDRCLGlCQUFiLEVBRWpDLE1BRmlDLENBQTdCLENBQVA7QUF6Tks7QUFBQTtBQThOSCxlQTlORyxtQkE4Tk0sSUE5Tk47QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUE4TlksbUJBOU5aLG1GQThOa0IsUUE5TmxCO0FBOE40QixzQkE5TjVCLG1GQThOcUMsS0E5TnJDO0FBOE40QyxzQkE5TjVDLG1GQThOcUQsRUE5TnJEO0FBOE55RCx1QkE5TnpELG1GQThObUUsU0E5Tm5FO0FBOE44RSxvQkE5TjlFLG1GQThOcUYsU0E5TnJGO0FBK05ELG1CQS9OQyxHQStOSyxNQUFNLEtBQU4sR0FBYyxHQUFkLEdBQW9CLFNBQUssT0FBekIsR0FBbUMsR0FBbkMsR0FBeUMsR0FBekMsR0FBK0MsR0FBL0MsR0FBcUQsU0FBSyxhQUFMLENBQW9CLElBQXBCLEVBQTBCLE1BQTFCLENBL04xRDtBQWdPRCxxQkFoT0MsR0FnT08sU0FBSyxJQUFMLENBQVcsTUFBWCxFQUFtQixTQUFLLGFBQUwsQ0FBb0IsSUFBcEIsQ0FBbkIsQ0FoT1A7O0FBaU9MLG9CQUFJLE9BQU8sUUFBWCxFQUFxQjtBQUNqQix3QkFBSSxPQUFPLElBQVAsQ0FBYSxLQUFiLEVBQW9CLE1BQXhCO0FBQ0ksK0JBQU8sTUFBTSxTQUFLLFNBQUwsQ0FBZ0IsS0FBaEIsQ0FBYjtBQURKO0FBRUgsaUJBSEQsTUFHTztBQUNDLHlCQURELEdBQ1MsU0FBSyxLQUFMLEVBRFQ7O0FBRUgsNEJBQVEsU0FBSyxNQUFMLENBQWEsRUFBRSxTQUFTLEtBQVgsRUFBa0IsVUFBVSxTQUFLLE1BQWpDLEVBQWIsRUFBd0QsS0FBeEQsQ0FBUjtBQUNBLHdCQUFJLFVBQVUsTUFBZDtBQUNJLDRCQUFJLE9BQU8sSUFBUCxDQUFhLEtBQWIsRUFBb0IsTUFBeEI7QUFDSSxtQ0FBTyxTQUFLLFNBQUwsQ0FBZ0IsS0FBaEIsQ0FBUDtBQURKO0FBREoscUJBR0EsT0FBTyxNQUFNLFNBQUssU0FBTCxDQUFnQixLQUFoQixDQUFiO0FBQ0ksd0JBUEQsR0FPUSxPQUFPLFFBQVEsRUFBZixDQVBSOztBQVFILDhCQUFVO0FBQ04sd0NBQWdCLG1DQURWO0FBRU4sdUNBQWUsU0FBSyxJQUFMLENBQVcsU0FBSyxNQUFMLENBQWEsSUFBYixDQUFYLEVBQStCLFNBQUssTUFBTCxDQUFhLFNBQUssTUFBbEIsQ0FBL0IsRUFBMEQsUUFBMUQsRUFBb0UsV0FBcEU7QUFGVCxxQkFBVjtBQUlIO0FBQ0Qsc0JBQU0sU0FBSyxJQUFMLENBQVUsS0FBVixJQUFtQixHQUF6QjtBQWpQSyx1QkFrUGdCLFNBQUssS0FBTCxDQUFZLEdBQVosRUFBaUIsTUFBakIsRUFBeUIsT0FBekIsRUFBa0MsSUFBbEMsQ0FsUGhCO0FBQUE7QUFrUEQsd0JBbFBDOztBQW1QTCxvQkFBSSxVQUFVLFFBQWQ7QUFDSSwwQkFBTSxJQUFJLGFBQUosQ0FBbUIsU0FBSyxFQUFMLEdBQVUsR0FBVixHQUFnQixTQUFLLElBQUwsQ0FBVyxRQUFYLENBQW5DLENBQU47QUFESixpQkFFQSxPQUFPLFFBQVA7QUFyUEs7QUFBQTtBQUFBLEtBQWI7O0FBeVBBOztBQUVBLFFBQUksUUFBUTs7QUFFUixjQUFNLE9BRkU7QUFHUixnQkFBUSxPQUhBO0FBSVIscUJBQWEsSUFKTDtBQUtSLHFCQUFhLElBTEw7QUFNUixtQkFBVyxJQU5IO0FBT1IsZ0JBQVE7QUFDSixvQkFBUSxxR0FESjtBQUVKLG1CQUFPLHNCQUZIO0FBR0osbUJBQU8sdUJBSEg7QUFJSixtQkFBTztBQUpILFNBUEE7QUFhUixlQUFPO0FBQ0gsNEJBQWdCO0FBQ1osdUJBQU8sQ0FDSCxxQkFERyxFQUVILGFBRkcsRUFHSCxZQUhHLEVBSUgscUJBSkcsRUFLSCxhQUxHO0FBREssYUFEYjtBQVVILHlCQUFhO0FBQ1QsdUJBQU8sQ0FDSCxxQkFERyxFQUVILGFBRkcsRUFHSCxZQUhHLEVBSUgscUJBSkcsRUFLSCxhQUxHO0FBREUsYUFWVjtBQW1CSCxxQkFBUztBQUNMLHdCQUFRLENBQ0osa0JBREksRUFFSixZQUZJLEVBR0osWUFISSxFQUlKLEtBSkksRUFLSixNQUxJLEVBTUosWUFOSSxFQU9KLGFBUEksRUFRSixjQVJJLEVBU0oscUJBVEksRUFVSiwwQkFWSSxFQVdKLGVBWEksRUFZSixzQkFaSSxFQWFKLDBCQWJJLEVBY0osVUFkSSxFQWVKLE1BZkksRUFnQkosV0FoQkksRUFpQkosb0JBakJJLEVBa0JKLFdBbEJJO0FBREg7QUFuQk4sU0FiQztBQXVEUixtQkFBVztBQUNQLHVCQUFXLEVBQUUsTUFBTSxLQUFSLEVBQWUsVUFBVSxTQUF6QixFQUFvQyxRQUFRLEtBQTVDLEVBQW1ELFNBQVMsS0FBNUQsRUFBbUUsUUFBUSxjQUEzRSxFQUEyRixZQUFZLENBQXZHLEVBREo7QUFFUCx1QkFBVyxFQUFFLE1BQU0sS0FBUixFQUFlLFVBQVUsU0FBekIsRUFBb0MsUUFBUSxLQUE1QyxFQUFtRCxTQUFTLEtBQTVELEVBQW1FLFFBQVEsY0FBM0UsRUFBMkYsWUFBWSxDQUF2RyxFQUZKO0FBR1AsdUJBQVcsRUFBRSxNQUFNLEtBQVIsRUFBZSxVQUFVLFNBQXpCLEVBQW9DLFFBQVEsS0FBNUMsRUFBbUQsU0FBUyxLQUE1RCxFQUFtRSxRQUFRLFdBQTNFLEVBQTJGLFlBQVksQ0FBdkc7QUFISixTQXZESDs7QUE2REYsb0JBN0RFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkE4RGlCLFNBQUssdUJBQUwsRUE5RGpCO0FBQUE7QUE4REEsd0JBOURBO0FBK0RBLHNCQS9EQSxHQStEUyxFQUFFLFFBQVEsUUFBVixFQS9EVDs7QUFnRUoscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxTQUFLLFVBQUwsQ0FBZ0IsTUFBcEMsRUFBNEMsR0FBNUMsRUFBaUQ7QUFDekMsNEJBRHlDLEdBQzlCLFNBQUssVUFBTCxDQUFnQixDQUFoQixDQUQ4QjtBQUV6Qyw2QkFGeUMsR0FFN0IsU0FBUyxXQUFULEVBRjZCO0FBR3pDLDJCQUh5QyxHQUcvQjtBQUNWLGdDQUFRLFNBREU7QUFFVixnQ0FBUSxTQUZFO0FBR1YsaUNBQVM7QUFIQyxxQkFIK0I7QUFRekMsNkJBUnlDLEdBUTdCLGVBQWUsU0FBZixHQUEyQixVQVJFO0FBU3pDLDBCQVR5QyxHQVNoQyxZQUFZLFNBQVosR0FBd0IsVUFUUTtBQVV6Qyx3QkFWeUMsR0FVbEMsVUFBVSxTQUFWLEdBQXNCLFVBVlk7O0FBVzdDLHdCQUFJLGFBQWEsUUFBakI7QUFDSSxnQ0FBUSxNQUFSLElBQWtCLFdBQVksU0FBUyxTQUFULENBQVosQ0FBbEI7QUFESixxQkFFQSxJQUFJLFVBQVUsUUFBZDtBQUNJLGdDQUFRLE1BQVIsSUFBa0IsV0FBWSxTQUFTLE1BQVQsQ0FBWixDQUFsQjtBQURKLHFCQUVBLElBQUksUUFBUSxRQUFaO0FBQ0ksZ0NBQVEsTUFBUixJQUFrQixTQUFLLEdBQUwsQ0FBVSxRQUFRLE1BQVIsQ0FBVixFQUEyQixXQUFZLFNBQVMsSUFBVCxDQUFaLENBQTNCLENBQWxCO0FBREoscUJBRUEsUUFBUSxPQUFSLElBQW1CLFNBQUssR0FBTCxDQUFVLFFBQVEsTUFBUixDQUFWLEVBQTJCLFFBQVEsTUFBUixDQUEzQixDQUFuQjtBQUNBLDJCQUFPLFFBQVAsSUFBbUIsT0FBbkI7QUFDSDtBQUNELHVCQUFPLE1BQVA7QUFwRkk7QUFBQTtBQXVGRixzQkF2RkUsMEJBdUZjLE1BdkZkO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQXVGc0Isc0JBdkZ0QixtRkF1RitCLEVBdkYvQjtBQXdGQSxpQkF4RkEsR0F3RkksU0FBSyxNQUFMLENBQWEsTUFBYixDQXhGSjtBQXlGQSxzQkF6RkEsR0F5RlMsRUFBRSxNQUFGLElBQVksWUF6RnJCO0FBQUEsdUJBMEZrQixTQUFLLE1BQUwsRUFBYyxTQUFLLE1BQUwsQ0FBYSxFQUFFLE1BQU0sRUFBRSxJQUFGLENBQVIsRUFBYixFQUFnQyxNQUFoQyxDQUFkLENBMUZsQjtBQUFBO0FBMEZBLHlCQTFGQTtBQTJGQSx5QkEzRkEsR0EyRlksU0FBSyxZQUFMLEVBM0ZaO0FBNEZBLHNCQTVGQSxHQTRGUztBQUNULDRCQUFRLFVBQVUsTUFBVixDQURDO0FBRVQsNEJBQVEsVUFBVSxNQUFWLENBRkM7QUFHVCxpQ0FBYSxTQUhKO0FBSVQsZ0NBQVksU0FBSyxPQUFMLENBQWMsU0FBZDtBQUpILGlCQTVGVDs7QUFrR0osdUJBQU8sTUFBUDtBQWxHSTtBQUFBO0FBcUdGLG1CQXJHRSx1QkFxR1csTUFyR1g7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFzR0EsaUJBdEdBLEdBc0dJLFNBQUssTUFBTCxDQUFhLE1BQWIsQ0F0R0o7QUF1R0Esc0JBdkdBLEdBdUdTLEVBQUUsTUFBRixJQUFZLGFBdkdyQjtBQUFBLHVCQXdHaUIsU0FBSyxNQUFMLEVBQWMsRUFBRSxNQUFNLEVBQUUsSUFBRixDQUFSLEVBQWQsQ0F4R2pCO0FBQUE7QUF3R0Esd0JBeEdBO0FBeUdBLHNCQXpHQSxHQXlHUyxTQUFTLFFBQVQsQ0F6R1Q7QUEwR0EseUJBMUdBLEdBMEdZLFNBQVUsU0FBUyxNQUFULENBQVYsSUFBOEIsSUExRzFDOztBQTJHSix1QkFBTztBQUNILGlDQUFhLFNBRFY7QUFFSCxnQ0FBWSxTQUFLLE9BQUwsQ0FBYyxTQUFkLENBRlQ7QUFHSCw0QkFBUSxXQUFZLE9BQU8sTUFBUCxDQUFaLENBSEw7QUFJSCwyQkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBSko7QUFLSCwyQkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBTEo7QUFNSCwyQkFBTyxXQUFZLE9BQU8sTUFBUCxDQUFaLENBTko7QUFPSCw0QkFBUSxTQVBMO0FBUUgsNEJBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQVJMO0FBU0gsNkJBQVMsU0FUTjtBQVVILDZCQUFTLFNBVk47QUFXSCw0QkFBUSxXQUFZLE9BQU8sTUFBUCxDQUFaLENBWEw7QUFZSCw4QkFBVSxTQVpQO0FBYUgsa0NBQWMsU0FiWDtBQWNILCtCQUFXLFNBZFI7QUFlSCxrQ0FBYyxTQWZYO0FBZ0JILG1DQUFlLFdBQVksT0FBTyxLQUFQLENBQVosQ0FoQlo7QUFpQkgsNEJBQVE7QUFqQkwsaUJBQVA7QUEzR0k7QUFBQTtBQWdJRixtQkFoSUUsdUJBZ0lXLE1BaElYO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFnSW1CLGtCQWhJbkIsbUZBZ0k0QixFQWhJNUI7QUFpSUEsYUFqSUEsR0FpSUksU0FBSyxNQUFMLENBQWEsTUFBYixDQWpJSjtBQWtJQSxrQkFsSUEsR0FrSVMsRUFBRSxNQUFGLElBQVksYUFsSXJCOztBQW1JSixtQkFBTyxTQUFLLE1BQUwsRUFBYyxTQUFLLE1BQUwsQ0FBYSxFQUFFLE1BQU0sRUFBRSxJQUFGLENBQVIsRUFBYixFQUFnQyxNQUFoQyxDQUFkLENBQVA7QUFuSUk7QUFzSUYsbUJBdElFLHVCQXNJVyxNQXRJWCxFQXNJbUIsSUF0SW5CLEVBc0l5QixJQXRJekIsRUFzSStCLE1BdEkvQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBc0l1QyxpQkF0SXZDLG1GQXNJK0MsU0F0SS9DO0FBc0kwRCxrQkF0STFELG1GQXNJbUUsRUF0SW5FO0FBdUlBLGFBdklBLEdBdUlJLFNBQUssTUFBTCxDQUFhLE1BQWIsQ0F2SUo7QUF3SUEsa0JBeElBLEdBd0lTLGNBQWMsU0FBSyxVQUFMLENBQWlCLElBQWpCLENBeEl2QjtBQXlJQSxpQkF6SUEsR0F5SVE7QUFDUiw2QkFBYSxFQUFFLFVBQUYsQ0FETDtBQUVSLDBCQUFVLE1BRkY7QUFHUiwwQkFBVSxFQUFFLE9BQUYsRUFBVyxXQUFYO0FBSEYsYUF6SVI7O0FBOElKLGdCQUFJLFFBQVEsT0FBWjtBQUNJLHNCQUFNLE9BQU4sSUFBaUIsS0FBakI7QUFESjtBQUdJLDBCQUFVLFNBQUssVUFBTCxDQUFpQixJQUFqQixDQUFWO0FBSEosYUFJSSxRQWxKQSxHQWtKVyxTQUFLLE1BQUwsRUFBYyxTQUFLLE1BQUwsQ0FBYSxLQUFiLEVBQW9CLE1BQXBCLENBQWQsQ0FsSlg7O0FBbUpKLG1CQUFPO0FBQ0gsd0JBQVEsUUFETDtBQUVILHNCQUFNLFNBQVMsSUFBVDtBQUZILGFBQVA7QUFuSkk7QUF5SkYsbUJBekpFLHVCQXlKVyxFQXpKWDtBQUFBOztBQTBKSixtQkFBTyxTQUFLLG9CQUFMLENBQTJCLEVBQUUsTUFBTSxFQUFSLEVBQTNCLENBQVA7QUExSkk7QUE2SkYsZUE3SkUsbUJBNkpPLElBN0pQO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBNkphLG1CQTdKYixtRkE2Sm1CLE9BN0puQjtBQTZKNEIsc0JBN0o1QixtRkE2SnFDLEtBN0pyQztBQTZKNEMsc0JBN0o1QyxtRkE2SnFELEVBN0pyRDtBQTZKeUQsdUJBN0p6RCxtRkE2Sm1FLFNBN0puRTtBQTZKOEUsb0JBN0o5RSxtRkE2SnFGLFNBN0pyRjtBQThKQSxtQkE5SkEsR0E4Sk0sU0FBSyxJQUFMLENBQVUsS0FBVixDQTlKTjs7QUErSkosb0JBQUksT0FBTyxPQUFYLEVBQW9CO0FBQ2hCLDJCQUFPLFNBQVMsU0FBSyxPQUFyQjtBQUNJLHlCQUZZLEdBRUosU0FBSyxPQUFMLENBQWMsU0FBSyxNQUFMLENBQWE7QUFDbkMsa0NBQVUsSUFEeUI7QUFFbkMsc0NBQWMsU0FBSyxNQUZnQjtBQUduQyxtQ0FBVyxTQUFLLEtBQUw7QUFId0IscUJBQWIsRUFJdkIsTUFKdUIsQ0FBZCxDQUZJO0FBT1osK0JBUFksR0FPRSxTQUFLLFNBQUwsQ0FBZ0IsU0FBSyxJQUFMLENBQVcsS0FBWCxFQUFrQixRQUFsQixDQUFoQixDQVBGO0FBUWhCOztBQUNBLG1DQUFlLGlCQUFpQixTQUFLLE1BQXJDO0FBQ0EsMEJBQU0sTUFBTixJQUFnQixTQUFLLElBQUwsQ0FBVyxTQUFLLE1BQUwsQ0FBYSxXQUFiLENBQVgsQ0FBaEI7QUFDQSwyQkFBTyxTQUFLLFNBQUwsQ0FBZ0IsS0FBaEIsQ0FBUDtBQUNBLDhCQUFVO0FBQ04sd0NBQWdCLG1DQURWO0FBRU4sMENBQWtCLEtBQUs7QUFGakIscUJBQVY7QUFJSCxpQkFoQkQsTUFnQk87QUFDSCwyQkFBTyxNQUFNLEdBQU4sR0FBWSxHQUFaLEdBQWtCLFNBQUssYUFBTCxDQUFvQixJQUFwQixFQUEwQixNQUExQixDQUFsQixHQUFzRCxVQUE3RDtBQUNJLDBCQUZELEdBRVMsU0FBSyxJQUFMLENBQVcsTUFBWCxFQUFtQixTQUFLLGFBQUwsQ0FBb0IsSUFBcEIsQ0FBbkIsQ0FGVDs7QUFHSCx3QkFBSSxPQUFPLElBQVAsQ0FBYSxNQUFiLEVBQW9CLE1BQXhCO0FBQ0ksK0JBQU8sTUFBTSxTQUFLLFNBQUwsQ0FBZ0IsTUFBaEIsQ0FBYjtBQURKO0FBRUg7QUFwTEcsdUJBcUxpQixTQUFLLEtBQUwsQ0FBWSxHQUFaLEVBQWlCLE1BQWpCLEVBQXlCLE9BQXpCLEVBQWtDLElBQWxDLENBckxqQjtBQUFBO0FBcUxBLHdCQXJMQTs7QUFzTEosb0JBQUksWUFBWSxRQUFoQjtBQUNJLHdCQUFJLFNBQVMsUUFBVCxLQUFzQixPQUExQjtBQUNJLDhCQUFNLElBQUksYUFBSixDQUFtQixTQUFLLEVBQUwsR0FBVSxHQUFWLEdBQWdCLFNBQUssSUFBTCxDQUFXLFFBQVgsQ0FBbkMsQ0FBTjtBQURKO0FBREosaUJBR0EsSUFBSSxVQUFVLFFBQWQ7QUFDSSwwQkFBTSxJQUFJLGFBQUosQ0FBbUIsU0FBSyxFQUFMLEdBQVUsR0FBVixHQUFnQixTQUFLLElBQUwsQ0FBVyxRQUFYLENBQW5DLENBQU47QUFESixpQkFFQSxPQUFPLFFBQVA7QUEzTEk7QUFBQTtBQUFBLEtBQVo7O0FBK0xBOztBQUVBLFFBQUksUUFBUTs7QUFFUixjQUFNLE9BRkU7QUFHUixnQkFBUSxPQUhBO0FBSVIscUJBQWEsSUFKTDtBQUtSLHFCQUFhLElBTEw7QUFNUixtQkFBVyxJQU5IO0FBT1IsZ0JBQVE7QUFDSixvQkFBUSxxR0FESjtBQUVKLG1CQUFPLHVCQUZIO0FBR0osbUJBQU8sdUJBSEg7QUFJSixtQkFBTyxDQUNILDRCQURHLEVBRUgsMkJBRkc7QUFKSCxTQVBBO0FBZ0JSLGVBQU87QUFDSCxzQkFBVTtBQUNOLHVCQUFPLENBQ0gseUJBREcsRUFFSCw2QkFGRyxFQUdILHlCQUhHO0FBREQsYUFEUDtBQVFILHVCQUFXO0FBQ1AsdUJBQU8sQ0FDSCxTQURHLEVBRUgsb0JBRkcsRUFHSCw0Q0FIRyxFQUlILG9DQUpHLEVBS0gsMkJBTEcsRUFNSCxnQ0FORyxDQURBO0FBU1Asd0JBQVEsQ0FDSixrQkFESSxFQUVKLFNBRkksRUFHSiw0Q0FISSxFQUlKLCtDQUpJLEVBS0osMkJBTEksRUFNSixpQkFOSSxDQVREO0FBaUJQLDBCQUFVLENBQ04sZ0NBRE07QUFqQkg7QUFSUixTQWhCQztBQThDUixtQkFBVztBQUNQLHVCQUFXLEVBQUUsTUFBTSxRQUFSLEVBQWtCLFVBQVUsU0FBNUIsRUFBdUMsUUFBUSxLQUEvQyxFQUFzRCxTQUFTLEtBQS9ELEVBREo7QUFFUCx1QkFBVyxFQUFFLE1BQU0sUUFBUixFQUFrQixVQUFVLFNBQTVCLEVBQXVDLFFBQVEsS0FBL0MsRUFBc0QsU0FBUyxLQUEvRCxFQUZKO0FBR1AsdUJBQVcsRUFBRSxNQUFNLFFBQVIsRUFBa0IsVUFBVSxTQUE1QixFQUF1QyxRQUFRLEtBQS9DLEVBQXNELFNBQVMsS0FBL0Q7QUFISixTQTlDSDs7QUFvREYsc0JBcERFLDBCQW9EYyxNQXBEZDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFvRHNCLHNCQXBEdEIsbUZBb0QrQixFQXBEL0I7QUFBQSx1QkFxRGtCLFNBQUssK0JBQUwsQ0FBc0MsU0FBSyxNQUFMLENBQWE7QUFDckUsOEJBQVUsU0FBSyxRQUFMLENBQWUsTUFBZjtBQUQyRCxpQkFBYixFQUV6RCxNQUZ5RCxDQUF0QyxDQXJEbEI7QUFBQTtBQXFEQSx5QkFyREE7QUF3REEseUJBeERBLEdBd0RZLFNBQUssWUFBTCxFQXhEWjtBQXlEQSxzQkF6REEsR0F5RFM7QUFDVCw0QkFBUSxFQURDO0FBRVQsNEJBQVEsRUFGQztBQUdULGlDQUFhLFNBSEo7QUFJVCxnQ0FBWSxTQUFLLE9BQUwsQ0FBYyxTQUFkO0FBSkgsaUJBekRUO0FBK0RBLHFCQS9EQSxHQStEUSxDQUFFLE1BQUYsRUFBVSxNQUFWLENBL0RSOztBQWdFSixxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLE1BQU0sTUFBMUIsRUFBa0MsR0FBbEMsRUFBdUM7QUFDL0Isd0JBRCtCLEdBQ3hCLE1BQU0sQ0FBTixDQUR3QjtBQUUvQiwwQkFGK0IsR0FFdEIsVUFBVSxJQUFWLENBRnNCOztBQUduQyx5QkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLE9BQU8sTUFBM0IsRUFBbUMsR0FBbkMsRUFBd0M7QUFDaEMsNkJBRGdDLEdBQ3hCLE9BQU8sQ0FBUCxDQUR3QjtBQUVoQyw2QkFGZ0MsR0FFeEIsV0FBWSxNQUFNLENBQU4sQ0FBWixDQUZ3QjtBQUdoQyw4QkFIZ0MsR0FHdkIsV0FBWSxNQUFNLENBQU4sQ0FBWixDQUh1Qjs7QUFJcEMsK0JBQU8sSUFBUCxFQUFhLElBQWIsQ0FBbUIsQ0FBRSxLQUFGLEVBQVMsTUFBVCxDQUFuQjtBQUNIO0FBQ0o7QUFDRCx1QkFBTyxNQUFQO0FBMUVJO0FBQUE7QUE2RUYsbUJBN0VFLHVCQTZFVyxNQTdFWDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkE4RWUsU0FBSyw0QkFBTCxDQUFtQztBQUNsRCw4QkFBVSxTQUFLLFFBQUwsQ0FBZSxNQUFmO0FBRHdDLGlCQUFuQyxDQTlFZjtBQUFBO0FBOEVBLHNCQTlFQTtBQWlGQSx5QkFqRkEsR0FpRlksU0FBSyxTQUFMLENBQWdCLE9BQU8sZUFBUCxDQUFoQixDQWpGWjtBQWtGQSxtQkFsRkEsR0FrRk0sU0FsRk47QUFtRkEsbUJBbkZBLEdBbUZNLFNBbkZOOztBQW9GSixvQkFBSSxTQUFTLE1BQWI7QUFDSSx3QkFBSSxPQUFPLEtBQVAsQ0FBSjtBQUNJLDhCQUFNLFdBQVksT0FBTyxLQUFQLENBQVosQ0FBTjtBQURKO0FBREosaUJBR0EsSUFBSSxTQUFTLE1BQWI7QUFDSSx3QkFBSSxPQUFPLEtBQVAsQ0FBSjtBQUNJLDhCQUFNLFdBQVksT0FBTyxLQUFQLENBQVosQ0FBTjtBQURKO0FBREosaUJBR0EsT0FBTztBQUNILGlDQUFhLFNBRFY7QUFFSCxnQ0FBWSxTQUFLLE9BQUwsQ0FBYyxTQUFkLENBRlQ7QUFHSCw0QkFBUSxXQUFZLE9BQU8sU0FBUCxDQUFaLENBSEw7QUFJSCwyQkFBTyxXQUFZLE9BQU8sUUFBUCxDQUFaLENBSko7QUFLSCwyQkFBTyxHQUxKO0FBTUgsMkJBQU8sR0FOSjtBQU9ILDRCQUFRLFdBQVksT0FBTyxTQUFQLENBQVosQ0FQTDtBQVFILDRCQUFRLFdBQVksT0FBTyxXQUFQLENBQVosQ0FSTDtBQVNILDZCQUFTLFNBVE47QUFVSCw2QkFBUyxTQVZOO0FBV0gsNEJBQVEsV0FBWSxPQUFPLFdBQVAsQ0FBWixDQVhMO0FBWUgsOEJBQVUsU0FaUDtBQWFILGtDQUFjLFNBYlg7QUFjSCwrQkFBVyxTQWRSO0FBZUgsa0NBQWMsU0FmWDtBQWdCSCxtQ0FBZSxXQUFZLE9BQU8sV0FBUCxDQUFaLENBaEJaO0FBaUJILDRCQUFRO0FBakJMLGlCQUFQO0FBMUZJO0FBQUE7QUErR0YsbUJBL0dFLHVCQStHVyxNQS9HWDtBQUFBO0FBQUE7QUFBQTs7QUErR21CLGtCQS9HbkIsbUZBK0c0QixFQS9HNUI7O0FBZ0hKLG1CQUFPLFNBQUssNEJBQUwsQ0FBbUMsU0FBSyxNQUFMLENBQWE7QUFDbkQsMEJBQVUsU0FBSyxRQUFMLENBQWUsTUFBZjtBQUR5QyxhQUFiLEVBRXZDLE1BRnVDLENBQW5DLENBQVA7QUFoSEk7QUFxSEYsb0JBckhFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQXNIaUIsU0FBSyxrQkFBTCxFQXRIakI7QUFBQTtBQXNIQSx3QkF0SEE7QUF1SEEsd0JBdkhBLEdBdUhXLFNBQVMsVUFBVCxDQXZIWDtBQXdIQSxzQkF4SEEsR0F3SFMsRUFBRSxRQUFRLFFBQVYsRUF4SFQ7O0FBeUhKLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksU0FBUyxNQUE3QixFQUFxQyxHQUFyQyxFQUEwQztBQUNsQywyQkFEa0MsR0FDeEIsU0FBUyxDQUFULENBRHdCO0FBRWxDLDRCQUZrQyxHQUV2QixRQUFRLFVBQVIsQ0FGdUI7QUFHbEMsMkJBSGtDLEdBR3hCO0FBQ1YsZ0NBQVEsV0FBWSxRQUFRLGtCQUFSLENBQVosQ0FERTtBQUVWLGdDQUFRLFNBRkU7QUFHVixpQ0FBUyxXQUFZLFFBQVEsY0FBUixDQUFaO0FBSEMscUJBSHdCOztBQVF0Qyw0QkFBUSxNQUFSLElBQWtCLFFBQVEsT0FBUixJQUFtQixRQUFRLE1BQVIsQ0FBckM7QUFDQSwyQkFBTyxRQUFQLElBQW1CLE9BQW5CO0FBQ0g7QUFDRCx1QkFBTyxNQUFQO0FBcElJO0FBQUE7QUF1SVIsb0JBdklRLDBCQXVJUTtBQUNaLG1CQUFPLEtBQUssaUJBQUwsRUFBUDtBQUNILFNBeklPO0FBMklSLGFBM0lRLG1CQTJJQztBQUNMLG1CQUFPLEtBQUssWUFBTCxFQUFQO0FBQ0gsU0E3SU87QUErSUYsbUJBL0lFLHVCQStJVyxNQS9JWCxFQStJbUIsSUEvSW5CLEVBK0l5QixJQS9JekIsRUErSStCLE1BL0kvQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBK0l1QyxxQkEvSXZDLG1GQStJK0MsU0EvSS9DO0FBK0kwRCxzQkEvSTFELG1GQStJbUUsRUEvSW5FOztBQWdKSixvQkFBSSxRQUFRLFFBQVo7QUFDSSwwQkFBTSxJQUFJLGFBQUosQ0FBbUIsU0FBSyxFQUFMLEdBQVUsMkJBQTdCLENBQU47QUFESixpQkFFQSxTQUFTLE9BQU8sUUFBUCxFQUFUO0FBQ0Esd0JBQVEsTUFBTSxRQUFOLEVBQVI7QUFDSSxpQkFwSkEsR0FvSkksU0FBSyxNQUFMLENBQWEsTUFBYixDQXBKSjtBQXFKQSxxQkFySkEsR0FxSlE7QUFDUiw0QkFBUSxJQURBO0FBRVIsNEJBQVEsSUFGQTtBQUdSLGdDQUFZLEVBQUUsTUFBRixDQUhKO0FBSVIsOEJBQVUsTUFKRjtBQUtSLCtCQUFXLE1BTEg7QUFNUiw2QkFBUyxLQU5EO0FBT1Isa0NBQWMsRUFBRSxJQUFGO0FBUE4saUJBckpSO0FBQUEsdUJBOEppQixTQUFLLG1CQUFMLENBQTBCLFNBQUssTUFBTCxDQUFhLEtBQWIsRUFBb0IsTUFBcEIsQ0FBMUIsQ0E5SmpCO0FBQUE7QUE4SkEsd0JBOUpBOztBQStKSix1QkFBTztBQUNILDRCQUFRLFFBREw7QUFFSCwwQkFBTSxTQUFTLElBQVQ7QUFGSCxpQkFBUDtBQS9KSTtBQUFBO0FBcUtGLG1CQXJLRSx1QkFxS1csRUFyS1g7QUFBQTtBQUFBO0FBQUE7O0FBcUtlLGtCQXJLZixtRkFxS3dCLEVBckt4Qjs7QUFzS0osbUJBQU8sU0FBSyxvQ0FBTCxDQUEyQyxTQUFLLE1BQUwsQ0FBYTtBQUMzRCxzQkFBTTtBQURxRCxhQUFiLEVBRS9DLE1BRitDLENBQTNDLENBQVA7QUF0S0k7QUEyS0YsZUEzS0UsbUJBMktPLElBM0tQO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUEyS2EsZUEzS2IsbUZBMkttQixRQTNLbkI7QUEySzZCLGtCQTNLN0IsbUZBMktzQyxLQTNLdEM7QUEySzZDLGtCQTNLN0MsbUZBMktzRCxFQTNLdEQ7QUEySzBELG1CQTNLMUQsbUZBMktvRSxTQTNLcEU7QUEySytFLGdCQTNLL0UsbUZBMktzRixTQTNLdEY7QUE0S0EsZUE1S0EsR0E0S00sU0FBSyxJQUFMLENBQVUsS0FBVixJQUFtQixHQUFuQixHQUF5QixTQUFLLE9BQTlCLEdBQXdDLEdBQXhDLEdBQThDLFNBQUssYUFBTCxDQUFvQixJQUFwQixFQUEwQixNQUExQixDQTVLcEQ7QUE2S0EsaUJBN0tBLEdBNktRLFNBQUssSUFBTCxDQUFXLE1BQVgsRUFBbUIsU0FBSyxhQUFMLENBQW9CLElBQXBCLENBQW5CLENBN0tSOztBQThLSixnQkFBSSxPQUFPLFFBQVgsRUFBcUI7QUFDakIsb0JBQUksT0FBTyxJQUFQLENBQWEsS0FBYixFQUFvQixNQUF4QjtBQUNJLDJCQUFPLE1BQU0sU0FBSyxTQUFMLENBQWdCLEtBQWhCLENBQWI7QUFESjtBQUVILGFBSEQsTUFHTztBQUNILG9CQUFJLE9BQU8sSUFBUCxDQUFhLEtBQWIsRUFBb0IsTUFBeEI7QUFDSSwyQkFBTyxTQUFLLElBQUwsQ0FBVyxLQUFYLENBQVA7QUFESjtBQUdJLDJCQUFPLEVBQVA7QUFISixpQkFJSSxLQUxELEdBS1MsU0FBSyxLQUFMLEdBQWMsUUFBZCxFQUxUO0FBTUMseUJBTkQsR0FNYSxLQU5iO0FBT0Msb0JBUEQsR0FPUSxDQUFFLE1BQUYsRUFBVSxHQUFWLEVBQWUsSUFBZixFQUFxQixLQUFyQixFQUE0QixTQUE1QixDQVBSO0FBUUMsdUJBUkQsR0FRVyxRQUFRLFNBQUssSUFBTCxDQUFXLElBQVgsQ0FSbkI7QUFTQyxzQkFURCxHQVNRLFNBQUssSUFBTCxDQUFXLFNBQUssTUFBTCxDQUFhLE9BQWIsQ0FBWCxFQUFrQyxRQUFsQyxFQUE0QyxRQUE1QyxDQVRSO0FBVUMsdUJBVkQsR0FVVyxTQUFLLFlBQUwsQ0FBbUIsR0FBbkIsRUFBd0IsTUFBeEIsQ0FWWDtBQVdDLHlCQVhELEdBV2EsU0FBSyxJQUFMLENBQVcsT0FBWCxFQUFvQixTQUFLLE1BQUwsQ0FBYSxTQUFLLE1BQWxCLENBQXBCLEVBQStDLFFBQS9DLEVBQXlELFFBQXpELENBWGI7O0FBWUgsMEJBQVU7QUFDTixxQ0FBaUIsS0FBSyxNQUFMLEdBQWMsR0FBZCxHQUFvQixTQUQvQjtBQUVOLG9DQUFnQixrQkFGVjtBQUdOLHdDQUFvQixTQUhkO0FBSU4sb0NBQWdCO0FBSlYsaUJBQVY7QUFNSDtBQUNHLG9CQXBNQSxHQW9NVyxTQUFLLEtBQUwsQ0FBWSxHQUFaLEVBQWlCLE1BQWpCLEVBQXlCLE9BQXpCLEVBQWtDLElBQWxDLENBcE1YOztBQXFNSixnQkFBSSxVQUFVLFFBQWQ7QUFDSSxzQkFBTSxJQUFJLGFBQUosQ0FBbUIsU0FBSyxFQUFMLEdBQVUsR0FBVixHQUFnQixTQUFLLElBQUwsQ0FBVyxRQUFYLENBQW5DLENBQU47QUFESixhQUVBLE9BQU8sUUFBUDtBQXZNSTtBQUFBLEtBQVo7O0FBMk1BOztBQUVBLFFBQUksT0FBTzs7QUFFUCxjQUFNLE1BRkM7QUFHUCxnQkFBUSxVQUhEO0FBSVAscUJBQWEsSUFKTjtBQUtQLHFCQUFhLElBTE47QUFNUCxtQkFBVyxJQU5KO0FBT1AsMkJBQW1CLElBUFo7QUFRUCxnQkFBUTtBQUNKLG9CQUFRLHFHQURKO0FBRUosbUJBQU8sMEJBRkg7QUFHSixtQkFBTyxzQkFISDtBQUlKLG1CQUFPO0FBSkgsU0FSRDtBQWNQLGVBQU87QUFDSCxzQkFBVTtBQUNOLHVCQUFPLENBQ0gsT0FERyxFQUVILFFBRkcsRUFHSCxRQUhHLEVBSUgsV0FKRztBQURELGFBRFA7QUFTSCx1QkFBVztBQUNQLHdCQUFRLENBQ0osU0FESSxFQUVKLFdBRkksRUFHSixjQUhJLEVBSUosWUFKSSxFQUtKLFlBTEksRUFNSixRQU5JO0FBREQ7QUFUUixTQWRBOztBQW1DRCxvQkFuQ0M7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkFvQ2lCLFNBQUssa0JBQUwsRUFwQ2pCO0FBQUE7QUFvQ0MsdUJBcENEO0FBcUNDLG9CQXJDRCxHQXFDUSxPQUFPLElBQVAsQ0FBYSxPQUFiLENBckNSO0FBc0NDLHNCQXRDRCxHQXNDVSxFQXRDVjs7QUF1Q0gscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxLQUFLLE1BQXpCLEVBQWlDLEdBQWpDLEVBQXNDO0FBQzlCLHNCQUQ4QixHQUN6QixLQUFLLENBQUwsQ0FEeUI7QUFFOUIsd0JBRjhCLEdBRXZCLEdBQUcsV0FBSCxFQUZ1QjtBQUc5Qix5QkFIOEIsR0FHdEIsS0FIc0I7QUFJOUIsMEJBSjhCLEdBSXJCLE9BQU8sR0FBUCxHQUFhLEtBSlE7O0FBS2xDLDJCQUFPLFNBQUssa0JBQUwsQ0FBeUIsSUFBekIsQ0FBUDtBQUNBLDRCQUFRLFNBQUssa0JBQUwsQ0FBeUIsS0FBekIsQ0FBUjtBQUNBLDJCQUFPLElBQVAsQ0FBYTtBQUNULDhCQUFNLEVBREc7QUFFVCxrQ0FBVSxNQUZEO0FBR1QsZ0NBQVEsSUFIQztBQUlULGlDQUFTLEtBSkE7QUFLVCxnQ0FBUTtBQUxDLHFCQUFiO0FBT0g7QUFDRCx1QkFBTyxNQUFQO0FBdERHO0FBQUE7QUF5REQsb0JBekRDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBMERHLFNBQUssV0FBTCxFQTFESDtBQUFBO0FBQUEsdUJBMkRrQixTQUFLLGtCQUFMLEVBM0RsQjtBQUFBO0FBMkRDLHdCQTNERDtBQTREQyxzQkE1REQsR0E0RFUsRUFBRSxRQUFRLFFBQVYsRUE1RFY7O0FBNkRILHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksU0FBSyxVQUFMLENBQWdCLE1BQXBDLEVBQTRDLEdBQTVDLEVBQWlEO0FBQ3pDLDRCQUR5QyxHQUM5QixTQUFLLFVBQUwsQ0FBZ0IsQ0FBaEIsQ0FEOEI7QUFFekMsNkJBRnlDLEdBRTdCLFNBQVMsV0FBVCxFQUY2Qjs7QUFHN0Msd0JBQUksYUFBYSxNQUFqQjtBQUNJLG9DQUFZLEtBQVo7QUFESixxQkFFSSxPQUx5QyxHQUsvQjtBQUNWLGdDQUFRLFNBREU7QUFFVixnQ0FBUSxTQUZFO0FBR1YsaUNBQVM7QUFIQyxxQkFMK0I7QUFVekMsd0JBVnlDLEdBVWxDLFlBQVksVUFWc0I7QUFXekMsd0JBWHlDLEdBV2xDLFlBQVksT0FYc0I7O0FBWTdDLHdCQUFJLFFBQVEsUUFBWjtBQUNJLGdDQUFRLE1BQVIsSUFBa0IsV0FBWSxTQUFTLElBQVQsQ0FBWixDQUFsQjtBQURKLHFCQUVBLElBQUksUUFBUSxRQUFaO0FBQ0ksZ0NBQVEsTUFBUixJQUFrQixXQUFZLFNBQVMsSUFBVCxDQUFaLENBQWxCO0FBREoscUJBRUEsUUFBUSxPQUFSLElBQW1CLFNBQUssR0FBTCxDQUFVLFFBQVEsTUFBUixDQUFWLEVBQTJCLFFBQVEsTUFBUixDQUEzQixDQUFuQjtBQUNBLDJCQUFPLFFBQVAsSUFBbUIsT0FBbkI7QUFDSDtBQUNELHVCQUFPLE1BQVA7QUFoRkc7QUFBQTtBQW1GRCxzQkFuRkMsMEJBbUZlLE1BbkZmO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBbUZ1QixzQkFuRnZCLG1GQW1GZ0MsRUFuRmhDO0FBQUEsdUJBb0ZHLFNBQUssV0FBTCxFQXBGSDtBQUFBO0FBQUEsdUJBcUZtQixTQUFLLGNBQUwsQ0FBcUIsU0FBSyxNQUFMLENBQWE7QUFDcEQsNEJBQVEsU0FBSyxRQUFMLENBQWUsTUFBZjtBQUQ0QyxpQkFBYixFQUV4QyxNQUZ3QyxDQUFyQixDQXJGbkI7QUFBQTtBQXFGQyx5QkFyRkQ7QUF3RkMseUJBeEZELEdBd0ZhLFNBQUssWUFBTCxFQXhGYjtBQXlGQyxzQkF6RkQsR0F5RlU7QUFDVCw0QkFBUSxVQUFVLE1BQVYsQ0FEQztBQUVULDRCQUFRLFVBQVUsTUFBVixDQUZDO0FBR1QsaUNBQWEsU0FISjtBQUlULGdDQUFZLFNBQUssT0FBTCxDQUFjLFNBQWQ7QUFKSCxpQkF6RlY7O0FBK0ZILHVCQUFPLE1BQVAsSUFBaUIsU0FBSyxNQUFMLENBQWEsT0FBTyxNQUFQLENBQWIsRUFBNkIsQ0FBN0IsQ0FBakI7QUFDQSx1QkFBTyxNQUFQO0FBaEdHO0FBQUE7QUFtR1AsbUJBbkdPLHVCQW1HTSxNQW5HTixFQW1HYyxNQW5HZCxFQW1Hc0I7QUFDekIsZ0JBQUksWUFBWSxLQUFLLFlBQUwsRUFBaEI7QUFDQSxtQkFBTztBQUNILDZCQUFhLFNBRFY7QUFFSCw0QkFBWSxLQUFLLE9BQUwsQ0FBYyxTQUFkLENBRlQ7QUFHSCx3QkFBUSxXQUFZLE9BQU8sTUFBUCxDQUFaLENBSEw7QUFJSCx1QkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBSko7QUFLSCx1QkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBTEo7QUFNSCx1QkFBTyxXQUFZLE9BQU8sTUFBUCxDQUFaLENBTko7QUFPSCx3QkFBUSxTQVBMO0FBUUgsd0JBQVEsU0FSTDtBQVNILHlCQUFTLFNBVE47QUFVSCx5QkFBUyxTQVZOO0FBV0gsd0JBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQVhMO0FBWUgsMEJBQVUsU0FaUDtBQWFILDhCQUFjLFNBYlg7QUFjSCwyQkFBVyxTQWRSO0FBZUgsOEJBQWMsV0FBWSxPQUFPLEtBQVAsQ0FBWixDQWZYO0FBZ0JILCtCQUFlLFdBQVksT0FBTyxRQUFQLENBQVosQ0FoQlo7QUFpQkgsd0JBQVE7QUFqQkwsYUFBUDtBQW1CSCxTQXhITTtBQTBIRCxvQkExSEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkEySEcsU0FBSyxXQUFMLEVBM0hIO0FBQUE7QUFBQSx1QkE0SGlCLFNBQUssa0JBQUwsRUE1SGpCO0FBQUE7QUE0SEMsdUJBNUhEO0FBNkhDLG1CQTdIRCxHQTZITyxPQUFPLElBQVAsQ0FBYSxPQUFiLENBN0hQO0FBOEhDLHNCQTlIRCxHQThIVSxFQTlIVjs7QUErSEgscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxJQUFJLE1BQXhCLEVBQWdDLEdBQWhDLEVBQXFDO0FBQzdCLHNCQUQ2QixHQUN4QixJQUFJLENBQUosQ0FEd0I7QUFFN0IsMEJBRjZCLEdBRXBCLFNBQUssYUFBTCxDQUFtQixFQUFuQixDQUZvQjtBQUc3QiwwQkFINkIsR0FHcEIsT0FBTyxRQUFQLENBSG9CO0FBSTdCLDBCQUo2QixHQUlwQixRQUFRLEVBQVIsQ0FKb0I7O0FBS2pDLDJCQUFPLE1BQVAsSUFBaUIsU0FBSyxXQUFMLENBQWtCLE1BQWxCLEVBQTBCLE1BQTFCLENBQWpCO0FBQ0g7QUFDRCx1QkFBTyxNQUFQO0FBdElHO0FBQUE7QUF5SUQsbUJBeklDLHVCQXlJWSxNQXpJWjtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQTBJRyxTQUFLLFdBQUwsRUExSUg7QUFBQTtBQTJJQyxpQkEzSUQsR0EySUssU0FBSyxNQUFMLENBQWEsTUFBYixDQTNJTDtBQUFBLHVCQTRJZ0IsU0FBSyxlQUFMLENBQXNCO0FBQ3JDLDRCQUFRLEVBQUUsSUFBRjtBQUQ2QixpQkFBdEIsQ0E1SWhCO0FBQUE7QUE0SUMsc0JBNUlEOztBQStJSCx1QkFBTyxTQUFLLFdBQUwsQ0FBa0IsTUFBbEIsRUFBMEIsQ0FBMUIsQ0FBUDtBQS9JRztBQUFBO0FBa0pELG1CQWxKQyx1QkFrSlksTUFsSlo7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFrSm9CLHNCQWxKcEIsbUZBa0o2QixFQWxKN0I7QUFBQSx1QkFtSkcsU0FBSyxXQUFMLEVBbkpIO0FBQUE7QUFvSkgsdUJBQU8sU0FBSyxlQUFMLENBQXNCLFNBQUssTUFBTCxDQUFhO0FBQ3RDLDRCQUFRLFNBQUssUUFBTCxDQUFlLE1BQWY7QUFEOEIsaUJBQWIsRUFFMUIsTUFGMEIsQ0FBdEIsQ0FBUDtBQXBKRztBQUFBO0FBeUpELG1CQXpKQyx1QkF5SlksTUF6SlosRUF5Sm9CLElBekpwQixFQXlKMEIsSUF6SjFCLEVBeUpnQyxNQXpKaEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBeUp3QyxxQkF6SnhDLG1GQXlKZ0QsU0F6SmhEO0FBeUoyRCxzQkF6SjNELG1GQXlKb0UsRUF6SnBFO0FBQUEsdUJBMEpHLFNBQUssV0FBTCxFQTFKSDtBQUFBO0FBQUEsdUJBMkprQixTQUFLLG1CQUFMLENBQTBCLFNBQUssTUFBTCxDQUFhO0FBQ3hELDhCQUFVLE1BRDhDO0FBRXhELDZCQUFTLEtBRitDO0FBR3hELDRCQUFRLElBSGdEO0FBSXhELDRCQUFRLFNBQUssUUFBTCxDQUFlLE1BQWY7QUFKZ0QsaUJBQWIsRUFLNUMsTUFMNEMsQ0FBMUIsQ0EzSmxCO0FBQUE7QUEySkMsd0JBM0pEOztBQWlLSCx1QkFBTztBQUNILDRCQUFRLFFBREw7QUFFSCwwQkFBTSxTQUFTLElBQVQ7QUFGSCxpQkFBUDtBQWpLRztBQUFBO0FBdUtELG1CQXZLQyx1QkF1S1ksRUF2S1o7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUF1S2dCLHNCQXZLaEIsbUZBdUt5QixFQXZLekI7QUFBQSx1QkF3S0csU0FBSyxXQUFMLEVBeEtIO0FBQUE7QUF5S0gsdUJBQU8sU0FBSyxvQ0FBTCxDQUEyQyxTQUFLLE1BQUwsQ0FBYTtBQUMzRCwwQkFBTTtBQURxRCxpQkFBYixFQUUvQyxNQUYrQyxDQUEzQyxDQUFQO0FBektHO0FBQUE7QUE4S0QsZUE5S0MsbUJBOEtRLElBOUtSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUE4S2MsbUJBOUtkLG1GQThLb0IsUUE5S3BCO0FBOEs4QixzQkE5SzlCLG1GQThLdUMsS0E5S3ZDO0FBOEs4QyxzQkE5SzlDLG1GQThLdUQsRUE5S3ZEO0FBOEsyRCx1QkE5SzNELG1GQThLcUUsU0E5S3JFO0FBOEtnRixvQkE5S2hGLG1GQThLdUYsU0E5S3ZGO0FBK0tDLG1CQS9LRCxHQStLTyxTQUFLLElBQUwsQ0FBVSxLQUFWLElBQW1CLEdBQW5CLEdBQXlCLFNBQUssT0FBOUIsR0FBd0MsR0FBeEMsR0FBOEMsSUEvS3JEOztBQWdMSCxvQkFBSSxPQUFPLFFBQVgsRUFBcUI7QUFDakIsd0JBQUksT0FBTyxJQUFQLENBQWEsTUFBYixFQUFxQixNQUF6QjtBQUNJLCtCQUFPLE1BQU0sU0FBSyxTQUFMLENBQWdCLE1BQWhCLENBQWI7QUFESjtBQUVILGlCQUhELE1BR087QUFDQyx5QkFERCxHQUNTLFNBQUssS0FBTCxHQUFjLFFBQWQsRUFEVDtBQUVDLHlCQUZELEdBRVMsU0FBSyxNQUFMLENBQWE7QUFDckIsK0JBQU8sU0FBSyxNQURTO0FBRXJCLGlDQUFTO0FBRlkscUJBQWIsRUFHVCxNQUhTLENBRlQ7QUFNQywyQkFORCxHQU1XLFNBQUssU0FBTCxDQUFnQixLQUFoQixDQU5YO0FBT0MsMEJBUEQsR0FPVSxTQUFLLElBQUwsQ0FBVyxTQUFLLE1BQUwsQ0FBYSxTQUFLLE1BQWxCLENBQVgsQ0FQVjs7QUFRSCwwQkFBTSxXQUFOLElBQXFCLFNBQUssSUFBTCxDQUFXLFNBQUssTUFBTCxDQUFhLE9BQWIsQ0FBWCxFQUFrQyxTQUFLLE1BQUwsQ0FBYSxNQUFiLENBQWxDLENBQXJCO0FBQ0EsMkJBQU8sU0FBSyxTQUFMLENBQWdCLEtBQWhCLENBQVA7QUFDQSw4QkFBVTtBQUNOLHdDQUFnQixtQ0FEVjtBQUVOLDBDQUFrQixLQUFLO0FBRmpCLHFCQUFWO0FBSUg7QUFqTUUsdUJBa01rQixTQUFLLEtBQUwsQ0FBWSxHQUFaLEVBQWlCLE1BQWpCLEVBQXlCLE9BQXpCLEVBQWtDLElBQWxDLENBbE1sQjtBQUFBO0FBa01DLHdCQWxNRDs7QUFtTUgsb0JBQUksWUFBWSxRQUFoQjtBQUNJLHdCQUFJLENBQUMsU0FBUyxRQUFULENBQUw7QUFDSSw4QkFBTSxJQUFJLGFBQUosQ0FBbUIsU0FBSyxFQUFMLEdBQVUsR0FBVixHQUFnQixTQUFLLElBQUwsQ0FBVyxRQUFYLENBQW5DLENBQU47QUFESjtBQURKLGlCQUdBLE9BQU8sUUFBUDtBQXRNRztBQUFBO0FBQUEsS0FBWDs7QUEwTUE7QUFDQTs7QUFFQSxRQUFJLFNBQVM7O0FBRVQsY0FBTSxRQUZHO0FBR1QsZ0JBQVEsUUFIQztBQUlULHFCQUFhLElBSko7QUFLVCxtQkFBVyxHQUxGO0FBTVQscUJBQWEsSUFOSjtBQU9ULDJCQUFtQixJQVBWO0FBUVQsZ0JBQVE7QUFDSixvQkFBUSxxR0FESjtBQUVKLG1CQUFPLHdCQUZIO0FBR0osbUJBQU8sd0JBSEg7QUFJSixtQkFBTyxDQUNILHVDQURHLEVBRUgsaURBRkc7QUFKSCxTQVJDO0FBaUJULGVBQU87QUFDSCxzQkFBVTtBQUNOLHVCQUFPLENBQ0gsUUFERyxFQUVILFlBRkcsRUFHSCxPQUhHLEVBSUgsTUFKRyxFQUtILFFBTEcsRUFNSCxRQU5HLEVBT0gsTUFQRyxFQVFILFFBUkc7QUFERCxhQURQO0FBYUgsdUJBQVc7QUFDUCx3QkFBUSxDQUNKLFVBREksRUFFSixTQUZJLEVBR0osYUFISSxFQUlKLGNBSkksRUFLSixrQkFMSSxFQU1KLGdCQU5JLEVBT0osZUFQSSxFQVFKLFNBUkksRUFTSixZQVRJLEVBVUosZUFWSSxFQVdKLGNBWEksRUFZSixhQVpJLEVBYUosYUFiSSxFQWNKLGNBZEksRUFlSixlQWZJLEVBZ0JKLGFBaEJJLEVBaUJKLFVBakJJLEVBa0JKLGdCQWxCSSxFQW1CSixjQW5CSSxFQW9CSixnQkFwQkk7QUFERDtBQWJSLFNBakJFOztBQXdESCxvQkF4REc7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBeURlLFNBQUssbUJBQUwsRUF6RGY7QUFBQTtBQXlERCx1QkF6REM7QUEwREQsb0JBMURDLEdBMERNLE9BQU8sSUFBUCxDQUFhLFFBQVEsUUFBUixDQUFiLENBMUROO0FBMkRELHNCQTNEQyxHQTJEUSxFQTNEUjs7QUE0REwscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxLQUFLLE1BQXpCLEVBQWlDLEdBQWpDLEVBQXNDO0FBQzlCLHNCQUQ4QixHQUN6QixLQUFLLENBQUwsQ0FEeUI7QUFFOUIsMEJBRjhCLEdBRXJCLFFBQVEsUUFBUixFQUFrQixFQUFsQixDQUZxQjtBQUc5Qix3QkFIOEIsR0FHdkIsT0FBTyxNQUFQLENBSHVCO0FBSTlCLHlCQUo4QixHQUl0QixPQUFPLE9BQVAsQ0FKc0I7O0FBS2xDLHdCQUFLLEtBQUssQ0FBTCxLQUFXLEdBQVosSUFBcUIsS0FBSyxDQUFMLEtBQVcsR0FBcEM7QUFDSSwrQkFBTyxLQUFLLEtBQUwsQ0FBWSxDQUFaLENBQVA7QUFESixxQkFFQSxJQUFLLE1BQU0sQ0FBTixLQUFZLEdBQWIsSUFBc0IsTUFBTSxDQUFOLEtBQVksR0FBdEM7QUFDSSxnQ0FBUSxNQUFNLEtBQU4sQ0FBYSxDQUFiLENBQVI7QUFESixxQkFFQSxPQUFPLFNBQUssa0JBQUwsQ0FBeUIsSUFBekIsQ0FBUDtBQUNBLDRCQUFRLFNBQUssa0JBQUwsQ0FBeUIsS0FBekIsQ0FBUjtBQUNJLDRCQVg4QixHQVduQixHQUFHLE9BQUgsQ0FBWSxJQUFaLEtBQXFCLENBWEY7QUFZOUIsMEJBWjhCLEdBWXJCLFdBQVcsT0FBTyxTQUFQLENBQVgsR0FBZ0MsT0FBTyxHQUFQLEdBQWEsS0FaeEI7O0FBYWxDLDJCQUFPLElBQVAsQ0FBYTtBQUNULDhCQUFNLEVBREc7QUFFVCxrQ0FBVSxNQUZEO0FBR1QsZ0NBQVEsSUFIQztBQUlULGlDQUFTLEtBSkE7QUFLVCxvQ0FBWSxRQUxIO0FBTVQsZ0NBQVE7QUFOQyxxQkFBYjtBQVFIO0FBQ0QsdUJBQU8sTUFBUDtBQWxGSztBQUFBO0FBcUZILHNCQXJGRywwQkFxRmEsTUFyRmI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFxRnFCLHNCQXJGckIsbUZBcUY4QixFQXJGOUI7QUFBQSx1QkFzRkMsU0FBSyxXQUFMLEVBdEZEO0FBQUE7QUF1RkQsd0JBdkZDLEdBdUZVLE9BQU8sT0FBUCxDQUFnQixJQUFoQixLQUF5QixDQXZGbkM7O0FBd0ZMLG9CQUFJLFFBQUo7QUFDSSwwQkFBTSxJQUFJLGFBQUosQ0FBbUIsU0FBSyxFQUFMLEdBQVUsc0RBQVYsR0FBbUUsTUFBdEYsQ0FBTjtBQURKLGlCQUVJLENBMUZDLEdBMEZHLFNBQUssTUFBTCxDQUFhLE1BQWIsQ0ExRkg7QUFBQSx1QkEyRmdCLFNBQUssY0FBTCxDQUFxQixTQUFLLE1BQUwsQ0FBYTtBQUNuRCw0QkFBUSxFQUFFLElBQUY7QUFEMkMsaUJBQWIsRUFFdkMsTUFGdUMsQ0FBckIsQ0EzRmhCO0FBQUE7QUEyRkQsd0JBM0ZDO0FBOEZELHlCQTlGQyxHQThGVyxTQUFTLFFBQVQsRUFBbUIsRUFBRSxJQUFGLENBQW5CLENBOUZYO0FBK0ZELHlCQS9GQyxHQStGVyxTQUFLLFlBQUwsRUEvRlg7QUFnR0Qsc0JBaEdDLEdBZ0dRO0FBQ1QsNEJBQVEsRUFEQztBQUVULDRCQUFRLEVBRkM7QUFHVCxpQ0FBYSxTQUhKO0FBSVQsZ0NBQVksU0FBSyxPQUFMLENBQWMsU0FBZDtBQUpILGlCQWhHUjtBQXNHRCxxQkF0R0MsR0FzR08sQ0FBRSxNQUFGLEVBQVUsTUFBVixDQXRHUDs7QUF1R0wscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxNQUFNLE1BQTFCLEVBQWtDLEdBQWxDLEVBQXVDO0FBQy9CLHdCQUQrQixHQUN4QixNQUFNLENBQU4sQ0FEd0I7QUFFL0IsMEJBRitCLEdBRXRCLFVBQVUsSUFBVixDQUZzQjs7QUFHbkMseUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxPQUFPLE1BQTNCLEVBQW1DLEdBQW5DLEVBQXdDO0FBQ2hDLDZCQURnQyxHQUN4QixPQUFPLENBQVAsQ0FEd0I7QUFFaEMsNkJBRmdDLEdBRXhCLFdBQVksTUFBTSxDQUFOLENBQVosQ0FGd0I7QUFHaEMsOEJBSGdDLEdBR3ZCLFdBQVksTUFBTSxDQUFOLENBQVosQ0FIdUI7QUFJaEMsbUNBSmdDLEdBSXBCLE1BQU0sQ0FBTixJQUFXLElBSlM7O0FBS3BDLCtCQUFPLElBQVAsRUFBYSxJQUFiLENBQW1CLENBQUUsS0FBRixFQUFTLE1BQVQsRUFBaUIsV0FBakIsQ0FBbkI7QUFDSDtBQUNKO0FBQ0QsdUJBQU8sTUFBUDtBQWxISztBQUFBO0FBcUhULG1CQXJIUyx1QkFxSEksTUFySEosRUFxSFksTUFySFosRUFxSG9CO0FBQ3pCLGdCQUFJLFlBQVksS0FBSyxZQUFMLEVBQWhCO0FBQ0EsbUJBQU87QUFDSCw2QkFBYSxTQURWO0FBRUgsNEJBQVksS0FBSyxPQUFMLENBQWMsU0FBZCxDQUZUO0FBR0gsd0JBQVEsV0FBWSxPQUFPLEdBQVAsRUFBWSxDQUFaLENBQVosQ0FITDtBQUlILHVCQUFPLFdBQVksT0FBTyxHQUFQLEVBQVksQ0FBWixDQUFaLENBSko7QUFLSCx1QkFBTyxXQUFZLE9BQU8sR0FBUCxFQUFZLENBQVosQ0FBWixDQUxKO0FBTUgsdUJBQU8sV0FBWSxPQUFPLEdBQVAsRUFBWSxDQUFaLENBQVosQ0FOSjtBQU9ILHdCQUFRLFdBQVksT0FBTyxHQUFQLEVBQVksQ0FBWixDQUFaLENBUEw7QUFRSCx3QkFBUSxXQUFZLE9BQU8sR0FBUCxDQUFaLENBUkw7QUFTSCx5QkFBUyxTQVROO0FBVUgseUJBQVMsU0FWTjtBQVdILHdCQUFRLFdBQVksT0FBTyxHQUFQLEVBQVksQ0FBWixDQUFaLENBWEw7QUFZSCwwQkFBVSxTQVpQO0FBYUgsOEJBQWMsU0FiWDtBQWNILDJCQUFXLFNBZFI7QUFlSCw4QkFBYyxTQWZYO0FBZ0JILCtCQUFlLFdBQVksT0FBTyxHQUFQLEVBQVksQ0FBWixDQUFaLENBaEJaO0FBaUJILHdCQUFRO0FBakJMLGFBQVA7QUFtQkgsU0ExSVE7QUE0SUgsb0JBNUlHO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBNklDLFNBQUssV0FBTCxFQTdJRDtBQUFBO0FBOElELHFCQTlJQyxHQThJTyxFQTlJUDs7QUErSUwscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxTQUFLLE9BQUwsQ0FBYSxNQUFqQyxFQUF5QyxHQUF6QyxFQUE4QztBQUN0QywwQkFEc0MsR0FDN0IsU0FBSyxPQUFMLENBQWEsQ0FBYixDQUQ2QjtBQUV0QywwQkFGc0MsR0FFN0IsU0FBSyxPQUFMLENBQWEsTUFBYixDQUY2Qjs7QUFHMUMsd0JBQUksQ0FBQyxPQUFPLFVBQVAsQ0FBTDtBQUNJLDhCQUFNLElBQU4sQ0FBWSxPQUFPLElBQVAsQ0FBWjtBQURKO0FBRUg7QUFDRyxzQkFySkMsR0FxSlEsTUFBTSxJQUFOLENBQVksR0FBWixDQXJKUjtBQUFBLHVCQXNKZ0IsU0FBSyxlQUFMLENBQXNCO0FBQ3ZDLDRCQUFRO0FBRCtCLGlCQUF0QixDQXRKaEI7QUFBQTtBQXNKRCx3QkF0SkM7QUF5SkQsdUJBekpDLEdBeUpTLFNBQVMsUUFBVCxDQXpKVDtBQTBKRCxtQkExSkMsR0EwSkssT0FBTyxJQUFQLENBQWEsT0FBYixDQTFKTDtBQTJKRCxzQkEzSkMsR0EySlEsRUEzSlI7O0FBNEpMLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksSUFBSSxNQUF4QixFQUFnQyxHQUFoQyxFQUFxQztBQUM3QixzQkFENkIsR0FDeEIsSUFBSSxDQUFKLENBRHdCO0FBRTdCLDJCQUY2QixHQUVwQixTQUFLLGFBQUwsQ0FBbUIsRUFBbkIsQ0FGb0I7QUFHN0IsNEJBSDZCLEdBR3BCLFFBQU8sUUFBUCxDQUhvQjtBQUk3QiwwQkFKNkIsR0FJcEIsUUFBUSxFQUFSLENBSm9COztBQUtqQywyQkFBTyxRQUFQLElBQWlCLFNBQUssV0FBTCxDQUFrQixNQUFsQixFQUEwQixPQUExQixDQUFqQjtBQUNIO0FBQ0QsdUJBQU8sTUFBUDtBQW5LSztBQUFBO0FBc0tILG1CQXRLRyx1QkFzS1UsTUF0S1Y7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBdUtDLFNBQUssV0FBTCxFQXZLRDtBQUFBO0FBd0tELHdCQXhLQyxHQXdLVSxPQUFPLE9BQVAsQ0FBZ0IsSUFBaEIsS0FBeUIsQ0F4S25DOztBQXlLTCxvQkFBSSxRQUFKO0FBQ0ksMEJBQU0sSUFBSSxhQUFKLENBQW1CLFNBQUssRUFBTCxHQUFVLGlEQUFWLEdBQThELE1BQWpGLENBQU47QUFESixpQkFFSSxDQTNLQyxHQTJLRyxTQUFLLE1BQUwsQ0FBYSxNQUFiLENBM0tIO0FBQUEsdUJBNEtnQixTQUFLLGVBQUwsQ0FBc0I7QUFDdkMsNEJBQVEsRUFBRSxJQUFGO0FBRCtCLGlCQUF0QixDQTVLaEI7QUFBQTtBQTRLRCx3QkE1S0M7QUErS0Qsc0JBL0tDLEdBK0tRLFNBQVMsUUFBVCxFQUFtQixFQUFFLElBQUYsQ0FBbkIsQ0EvS1I7O0FBZ0xMLHVCQUFPLFNBQUssV0FBTCxDQUFrQixNQUFsQixFQUEwQixDQUExQixDQUFQO0FBaExLO0FBQUE7QUFtTFQsa0JBbkxTLHNCQW1MRyxLQW5MSCxFQW1MVSxNQW5MVixFQW1Ma0I7QUFDdkIsZ0JBQUksWUFBWSxTQUFVLE1BQU0sQ0FBTixJQUFXLElBQXJCLENBQWhCO0FBQ0EsZ0JBQUksT0FBUSxNQUFNLENBQU4sS0FBWSxHQUFiLEdBQW9CLE1BQXBCLEdBQTZCLEtBQXhDO0FBQ0EsZ0JBQUksT0FBUSxNQUFNLENBQU4sS0FBWSxHQUFiLEdBQW9CLE9BQXBCLEdBQThCLFFBQXpDO0FBQ0EsbUJBQU87QUFDSCx3QkFBUSxLQURMO0FBRUgsNkJBQWEsU0FGVjtBQUdILDRCQUFZLEtBQUssT0FBTCxDQUFjLFNBQWQsQ0FIVDtBQUlILDBCQUFVLE9BQU8sUUFBUCxDQUpQO0FBS0gsd0JBQVEsSUFMTDtBQU1ILHdCQUFRLElBTkw7QUFPSCx5QkFBUyxXQUFZLE1BQU0sQ0FBTixDQUFaLENBUE47QUFRSCwwQkFBVSxXQUFZLE1BQU0sQ0FBTixDQUFaO0FBUlAsYUFBUDtBQVVILFNBak1RO0FBbU1ULGtCQW5NUyxzQkFtTUcsS0FuTUgsRUFtTW9GO0FBQUEsZ0JBQTFFLE1BQTBFLHVFQUFqRSxTQUFpRTtBQUFBLGdCQUF0RCxTQUFzRCx1RUFBMUMsRUFBMEM7QUFBQSxnQkFBdEMsS0FBc0MsdUVBQTlCLFNBQThCO0FBQUEsZ0JBQW5CLEtBQW1CLHVFQUFYLFNBQVc7O0FBQ3pGLG1CQUFPLENBQ0gsTUFBTSxDQUFOLENBREcsRUFFSCxNQUFNLENBQU4sQ0FGRyxFQUdILE1BQU0sQ0FBTixDQUhHLEVBSUgsTUFBTSxDQUFOLENBSkcsRUFLSCxNQUFNLENBQU4sQ0FMRyxFQU1ILE1BQU0sQ0FBTixDQU5HLENBQVA7QUFRSCxTQTVNUTtBQThNSCxrQkE5TUcsc0JBOE1TLE1BOU1UO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQThNaUIseUJBOU1qQixtRkE4TTZCLEVBOU03QjtBQThNaUMscUJBOU1qQyxtRkE4TXlDLFNBOU16QztBQThNb0QscUJBOU1wRCxtRkE4TTRELFNBOU01RDtBQStNRCxpQkEvTUMsR0ErTUcsU0FBSyxNQUFMLENBQWEsTUFBYixDQS9NSDtBQUFBLHVCQWdOZ0IsU0FBSyxhQUFMLENBQW9CO0FBQ3JDLDRCQUFRLEVBQUUsSUFBRixDQUQ2QjtBQUVyQyxnQ0FBWSxTQUFVLFlBQVksRUFBdEIsQ0FGeUI7QUFHckMsNkJBQVM7QUFINEIsaUJBQXBCLENBaE5oQjtBQUFBO0FBZ05ELHdCQWhOQztBQXFORCxzQkFyTkMsR0FxTlEsU0FBUyxFQUFFLElBQUYsQ0FBVCxDQXJOUjs7QUFzTkwsdUJBQU8sU0FBSyxXQUFMLENBQWtCLENBQWxCLEVBQXFCLE1BQXJCLEVBQTZCLFNBQTdCLEVBQXdDLEtBQXhDLEVBQStDLEtBQS9DLENBQVA7QUF0Tks7QUFBQTtBQXlOSCxtQkF6TkcsdUJBeU5VLE1Bek5WO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUF5TmtCLHNCQXpObEIsbUZBeU4yQixFQXpOM0I7QUFBQSx1QkEwTkMsU0FBSyxXQUFMLEVBMU5EO0FBQUE7QUEyTkQsaUJBM05DLEdBMk5HLFNBQUssTUFBTCxDQUFhLE1BQWIsQ0EzTkg7QUE0TkQsa0JBNU5DLEdBNE5JLEVBQUUsSUFBRixDQTVOSjtBQUFBLHVCQTZOZ0IsU0FBSyxlQUFMLENBQXNCLFNBQUssTUFBTCxDQUFhO0FBQ3BELDRCQUFRO0FBRDRDLGlCQUFiLEVBRXhDLE1BRndDLENBQXRCLENBN05oQjtBQUFBO0FBNk5ELHdCQTdOQztBQWdPRCxzQkFoT0MsR0FnT1EsU0FBUyxRQUFULEVBQW1CLEVBQW5CLENBaE9SOztBQWlPTCx1QkFBTyxTQUFLLFdBQUwsQ0FBa0IsTUFBbEIsRUFBMEIsQ0FBMUIsQ0FBUDtBQWpPSztBQUFBO0FBb09ILG9CQXBPRztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBcU9DLFNBQUssV0FBTCxFQXJPRDtBQUFBO0FBQUEsdUJBc09nQixTQUFLLGtCQUFMLEVBdE9oQjtBQUFBO0FBc09ELHdCQXRPQztBQXVPRCx3QkF2T0MsR0F1T1UsU0FBUyxRQUFULENBdk9WO0FBd09ELHNCQXhPQyxHQXdPUSxFQUFFLFFBQVEsUUFBVixFQXhPUjtBQXlPRCwwQkF6T0MsR0F5T1ksT0FBTyxJQUFQLENBQWEsUUFBYixDQXpPWjs7QUEwT0wscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxXQUFXLE1BQS9CLEVBQXVDLEdBQXZDLEVBQTRDO0FBQ3BDLDRCQURvQyxHQUN6QixXQUFXLENBQVgsQ0FEeUI7QUFFcEMsd0JBRm9DLEdBRTdCLFFBRjZCO0FBR3hDOztBQUNBLHdCQUFJLEtBQUssQ0FBTCxLQUFXLEdBQWYsRUFBb0I7QUFDaEIsK0JBQU8sS0FBSyxLQUFMLENBQVksQ0FBWixDQUFQO0FBQ0gscUJBRkQ7QUFFTyw0QkFBSSxLQUFLLENBQUwsS0FBVyxHQUFmLEVBQW9CO0FBQ3ZCLG1DQUFPLEtBQUssS0FBTCxDQUFZLENBQVosQ0FBUDtBQUNIO0FBSkQscUJBS0EsT0FBTyxTQUFLLGtCQUFMLENBQXlCLElBQXpCLENBQVA7QUFDSSwyQkFWb0MsR0FVMUIsV0FBWSxTQUFTLFFBQVQsQ0FBWixDQVYwQjtBQVdwQywyQkFYb0MsR0FXMUI7QUFDVixnQ0FBUSxPQURFO0FBRVYsZ0NBQVEsU0FGRTtBQUdWLGlDQUFTO0FBSEMscUJBWDBCOztBQWdCeEMsMkJBQU8sSUFBUCxJQUFlLE9BQWY7QUFDSDtBQUNELHVCQUFPLE1BQVA7QUE1UEs7QUFBQTtBQStQSCxtQkEvUEcsdUJBK1BVLE1BL1BWLEVBK1BrQixJQS9QbEIsRUErUHdCLElBL1B4QixFQStQOEIsTUEvUDlCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQStQc0MscUJBL1B0QyxtRkErUDhDLFNBL1A5QztBQStQeUQsc0JBL1B6RCxtRkErUGtFLEVBL1BsRTtBQUFBLHVCQWdRQyxTQUFLLFdBQUwsRUFoUUQ7QUFBQTtBQWlRRCxxQkFqUUMsR0FpUU87QUFDUiw0QkFBUSxTQUFLLFFBQUwsQ0FBZSxNQUFmLENBREE7QUFFUiw0QkFBUSxJQUZBO0FBR1IsaUNBQWEsSUFITDtBQUlSLDhCQUFVO0FBSkYsaUJBalFQOztBQXVRTCxvQkFBSSxRQUFRLE9BQVo7QUFDSSwwQkFBTSxPQUFOLElBQWlCLEtBQWpCO0FBREosaUJBdlFLLE9BeVFnQixTQUFLLG1CQUFMLENBQTBCLFNBQUssTUFBTCxDQUFhLEtBQWIsRUFBb0IsTUFBcEIsQ0FBMUIsQ0F6UWhCO0FBQUE7QUF5UUQsd0JBelFDO0FBMFFELHNCQTFRQyxHQTBRUSxTQUFTLFFBQVQsRUFBbUIsTUFBbkIsRUFBMkIsTUExUW5DO0FBMlFELGtCQTNRQyxHQTJRSyxTQUFTLENBQVYsR0FBZSxTQUFTLFFBQVQsRUFBbUIsTUFBbkIsQ0FBZixHQUE0QyxTQUFTLFFBQVQsRUFBbUIsTUFBbkIsRUFBMkIsQ0FBM0IsQ0EzUWhEOztBQTRRTCx1QkFBTztBQUNILDRCQUFRLFFBREw7QUFFSCwwQkFBTTtBQUZILGlCQUFQO0FBNVFLO0FBQUE7QUFrUkgsbUJBbFJHLHVCQWtSVSxFQWxSVjtBQUFBOztBQUFBO0FBQUEsdUJBbVJDLFNBQUssV0FBTCxFQW5SRDtBQUFBO0FBb1JMLHVCQUFPLFNBQUssc0JBQUwsQ0FBNkIsRUFBRSxRQUFRLEVBQVYsRUFBN0IsQ0FBUDtBQXBSSztBQUFBO0FBdVJILGVBdlJHLG1CQXVSTSxJQXZSTjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUF1UlksbUJBdlJaLG1GQXVSa0IsUUF2UmxCO0FBdVI0QixzQkF2UjVCLG1GQXVScUMsS0F2UnJDO0FBdVI0QyxzQkF2UjVDLG1GQXVScUQsRUF2UnJEO0FBdVJ5RCx1QkF2UnpELG1GQXVSbUUsU0F2Um5FO0FBdVI4RSxvQkF2UjlFLG1GQXVScUYsU0F2UnJGO0FBd1JELG1CQXhSQyxHQXdSSyxNQUFNLFNBQUssT0FBWCxHQUFxQixHQUFyQixHQUEyQixHQUEzQixHQUFpQyxHQUFqQyxHQUF1QyxJQXhSNUM7O0FBeVJMLG9CQUFJLE9BQU8sUUFBWCxFQUFxQjtBQUNqQix3QkFBSSxPQUFPLElBQVAsQ0FBYSxNQUFiLEVBQXFCLE1BQXpCO0FBQ0ksK0JBQU8sTUFBTSxTQUFLLFNBQUwsQ0FBZ0IsTUFBaEIsQ0FBYjtBQURKO0FBRUgsaUJBSEQsTUFHTztBQUNDLHlCQURELEdBQ1MsU0FBSyxLQUFMLEdBQWMsUUFBZCxFQURUOztBQUVILDJCQUFPLFNBQUssU0FBTCxDQUFnQixTQUFLLE1BQUwsQ0FBYSxFQUFFLFNBQVMsS0FBWCxFQUFiLEVBQWlDLE1BQWpDLENBQWhCLENBQVA7QUFDSSx3QkFIRCxHQUdRLFNBQUssTUFBTCxDQUFhLFFBQVEsSUFBckIsQ0FIUjtBQUlDLDBCQUpELEdBSVEsU0FBSyxJQUFMLENBQVcsSUFBWCxFQUFpQixRQUFqQixFQUEyQixRQUEzQixDQUpSO0FBS0MsMEJBTEQsR0FLVSxTQUFLLGNBQUwsQ0FBcUIsU0FBSyxNQUFMLENBQWEsR0FBYixDQUFyQixDQUxWO0FBTUMsMkJBTkQsR0FNVyxTQUFLLFlBQUwsQ0FBbUIsTUFBbkIsRUFBMkIsTUFBM0IsQ0FOWDtBQU9DLDBCQVBELEdBT1UsU0FBSyxjQUFMLENBQXFCLFNBQUssTUFBMUIsQ0FQVjtBQVFDLDZCQVJELEdBUWEsU0FBSyxJQUFMLENBQVcsT0FBWCxFQUFvQixNQUFwQixFQUE0QixRQUE1QixFQUFzQyxRQUF0QyxDQVJiOztBQVNILDhCQUFVO0FBQ04sbUNBQVcsU0FBSyxNQURWO0FBRU4sb0NBQVksU0FBSyxNQUFMLENBQWEsU0FBYixDQUZOO0FBR04sd0NBQWdCO0FBSFYscUJBQVY7QUFLSDtBQUNELHNCQUFNLFNBQUssSUFBTCxDQUFVLEtBQVYsSUFBbUIsR0FBekI7QUEzU0ssdUJBNFNnQixTQUFLLEtBQUwsQ0FBWSxHQUFaLEVBQWlCLE1BQWpCLEVBQXlCLE9BQXpCLEVBQWtDLElBQWxDLENBNVNoQjtBQUFBO0FBNFNELHdCQTVTQzs7QUE2U0wsb0JBQUksV0FBVyxRQUFmLEVBQXlCO0FBQ2pCLDZCQURpQixHQUNMLFNBQVMsT0FBVCxFQUFrQixNQURiOztBQUVyQix3QkFBSSxTQUFKO0FBQ0ksOEJBQU0sSUFBSSxhQUFKLENBQW1CLFNBQUssRUFBTCxHQUFVLEdBQVYsR0FBZ0IsU0FBSyxJQUFMLENBQVcsUUFBWCxDQUFuQyxDQUFOO0FBREo7QUFFSDtBQUNELHVCQUFPLFFBQVA7QUFsVEs7QUFBQTtBQUFBLEtBQWI7O0FBc1RBOztBQUVBLFFBQUksVUFBVTs7QUFFVixjQUFNLFNBRkk7QUFHVixnQkFBUSxTQUhFO0FBSVYscUJBQWEsSUFKSDtBQUtWLG1CQUFXLFFBTEQ7QUFNVixnQkFBUTtBQUNKLG9CQUFRLHFHQURKO0FBRUosbUJBQU8seUJBRkg7QUFHSixtQkFBTyx5QkFISDtBQUlKLG1CQUFPLENBQ0gsK0JBREcsRUFFSCxrQ0FGRztBQUpILFNBTkU7QUFlVixlQUFPO0FBQ0gsc0JBQVU7QUFDTix1QkFBTyxDQUNILGFBREcsRUFFSCxVQUZHLEVBR0gsUUFIRztBQURELGFBRFA7QUFRSCx1QkFBVztBQUNQLHdCQUFRLENBQ0osVUFESSxFQUVKLGNBRkksRUFHSixnQkFISSxFQUlKLHFCQUpJLEVBS0osV0FMSSxFQU1KLFdBTkksRUFPSixZQVBJLEVBUUosV0FSSTtBQUREO0FBUlIsU0FmRzs7QUFxQ0osb0JBckNJO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkFzQ2MsU0FBSyxlQUFMLEVBdENkO0FBQUE7QUFzQ0YsdUJBdENFO0FBdUNGLHNCQXZDRSxHQXVDTyxFQXZDUDtBQXdDRixvQkF4Q0UsR0F3Q0ssT0FBTyxJQUFQLENBQWEsT0FBYixDQXhDTDs7QUF5Q04scUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxLQUFLLE1BQXpCLEVBQWlDLEdBQWpDLEVBQXNDO0FBQzlCLHNCQUQ4QixHQUN6QixLQUFLLENBQUwsQ0FEeUI7QUFFOUIsMEJBRjhCLEdBRXJCLFFBQVEsRUFBUixDQUZxQjtBQUc5Qix3QkFIOEIsR0FHdkIsR0FBRyxLQUFILENBQVUsQ0FBVixFQUFhLENBQWIsQ0FIdUI7QUFJOUIseUJBSjhCLEdBSXRCLEdBQUcsS0FBSCxDQUFVLENBQVYsRUFBYSxDQUFiLENBSnNCOztBQUtsQywyQkFBTyxLQUFLLFdBQUwsRUFBUDtBQUNBLDRCQUFRLE1BQU0sV0FBTixFQUFSO0FBQ0ksMEJBUDhCLEdBT3JCLE9BQU8sR0FBUCxHQUFhLEtBUFE7O0FBUWxDLDJCQUFPLElBQVAsQ0FBYTtBQUNULDhCQUFNLEVBREc7QUFFVCxrQ0FBVSxNQUZEO0FBR1QsZ0NBQVEsSUFIQztBQUlULGlDQUFTLEtBSkE7QUFLVCxnQ0FBUTtBQUxDLHFCQUFiO0FBT0g7QUFDRCx1QkFBTyxNQUFQO0FBekRNO0FBQUE7QUE0REosb0JBNURJO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBNkRBLFNBQUssV0FBTCxFQTdEQTtBQUFBO0FBQUEsdUJBOERlLFNBQUsseUJBQUwsRUE5RGY7QUFBQTtBQThERix3QkE5REU7QUErREYsd0JBL0RFLEdBK0RTLFNBQVMsU0FBVCxDQS9EVDtBQWdFRixzQkFoRUUsR0FnRU8sRUFBRSxRQUFRLFFBQVYsRUFoRVA7QUFpRUYsMEJBakVFLEdBaUVXLE9BQU8sSUFBUCxDQUFhLFFBQWIsQ0FqRVg7O0FBa0VOLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksV0FBVyxNQUEvQixFQUF1QyxHQUF2QyxFQUE0QztBQUNwQyw0QkFEb0MsR0FDekIsV0FBVyxDQUFYLENBRHlCO0FBRXBDLDJCQUZvQyxHQUUxQixXQUFZLFNBQVMsUUFBVCxDQUFaLENBRjBCO0FBR3BDLDJCQUhvQyxHQUcxQjtBQUNWLGdDQUFRLE9BREU7QUFFVixnQ0FBUSxTQUZFO0FBR1YsaUNBQVM7QUFIQyxxQkFIMEI7O0FBUXhDLDJCQUFPLFFBQVAsSUFBbUIsT0FBbkI7QUFDSDtBQUNELHVCQUFPLE1BQVA7QUE1RU07QUFBQTtBQStFSixzQkEvRUksMEJBK0VZLE1BL0VaO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQStFb0Isc0JBL0VwQixtRkErRTZCLEVBL0U3QjtBQUFBLHVCQWdGQSxTQUFLLFdBQUwsRUFoRkE7QUFBQTtBQUFBLHVCQWlGZ0IsU0FBSyxvQkFBTCxDQUEyQixTQUFLLE1BQUwsQ0FBYTtBQUMxRCw4QkFBVSxTQUFLLFFBQUwsQ0FBZSxNQUFmO0FBRGdELGlCQUFiLEVBRTlDLE1BRjhDLENBQTNCLENBakZoQjtBQUFBO0FBaUZGLHlCQWpGRTtBQW9GRix5QkFwRkUsR0FvRlUsU0FBSyxZQUFMLEVBcEZWO0FBcUZGLHNCQXJGRSxHQXFGTztBQUNULDRCQUFRLEVBREM7QUFFVCw0QkFBUSxFQUZDO0FBR1QsaUNBQWEsU0FISjtBQUlULGdDQUFZLFNBQUssT0FBTCxDQUFjLFNBQWQ7QUFKSCxpQkFyRlA7QUEyRkYscUJBM0ZFLEdBMkZNLENBQUUsTUFBRixFQUFVLE1BQVYsQ0EzRk47O0FBNEZOLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksTUFBTSxNQUExQixFQUFrQyxHQUFsQyxFQUF1QztBQUMvQix3QkFEK0IsR0FDeEIsTUFBTSxDQUFOLENBRHdCO0FBRS9CLDBCQUYrQixHQUV0QixVQUFVLElBQVYsQ0FGc0I7O0FBR25DLHlCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksT0FBTyxNQUEzQixFQUFtQyxHQUFuQyxFQUF3QztBQUNoQyw2QkFEZ0MsR0FDeEIsT0FBTyxDQUFQLENBRHdCO0FBRWhDLDZCQUZnQyxHQUV4QixXQUFZLE1BQU0sQ0FBTixDQUFaLENBRndCO0FBR2hDLDhCQUhnQyxHQUd2QixXQUFZLE1BQU0sQ0FBTixDQUFaLENBSHVCOztBQUlwQywrQkFBTyxJQUFQLEVBQWEsSUFBYixDQUFtQixDQUFFLEtBQUYsRUFBUyxNQUFULENBQW5CO0FBQ0g7QUFDSjtBQUNELHVCQUFPLE1BQVA7QUF0R007QUFBQTtBQXlHSixtQkF6R0ksdUJBeUdTLE1BekdUO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQTBHQSxTQUFLLFdBQUwsRUExR0E7QUFBQTtBQTJHRixpQkEzR0UsR0EyR0UsU0FBSyxNQUFMLENBQWEsTUFBYixDQTNHRjtBQUFBLHVCQTRHYyxTQUFLLGVBQUwsQ0FBc0I7QUFDdEMsOEJBQVUsRUFBRSxJQUFGO0FBRDRCLGlCQUF0QixDQTVHZDtBQUFBO0FBNEdGLHVCQTVHRTtBQStHRixzQkEvR0UsR0ErR08sUUFBUSxFQUFFLElBQUYsQ0FBUixDQS9HUDtBQWdIRix5QkFoSEUsR0FnSFUsU0FBSyxZQUFMLEVBaEhWOztBQWlITix1QkFBTztBQUNILGlDQUFhLFNBRFY7QUFFSCxnQ0FBWSxTQUFLLE9BQUwsQ0FBYyxTQUFkLENBRlQ7QUFHSCw0QkFBUSxXQUFZLE9BQU8sTUFBUCxDQUFaLENBSEw7QUFJSCwyQkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBSko7QUFLSCwyQkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBTEo7QUFNSCwyQkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBTko7QUFPSCw0QkFBUSxTQVBMO0FBUUgsNEJBQVEsU0FSTDtBQVNILDZCQUFTLFNBVE47QUFVSCw2QkFBUyxTQVZOO0FBV0gsNEJBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQVhMO0FBWUgsOEJBQVUsU0FaUDtBQWFILGtDQUFjLFNBYlg7QUFjSCwrQkFBVyxTQWRSO0FBZUgsa0NBQWMsU0FmWDtBQWdCSCxtQ0FBZSxXQUFZLE9BQU8sUUFBUCxDQUFaLENBaEJaO0FBaUJILDRCQUFRO0FBakJMLGlCQUFQO0FBakhNO0FBQUE7QUFzSUosbUJBdElJLHVCQXNJUyxNQXRJVDtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQXNJaUIsc0JBdElqQixtRkFzSTBCLEVBdEkxQjtBQUFBLHVCQXVJQSxTQUFLLFdBQUwsRUF2SUE7QUFBQTtBQXdJTix1QkFBTyxTQUFLLGlCQUFMLENBQXdCLFNBQUssTUFBTCxDQUFhO0FBQ3hDLDhCQUFVLFNBQUssUUFBTCxDQUFlLE1BQWY7QUFEOEIsaUJBQWIsRUFFNUIsTUFGNEIsQ0FBeEIsQ0FBUDtBQXhJTTtBQUFBO0FBNklKLG1CQTdJSSx1QkE2SVMsTUE3SVQsRUE2SWlCLElBN0lqQixFQTZJdUIsSUE3SXZCLEVBNkk2QixNQTdJN0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBNklxQyxxQkE3SXJDLG1GQTZJNkMsU0E3STdDO0FBNkl3RCxzQkE3SXhELG1GQTZJaUUsRUE3SWpFO0FBQUEsdUJBOElBLFNBQUssV0FBTCxFQTlJQTtBQUFBO0FBK0lOLG9CQUFJLFFBQVEsUUFBWjtBQUNJLDBCQUFNLElBQUksYUFBSixDQUFtQixTQUFLLEVBQUwsR0FBVSwyQkFBN0IsQ0FBTjtBQURKLGlCQUVJLE1BakpFLEdBaUpPLGdCQUFnQixTQUFLLFVBQUwsQ0FBaUIsSUFBakIsQ0FBaEIsR0FBeUMsT0FqSmhEO0FBa0pGLHdCQWxKRSxHQWtKUyxTQUFLLFFBQUwsQ0FBZSxNQUFmLENBbEpUO0FBbUpGLHFCQW5KRSxHQW1KTTtBQUNSLDhCQUFVLENBQUUsS0FBRixFQUFTLE1BQVQsRUFBaUIsUUFBakI7QUFERixpQkFuSk47QUFBQSx1QkFzSmUsU0FBSyxNQUFMLEVBQWMsU0FBSyxNQUFMLENBQWEsS0FBYixFQUFvQixNQUFwQixDQUFkLENBdEpmO0FBQUE7QUFzSkYsd0JBdEpFOztBQXVKTix1QkFBTztBQUNILDRCQUFRLFFBREw7QUFFSCwwQkFBTSxTQUFTLElBQVQsRUFBZSxRQUFmO0FBRkgsaUJBQVA7QUF2Sk07QUFBQTtBQTZKSixtQkE3SkksdUJBNkpTLEVBN0pUO0FBQUE7O0FBQUE7QUFBQSx1QkE4SkEsU0FBSyxXQUFMLEVBOUpBO0FBQUE7QUErSk4sdUJBQU8sU0FBSyxzQkFBTCxDQUE2QixFQUFFLFVBQVUsRUFBWixFQUE3QixDQUFQO0FBL0pNO0FBQUE7QUFrS0osZUFsS0ksbUJBa0tLLElBbEtMO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQWtLVyxlQWxLWCxtRkFrS2lCLFFBbEtqQjtBQWtLMkIsa0JBbEszQixtRkFrS29DLEtBbEtwQztBQWtLMkMsa0JBbEszQyxtRkFrS29ELEVBbEtwRDtBQWtLd0QsbUJBbEt4RCxtRkFrS2tFLFNBbEtsRTtBQWtLNkUsZ0JBbEs3RSxtRkFrS29GLFNBbEtwRjtBQW1LRixlQW5LRSxHQW1LSSxTQUFLLElBQUwsQ0FBVSxLQUFWLElBQW1CLEdBQW5CLEdBQXlCLFNBQUssT0FuS2xDOztBQW9LTixnQkFBSSxPQUFPLFFBQVgsRUFBcUI7QUFDakIsdUJBQU8sTUFBTSxJQUFiO0FBQ0Esb0JBQUksT0FBTyxJQUFQLENBQWEsTUFBYixFQUFxQixNQUF6QjtBQUNJLDJCQUFPLE1BQU0sU0FBSyxTQUFMLENBQWdCLE1BQWhCLENBQWI7QUFESjtBQUVILGFBSkQsTUFJTztBQUNDLHFCQURELEdBQ1MsU0FBSyxLQUFMLEVBRFQ7O0FBRUgsb0JBQUksT0FBTyxJQUFQLENBQWEsTUFBYixFQUFxQixNQUF6QjtBQUNJLDZCQUFTLE9BQU8sSUFBUCxDQUFhLEdBQWIsQ0FBVDtBQURKO0FBR0ksNkJBQVMsRUFBVDtBQUhKLGlCQUlJLEtBTkQsR0FNUyxTQUFLLFNBQUwsQ0FBZ0I7QUFDeEIsNkJBQVMsS0FEZTtBQUV4QixpQ0FBYSxTQUFLLE1BRk07QUFHeEIscUNBQWlCLE9BQU8sV0FBUCxFQUhPO0FBSXhCLDBCQUFNLEtBSmtCO0FBS3hCLDhCQUFVLElBTGM7QUFNeEIsOEJBQVU7QUFOYyxpQkFBaEIsQ0FOVDs7QUFjSCx1QkFBTyxTQUFLLElBQUwsQ0FBVztBQUNkLDhCQUFVLElBREk7QUFFZCw4QkFBVSxNQUZJO0FBR2QsMEJBQU07QUFIUSxpQkFBWCxDQUFQO0FBS0kseUJBbkJELEdBbUJhLFNBQUssSUFBTCxDQUFXLFNBQUssTUFBTCxDQUFhLEtBQWIsQ0FBWCxFQUFnQyxTQUFLLE1BQXJDLEVBQTZDLE1BQTdDLEVBQXFELFFBQXJELENBbkJiOztBQW9CSCwwQkFBVTtBQUNOLHNDQUFrQixLQURaO0FBRU4scUNBQWlCLFdBQVcsU0FBSyxNQUFoQixHQUF5QixHQUF6QixHQUErQixTQUYxQztBQUdOLHNDQUFrQixLQUFLLE1BSGpCO0FBSU4sb0NBQWdCO0FBSlYsaUJBQVY7QUFNSDtBQUNHLG9CQW5NRSxHQW1NUyxTQUFLLEtBQUwsQ0FBWSxHQUFaLEVBQWlCLE1BQWpCLEVBQXlCLE9BQXpCLEVBQWtDLElBQWxDLENBbk1UOztBQW9NTixnQkFBSSxXQUFXLFFBQWY7QUFDSSxzQkFBTSxJQUFJLGFBQUosQ0FBbUIsU0FBSyxFQUFMLEdBQVUsR0FBVixHQUFnQixTQUFLLElBQUwsQ0FBVyxRQUFYLENBQW5DLENBQU47QUFESixhQUVBLE9BQU8sUUFBUDtBQXRNTTtBQUFBLEtBQWQ7O0FBME1BOztBQUVBLFFBQUksV0FBVzs7QUFFWCxjQUFNLFVBRks7QUFHWCxnQkFBUSxVQUhHO0FBSVgscUJBQWEsQ0FBRSxJQUFGLEVBQVEsSUFBUixFQUFjLElBQWQsQ0FKRjtBQUtYLHFCQUFhLElBTEY7QUFNWCwyQkFBbUIsSUFOUjtBQU9YLGdCQUFRO0FBQ0osb0JBQVEscUdBREo7QUFFSixtQkFBTywwQkFGSDtBQUdKLG1CQUFPLDBCQUhIO0FBSUosbUJBQU87QUFKSCxTQVBHO0FBYVgsZUFBTztBQUNILHNCQUFVO0FBQ04sdUJBQU8sQ0FDSCx5QkFERyxFQUVILHNCQUZHLEVBR0gsd0JBSEcsRUFJSCxxQkFKRyxFQUtILHVCQUxHLEVBTUgsaUJBTkcsRUFNZ0I7QUFDbkIsK0JBUEc7QUFERCxhQURQO0FBWUgsdUJBQVc7QUFDUCx1QkFBTyxDQUNILHdCQURHLEVBRUgsZ0JBRkcsRUFHSCxpQkFIRyxFQUlILHFCQUpHLEVBS0gsK0JBTEcsRUFNSCxrQkFORyxFQU9ILGlCQVBHLEVBUUgscUJBUkcsRUFTSCxzQkFURyxFQVVILDhCQVZHLENBREE7QUFhUCx3QkFBUSxDQUNKLG1CQURJLEVBRUosb0JBRkksRUFHSixzQkFISSxFQUlKLG9CQUpJLEVBS0oscUJBTEksRUFNSix3QkFOSSxFQU9KLGtCQVBJLEVBUUosa0JBUkksRUFTSixtQkFUSSxFQVVKLG9CQVZJLEVBV0osMEJBWEksRUFZSix3QkFaSSxFQWFKLHNCQWJJLEVBY0osd0JBZEk7QUFiRDtBQVpSLFNBYkk7O0FBeURMLG9CQXpESztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkEwRGEsU0FBSyx1QkFBTCxFQTFEYjtBQUFBO0FBMERILHVCQTFERztBQTJESCxzQkEzREcsR0EyRE0sRUEzRE47O0FBNERQLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksUUFBUSxNQUE1QixFQUFvQyxHQUFwQyxFQUF5QztBQUNqQywwQkFEaUMsR0FDeEIsUUFBUSxDQUFSLENBRHdCO0FBRWpDLHNCQUZpQyxHQUU1QixPQUFPLFFBQVAsQ0FGNEI7QUFHakMsMEJBSGlDLEdBR3hCLEVBSHdCO0FBQUEsc0NBSWYsT0FBTyxLQUFQLENBQWMsR0FBZCxDQUplO0FBQUE7QUFJL0Isd0JBSitCO0FBSXpCLHlCQUp5Qjs7QUFLckMsMkJBQU8sSUFBUCxDQUFhO0FBQ1QsOEJBQU0sRUFERztBQUVULGtDQUFVLE1BRkQ7QUFHVCxnQ0FBUSxJQUhDO0FBSVQsaUNBQVMsS0FKQTtBQUtULGdDQUFRO0FBTEMscUJBQWI7QUFPSDtBQUNELHVCQUFPLE1BQVA7QUF6RU87QUFBQTtBQTRFTCxvQkE1RUs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQTZFRCxTQUFLLFdBQUwsRUE3RUM7QUFBQTtBQUFBLHVCQThFYyxTQUFLLHlCQUFMLEVBOUVkO0FBQUE7QUE4RUgsd0JBOUVHO0FBK0VILHNCQS9FRyxHQStFTSxFQUFFLFFBQVEsUUFBVixFQS9FTjs7QUFnRlAscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxTQUFLLFVBQUwsQ0FBZ0IsTUFBcEMsRUFBNEMsR0FBNUMsRUFBaUQ7QUFDekMsMkJBRHlDLEdBQy9CLFNBQVMsQ0FBVCxDQUQrQjtBQUV6Qyw0QkFGeUMsR0FFOUIsUUFBUSxVQUFSLENBRjhCO0FBR3pDLDJCQUh5QyxHQUcvQixTQUgrQjs7QUFJN0Msd0JBQUksWUFBWSxNQUFoQjtBQUNJLGtDQUFVLE9BQU8sUUFBUCxDQUFWO0FBREo7QUFHSSxrQ0FBVTtBQUNOLG9DQUFRLFNBREY7QUFFTixvQ0FBUSxTQUZGO0FBR04scUNBQVM7QUFISCx5QkFBVjtBQUhKLHFCQVFBLElBQUksUUFBUSxNQUFSLEtBQW1CLE9BQXZCO0FBQ0ksZ0NBQVEsT0FBUixJQUFtQixXQUFZLFFBQVEsT0FBUixDQUFaLENBQW5CO0FBREoscUJBRUEsSUFBSSxRQUFRLE1BQVIsS0FBbUIsV0FBdkI7QUFDSSxnQ0FBUSxNQUFSLElBQWtCLFdBQVksUUFBUSxPQUFSLENBQVosQ0FBbEI7QUFESixxQkFFQSxJQUFJLFFBQVEsTUFBUixLQUFtQixPQUF2QjtBQUNJLGdDQUFRLE1BQVIsSUFBa0IsV0FBWSxRQUFRLE9BQVIsQ0FBWixDQUFsQjtBQURKLHFCQUVBLE9BQU8sUUFBUCxJQUFtQixPQUFuQjtBQUNIO0FBQ0QsdUJBQU8sTUFBUDtBQXBHTztBQUFBO0FBdUdMLHNCQXZHSywwQkF1R1csTUF2R1g7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBdUdtQixzQkF2R25CLG1GQXVHNEIsRUF2RzVCO0FBQUEsdUJBd0dELFNBQUssV0FBTCxFQXhHQztBQUFBO0FBQUEsdUJBeUdlLFNBQUssMEJBQUwsQ0FBaUMsU0FBSyxNQUFMLENBQWE7QUFDaEUsb0NBQWdCLFNBQUssUUFBTCxDQUFlLE1BQWYsQ0FEZ0Q7QUFFaEUsb0NBQWdCLE9BRmdEO0FBR2hFLDZCQUFTO0FBSHVELGlCQUFiLEVBSXBELE1BSm9ELENBQWpDLENBekdmO0FBQUE7QUF5R0gseUJBekdHO0FBOEdILHlCQTlHRyxHQThHUyxVQUFVLFdBQVYsQ0E5R1Q7QUErR0gsc0JBL0dHLEdBK0dNO0FBQ1QsNEJBQVEsRUFEQztBQUVULDRCQUFRLEVBRkM7QUFHVCxpQ0FBYSxTQUhKO0FBSVQsZ0NBQVksU0FBSyxPQUFMLENBQWMsU0FBZDtBQUpILGlCQS9HTjtBQXFISCxxQkFySEcsR0FxSEssQ0FBRSxNQUFGLEVBQVUsTUFBVixDQXJITDs7QUFzSFAscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxNQUFNLE1BQTFCLEVBQWtDLEdBQWxDLEVBQXVDO0FBQy9CLHdCQUQrQixHQUN4QixNQUFNLENBQU4sQ0FEd0I7QUFFL0IsMEJBRitCLEdBRXRCLFVBQVUsSUFBVixDQUZzQjs7QUFHbkMseUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxPQUFPLE1BQTNCLEVBQW1DLEdBQW5DLEVBQXdDO0FBQ2hDLDZCQURnQyxHQUN4QixPQUFPLENBQVAsQ0FEd0I7QUFFaEMsNkJBRmdDLEdBRXhCLFdBQVksTUFBTSxDQUFOLENBQVosQ0FGd0I7QUFHaEMsOEJBSGdDLEdBR3ZCLFdBQVksTUFBTSxDQUFOLENBQVosQ0FIdUI7O0FBSXBDLCtCQUFPLElBQVAsRUFBYSxJQUFiLENBQW1CLENBQUUsS0FBRixFQUFTLE1BQVQsQ0FBbkI7QUFDSDtBQUNKO0FBQ0QsdUJBQU8sTUFBUDtBQWhJTztBQUFBO0FBbUlYLG1CQW5JVyx1QkFtSUUsTUFuSUYsRUFtSVUsTUFuSVYsRUFtSWtCO0FBQ3pCLGdCQUFJLFlBQVksS0FBSyxZQUFMLEVBQWhCO0FBQ0EsbUJBQU87QUFDSCw2QkFBYSxTQURWO0FBRUgsNEJBQVksS0FBSyxPQUFMLENBQWMsU0FBZCxDQUZUO0FBR0gsd0JBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQUhMO0FBSUgsdUJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQUpKO0FBS0gsdUJBQU8sV0FBWSxPQUFPLFVBQVAsQ0FBWixDQUxKO0FBTUgsdUJBQU8sV0FBWSxPQUFPLFVBQVAsQ0FBWixDQU5KO0FBT0gsd0JBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQVBMO0FBUUgsd0JBQVEsU0FSTDtBQVNILHlCQUFTLFNBVE47QUFVSCx5QkFBUyxTQVZOO0FBV0gsd0JBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQVhMO0FBWUgsMEJBQVUsU0FaUDtBQWFILDhCQUFjLFNBYlg7QUFjSCwyQkFBVyxTQWRSO0FBZUgsOEJBQWMsU0FmWDtBQWdCSCwrQkFBZSxXQUFZLE9BQU8sUUFBUCxDQUFaLENBaEJaO0FBaUJILHdCQUFRO0FBakJMLGFBQVA7QUFtQkgsU0F4SlU7QUEwSkwsb0JBMUpLO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkEySkQsU0FBSyxXQUFMLEVBM0pDO0FBQUE7QUFBQSx1QkE0SmMsU0FBSyx1QkFBTCxFQTVKZDtBQUFBO0FBNEpILHdCQTVKRztBQTZKSCx1QkE3SkcsR0E2Sk8sU0FBSyxPQUFMLENBQWMsUUFBZCxFQUF3QixRQUF4QixDQTdKUDtBQThKSCxtQkE5SkcsR0E4SkcsT0FBTyxJQUFQLENBQWEsT0FBYixDQTlKSDtBQStKSCxzQkEvSkcsR0ErSk0sRUEvSk47O0FBZ0tQLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksSUFBSSxNQUF4QixFQUFnQyxHQUFoQyxFQUFxQztBQUM3QixzQkFENkIsR0FDeEIsSUFBSSxDQUFKLENBRHdCO0FBRTdCLDBCQUY2QixHQUVwQixTQUFLLGFBQUwsQ0FBbUIsRUFBbkIsQ0FGb0I7QUFHN0IsMEJBSDZCLEdBR3BCLE9BQU8sUUFBUCxDQUhvQjtBQUk3QiwwQkFKNkIsR0FJcEIsUUFBUSxFQUFSLENBSm9COztBQUtqQywyQkFBTyxNQUFQLElBQWlCLFNBQUssV0FBTCxDQUFrQixNQUFsQixFQUEwQixNQUExQixDQUFqQjtBQUNIO0FBQ0QsdUJBQU8sTUFBUDtBQXZLTztBQUFBO0FBMEtMLG1CQTFLSyx1QkEwS1EsTUExS1I7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkEyS0QsU0FBSyxXQUFMLEVBM0tDO0FBQUE7QUE0S0gsaUJBNUtHLEdBNEtDLFNBQUssTUFBTCxDQUFhLE1BQWIsQ0E1S0Q7QUFBQSx1QkE2S1ksU0FBSyx1QkFBTCxDQUE4QjtBQUM3QyxvQ0FBZ0IsRUFBRSxJQUFGO0FBRDZCLGlCQUE5QixDQTdLWjtBQUFBO0FBNktILHNCQTdLRzs7QUFnTFAsdUJBQU8sU0FBSyxXQUFMLENBQWtCLE1BQWxCLEVBQTBCLENBQTFCLENBQVA7QUFoTE87QUFBQTtBQW1MTCxtQkFuTEssdUJBbUxRLE1BbkxSO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBbUxnQixzQkFuTGhCLG1GQW1MeUIsRUFuTHpCO0FBQUEsdUJBb0xELFNBQUssV0FBTCxFQXBMQztBQUFBO0FBcUxQLHVCQUFPLFNBQUssMkJBQUwsQ0FBa0MsU0FBSyxNQUFMLENBQWE7QUFDbEQsb0NBQWdCLFNBQUssUUFBTCxDQUFlLE1BQWY7QUFEa0MsaUJBQWIsRUFFdEMsTUFGc0MsQ0FBbEMsQ0FBUDtBQXJMTztBQUFBO0FBMExMLG1CQTFMSyx1QkEwTFEsTUExTFIsRUEwTGdCLElBMUxoQixFQTBMc0IsSUExTHRCLEVBMEw0QixNQTFMNUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQTBMb0MscUJBMUxwQyxtRkEwTDRDLFNBMUw1QztBQTBMdUQsc0JBMUx2RCxtRkEwTGdFLEVBMUxoRTtBQUFBLHVCQTJMRCxTQUFLLFdBQUwsRUEzTEM7QUFBQTtBQTRMSCxzQkE1TEcsR0E0TE0sd0JBQXdCLFNBQUssVUFBTCxDQUFpQixJQUFqQixDQUF4QixHQUFpRCxJQTVMdkQ7QUE2TEgscUJBN0xHLEdBNkxLO0FBQ1Isb0NBQWdCLFNBQUssUUFBTCxDQUFlLE1BQWYsQ0FEUjtBQUVSLGdDQUFZO0FBRkosaUJBN0xMOztBQWlNUCxvQkFBSSxRQUFRLE9BQVo7QUFDSSwwQkFBTSxPQUFOLElBQWlCLEtBQWpCO0FBREosaUJBak1PLE9BbU1jLFNBQUssTUFBTCxFQUFjLFNBQUssTUFBTCxDQUFhLEtBQWIsRUFBb0IsTUFBcEIsQ0FBZCxDQW5NZDtBQUFBO0FBbU1ILHdCQW5NRzs7QUFvTVAsdUJBQU87QUFDSCw0QkFBUSxRQURMO0FBRUgsMEJBQU0sU0FBUyxJQUFULEVBQWUsUUFBZjtBQUZILGlCQUFQO0FBcE1PO0FBQUE7QUEwTUwsbUJBMU1LLHVCQTBNUSxFQTFNUjtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQTBNWSxzQkExTVosbUZBME1xQixFQTFNckI7QUFBQSx1QkEyTUQsU0FBSyxXQUFMLEVBM01DO0FBQUE7QUE0TVAsdUJBQU8sU0FBSyw4QkFBTCxDQUFxQyxTQUFLLE1BQUwsQ0FBYTtBQUNyRCwrQkFBVztBQUQwQyxpQkFBYixFQUV6QyxNQUZ5QyxDQUFyQyxDQUFQO0FBNU1PO0FBQUE7QUFpTkwsZUFqTkssbUJBaU5JLElBak5KO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQWlOVSxtQkFqTlYsbUZBaU5nQixRQWpOaEI7QUFpTjBCLHNCQWpOMUIsbUZBaU5tQyxLQWpObkM7QUFpTjBDLHNCQWpOMUMsbUZBaU5tRCxFQWpObkQ7QUFpTnVELHVCQWpOdkQsbUZBaU5pRSxTQWpOakU7QUFpTjRFLG9CQWpONUUsbUZBaU5tRixTQWpObkY7QUFrTkgsbUJBbE5HLEdBa05HLFNBQUssSUFBTCxDQUFVLEtBQVYsSUFBbUIsR0FBbkIsR0FBeUIsSUFsTjVCOztBQW1OUCxvQkFBSSxPQUFPLFFBQVgsRUFBcUI7QUFDakIsd0JBQUksT0FBTyxJQUFQLENBQWEsTUFBYixFQUFxQixNQUF6QjtBQUNJLCtCQUFPLE1BQU0sU0FBSyxTQUFMLENBQWdCLE1BQWhCLENBQWI7QUFESjtBQUVILGlCQUhELE1BR087QUFDQyx5QkFERCxHQUNTLFNBQUssU0FBTCxDQUFnQixTQUFLLE9BQUwsQ0FBYyxNQUFkLENBQWhCLENBRFQ7O0FBRUgsd0JBQUksVUFBVSxLQUFkO0FBQ0ksNEJBQUksS0FBSjtBQUNJLG1DQUFPLE1BQU0sS0FBYjtBQURKO0FBR0EsZ0NBQUksS0FBSjtBQUNJLHVDQUFPLEtBQVA7QUFESjtBQUhBO0FBREoscUJBTUksU0FSRCxHQVFhLFNBQUssSUFBTCxDQUFXLFNBQUssTUFBTCxDQUFhLEtBQWIsQ0FBWCxFQUFnQyxTQUFLLE1BQUwsQ0FBYSxTQUFLLE1BQWxCLENBQWhDLEVBQTJELFFBQTNELENBUmI7O0FBU0gsOEJBQVU7QUFDTixtQ0FBVyxTQUFLLE1BRFY7QUFFTixnQ0FBUSxVQUFVLFdBQVYsRUFGRjtBQUdOLHdDQUFnQjtBQUhWLHFCQUFWO0FBS0g7QUFwT00sdUJBcU9jLFNBQUssS0FBTCxDQUFZLEdBQVosRUFBaUIsTUFBakIsRUFBeUIsT0FBekIsRUFBa0MsSUFBbEMsQ0FyT2Q7QUFBQTtBQXFPSCx3QkFyT0c7O0FBc09QLG9CQUFJLGFBQWEsUUFBakI7QUFDSSx3QkFBSSxDQUFDLFNBQVMsU0FBVCxDQUFMO0FBQ0ksOEJBQU0sSUFBSSxhQUFKLENBQW1CLFNBQUssRUFBTCxHQUFVLEdBQVYsR0FBZ0IsU0FBSyxJQUFMLENBQVcsUUFBWCxDQUFuQyxDQUFOO0FBREo7QUFESixpQkFHQSxPQUFPLFFBQVA7QUF6T087QUFBQTtBQUFBLEtBQWY7O0FBNk9BOztBQUVBLFFBQUksUUFBUSxPQUFRLElBQVIsRUFBYztBQUN0QixjQUFNLE9BRGdCO0FBRXRCLGdCQUFRLE9BRmM7QUFHdEIscUJBQWEsSUFIUztBQUl0QixxQkFBYSxJQUpTO0FBS3RCLG1CQUFXLEdBTFc7QUFNdEIsZ0JBQVE7QUFDSixvQkFBUSxxR0FESjtBQUVKLG1CQUFPO0FBQ0gsMEJBQVUsMEJBRFA7QUFFSCwyQkFBVztBQUZSLGFBRkg7QUFNSixtQkFBTyxrQkFOSDtBQU9KLG1CQUFPO0FBUEgsU0FOYzs7QUFnQmhCLGVBaEJnQixtQkFnQlAsSUFoQk87QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFnQkQsbUJBaEJDLG1GQWdCSyxRQWhCTDtBQWdCZSxzQkFoQmYsbUZBZ0J3QixLQWhCeEI7QUFnQitCLHNCQWhCL0IsbUZBZ0J3QyxFQWhCeEM7QUFnQjRDLHVCQWhCNUMsbUZBZ0JzRCxTQWhCdEQ7QUFnQmlFLG9CQWhCakUsbUZBZ0J3RSxTQWhCeEU7QUFpQmQsbUJBakJjLEdBaUJSLFNBQUssSUFBTCxDQUFVLEtBQVYsRUFBaUIsR0FBakIsQ0FqQlE7QUFrQmQscUJBbEJjLEdBa0JOLFNBQUssSUFBTCxDQUFXLE1BQVgsRUFBbUIsU0FBSyxhQUFMLENBQW9CLElBQXBCLENBQW5CLENBbEJNOztBQW1CbEIsb0JBQUksT0FBTyxRQUFYLEVBQXFCO0FBQ2pCLDJCQUFRLE1BQU0sU0FBSyxPQUFYLEdBQXFCLEdBQXJCLEdBQTJCLFNBQUssYUFBTCxDQUFvQixJQUFwQixFQUEwQixNQUExQixDQUFuQztBQUNBLHdCQUFJLE9BQU8sSUFBUCxDQUFhLEtBQWIsRUFBb0IsTUFBeEI7QUFDSSwrQkFBTyxNQUFNLFNBQUssU0FBTCxDQUFnQixLQUFoQixDQUFiO0FBREo7QUFFSCxpQkFKRCxNQUlPO0FBQ0MseUJBREQsR0FDUyxTQUFLLEtBQUwsRUFEVDs7QUFFSCwyQkFBTyxTQUFLLFNBQUwsQ0FBZ0IsU0FBSyxNQUFMLENBQWE7QUFDaEMsaUNBQVMsS0FEdUI7QUFFaEMsa0NBQVU7QUFGc0IscUJBQWIsRUFHcEIsS0FIb0IsQ0FBaEIsQ0FBUDtBQUlJLDZCQU5ELEdBTWEsU0FBSyxJQUFMLENBQVcsU0FBSyxNQUFMLENBQWEsSUFBYixDQUFYLEVBQStCLFNBQUssTUFBTCxDQUFhLFNBQUssTUFBbEIsQ0FBL0IsRUFBMEQsUUFBMUQsQ0FOYjs7QUFPSCw4QkFBVTtBQUNOLHdDQUFnQixtQ0FEVjtBQUVOLDBDQUFrQixLQUFLLE1BQUwsQ0FBWSxRQUFaLEVBRlo7QUFHTiwrQkFBTyxTQUFLLE1BSE47QUFJTixnQ0FBUTtBQUpGLHFCQUFWO0FBTUg7QUFwQ2lCLHVCQXFDRyxTQUFLLEtBQUwsQ0FBWSxHQUFaLEVBQWlCLE1BQWpCLEVBQXlCLE9BQXpCLEVBQWtDLElBQWxDLENBckNIO0FBQUE7QUFxQ2Qsd0JBckNjOztBQXNDbEIsb0JBQUksYUFBYSxRQUFqQjtBQUNJLHdCQUFJLENBQUMsU0FBUyxTQUFULENBQUw7QUFDSSw4QkFBTSxJQUFJLGFBQUosQ0FBbUIsU0FBSyxFQUFMLEdBQVUsR0FBVixHQUFnQixTQUFLLElBQUwsQ0FBVyxRQUFYLENBQW5DLENBQU47QUFESjtBQURKLGlCQUdBLE9BQU8sUUFBUDtBQXpDa0I7QUFBQTtBQUFBLEtBQWQsQ0FBWjs7QUE2Q0E7O0FBRUEsUUFBSSxPQUFPOztBQUVQLGNBQU0sTUFGQztBQUdQLGdCQUFRLE1BSEQ7QUFJUCxxQkFBYSxDQUFFLElBQUYsRUFBUSxJQUFSLEVBQWMsSUFBZCxDQUpOO0FBS1AscUJBQWEsSUFMTjtBQU1QLG1CQUFXLEdBTko7QUFPUCwyQkFBbUIsSUFQWjtBQVFQLGdCQUFRO0FBQ0osb0JBQVEscUdBREo7QUFFSixtQkFBTyw0QkFGSDtBQUdKLG1CQUFPLHNCQUhIO0FBSUosbUJBQU8sQ0FDSCw2QkFERyxFQUVILGdDQUZHLEVBR0gsd0NBSEc7QUFKSCxTQVJEO0FBa0JQLGVBQU87QUFDSCxzQkFBVTtBQUNOLHVCQUFPLENBQ0gsV0FERyxFQUVILFFBRkcsRUFHSCxTQUhHLEVBSUgsUUFKRztBQURELGFBRFA7QUFTSCx1QkFBVztBQUNQLHVCQUFPLENBQ0gsdUJBREcsRUFFSCw0QkFGRyxFQUdILFNBSEcsRUFJSCxVQUpHLEVBS0gsaUJBTEcsRUFNSCxZQU5HLEVBT0gsWUFQRyxFQVFILGFBUkcsRUFTSCxhQVRHLEVBVUgsYUFWRyxFQVdILGtCQVhHLENBREE7QUFjUCx3QkFBUSxDQUNKLFVBREksRUFFSixXQUZJLEVBR0osYUFISSxFQUlKLFdBSkksRUFLSixpQkFMSSxFQU1KLGFBTkksRUFPSixNQVBJLEVBUUosUUFSSSxFQVNKLGNBVEksQ0FkRDtBQXlCUCx1QkFBTyxDQUNILGFBREcsQ0F6QkE7QUE0QlAsMEJBQVUsQ0FDTixhQURNLEVBRU4sa0JBRk07QUE1Qkg7QUFUUixTQWxCQTs7QUE4REQsb0JBOURDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBK0RpQixTQUFLLGdCQUFMLEVBL0RqQjtBQUFBO0FBK0RDLHVCQS9ERDtBQWdFQyxzQkFoRUQsR0FnRVUsRUFoRVY7O0FBaUVILHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksUUFBUSxTQUFSLEVBQW1CLE1BQXZDLEVBQStDLEdBQS9DLEVBQW9EO0FBQzVDLDBCQUQ0QyxHQUNuQyxRQUFRLFNBQVIsRUFBbUIsQ0FBbkIsQ0FEbUM7QUFFNUMsc0JBRjRDLEdBRXZDLE9BQU8sTUFBUCxDQUZ1QztBQUc1Qyx3QkFINEMsR0FHckMsR0FBRyxLQUFILENBQVUsQ0FBVixFQUFhLENBQWIsQ0FIcUM7QUFJNUMseUJBSjRDLEdBSXBDLEdBQUcsS0FBSCxDQUFVLENBQVYsRUFBYSxDQUFiLENBSm9DOztBQUtoRCwyQkFBTyxTQUFLLGtCQUFMLENBQXlCLElBQXpCLENBQVA7QUFDQSw0QkFBUSxTQUFLLGtCQUFMLENBQXlCLEtBQXpCLENBQVI7QUFDSSwwQkFQNEMsR0FPbkMsT0FBTyxHQUFQLEdBQWEsS0FQc0I7O0FBUWhELDJCQUFPLElBQVAsQ0FBYTtBQUNULDhCQUFNLEVBREc7QUFFVCxrQ0FBVSxNQUZEO0FBR1QsZ0NBQVEsSUFIQztBQUlULGlDQUFTLEtBSkE7QUFLVCxnQ0FBUTtBQUxDLHFCQUFiO0FBT0g7QUFDRCx1QkFBTyxNQUFQO0FBakZHO0FBQUE7QUFvRkQsb0JBcEZDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkFxRkcsU0FBSyxXQUFMLEVBckZIO0FBQUE7QUFBQSx1QkFzRmtCLFNBQUssaUJBQUwsRUF0RmxCO0FBQUE7QUFzRkMsd0JBdEZEO0FBdUZDLHdCQXZGRCxHQXVGWSxTQUFTLFNBQVQsQ0F2Rlo7QUF3RkMsc0JBeEZELEdBd0ZVLEVBQUUsUUFBUSxRQUFWLEVBeEZWOztBQXlGSCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFNBQVMsTUFBN0IsRUFBcUMsR0FBckMsRUFBMEM7QUFDbEMsMkJBRGtDLEdBQ3hCLFNBQVMsQ0FBVCxDQUR3QjtBQUVsQyw0QkFGa0MsR0FFdkIsU0FBSyxrQkFBTCxDQUF5QixRQUFRLE9BQVIsQ0FBekIsQ0FGdUI7QUFHbEMsNEJBSGtDLEdBR3ZCLFdBQVksUUFBUSxVQUFSLENBQVosQ0FIdUI7QUFJbEMsK0JBSmtDLEdBSXBCLFdBQVksUUFBUSxhQUFSLENBQVosQ0FKb0I7QUFLbEMsMkJBTGtDLEdBS3hCO0FBQ1YsZ0NBQVEsV0FBWSxRQUFRLFNBQVIsQ0FBWixDQURFO0FBRVYsZ0NBQVEsU0FBSyxHQUFMLENBQVUsUUFBVixFQUFvQixXQUFwQixDQUZFO0FBR1YsaUNBQVM7QUFIQyxxQkFMd0I7O0FBVXRDLDRCQUFRLE9BQVIsSUFBbUIsU0FBSyxHQUFMLENBQVUsUUFBUSxNQUFSLENBQVYsRUFBMkIsUUFBUSxNQUFSLENBQTNCLENBQW5CO0FBQ0EsMkJBQU8sUUFBUCxJQUFtQixPQUFuQjtBQUNIO0FBQ0QsdUJBQU8sTUFBUDtBQXRHRztBQUFBO0FBeUdELHNCQXpHQywwQkF5R2UsTUF6R2Y7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBeUd1QixzQkF6R3ZCLG1GQXlHZ0MsRUF6R2hDO0FBQUEsdUJBMEdHLFNBQUssV0FBTCxFQTFHSDtBQUFBO0FBQUEsdUJBMkdtQixTQUFLLGtCQUFMLENBQXlCLFNBQUssTUFBTCxDQUFhO0FBQ3hELDRCQUFRLFNBQUssUUFBTCxDQUFlLE1BQWY7QUFEZ0QsaUJBQWIsRUFFNUMsTUFGNEMsQ0FBekIsQ0EzR25CO0FBQUE7QUEyR0MseUJBM0dEO0FBOEdDLHlCQTlHRCxHQThHYSxVQUFVLFdBQVYsQ0E5R2I7QUErR0Msc0JBL0dELEdBK0dVO0FBQ1QsNEJBQVEsRUFEQztBQUVULDRCQUFRLEVBRkM7QUFHVCxpQ0FBYSxTQUhKO0FBSVQsZ0NBQVksU0FBSyxPQUFMLENBQWMsU0FBZDtBQUpILGlCQS9HVjtBQXFIQyxxQkFySEQsR0FxSFMsQ0FBRSxNQUFGLEVBQVUsTUFBVixDQXJIVDs7QUFzSEgscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxNQUFNLE1BQTFCLEVBQWtDLEdBQWxDLEVBQXVDO0FBQy9CLHdCQUQrQixHQUN4QixNQUFNLENBQU4sQ0FEd0I7QUFFL0IsMEJBRitCLEdBRXRCLFVBQVUsSUFBVixDQUZzQjs7QUFHbkMseUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxPQUFPLE1BQTNCLEVBQW1DLEdBQW5DLEVBQXdDO0FBQ2hDLDZCQURnQyxHQUN4QixPQUFPLENBQVAsQ0FEd0I7QUFFaEMsNkJBRmdDLEdBRXhCLFdBQVksTUFBTSxPQUFOLENBQVosQ0FGd0I7QUFHaEMsOEJBSGdDLEdBR3ZCLFdBQVksTUFBTSxRQUFOLENBQVosQ0FIdUI7QUFJcEM7O0FBQ0EsK0JBQU8sSUFBUCxFQUFhLElBQWIsQ0FBbUIsQ0FBRSxLQUFGLEVBQVMsTUFBVCxDQUFuQjtBQUNIO0FBQ0o7QUFDRCx1QkFBTyxNQUFQO0FBaklHO0FBQUE7QUFvSVAsbUJBcElPLHVCQW9JTSxNQXBJTixFQW9JYyxNQXBJZCxFQW9Jc0I7QUFDekIsZ0JBQUksWUFBWSxPQUFPLFdBQVAsQ0FBaEI7QUFDQSxtQkFBTztBQUNILDZCQUFhLFNBRFY7QUFFSCw0QkFBWSxLQUFLLE9BQUwsQ0FBYyxTQUFkLENBRlQ7QUFHSCx3QkFBUSxTQUhMO0FBSUgsdUJBQU8sU0FKSjtBQUtILHVCQUFPLFdBQVksT0FBTyxLQUFQLENBQVosQ0FMSjtBQU1ILHVCQUFPLFdBQVksT0FBTyxLQUFQLENBQVosQ0FOSjtBQU9ILHdCQUFRLFNBUEw7QUFRSCx3QkFBUSxTQVJMO0FBU0gseUJBQVMsU0FUTjtBQVVILHlCQUFTLFNBVk47QUFXSCx3QkFBUSxXQUFZLE9BQU8sWUFBUCxDQUFaLENBWEw7QUFZSCwwQkFBVSxTQVpQO0FBYUgsOEJBQWMsU0FiWDtBQWNILDJCQUFXLFNBZFI7QUFlSCw4QkFBYyxTQWZYO0FBZ0JILCtCQUFlLFdBQVksT0FBTyx3QkFBUCxDQUFaLENBaEJaO0FBaUJILHdCQUFRO0FBakJMLGFBQVA7QUFtQkgsU0F6Sk07QUEySkQsb0JBM0pDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkE0SkcsU0FBSyxXQUFMLEVBNUpIO0FBQUE7QUFBQSx1QkE2SmtCLFNBQUssZ0JBQUwsRUE3SmxCO0FBQUE7QUE2SkMsd0JBN0pEO0FBOEpDLHVCQTlKRCxHQThKVyxTQUFLLE9BQUwsQ0FBYyxTQUFTLFNBQVQsQ0FBZCxFQUFtQyxNQUFuQyxDQTlKWDtBQStKQyxtQkEvSkQsR0ErSk8sT0FBTyxJQUFQLENBQWEsT0FBYixDQS9KUDtBQWdLQyxzQkFoS0QsR0FnS1UsRUFoS1Y7O0FBaUtILHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksSUFBSSxNQUF4QixFQUFnQyxHQUFoQyxFQUFxQztBQUM3QixzQkFENkIsR0FDeEIsSUFBSSxDQUFKLENBRHdCO0FBRTdCLDBCQUY2QixHQUVwQixTQUFLLGFBQUwsQ0FBbUIsRUFBbkIsQ0FGb0I7QUFHN0IsMEJBSDZCLEdBR3BCLE9BQU8sUUFBUCxDQUhvQjtBQUk3QiwwQkFKNkIsR0FJcEIsUUFBUSxFQUFSLENBSm9COztBQUtqQywyQkFBTyxNQUFQLElBQWlCLFNBQUssV0FBTCxDQUFrQixNQUFsQixFQUEwQixNQUExQixDQUFqQjtBQUNIO0FBQ0QsdUJBQU8sTUFBUDtBQXhLRztBQUFBO0FBMktELG1CQTNLQyx1QkEyS1ksTUEzS1o7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkE0S0csU0FBSyxXQUFMLEVBNUtIO0FBQUE7QUE2S0MsaUJBN0tELEdBNktLLFNBQUssTUFBTCxDQUFhLE1BQWIsQ0E3S0w7QUFBQSx1QkE4S2dCLFNBQUssZUFBTCxDQUFzQjtBQUNyQyw0QkFBUSxFQUFFLElBQUY7QUFENkIsaUJBQXRCLENBOUtoQjtBQUFBO0FBOEtDLHNCQTlLRDs7QUFpTEgsdUJBQU8sU0FBSyxXQUFMLENBQWtCLE1BQWxCLEVBQTBCLENBQTFCLENBQVA7QUFqTEc7QUFBQTtBQW9MRCxtQkFwTEMsdUJBb0xZLE1BcExaO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBb0xvQixzQkFwTHBCLG1GQW9MNkIsRUFwTDdCO0FBQUEsdUJBcUxHLFNBQUssV0FBTCxFQXJMSDtBQUFBO0FBc0xILHVCQUFPLFNBQUssZUFBTCxDQUFzQixTQUFLLE1BQUwsQ0FBYTtBQUN0Qyw0QkFBUSxTQUFLLFFBQUwsQ0FBZSxNQUFmO0FBRDhCLGlCQUFiLEVBRTFCLE1BRjBCLENBQXRCLENBQVA7QUF0TEc7QUFBQTtBQTJMRCxtQkEzTEMsdUJBMkxZLE1BM0xaLEVBMkxvQixJQTNMcEIsRUEyTDBCLElBM0wxQixFQTJMZ0MsTUEzTGhDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUEyTHdDLHFCQTNMeEMsbUZBMkxnRCxTQTNMaEQ7QUEyTDJELHNCQTNMM0QsbUZBMkxvRSxFQTNMcEU7QUFBQSx1QkE0TEcsU0FBSyxXQUFMLEVBNUxIO0FBQUE7QUE2TEMsc0JBN0xELEdBNkxVLGFBN0xWO0FBOExDLHFCQTlMRCxHQThMUyxFQUFFLFFBQVEsU0FBSyxRQUFMLENBQWUsTUFBZixDQUFWLEVBOUxUOztBQStMSCxvQkFBSSxRQUFRLFFBQVosRUFBc0I7QUFDbEIsOEJBQVUsYUFBVjtBQUNBLDBCQUFNLE1BQU4sSUFBZ0IsS0FBSyxXQUFMLEVBQWhCO0FBQ0Esd0JBQUksUUFBUSxLQUFaO0FBQ0ksOEJBQU0sZ0JBQU4sSUFBMEIsTUFBMUI7QUFESjtBQUdJLDhCQUFNLGFBQU4sSUFBdUIsTUFBdkI7QUFISjtBQUlILGlCQVBELE1BT087QUFDSCw4QkFBVSxPQUFWO0FBQ0EsMEJBQU0sUUFBTixJQUFrQixNQUFsQjtBQUNBLDBCQUFNLE9BQU4sSUFBaUIsS0FBakI7QUFDQSx3QkFBSSxRQUFRLEtBQVo7QUFDSSw4QkFBTSxNQUFOLElBQWdCLEtBQWhCO0FBREo7QUFHSSw4QkFBTSxNQUFOLElBQWdCLEtBQWhCO0FBSEo7QUFJSDtBQTlNRSx1QkErTWtCLFNBQUssTUFBTCxFQUFjLFNBQUssTUFBTCxDQUFhLEtBQWIsRUFBb0IsTUFBcEIsQ0FBZCxDQS9NbEI7QUFBQTtBQStNQyx3QkEvTUQ7O0FBZ05ILHVCQUFPO0FBQ0gsNEJBQVEsUUFETDtBQUVILDBCQUFNLFNBQVMsVUFBVDtBQUZILGlCQUFQO0FBaE5HO0FBQUE7QUFzTkQsbUJBdE5DLHVCQXNOWSxFQXROWjtBQUFBOztBQUFBO0FBQUEsdUJBdU5HLFNBQUssV0FBTCxFQXZOSDtBQUFBO0FBd05ILHVCQUFPLFNBQUssb0JBQUwsQ0FBMkIsRUFBRSxZQUFZLEVBQWQsRUFBM0IsQ0FBUDtBQXhORztBQUFBO0FBMk5ELGVBM05DLG1CQTJOUSxJQTNOUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUEyTmMsbUJBM05kLG1GQTJOb0IsUUEzTnBCO0FBMk44QixzQkEzTjlCLG1GQTJOdUMsS0EzTnZDO0FBMk44QyxzQkEzTjlDLG1GQTJOdUQsRUEzTnZEO0FBMk4yRCx1QkEzTjNELG1GQTJOcUUsU0EzTnJFO0FBMk5nRixvQkEzTmhGLG1GQTJOdUYsU0EzTnZGO0FBNE5DLG1CQTVORCxHQTROTyxTQUFLLElBQUwsQ0FBVSxLQUFWLElBQW1CLEdBQW5CLEdBQXlCLFNBQUssT0FBOUIsR0FBd0MsR0FBeEMsR0FBOEMsU0FBSyxhQUFMLENBQW9CLElBQXBCLEVBQTBCLE1BQTFCLENBNU5yRDtBQTZOQyxxQkE3TkQsR0E2TlMsU0FBSyxJQUFMLENBQVcsTUFBWCxFQUFtQixTQUFLLGFBQUwsQ0FBb0IsSUFBcEIsQ0FBbkIsQ0E3TlQ7O0FBOE5ILG9CQUFJLE9BQU8sSUFBUCxDQUFhLEtBQWIsRUFBb0IsTUFBeEI7QUFDSSwyQkFBTyxNQUFNLFNBQUssU0FBTCxDQUFnQixLQUFoQixDQUFiO0FBREosaUJBRUEsSUFBSSxPQUFPLFNBQVgsRUFBc0I7QUFDZCx3QkFEYyxHQUNQLFNBQUssTUFBTCxDQUFhLFNBQUssTUFBTCxHQUFjLEdBQWQsR0FBb0IsU0FBSyxNQUF0QyxDQURPOztBQUVsQiwyQkFBTyxTQUFLLGNBQUwsQ0FBcUIsSUFBckIsQ0FBUDtBQUNBLDhCQUFVLEVBQUUsaUJBQWlCLFdBQVcsU0FBSyxNQUFMLENBQWEsSUFBYixDQUE5QixFQUFWO0FBQ0g7QUFwT0UsdUJBcU9rQixTQUFLLEtBQUwsQ0FBWSxHQUFaLEVBQWlCLE1BQWpCLEVBQXlCLE9BQXpCLEVBQWtDLElBQWxDLENBck9sQjtBQUFBO0FBcU9DLHdCQXJPRDs7QUFzT0gsb0JBQUksV0FBVyxRQUFmO0FBQ0ksMEJBQU0sSUFBSSxhQUFKLENBQW1CLFNBQUssRUFBTCxHQUFVLEdBQVYsR0FBZ0IsU0FBSyxJQUFMLENBQVcsUUFBWCxDQUFuQyxDQUFOO0FBREosaUJBRUEsT0FBTyxRQUFQO0FBeE9HO0FBQUE7QUFBQSxLQUFYOztBQTRPQTs7QUFFQSxRQUFJLFVBQVU7O0FBRVYsY0FBTSxTQUZJO0FBR1YsZ0JBQVEsaUJBSEU7QUFJVixxQkFBYSxJQUpILEVBSVM7QUFDbkIscUJBQWEsSUFMSDtBQU1WLG1CQUFXLElBTkQ7QUFPVixnQkFBUTtBQUNKLG9CQUFRLHFHQURKO0FBRUosbUJBQU87QUFDSCwwQkFBVSxvQ0FEUDtBQUVILDJCQUFXO0FBRlIsYUFGSDtBQU1KLG1CQUFPLG1DQU5IO0FBT0osbUJBQU8sQ0FDSCwyQ0FERyxFQUVILDZDQUZHO0FBUEgsU0FQRTtBQW1CVixlQUFPO0FBQ0gsc0JBQVU7QUFDTix1QkFBTyxDQUFFO0FBQ0wsNEJBREcsRUFFSCxxQkFGRyxFQUdILFNBSEcsRUFJSCxrQkFKRyxFQUtILFNBTEcsRUFNSCxrQkFORyxFQU9ILFlBUEcsRUFRSCxxQkFSRztBQURELGFBRFA7QUFhSCx1QkFBVztBQUNQLHdCQUFRLENBQ0osY0FESSxFQUVKLGtCQUZJLEVBR0osV0FISSxFQUlKLGdCQUpJLEVBS0osc0JBTEksRUFNSixhQU5JLEVBT0osZ0JBUEksRUFRSixpQkFSSSxFQVNKLGtCQVRJLEVBVUosZUFWSTtBQUREO0FBYlIsU0FuQkc7QUErQ1YsbUJBQVc7QUFDUCx1QkFBVyxFQUFFLE1BQU0sUUFBUixFQUFrQixVQUFVLFNBQTVCLEVBQXVDLFFBQVEsS0FBL0MsRUFBc0QsU0FBUyxLQUEvRCxFQUFzRSxVQUFVLEVBQWhGLEVBREo7QUFFUCx1QkFBVyxFQUFFLE1BQU0sUUFBUixFQUFrQixVQUFVLFNBQTVCLEVBQXVDLFFBQVEsS0FBL0MsRUFBc0QsU0FBUyxLQUEvRCxFQUFzRSxVQUFVLFVBQWhGO0FBRkosU0EvQ0Q7O0FBb0RKLHNCQXBESSwwQkFvRFksTUFwRFo7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBb0RvQixzQkFwRHBCLG1GQW9ENkIsRUFwRDdCO0FBcURGLGlCQXJERSxHQXFERSxTQUFLLE1BQUwsQ0FBYSxNQUFiLENBckRGO0FBc0RGLHNCQXRERSxHQXNETyx1QkFBdUIsU0FBSyxVQUFMLENBQWlCLEVBQUUsUUFBRixDQUFqQixDQXREOUI7QUFBQSx1QkF1RGdCLFNBQUssTUFBTCxFQUFjLE1BQWQsQ0F2RGhCO0FBQUE7QUF1REYseUJBdkRFO0FBd0RGLHlCQXhERSxHQXdEVSxTQUFLLFlBQUwsRUF4RFY7QUF5REYsc0JBekRFLEdBeURPO0FBQ1QsNEJBQVEsVUFBVSxNQUFWLENBREM7QUFFVCw0QkFBUSxVQUFVLE1BQVYsQ0FGQztBQUdULGlDQUFhLFNBSEo7QUFJVCxnQ0FBWSxTQUFLLE9BQUwsQ0FBYyxTQUFkO0FBSkgsaUJBekRQOztBQStETix1QkFBTyxNQUFQO0FBL0RNO0FBQUE7QUFrRUosbUJBbEVJLHVCQWtFUyxNQWxFVDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQW1FRixpQkFuRUUsR0FtRUUsU0FBSyxNQUFMLENBQWEsTUFBYixDQW5FRjtBQW9FRixzQkFwRUUsR0FvRU8sc0JBQXNCLFNBQUssVUFBTCxDQUFpQixFQUFFLFFBQUYsQ0FBakIsQ0FwRTdCO0FBQUEsdUJBcUVlLFNBQUssTUFBTCxHQXJFZjtBQUFBO0FBcUVGLHdCQXJFRTtBQXNFRixzQkF0RUUsR0FzRU8sU0FBUyxRQUFULENBdEVQO0FBdUVGLHlCQXZFRSxHQXVFVSxTQUFVLE9BQU8sTUFBUCxDQUFWLElBQTRCLElBdkV0Qzs7QUF3RU4sdUJBQU87QUFDSCxpQ0FBYSxTQURWO0FBRUgsZ0NBQVksU0FBSyxPQUFMLENBQWMsU0FBZCxDQUZUO0FBR0gsNEJBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQUhMO0FBSUgsMkJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQUpKO0FBS0gsMkJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQUxKO0FBTUgsMkJBQU8sV0FBWSxPQUFPLE1BQVAsQ0FBWixDQU5KO0FBT0gsNEJBQVEsU0FQTDtBQVFILDRCQUFRLFNBUkw7QUFTSCw2QkFBUyxTQVROO0FBVUgsNkJBQVMsU0FWTjtBQVdILDRCQUFRLFdBQVksT0FBTyxNQUFQLENBQVosQ0FYTDtBQVlILDhCQUFVLFNBWlA7QUFhSCxrQ0FBYyxTQWJYO0FBY0gsK0JBQVcsU0FkUjtBQWVILGtDQUFjLFNBZlg7QUFnQkgsbUNBQWUsV0FBWSxPQUFPLEtBQVAsQ0FBWixDQWhCWjtBQWlCSCw0QkFBUTtBQWpCTCxpQkFBUDtBQXhFTTtBQUFBO0FBNkZKLG1CQTdGSSx1QkE2RlMsTUE3RlQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQTZGaUIsa0JBN0ZqQixtRkE2RjBCLEVBN0YxQjtBQThGRixhQTlGRSxHQThGRSxTQUFLLE1BQUwsQ0FBYSxNQUFiLENBOUZGO0FBK0ZGLGtCQS9GRSxHQStGTyxvQkFBb0IsU0FBSyxVQUFMLENBQWlCLEVBQUUsUUFBRixDQUFqQixDQS9GM0I7O0FBZ0dOLG1CQUFPLFNBQUssTUFBTCxFQUFjLE1BQWQsQ0FBUDtBQWhHTTtBQW1HSixvQkFuR0k7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBb0dlLFNBQUsseUJBQUwsRUFwR2Y7QUFBQTtBQW9HRix3QkFwR0U7QUFxR0Ysd0JBckdFLEdBcUdTLFNBQVMsU0FBVCxDQXJHVDtBQXNHRixzQkF0R0UsR0FzR08sRUFBRSxRQUFRLFFBQVYsRUF0R1A7O0FBdUdOLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksU0FBSyxVQUFMLENBQWdCLE1BQXBDLEVBQTRDLEdBQTVDLEVBQWlEO0FBQ3pDLDRCQUR5QyxHQUM5QixTQUFLLFVBQUwsQ0FBZ0IsQ0FBaEIsQ0FEOEI7QUFFekMsNkJBRnlDLEdBRTdCLFNBQVMsV0FBVCxFQUY2QjtBQUd6QywyQkFIeUMsR0FHL0I7QUFDVixnQ0FBUSxTQURFO0FBRVYsZ0NBQVEsU0FGRTtBQUdWLGlDQUFTO0FBSEMscUJBSCtCOztBQVE3Qyx3QkFBSSxhQUFhLFFBQWpCLEVBQTJCO0FBQ3ZCLGdDQUFRLE1BQVIsSUFBa0IsV0FBWSxTQUFTLFNBQVQsRUFBb0IsV0FBcEIsQ0FBWixDQUFsQjtBQUNBLGdDQUFRLE9BQVIsSUFBbUIsV0FBWSxTQUFTLFNBQVQsRUFBb0IsT0FBcEIsQ0FBWixDQUFuQjtBQUNBLGdDQUFRLE1BQVIsSUFBa0IsUUFBUSxPQUFSLElBQW1CLFFBQVEsTUFBUixDQUFyQztBQUNIO0FBQ0QsMkJBQU8sUUFBUCxJQUFtQixPQUFuQjtBQUNIO0FBQ0QsdUJBQU8sTUFBUDtBQXRITTtBQUFBO0FBeUhKLG1CQXpISSx1QkF5SFMsTUF6SFQsRUF5SGlCLElBekhqQixFQXlIdUIsSUF6SHZCLEVBeUg2QixNQXpIN0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQXlIcUMscUJBekhyQyxtRkF5SDZDLFNBekg3QztBQXlId0Qsc0JBekh4RCxtRkF5SGlFLEVBekhqRTs7QUEwSE4sb0JBQUksUUFBUSxRQUFaO0FBQ0ksMEJBQU0sSUFBSSxhQUFKLENBQW1CLFNBQUssRUFBTCxHQUFVLDJCQUE3QixDQUFOO0FBREosaUJBRUksTUE1SEUsR0E0SE8scUJBQXFCLFNBQUssVUFBTCxDQUFpQixJQUFqQixDQUFyQixHQUE4QyxPQTVIckQ7QUE2SEYscUJBN0hFLEdBNkhNO0FBQ1IsaUNBQWEsU0FBSyxRQUFMLENBQWUsTUFBZixDQURMO0FBRVIsZ0NBQVksTUFGSjtBQUdSLG1DQUFlO0FBSFAsaUJBN0hOO0FBQUEsdUJBa0llLFNBQUssTUFBTCxFQUFjLFNBQUssTUFBTCxDQUFhLEtBQWIsRUFBb0IsTUFBcEIsQ0FBZCxDQWxJZjtBQUFBO0FBa0lGLHdCQWxJRTs7QUFtSU4sdUJBQU87QUFDSCw0QkFBUSxRQURMO0FBRUgsMEJBQU0sU0FBUyxlQUFULEVBQTBCLE9BQTFCLEVBQW1DLFVBQW5DLEVBQStDLFFBQS9DO0FBRkgsaUJBQVA7QUFuSU07QUFBQTtBQXlJSixtQkF6SUksdUJBeUlTLEVBeklUO0FBQUE7QUFBQTtBQUFBOztBQXlJYSxrQkF6SWIsbUZBeUlzQixFQXpJdEI7O0FBMElOLG1CQUFPLFNBQUssc0JBQUwsQ0FBNkIsU0FBSyxNQUFMLENBQWE7QUFDN0MsNEJBQVk7QUFEaUMsYUFBYixFQUVqQyxNQUZpQyxDQUE3QixDQUFQO0FBMUlNO0FBK0lKLGVBL0lJLG1CQStJSyxJQS9JTDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUErSVcsbUJBL0lYLG1GQStJaUIsUUEvSWpCO0FBK0kyQixzQkEvSTNCLG1GQStJb0MsS0EvSXBDO0FBK0kyQyxzQkEvSTNDLG1GQStJb0QsRUEvSXBEO0FBK0l3RCx1QkEvSXhELG1GQStJa0UsU0EvSWxFO0FBK0k2RSxvQkEvSTdFLG1GQStJb0YsU0EvSXBGO0FBZ0pGLG1CQWhKRSxHQWdKSSxTQUFLLElBQUwsQ0FBVSxLQUFWLEVBQWlCLEdBQWpCLElBQXdCLEdBaEo1Qjs7QUFpSk4sb0JBQUksT0FBTyxRQUFYLEVBQXFCO0FBQ2pCLDJCQUFPLElBQVA7QUFDSCxpQkFGRCxNQUVPO0FBQ0gsMkJBQU8sU0FBSyxPQUFMLEdBQWUsR0FBdEI7QUFDSSx5QkFGRCxHQUVTLFNBQUssS0FBTCxFQUZUOztBQUdILDJCQUFPLFNBQUssU0FBTCxDQUFnQixTQUFLLE1BQUwsQ0FBYTtBQUNoQyx1Q0FBZSxJQURpQjtBQUVoQyxzQ0FBYztBQUZrQixxQkFBYixFQUdwQixNQUhvQixDQUFoQixDQUFQO0FBSUksd0JBUEQsR0FPUSxXQUFXLFNBQUssT0FBaEIsR0FBMEIsR0FBMUIsR0FBZ0MsR0FBaEMsR0FBc0MsSUFQOUM7O0FBUUgsOEJBQVU7QUFDTix3Q0FBZ0IsbUNBRFY7QUFFTixtQ0FBVyxTQUFLLE1BRlY7QUFHTixvQ0FBWSxTQUFLLElBQUwsQ0FBVyxTQUFLLE1BQUwsQ0FBYSxJQUFiLENBQVgsRUFBK0IsU0FBSyxNQUFwQyxFQUE0QyxRQUE1QztBQUhOLHFCQUFWO0FBS0g7QUFoS0ssdUJBaUtlLFNBQUssS0FBTCxDQUFZLEdBQVosRUFBaUIsTUFBakIsRUFBeUIsT0FBekIsRUFBa0MsSUFBbEMsQ0FqS2Y7QUFBQTtBQWlLRix3QkFqS0U7O0FBa0tOLG9CQUFJLG1CQUFtQixRQUF2QjtBQUNJLDBCQUFNLElBQUksYUFBSixDQUFtQixTQUFLLEVBQUwsR0FBVSxHQUFWLEdBQWdCLFNBQUssSUFBTCxDQUFXLFFBQVgsQ0FBbkMsQ0FBTjtBQURKLGlCQUVBLE9BQU8sUUFBUDtBQXBLTTtBQUFBO0FBQUEsS0FBZDs7QUF3S0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFFBQUksU0FBUzs7QUFFVCxtQkFBVyxJQUZGO0FBR1QscUJBQWEsSUFISixFQUdVO0FBQ25CLGVBQU87QUFDSCxzQkFBVTtBQUNOLHVCQUFPLENBQ0gsT0FERyxFQUVILGVBRkcsRUFHSCxjQUhHLEVBSUgsd0JBSkcsRUFLSCxvQkFMRyxFQU1ILGNBTkcsRUFPSCxjQVBHLEVBUUgsb0JBUkcsRUFTSCxlQVRHLEVBVUgsZUFWRyxFQVdILE9BWEcsRUFZSCxNQVpHLEVBYUgsUUFiRyxFQWNILFFBZEc7QUFERCxhQURQO0FBbUJILHVCQUFXO0FBQ1Asd0JBQVEsQ0FDSixpQkFESSxFQUVKLGFBRkksRUFHSixjQUhJLEVBSUosbUJBSkksRUFLSixjQUxJLEVBTUosZUFOSSxFQU9KLGNBUEksRUFRSixrQkFSSSxFQVNKLGlCQVRJLEVBVUosb0JBVkksRUFXSixlQVhJLEVBWUosZ0JBWkksRUFhSixrQkFiSSxFQWNKLG1CQWRJLEVBZUosb0JBZkksRUFnQkosaUJBaEJJLEVBaUJKLHNCQWpCSSxFQWtCSixjQWxCSSxFQW1CSix1QkFuQkksRUFvQkosaUJBcEJJLEVBcUJKLHNCQXJCSSxFQXNCSixZQXRCSSxFQXVCSixXQXZCSSxFQXdCSixlQXhCSSxFQXlCSixZQXpCSSxFQTBCSixhQTFCSSxFQTJCSixtQkEzQkksRUE0QkosZ0JBNUJJLEVBNkJKLFdBN0JJLEVBOEJKLGtCQTlCSSxFQStCSixPQS9CSSxFQWdDSixlQWhDSSxFQWlDSixpQkFqQ0ksRUFrQ0osVUFsQ0ksRUFtQ0osZUFuQ0ksRUFvQ0osbUJBcENJLEVBcUNKLFVBckNJO0FBREQ7QUFuQlIsU0FKRTs7QUFrRUgsc0JBbEVHLDBCQWtFYSxNQWxFYjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQWtFcUIsc0JBbEVyQixtRkFrRThCLEVBbEU5QjtBQUFBLHVCQW1FaUIsU0FBSyxjQUFMLENBQXFCLFNBQUssTUFBTCxDQUFhO0FBQ3BELDhCQUFVLFNBQUssUUFBTCxDQUFlLE1BQWY7QUFEMEMsaUJBQWIsRUFFeEMsTUFGd0MsQ0FBckIsQ0FuRWpCO0FBQUE7QUFtRUQseUJBbkVDO0FBc0VELHlCQXRFQyxHQXNFVyxTQUFLLFlBQUwsRUF0RVg7QUF1RUQsc0JBdkVDLEdBdUVRO0FBQ1QsNEJBQVEsVUFBVSxNQUFWLENBREM7QUFFVCw0QkFBUSxTQUFLLE1BQUwsQ0FBYSxVQUFVLE1BQVYsQ0FBYixFQUFnQyxDQUFoQyxDQUZDO0FBR1QsaUNBQWEsU0FISjtBQUlULGdDQUFZLFNBQUssT0FBTCxDQUFjLFNBQWQ7QUFKSCxpQkF2RVI7O0FBNkVMLHVCQUFPLE1BQVA7QUE3RUs7QUFBQTtBQWdGSCxtQkFoRkcsdUJBZ0ZVLE1BaEZWO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkFpRmdCLFNBQUssZUFBTCxDQUFzQjtBQUN2Qyw4QkFBVSxTQUFLLFFBQUwsQ0FBZSxNQUFmO0FBRDZCLGlCQUF0QixDQWpGaEI7QUFBQTtBQWlGRCx3QkFqRkM7QUFvRkQsc0JBcEZDLEdBb0ZRLFNBQVMsUUFBVCxDQXBGUjtBQXFGRCx5QkFyRkMsR0FxRlcsU0FBVSxTQUFTLE1BQVQsQ0FBVixJQUE4QixJQXJGekM7O0FBc0ZMLHVCQUFPO0FBQ0gsaUNBQWEsU0FEVjtBQUVILGdDQUFZLFNBQUssT0FBTCxDQUFjLFNBQWQsQ0FGVDtBQUdILDRCQUFRLFdBQVksT0FBTyxNQUFQLENBQVosQ0FITDtBQUlILDJCQUFPLFdBQVksT0FBTyxLQUFQLENBQVosQ0FKSjtBQUtILDJCQUFPLFdBQVksT0FBTyxLQUFQLENBQVosQ0FMSjtBQU1ILDJCQUFPLFdBQVksT0FBTyxNQUFQLENBQVosQ0FOSjtBQU9ILDRCQUFRLFNBUEw7QUFRSCw0QkFBUSxTQVJMO0FBU0gsNkJBQVMsU0FUTjtBQVVILDZCQUFTLFNBVk47QUFXSCw0QkFBUSxXQUFZLE9BQU8sTUFBUCxDQUFaLENBWEw7QUFZSCw4QkFBVSxTQVpQO0FBYUgsa0NBQWMsU0FiWDtBQWNILCtCQUFXLFNBZFI7QUFlSCxrQ0FBYyxTQWZYO0FBZ0JILG1DQUFlLFdBQVksT0FBTyxLQUFQLENBQVosQ0FoQlo7QUFpQkgsNEJBQVE7QUFqQkwsaUJBQVA7QUF0Rks7QUFBQTtBQTJHSCxtQkEzR0csdUJBMkdVLE1BM0dWO0FBQUE7QUFBQTtBQUFBOztBQTJHa0Isa0JBM0dsQixtRkEyRzJCLEVBM0czQjs7QUE0R0wsbUJBQU8sU0FBSyxlQUFMLENBQXNCLFNBQUssTUFBTCxDQUFhO0FBQ3RDLDBCQUFVLFNBQUssUUFBTCxDQUFlLE1BQWY7QUFENEIsYUFBYixFQUUxQixNQUYwQixDQUF0QixDQUFQO0FBNUdLO0FBaUhILGtCQWpIRyxzQkFpSFMsTUFqSFQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQWlIaUIseUJBakhqQixtRkFpSDZCLEVBakg3QjtBQWlIaUMscUJBakhqQyxtRkFpSHlDLFNBakh6QztBQWlIb0QscUJBakhwRCxtRkFpSDRELFNBakg1RDtBQWtIRCxpQkFsSEMsR0FrSEcsU0FBSyxNQUFMLENBQWEsTUFBYixDQWxISDtBQUFBLHVCQW1IZ0IsU0FBSyxjQUFMLENBQXFCO0FBQ3RDLDhCQUFVLEVBQUUsSUFBRixDQUQ0QjtBQUV0Qyw0QkFBUSxNQUY4QjtBQUd0Qyw2QkFBUyxLQUg2QjtBQUl0Qyw0QkFBUSxTQUFVLEtBQVY7QUFKOEIsaUJBQXJCLENBbkhoQjtBQUFBO0FBbUhELHdCQW5IQzs7QUF5SEwsdUJBQU8sU0FBSyxXQUFMLENBQWtCLENBQWxCLEVBQXFCLFFBQXJCLEVBQStCLFNBQS9CLEVBQTBDLEtBQTFDLEVBQWlELEtBQWpELENBQVA7QUF6SEs7QUFBQTtBQTRISCxvQkE1SEc7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBNkhnQixTQUFLLG1CQUFMLEVBN0hoQjtBQUFBO0FBNkhELHdCQTdIQztBQThIRCx3QkE5SEMsR0E4SFUsU0FBUyxNQUFULEVBQWlCLE9BQWpCLENBOUhWO0FBK0hELHNCQS9IQyxHQStIUSxFQUFFLFFBQVEsUUFBVixFQS9IUjs7QUFnSUwscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxTQUFLLFVBQUwsQ0FBZ0IsTUFBcEMsRUFBNEMsR0FBNUMsRUFBaUQ7QUFDekMsNEJBRHlDLEdBQzlCLFNBQUssVUFBTCxDQUFnQixDQUFoQixDQUQ4QjtBQUV6Qyw2QkFGeUMsR0FFN0IsU0FBUyxXQUFULEVBRjZCO0FBR3pDLDJCQUh5QyxHQUcvQjtBQUNWLGdDQUFRLFNBREU7QUFFVixnQ0FBUSxTQUZFO0FBR1YsaUNBQVM7QUFIQyxxQkFIK0I7O0FBUTdDLHdCQUFJLGFBQWEsU0FBUyxNQUFULENBQWpCO0FBQ0ksZ0NBQVEsTUFBUixJQUFrQixXQUFZLFNBQVMsTUFBVCxFQUFpQixTQUFqQixDQUFaLENBQWxCO0FBREoscUJBRUEsSUFBSSxhQUFhLFNBQVMsU0FBVCxDQUFqQjtBQUNJLGdDQUFRLE1BQVIsSUFBa0IsV0FBWSxTQUFTLFNBQVQsRUFBb0IsU0FBcEIsQ0FBWixDQUFsQjtBQURKLHFCQUVBLFFBQVEsT0FBUixJQUFtQixTQUFLLEdBQUwsQ0FBVSxRQUFRLE1BQVIsQ0FBVixFQUEyQixRQUFRLE1BQVIsQ0FBM0IsQ0FBbkI7QUFDQSwyQkFBTyxRQUFQLElBQW1CLE9BQW5CO0FBQ0g7QUFDRCx1QkFBTyxNQUFQO0FBL0lLO0FBQUE7QUFrSkgsbUJBbEpHLHVCQWtKVSxNQWxKVixFQWtKa0IsSUFsSmxCLEVBa0p3QixJQWxKeEIsRUFrSjhCLE1BbEo5QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQWtKc0MscUJBbEp0QyxtRkFrSjhDLFNBbEo5QztBQWtKeUQsc0JBbEp6RCxtRkFrSmtFLEVBbEpsRTtBQW1KRCxxQkFuSkMsR0FtSk87QUFDUiw4QkFBVSxTQUFLLFFBQUwsQ0FBZSxNQUFmLENBREY7QUFFUiw0QkFBUTtBQUZBLGlCQW5KUDs7QUF1Skwsb0JBQUksUUFBUSxPQUFaLEVBQXFCO0FBQ2pCLDBCQUFNLE9BQU4sSUFBaUIsS0FBakI7QUFDQSwwQkFBTSxRQUFOLElBQWtCLE1BQWxCO0FBQ0gsaUJBSEQsTUFHTztBQUNILHdCQUFJLFFBQVEsS0FBWixFQUFtQjtBQUNmLDhCQUFNLE9BQU4sSUFBaUIsTUFBakI7QUFDSCxxQkFGRCxNQUVPO0FBQ0gsOEJBQU0sUUFBTixJQUFrQixNQUFsQjtBQUNIO0FBQ0QsMEJBQU0sTUFBTixLQUFpQixTQUFqQjtBQUNIO0FBaktJLHVCQWtLZ0IsU0FBSyxnQkFBTCxDQUF1QixTQUFLLE1BQUwsQ0FBYSxLQUFiLEVBQW9CLE1BQXBCLENBQXZCLENBbEtoQjtBQUFBO0FBa0tELHdCQWxLQzs7QUFtS0wsdUJBQU87QUFDSCw0QkFBUSxRQURMO0FBRUgsMEJBQU0sU0FBUyxVQUFULEVBQXFCLFFBQXJCO0FBRkgsaUJBQVA7QUFuS0s7QUFBQTtBQXlLSCxtQkF6S0csdUJBeUtVLEVBektWO0FBQUE7QUFBQTtBQUFBOztBQXlLYyxrQkF6S2QsbUZBeUt1QixFQXpLdkI7O0FBMEtMLG1CQUFPLFNBQUssc0JBQUwsQ0FBNkIsU0FBSyxNQUFMLENBQWE7QUFDN0MsNEJBQVk7QUFEaUMsYUFBYixFQUVqQyxNQUZpQyxDQUE3QixDQUFQO0FBMUtLO0FBK0tILGVBL0tHLG1CQStLTSxJQS9LTjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUErS1ksbUJBL0taLG1GQStLa0IsUUEvS2xCO0FBK0s0QixzQkEvSzVCLG1GQStLcUMsS0EvS3JDO0FBK0s0QyxzQkEvSzVDLG1GQStLcUQsRUEvS3JEO0FBK0t5RCx1QkEvS3pELG1GQStLbUUsU0EvS25FO0FBK0s4RSxvQkEvSzlFLG1GQStLcUYsU0EvS3JGO0FBZ0xELG1CQWhMQyxHQWdMSyxNQUFNLEtBQU4sR0FBYyxHQUFkLEdBQW9CLFNBQUssT0FBekIsR0FBbUMsR0FBbkMsR0FBeUMsSUFBekMsR0FBZ0QsS0FoTHJEOztBQWlMTCxvQkFBSSxPQUFPLFFBQVgsRUFBcUI7QUFDakIsd0JBQUksT0FBTyxJQUFQLENBQWEsTUFBYixFQUFxQixNQUF6QjtBQUNJLCtCQUFPLE1BQU0sU0FBSyxTQUFMLENBQWdCLE1BQWhCLENBQWI7QUFESjtBQUVILGlCQUhELE1BR087QUFDQyx5QkFERCxHQUNTLFNBQUssT0FBTCxDQUFjLFNBQUssTUFBTCxDQUFhO0FBQ25DLG1DQUFXLFNBQUs7QUFEbUIscUJBQWIsRUFFdkIsTUFGdUIsQ0FBZCxDQURUO0FBSUg7O0FBQ0ksK0JBTEQsR0FLZSxTQUFLLFNBQUwsQ0FBZ0IsS0FBaEIsSUFBeUIsY0FBekIsR0FBMEMsU0FBSyxNQUw5RDs7QUFNSCwwQkFBTSxNQUFOLElBQWdCLFNBQUssSUFBTCxDQUFXLFNBQUssTUFBTCxDQUFhLFdBQWIsQ0FBWCxFQUFzQyxXQUF0QyxFQUFoQjtBQUNBLDJCQUFPLFNBQUssU0FBTCxDQUFnQixLQUFoQixDQUFQO0FBQ0EsOEJBQVUsRUFBRSxnQkFBZ0IsbUNBQWxCLEVBQVY7QUFDSDtBQUNELHNCQUFNLFNBQUssSUFBTCxDQUFVLEtBQVYsSUFBbUIsR0FBekI7QUE5TEssdUJBK0xnQixTQUFLLEtBQUwsQ0FBWSxHQUFaLEVBQWlCLE1BQWpCLEVBQXlCLE9BQXpCLEVBQWtDLElBQWxDLENBL0xoQjtBQUFBO0FBK0xELHdCQS9MQzs7QUFnTUwsb0JBQUksWUFBWSxRQUFoQjtBQUNJLHdCQUFJLENBQUMsU0FBUyxRQUFULENBQUw7QUFDSSw4QkFBTSxJQUFJLGFBQUosQ0FBbUIsU0FBSyxFQUFMLEdBQVUsR0FBVixHQUFnQixTQUFLLElBQUwsQ0FBVyxRQUFYLENBQW5DLENBQU47QUFESjtBQURKLGlCQUdBLE9BQU8sUUFBUDtBQW5NSztBQUFBO0FBQUEsS0FBYjs7QUF1TUE7O0FBRUEsUUFBSSxZQUFZLE9BQVEsTUFBUixFQUFnQjtBQUM1QixjQUFNLFdBRHNCO0FBRTVCLGdCQUFRLFlBRm9CO0FBRzVCLHFCQUFhLElBSGU7QUFJNUIsZ0JBQVE7QUFDSixvQkFBUSxxR0FESjtBQUVKLG1CQUFPLHVCQUZIO0FBR0osbUJBQU8sdUJBSEg7QUFJSixtQkFBTztBQUpILFNBSm9CO0FBVTVCLG1CQUFXO0FBQ1AsdUJBQVcsRUFBRSxNQUFNLFNBQVIsRUFBbUIsVUFBVSxTQUE3QixFQUF3QyxRQUFRLEtBQWhELEVBQXVELFNBQVMsS0FBaEUsRUFESjtBQUVQLHVCQUFXLEVBQUUsTUFBTSxTQUFSLEVBQW1CLFVBQVUsU0FBN0IsRUFBd0MsUUFBUSxLQUFoRCxFQUF1RCxTQUFTLEtBQWhFO0FBRko7QUFWaUIsS0FBaEIsQ0FBaEI7O0FBZ0JBOztBQUVBLFFBQUksWUFBWSxPQUFRLE1BQVIsRUFBZ0I7QUFDNUIsY0FBTSxXQURzQjtBQUU1QixnQkFBUSxZQUZvQjtBQUc1QixxQkFBYSxDQUFFLElBQUYsRUFBUSxJQUFSLENBSGU7QUFJNUIsZ0JBQVE7QUFDSixvQkFBUSxxR0FESjtBQUVKLG1CQUFPLHdCQUZIO0FBR0osbUJBQU8sd0JBSEg7QUFJSixtQkFBTyxDQUNILDZDQURHLEVBRUgsMENBRkc7QUFKSCxTQUpvQjtBQWE1QixtQkFBVztBQUNQLHVCQUFXLEVBQUUsTUFBTSxTQUFSLEVBQW1CLFVBQVUsU0FBN0IsRUFBd0MsUUFBUSxLQUFoRCxFQUF1RCxTQUFTLEtBQWhFLEVBREo7QUFFUCx1QkFBVyxFQUFFLE1BQU0sU0FBUixFQUFtQixVQUFVLFNBQTdCLEVBQXdDLFFBQVEsS0FBaEQsRUFBdUQsU0FBUyxLQUFoRSxFQUZKO0FBR1AsdUJBQVcsRUFBRSxNQUFNLFNBQVIsRUFBbUIsVUFBVSxTQUE3QixFQUF3QyxRQUFRLEtBQWhELEVBQXVELFNBQVMsS0FBaEUsRUFISjtBQUlQLHVCQUFXLEVBQUUsTUFBTSxTQUFSLEVBQW1CLFVBQVUsU0FBN0IsRUFBd0MsUUFBUSxLQUFoRCxFQUF1RCxTQUFTLEtBQWhFO0FBSko7QUFiaUIsS0FBaEIsQ0FBaEI7O0FBcUJBOztBQUVBLFFBQUksT0FBTyxPQUFRLE1BQVIsRUFBZ0I7QUFDdkIsY0FBTSxNQURpQjtBQUV2QixnQkFBUSxNQUZlO0FBR3ZCLHFCQUFhLENBQUUsSUFBRixFQUFRLElBQVIsQ0FIVTtBQUl2QixnQkFBUTtBQUNKLG9CQUFRLHFHQURKO0FBRUosbUJBQU8sc0JBRkg7QUFHSixtQkFBTyxzQkFISDtBQUlKLG1CQUFPO0FBSkgsU0FKZTtBQVV2QixtQkFBVztBQUNQLHVCQUFXLEVBQUUsTUFBTSxTQUFSLEVBQW1CLFVBQVUsU0FBN0IsRUFBd0MsUUFBUSxLQUFoRCxFQUF1RCxTQUFTLEtBQWhFLEVBREo7QUFFUCx1QkFBVyxFQUFFLE1BQU0sU0FBUixFQUFtQixVQUFVLFNBQTdCLEVBQXdDLFFBQVEsS0FBaEQsRUFBdUQsU0FBUyxLQUFoRSxFQUZKO0FBR1AsdUJBQVcsRUFBRSxNQUFNLFNBQVIsRUFBbUIsVUFBVSxTQUE3QixFQUF3QyxRQUFRLEtBQWhELEVBQXVELFNBQVMsS0FBaEUsRUFISjtBQUlQLHVCQUFXLEVBQUUsTUFBTSxTQUFSLEVBQW1CLFVBQVUsU0FBN0IsRUFBd0MsUUFBUSxLQUFoRCxFQUF1RCxTQUFTLEtBQWhFO0FBSko7QUFWWSxLQUFoQixDQUFYOztBQWtCQTs7QUFFQSxRQUFJLFVBQVU7O0FBRVYsY0FBTSxTQUZJO0FBR1YsZ0JBQVEsU0FIRTtBQUlWLHFCQUFhLENBQUUsSUFBRixFQUFRLElBQVIsQ0FKSDtBQUtWLHFCQUFhLElBTEg7QUFNVixtQkFBVyxJQU5EO0FBT1YsZ0JBQVE7QUFDSixvQkFBUSxxR0FESjtBQUVKLG1CQUFPLHlCQUZIO0FBR0osbUJBQU8seUJBSEg7QUFJSixtQkFBTyxDQUNILDhDQURHLEVBRUgseUNBRkc7QUFKSCxTQVBFO0FBZ0JWLGVBQU87QUFDSCxzQkFBVTtBQUNOLHVCQUFPLENBQ0gsV0FERyxFQUVILGtCQUZHLEVBR0gsa0JBSEcsRUFJSCxpQkFKRyxFQUtILDRCQUxHLEVBTUgsMkJBTkc7QUFERCxhQURQO0FBV0gsdUJBQVc7QUFDUCx1QkFBTyxDQUNILDZCQURHLEVBRUgsTUFGRyxFQUdILGdCQUhHLEVBSUgsOEJBSkcsRUFLSCxhQUxHLEVBTUgsb0JBTkcsRUFPSCxtQkFQRyxDQURBO0FBVVAsd0JBQVEsQ0FDSixhQURJLEVBRUosZ0JBRkksRUFHSix1QkFISSxFQUlKLG1CQUpJLEVBS0oseUJBTEksQ0FWRDtBQWlCUCwwQkFBVSxDQUNOLDJCQURNLEVBRU4sd0JBRk07QUFqQkg7QUFYUixTQWhCRztBQWtEVixtQkFBVztBQUNQLHVCQUFXLEVBQUUsTUFBTSxLQUFSLEVBQWUsVUFBVSxTQUF6QixFQUFvQyxRQUFRLEtBQTVDLEVBQW1ELFNBQVMsS0FBNUQ7QUFESixTQWxERDs7QUFzREosb0JBdERJO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBdURlLFNBQUssY0FBTCxFQXZEZjtBQUFBO0FBdURGLHdCQXZERTtBQXdERixzQkF4REUsR0F3RE8sRUFBRSxRQUFRLFFBQVYsRUF4RFA7O0FBeUROLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksU0FBSyxVQUFMLENBQWdCLE1BQXBDLEVBQTRDLEdBQTVDLEVBQWlEO0FBQ3pDLDRCQUR5QyxHQUM5QixTQUFLLFVBQUwsQ0FBZ0IsQ0FBaEIsQ0FEOEI7QUFFekMsNkJBRnlDLEdBRTdCLFNBQVMsV0FBVCxFQUY2QjtBQUd6QywyQkFIeUMsR0FHL0I7QUFDVixnQ0FBUSxTQURFO0FBRVYsZ0NBQVEsU0FGRTtBQUdWLGlDQUFTO0FBSEMscUJBSCtCO0FBUXpDLDJCQVJ5QyxHQVEvQixhQUFhLFNBUmtCO0FBU3pDLDBCQVR5QyxHQVNoQyxZQUFZLFNBVG9COztBQVU3Qyx3QkFBSSxXQUFXLFFBQWY7QUFDSSxnQ0FBUSxNQUFSLElBQWtCLFNBQVMsT0FBVCxDQUFsQjtBQURKLHFCQUVBLElBQUksVUFBVSxRQUFkO0FBQ0ksZ0NBQVEsTUFBUixJQUFrQixTQUFTLE1BQVQsQ0FBbEI7QUFESixxQkFFQSxRQUFRLE9BQVIsSUFBbUIsU0FBSyxHQUFMLENBQVUsUUFBUSxNQUFSLENBQVYsRUFBMkIsUUFBUSxNQUFSLENBQTNCLENBQW5CO0FBQ0EsMkJBQU8sUUFBUCxJQUFtQixPQUFuQjtBQUNIO0FBQ0QsdUJBQU8sTUFBUDtBQTFFTTtBQUFBO0FBNkVKLHNCQTdFSSwwQkE2RVksTUE3RVo7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUE2RW9CLHNCQTdFcEIsbUZBNkU2QixFQTdFN0I7QUFBQSx1QkE4RWdCLFNBQUssb0JBQUwsQ0FBMkIsU0FBSyxNQUFMLENBQWE7QUFDMUQsMEJBQU0sU0FBSyxRQUFMLENBQWUsTUFBZjtBQURvRCxpQkFBYixFQUU5QyxNQUY4QyxDQUEzQixDQTlFaEI7QUFBQTtBQThFRix5QkE5RUU7QUFpRkYseUJBakZFLEdBaUZVLFNBQUssWUFBTCxFQWpGVjtBQWtGRixzQkFsRkUsR0FrRk87QUFDVCw0QkFBUSxFQURDO0FBRVQsNEJBQVEsRUFGQztBQUdULGlDQUFhLFNBSEo7QUFJVCxnQ0FBWSxTQUFLLE9BQUwsQ0FBYyxTQUFkO0FBSkgsaUJBbEZQO0FBd0ZGLHFCQXhGRSxHQXdGTSxDQUFFLE1BQUYsRUFBVSxNQUFWLENBeEZOOztBQXlGTixxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLE1BQU0sTUFBMUIsRUFBa0MsR0FBbEMsRUFBdUM7QUFDL0Isd0JBRCtCLEdBQ3hCLE1BQU0sQ0FBTixDQUR3QjtBQUUvQiwwQkFGK0IsR0FFdEIsVUFBVSxJQUFWLENBRnNCOztBQUduQyx5QkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLE9BQU8sTUFBM0IsRUFBbUMsR0FBbkMsRUFBd0M7QUFDaEMsNkJBRGdDLEdBQ3hCLE9BQU8sQ0FBUCxDQUR3QjtBQUVoQyw2QkFGZ0MsR0FFeEIsTUFBTSxPQUFOLENBRndCO0FBR2hDLDhCQUhnQyxHQUd2QixNQUFNLFFBQU4sQ0FIdUI7QUFJaEMsbUNBSmdDLEdBSXBCLE1BQU0sV0FBTixJQUFxQixJQUpEOztBQUtwQywrQkFBTyxJQUFQLEVBQWEsSUFBYixDQUFtQixDQUFFLEtBQUYsRUFBUyxNQUFULEVBQWlCLFdBQWpCLENBQW5CO0FBQ0g7QUFDSjtBQUNELHVCQUFPLE1BQVAsSUFBaUIsU0FBSyxNQUFMLENBQWEsT0FBTyxNQUFQLENBQWIsRUFBNkIsQ0FBN0IsRUFBZ0MsSUFBaEMsQ0FBakI7QUFDQSx1QkFBTyxNQUFQO0FBckdNO0FBQUE7QUF3R0osbUJBeEdJLHVCQXdHUyxNQXhHVDtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQXlHYSxTQUFLLHFCQUFMLENBQTRCO0FBQzNDLDBCQUFNLFNBQUssUUFBTCxDQUFlLE1BQWY7QUFEcUMsaUJBQTVCLENBekdiO0FBQUE7QUF5R0Ysc0JBekdFO0FBNEdGLHlCQTVHRSxHQTRHVSxPQUFPLElBQVAsSUFBZSxJQTVHekI7O0FBNkdOLHVCQUFPO0FBQ0gsaUNBQWEsU0FEVjtBQUVILGdDQUFZLFNBQUssT0FBTCxDQUFjLFNBQWQsQ0FGVDtBQUdILDRCQUFRLFdBQVksT0FBTyxNQUFQLENBQVosQ0FITDtBQUlILDJCQUFPLFdBQVksT0FBTyxLQUFQLENBQVosQ0FKSjtBQUtILDJCQUFPLFdBQVksT0FBTyxLQUFQLENBQVosQ0FMSjtBQU1ILDJCQUFPLFdBQVksT0FBTyxLQUFQLENBQVosQ0FOSjtBQU9ILDRCQUFRLFdBQVksT0FBTyxNQUFQLENBQVosQ0FQTDtBQVFILDRCQUFRLFdBQVksT0FBTyxNQUFQLENBQVosQ0FSTDtBQVNILDZCQUFTLFNBVE47QUFVSCw2QkFBUyxTQVZOO0FBV0gsNEJBQVEsV0FBWSxPQUFPLE9BQVAsQ0FBWixDQVhMO0FBWUgsOEJBQVUsU0FaUDtBQWFILGtDQUFjLFdBQVksT0FBTyxXQUFQLENBQVosQ0FiWDtBQWNILCtCQUFXLFNBZFI7QUFlSCxrQ0FBYyxTQWZYO0FBZ0JILG1DQUFlLFdBQVksT0FBTyxRQUFQLENBQVosQ0FoQlo7QUFpQkgsNEJBQVE7QUFqQkwsaUJBQVA7QUE3R007QUFBQTtBQWtJSixtQkFsSUksdUJBa0lTLE1BbElUO0FBQUE7QUFBQTtBQUFBOztBQWtJaUIsa0JBbElqQixtRkFrSTBCLEVBbEkxQjs7QUFtSU4sbUJBQU8sU0FBSyxxQkFBTCxDQUE0QixTQUFLLE1BQUwsQ0FBYTtBQUM1QyxzQkFBTSxTQUFLLFFBQUwsQ0FBZSxNQUFmO0FBRHNDLGFBQWIsRUFFaEMsTUFGZ0MsQ0FBNUIsQ0FBUDtBQW5JTTtBQXdJSixtQkF4SUksdUJBd0lTLE1BeElULEVBd0lpQixJQXhJakIsRUF3SXVCLElBeEl2QixFQXdJNkIsTUF4STdCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBd0lxQyxxQkF4SXJDLG1GQXdJNkMsU0F4STdDO0FBd0l3RCxzQkF4SXhELG1GQXdJaUUsRUF4SWpFO0FBeUlGLHFCQXpJRSxHQXlJTTtBQUNSLDRCQUFRLFNBQUssVUFBTCxDQUFpQixJQUFqQixJQUF5QixPQUR6QjtBQUVSLGdDQUFZLFNBQUssUUFBTCxDQUFlLE1BQWYsQ0FGSjtBQUdSLGlDQUFhLElBSEw7QUFJUiw4QkFBVTtBQUpGLGlCQXpJTjs7QUErSU4sb0JBQUksUUFBUSxRQUFaO0FBQ0ksMEJBQU0sT0FBTixJQUFpQixLQUFqQjtBQURKLGlCQS9JTSxPQWlKZSxTQUFLLHFCQUFMLENBQTRCLFNBQUssTUFBTCxDQUFhLEtBQWIsRUFBb0IsTUFBcEIsQ0FBNUIsQ0FqSmY7QUFBQTtBQWlKRix3QkFqSkU7O0FBa0pOLHVCQUFPO0FBQ0gsNEJBQVEsUUFETDtBQUVILDBCQUFNLFNBQVMsTUFBVDtBQUZILGlCQUFQO0FBbEpNO0FBQUE7QUF3SkosbUJBeEpJLHVCQXdKUyxFQXhKVDtBQUFBO0FBQUE7QUFBQTs7QUF3SmEsa0JBeEpiLG1GQXdKc0IsRUF4SnRCOztBQXlKTixtQkFBTyxTQUFLLHNCQUFMLENBQTZCLFNBQUssTUFBTCxDQUFhO0FBQzdDLCtCQUFlO0FBRDhCLGFBQWIsRUFFakMsTUFGaUMsQ0FBN0IsQ0FBUDtBQXpKTTtBQThKSixlQTlKSSxtQkE4SkssSUE5Skw7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUE4SlcsbUJBOUpYLG1GQThKaUIsUUE5SmpCO0FBOEoyQixzQkE5SjNCLG1GQThKb0MsS0E5SnBDO0FBOEoyQyxzQkE5SjNDLG1GQThKb0QsRUE5SnBEO0FBOEp3RCx1QkE5SnhELG1GQThKa0UsU0E5SmxFO0FBOEo2RSxvQkE5SjdFLG1GQThKb0YsU0E5SnBGO0FBK0pGLG1CQS9KRSxHQStKSSxTQUFLLElBQUwsQ0FBVSxLQUFWLElBQW1CLEdBQW5CLEdBQXlCLFNBQUssT0FBOUIsR0FBd0MsR0FBeEMsR0FBOEMsU0FBSyxhQUFMLENBQW9CLElBQXBCLEVBQTBCLE1BQTFCLENBL0psRDtBQWdLRixxQkFoS0UsR0FnS00sU0FBSyxJQUFMLENBQVcsTUFBWCxFQUFtQixTQUFLLGFBQUwsQ0FBb0IsSUFBcEIsQ0FBbkIsQ0FoS047O0FBaUtOLG9CQUFJLE9BQU8sUUFBWCxFQUFxQjtBQUNqQix3QkFBSSxPQUFPLElBQVAsQ0FBYSxLQUFiLEVBQW9CLE1BQXhCO0FBQ0ksK0JBQU8sTUFBTSxTQUFLLFNBQUwsQ0FBZ0IsS0FBaEIsQ0FBYjtBQURKO0FBRUgsaUJBSEQsTUFHTztBQUNILDJCQUFPLFNBQUssSUFBTCxDQUFXLE1BQVgsQ0FBUDtBQUNJLHlCQUZELEdBRVMsU0FBSyxLQUFMLEdBQWMsUUFBZCxFQUZUO0FBR0Msd0JBSEQsR0FHUSxRQUFRLEdBQVIsR0FBYyxJQUh0Qjs7QUFJSCw4QkFBVTtBQUNOLG1DQUFXLFNBQUssTUFEVjtBQUVOLHlDQUFpQixTQUFLLElBQUwsQ0FBVyxTQUFLLE1BQUwsQ0FBYSxJQUFiLENBQVgsRUFBK0IsU0FBSyxNQUFwQyxDQUZYO0FBR04scUNBQWEsS0FIUDtBQUlOLHdDQUFnQjtBQUpWLHFCQUFWO0FBTUg7QUE5S0ssdUJBK0tlLFNBQUssS0FBTCxDQUFZLEdBQVosRUFBaUIsTUFBakIsRUFBeUIsT0FBekIsRUFBa0MsSUFBbEMsQ0EvS2Y7QUFBQTtBQStLRix3QkEvS0U7O0FBZ0xOLG9CQUFJLFlBQVksUUFBaEI7QUFDSSwwQkFBTSxJQUFJLGFBQUosQ0FBbUIsU0FBSyxFQUFMLEdBQVUsR0FBVixHQUFnQixTQUFLLElBQUwsQ0FBVyxRQUFYLENBQW5DLENBQU47QUFESixpQkFFQSxPQUFPLFFBQVA7QUFsTE07QUFBQTtBQUFBLEtBQWQ7O0FBc0xBOztBQUVBLFFBQUksV0FBVzs7QUFFWCxjQUFNLFVBRks7QUFHWCxnQkFBUSxVQUhHO0FBSVgscUJBQWEsSUFKRjtBQUtYLHFCQUFhLEdBTEYsRUFLTztBQUNsQiwyQkFBbUIsSUFOUjtBQU9YLGdCQUFRO0FBQ0osb0JBQVEscUdBREo7QUFFSixtQkFBTztBQUNILDBCQUFVLDZCQURQO0FBRUgsMkJBQVc7QUFGUixhQUZIO0FBTUosbUJBQU8sc0JBTkg7QUFPSixtQkFBTyxDQUNILG1DQURHLEVBRUgsOEJBRkc7QUFQSCxTQVBHO0FBbUJYLGVBQU87QUFDSCxzQkFBVTtBQUNOLHVCQUFPLENBQ0gsaUJBREcsRUFFSCxpQkFGRyxFQUdILGtCQUhHLEVBSUgsa0JBSkcsRUFLSCxpQkFMRyxFQU1ILGNBTkcsRUFPSCxvQkFQRztBQURELGFBRFA7QUFZSCx1QkFBVztBQUNQLHdCQUFRLENBQ0osS0FESSxFQUVKLGlCQUZJLEVBR0osYUFISSxFQUlKLHFCQUpJLEVBS0osaUJBTEksRUFNSixvQkFOSSxFQU9KLG1CQVBJLEVBUUosV0FSSSxFQVNKLFlBVEksRUFVSixXQVZJLEVBV0osbUJBWEksRUFZSixnQ0FaSSxFQWFKLGdCQWJJLEVBY0osd0JBZEksRUFlSix3QkFmSSxFQWdCSiwyQkFoQkksRUFpQkosZUFqQkksRUFrQkosc0JBbEJJLEVBbUJKLDRCQW5CSSxFQW9CSixzQkFwQkksRUFxQkosa0JBckJJLEVBc0JKLG1CQXRCSSxFQXVCSix3QkF2QkksRUF3Qkosb0JBeEJJLEVBeUJKLE1BekJJLEVBMEJKLGlCQTFCSSxFQTJCSixpQkEzQkksRUE0QkosVUE1Qkk7QUFERDtBQVpSLFNBbkJJOztBQWlFTCxvQkFqRUs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkFrRWEsU0FBSyxxQkFBTCxFQWxFYjtBQUFBO0FBa0VILHVCQWxFRztBQW1FSCxvQkFuRUcsR0FtRUksT0FBTyxJQUFQLENBQWEsT0FBYixDQW5FSjtBQW9FSCxzQkFwRUcsR0FvRU0sRUFwRU47O0FBcUVQLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksS0FBSyxNQUF6QixFQUFpQyxHQUFqQyxFQUFzQztBQUM5QixzQkFEOEIsR0FDekIsS0FBSyxDQUFMLENBRHlCO0FBRTlCLDBCQUY4QixHQUVyQixRQUFRLEVBQVIsQ0FGcUI7QUFBQSxpQ0FHWixHQUFHLEtBQUgsQ0FBVSxHQUFWLENBSFk7QUFBQTtBQUc1Qix5QkFINEI7QUFHckIsd0JBSHFCO0FBSTlCLDBCQUo4QixHQUlyQixPQUFPLEdBQVAsR0FBYSxLQUpROztBQUtsQywyQkFBTyxJQUFQLENBQWE7QUFDVCw4QkFBTSxFQURHO0FBRVQsa0NBQVUsTUFGRDtBQUdULGdDQUFRLElBSEM7QUFJVCxpQ0FBUyxLQUpBO0FBS1QsZ0NBQVE7QUFMQyxxQkFBYjtBQU9IO0FBQ0QsdUJBQU8sTUFBUDtBQWxGTztBQUFBO0FBcUZMLG9CQXJGSztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkFzRkQsU0FBSyxXQUFMLEVBdEZDO0FBQUE7QUFBQSx1QkF1RmMsU0FBSyxpQ0FBTCxDQUF3QztBQUN6RCwrQkFBVztBQUQ4QyxpQkFBeEMsQ0F2RmQ7QUFBQTtBQXVGSCx3QkF2Rkc7QUEwRkgsc0JBMUZHLEdBMEZNLEVBQUUsUUFBUSxRQUFWLEVBMUZOO0FBMkZILDBCQTNGRyxHQTJGVSxPQUFPLElBQVAsQ0FBYSxRQUFiLENBM0ZWOztBQTRGUCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFdBQVcsTUFBL0IsRUFBdUMsR0FBdkMsRUFBNEM7QUFDcEMsNEJBRG9DLEdBQ3pCLFdBQVcsQ0FBWCxDQUR5QjtBQUVwQywyQkFGb0MsR0FFMUIsU0FBUyxRQUFULENBRjBCO0FBR3BDLDJCQUhvQyxHQUcxQjtBQUNWLGdDQUFRLFdBQVksUUFBUSxXQUFSLENBQVosQ0FERTtBQUVWLGdDQUFRLFdBQVksUUFBUSxVQUFSLENBQVosQ0FGRTtBQUdWLGlDQUFTO0FBSEMscUJBSDBCOztBQVF4Qyw0QkFBUSxPQUFSLElBQW1CLFNBQUssR0FBTCxDQUFVLFFBQVEsTUFBUixDQUFWLEVBQTJCLFFBQVEsTUFBUixDQUEzQixDQUFuQjtBQUNBLDJCQUFPLFFBQVAsSUFBbUIsT0FBbkI7QUFDSDtBQUNELHVCQUFPLE1BQVA7QUF2R087QUFBQTtBQTBHWCxtQkExR1csdUJBMEdFLE1BMUdGLEVBMEdVO0FBQ2pCLGdCQUFJLFFBQVEsV0FBWSxPQUFPLENBQVAsQ0FBWixDQUFaO0FBQ0EsZ0JBQUksU0FBUyxXQUFZLE9BQU8sQ0FBUCxDQUFaLENBQWI7QUFDQSxtQkFBTyxDQUFFLEtBQUYsRUFBUyxNQUFULENBQVA7QUFDSCxTQTlHVTtBQWdIWCxvQkFoSFcsd0JBZ0hHLE9BaEhILEVBZ0hZO0FBQ25CLGdCQUFJLFNBQVMsRUFBYjtBQUNBLGlCQUFLLElBQUksSUFBSSxDQUFiLEVBQWdCLElBQUksUUFBUSxNQUE1QixFQUFvQyxHQUFwQyxFQUF5QztBQUNyQyx1QkFBTyxJQUFQLENBQWEsS0FBSyxXQUFMLENBQWtCLFFBQVEsQ0FBUixDQUFsQixDQUFiO0FBQ0g7QUFDRCxtQkFBTyxNQUFQO0FBQ0gsU0F0SFU7QUF3SEwsc0JBeEhLLDBCQXdIVyxNQXhIWDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQXdIbUIsc0JBeEhuQixtRkF3SDRCLEVBeEg1QjtBQUFBLHVCQXlIRCxTQUFLLFdBQUwsRUF6SEM7QUFBQTtBQUFBLHVCQTBIZSxTQUFLLHdCQUFMLENBQStCLFNBQUssTUFBTCxDQUFhO0FBQzlELG9DQUFnQixTQUFLLFFBQUwsQ0FBZSxNQUFmO0FBRDhDLGlCQUFiLEVBRWxELE1BRmtELENBQS9CLENBMUhmO0FBQUE7QUEwSEgseUJBMUhHO0FBNkhILHlCQTdIRyxHQTZIUyxTQUFLLFlBQUwsRUE3SFQ7QUE4SEgsc0JBOUhHLEdBOEhNO0FBQ1QsNEJBQVEsRUFEQztBQUVULDRCQUFRLEVBRkM7QUFHVCxpQ0FBYSxTQUhKO0FBSVQsZ0NBQVksU0FBSyxPQUFMLENBQWMsU0FBZDtBQUpILGlCQTlITjtBQW9JSCxxQkFwSUcsR0FvSUssQ0FBRSxNQUFGLEVBQVUsTUFBVixDQXBJTDs7QUFxSVAscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxNQUFNLE1BQTFCLEVBQWtDLEdBQWxDLEVBQXVDO0FBQy9CLHdCQUQrQixHQUN4QixNQUFNLENBQU4sQ0FEd0I7O0FBRW5DLDJCQUFPLElBQVAsSUFBZSxTQUFLLFlBQUwsQ0FBbUIsVUFBVSxJQUFWLENBQW5CLENBQWY7QUFDSDtBQUNELHVCQUFPLE1BQVA7QUF6SU87QUFBQTtBQTRJWCxtQkE1SVcsdUJBNElFLE1BNUlGLEVBNElVLE1BNUlWLEVBNElrQjtBQUN6QixnQkFBSSxZQUFZLEtBQUssWUFBTCxFQUFoQjtBQUNBLG1CQUFPO0FBQ0gsNkJBQWEsU0FEVjtBQUVILDRCQUFZLEtBQUssT0FBTCxDQUFjLFNBQWQsQ0FGVDtBQUdILHdCQUFRLFdBQVksT0FBTyxVQUFQLENBQVosQ0FITDtBQUlILHVCQUFPLFdBQVksT0FBTyxTQUFQLENBQVosQ0FKSjtBQUtILHVCQUFPLFdBQVksT0FBTyxZQUFQLENBQVosQ0FMSjtBQU1ILHVCQUFPLFdBQVksT0FBTyxXQUFQLENBQVosQ0FOSjtBQU9ILHdCQUFRLFNBUEw7QUFRSCx3QkFBUSxTQVJMO0FBU0gseUJBQVMsU0FUTjtBQVVILHlCQUFTLFNBVk47QUFXSCx3QkFBUSxXQUFZLE9BQU8sTUFBUCxDQUFaLENBWEw7QUFZSCwwQkFBVSxXQUFZLE9BQU8sZUFBUCxDQUFaLENBWlA7QUFhSCw4QkFBYyxTQWJYO0FBY0gsMkJBQVcsU0FkUjtBQWVILDhCQUFjLFdBQVksT0FBTyxZQUFQLENBQVosQ0FmWDtBQWdCSCwrQkFBZSxXQUFZLE9BQU8sYUFBUCxDQUFaLENBaEJaO0FBaUJILHdCQUFRO0FBakJMLGFBQVA7QUFtQkgsU0FqS1U7QUFtS0wsb0JBbktLO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBb0tELFNBQUssV0FBTCxFQXBLQztBQUFBO0FBQUEsdUJBcUthLFNBQUsscUJBQUwsRUFyS2I7QUFBQTtBQXFLSCx1QkFyS0c7QUFzS0gsbUJBdEtHLEdBc0tHLE9BQU8sSUFBUCxDQUFhLE9BQWIsQ0F0S0g7QUF1S0gsc0JBdktHLEdBdUtNLEVBdktOOztBQXdLUCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLElBQUksTUFBeEIsRUFBZ0MsR0FBaEMsRUFBcUM7QUFDN0Isc0JBRDZCLEdBQ3hCLElBQUksQ0FBSixDQUR3QjtBQUU3QiwwQkFGNkIsR0FFcEIsU0FBSyxhQUFMLENBQW1CLEVBQW5CLENBRm9CO0FBRzdCLDBCQUg2QixHQUdwQixPQUFPLFFBQVAsQ0FIb0I7QUFJN0IsMEJBSjZCLEdBSXBCLFFBQVEsRUFBUixDQUpvQjs7QUFLakMsMkJBQU8sTUFBUCxJQUFpQixTQUFLLFdBQUwsQ0FBa0IsTUFBbEIsRUFBMEIsTUFBMUIsQ0FBakI7QUFDSDtBQUNELHVCQUFPLE1BQVA7QUEvS087QUFBQTtBQWtMTCxtQkFsTEssdUJBa0xRLE1BbExSO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkFtTEQsU0FBSyxXQUFMLEVBbkxDO0FBQUE7QUFvTEgsaUJBcExHLEdBb0xDLFNBQUssTUFBTCxDQUFhLE1BQWIsQ0FwTEQ7QUFBQSx1QkFxTGEsU0FBSyxxQkFBTCxFQXJMYjtBQUFBO0FBcUxILHVCQXJMRztBQXNMSCxzQkF0TEcsR0FzTE0sUUFBUSxFQUFFLElBQUYsQ0FBUixDQXRMTjs7QUF1TFAsdUJBQU8sU0FBSyxXQUFMLENBQWtCLE1BQWxCLEVBQTBCLENBQTFCLENBQVA7QUF2TE87QUFBQTtBQTBMWCxrQkExTFcsc0JBMExDLEtBMUxELEVBMEw0QjtBQUFBLGdCQUFwQixNQUFvQix1RUFBWCxTQUFXOztBQUNuQyxnQkFBSSxZQUFZLEtBQUssU0FBTCxDQUFnQixNQUFNLE1BQU4sQ0FBaEIsQ0FBaEI7QUFDQSxnQkFBSSxLQUFLLFNBQVQ7QUFDQSxnQkFBSSxRQUFRLFNBQVo7QUFDQSxnQkFBSSxhQUFhLEtBQWpCLEVBQ0ksS0FBSyxNQUFNLFNBQU4sQ0FBTDtBQUNKLGdCQUFJLGlCQUFpQixLQUFyQixFQUNJLFFBQVEsTUFBTSxhQUFOLENBQVI7QUFDSixtQkFBTztBQUNILHdCQUFRLEtBREw7QUFFSCw2QkFBYSxTQUZWO0FBR0gsNEJBQVksS0FBSyxPQUFMLENBQWMsU0FBZCxDQUhUO0FBSUgsMEJBQVUsT0FBTyxRQUFQLENBSlA7QUFLSCxzQkFBTSxFQUxIO0FBTUgseUJBQVMsS0FOTjtBQU9ILHdCQUFRLFNBUEw7QUFRSCx3QkFBUSxNQUFNLE1BQU4sQ0FSTDtBQVNILHlCQUFTLFdBQVksTUFBTSxNQUFOLENBQVosQ0FUTjtBQVVILDBCQUFVLFdBQVksTUFBTSxRQUFOLENBQVo7QUFWUCxhQUFQO0FBWUgsU0E5TVU7QUFnTkwsbUJBaE5LLHVCQWdOUSxNQWhOUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFnTmdCLHNCQWhOaEIsbUZBZ055QixFQWhOekI7QUFBQSx1QkFpTkQsU0FBSyxXQUFMLEVBak5DO0FBQUE7QUFrTkgsaUJBbE5HLEdBa05DLFNBQUssTUFBTCxDQUFhLE1BQWIsQ0FsTkQ7QUFBQSx1QkFtTlksU0FBSywyQkFBTCxDQUFrQyxTQUFLLE1BQUwsQ0FBYTtBQUM5RCxvQ0FBZ0IsRUFBRSxJQUFGLENBRDhDO0FBRTlELDJCQUFPLFNBQUssT0FBTCxFQUZ1RCxDQUV0QztBQUZzQyxpQkFBYixFQUdsRCxNQUhrRCxDQUFsQyxDQW5OWjtBQUFBO0FBbU5ILHNCQW5ORzs7QUF1TlAsdUJBQU8sU0FBSyxXQUFMLENBQWtCLE1BQWxCLEVBQTBCLENBQTFCLENBQVA7QUF2Tk87QUFBQTtBQTBOTCxxQkExTks7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUEwTlUsc0JBMU5WLG1GQTBObUIsU0ExTm5CO0FBME44QixzQkExTjlCLG1GQTBOdUMsRUExTnZDO0FBMk5ILG1CQTNORyxHQTJORyxTQUFLLE9BQUwsRUEzTkg7QUE0TkgsdUJBNU5HLEdBNE5PLFNBQUssTUFBTCxDQUFhO0FBQ3ZCLG9DQUFnQixLQURPO0FBRXZCLDJCQUFPLFNBQUssT0FBTCxFQUZnQixDQUVDO0FBRkQsaUJBQWIsRUFHWCxNQUhXLENBNU5QOztBQWdPUCxvQkFBSSxNQUFKLEVBQVk7QUFDSixzQkFESSxHQUNBLFNBQUssTUFBTCxDQUFhLE1BQWIsQ0FEQTs7QUFFUiw0QkFBUSxjQUFSLElBQTBCLEdBQUUsSUFBRixDQUExQjtBQUNIO0FBbk9NLHVCQW9PWSxTQUFLLDZCQUFMLENBQW9DLE9BQXBDLENBcE9aO0FBQUE7QUFvT0gsc0JBcE9HOztBQXFPUCxvQkFBSSxNQUFKO0FBQ0ksMkJBQU8sU0FBSyxXQUFMLENBQWtCLE1BQWxCLEVBQTBCLENBQTFCLENBQVA7QUFESjtBQUVJLDBCQUZKLEdBRWEsRUFBRSxRQUFRLE1BQVYsRUFGYjtBQUdJLHVCQUhKLEdBR1UsT0FBTyxJQUFQLENBQWEsTUFBYixDQUhWOztBQUlBLHlCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksSUFBSSxNQUF4QixFQUFnQyxHQUFoQyxFQUFxQztBQUM3QiwwQkFENkIsR0FDeEIsSUFBSSxDQUFKLENBRHdCO0FBRTdCLCtCQUY2QixHQUVwQixRQUFPLEVBQVAsQ0FGb0I7QUFHN0IsZ0NBSDZCLEdBR3BCLFNBQUssYUFBTCxDQUFtQixFQUFuQixDQUhvQjtBQUk3Qiw4QkFKNkIsR0FJcEIsU0FBTyxRQUFQLENBSm9COztBQUtqQywrQkFBTyxNQUFQLElBQWlCLFNBQUssV0FBTCxDQUFrQixPQUFsQixFQUEwQixRQUExQixDQUFqQjtBQUNIO0FBQ0QsMkJBQU8sTUFBUDtBQVhBO0FBck9PO0FBQUE7QUFtUFgsa0JBblBXLHNCQW1QQyxLQW5QRCxFQW1QUSxNQW5QUixFQW1QZ0I7QUFDdkIsbUJBQU87QUFDSCxzQkFBTSxNQUFNLGFBQU4sQ0FESDtBQUVILDZCQUFhLE1BQU0sV0FBTixDQUZWO0FBR0gsNEJBQVksS0FBSyxPQUFMLENBQWMsTUFBTSxXQUFOLENBQWQsQ0FIVDtBQUlILDBCQUFVLE1BQU0sUUFBTixDQUpQO0FBS0gsMEJBQVUsT0FBTyxRQUFQLENBTFA7QUFNSCx3QkFBUSxNQUFNLE1BQU4sQ0FOTDtBQU9ILHdCQUFRLE1BQU0sTUFBTixDQVBMO0FBUUgseUJBQVMsTUFBTSxPQUFOLENBUk47QUFTSCwwQkFBVSxNQUFNLFFBQU4sQ0FUUDtBQVVILDBCQUFVLEtBQUssV0FBTCxDQUFrQixNQUFNLGlCQUFOLENBQWxCLEVBQTRDLE1BQTVDO0FBVlAsYUFBUDtBQVlILFNBaFFVO0FBa1FMLHlCQWxRSztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBa1FjLHNCQWxRZCxtRkFrUXVCLFNBbFF2QjtBQWtRa0Msc0JBbFFsQyxtRkFrUTJDLEVBbFEzQztBQW1RSCxpQkFuUUcsR0FtUUMsU0FuUUQ7O0FBb1FQLG9CQUFJLE1BQUo7QUFDSSx3QkFBSSxTQUFLLE1BQUwsQ0FBYSxNQUFiLENBQUo7QUFESixpQkFFSSxJQXRRRyxHQXNRSSxJQUFJLEVBQUUsSUFBRixDQUFKLEdBQWMsS0F0UWxCO0FBQUEsdUJBdVFZLFNBQUssMkJBQUwsQ0FBa0MsU0FBSyxNQUFMLENBQWE7QUFDOUQsb0NBQWdCO0FBRDhDLGlCQUFiLENBQWxDLENBdlFaO0FBQUE7QUF1UUgsc0JBdlFHOztBQTBRUCx1QkFBTyxTQUFLLFdBQUwsQ0FBa0IsTUFBbEIsRUFBMEIsQ0FBMUIsQ0FBUDtBQTFRTztBQUFBO0FBNlFMLG1CQTdRSyx1QkE2UVEsTUE3UVIsRUE2UWdCLElBN1FoQixFQTZRc0IsSUE3UXRCLEVBNlE0QixNQTdRNUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQTZRb0MscUJBN1FwQyxtRkE2UTRDLFNBN1E1QztBQTZRdUQsc0JBN1F2RCxtRkE2UWdFLEVBN1FoRTs7QUE4UVAsb0JBQUksUUFBUSxRQUFaO0FBQ0ksMEJBQU0sSUFBSSxhQUFKLENBQW1CLFNBQUssRUFBTCxHQUFVLDJCQUE3QixDQUFOO0FBREosaUJBOVFPLE9BZ1JELFNBQUssV0FBTCxFQWhSQztBQUFBO0FBaVJILHNCQWpSRyxHQWlSTSxnQkFBZ0IsU0FBSyxVQUFMLENBQWlCLElBQWpCLENBalJ0QjtBQWtSSCxpQkFsUkcsR0FrUkMsU0FBSyxNQUFMLENBQWEsTUFBYixDQWxSRDtBQUFBLHVCQW1SYyxTQUFLLE1BQUwsRUFBYyxTQUFLLE1BQUwsQ0FBYTtBQUM1QyxvQ0FBZ0IsRUFBRSxJQUFGLENBRDRCO0FBRTVDLDRCQUFRLEtBRm9DO0FBRzVDLDhCQUFVO0FBSGtDLGlCQUFiLEVBSWhDLE1BSmdDLENBQWQsQ0FuUmQ7QUFBQTtBQW1SSCx3QkFuUkc7QUF3UkgseUJBeFJHLEdBd1JTLFNBQUssWUFBTCxFQXhSVDtBQXlSSCxxQkF6UkcsR0F5UkssU0FBSyxVQUFMLENBQWlCLFNBQUssTUFBTCxDQUFhO0FBQ3RDLGlDQUFhLFNBRHlCO0FBRXRDLDhCQUFVLE1BRjRCO0FBR3RDLDRCQUFRLElBSDhCO0FBSXRDLDRCQUFRLElBSjhCO0FBS3RDLDZCQUFTLEtBTDZCO0FBTXRDLDhCQUFVO0FBTjRCLGlCQUFiLEVBTzFCLFFBUDBCLENBQWpCLEVBT0UsQ0FQRixDQXpSTDtBQWlTSCxrQkFqU0csR0FpU0UsTUFBTSxJQUFOLENBalNGOztBQWtTUCx5QkFBSyxNQUFMLENBQVksRUFBWixJQUFrQixLQUFsQjtBQUNBLHVCQUFPLFNBQUssTUFBTCxDQUFhLEVBQUUsUUFBUSxRQUFWLEVBQWIsRUFBbUMsS0FBbkMsQ0FBUDtBQW5TTztBQUFBO0FBc1NMLGtCQXRTSyxzQkFzU08sRUF0U1A7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkF1U0QsU0FBSyxXQUFMLEVBdlNDO0FBQUE7QUFBQSx1QkF3U1ksU0FBSyxpQkFBTCxFQXhTWjtBQUFBO0FBd1NILHNCQXhTRztBQXlTSCxxQkF6U0csR0F5U0ssU0FBSyxPQUFMLENBQWMsTUFBZCxFQUFzQixJQUF0QixDQXpTTDs7QUEwU1Asb0JBQUksTUFBTSxLQUFWLEVBQWlCO0FBQ2IsNkJBQUssTUFBTCxDQUFZLEVBQVosSUFBa0IsTUFBTSxFQUFOLENBQWxCO0FBQ0EsMkJBQU8sTUFBTSxFQUFOLENBQVA7QUFDSCxpQkFIRDtBQUdPLHdCQUFJLE1BQU0sU0FBSyxNQUFmLEVBQXVCO0FBQzFCLGlDQUFLLE1BQUwsQ0FBWSxFQUFaLEVBQWdCLFFBQWhCLElBQTRCLFFBQTVCO0FBQ0EsK0JBQU8sU0FBSyxNQUFMLENBQVksRUFBWixDQUFQO0FBQ0gscUJBSE07QUFJUCw4QkFBTSxJQUFJLGFBQUosQ0FBbUIsU0FBSyxFQUFMLEdBQVUsU0FBVixHQUFzQixFQUF0QixHQUEyQixZQUE5QyxDQUFOO0FBSk87QUFIUDtBQTFTTztBQUFBO0FBb1RMLHdCQXBUSyw0QkFvVGEsRUFwVGI7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQW9UaUIsc0JBcFRqQixtRkFvVDBCLEVBcFQxQjtBQUFBLHVCQXFURCxTQUFLLFdBQUwsRUFyVEM7QUFBQTtBQUFBLHVCQXNUWSxTQUFLLDRCQUFMLENBQW1DLFNBQUssTUFBTCxDQUFhO0FBQy9ELG1DQUFlO0FBRGdELGlCQUFiLEVBRW5ELE1BRm1ELENBQW5DLENBdFRaO0FBQUE7QUFzVEgsc0JBdFRHOztBQXlUUCx1QkFBTyxTQUFLLFdBQUwsQ0FBa0IsTUFBbEIsQ0FBUDtBQXpUTztBQUFBO0FBNFRMLG1CQTVUSyx1QkE0VFEsRUE1VFI7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUE0VFksc0JBNVRaLG1GQTRUcUIsRUE1VHJCO0FBQUEsdUJBNlRELFNBQUssV0FBTCxFQTdUQztBQUFBO0FBOFRQLHVCQUFPLFNBQUssc0JBQUwsQ0FBNkIsU0FBSyxNQUFMLENBQWE7QUFDN0MsbUNBQWU7QUFEOEIsaUJBQWIsRUFFakMsTUFGaUMsQ0FBN0IsQ0FBUDtBQTlUTztBQUFBO0FBbVVMLGVBblVLLG1CQW1VSSxJQW5VSjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQW1VVSxtQkFuVVYsbUZBbVVnQixRQW5VaEI7QUFtVTBCLHNCQW5VMUIsbUZBbVVtQyxLQW5VbkM7QUFtVTBDLHNCQW5VMUMsbUZBbVVtRCxFQW5VbkQ7QUFtVXVELHVCQW5VdkQsbUZBbVVpRSxTQW5VakU7QUFtVTRFLG9CQW5VNUUsbUZBbVVtRixTQW5VbkY7QUFvVUgsbUJBcFVHLEdBb1VHLFNBQUssSUFBTCxDQUFVLEtBQVYsRUFBaUIsR0FBakIsQ0FwVUg7QUFxVUgscUJBclVHLEdBcVVLLFNBQUssTUFBTCxDQUFhLEVBQUUsV0FBVyxJQUFiLEVBQWIsRUFBa0MsTUFBbEMsQ0FyVUw7O0FBc1VQLG9CQUFJLE9BQU8sUUFBWCxFQUFxQjtBQUNqQiwyQkFBTyxNQUFNLFNBQUssU0FBTCxDQUFnQixLQUFoQixDQUFiO0FBQ0gsaUJBRkQsTUFFTztBQUNILDBCQUFNLE9BQU4sSUFBaUIsU0FBSyxLQUFMLEVBQWpCO0FBQ0EsMkJBQU8sU0FBSyxTQUFMLENBQWdCLEtBQWhCLENBQVA7QUFDQSw4QkFBVTtBQUNOLHdDQUFnQixtQ0FEVjtBQUVOLCtCQUFPLFNBQUssTUFGTjtBQUdOLGdDQUFRLFNBQUssSUFBTCxDQUFXLFNBQUssTUFBTCxDQUFhLElBQWIsQ0FBWCxFQUErQixTQUFLLE1BQUwsQ0FBYSxTQUFLLE1BQWxCLENBQS9CLEVBQTBELFFBQTFEO0FBSEYscUJBQVY7QUFLSDtBQWhWTSx1QkFpVmMsU0FBSyxLQUFMLENBQVksR0FBWixFQUFpQixNQUFqQixFQUF5QixPQUF6QixFQUFrQyxJQUFsQyxDQWpWZDtBQUFBO0FBaVZILHdCQWpWRzs7QUFrVlAsb0JBQUksV0FBVyxRQUFmLEVBQXlCO0FBQ2pCLHlCQURpQixHQUNULFNBQUssRUFBTCxHQUFVLEdBQVYsR0FBZ0IsU0FBSyxJQUFMLENBQVcsUUFBWCxDQURQO0FBRWpCLDBCQUZpQixHQUVSLFNBQVMsT0FBVCxFQUFrQixPQUFsQixDQUEyQixZQUEzQixLQUE0QyxDQUZwQzs7QUFHckIsd0JBQUksTUFBSjtBQUNJLDhCQUFNLElBQUksaUJBQUosQ0FBdUIsS0FBdkIsQ0FBTjtBQURKLHFCQUVBLE1BQU0sSUFBSSxhQUFKLENBQW1CLEtBQW5CLENBQU47QUFDSDtBQUNELHVCQUFPLFFBQVA7QUF6Vk87QUFBQTtBQUFBLEtBQWY7O0FBNlZBOztBQUVBLFFBQUksYUFBYTs7QUFFYixjQUFNLFlBRk87QUFHYixnQkFBUSxZQUhLO0FBSWIscUJBQWEsSUFKQTtBQUtiLHFCQUFhLElBTEE7QUFNYixtQkFBVyxJQU5FO0FBT2IsZ0JBQVE7QUFDSixvQkFBUSxxR0FESjtBQUVKLG1CQUFPLDRCQUZIO0FBR0osbUJBQU8sNEJBSEg7QUFJSixtQkFBTztBQUpILFNBUEs7QUFhYixlQUFPO0FBQ0gsc0JBQVU7QUFDTix1QkFBTyxDQUNILFlBREcsRUFFSCxRQUZHLEVBR0gsY0FIRztBQURELGFBRFA7QUFRSCx1QkFBVztBQUNQLHdCQUFRLENBQ0osU0FESSxFQUVKLHlCQUZJLEVBR0osb0JBSEksRUFJSixLQUpJLEVBS0osY0FMSSxFQU1KLHVCQU5JLEVBT0osa0JBUEksRUFRSixjQVJJLEVBU0osYUFUSSxFQVVKLE1BVkksRUFXSixtQkFYSTtBQUREO0FBUlIsU0FiTTtBQXFDYixtQkFBVztBQUNQLHVCQUFXLEVBQUUsTUFBTSxTQUFSLEVBQW1CLFVBQVUsU0FBN0IsRUFBd0MsUUFBUSxLQUFoRCxFQUF1RCxTQUFTLEtBQWhFLEVBREo7QUFFUCx1QkFBVyxFQUFFLE1BQU0sU0FBUixFQUFtQixVQUFVLFNBQTdCLEVBQXdDLFFBQVEsS0FBaEQsRUFBdUQsU0FBUyxLQUFoRSxFQUZKO0FBR1AsdUJBQVcsRUFBRSxNQUFNLFNBQVIsRUFBbUIsVUFBVSxTQUE3QixFQUF3QyxRQUFRLEtBQWhELEVBQXVELFNBQVMsS0FBaEUsRUFISjtBQUlQLHVCQUFXLEVBQUUsTUFBTSxTQUFSLEVBQW1CLFVBQVUsU0FBN0IsRUFBd0MsUUFBUSxLQUFoRCxFQUF1RCxTQUFTLEtBQWhFO0FBSkosU0FyQ0U7O0FBNENQLG9CQTVDTztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBNkNZLFNBQUssa0JBQUwsRUE3Q1o7QUFBQTtBQTZDTCx3QkE3Q0s7QUE4Q0wsc0JBOUNLLEdBOENJLEVBQUUsUUFBUSxRQUFWLEVBOUNKOztBQStDVCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFNBQUssVUFBTCxDQUFnQixNQUFwQyxFQUE0QyxHQUE1QyxFQUFpRDtBQUN6Qyw0QkFEeUMsR0FDOUIsU0FBSyxVQUFMLENBQWdCLENBQWhCLENBRDhCO0FBRXpDLDZCQUZ5QyxHQUU3QixTQUFTLFdBQVQsRUFGNkI7QUFHekMsMkJBSHlDLEdBRy9CO0FBQ1YsZ0NBQVEsV0FBWSxTQUFTLFlBQVksWUFBckIsQ0FBWixDQURFO0FBRVYsZ0NBQVEsV0FBWSxTQUFTLFlBQVksV0FBckIsQ0FBWixDQUZFO0FBR1YsaUNBQVMsV0FBWSxTQUFTLFlBQVksVUFBckIsQ0FBWjtBQUhDLHFCQUgrQjs7QUFRN0MsMkJBQU8sUUFBUCxJQUFtQixPQUFuQjtBQUNIO0FBQ0QsdUJBQU8sTUFBUDtBQXpEUztBQUFBO0FBNERQLHNCQTVETywwQkE0RFMsTUE1RFQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBNERpQixzQkE1RGpCLG1GQTREMEIsRUE1RDFCO0FBQUEsdUJBNkRhLFNBQUssa0JBQUwsQ0FBeUIsU0FBSyxNQUFMLENBQWE7QUFDeEQsNEJBQVEsU0FBSyxRQUFMLENBQWUsTUFBZjtBQURnRCxpQkFBYixFQUU1QyxNQUY0QyxDQUF6QixDQTdEYjtBQUFBO0FBNkRMLHlCQTdESztBQWdFTCx5QkFoRUssR0FnRU8sU0FBVSxVQUFVLFdBQVYsQ0FBVixJQUFvQyxJQWhFM0M7QUFpRUwsc0JBakVLLEdBaUVJO0FBQ1QsNEJBQVEsRUFEQztBQUVULDRCQUFRLEVBRkM7QUFHVCxpQ0FBYSxTQUhKO0FBSVQsZ0NBQVksU0FBSyxPQUFMLENBQWMsU0FBZDtBQUpILGlCQWpFSjtBQXVFTCxxQkF2RUssR0F1RUcsQ0FBRSxNQUFGLEVBQVUsTUFBVixDQXZFSDs7QUF3RVQscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxNQUFNLE1BQTFCLEVBQWtDLEdBQWxDLEVBQXVDO0FBQy9CLHdCQUQrQixHQUN4QixNQUFNLENBQU4sQ0FEd0I7QUFFL0IsMEJBRitCLEdBRXRCLFVBQVUsSUFBVixDQUZzQjs7QUFHbkMseUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxPQUFPLE1BQTNCLEVBQW1DLEdBQW5DLEVBQXdDO0FBQ2hDLDZCQURnQyxHQUN4QixPQUFPLENBQVAsQ0FEd0I7QUFFaEMsNkJBRmdDLEdBRXhCLFdBQVksTUFBTSxDQUFOLENBQVosQ0FGd0I7QUFHaEMsOEJBSGdDLEdBR3ZCLFdBQVksTUFBTSxDQUFOLENBQVosQ0FIdUI7O0FBSXBDLCtCQUFPLElBQVAsRUFBYSxJQUFiLENBQW1CLENBQUUsS0FBRixFQUFTLE1BQVQsQ0FBbkI7QUFDSDtBQUNKO0FBQ0QsdUJBQU8sTUFBUDtBQWxGUztBQUFBO0FBcUZQLG1CQXJGTyx1QkFxRk0sTUFyRk47QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkFzRlUsU0FBSyxlQUFMLENBQXNCO0FBQ3JDLDRCQUFRLFNBQUssUUFBTCxDQUFlLE1BQWY7QUFENkIsaUJBQXRCLENBdEZWO0FBQUE7QUFzRkwsc0JBdEZLO0FBeUZMLHlCQXpGSyxHQXlGTyxTQUFVLE9BQU8sV0FBUCxDQUFWLElBQWlDLElBekZ4Qzs7QUEwRlQsdUJBQU87QUFDSCxpQ0FBYSxTQURWO0FBRUgsZ0NBQVksU0FBSyxPQUFMLENBQWMsU0FBZCxDQUZUO0FBR0gsNEJBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQUhMO0FBSUgsMkJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQUpKO0FBS0gsMkJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQUxKO0FBTUgsMkJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQU5KO0FBT0gsNEJBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQVBMO0FBUUgsNEJBQVEsU0FSTDtBQVNILDZCQUFTLFNBVE47QUFVSCw2QkFBUyxTQVZOO0FBV0gsNEJBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQVhMO0FBWUgsOEJBQVUsU0FaUDtBQWFILGtDQUFjLFNBYlg7QUFjSCwrQkFBVyxTQWRSO0FBZUgsa0NBQWMsU0FmWDtBQWdCSCxtQ0FBZSxXQUFZLE9BQU8sUUFBUCxDQUFaLENBaEJaO0FBaUJILDRCQUFRO0FBakJMLGlCQUFQO0FBMUZTO0FBQUE7QUErR1AsbUJBL0dPLHVCQStHTSxNQS9HTjtBQUFBO0FBQUE7QUFBQTs7QUErR2Msa0JBL0dkLG1GQStHdUIsRUEvR3ZCOztBQWdIVCxtQkFBTyxTQUFLLHFCQUFMLENBQTRCLFNBQUssTUFBTCxDQUFhO0FBQzVDLHdCQUFRLFNBQUssUUFBTCxDQUFlLE1BQWY7QUFEb0MsYUFBYixFQUVoQyxNQUZnQyxDQUE1QixDQUFQO0FBaEhTO0FBcUhQLG1CQXJITyx1QkFxSE0sTUFySE4sRUFxSGMsSUFySGQsRUFxSG9CLElBckhwQixFQXFIMEIsTUFySDFCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFxSGtDLHFCQXJIbEMsbUZBcUgwQyxTQXJIMUM7QUFxSHFELHNCQXJIckQsbUZBcUg4RCxFQXJIOUQ7QUFzSEwsc0JBdEhLLEdBc0hJLGdCQUFnQixTQUFLLFVBQUwsQ0FBaUIsSUFBakIsQ0F0SHBCO0FBdUhMLHFCQXZISyxHQXVIRztBQUNSLDhCQUFVLE1BREY7QUFFUiw0QkFBUSxTQUFLLFFBQUwsQ0FBZSxNQUFmO0FBRkEsaUJBdkhIOztBQTJIVCxvQkFBSSxRQUFRLE9BQVo7QUFDSSwwQkFBTSxPQUFOLElBQWlCLEtBQWpCO0FBREosaUJBM0hTLE9BNkhZLFNBQUssTUFBTCxFQUFjLFNBQUssTUFBTCxDQUFhLEtBQWIsRUFBb0IsTUFBcEIsQ0FBZCxDQTdIWjtBQUFBO0FBNkhMLHdCQTdISzs7QUE4SFQsdUJBQU87QUFDSCw0QkFBUSxRQURMO0FBRUgsMEJBQU0sU0FBUyxJQUFULEVBQWUsUUFBZjtBQUZILGlCQUFQO0FBOUhTO0FBQUE7QUFvSVAsbUJBcElPLHVCQW9JTSxFQXBJTjtBQUFBO0FBQUE7QUFBQTs7QUFvSVUsa0JBcElWLG1GQW9JbUIsRUFwSW5COztBQXFJVCxtQkFBTyxTQUFLLHNCQUFMLENBQTZCLFNBQUssTUFBTCxDQUFhO0FBQzdDLHNCQUFNO0FBRHVDLGFBQWIsRUFFakMsTUFGaUMsQ0FBN0IsQ0FBUDtBQXJJUztBQTBJUCxlQTFJTyxtQkEwSUUsSUExSUY7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQTBJUSxtQkExSVIsbUZBMEljLFFBMUlkO0FBMEl3QixzQkExSXhCLG1GQTBJaUMsS0ExSWpDO0FBMEl3QyxzQkExSXhDLG1GQTBJaUQsRUExSWpEO0FBMElxRCx1QkExSXJELG1GQTBJK0QsU0ExSS9EO0FBMEkwRSxvQkExSTFFLG1GQTBJaUYsU0ExSWpGO0FBMklMLG1CQTNJSyxHQTJJQyxTQUFLLElBQUwsQ0FBVSxLQUFWLElBQW1CLEdBQW5CLEdBQXlCLFNBQUssT0FBOUIsR0FBd0MsR0FBeEMsR0FBOEMsSUEzSS9DOztBQTRJVCxvQkFBSSxPQUFPLFFBQVgsRUFBcUI7QUFDakIsMkJBQU8sTUFBTSxTQUFLLFNBQUwsQ0FBZ0IsTUFBaEIsQ0FBYjtBQUNILGlCQUZELE1BRU87QUFDSCx3QkFBSSxDQUFDLFNBQUssR0FBVjtBQUNJLDhCQUFNLElBQUksbUJBQUosQ0FBeUIsU0FBSyxFQUFMLEdBQVUsYUFBVixHQUEwQixTQUFLLEVBQS9CLEdBQW9DLG1DQUE3RCxDQUFOO0FBREoscUJBRUksS0FIRCxHQUdTLFNBQUssS0FBTCxFQUhUO0FBSUMsMkJBSkQsR0FJVyxDQUFFLE1BQU0sUUFBTixFQUFGLEVBQXFCLFNBQUssR0FBMUIsRUFBK0IsU0FBSyxNQUFwQyxFQUE2QyxJQUE3QyxDQUFtRCxFQUFuRCxDQUpYO0FBS0MsNkJBTEQsR0FLYSxTQUFLLElBQUwsQ0FBVyxTQUFLLE1BQUwsQ0FBYSxPQUFiLENBQVgsRUFBa0MsU0FBSyxNQUFMLENBQWEsU0FBSyxNQUFsQixDQUFsQyxDQUxiO0FBTUMseUJBTkQsR0FNUyxTQUFLLE1BQUwsQ0FBYTtBQUNyQiwrQkFBTyxTQUFLLE1BRFM7QUFFckIsaUNBQVMsS0FGWTtBQUdyQixxQ0FBYTtBQUhRLHFCQUFiLEVBSVQsTUFKUyxDQU5UOztBQVdILDJCQUFPLFNBQUssSUFBTCxDQUFXLEtBQVgsQ0FBUDtBQUNBLDhCQUFVO0FBQ04sd0NBQWdCLGtCQURWO0FBRU4sMENBQWtCLEtBQUs7QUFGakIscUJBQVY7QUFJSDtBQTlKUSx1QkErSlksU0FBSyxLQUFMLENBQVksR0FBWixFQUFpQixNQUFqQixFQUF5QixPQUF6QixFQUFrQyxJQUFsQyxDQS9KWjtBQUFBO0FBK0pMLHdCQS9KSzs7QUFnS1Qsb0JBQUksV0FBVyxRQUFmO0FBQ0ksMEJBQU0sSUFBSSxhQUFKLENBQW1CLFNBQUssRUFBTCxHQUFVLEdBQVYsR0FBZ0IsU0FBSyxJQUFMLENBQVcsUUFBWCxDQUFuQyxDQUFOO0FBREosaUJBRUEsT0FBTyxRQUFQO0FBbEtTO0FBQUE7QUFBQSxLQUFqQjs7QUFzS0E7O0FBRUEsUUFBSSxTQUFTOztBQUVULGNBQU0sUUFGRztBQUdULGdCQUFRLFFBSEM7QUFJVCxxQkFBYSxDQUFFLElBQUYsRUFBUSxJQUFSLEVBQWMsSUFBZCxDQUpKO0FBS1QsbUJBQVcsR0FMRjtBQU1ULHFCQUFhLElBTko7QUFPVCwyQkFBbUIsSUFQVjtBQVFULGdCQUFRO0FBQ0osb0JBQVEscUdBREo7QUFFSixtQkFBTyx3QkFGSDtBQUdKLG1CQUFPLHdCQUhIO0FBSUosbUJBQU87QUFKSCxTQVJDO0FBY1QsZUFBTztBQUNILHNCQUFVO0FBQ04sdUJBQU8sQ0FDSCxVQURHLEVBRUgsZUFGRyxFQUdILDRCQUhHLEVBSUgsWUFKRyxFQUtILHVCQUxHO0FBREQsYUFEUDtBQVVILHVCQUFXO0FBQ1AsdUJBQU8sQ0FDSCxrQkFERyxFQUVILGlCQUZHLEVBR0gsZUFIRyxFQUlILGVBSkcsRUFLSCxXQUxHLEVBTUgsT0FORyxFQU9ILFFBUEcsRUFRSCxhQVJHLEVBU0gsb0JBVEcsRUFVSCxRQVZHLEVBV0gsbUJBWEcsRUFZSCxrQkFaRyxFQWFILHVCQWJHLENBREE7QUFnQlAsd0JBQVEsQ0FDSixlQURJLEVBRUosV0FGSSxFQUdKLFFBSEksQ0FoQkQ7QUFxQlAsdUJBQU8sQ0FDSCxzQkFERyxFQUVILFlBRkcsRUFHSCxhQUhHLEVBSUgsb0JBSkcsRUFLSCxhQUxHLEVBTUgsbUJBTkcsRUFPSCxrQkFQRyxFQVFILHVCQVJHO0FBckJBO0FBVlIsU0FkRTs7QUEwREgsb0JBMURHO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBMkRlLFNBQUssaUJBQUwsRUEzRGY7QUFBQTtBQTJERCx1QkEzREM7QUE0REQsc0JBNURDLEdBNERRLEVBNURSOztBQTZETCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFFBQVEsTUFBNUIsRUFBb0MsR0FBcEMsRUFBeUM7QUFDakMsMEJBRGlDLEdBQ3hCLFFBQVEsQ0FBUixDQUR3QjtBQUVqQyxzQkFGaUMsR0FFNUIsT0FBTyxJQUFQLENBRjRCO0FBR2pDLHdCQUhpQyxHQUcxQixPQUFPLGVBQVAsQ0FIMEI7QUFJakMseUJBSmlDLEdBSXpCLE9BQU8saUJBQVAsQ0FKeUI7QUFLakMsMEJBTGlDLEdBS3hCLE9BQU8sR0FBUCxHQUFhLEtBTFc7O0FBTXJDLDJCQUFPLElBQVAsQ0FBYTtBQUNULDhCQUFNLEVBREc7QUFFVCxrQ0FBVSxNQUZEO0FBR1QsZ0NBQVEsSUFIQztBQUlULGlDQUFTLEtBSkE7QUFLVCxnQ0FBUTtBQUxDLHFCQUFiO0FBT0g7QUFDRCx1QkFBTyxNQUFQO0FBM0VLO0FBQUE7QUE4RUgsb0JBOUVHO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQStFQyxTQUFLLFdBQUwsRUEvRUQ7QUFBQTtBQUFBLHVCQWdGZ0IsU0FBSyx5QkFBTCxFQWhGaEI7QUFBQTtBQWdGRCx3QkFoRkM7QUFpRkQsc0JBakZDLEdBaUZRLEVBQUUsUUFBUSxRQUFWLEVBakZSOztBQWtGTCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFNBQVMsTUFBN0IsRUFBcUMsR0FBckMsRUFBMEM7QUFDbEMsMkJBRGtDLEdBQ3hCLFNBQVMsQ0FBVCxDQUR3QjtBQUVsQyw0QkFGa0MsR0FFdkIsUUFBUSxVQUFSLENBRnVCO0FBR2xDLHlCQUhrQyxHQUcxQixXQUFZLFFBQVEsU0FBUixDQUFaLENBSDBCO0FBSWxDLDJCQUprQyxHQUl4QjtBQUNWLGdDQUFRLEtBREU7QUFFVixnQ0FBUSxTQUZFO0FBR1YsaUNBQVM7QUFIQyxxQkFKd0I7O0FBU3RDLDJCQUFPLFFBQVAsSUFBbUIsT0FBbkI7QUFDSDtBQUNELHVCQUFPLE1BQVA7QUE3Rks7QUFBQTtBQWdHSCxzQkFoR0csMEJBZ0dhLE1BaEdiO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFnR3FCLHNCQWhHckIsbUZBZ0c4QixFQWhHOUI7QUFBQSx1QkFpR0MsU0FBSyxXQUFMLEVBakdEO0FBQUE7QUFBQSx1QkFrR2lCLFNBQUssOEJBQUwsQ0FBcUMsU0FBSyxNQUFMLENBQWE7QUFDcEUsMEJBQU0sU0FBSyxRQUFMLENBQWUsTUFBZjtBQUQ4RCxpQkFBYixFQUV4RCxNQUZ3RCxDQUFyQyxDQWxHakI7QUFBQTtBQWtHRCx5QkFsR0M7QUFxR0QseUJBckdDLEdBcUdXLFNBQUssWUFBTCxFQXJHWDtBQXNHRCxzQkF0R0MsR0FzR1E7QUFDVCw0QkFBUSxFQURDO0FBRVQsNEJBQVEsRUFGQztBQUdULGlDQUFhLFNBSEo7QUFJVCxnQ0FBWSxTQUFLLE9BQUwsQ0FBYyxTQUFkO0FBSkgsaUJBdEdSO0FBNEdELHFCQTVHQyxHQTRHTyxFQUFFLFFBQVEsa0JBQVYsRUFBOEIsUUFBUSxtQkFBdEMsRUE1R1A7QUE2R0Qsb0JBN0dDLEdBNkdNLE9BQU8sSUFBUCxDQUFhLEtBQWIsQ0E3R047O0FBOEdMLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksS0FBSyxNQUF6QixFQUFpQyxHQUFqQyxFQUFzQztBQUM5Qix1QkFEOEIsR0FDeEIsS0FBSyxDQUFMLENBRHdCO0FBRTlCLHdCQUY4QixHQUV2QixNQUFNLEdBQU4sQ0FGdUI7QUFHOUIsMEJBSDhCLEdBR3JCLFVBQVUsSUFBVixDQUhxQjs7QUFJbEMseUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxPQUFPLE1BQTNCLEVBQW1DLEdBQW5DLEVBQXdDO0FBQ2hDLDZCQURnQyxHQUN4QixPQUFPLENBQVAsQ0FEd0I7QUFFaEMsNkJBRmdDLEdBRXhCLFdBQVksTUFBTSxDQUFOLENBQVosQ0FGd0I7QUFHaEMsOEJBSGdDLEdBR3ZCLFdBQVksTUFBTSxDQUFOLENBQVosQ0FIdUI7O0FBSXBDLCtCQUFPLEdBQVAsRUFBWSxJQUFaLENBQWtCLENBQUUsS0FBRixFQUFTLE1BQVQsQ0FBbEI7QUFDSDtBQUNKO0FBQ0QsdUJBQU8sTUFBUDtBQXpISztBQUFBO0FBNEhULG1CQTVIUyx1QkE0SEksTUE1SEosRUE0SFksTUE1SFosRUE0SG9CO0FBQ3pCLGdCQUFJLFlBQVksS0FBSyxZQUFMLEVBQWhCO0FBQ0EsZ0JBQUksT0FBTyxTQUFYO0FBQ0EsZ0JBQUksdUJBQXVCLE1BQTNCLEVBQW1DO0FBQy9CLG9CQUFJLE9BQU8sbUJBQVAsQ0FBSixFQUFpQztBQUM3Qix3QkFBSSxTQUFTLE9BQU8sbUJBQVAsRUFBNEIsTUFBekM7QUFDQSx3QkFBSSxTQUFTLENBQWIsRUFDSSxPQUFPLFdBQVksT0FBTyxtQkFBUCxDQUFaLENBQVA7QUFDUDtBQUNKO0FBQ0QsbUJBQU87QUFDSCw2QkFBYSxTQURWO0FBRUgsNEJBQVksS0FBSyxPQUFMLENBQWMsU0FBZCxDQUZUO0FBR0gsd0JBQVEsV0FBWSxPQUFPLGlCQUFQLENBQVosQ0FITDtBQUlILHVCQUFPLFdBQVksT0FBTyxnQkFBUCxDQUFaLENBSko7QUFLSCx1QkFBTyxXQUFZLE9BQU8sWUFBUCxDQUFaLENBTEo7QUFNSCx1QkFBTyxXQUFZLE9BQU8sWUFBUCxDQUFaLENBTko7QUFPSCx3QkFBUSxTQVBMO0FBUUgsd0JBQVEsU0FSTDtBQVNILHlCQUFTLFNBVE47QUFVSCx5QkFBUyxTQVZOO0FBV0gsd0JBQVEsSUFYTDtBQVlILDBCQUFVLFNBWlA7QUFhSCw4QkFBYyxTQWJYO0FBY0gsMkJBQVcsU0FkUjtBQWVILDhCQUFjLFdBQVksT0FBTyxZQUFQLENBQVosQ0FmWDtBQWdCSCwrQkFBZSxTQWhCWjtBQWlCSCx3QkFBUTtBQWpCTCxhQUFQO0FBbUJILFNBekpRO0FBMkpILG9CQTNKRztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQTRKQyxTQUFLLFdBQUwsRUE1SkQ7QUFBQTtBQUFBLHVCQTZKZSxTQUFLLGlCQUFMLEVBN0pmO0FBQUE7QUE2SkQsdUJBN0pDO0FBOEpELHNCQTlKQyxHQThKUSxFQTlKUjs7QUErSkwscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxRQUFRLE1BQTVCLEVBQW9DLEdBQXBDLEVBQXlDO0FBQ2pDLDBCQURpQyxHQUN4QixRQUFRLENBQVIsQ0FEd0I7QUFFakMsd0JBRmlDLEdBRTFCLE9BQU8sZUFBUCxDQUYwQjtBQUdqQyx5QkFIaUMsR0FHekIsT0FBTyxpQkFBUCxDQUh5QjtBQUlqQywwQkFKaUMsR0FJeEIsT0FBTyxHQUFQLEdBQWEsS0FKVztBQUtqQywwQkFMaUMsR0FLeEIsU0FBSyxPQUFMLENBQWEsTUFBYixDQUx3Qjs7QUFNckMsMkJBQU8sTUFBUCxJQUFpQixTQUFLLFdBQUwsQ0FBa0IsTUFBbEIsRUFBMEIsTUFBMUIsQ0FBakI7QUFDSDtBQUNELHVCQUFPLE1BQVA7QUF2S0s7QUFBQTtBQTBLSCxtQkExS0csdUJBMEtVLE1BMUtWO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBMktDLFNBQUssV0FBTCxFQTNLRDtBQUFBO0FBNEtELGlCQTVLQyxHQTRLRyxTQUFLLE1BQUwsQ0FBYSxNQUFiLENBNUtIO0FBQUEsdUJBNktjLFNBQUssbUJBQUwsQ0FBMEI7QUFDekMsMEJBQU0sRUFBRSxJQUFGO0FBRG1DLGlCQUExQixDQTdLZDtBQUFBO0FBNktELHNCQTdLQzs7QUFnTEwsdUJBQU8sU0FBSyxXQUFMLENBQWtCLE1BQWxCLEVBQTBCLENBQTFCLENBQVA7QUFoTEs7QUFBQTtBQW1MSCxtQkFuTEcsdUJBbUxVLE1BbkxWO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBbUxrQixzQkFuTGxCLG1GQW1MMkIsRUFuTDNCO0FBQUEsdUJBb0xDLFNBQUssV0FBTCxFQXBMRDtBQUFBO0FBcUxMLHVCQUFPLFNBQUssbUJBQUwsQ0FBMEIsU0FBSyxNQUFMLENBQWE7QUFDMUMsa0NBQWMsU0FBSyxRQUFMLENBQWUsTUFBZjtBQUQ0QixpQkFBYixFQUU5QixNQUY4QixDQUExQixDQUFQO0FBckxLO0FBQUE7QUEwTEgsbUJBMUxHLHVCQTBMVSxNQTFMVixFQTBMa0IsSUExTGxCLEVBMEx3QixJQTFMeEIsRUEwTDhCLE1BMUw5QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQTBMc0MscUJBMUx0QyxtRkEwTDhDLFNBMUw5QztBQTBMeUQsc0JBMUx6RCxtRkEwTGtFLEVBMUxsRTtBQUFBLHVCQTJMQyxTQUFLLFdBQUwsRUEzTEQ7QUFBQTtBQTRMRCxxQkE1TEMsR0E0TE87QUFDUixrQ0FBYyxJQUROO0FBRVIsa0NBQWMsU0FBSyxRQUFMLENBQWUsTUFBZixDQUZOO0FBR1IsNEJBQVEsSUFIQTtBQUlSLGdDQUFZO0FBSkosaUJBNUxQOztBQWtNTCxvQkFBSSxRQUFRLE9BQVo7QUFDSSwwQkFBTSxPQUFOLElBQWlCLEtBQWpCO0FBREosaUJBbE1LLE9Bb01nQixTQUFLLGlCQUFMLENBQXdCLFNBQUssTUFBTCxDQUFhO0FBQ3RELDZCQUFTO0FBRDZDLGlCQUFiLEVBRTFDLE1BRjBDLENBQXhCLENBcE1oQjtBQUFBO0FBb01ELHdCQXBNQzs7QUF1TUwsdUJBQU87QUFDSCw0QkFBUSxRQURMO0FBRUgsMEJBQU0sU0FBUyxJQUFULEVBQWUsUUFBZjtBQUZILGlCQUFQO0FBdk1LO0FBQUE7QUE2TUgsbUJBN01HLHVCQTZNVSxFQTdNVjtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQTZNYyxzQkE3TWQsbUZBNk11QixFQTdNdkI7QUFBQSx1QkE4TUMsU0FBSyxXQUFMLEVBOU1EO0FBQUE7QUErTUwsdUJBQU8sU0FBSyx3QkFBTCxDQUErQixTQUFLLE1BQUwsQ0FBYTtBQUMvQywwQkFBTTtBQUR5QyxpQkFBYixFQUVuQyxNQUZtQyxDQUEvQixDQUFQO0FBL01LO0FBQUE7QUFvTkgsZUFwTkcsbUJBb05NLElBcE5OO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBb05ZLG1CQXBOWixtRkFvTmtCLFFBcE5sQjtBQW9ONEIsc0JBcE41QixtRkFvTnFDLEtBcE5yQztBQW9ONEMsc0JBcE41QyxtRkFvTnFELEVBcE5yRDtBQW9OeUQsdUJBcE56RCxtRkFvTm1FLFNBcE5uRTtBQW9OOEUsb0JBcE45RSxtRkFvTnFGLFNBcE5yRjtBQXFORCxtQkFyTkMsR0FxTkssTUFBTSxTQUFLLGFBQUwsQ0FBb0IsSUFBcEIsRUFBMEIsTUFBMUIsQ0FyTlg7QUFzTkQscUJBdE5DLEdBc05PLFNBQUssSUFBTCxDQUFXLE1BQVgsRUFBbUIsU0FBSyxhQUFMLENBQW9CLElBQXBCLENBQW5CLENBdE5QOztBQXVOTCwwQkFBVTtBQUNOLDRDQUF3QixTQUFLLE9BRHZCO0FBRU4sb0NBQWdCO0FBRlYsaUJBQVY7QUFJQSxvQkFBSSxPQUFPLFFBQVgsRUFBcUI7QUFDakIsd0JBQUksT0FBTyxJQUFQLENBQWEsS0FBYixFQUFvQixNQUF4QjtBQUNJLCtCQUFPLE1BQU0sU0FBSyxTQUFMLENBQWdCLEtBQWhCLENBQWI7QUFESjtBQUVILGlCQUhELE1BR087QUFDQyx5QkFERCxHQUNTLFNBQUssS0FBTCxFQURUO0FBRUMsMkJBRkQsR0FFVztBQUNWLGdDQUFRLEdBREU7QUFFVixpQ0FBUyxLQUZDO0FBR1Ysb0NBQVksU0FBSyxNQUhQO0FBSVYsK0JBQU8sS0FBSyxLQUFMLENBQVksUUFBUSxJQUFwQixDQUpHLENBSXdCO0FBSnhCLHFCQUZYOztBQVFILHdCQUFJLE9BQU8sSUFBUCxDQUFhLEtBQWIsRUFBb0IsTUFBeEI7QUFDSSwrQkFBTyxTQUFLLElBQUwsQ0FBVyxLQUFYLENBQVA7QUFESixxQkFFQSxRQUFRLGVBQVIsSUFBMkIsU0FBSyxHQUFMLENBQVUsT0FBVixFQUFtQixTQUFLLE1BQXhCLENBQTNCO0FBQ0g7QUF6T0ksdUJBME9nQixTQUFLLEtBQUwsQ0FBWSxTQUFLLElBQUwsQ0FBVSxLQUFWLElBQW1CLEdBQS9CLEVBQW9DLE1BQXBDLEVBQTRDLE9BQTVDLEVBQXFELElBQXJELENBMU9oQjtBQUFBO0FBME9ELHdCQTFPQzs7QUEyT0wsb0JBQUksYUFBYSxRQUFqQjtBQUNJLDBCQUFNLElBQUksYUFBSixDQUFtQixTQUFLLEVBQUwsR0FBVSxHQUFWLEdBQWdCLFNBQUssSUFBTCxDQUFXLFFBQVgsQ0FBbkMsQ0FBTjtBQURKLGlCQUVBLE9BQU8sUUFBUDtBQTdPSztBQUFBO0FBQUEsS0FBYjs7QUFpUEE7O0FBRUEsUUFBSSxlQUFlOztBQUVmLGNBQU0sY0FGUztBQUdmLGdCQUFRLGNBSE87QUFJZixxQkFBYSxJQUpFLEVBSUk7QUFDbkIscUJBQWEsSUFMRTtBQU1mLDJCQUFtQixJQU5KO0FBT2YsZ0JBQVE7QUFDSixvQkFBUSxxR0FESjtBQUVKLG1CQUFPLGtDQUZIO0FBR0osbUJBQU8sOEJBSEg7QUFJSixtQkFBTztBQUpILFNBUE87QUFhZixlQUFPO0FBQ0gsc0JBQVU7QUFDTix1QkFBTyxDQUNILFNBREcsRUFFSCxnQkFGRyxFQUdILFFBSEcsRUFJSCxlQUpHLEVBS0gsaUJBTEc7QUFERCxhQURQO0FBVUgsdUJBQVc7QUFDUCx3QkFBUSxDQUNKLG9CQURJLEVBRUosYUFGSSxFQUdKLG9CQUhJLEVBSUosWUFKSSxFQUtKLGNBTEksRUFNSixZQU5JLEVBT0osVUFQSTtBQUREO0FBVlIsU0FiUTs7QUFvQ1Qsb0JBcENTO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBcUNTLFNBQUssZ0JBQUwsRUFyQ1Q7QUFBQTtBQXFDUCx1QkFyQ087QUFzQ1Asc0JBdENPLEdBc0NFLEVBdENGOztBQXVDWCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFFBQVEsTUFBNUIsRUFBb0MsR0FBcEMsRUFBeUM7QUFDakMsMEJBRGlDLEdBQ3hCLFFBQVEsQ0FBUixDQUR3QjtBQUVqQyx3QkFGaUMsR0FFMUIsT0FBTyxDQUFQLENBRjBCO0FBR2pDLHlCQUhpQyxHQUd6QixPQUFPLENBQVAsQ0FIeUI7QUFJakMsMEJBSmlDLEdBSXhCLE9BQU8sR0FBUCxHQUFhLEtBSlc7QUFLakMsc0JBTGlDLEdBSzVCLE1BTDRCOztBQU1yQywyQkFBTyxJQUFQLENBQWE7QUFDVCw4QkFBTSxFQURHO0FBRVQsa0NBQVUsTUFGRDtBQUdULGdDQUFRLElBSEM7QUFJVCxpQ0FBUyxLQUpBO0FBS1QsZ0NBQVE7QUFMQyxxQkFBYjtBQU9IO0FBQ0QsdUJBQU8sTUFBUDtBQXJEVztBQUFBO0FBd0RULG9CQXhEUztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkF5REwsU0FBSyxXQUFMLEVBekRLO0FBQUE7QUFBQSx1QkEwRFUsU0FBSyx1QkFBTCxFQTFEVjtBQUFBO0FBMERQLHdCQTFETztBQTJEUCxzQkEzRE8sR0EyREUsRUFBRSxRQUFRLFFBQVYsRUEzREY7O0FBNERYLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksU0FBUyxNQUE3QixFQUFxQyxHQUFyQyxFQUEwQztBQUNsQywyQkFEa0MsR0FDeEIsU0FBUyxDQUFULENBRHdCO0FBRWxDLDRCQUZrQyxHQUV2QixRQUFRLFVBQVIsQ0FGdUI7QUFHbEMsNkJBSGtDLEdBR3RCLFNBQVMsU0FIYTtBQUlsQyx3QkFKa0MsR0FJM0IsV0FBWSxRQUFRLFdBQVIsQ0FBWixDQUoyQjtBQUtsQyx3QkFMa0MsR0FLM0IsV0FBWSxRQUFRLGFBQVIsQ0FBWixDQUwyQjtBQU1sQyx5QkFOa0MsR0FNMUIsU0FBSyxHQUFMLENBQVUsSUFBVixFQUFnQixJQUFoQixDQU4wQjtBQU9sQywyQkFQa0MsR0FPeEI7QUFDVixnQ0FBUSxJQURFO0FBRVYsZ0NBQVEsSUFGRTtBQUdWLGlDQUFTO0FBSEMscUJBUHdCOztBQVl0QywyQkFBTyxRQUFQLElBQW1CLE9BQW5CO0FBQ0g7QUFDRCx1QkFBTyxNQUFQO0FBMUVXO0FBQUE7QUE2RVQsc0JBN0VTLDBCQTZFTyxNQTdFUDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBNkVlLHNCQTdFZixtRkE2RXdCLEVBN0V4QjtBQUFBLHVCQThFTCxTQUFLLFdBQUwsRUE5RUs7QUFBQTtBQUFBLHVCQStFVyxTQUFLLG1CQUFMLENBQTBCLFNBQUssTUFBTCxDQUFhO0FBQ3pELDhCQUFVLFNBQUssUUFBTCxDQUFlLE1BQWY7QUFEK0MsaUJBQWIsRUFFN0MsTUFGNkMsQ0FBMUIsQ0EvRVg7QUFBQTtBQStFUCx5QkEvRU87QUFrRlAseUJBbEZPLEdBa0ZLLFNBQUssWUFBTCxFQWxGTDtBQW1GUCxzQkFuRk8sR0FtRkU7QUFDVCw0QkFBUSxFQURDO0FBRVQsNEJBQVEsRUFGQztBQUdULGlDQUFhLFNBSEo7QUFJVCxnQ0FBWSxTQUFLLE9BQUwsQ0FBYyxTQUFkO0FBSkgsaUJBbkZGO0FBeUZQLHFCQXpGTyxHQXlGQyxFQUFFLFFBQVEsV0FBVixFQUF1QixRQUFRLFlBQS9CLEVBekZEO0FBMEZQLG9CQTFGTyxHQTBGQSxPQUFPLElBQVAsQ0FBYSxLQUFiLENBMUZBOztBQTJGWCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLEtBQUssTUFBekIsRUFBaUMsR0FBakMsRUFBc0M7QUFDOUIsdUJBRDhCLEdBQ3hCLEtBQUssQ0FBTCxDQUR3QjtBQUU5Qix3QkFGOEIsR0FFdkIsTUFBTSxHQUFOLENBRnVCO0FBRzlCLDBCQUg4QixHQUdyQixVQUFVLElBQVYsQ0FIcUI7O0FBSWxDLHlCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksT0FBTyxNQUEzQixFQUFtQyxHQUFuQyxFQUF3QztBQUNoQyw2QkFEZ0MsR0FDeEIsT0FBTyxDQUFQLENBRHdCO0FBRWhDLDZCQUZnQyxHQUV4QixXQUFZLE1BQU0sT0FBTixDQUFaLENBRndCO0FBR2hDLDhCQUhnQyxHQUd2QixXQUFZLE1BQU0sUUFBTixDQUFaLENBSHVCOztBQUlwQywrQkFBTyxHQUFQLEVBQVksSUFBWixDQUFrQixDQUFFLEtBQUYsRUFBUyxNQUFULENBQWxCO0FBQ0g7QUFDSjtBQUNELHVCQUFPLE1BQVA7QUF0R1c7QUFBQTtBQXlHZixtQkF6R2UsdUJBeUdGLE1BekdFLEVBeUdNLE1BekdOLEVBeUdjO0FBQ3pCLGdCQUFJLFlBQVksS0FBSyxZQUFMLEVBQWhCO0FBQ0EsZ0JBQUksTUFBTSxTQUFWO0FBQ0EsZ0JBQUksTUFBTSxTQUFWO0FBQ0EsZ0JBQUksU0FBUyxNQUFiLEVBQ0ksSUFBSSxPQUFPLEtBQVAsQ0FBSixFQUNJLE1BQU0sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQUFOO0FBQ1IsZ0JBQUksU0FBUyxNQUFiLEVBQ0ksSUFBSSxPQUFPLEtBQVAsQ0FBSixFQUNJLE1BQU0sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQUFOO0FBQ1IsbUJBQU87QUFDSCw2QkFBYSxTQURWO0FBRUgsNEJBQVksS0FBSyxPQUFMLENBQWMsU0FBZCxDQUZUO0FBR0gsd0JBQVEsU0FITDtBQUlILHVCQUFPLFNBSko7QUFLSCx1QkFBTyxHQUxKO0FBTUgsdUJBQU8sR0FOSjtBQU9ILHdCQUFRLFNBUEw7QUFRSCx3QkFBUSxTQVJMO0FBU0gseUJBQVMsU0FUTjtBQVVILHlCQUFTLFNBVk47QUFXSCx3QkFBUSxXQUFZLE9BQU8sTUFBUCxDQUFaLENBWEw7QUFZSCwwQkFBVSxXQUFZLE9BQU8sZUFBUCxDQUFaLENBWlA7QUFhSCw4QkFBYyxTQWJYO0FBY0gsMkJBQVcsU0FkUjtBQWVILDhCQUFjLFNBZlg7QUFnQkgsK0JBQWUsV0FBWSxPQUFPLFlBQVAsQ0FBWixDQWhCWjtBQWlCSCx3QkFBUTtBQWpCTCxhQUFQO0FBbUJILFNBdEljO0FBd0lULG9CQXhJUztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBeUlMLFNBQUssV0FBTCxFQXpJSztBQUFBO0FBQUEsdUJBMElVLFNBQUssZUFBTCxFQTFJVjtBQUFBO0FBMElQLHdCQTFJTztBQTJJUCx1QkEzSU8sR0EySUcsU0FBSyxPQUFMLENBQWMsUUFBZCxFQUF3QixRQUF4QixDQTNJSDtBQTRJUCxtQkE1SU8sR0E0SUQsT0FBTyxJQUFQLENBQWEsT0FBYixDQTVJQztBQTZJUCxzQkE3SU8sR0E2SUUsRUE3SUY7O0FBOElYLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksSUFBSSxNQUF4QixFQUFnQyxHQUFoQyxFQUFxQztBQUM3QixzQkFENkIsR0FDeEIsSUFBSSxDQUFKLENBRHdCO0FBRTdCLDBCQUY2QixHQUVwQixTQUFLLGFBQUwsQ0FBbUIsRUFBbkIsQ0FGb0I7QUFHN0IsMEJBSDZCLEdBR3BCLE9BQU8sUUFBUCxDQUhvQjtBQUk3QiwwQkFKNkIsR0FJcEIsUUFBUSxFQUFSLENBSm9COztBQUtqQywyQkFBTyxNQUFQLElBQWlCLFNBQUssV0FBTCxDQUFrQixNQUFsQixFQUEwQixNQUExQixDQUFqQjtBQUNIO0FBQ0QsdUJBQU8sTUFBUDtBQXJKVztBQUFBO0FBd0pULG1CQXhKUyx1QkF3SkksTUF4Sko7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkF5SkwsU0FBSyxXQUFMLEVBekpLO0FBQUE7QUEwSlAsaUJBMUpPLEdBMEpILFNBQUssTUFBTCxDQUFhLE1BQWIsQ0ExSkc7QUFBQSx1QkEySlEsU0FBSyxvQkFBTCxDQUEyQjtBQUMxQyw4QkFBVSxTQUFLLFFBQUwsQ0FBZSxNQUFmO0FBRGdDLGlCQUEzQixDQTNKUjtBQUFBO0FBMkpQLHNCQTNKTzs7QUE4SlgsdUJBQU8sU0FBSyxXQUFMLENBQWtCLE1BQWxCLEVBQTBCLENBQTFCLENBQVA7QUE5Slc7QUFBQTtBQWlLVCxtQkFqS1MsdUJBaUtJLE1BaktKO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBaUtZLHNCQWpLWixtRkFpS3FCLEVBaktyQjtBQUFBLHVCQWtLTCxTQUFLLFdBQUwsRUFsS0s7QUFBQTtBQW1LWCx1QkFBTyxTQUFLLHFCQUFMLENBQTRCLFNBQUssTUFBTCxDQUFhO0FBQzVDLDhCQUFVLFNBQUssUUFBTCxDQUFlLE1BQWY7QUFEa0MsaUJBQWIsRUFFaEMsTUFGZ0MsQ0FBNUIsQ0FBUDtBQW5LVztBQUFBO0FBd0tULG1CQXhLUyx1QkF3S0ksTUF4S0osRUF3S1ksSUF4S1osRUF3S2tCLElBeEtsQixFQXdLd0IsTUF4S3hCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUF3S2dDLHFCQXhLaEMsbUZBd0t3QyxTQXhLeEM7QUF3S21ELHNCQXhLbkQsbUZBd0s0RCxFQXhLNUQ7QUFBQSx1QkF5S0wsU0FBSyxXQUFMLEVBektLO0FBQUE7QUEwS1AsaUJBMUtPLEdBMEtILFNBQUssTUFBTCxDQUFhLE1BQWIsQ0ExS0c7QUEyS1AscUJBM0tPLEdBMktDO0FBQ1IsdUNBQW1CLEVBQUUsTUFBRixDQURYO0FBRVIseUNBQXFCLEVBQUUsT0FBRixDQUZiO0FBR1IsNEJBQVEsSUFIQTtBQUlSLDhCQUFVO0FBSkYsaUJBM0tEOztBQWlMWCxvQkFBSSxRQUFRLE9BQVo7QUFDSSwwQkFBTSxZQUFOLElBQXNCLEtBQXRCO0FBREosaUJBakxXLE9BbUxVLFNBQUsscUJBQUwsQ0FBNEIsU0FBSyxNQUFMLENBQWEsS0FBYixFQUFvQixNQUFwQixDQUE1QixDQW5MVjtBQUFBO0FBbUxQLHdCQW5MTzs7QUFvTFgsdUJBQU87QUFDSCw0QkFBUSxRQURMO0FBRUgsMEJBQU0sU0FBUyxRQUFUO0FBRkgsaUJBQVA7QUFwTFc7QUFBQTtBQTBMVCxtQkExTFMsdUJBMExJLEVBMUxKO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBMExRLHNCQTFMUixtRkEwTGlCLEVBMUxqQjtBQUFBLHVCQTJMTCxTQUFLLFdBQUwsRUEzTEs7QUFBQTtBQTRMWCx1QkFBTyxTQUFLLHNCQUFMLENBQTZCLFNBQUssTUFBTCxDQUFhO0FBQzdDLGlDQUFhO0FBRGdDLGlCQUFiLEVBRWpDLE1BRmlDLENBQTdCLENBQVA7QUE1TFc7QUFBQTtBQWlNVCxlQWpNUyxtQkFpTUEsSUFqTUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBaU1NLG1CQWpNTixtRkFpTVksUUFqTVo7QUFpTXNCLHNCQWpNdEIsbUZBaU0rQixLQWpNL0I7QUFpTXNDLHNCQWpNdEMsbUZBaU0rQyxFQWpNL0M7QUFpTW1ELHVCQWpNbkQsbUZBaU02RCxTQWpNN0Q7QUFpTXdFLG9CQWpNeEUsbUZBaU0rRSxTQWpNL0U7QUFrTVAsbUJBbE1PLEdBa01ELFNBQUssSUFBTCxDQUFVLEtBQVYsSUFBbUIsR0FBbkIsR0FBeUIsU0FBSyxhQUFMLENBQW9CLElBQXBCLEVBQTBCLE1BQTFCLENBbE14QjtBQW1NUCxxQkFuTU8sR0FtTUMsU0FBSyxJQUFMLENBQVcsTUFBWCxFQUFtQixTQUFLLGFBQUwsQ0FBb0IsSUFBcEIsQ0FBbkIsQ0FuTUQ7O0FBb01YLG9CQUFJLE9BQU8sU0FBWCxFQUFzQjtBQUNkLHlCQURjLEdBQ04sU0FBSyxLQUFMLEVBRE07O0FBRWxCLDRCQUFRLFNBQUssTUFBTCxDQUFhO0FBQ2pCLCtCQUFPLFNBQUssTUFESztBQUVqQixpQ0FBUztBQUZRLHFCQUFiLEVBR0wsS0FISyxDQUFSO0FBSUEsMkJBQU8sU0FBSyxJQUFMLENBQVcsS0FBWCxDQUFQO0FBQ0EsOEJBQVU7QUFDTix3Q0FBZ0Isa0JBRFY7QUFFTixnQ0FBUSxTQUFLLElBQUwsQ0FBVyxTQUFLLE1BQUwsQ0FBYSxJQUFiLENBQVgsRUFBK0IsU0FBSyxNQUFMLENBQWEsU0FBSyxNQUFsQixDQUEvQixFQUEwRCxRQUExRDtBQUZGLHFCQUFWO0FBSUg7QUEvTVUsdUJBZ05VLFNBQUssS0FBTCxDQUFZLEdBQVosRUFBaUIsTUFBakIsRUFBeUIsT0FBekIsRUFBa0MsSUFBbEMsQ0FoTlY7QUFBQTtBQWdOUCx3QkFoTk87QUFpTlg7QUFDQTs7QUFDQSx1QkFBTyxRQUFQO0FBbk5XO0FBQUE7QUFBQSxLQUFuQjs7QUF1TkE7O0FBRUEsUUFBSSxhQUFhLE9BQVEsVUFBUixFQUFvQjtBQUNqQyxjQUFNLFlBRDJCO0FBRWpDLGdCQUFRLFlBRnlCO0FBR2pDLHFCQUFhLElBSG9CO0FBSWpDLGdCQUFRO0FBQ0osb0JBQVEscUdBREo7QUFFSixtQkFBTztBQUNILDBCQUFVLGdDQURQO0FBRUgsMkJBQVc7QUFGUixhQUZIO0FBTUosbUJBQU8sd0JBTkg7QUFPSixtQkFBTztBQVBILFNBSnlCO0FBYWpDLG1CQUFXLGdCQWJzQjtBQWNqQyxtQkFBVztBQUNQLHVCQUFXLEVBQUUsTUFBTSxRQUFSLEVBQWtCLFVBQVUsU0FBNUIsRUFBdUMsUUFBUSxLQUEvQyxFQUFzRCxTQUFTLEtBQS9ELEVBQXNFLFlBQVksQ0FBbEYsRUFBcUYsVUFBVSxZQUEvRjtBQURKO0FBZHNCLEtBQXBCLENBQWpCOztBQW1CQTs7QUFFQSxRQUFJLFVBQVU7O0FBRVYsY0FBTSxTQUZJO0FBR1YsZ0JBQVEsZ0JBSEU7QUFJVixxQkFBYSxJQUpIO0FBS1YscUJBQWEsSUFMSDtBQU1WLG1CQUFXLElBTkQ7QUFPViwyQkFBbUIsSUFQVDtBQVFWLGdCQUFRO0FBQ0osb0JBQVEscUdBREo7QUFFSixtQkFBTyxnQ0FGSDtBQUdKLG1CQUFPLDRCQUhIO0FBSUosbUJBQU8sQ0FDSCxrREFERyxFQUVILHFDQUZHO0FBSkgsU0FSRTtBQWlCVixlQUFPO0FBQ0gsc0JBQVU7QUFDTix1QkFBTyxDQUNILHNCQURHLEVBRUgsbUJBRkcsRUFHSCxtQkFIRyxFQUlILGVBSkc7QUFERCxhQURQO0FBU0gsdUJBQVc7QUFDUCx1QkFBTyxDQUNILFVBREcsRUFFSCxlQUZHLEVBR0gsV0FIRyxFQUlILGdCQUpHLEVBS0gsT0FMRyxFQU1ILFlBTkcsRUFPSCxtQkFQRyxFQVFILHdCQVJHLEVBU0gsNkJBVEcsRUFVSCxtQ0FWRyxFQVdILDJCQVhHLEVBWUgsZ0NBWkcsRUFhSCxjQWJHLEVBY0gsbUJBZEcsRUFlSCxzQkFmRyxFQWdCSCxpQkFoQkcsQ0FEQTtBQW1CUCx3QkFBUSxDQUNKLGVBREksRUFFSix3QkFGSSxDQW5CRDtBQXVCUCwwQkFBVSxDQUNOLDZCQURNLEVBRU4sbUNBRk07QUF2Qkg7QUFUUixTQWpCRzs7QUF3REosb0JBeERJO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBeURjLFNBQUsscUJBQUwsRUF6RGQ7QUFBQTtBQXlERix1QkF6REU7QUEwREYsc0JBMURFLEdBMERPLEVBMURQOztBQTJETixxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFFBQVEsU0FBUixFQUFtQixNQUF2QyxFQUErQyxHQUEvQyxFQUFvRDtBQUM1QywwQkFENEMsR0FDbkMsUUFBUSxTQUFSLEVBQW1CLENBQW5CLENBRG1DO0FBRTVDLHNCQUY0QyxHQUV2QyxPQUFPLFNBQVAsQ0FGdUM7QUFHNUMsd0JBSDRDLEdBR3JDLEdBQUcsS0FBSCxDQUFVLENBQVYsRUFBYSxDQUFiLENBSHFDO0FBSTVDLHlCQUo0QyxHQUlwQyxHQUFHLEtBQUgsQ0FBVSxDQUFWLEVBQWEsQ0FBYixDQUpvQztBQUs1QywwQkFMNEMsR0FLbkMsT0FBTyxHQUFQLEdBQWEsS0FMc0I7O0FBTWhELDJCQUFPLElBQVAsQ0FBYTtBQUNULDhCQUFNLEVBREc7QUFFVCxrQ0FBVSxNQUZEO0FBR1QsZ0NBQVEsSUFIQztBQUlULGlDQUFTLEtBSkE7QUFLVCxnQ0FBUTtBQUxDLHFCQUFiO0FBT0g7QUFDRCx1QkFBTyxNQUFQO0FBekVNO0FBQUE7QUE0RUosb0JBNUVJO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQTZFQSxTQUFLLFdBQUwsRUE3RUE7QUFBQTtBQUFBLHVCQThFZSxTQUFLLGtCQUFMLEVBOUVmO0FBQUE7QUE4RUYsd0JBOUVFO0FBK0VGLHdCQS9FRSxHQStFUyxTQUFTLFVBQVQsQ0EvRVQ7QUFnRkYsc0JBaEZFLEdBZ0ZPLEVBQUUsUUFBUSxRQUFWLEVBaEZQOztBQWlGTixxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFNBQVMsTUFBN0IsRUFBcUMsR0FBckMsRUFBMEM7QUFDbEMsMkJBRGtDLEdBQ3hCLFNBQVMsQ0FBVCxDQUR3QjtBQUVsQyw0QkFGa0MsR0FFdkIsUUFBUSxVQUFSLENBRnVCO0FBR2xDLHdCQUhrQyxHQUczQixRQUFRLGlCQUFSLENBSDJCO0FBSWxDLHlCQUprQyxHQUkxQixRQUFRLFNBQVIsQ0FKMEI7QUFLbEMsd0JBTGtDLEdBSzNCLFFBQVEsSUFMbUI7QUFNbEMsMkJBTmtDLEdBTXhCO0FBQ1YsZ0NBQVEsSUFERTtBQUVWLGdDQUFRLElBRkU7QUFHVixpQ0FBUztBQUhDLHFCQU53Qjs7QUFXdEMsMkJBQU8sUUFBUCxJQUFtQixPQUFuQjtBQUNIO0FBQ0QsdUJBQU8sTUFBUDtBQTlGTTtBQUFBO0FBaUdKLHNCQWpHSSwwQkFpR1ksTUFqR1o7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBaUdvQixzQkFqR3BCLG1GQWlHNkIsRUFqRzdCO0FBQUEsdUJBa0dBLFNBQUssV0FBTCxFQWxHQTtBQUFBO0FBQUEsdUJBbUdnQixTQUFLLHlCQUFMLENBQWdDLFNBQUssTUFBTCxDQUFhO0FBQy9ELDBCQUFNLFNBQUssUUFBTCxDQUFlLE1BQWY7QUFEeUQsaUJBQWIsRUFFbkQsTUFGbUQsQ0FBaEMsQ0FuR2hCO0FBQUE7QUFtR0YseUJBbkdFO0FBc0dGLHlCQXRHRSxHQXNHVSxTQUFLLFNBQUwsQ0FBZ0IsVUFBVSxNQUFWLENBQWhCLENBdEdWO0FBdUdGLHNCQXZHRSxHQXVHTztBQUNULDRCQUFRLEVBREM7QUFFVCw0QkFBUSxFQUZDO0FBR1QsaUNBQWEsU0FISjtBQUlULGdDQUFZLFNBQUssT0FBTCxDQUFjLFNBQWQ7QUFKSCxpQkF2R1A7QUE2R0YscUJBN0dFLEdBNkdNLENBQUUsTUFBRixFQUFVLE1BQVYsQ0E3R047O0FBOEdOLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksTUFBTSxNQUExQixFQUFrQyxHQUFsQyxFQUF1QztBQUMvQix3QkFEK0IsR0FDeEIsTUFBTSxDQUFOLENBRHdCO0FBRS9CLDBCQUYrQixHQUV0QixVQUFVLElBQVYsQ0FGc0I7O0FBR25DLHlCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksT0FBTyxNQUEzQixFQUFtQyxHQUFuQyxFQUF3QztBQUNoQyw2QkFEZ0MsR0FDeEIsT0FBTyxDQUFQLENBRHdCO0FBRWhDLDZCQUZnQyxHQUV4QixXQUFZLE1BQU0sT0FBTixDQUFaLENBRndCO0FBR2hDLDhCQUhnQyxHQUd2QixXQUFZLE1BQU0sUUFBTixDQUFaLENBSHVCOztBQUlwQywrQkFBTyxJQUFQLEVBQWEsSUFBYixDQUFtQixDQUFFLEtBQUYsRUFBUyxNQUFULENBQW5CO0FBQ0g7QUFDSjtBQUNELHVCQUFPLE1BQVA7QUF4SE07QUFBQTtBQTJIVixtQkEzSFUsdUJBMkhHLE1BM0hILEVBMkhXLE1BM0hYLEVBMkhtQjtBQUN6QixnQkFBSSxZQUFZLEtBQUssU0FBTCxDQUFnQixPQUFPLE1BQVAsQ0FBaEIsQ0FBaEI7QUFDQSxtQkFBTztBQUNILDZCQUFhLFNBRFY7QUFFSCw0QkFBWSxLQUFLLE9BQUwsQ0FBYyxTQUFkLENBRlQ7QUFHSCx3QkFBUSxXQUFZLE9BQU8sTUFBUCxDQUFaLENBSEw7QUFJSCx1QkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBSko7QUFLSCx1QkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBTEo7QUFNSCx1QkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBTko7QUFPSCx3QkFBUSxTQVBMO0FBUUgsd0JBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQVJMO0FBU0gseUJBQVMsV0FBWSxPQUFPLE9BQVAsQ0FBWixDQVROO0FBVUgseUJBQVMsU0FWTjtBQVdILHdCQUFRLFdBQVksT0FBTyxNQUFQLENBQVosQ0FYTDtBQVlILDBCQUFVLFNBWlA7QUFhSCw4QkFBYyxTQWJYO0FBY0gsMkJBQVcsU0FkUjtBQWVILDhCQUFjLFdBQVksT0FBTyxlQUFQLENBQVosQ0FmWDtBQWdCSCwrQkFBZSxXQUFZLE9BQU8sUUFBUCxDQUFaLENBaEJaO0FBaUJILHdCQUFRO0FBakJMLGFBQVA7QUFtQkgsU0FoSlM7QUFrSkosb0JBbEpJO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkFtSkEsU0FBSyxXQUFMLEVBbkpBO0FBQUE7QUFBQSx1QkFvSmUsU0FBSyxxQkFBTCxFQXBKZjtBQUFBO0FBb0pGLHdCQXBKRTtBQXFKRix1QkFySkUsR0FxSlEsU0FBSyxPQUFMLENBQWMsU0FBUyxTQUFULENBQWQsRUFBbUMsU0FBbkMsQ0FySlI7QUFzSkYsbUJBdEpFLEdBc0pJLE9BQU8sSUFBUCxDQUFhLE9BQWIsQ0F0Sko7QUF1SkYsc0JBdkpFLEdBdUpPLEVBdkpQOztBQXdKTixxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLElBQUksTUFBeEIsRUFBZ0MsR0FBaEMsRUFBcUM7QUFDN0Isc0JBRDZCLEdBQ3hCLElBQUksQ0FBSixDQUR3QjtBQUU3QiwwQkFGNkIsR0FFcEIsU0FBSyxhQUFMLENBQW1CLEVBQW5CLENBRm9CO0FBRzdCLDBCQUg2QixHQUdwQixPQUFPLFFBQVAsQ0FIb0I7QUFJN0IsMEJBSjZCLEdBSXBCLFFBQVEsRUFBUixDQUpvQjs7QUFLakMsMkJBQU8sTUFBUCxJQUFpQixTQUFLLFdBQUwsQ0FBa0IsTUFBbEIsRUFBMEIsTUFBMUIsQ0FBakI7QUFDSDtBQUNELHVCQUFPLE1BQVA7QUEvSk07QUFBQTtBQWtLSixtQkFsS0ksdUJBa0tTLE1BbEtUO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBbUtBLFNBQUssV0FBTCxFQW5LQTtBQUFBO0FBb0tGLGlCQXBLRSxHQW9LRSxTQUFLLE1BQUwsQ0FBYSxNQUFiLENBcEtGO0FBQUEsdUJBcUthLFNBQUssc0JBQUwsQ0FBNkI7QUFDNUMsMEJBQU0sRUFBRSxJQUFGO0FBRHNDLGlCQUE3QixDQXJLYjtBQUFBO0FBcUtGLHNCQXJLRTs7QUF3S04sdUJBQU8sU0FBSyxXQUFMLENBQWtCLE1BQWxCLEVBQTBCLENBQTFCLENBQVA7QUF4S007QUFBQTtBQTJLSixtQkEzS0ksdUJBMktTLE1BM0tUO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBMktpQixzQkEzS2pCLG1GQTJLMEIsRUEzSzFCO0FBQUEsdUJBNEtBLFNBQUssV0FBTCxFQTVLQTtBQUFBO0FBNktOLHVCQUFPLFNBQUssc0JBQUwsQ0FBNkIsU0FBSyxNQUFMLENBQWE7QUFDN0MsMEJBQU0sU0FBSyxRQUFMLENBQWUsTUFBZjtBQUR1QyxpQkFBYixFQUVqQyxNQUZpQyxDQUE3QixDQUFQO0FBN0tNO0FBQUE7QUFrTEosbUJBbExJLHVCQWtMUyxNQWxMVCxFQWtMaUIsSUFsTGpCLEVBa0x1QixJQWxMdkIsRUFrTDZCLE1BbEw3QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFrTHFDLHFCQWxMckMsbUZBa0w2QyxTQWxMN0M7QUFrTHdELHNCQWxMeEQsbUZBa0xpRSxFQWxMakU7QUFBQSx1QkFtTEEsU0FBSyxXQUFMLEVBbkxBO0FBQUE7QUFvTE4sb0JBQUksUUFBUSxRQUFaO0FBQ0ksMEJBQU0sSUFBSSxhQUFKLENBQW1CLFNBQUssRUFBTCxHQUFVLDJCQUE3QixDQUFOO0FBREosaUJBcExNLE9Bc0xlLFNBQUssNEJBQUwsQ0FBbUMsU0FBSyxNQUFMLENBQWE7QUFDakUsK0JBQVcsU0FBSyxRQUFMLENBQWUsTUFBZixDQURzRDtBQUVqRSw0QkFBUSxJQUZ5RDtBQUdqRSw4QkFBVSxNQUh1RDtBQUlqRSw2QkFBUztBQUp3RCxpQkFBYixFQUtyRCxNQUxxRCxDQUFuQyxDQXRMZjtBQUFBO0FBc0xGLHdCQXRMRTs7QUE0TE4sdUJBQU87QUFDSCw0QkFBUSxRQURMO0FBRUgsMEJBQU0sU0FBUyxJQUFULEVBQWUsUUFBZjtBQUZILGlCQUFQO0FBNUxNO0FBQUE7QUFrTUosbUJBbE1JLHVCQWtNUyxFQWxNVDtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQWtNYSxzQkFsTWIsbUZBa01zQixFQWxNdEI7QUFBQSx1QkFtTUEsU0FBSyxXQUFMLEVBbk1BO0FBQUE7QUFvTU4sdUJBQU8sU0FBSyxnQ0FBTCxDQUF1QyxTQUFLLE1BQUwsQ0FBYTtBQUN2RCwwQkFBTTtBQURpRCxpQkFBYixFQUUzQyxNQUYyQyxDQUF2QyxDQUFQO0FBcE1NO0FBQUE7QUF5TUosZUF6TUksbUJBeU1LLElBek1MO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBeU1XLG1CQXpNWCxtRkF5TWlCLFFBek1qQjtBQXlNMkIsc0JBek0zQixtRkF5TW9DLEtBek1wQztBQXlNMkMsc0JBek0zQyxtRkF5TW9ELEVBek1wRDtBQXlNd0QsdUJBek14RCxtRkF5TWtFLFNBek1sRTtBQXlNNkUsb0JBek03RSxtRkF5TW9GLFNBek1wRjtBQTBNRixtQkExTUUsR0EwTUksU0FBSyxJQUFMLENBQVUsS0FBVixJQUFtQixHQUFuQixHQUF5QixTQUFLLE9BQTlCLEdBQXdDLEdBQXhDLEdBQThDLFNBQUssYUFBTCxDQUFvQixJQUFwQixFQUEwQixNQUExQixDQTFNbEQ7QUEyTUYscUJBM01FLEdBMk1NLFNBQUssSUFBTCxDQUFXLE1BQVgsRUFBbUIsU0FBSyxhQUFMLENBQW9CLElBQXBCLENBQW5CLENBM01OOztBQTRNTixvQkFBSSxPQUFPLFNBQVgsRUFBc0I7QUFDZCx5QkFEYyxHQUNOLFNBQUssS0FBTCxHQUFjLFFBQWQsRUFETTtBQUVkLHdCQUZjLEdBRVAsUUFBUSxHQUZEOztBQUdsQiw4QkFBVTtBQUNOLHFDQUFhLFNBQUssTUFEWjtBQUVOLHVDQUFlLEtBRlQ7QUFHTixzQ0FBYyxTQUFLLElBQUwsQ0FBVyxTQUFLLE1BQUwsQ0FBYSxJQUFiLENBQVgsRUFBK0IsU0FBSyxNQUFMLENBQWEsU0FBSyxNQUFsQixDQUEvQixFQUEwRCxRQUExRDtBQUhSLHFCQUFWO0FBS0Esd0JBQUksT0FBTyxJQUFQLENBQWEsS0FBYixFQUFvQixNQUF4QixFQUFnQztBQUM1QiwrQkFBTyxTQUFLLElBQUwsQ0FBVyxLQUFYLENBQVA7QUFDQSxnQ0FBUSxjQUFSLElBQTBCLGtCQUExQjtBQUNIO0FBQ0o7QUF4TkssdUJBeU5lLFNBQUssS0FBTCxDQUFZLEdBQVosRUFBaUIsTUFBakIsRUFBeUIsT0FBekIsRUFBa0MsSUFBbEMsQ0F6TmY7QUFBQTtBQXlORix3QkF6TkU7O0FBME5OLG9CQUFJLFlBQVksUUFBaEI7QUFDSSwwQkFBTSxJQUFJLGFBQUosQ0FBbUIsU0FBSyxFQUFMLEdBQVUsR0FBVixHQUFnQixTQUFLLElBQUwsQ0FBVyxRQUFYLENBQW5DLENBQU47QUFESixpQkFFQSxPQUFPLFFBQVA7QUE1Tk07QUFBQTtBQUFBLEtBQWQ7O0FBZ09BOztBQUVBLFFBQUksVUFBVSxPQUFRLFVBQVIsRUFBb0I7QUFDOUIsY0FBTSxTQUR3QjtBQUU5QixnQkFBUSxTQUZzQjtBQUc5QixxQkFBYSxJQUhpQjtBQUk5QixnQkFBUTtBQUNKLG9CQUFRLHFHQURKO0FBRUosbUJBQU87QUFDSCwwQkFBVSxnQ0FEUDtBQUVILDJCQUFXO0FBRlIsYUFGSDtBQU1KLG1CQUFPLHFCQU5IO0FBT0osbUJBQU87QUFQSCxTQUpzQjtBQWE5QixtQkFBVyxnQkFibUI7QUFjOUIsbUJBQVc7QUFDUCx1QkFBVyxFQUFFLE1BQU0sUUFBUixFQUFrQixVQUFVLFNBQTVCLEVBQXVDLFFBQVEsS0FBL0MsRUFBc0QsU0FBUyxLQUEvRCxFQUFzRSxZQUFZLENBQWxGLEVBQXFGLFVBQVUsU0FBL0Y7QUFESjtBQWRtQixLQUFwQixDQUFkOztBQW1CQTs7QUFFQSxRQUFJLFdBQVc7O0FBRVgsY0FBTSxVQUZLO0FBR1gsZ0JBQVEsVUFIRztBQUlYLHFCQUFhLElBSkY7QUFLWCxxQkFBYSxJQUxGO0FBTVgsbUJBQVcsR0FOQTtBQU9YLGdCQUFRO0FBQ0osb0JBQVEscUdBREo7QUFFSixtQkFBTywwQkFGSDtBQUdKLG1CQUFPLDBCQUhIO0FBSUosbUJBQU87QUFKSCxTQVBHO0FBYVgsZUFBTztBQUNILHNCQUFVO0FBQ04sdUJBQU8sQ0FDSCxXQURHLEVBRUgsV0FGRyxFQUdILFFBSEcsRUFJSCxjQUpHLEVBS0gsU0FMRyxFQU1ILFdBTkcsRUFPSCxZQVBHLEVBUUgsa0JBUkcsRUFTSCxtQkFURyxFQVVILG9CQVZHO0FBREQsYUFEUDtBQWVILHVCQUFXO0FBQ1AsdUJBQU8sQ0FDSCxTQURHLEVBRUgsVUFGRyxFQUdILFFBSEcsQ0FEQTtBQU1QLHdCQUFRLENBQ0oscUJBREksRUFFSixhQUZJLEVBR0osc0JBSEksRUFJSixVQUpJO0FBTkQ7QUFmUixTQWJJOztBQTJDTCxvQkEzQ0s7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQTRDSCxzQkE1Q0csR0E0Q00sRUE1Q047QUFBQSx1QkE2Q2EsU0FBSyxnQkFBTCxFQTdDYjtBQUFBO0FBNkNILHVCQTdDRztBQThDSCxzQkE5Q0csR0E4Q00sUUFBUSxNQUFSLENBOUNOO0FBK0NILG9CQS9DRyxHQStDSSxPQUFPLGNBQVAsQ0EvQ0o7QUFnREgscUJBaERHLEdBZ0RLLE9BQU8sZ0JBQVAsQ0FoREw7QUFpREgsc0JBakRHLEdBaURNLE9BQU8sR0FBUCxHQUFhLEtBakRuQjtBQWtESCxzQkFsREcsR0FrRE0sSUFsRE47QUFtREgsdUJBbkRHLEdBbURPLEtBbkRQO0FBb0RILGtCQXBERyxHQW9ERSxPQUFPLFlBQVAsQ0FwREY7O0FBcURQLHVCQUFPLElBQVAsQ0FBYTtBQUNULDBCQUFNLEVBREc7QUFFVCw4QkFBVSxNQUZEO0FBR1QsNEJBQVEsSUFIQztBQUlULDZCQUFTLEtBSkE7QUFLVCw4QkFBVSxNQUxEO0FBTVQsK0JBQVcsT0FORjtBQU9ULDRCQUFRO0FBUEMsaUJBQWI7QUFTQSx1QkFBTyxNQUFQO0FBOURPO0FBQUE7QUFpRUwsb0JBakVLO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBa0VELFNBQUssV0FBTCxFQWxFQztBQUFBO0FBQUEsdUJBbUVjLFNBQUssaUJBQUwsRUFuRWQ7QUFBQTtBQW1FSCx3QkFuRUc7QUFvRUgsd0JBcEVHLEdBb0VRLFNBQVMsTUFBVCxDQXBFUjtBQXFFSCxzQkFyRUcsR0FxRU0sRUFBRSxRQUFRLFFBQVYsRUFyRU47O0FBc0VQLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksU0FBUyxNQUE3QixFQUFxQyxHQUFyQyxFQUEwQztBQUNsQywyQkFEa0MsR0FDeEIsU0FBUyxDQUFULENBRHdCO0FBRWxDLDRCQUZrQyxHQUV2QixRQUFRLGVBQVIsQ0FGdUI7QUFHbEMsNkJBSGtDLEdBR3RCLFNBQVMsV0FBVCxFQUhzQjtBQUlsQyx3QkFKa0MsR0FJM0IsUUFBUSxNQUFSLENBSjJCO0FBS2xDLHdCQUxrQyxHQUszQixRQUFRLFVBQVIsQ0FMMkI7QUFNbEMseUJBTmtDLEdBTTFCLFNBQUssR0FBTCxDQUFVLElBQVYsRUFBZ0IsSUFBaEIsQ0FOMEI7QUFPbEMsMkJBUGtDLEdBT3hCO0FBQ1YsZ0NBQVEsSUFERTtBQUVWLGdDQUFRLElBRkU7QUFHVixpQ0FBUztBQUhDLHFCQVB3Qjs7QUFZdEMsMkJBQU8sUUFBUCxJQUFtQixPQUFuQjtBQUNIO0FBQ0QsdUJBQU8sTUFBUDtBQXBGTztBQUFBO0FBdUZMLHNCQXZGSywwQkF1RlcsTUF2Rlg7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUF1Rm1CLHNCQXZGbkIsbUZBdUY0QixFQXZGNUI7QUFBQSx1QkF3RkQsU0FBSyxXQUFMLEVBeEZDO0FBQUE7QUFBQSx1QkF5RmMsU0FBSyxrQkFBTCxDQUF5QixNQUF6QixDQXpGZDtBQUFBO0FBeUZILHdCQXpGRztBQTBGSCx5QkExRkcsR0EwRlM7QUFDWiw0QkFBUSxTQUFTLE1BQVQsRUFBaUIsQ0FBakIsRUFBb0IsR0FBcEIsQ0FESTtBQUVaLDRCQUFRLFNBQVMsTUFBVCxFQUFpQixDQUFqQixFQUFvQixHQUFwQjtBQUZJLGlCQTFGVDtBQThGSCx5QkE5RkcsR0E4RlMsU0FBSyxZQUFMLEVBOUZUO0FBK0ZILHNCQS9GRyxHQStGTTtBQUNULDRCQUFRLEVBREM7QUFFVCw0QkFBUSxFQUZDO0FBR1QsaUNBQWEsU0FISjtBQUlULGdDQUFZLFNBQUssT0FBTCxDQUFjLFNBQWQ7QUFKSCxpQkEvRk47QUFxR0gscUJBckdHLEdBcUdLLENBQUUsTUFBRixFQUFVLE1BQVYsQ0FyR0w7O0FBc0dQLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksTUFBTSxNQUExQixFQUFrQyxHQUFsQyxFQUF1QztBQUMvQix3QkFEK0IsR0FDeEIsTUFBTSxDQUFOLENBRHdCO0FBRS9CLDBCQUYrQixHQUV0QixVQUFVLElBQVYsQ0FGc0I7O0FBR25DLHlCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksT0FBTyxNQUEzQixFQUFtQyxHQUFuQyxFQUF3QztBQUNoQyw2QkFEZ0MsR0FDeEIsT0FBTyxDQUFQLENBRHdCO0FBRWhDLDZCQUZnQyxHQUV4QixNQUFNLFlBQU4sQ0FGd0I7QUFHaEMsOEJBSGdDLEdBR3ZCLE1BQU0sYUFBTixDQUh1Qjs7QUFJcEMsK0JBQU8sSUFBUCxFQUFhLElBQWIsQ0FBbUIsQ0FBRSxLQUFGLEVBQVMsTUFBVCxDQUFuQjtBQUNIO0FBQ0o7QUFDRCx1QkFBTyxNQUFQLElBQWlCLFNBQUssTUFBTCxDQUFhLE9BQU8sTUFBUCxDQUFiLEVBQTZCLENBQTdCLEVBQWdDLElBQWhDLENBQWpCO0FBQ0EsdUJBQU8sTUFBUDtBQWpITztBQUFBO0FBb0hMLG1CQXBISyx1QkFvSFEsTUFwSFI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBcUhELFNBQUssV0FBTCxFQXJIQztBQUFBO0FBQUEsdUJBc0hXLFNBQUssa0JBQUwsRUF0SFg7QUFBQTtBQXNISCxxQkF0SEc7QUF1SEgsMEJBdkhHLEdBdUhVLE1BQU0sTUFBTixFQUFjLE1Bdkh4QjtBQXdISCxtQkF4SEcsR0F3SEcsTUFBTSxNQUFOLEVBQWMsYUFBYSxDQUEzQixDQXhISDtBQXlISCxtQkF6SEcsR0F5SEcsTUFBTSxNQUFOLEVBQWMsQ0FBZCxDQXpISDtBQUFBLHVCQTBIYyxTQUFLLGdCQUFMLEVBMUhkO0FBQUE7QUEwSEgsd0JBMUhHO0FBMkhILHNCQTNIRyxHQTJITSxTQUFTLE1BQVQsQ0EzSE47QUE0SEgseUJBNUhHLEdBNEhTLFNBQUssWUFBTCxFQTVIVDs7QUE2SFAsdUJBQU87QUFDSCxpQ0FBYSxTQURWO0FBRUgsZ0NBQVksU0FBSyxPQUFMLENBQWMsU0FBZCxDQUZUO0FBR0gsNEJBQVEsV0FBWSxPQUFPLFNBQVAsQ0FBWixDQUhMO0FBSUgsMkJBQU8sV0FBWSxPQUFPLFFBQVAsQ0FBWixDQUpKO0FBS0gsMkJBQU8sSUFBSSxDQUFKLENBTEo7QUFNSCwyQkFBTyxJQUFJLENBQUosQ0FOSjtBQU9ILDRCQUFRLFNBUEw7QUFRSCw0QkFBUSxTQVJMO0FBU0gsNkJBQVMsU0FUTjtBQVVILDZCQUFTLFNBVk47QUFXSCw0QkFBUSxXQUFZLE9BQU8sV0FBUCxDQUFaLENBWEw7QUFZSCw4QkFBVSxTQVpQO0FBYUgsa0NBQWMsU0FiWDtBQWNILCtCQUFXLFNBZFI7QUFlSCxrQ0FBYyxTQWZYO0FBZ0JILG1DQUFlLFdBQVksT0FBTyxXQUFQLENBQVosQ0FoQlo7QUFpQkgsNEJBQVE7QUFqQkwsaUJBQVA7QUE3SE87QUFBQTtBQWtKTCxtQkFsSkssdUJBa0pRLE1BbEpSO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBa0pnQixzQkFsSmhCLG1GQWtKeUIsRUFsSnpCO0FBQUEsdUJBbUpELFNBQUssV0FBTCxFQW5KQztBQUFBO0FBb0pQLHVCQUFPLFNBQUssd0JBQUwsQ0FBK0IsTUFBL0IsQ0FBUDtBQXBKTztBQUFBO0FBdUpMLG1CQXZKSyx1QkF1SlEsTUF2SlIsRUF1SmdCLElBdkpoQixFQXVKc0IsSUF2SnRCLEVBdUo0QixNQXZKNUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQXVKb0MscUJBdkpwQyxtRkF1SjRDLFNBdko1QztBQXVKdUQsc0JBdkp2RCxtRkF1SmdFLEVBdkpoRTtBQUFBLHVCQXdKRCxTQUFLLFdBQUwsRUF4SkM7QUFBQTtBQXlKSCxpQkF6SkcsR0F5SkMsU0FBSyxNQUFMLENBQWEsTUFBYixDQXpKRDtBQTBKSCxzQkExSkcsR0EwSk0sZ0JBQWdCLFNBQUssVUFBTCxDQUFpQixJQUFqQixDQUFoQixHQUF5QyxZQTFKL0M7QUFBQSx1QkEySmMsU0FBSyxNQUFMLEVBQWMsU0FBSyxNQUFMLENBQWE7QUFDNUMsOEJBQVUsRUFBRSxTQUFGLEVBQWEsV0FBYixFQURrQztBQUU1Qyw0QkFBUSxJQUZvQztBQUc1QywyQkFBTyxNQUhxQztBQUk1Qyw2QkFBUyxTQUFTO0FBSjBCLGlCQUFiLEVBS2hDLE1BTGdDLENBQWQsQ0EzSmQ7QUFBQTtBQTJKSCx3QkEzSkc7O0FBaUtQLHVCQUFPO0FBQ0gsNEJBQVEsUUFETDtBQUVILDBCQUFNLFNBQVMsTUFBVCxFQUFpQixVQUFqQjtBQUZILGlCQUFQO0FBaktPO0FBQUE7QUF1S0wsbUJBdktLLHVCQXVLUSxFQXZLUjtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQXVLWSxzQkF2S1osbUZBdUtxQixFQXZLckI7QUFBQSx1QkF3S0QsU0FBSyxXQUFMLEVBeEtDO0FBQUE7QUF5S1AsdUJBQU8sU0FBSyxtQkFBTCxDQUEwQixTQUFLLE1BQUwsQ0FBYTtBQUMxQywwQkFBTTtBQURvQyxpQkFBYixFQUU5QixNQUY4QixDQUExQixDQUFQO0FBektPO0FBQUE7QUE4S1gsZUE5S1csbUJBOEtGLElBOUtFLEVBOEt3RjtBQUFBLGdCQUFwRixHQUFvRix1RUFBOUUsUUFBOEU7QUFBQSxnQkFBcEUsTUFBb0UsdUVBQTNELEtBQTJEO0FBQUEsZ0JBQXBELE1BQW9ELHVFQUEzQyxFQUEyQztBQUFBLGdCQUF2QyxPQUF1Qyx1RUFBN0IsU0FBNkI7QUFBQSxnQkFBbEIsSUFBa0IsdUVBQVgsU0FBVzs7QUFDL0YsZ0JBQUksTUFBTSxLQUFLLElBQUwsQ0FBVSxLQUFWLElBQW1CLEdBQTdCO0FBQ0EsZ0JBQUksT0FBTyxRQUFYLEVBQXFCO0FBQ2pCLHVCQUFPLElBQVA7QUFDSCxhQUZELE1BRU87QUFDSCxvQkFBSSxRQUFRLEtBQUssS0FBTCxFQUFaO0FBQ0EsdUJBQU8sS0FBSyxPQUFMLEdBQWUsR0FBZixHQUFxQixLQUFLLGFBQUwsQ0FBb0IsSUFBcEIsRUFBMEIsTUFBMUIsQ0FBNUI7QUFDQSxvQkFBSSxRQUFRLEtBQUssTUFBTCxDQUFhO0FBQ3JCLDZCQUFTLEtBRFk7QUFFckIsOEJBQVUsS0FBSztBQUZNLGlCQUFiLEVBR1QsS0FBSyxJQUFMLENBQVcsTUFBWCxFQUFtQixLQUFLLGFBQUwsQ0FBb0IsSUFBcEIsQ0FBbkIsQ0FIUyxDQUFaO0FBSUEsdUJBQU8sTUFBTSxLQUFLLFNBQUwsQ0FBZ0IsS0FBaEIsQ0FBYjtBQUNBLDBCQUFVO0FBQ04sb0NBQWdCLGtCQURWO0FBRU4sbUNBQWUsS0FBSyxJQUFMLENBQVcsS0FBSyxNQUFMLENBQWEsR0FBYixDQUFYLEVBQThCLEtBQUssTUFBTCxDQUFhLEtBQUssTUFBbEIsQ0FBOUI7QUFGVCxpQkFBVjtBQUlIO0FBQ0QsbUJBQU8sS0FBSyxLQUFMLENBQVksR0FBWixFQUFpQixNQUFqQixFQUF5QixPQUF6QixFQUFrQyxJQUFsQyxDQUFQO0FBQ0g7QUFoTVUsS0FBZjs7QUFtTUE7O0FBRUEsUUFBSSxPQUFPLE9BQVEsVUFBUixFQUFvQjtBQUMzQixjQUFNLE1BRHFCO0FBRTNCLGdCQUFRLE1BRm1CO0FBRzNCLHFCQUFhLElBSGM7QUFJM0IsZ0JBQVE7QUFDSixvQkFBUSxxR0FESjtBQUVKLG1CQUFPO0FBQ0gsMEJBQVUsZ0NBRFA7QUFFSCwyQkFBVztBQUZSLGFBRkg7QUFNSixtQkFBTyx1QkFOSDtBQU9KLG1CQUFPO0FBUEgsU0FKbUI7QUFhM0IsbUJBQVcsZ0JBYmdCO0FBYzNCLG1CQUFXO0FBQ1AsdUJBQVcsRUFBRSxNQUFNLFFBQVIsRUFBa0IsVUFBVSxTQUE1QixFQUF1QyxRQUFRLEtBQS9DLEVBQXNELFNBQVMsS0FBL0QsRUFBc0UsWUFBWSxDQUFsRixFQUFxRixVQUFVLE1BQS9GO0FBREo7QUFkZ0IsS0FBcEIsQ0FBWDs7QUFvQkE7O0FBRUEsUUFBSSxTQUFTOztBQUVULGNBQU0sUUFGRztBQUdULGdCQUFRLFFBSEM7QUFJVCxxQkFBYSxJQUpKO0FBS1QscUJBQWEsSUFMSjtBQU1ULGdCQUFRO0FBQ0osb0JBQVEscUdBREo7QUFFSixtQkFBTztBQUNILDBCQUFVLG9DQURQO0FBRUgsMkJBQVc7QUFGUixhQUZIO0FBTUosbUJBQU8sd0JBTkg7QUFPSixtQkFBTztBQVBILFNBTkM7QUFlVCxlQUFPO0FBQ0gsc0JBQVU7QUFDTix1QkFBTyxDQUNILGdCQURHLEVBRUgsZUFGRyxFQUdILGdCQUhHLEVBSUgscUJBSkcsRUFLSCxzQkFMRyxFQU1ILGlCQU5HLEVBT0gsZUFQRyxFQVFILGlCQVJHLEVBU0gsYUFURyxFQVVILG1CQVZHLENBREQ7QUFhTix3QkFBUSxDQUNKLGdCQURJLEVBRUosZUFGSSxFQUdKLGdCQUhJLEVBSUoscUJBSkksRUFLSixzQkFMSSxFQU1KLGlCQU5JLEVBT0osZUFQSSxFQVFKLGlCQVJJLEVBU0osYUFUSSxFQVVKLG1CQVZJO0FBYkYsYUFEUDtBQTJCSCx1QkFBVztBQUNQLHVCQUFPLENBQ0gsYUFERyxFQUVILGFBRkcsRUFHSCx1QkFIRyxFQUlILFdBSkcsRUFLSCxpQkFMRyxFQU1ILFlBTkcsQ0FEQTtBQVNQLHdCQUFRLENBQ0osYUFESSxFQUVKLGFBRkksRUFHSix1QkFISSxFQUlKLFdBSkksRUFLSixpQkFMSSxFQU1KLFlBTkk7QUFURDtBQTNCUixTQWZFOztBQThESCxvQkE5REc7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQStEZSxTQUFLLG9CQUFMLEVBL0RmO0FBQUE7QUErREQsdUJBL0RDO0FBZ0VELG9CQWhFQyxHQWdFTSxPQUFPLElBQVAsQ0FBYSxRQUFRLFFBQVIsQ0FBYixDQWhFTjtBQWlFRCxzQkFqRUMsR0FpRVEsRUFqRVI7O0FBa0VMLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksS0FBSyxNQUF6QixFQUFpQyxHQUFqQyxFQUFzQztBQUM5QiwwQkFEOEIsR0FDckIsUUFBUSxRQUFSLEVBQWtCLEtBQUssQ0FBTCxDQUFsQixDQURxQjtBQUU5QixzQkFGOEIsR0FFekIsT0FBTyxjQUFQLENBRnlCO0FBRzlCLDBCQUg4QixHQUdyQixPQUFPLFFBQVAsQ0FIcUI7QUFJOUIsd0JBSjhCLEdBSXZCLE9BQU8sY0FBUCxDQUp1QjtBQUs5Qix5QkFMOEIsR0FLdEIsT0FBTyxlQUFQLENBTHNCOztBQU1sQywyQkFBTyxJQUFQLENBQWE7QUFDVCw4QkFBTSxFQURHO0FBRVQsa0NBQVUsTUFGRDtBQUdULGdDQUFRLElBSEM7QUFJVCxpQ0FBUyxLQUpBO0FBS1QsZ0NBQVE7QUFMQyxxQkFBYjtBQU9IO0FBQ0QsdUJBQU8sTUFBUDtBQWhGSztBQUFBO0FBbUZILG9CQW5GRztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQW9GQyxTQUFLLFdBQUwsRUFwRkQ7QUFBQTtBQUFBLHVCQXFGZ0IsU0FBSyxzQkFBTCxFQXJGaEI7QUFBQTtBQXFGRCx3QkFyRkM7QUFzRkQsd0JBdEZDLEdBc0ZVLFNBQVMsUUFBVCxFQUFtQixhQUFuQixDQXRGVjtBQXVGRCxzQkF2RkMsR0F1RlEsRUFBRSxRQUFRLFFBQVYsRUF2RlI7O0FBd0ZMLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksU0FBUyxNQUE3QixFQUFxQyxHQUFyQyxFQUEwQztBQUNsQywyQkFEa0MsR0FDeEIsU0FBUyxDQUFULENBRHdCO0FBRWxDLDRCQUZrQyxHQUV2QixRQUFRLFVBQVIsQ0FGdUI7QUFHbEMseUJBSGtDLEdBRzFCLFFBQVEsU0FBUixDQUgwQjtBQUlsQywyQkFKa0MsR0FJeEI7QUFDVixnQ0FBUSxLQURFO0FBRVYsZ0NBQVEsU0FGRTtBQUdWLGlDQUFTO0FBSEMscUJBSndCOztBQVN0QywyQkFBTyxRQUFQLElBQW1CLE9BQW5CO0FBQ0g7QUFDRCx1QkFBTyxNQUFQO0FBbkdLO0FBQUE7QUFzR0gsdUJBdEdHLDJCQXNHYyxNQXRHZDtBQUFBOztBQUFBO0FBQUEsdUJBdUdDLFNBQUssV0FBTCxFQXZHRDtBQUFBO0FBd0dMLHVCQUFPLFNBQUssdUJBQUwsQ0FBOEI7QUFDakMsK0JBQVcsQ0FBRSxTQUFLLE1BQUwsQ0FBYSxNQUFiLENBQUY7QUFEc0IsaUJBQTlCLENBQVA7QUF4R0s7QUFBQTtBQTZHSCxzQkE3R0csMEJBNkdhLE1BN0diO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQTZHcUIsc0JBN0dyQixtRkE2RzhCLEVBN0c5QjtBQUFBLHVCQThHQyxTQUFLLFdBQUwsRUE5R0Q7QUFBQTtBQUFBLHVCQStHZ0IsU0FBSyx3QkFBTCxDQUErQixTQUFLLE1BQUwsQ0FBYTtBQUM3RCwrQkFBVyxDQUFFLFNBQUssTUFBTCxDQUFhLE1BQWIsQ0FBRixDQURrRDtBQUU3RCxnQ0FBWSxHQUZpRDtBQUc3RCxpQ0FBYTtBQUhnRCxpQkFBYixFQUlqRCxNQUppRCxDQUEvQixDQS9HaEI7QUFBQTtBQStHRCx3QkEvR0M7QUFvSEQseUJBcEhDLEdBb0hXLFNBQVMsUUFBVCxFQUFtQixDQUFuQixDQXBIWDtBQXFIRCx5QkFySEMsR0FxSFcsU0FBSyxZQUFMLEVBckhYO0FBc0hELHNCQXRIQyxHQXNIUTtBQUNULDRCQUFRLEVBREM7QUFFVCw0QkFBUSxFQUZDO0FBR1QsaUNBQWEsU0FISjtBQUlULGdDQUFZLFNBQUssT0FBTCxDQUFjLFNBQWQ7QUFKSCxpQkF0SFI7QUE0SEQscUJBNUhDLEdBNEhPLEVBQUUsUUFBUSxLQUFWLEVBQWlCLFFBQVEsTUFBekIsRUE1SFA7QUE2SEQsb0JBN0hDLEdBNkhNLE9BQU8sSUFBUCxDQUFhLEtBQWIsQ0E3SE47O0FBOEhMLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksS0FBSyxNQUF6QixFQUFpQyxHQUFqQyxFQUFzQztBQUM5Qix1QkFEOEIsR0FDeEIsS0FBSyxDQUFMLENBRHdCO0FBRTlCLHdCQUY4QixHQUV2QixNQUFNLEdBQU4sQ0FGdUI7QUFHOUIsMEJBSDhCLEdBR3JCLFVBQVUsSUFBVixDQUhxQjs7QUFJbEMseUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxPQUFPLE1BQTNCLEVBQW1DLEdBQW5DLEVBQXdDO0FBQ2hDLDZCQURnQyxHQUN4QixPQUFPLENBQVAsQ0FEd0I7QUFFaEMsNkJBRmdDLEdBRXhCLFdBQVksTUFBTSxPQUFOLENBQVosQ0FGd0I7QUFHaEMsOEJBSGdDLEdBR3ZCLFdBQVksTUFBTSxRQUFOLENBQVosQ0FIdUI7O0FBSXBDLCtCQUFPLEdBQVAsRUFBWSxJQUFaLENBQWtCLENBQUUsS0FBRixFQUFTLE1BQVQsQ0FBbEI7QUFDSDtBQUNKO0FBQ0QsdUJBQU8sTUFBUDtBQXpJSztBQUFBO0FBNElILG1CQTVJRyx1QkE0SVUsTUE1SVY7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQTZJQyxTQUFLLFdBQUwsRUE3SUQ7QUFBQTtBQThJRCxtQkE5SUMsR0E4SUssU0FBSyxZQUFMLEVBOUlMO0FBK0lELHFCQS9JQyxHQStJTyxNQUFNLFFBL0liO0FBQUEsdUJBZ0pnQixTQUFLLDBCQUFMLENBQWlDO0FBQ2xELGtDQUFjLFNBQUssTUFBTCxDQUFhLE1BQWIsQ0FEb0M7QUFFbEQsK0JBQVcsU0FBSyxjQUFMLENBQXFCLEdBQXJCLENBRnVDO0FBR2xELGlDQUFhLFNBQUssY0FBTCxDQUFxQixLQUFyQixDQUhxQztBQUlsRCw0QkFBUTtBQUowQyxpQkFBakMsQ0FoSmhCO0FBQUE7QUFnSkQsd0JBaEpDO0FBc0pELHVCQXRKQyxHQXNKUyxTQUFTLFFBQVQsRUFBbUIsaUJBQW5CLENBdEpUO0FBdUpELG9CQXZKQyxHQXVKTSxPQUFPLElBQVAsQ0FBYSxPQUFiLENBdkpOO0FBd0pELHNCQXhKQyxHQXdKUSxLQUFLLE1BeEpiO0FBeUpELHVCQXpKQyxHQXlKUyxLQUFLLFNBQVMsQ0FBZCxDQXpKVDtBQTBKRCxzQkExSkMsR0EwSlEsUUFBUSxPQUFSLENBMUpSO0FBMkpELHlCQTNKQyxHQTJKVyxTQUFLLFlBQUwsRUEzSlg7O0FBNEpMLHVCQUFPO0FBQ0gsaUNBQWEsU0FEVjtBQUVILGdDQUFZLFNBQUssT0FBTCxDQUFjLFNBQWQsQ0FGVDtBQUdILDRCQUFRLFdBQVksT0FBTyxNQUFQLENBQVosQ0FITDtBQUlILDJCQUFPLFdBQVksT0FBTyxLQUFQLENBQVosQ0FKSjtBQUtILDJCQUFPLFNBTEo7QUFNSCwyQkFBTyxTQU5KO0FBT0gsNEJBQVEsU0FQTDtBQVFILDRCQUFRLFdBQVksT0FBTyxNQUFQLENBQVosQ0FSTDtBQVNILDZCQUFTLFdBQVksT0FBTyxPQUFQLENBQVosQ0FUTjtBQVVILDZCQUFTLFNBVk47QUFXSCw0QkFBUSxTQVhMO0FBWUgsOEJBQVUsU0FaUDtBQWFILGtDQUFjLFNBYlg7QUFjSCwrQkFBVyxTQWRSO0FBZUgsa0NBQWMsV0FBWSxPQUFPLFlBQVAsQ0FBWixDQWZYO0FBZ0JILG1DQUFlLFdBQVksT0FBTyxhQUFQLENBQVosQ0FoQlo7QUFpQkgsNEJBQVE7QUFqQkwsaUJBQVA7QUE1Sks7QUFBQTtBQWlMSCxtQkFqTEcsdUJBaUxVLE1BakxWO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBaUxrQixzQkFqTGxCLG1GQWlMMkIsRUFqTDNCO0FBQUEsdUJBa0xDLFNBQUssV0FBTCxFQWxMRDtBQUFBO0FBbUxMLHVCQUFPLFNBQUsscUJBQUwsQ0FBMkIsU0FBSyxNQUFMLENBQWE7QUFDM0Msa0NBQWMsU0FBSyxNQUFMLENBQWEsTUFBYixDQUQ2QjtBQUUzQyxnQ0FBWTtBQUYrQixpQkFBYixFQUcvQixNQUgrQixDQUEzQixDQUFQO0FBbkxLO0FBQUE7QUF5TEgsbUJBekxHLHVCQXlMVSxNQXpMVixFQXlMa0IsSUF6TGxCLEVBeUx3QixJQXpMeEIsRUF5TDhCLE1Bekw5QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQXlMc0MscUJBekx0QyxtRkF5TDhDLFNBekw5QztBQXlMeUQsc0JBekx6RCxtRkF5TGtFLEVBekxsRTtBQUFBLHVCQTBMQyxTQUFLLFdBQUwsRUExTEQ7QUFBQTtBQTJMRCxxQkEzTEMsR0EyTE87QUFDUixrQ0FBYyxTQUFLLE1BQUwsQ0FBYSxNQUFiLENBRE47QUFFUixpQ0FBYSxLQUFLLFdBQUwsRUFGTDtBQUdSLDhCQUFVO0FBSEYsaUJBM0xQOztBQWdNTCxvQkFBSSxRQUFRLE9BQVo7QUFDSSwwQkFBTSxPQUFOLElBQWlCLEtBQWpCO0FBREosaUJBaE1LLE9Ba01nQixTQUFLLHFCQUFMLENBQTRCLFNBQUssTUFBTCxDQUFhLEtBQWIsRUFBb0IsTUFBcEIsQ0FBNUIsQ0FsTWhCO0FBQUE7QUFrTUQsd0JBbE1DOztBQW1NTCx1QkFBTztBQUNILDRCQUFRLFFBREw7QUFFSCwwQkFBTSxTQUFTLFNBQVQsRUFBb0IsUUFBcEI7QUFGSCxpQkFBUDtBQW5NSztBQUFBO0FBeU1ILG1CQXpNRyx1QkF5TVUsRUF6TVY7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUF5TWMsc0JBek1kLG1GQXlNdUIsRUF6TXZCO0FBQUEsdUJBME1DLFNBQUssV0FBTCxFQTFNRDtBQUFBO0FBMk1MLHVCQUFPLFNBQUssc0JBQUwsQ0FBNkIsU0FBSyxNQUFMLENBQWE7QUFDN0MsK0JBQVc7QUFEa0MsaUJBQWIsRUFFakMsTUFGaUMsQ0FBN0IsQ0FBUDtBQTNNSztBQUFBO0FBZ05ILGVBaE5HLG1CQWdOTSxJQWhOTjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFnTlksbUJBaE5aLG1GQWdOa0IsUUFoTmxCO0FBZ040QixzQkFoTjVCLG1GQWdOcUMsS0FoTnJDO0FBZ040QyxzQkFoTjVDLG1GQWdOcUQsRUFoTnJEO0FBZ055RCx1QkFoTnpELG1GQWdObUUsU0FoTm5FO0FBZ044RSxvQkFoTjlFLG1GQWdOcUYsU0FoTnJGO0FBaU5ELG1CQWpOQyxHQWlOSyxTQUFLLElBQUwsQ0FBVSxLQUFWLEVBQWlCLEdBQWpCLENBak5MO0FBa05ELG9CQWxOQyxHQWtOTSxFQWxOTjs7QUFtTkwsb0JBQUksT0FBTyxTQUFYLEVBQXNCO0FBQ2xCLHlCQUFLLEtBQUwsSUFBYyxTQUFLLE1BQW5CO0FBQ0EseUJBQUssTUFBTCxJQUFlLFNBQUssS0FBcEI7QUFDQSx5QkFBSyxNQUFMLElBQWUsU0FBSyxRQUFwQjtBQUNIO0FBQ0cscUJBeE5DLEdBd05PLFNBQUssS0FBTCxFQXhOUDs7QUF5Tkwsb0JBQUksVUFBVSxLQUFkLEVBQXFCO0FBQ2pCLDJCQUFPLE1BQU0sU0FBSyxTQUFMLENBQWdCLFNBQUssTUFBTCxDQUFhO0FBQ3RDLGtDQUFVLElBRDRCO0FBRXRDLDhCQUFNO0FBRmdDLHFCQUFiLEVBRzFCLElBSDBCLEVBR3BCLE1BSG9CLENBQWhCLENBQWI7QUFJSCxpQkFMRCxNQUtPO0FBQ0gsOEJBQVUsRUFBRSxnQkFBZ0Isa0JBQWxCLEVBQVY7QUFDQSwyQkFBTyxTQUFLLElBQUwsQ0FBVztBQUNkLGtDQUFVLElBREk7QUFFZCxrQ0FBVSxTQUFLLE1BQUwsQ0FBYSxJQUFiLEVBQW1CLE1BQW5CLENBRkk7QUFHZCw4QkFBTTtBQUhRLHFCQUFYLENBQVA7QUFLSDtBQXJPSSx1QkFzT2dCLFNBQUssS0FBTCxDQUFZLEdBQVosRUFBaUIsTUFBakIsRUFBeUIsT0FBekIsRUFBa0MsSUFBbEMsQ0F0T2hCO0FBQUE7QUFzT0Qsd0JBdE9DOztBQXVPTCxvQkFBSSxXQUFXLFFBQWY7QUFDSSx3QkFBSSxTQUFTLE9BQVQsQ0FBSjtBQUNJLDhCQUFNLElBQUksYUFBSixDQUFtQixTQUFLLEVBQUwsR0FBVSxHQUFWLEdBQWdCLFNBQUssSUFBTCxDQUFXLFFBQVgsQ0FBbkMsQ0FBTjtBQURKO0FBREosaUJBR0EsT0FBTyxRQUFQO0FBMU9LO0FBQUE7QUFBQSxLQUFiOztBQThPQTs7QUFFQSxRQUFJLFFBQVE7O0FBRVIsY0FBTSxPQUZFO0FBR1IsZ0JBQVEsT0FIQTtBQUlSLHFCQUFhLElBSkw7QUFLUixxQkFBYSxJQUxMLEVBS1c7QUFDbkIsbUJBQVcsSUFOSDtBQU9SLDJCQUFtQixJQVBYO0FBUVIsZ0JBQVE7QUFDSixvQkFBUSxxR0FESjtBQUVKLG1CQUFPLCtDQUZIO0FBR0osbUJBQU8sdUJBSEg7QUFJSixtQkFBTyxDQUNILGdDQURHLEVBRUgsZ0ZBRkc7QUFKSCxTQVJBO0FBaUJSLGVBQU87QUFDSCxzQkFBVTtBQUNOLHVCQUFPLENBQ0gsVUFERyxFQUVILG1CQUZHLEVBR0gsUUFIRyxFQUlILGlCQUpHLEVBS0gsOENBTEcsRUFNSCw4Q0FORyxFQU9ILDhCQVBHLEVBUUgsNkJBUkcsRUFTSCxRQVRHLEVBVUgsaUJBVkcsRUFXSCxNQVhHLEVBWUgsZUFaRyxFQWFILFFBYkcsRUFjSCxpQkFkRyxFQWVILGNBZkc7QUFERCxhQURQO0FBb0JILHVCQUFXO0FBQ1AsdUJBQU8sQ0FDSCxpQkFERyxFQUVILGNBRkcsRUFHSCxVQUhHLEVBSUgsbUJBSkcsRUFLSCxRQUxHLEVBTUgsaUJBTkcsRUFPSCxRQVBHLEVBUUgsaUJBUkcsRUFTSCxNQVRHLEVBVUgsZUFWRyxFQVdILFNBWEcsRUFZSCxPQVpHLEVBYUgsWUFiRyxFQWNILFVBZEcsRUFlSCxlQWZHLEVBZ0JILE9BaEJHLEVBaUJILFlBakJHLEVBa0JILDhDQWxCRyxFQW1CSCxtREFuQkcsRUFvQkgsOENBcEJHLEVBcUJILG1EQXJCRyxFQXNCSCw4QkF0QkcsRUF1QkgsbUNBdkJHLEVBd0JILHFDQXhCRyxFQXlCSCw2QkF6QkcsRUEwQkgsa0NBMUJHLEVBMkJILG9EQTNCRyxFQTRCSCxvREE1QkcsRUE2Qkgsb0NBN0JHLEVBOEJILG1DQTlCRyxFQStCSCxzQkEvQkcsRUFnQ0gsc0JBaENHLENBREE7QUFtQ1Asd0JBQVEsQ0FDSixPQURJLEVBRUosY0FGSSxDQW5DRDtBQXVDUCx1QkFBTyxDQUNILE9BREcsQ0F2Q0E7QUEwQ1AsMEJBQVUsQ0FDTixPQURNO0FBMUNIO0FBcEJSLFNBakJDOztBQXFGRixvQkFyRkU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkFzRmdCLFNBQUssZ0JBQUwsRUF0RmhCO0FBQUE7QUFzRkEsdUJBdEZBO0FBdUZBLHNCQXZGQSxHQXVGUyxFQXZGVDs7QUF3RkoscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxRQUFRLE1BQTVCLEVBQW9DLEdBQXBDLEVBQXlDO0FBQ2pDLDBCQURpQyxHQUN4QixRQUFRLENBQVIsQ0FEd0I7QUFFakMsc0JBRmlDLEdBRTVCLE9BQU8sUUFBUCxDQUY0QjtBQUdqQyx3QkFIaUMsR0FHMUIsT0FBTyxnQkFBUCxDQUgwQjtBQUlqQyx5QkFKaUMsR0FJekIsT0FBTyxnQkFBUCxDQUp5Qjs7QUFLckMsd0JBQUksUUFBUSxLQUFaO0FBQ0ksK0JBQU8sTUFBUDtBQURKLHFCQUVJLE1BUGlDLEdBT3hCLE9BQU8sR0FBUCxHQUFhLEtBUFc7O0FBUXJDLDZCQUFTLE9BQU8sZ0JBQVAsSUFBMkIsTUFBM0IsR0FBb0MsRUFBN0M7QUFDQSwyQkFBTyxJQUFQLENBQWE7QUFDVCw4QkFBTSxFQURHO0FBRVQsa0NBQVUsTUFGRDtBQUdULGdDQUFRLElBSEM7QUFJVCxpQ0FBUyxLQUpBO0FBS1QsZ0NBQVE7QUFMQyxxQkFBYjtBQU9IO0FBQ0QsdUJBQU8sTUFBUDtBQXpHSTtBQUFBO0FBNEdGLG9CQTVHRTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQTZHRSxTQUFLLFdBQUwsRUE3R0Y7QUFBQTtBQUFBLHVCQThHaUIsU0FBSyxlQUFMLEVBOUdqQjtBQUFBO0FBOEdBLHdCQTlHQTtBQStHQSxzQkEvR0EsR0ErR1MsRUFBRSxRQUFRLFFBQVYsRUEvR1Q7O0FBZ0hKLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksU0FBUyxNQUE3QixFQUFxQyxHQUFyQyxFQUEwQztBQUNsQywyQkFEa0MsR0FDeEIsU0FBUyxDQUFULENBRHdCO0FBRWxDLDRCQUZrQyxHQUV2QixRQUFRLFVBQVIsQ0FGdUI7QUFHbEMsNkJBSGtDLEdBR3RCLFNBQVMsV0FBVCxFQUhzQjtBQUl0Qzs7QUFDQSx3QkFBSSxhQUFhLEtBQWpCO0FBQ0ksb0NBQVksTUFBWjtBQURKLHFCQUVJLEtBUGtDLEdBTzFCLFFBQVEsU0FBUixDQVAwQjtBQVFsQywyQkFSa0MsR0FReEI7QUFDVixnQ0FBUSxRQUFRLFlBQVIsQ0FERTtBQUVWLGdDQUFRLFFBQVEsY0FBUixDQUZFO0FBR1YsaUNBQVMsUUFBUSxRQUFSO0FBSEMscUJBUndCOztBQWF0QywyQkFBTyxTQUFQLElBQW9CLE9BQXBCO0FBQ0g7QUFDRCx1QkFBTyxNQUFQO0FBL0hJO0FBQUE7QUFrSUYsc0JBbElFLDBCQWtJYyxNQWxJZDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBa0lzQixzQkFsSXRCLG1GQWtJK0IsRUFsSS9CO0FBQUEsdUJBbUlFLFNBQUssV0FBTCxFQW5JRjtBQUFBO0FBb0lBLGlCQXBJQSxHQW9JSSxTQUFLLE1BQUwsQ0FBYSxNQUFiLENBcElKO0FBQUEsdUJBcUlrQixTQUFLLHNCQUFMLENBQTZCLFNBQUssTUFBTCxDQUFhO0FBQzVELDhCQUFVLEVBQUUsSUFBRjtBQURrRCxpQkFBYixFQUVoRCxNQUZnRCxDQUE3QixDQXJJbEI7QUFBQTtBQXFJQSx5QkFySUE7O0FBd0lKLDRCQUFZLFVBQVUsQ0FBVixDQUFaO0FBQ0kseUJBeklBLEdBeUlZLFVBQVUsV0FBVixDQXpJWjtBQTBJQSxzQkExSUEsR0EwSVM7QUFDVCw0QkFBUSxFQURDO0FBRVQsNEJBQVEsRUFGQztBQUdULGlDQUFhLFNBSEo7QUFJVCxnQ0FBWSxTQUFLLE9BQUwsQ0FBYyxTQUFkO0FBSkgsaUJBMUlUO0FBZ0pBLHFCQWhKQSxHQWdKUSxDQUFFLE1BQUYsRUFBVSxNQUFWLENBaEpSOztBQWlKSixxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLE1BQU0sTUFBMUIsRUFBa0MsR0FBbEMsRUFBdUM7QUFDL0Isd0JBRCtCLEdBQ3hCLE1BQU0sQ0FBTixDQUR3QjtBQUUvQix3QkFGK0IsR0FFeEIsU0FBSyxVQUFMLENBQWlCLElBQWpCLENBRndCO0FBRy9CLDBCQUgrQixHQUd0QixVQUFVLElBQVYsQ0FIc0I7O0FBSW5DLHlCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksT0FBTyxNQUEzQixFQUFtQyxHQUFuQyxFQUF3QztBQUNoQyw2QkFEZ0MsR0FDeEIsT0FBTyxDQUFQLENBRHdCO0FBRWhDLDZCQUZnQyxHQUV4QixXQUFZLE1BQU0sT0FBTixDQUFaLENBRndCO0FBR2hDLDhCQUhnQyxHQUd2QixXQUFZLE1BQU0sUUFBTixDQUFaLENBSHVCOztBQUlwQywrQkFBTyxJQUFQLEVBQWEsSUFBYixDQUFtQixDQUFFLEtBQUYsRUFBUyxNQUFULENBQW5CO0FBQ0g7QUFDSjtBQUNELHVCQUFPLE1BQVA7QUE1Skk7QUFBQTtBQStKUixtQkEvSlEsdUJBK0pLLE1BL0pMLEVBK0phLE1BL0piLEVBK0pxQjtBQUN6QixnQkFBSSxZQUFZLENBQWhCO0FBQ0EsZ0JBQUksT0FBTyxTQUFYO0FBQ0EsZ0JBQUksc0JBQXNCLE1BQTFCLEVBQ0ksSUFBSSxZQUFZLE9BQU8sa0JBQVAsQ0FBaEIsRUFBNEM7QUFDeEMsNEJBQVksT0FBTyxrQkFBUCxDQUFaO0FBQ0EsdUJBQU8sT0FBTyxjQUFQLENBQVA7QUFDSDtBQUNMLGdCQUFJLHVCQUF1QixNQUEzQixFQUNJLElBQUksWUFBWSxPQUFPLG1CQUFQLENBQWhCLEVBQTZDO0FBQ3pDLDRCQUFZLE9BQU8sbUJBQVAsQ0FBWjtBQUNBLHVCQUFPLE9BQU8sZUFBUCxDQUFQO0FBQ0g7QUFDTCxnQkFBSSxDQUFDLFNBQUwsRUFDSSxZQUFZLEtBQUssWUFBTCxFQUFaO0FBQ0osbUJBQU87QUFDSCw2QkFBYSxTQURWO0FBRUgsNEJBQVksS0FBSyxPQUFMLENBQWMsU0FBZCxDQUZUO0FBR0gsd0JBQVEsT0FBTyxtQkFBUCxDQUhMO0FBSUgsdUJBQU8sT0FBTyxvQkFBUCxDQUpKO0FBS0gsdUJBQU8sT0FBTyxTQUFQLENBTEo7QUFNSCx1QkFBTyxPQUFPLFNBQVAsQ0FOSjtBQU9ILHdCQUFRLFNBUEw7QUFRSCx3QkFBUSxTQVJMO0FBU0gseUJBQVMsU0FUTjtBQVVILHlCQUFTLFNBVk47QUFXSCx3QkFBUSxJQVhMO0FBWUgsMEJBQVUsU0FaUDtBQWFILDhCQUFjLFNBYlg7QUFjSCwyQkFBVyxTQWRSO0FBZUgsOEJBQWMsU0FmWDtBQWdCSCwrQkFBZSxPQUFPLHdCQUFQLENBaEJaO0FBaUJILHdCQUFRO0FBakJMLGFBQVA7QUFtQkgsU0FqTU87QUFtTUYsb0JBbk1FO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQW9NRSxTQUFLLFdBQUwsRUFwTUY7QUFBQTtBQUFBLHVCQXFNZ0IsU0FBSyxlQUFMLEVBck1oQjtBQUFBO0FBcU1BLHVCQXJNQTs7QUFzTUosMEJBQVUsU0FBSyxPQUFMLENBQWMsT0FBZCxFQUF1QixRQUF2QixDQUFWO0FBQ0ksbUJBdk1BLEdBdU1NLE9BQU8sSUFBUCxDQUFhLE9BQWIsQ0F2TU47QUF3TUEsc0JBeE1BLEdBd01TLEVBeE1UOztBQXlNSixxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLElBQUksTUFBeEIsRUFBZ0MsR0FBaEMsRUFBcUM7QUFDN0Isc0JBRDZCLEdBQ3hCLElBQUksQ0FBSixDQUR3QjtBQUU3QiwwQkFGNkIsR0FFcEIsU0FGb0I7QUFHN0IsMEJBSDZCLEdBR3BCLFNBSG9COztBQUlqQyx3QkFBSSxNQUFNLFNBQUssYUFBZixFQUE4QjtBQUMxQixpQ0FBUyxTQUFLLGFBQUwsQ0FBbUIsRUFBbkIsQ0FBVDtBQUNBLGlDQUFTLE9BQU8sUUFBUCxDQUFUO0FBQ0gscUJBSEQsTUFHTztBQUNDLDRCQURELEdBQ1EsR0FBRyxLQUFILENBQVUsQ0FBVixFQUFhLENBQWIsQ0FEUjtBQUVDLDZCQUZELEdBRVMsR0FBRyxLQUFILENBQVUsQ0FBVixFQUFhLENBQWIsQ0FGVDs7QUFHSCw0QkFBSSxRQUFRLEtBQVo7QUFDSSxtQ0FBTyxNQUFQO0FBREoseUJBRUEsSUFBSSxTQUFTLEtBQWI7QUFDSSxvQ0FBUSxNQUFSO0FBREoseUJBRUEsU0FBUyxPQUFPLEdBQVAsR0FBYSxLQUF0QjtBQUNIO0FBQ0csMEJBaEI2QixHQWdCcEIsUUFBUSxFQUFSLENBaEJvQjs7QUFpQmpDLDJCQUFPLE1BQVAsSUFBaUIsU0FBSyxXQUFMLENBQWtCLE1BQWxCLEVBQTBCLE1BQTFCLENBQWpCO0FBQ0g7QUFDRCx1QkFBTyxNQUFQO0FBNU5JO0FBQUE7QUErTkYsbUJBL05FLHVCQStOVyxNQS9OWDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkFnT0UsU0FBSyxXQUFMLEVBaE9GO0FBQUE7QUFpT0EsaUJBak9BLEdBaU9JLFNBQUssTUFBTCxDQUFhLE1BQWIsQ0FqT0o7QUFBQSx1QkFrT2dCLFNBQUsscUJBQUwsQ0FBNEI7QUFDNUMsOEJBQVUsRUFBRSxJQUFGO0FBRGtDLGlCQUE1QixDQWxPaEI7QUFBQTtBQWtPQSx1QkFsT0E7QUFxT0Esc0JBck9BLEdBcU9TLFFBQVEsTUFyT2pCOztBQXNPSixvQkFBSSxTQUFTLENBQWI7QUFDSSwwQkFBTSxJQUFJLGFBQUosQ0FBbUIsU0FBSyxFQUFMLEdBQVUsOERBQTdCLENBQU47QUFESixpQkFFQSxVQUFVLFNBQUssT0FBTCxDQUFjLE9BQWQsRUFBdUIsUUFBdkIsQ0FBVjtBQUNJLHNCQXpPQSxHQXlPUyxRQUFRLEVBQUUsSUFBRixDQUFSLENBek9UOztBQTBPSix1QkFBTyxTQUFLLFdBQUwsQ0FBa0IsTUFBbEIsRUFBMEIsQ0FBMUIsQ0FBUDtBQTFPSTtBQUFBO0FBNk9GLG1CQTdPRSx1QkE2T1csTUE3T1g7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUE2T21CLHNCQTdPbkIsbUZBNk80QixFQTdPNUI7QUFBQSx1QkE4T0UsU0FBSyxXQUFMLEVBOU9GO0FBQUE7QUErT0o7QUFDQSx1QkFBTyxTQUFLLGVBQUwsQ0FBc0IsTUFBdEIsQ0FBUDtBQWhQSTtBQUFBO0FBbVBGLG1CQW5QRSx1QkFtUFcsTUFuUFgsRUFtUG1CLElBblBuQixFQW1QeUIsSUFuUHpCLEVBbVArQixNQW5QL0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBbVB1QyxxQkFuUHZDLG1GQW1QK0MsU0FuUC9DO0FBbVAwRCxzQkFuUDFELG1GQW1QbUUsRUFuUG5FO0FBQUEsdUJBb1BFLFNBQUssV0FBTCxFQXBQRjtBQUFBO0FBcVBKLG9CQUFJLFFBQVEsUUFBWjtBQUNJLDBCQUFNLElBQUksYUFBSixDQUFtQixTQUFLLEVBQUwsR0FBVSwyQkFBN0IsQ0FBTjtBQURKLGlCQXJQSSxPQXVQaUIsU0FBSyxhQUFMLENBQW9CLFNBQUssTUFBTCxDQUFhO0FBQ2xELDRCQUFRLFNBQUssUUFBTCxDQUFlLE1BQWYsQ0FEMEM7QUFFbEQsNEJBQVEsSUFGMEM7QUFHbEQsOEJBQVUsTUFId0M7QUFJbEQsNEJBQVE7QUFKMEMsaUJBQWIsRUFLdEMsTUFMc0MsQ0FBcEIsQ0F2UGpCO0FBQUE7QUF1UEEsd0JBdlBBOztBQTZQSix1QkFBTztBQUNILDRCQUFRLFFBREw7QUFFSCwwQkFBTSxTQUFTLElBQVQsRUFBZSxRQUFmO0FBRkgsaUJBQVA7QUE3UEk7QUFBQTtBQW1RRixtQkFuUUUsdUJBbVFXLEVBblFYO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBbVFlLHNCQW5RZixtRkFtUXdCLEVBblF4QjtBQUFBLHVCQW9RRSxTQUFLLFdBQUwsRUFwUUY7QUFBQTtBQXFRSix1QkFBTyxTQUFLLGtCQUFMLENBQXlCLFNBQUssTUFBTCxDQUFhO0FBQ3pDLDRCQUFRLFFBRGlDO0FBRXpDLDBCQUFNO0FBRm1DLGlCQUFiLEVBRzdCLE1BSDZCLENBQXpCLENBQVA7QUFyUUk7QUFBQTtBQTJRUixhQTNRUSxtQkEyUUM7QUFDTCxtQkFBTyxLQUFLLFlBQUwsRUFBUDtBQUNILFNBN1FPO0FBK1FSLGVBL1FRLG1CQStRQyxJQS9RRCxFQStRd0Y7QUFBQSxnQkFBakYsR0FBaUYsdUVBQTNFLEtBQTJFO0FBQUEsZ0JBQXBFLE1BQW9FLHVFQUEzRCxLQUEyRDtBQUFBLGdCQUFwRCxNQUFvRCx1RUFBM0MsRUFBMkM7QUFBQSxnQkFBdkMsT0FBdUMsdUVBQTdCLFNBQTZCO0FBQUEsZ0JBQWxCLElBQWtCLHVFQUFYLFNBQVc7O0FBQzVGLGdCQUFJLENBQUMsS0FBSyxNQUFWLEVBQ0ksTUFBTSxJQUFJLG1CQUFKLENBQXlCLEtBQUssRUFBTCxHQUFVLG9FQUFuQyxDQUFOO0FBQ0osZ0JBQUksQ0FBQyxLQUFLLEdBQVYsRUFDSSxNQUFNLElBQUksbUJBQUosQ0FBeUIsS0FBSyxFQUFMLEdBQVUsdURBQW5DLENBQU47QUFDSixnQkFBSSxNQUFNLEtBQUssSUFBTCxDQUFVLEtBQVYsSUFBbUIsR0FBbkIsR0FBeUIsS0FBSyxPQUF4QztBQUNBLGdCQUFJLE9BQU8sUUFBWCxFQUNJLE9BQU8sTUFBTSxHQUFiO0FBQ0osbUJBQU8sTUFBTSxLQUFLLGFBQUwsQ0FBb0IsSUFBcEIsRUFBMEIsTUFBMUIsQ0FBYjtBQUNBLGdCQUFJLFFBQVEsS0FBSyxJQUFMLENBQVcsTUFBWCxFQUFtQixLQUFLLGFBQUwsQ0FBb0IsSUFBcEIsQ0FBbkIsQ0FBWjtBQUNBLGdCQUFJLE9BQU8sUUFBWCxFQUFxQjtBQUNqQixvQkFBSSxPQUFPLElBQVAsQ0FBYSxLQUFiLEVBQW9CLE1BQXhCLEVBQ0ksT0FBTyxNQUFNLEtBQUssU0FBTCxDQUFnQixLQUFoQixDQUFiO0FBQ1AsYUFIRCxNQUdPO0FBQ0gsMEJBQVUsRUFBRSxtQkFBbUIsZUFBckIsRUFBVjtBQUNBLG9CQUFJLFFBQVEsS0FBSyxLQUFMLEdBQWMsUUFBZCxFQUFaO0FBQ0Esb0JBQUksVUFBVSxNQUFkLEVBQXNCO0FBQ2xCLHdCQUFJLE9BQU8sSUFBUCxDQUFhLEtBQWIsRUFBb0IsTUFBeEIsRUFBZ0M7QUFDNUIsZ0NBQVEsY0FBUixJQUEwQixrQkFBMUI7QUFDQSwrQkFBTyxLQUFLLElBQUwsQ0FBVyxLQUFYLENBQVA7QUFDSCxxQkFIRCxNQUtJLE9BQU8sTUFBTSxLQUFLLFNBQUwsQ0FBZ0IsS0FBaEIsQ0FBYjtBQUNQO0FBQ0Qsb0JBQUksT0FBTyxRQUFRLEtBQUssR0FBYixHQUFtQixLQUFLLE1BQXhCLEdBQWlDLE1BQWpDLEdBQTBDLEdBQXJEO0FBQ0Esb0JBQUksSUFBSixFQUNJLFFBQVEsSUFBUjtBQUNKLG9CQUFJLFlBQVksS0FBSyxJQUFMLENBQVcsS0FBSyxNQUFMLENBQWEsSUFBYixDQUFYLEVBQStCLEtBQUssTUFBTCxDQUFhLEtBQUssTUFBbEIsQ0FBL0IsRUFBMEQsUUFBMUQsRUFBb0UsUUFBcEUsQ0FBaEI7QUFDQSxvQkFBSSxjQUFjLEtBQUssR0FBTCxHQUFXLEdBQVgsR0FBaUIsS0FBSyxNQUF0QixHQUErQixHQUEvQixHQUFxQyxLQUFyQyxHQUE2QyxHQUE3QyxHQUFtRCxLQUFLLGNBQUwsQ0FBcUIsU0FBckIsQ0FBckU7QUFDQSx3QkFBUSxlQUFSLElBQTJCLFVBQVUsV0FBckM7QUFDSDtBQUNELG1CQUFPLEtBQUssS0FBTCxDQUFZLEdBQVosRUFBaUIsTUFBakIsRUFBeUIsT0FBekIsRUFBa0MsSUFBbEMsQ0FBUDtBQUNIO0FBL1NPLEtBQVo7O0FBa1RBOztBQUVBLFFBQUksUUFBUTs7QUFFUixjQUFNLE9BRkU7QUFHUixnQkFBUSxPQUhBO0FBSVIscUJBQWEsSUFKTDtBQUtSLHFCQUFhLElBTEwsRUFLVztBQUNuQixtQkFBVyxHQU5IO0FBT1IsZ0JBQVE7QUFDSixvQkFBUSxxR0FESjtBQUVKLG1CQUFPLG1CQUZIO0FBR0osbUJBQU8sdUJBSEg7QUFJSixtQkFBTztBQUpILFNBUEE7QUFhUixlQUFPO0FBQ0gsbUJBQU87QUFDSCx1QkFBTyxDQUNILGVBREcsRUFFSCxNQUZHLEVBR0gsZ0JBSEcsRUFJSCxnQkFKRztBQURKLGFBREo7QUFTSCxvQkFBUTtBQUNKLHdCQUFRLENBQ0osY0FESSxFQUVKLGFBRkksRUFHSixtQkFISSxFQUlKLFNBSkksRUFLSixXQUxJLEVBTUosT0FOSSxFQU9KLGNBUEksRUFRSix3QkFSSTtBQURKO0FBVEwsU0FiQzs7QUFvQ0Ysb0JBcENFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBcUNnQixTQUFLLFVBQUwsRUFyQ2hCO0FBQUE7QUFxQ0EsdUJBckNBO0FBc0NBLG9CQXRDQSxHQXNDTyxPQUFPLElBQVAsQ0FBYSxRQUFRLE9BQVIsQ0FBYixDQXRDUDtBQXVDQSxzQkF2Q0EsR0F1Q1MsRUF2Q1Q7O0FBd0NKLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksS0FBSyxNQUF6QixFQUFpQyxHQUFqQyxFQUFzQztBQUM5QixzQkFEOEIsR0FDekIsS0FBSyxDQUFMLENBRHlCO0FBRTlCLDBCQUY4QixHQUVyQixRQUFRLE9BQVIsRUFBaUIsRUFBakIsQ0FGcUI7QUFHOUIsMEJBSDhCLEdBR3JCLEdBQUcsV0FBSCxHQUFrQixPQUFsQixDQUEyQixHQUEzQixFQUFnQyxHQUFoQyxDQUhxQjtBQUFBLHNDQUlaLE9BQU8sS0FBUCxDQUFjLEdBQWQsQ0FKWTtBQUFBO0FBSTVCLHdCQUo0QjtBQUl0Qix5QkFKc0I7O0FBS2xDLDJCQUFPLFNBQUssa0JBQUwsQ0FBeUIsSUFBekIsQ0FBUDtBQUNBLDRCQUFRLFNBQUssa0JBQUwsQ0FBeUIsS0FBekIsQ0FBUjtBQUNBLDJCQUFPLElBQVAsQ0FBYTtBQUNULDhCQUFNLEVBREc7QUFFVCxrQ0FBVSxNQUZEO0FBR1QsZ0NBQVEsSUFIQztBQUlULGlDQUFTLEtBSkE7QUFLVCxnQ0FBUTtBQUxDLHFCQUFiO0FBT0g7QUFDRCx1QkFBTyxNQUFQO0FBdkRJO0FBQUE7QUEwREYsb0JBMURFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQTJERSxTQUFLLFdBQUwsRUEzREY7QUFBQTtBQUFBLHVCQTREaUIsU0FBSyxlQUFMLEVBNURqQjtBQUFBO0FBNERBLHdCQTVEQTtBQTZEQSx3QkE3REEsR0E2RFcsU0FBUyxRQUFULENBN0RYO0FBOERBLHNCQTlEQSxHQThEUyxFQUFFLFFBQVEsUUFBVixFQTlEVDs7QUErREoscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxTQUFLLFVBQUwsQ0FBZ0IsTUFBcEMsRUFBNEMsR0FBNUMsRUFBaUQ7QUFDekMsNEJBRHlDLEdBQzlCLFNBQUssVUFBTCxDQUFnQixDQUFoQixDQUQ4QjtBQUV6Qyw2QkFGeUMsR0FFN0IsU0FBUyxXQUFULEVBRjZCO0FBR3pDLDJCQUh5QyxHQUcvQjtBQUNWLGdDQUFRLFNBREU7QUFFVixnQ0FBUSxTQUZFO0FBR1YsaUNBQVM7QUFIQyxxQkFIK0I7O0FBUTdDLHdCQUFJLFdBQVcsUUFBZjtBQUNJLDRCQUFJLGFBQWEsU0FBUyxPQUFULENBQWpCO0FBQ0ksb0NBQVEsTUFBUixJQUFrQixTQUFTLE9BQVQsRUFBa0IsU0FBbEIsQ0FBbEI7QUFESjtBQURKLHFCQUdBLElBQUksdUJBQXVCLFFBQTNCO0FBQ0ksNEJBQUksYUFBYSxTQUFTLG1CQUFULENBQWpCO0FBQ0ksb0NBQVEsT0FBUixJQUFtQixTQUFTLG1CQUFULEVBQThCLFNBQTlCLENBQW5CO0FBREo7QUFESixxQkFHQSxJQUFJLFFBQVEsT0FBUixLQUFvQixRQUFRLE1BQVIsQ0FBeEI7QUFDSSxnQ0FBUSxNQUFSLElBQWtCLFFBQVEsT0FBUixJQUFtQixRQUFRLE1BQVIsQ0FBckM7QUFESixxQkFFQSxPQUFPLFFBQVAsSUFBbUIsT0FBbkI7QUFDSDtBQUNELHVCQUFPLE1BQVA7QUFqRkk7QUFBQTtBQW9GRixzQkFwRkUsMEJBb0ZjLE1BcEZkO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFvRnNCLHNCQXBGdEIsbUZBb0YrQixFQXBGL0I7QUFBQSx1QkFxRkUsU0FBSyxXQUFMLEVBckZGO0FBQUE7QUFzRkEsaUJBdEZBLEdBc0ZJLFNBQUssTUFBTCxDQUFhLE1BQWIsQ0F0Rko7QUFBQSx1QkF1RmlCLFNBQUssZ0JBQUwsQ0FBdUIsU0FBSyxNQUFMLENBQWE7QUFDckQsNkJBQVMsRUFBRSxJQUFGO0FBRDRDLGlCQUFiLEVBRXpDLE1BRnlDLENBQXZCLENBdkZqQjtBQUFBO0FBdUZBLHdCQXZGQTtBQTBGQSx5QkExRkEsR0EwRlksU0FBUyxFQUFFLElBQUYsQ0FBVCxDQTFGWjtBQTJGQSx5QkEzRkEsR0EyRlksU0FBSyxZQUFMLEVBM0ZaO0FBNEZBLG9CQTVGQSxHQTRGUSxVQUFVLFNBQVgsR0FBd0IsVUFBVSxNQUFWLENBQXhCLEdBQTRDLEVBNUZuRDtBQTZGQSxvQkE3RkEsR0E2RlEsVUFBVSxTQUFYLEdBQXdCLFVBQVUsTUFBVixDQUF4QixHQUE0QyxFQTdGbkQ7QUE4RkEsc0JBOUZBLEdBOEZTO0FBQ1QsNEJBQVEsSUFEQztBQUVULDRCQUFRLElBRkM7QUFHVCxpQ0FBYSxTQUhKO0FBSVQsZ0NBQVksU0FBSyxPQUFMLENBQWMsU0FBZDtBQUpILGlCQTlGVDs7QUFvR0osdUJBQU8sTUFBUDtBQXBHSTtBQUFBO0FBdUdGLG1CQXZHRSx1QkF1R1csTUF2R1g7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBd0dFLFNBQUssV0FBTCxFQXhHRjtBQUFBO0FBeUdBLGlCQXpHQSxHQXlHSSxTQUFLLE1BQUwsQ0FBYSxNQUFiLENBekdKO0FBQUEsdUJBMEdnQixTQUFLLGlCQUFMLENBQXdCO0FBQ3hDLDZCQUFTLEVBQUUsSUFBRjtBQUQrQixpQkFBeEIsQ0ExR2hCO0FBQUE7QUEwR0EsdUJBMUdBO0FBNkdBLHNCQTdHQSxHQTZHUyxRQUFRLEVBQUUsSUFBRixDQUFSLENBN0dUO0FBOEdBLHlCQTlHQSxHQThHWSxPQUFPLFNBQVAsSUFBb0IsSUE5R2hDOztBQStHSix1QkFBTztBQUNILGlDQUFhLFNBRFY7QUFFSCxnQ0FBWSxTQUFLLE9BQUwsQ0FBYyxTQUFkLENBRlQ7QUFHSCw0QkFBUSxXQUFZLE9BQU8sTUFBUCxDQUFaLENBSEw7QUFJSCwyQkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBSko7QUFLSCwyQkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBTEo7QUFNSCwyQkFBTyxXQUFZLE9BQU8sTUFBUCxDQUFaLENBTko7QUFPSCw0QkFBUSxTQVBMO0FBUUgsNEJBQVEsU0FSTDtBQVNILDZCQUFTLFNBVE47QUFVSCw2QkFBUyxTQVZOO0FBV0gsNEJBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQVhMO0FBWUgsOEJBQVUsU0FaUDtBQWFILGtDQUFjLFNBYlg7QUFjSCwrQkFBVyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBZFI7QUFlSCxrQ0FBYyxXQUFZLE9BQU8sU0FBUCxDQUFaLENBZlg7QUFnQkgsbUNBQWUsV0FBWSxPQUFPLEtBQVAsQ0FBWixDQWhCWjtBQWlCSCw0QkFBUTtBQWpCTCxpQkFBUDtBQS9HSTtBQUFBO0FBb0lGLG1CQXBJRSx1QkFvSVcsTUFwSVg7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFvSW1CLHNCQXBJbkIsbUZBb0k0QixFQXBJNUI7QUFBQSx1QkFxSUUsU0FBSyxXQUFMLEVBcklGO0FBQUE7QUFzSUosdUJBQU8sU0FBSyxpQkFBTCxDQUF3QixTQUFLLE1BQUwsQ0FBYTtBQUN4Qyw2QkFBUyxTQUFLLFFBQUwsQ0FBZSxNQUFmO0FBRCtCLGlCQUFiLEVBRTVCLE1BRjRCLENBQXhCLENBQVA7QUF0SUk7QUFBQTtBQTJJRixtQkEzSUUsdUJBMklXLE1BM0lYLEVBMkltQixJQTNJbkIsRUEySXlCLElBM0l6QixFQTJJK0IsTUEzSS9CO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBMkl1QyxxQkEzSXZDLG1GQTJJK0MsU0EzSS9DO0FBMkkwRCxzQkEzSTFELG1GQTJJbUUsRUEzSW5FO0FBQUEsdUJBNElFLFNBQUssV0FBTCxFQTVJRjtBQUFBO0FBNklKLG9CQUFJLFFBQVEsUUFBWjtBQUNJLDBCQUFNLElBQUksYUFBSixDQUFtQixTQUFLLEVBQUwsR0FBVSwyQkFBN0IsQ0FBTjtBQURKLGlCQUVJLElBL0lBLEdBK0lPLE1BQU0sUUFBTixFQS9JUDtBQUFBLHVCQWdKaUIsU0FBSyxhQUFMLENBQW9CLFNBQUssTUFBTCxDQUFhO0FBQ2xELDRCQUFRLFNBQUssUUFBTCxDQUFlLE1BQWYsQ0FEMEM7QUFFbEQsNEJBQVEsSUFGMEM7QUFHbEQsOEJBQVUsTUFId0M7QUFJbEQsNEJBQVEsT0FBTyxPQUFQLENBQWdCLEtBQWhCO0FBSjBDLGlCQUFiLEVBS3RDLE1BTHNDLENBQXBCLENBaEpqQjtBQUFBO0FBZ0pBLHdCQWhKQTs7QUFzSkosdUJBQU87QUFDSCw0QkFBUSxRQURMO0FBRUgsMEJBQU0sU0FBUyxRQUFULEVBQW1CLFVBQW5CLEVBQStCLFFBQS9CO0FBRkgsaUJBQVA7QUF0Skk7QUFBQTtBQTRKRixtQkE1SkUsdUJBNEpXLEVBNUpYO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBNEplLHNCQTVKZixtRkE0SndCLEVBNUp4QjtBQUFBLHVCQTZKRSxTQUFLLFdBQUwsRUE3SkY7QUFBQTtBQThKSix1QkFBTyxTQUFLLG1CQUFMLENBQTBCLFNBQUssTUFBTCxDQUFhO0FBQzFDLGdDQUFZO0FBRDhCLGlCQUFiLEVBRTlCLE1BRjhCLENBQTFCLENBQVA7QUE5Skk7QUFBQTtBQW1LRixlQW5LRSxtQkFtS08sSUFuS1A7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFtS2EsbUJBbktiLG1GQW1LbUIsS0FuS25CO0FBbUswQixzQkFuSzFCLG1GQW1LbUMsS0FuS25DO0FBbUswQyxzQkFuSzFDLG1GQW1LbUQsRUFuS25EO0FBbUt1RCx1QkFuS3ZELG1GQW1LaUUsU0FuS2pFO0FBbUs0RSxvQkFuSzVFLG1GQW1LbUYsU0FuS25GO0FBb0tBLG1CQXBLQSxHQW9LTSxTQUFLLElBQUwsQ0FBVSxLQUFWLElBQW1CLEdBQW5CLEdBQXlCLEdBcEsvQjs7QUFxS0osb0JBQUksT0FBTyxLQUFYLEVBQWtCO0FBQ2QsMkJBQU8sTUFBTSxTQUFLLE9BQVgsR0FBcUIsR0FBckIsR0FBMkIsU0FBSyxhQUFMLENBQW9CLElBQXBCLEVBQTBCLE1BQTFCLENBQWxDO0FBQ0kseUJBRlUsR0FFRixTQUFLLElBQUwsQ0FBVyxNQUFYLEVBQW1CLFNBQUssYUFBTCxDQUFvQixJQUFwQixDQUFuQixDQUZFOztBQUdkLHdCQUFJLE9BQU8sSUFBUCxDQUFhLEtBQWIsRUFBb0IsTUFBeEI7QUFDSSwrQkFBTyxNQUFNLFNBQUssU0FBTCxDQUFnQixLQUFoQixDQUFiO0FBREo7QUFFSCxpQkFMRCxNQUtPO0FBQ0MseUJBREQsR0FDUyxTQUFLLEtBQUwsRUFEVDtBQUVDLDJCQUZELEdBRVMsU0FBSyxNQUFMLENBQWEsRUFBRSxVQUFVLElBQVosRUFBa0IsU0FBUyxLQUEzQixFQUFiLEVBQWlELE1BQWpELENBRlQ7O0FBR0gsMkJBQU8sU0FBSyxTQUFMLENBQWdCLE9BQWhCLENBQVA7QUFDQSw4QkFBVTtBQUNOLHdDQUFnQixtQ0FEVjtBQUVOLCtCQUFPLFNBQUssTUFGTjtBQUdOLGdDQUFRLFNBQUssSUFBTCxDQUFXLFNBQUssTUFBTCxDQUFhLElBQWIsQ0FBWCxFQUErQixTQUFLLE1BQUwsQ0FBYSxTQUFLLE1BQWxCLENBQS9CLEVBQTBELFFBQTFEO0FBSEYscUJBQVY7QUFLSDtBQW5MRyx1QkFvTGlCLFNBQUssS0FBTCxDQUFZLEdBQVosRUFBaUIsTUFBakIsRUFBeUIsT0FBekIsRUFBa0MsSUFBbEMsQ0FwTGpCO0FBQUE7QUFvTEEsd0JBcExBOztBQXFMSixvQkFBSSxXQUFXLFFBQWY7QUFDSSwwQkFBTSxJQUFJLGFBQUosQ0FBbUIsU0FBSyxFQUFMLEdBQVUsR0FBVixHQUFnQixTQUFLLElBQUwsQ0FBVyxRQUFYLENBQW5DLENBQU47QUFESixpQkFFQSxPQUFPLFFBQVA7QUF2TEk7QUFBQTtBQUFBLEtBQVo7O0FBMkxBOztBQUVBLFFBQUksUUFBUTs7QUFFUixjQUFNLE9BRkU7QUFHUixnQkFBUSxPQUhBO0FBSVIscUJBQWEsSUFKTDtBQUtSLHFCQUFhLElBTEw7QUFNUixtQkFBVyxJQU5IO0FBT1IsMkJBQW1CLElBUFg7QUFRUixnQkFBUTtBQUNKLG9CQUFRLHFHQURKO0FBRUosbUJBQU8sbUJBRkg7QUFHSixtQkFBTyxtQkFISDtBQUlKLG1CQUFPLENBQ0gsdUNBREcsRUFFSCw0QkFGRztBQUpILFNBUkE7QUFpQlIsZUFBTztBQUNILHNCQUFVO0FBQ04sdUJBQU8sQ0FDSCxTQURHLEVBRUgsa0JBRkcsRUFHSCxTQUhHLEVBSUgsWUFKRyxFQUtILEdBTEcsRUFNSCxPQU5HLEVBT0gsUUFQRyxFQVFILHVCQVJHLEVBU0gsV0FURyxFQVVILHFCQVZHLEVBV0gsNkJBWEc7QUFERCxhQURQO0FBZ0JILHVCQUFXO0FBQ1AsdUJBQU8sQ0FDSCxVQURHLEVBRUgsWUFGRyxFQUdILFNBSEcsRUFJSCxpQkFKRyxFQUtILE9BTEcsRUFNSCxRQU5HLEVBT0gsV0FQRyxDQURBO0FBVVAsd0JBQVEsQ0FDSixjQURJLEVBRUosUUFGSSxFQUdKLGNBSEksRUFJSixjQUpJO0FBVkQ7QUFoQlIsU0FqQkM7O0FBb0RGLG9CQXBERTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkFxRGdCLFNBQUssZ0JBQUwsRUFyRGhCO0FBQUE7QUFxREEsdUJBckRBO0FBc0RBLHNCQXREQSxHQXNEUyxFQXREVDs7QUF1REoscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxRQUFRLE1BQTVCLEVBQW9DLEdBQXBDLEVBQXlDO0FBQ2pDLDBCQURpQyxHQUN4QixRQUFRLENBQVIsQ0FEd0I7QUFFakMsc0JBRmlDLEdBRTVCLE9BQU8sSUFBUCxDQUY0QjtBQUdqQywwQkFIaUMsR0FHeEIsT0FBTyxNQUFQLENBSHdCO0FBQUEsc0NBSWYsT0FBTyxLQUFQLENBQWMsR0FBZCxDQUplO0FBQUE7QUFJL0Isd0JBSitCO0FBSXpCLHlCQUp5Qjs7QUFLckMsMkJBQU8sU0FBSyxrQkFBTCxDQUF5QixJQUF6QixDQUFQO0FBQ0EsNEJBQVEsU0FBSyxrQkFBTCxDQUF5QixLQUF6QixDQUFSO0FBQ0EsMkJBQU8sSUFBUCxDQUFhO0FBQ1QsOEJBQU0sRUFERztBQUVULGtDQUFVLE1BRkQ7QUFHVCxnQ0FBUSxJQUhDO0FBSVQsaUNBQVMsS0FKQTtBQUtULGdDQUFRO0FBTEMscUJBQWI7QUFPSDtBQUNELHVCQUFPLE1BQVA7QUF0RUk7QUFBQTtBQXlFRixvQkF6RUU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkEwRUUsU0FBSyxXQUFMLEVBMUVGO0FBQUE7QUFBQSx1QkEyRWlCLFNBQUssbUJBQUwsRUEzRWpCO0FBQUE7QUEyRUEsd0JBM0VBO0FBNEVBLHdCQTVFQSxHQTRFVyxTQUFTLFVBQVQsQ0E1RVg7QUE2RUEsc0JBN0VBLEdBNkVTLEVBQUUsUUFBUSxRQUFWLEVBN0VUOztBQThFSixxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFNBQVMsTUFBN0IsRUFBcUMsR0FBckMsRUFBMEM7QUFDbEMsMkJBRGtDLEdBQ3hCLFNBQVMsQ0FBVCxDQUR3QjtBQUVsQyw0QkFGa0MsR0FFdkIsUUFBUSxVQUFSLENBRnVCO0FBR2xDLDZCQUhrQyxHQUd0QixTQUFTLFdBQVQsRUFIc0I7QUFJbEMsMkJBSmtDLEdBSXhCO0FBQ1YsZ0NBQVEsV0FBWSxRQUFRLFNBQVIsQ0FBWixDQURFO0FBRVYsZ0NBQVEsV0FBWSxRQUFRLFFBQVIsQ0FBWixDQUZFO0FBR1YsaUNBQVM7QUFIQyxxQkFKd0I7O0FBU3RDLDRCQUFRLE9BQVIsSUFBbUIsU0FBSyxHQUFMLENBQVUsUUFBUSxNQUFSLENBQVYsRUFBMkIsUUFBUSxNQUFSLENBQTNCLENBQW5CO0FBQ0EsMkJBQU8sU0FBUCxJQUFvQixPQUFwQjtBQUNIO0FBQ0QsdUJBQU8sTUFBUDtBQTFGSTtBQUFBO0FBNkZGLHNCQTdGRSwwQkE2RmMsTUE3RmQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUE2RnNCLHNCQTdGdEIsbUZBNkYrQixFQTdGL0I7QUFBQSx1QkE4RkUsU0FBSyxXQUFMLEVBOUZGO0FBQUE7QUErRkEsaUJBL0ZBLEdBK0ZJLFNBQUssTUFBTCxDQUFhLE1BQWIsQ0EvRko7QUFBQSx1QkFnR2tCLFNBQUssY0FBTCxDQUFxQixTQUFLLE1BQUwsQ0FBYTtBQUNwRCw4QkFBVSxFQUFFLElBQUYsQ0FEMEM7QUFFcEQsNkJBQVM7QUFGMkMsaUJBQWIsRUFHeEMsTUFId0MsQ0FBckIsQ0FoR2xCO0FBQUE7QUFnR0EseUJBaEdBO0FBb0dBLHlCQXBHQSxHQW9HWSxVQUFVLFdBQVYsSUFBeUIsSUFwR3JDO0FBcUdBLHNCQXJHQSxHQXFHUztBQUNULDRCQUFRLEVBREM7QUFFVCw0QkFBUSxFQUZDO0FBR1QsaUNBQWEsU0FISjtBQUlULGdDQUFZLFNBQUssT0FBTCxDQUFjLFNBQWQ7QUFKSCxpQkFyR1Q7QUEyR0EscUJBM0dBLEdBMkdRLENBQUUsTUFBRixFQUFVLE1BQVYsQ0EzR1I7O0FBNEdKLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksTUFBTSxNQUExQixFQUFrQyxHQUFsQyxFQUF1QztBQUMvQix3QkFEK0IsR0FDeEIsTUFBTSxDQUFOLENBRHdCO0FBRS9CLDBCQUYrQixHQUV0QixVQUFVLElBQVYsQ0FGc0I7O0FBR25DLHlCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksT0FBTyxNQUEzQixFQUFtQyxHQUFuQyxFQUF3QztBQUNoQyw2QkFEZ0MsR0FDeEIsT0FBTyxDQUFQLENBRHdCO0FBRWhDLDZCQUZnQyxHQUV4QixXQUFZLE1BQU0sQ0FBTixDQUFaLENBRndCO0FBR2hDLDhCQUhnQyxHQUd2QixXQUFZLE1BQU0sQ0FBTixDQUFaLENBSHVCOztBQUlwQywrQkFBTyxJQUFQLEVBQWEsSUFBYixDQUFtQixDQUFFLEtBQUYsRUFBUyxNQUFULENBQW5CO0FBQ0g7QUFDSjtBQUNELHVCQUFPLE1BQVAsSUFBaUIsU0FBSyxNQUFMLENBQWEsT0FBTyxNQUFQLENBQWIsRUFBNkIsQ0FBN0IsRUFBZ0MsSUFBaEMsQ0FBakI7QUFDQSx1QkFBTyxNQUFQLElBQWlCLFNBQUssTUFBTCxDQUFhLE9BQU8sTUFBUCxDQUFiLEVBQTZCLENBQTdCLENBQWpCO0FBQ0EsdUJBQU8sTUFBUDtBQXhISTtBQUFBO0FBMkhSLG1CQTNIUSx1QkEySEssTUEzSEwsRUEySGEsTUEzSGIsRUEySHFCO0FBQ3pCLGdCQUFJLFlBQVksT0FBTyxJQUFQLElBQWUsSUFBL0I7QUFDQSxxQkFBUyxPQUFPLFFBQVAsQ0FBVDtBQUNBLG1CQUFPO0FBQ0gsNkJBQWEsU0FEVjtBQUVILDRCQUFZLEtBQUssT0FBTCxDQUFjLFNBQWQsQ0FGVDtBQUdILHdCQUFRLFdBQVksT0FBTyxNQUFQLENBQVosQ0FITDtBQUlILHVCQUFPLFdBQVksT0FBTyxLQUFQLENBQVosQ0FKSjtBQUtILHVCQUFPLFdBQVksT0FBTyxLQUFQLENBQVosQ0FMSjtBQU1ILHVCQUFPLFdBQVksT0FBTyxNQUFQLENBQVosQ0FOSjtBQU9ILHdCQUFRLFNBUEw7QUFRSCx3QkFBUSxTQVJMO0FBU0gseUJBQVMsU0FUTjtBQVVILHlCQUFTLFNBVk47QUFXSCx3QkFBUSxXQUFZLE9BQU8sTUFBUCxDQUFaLENBWEw7QUFZSCwwQkFBVSxTQVpQO0FBYUgsOEJBQWMsU0FiWDtBQWNILDJCQUFXLFNBZFI7QUFlSCw4QkFBYyxTQWZYO0FBZ0JILCtCQUFlLFdBQVksT0FBTyxLQUFQLENBQVosQ0FoQlo7QUFpQkgsd0JBQVE7QUFqQkwsYUFBUDtBQW1CSCxTQWpKTztBQW1KRixvQkFuSkU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkFvSkUsU0FBSyxXQUFMLEVBcEpGO0FBQUE7QUFBQSx1QkFxSmdCLFNBQUssZ0JBQUwsRUFySmhCO0FBQUE7QUFxSkEsdUJBckpBO0FBc0pBLG1CQXRKQSxHQXNKTSxPQUFPLElBQVAsQ0FBYSxPQUFiLENBdEpOO0FBdUpBLHNCQXZKQSxHQXVKUyxFQXZKVDs7QUF3SkoscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxJQUFJLE1BQXhCLEVBQWdDLEdBQWhDLEVBQXFDO0FBQzdCLHNCQUQ2QixHQUN4QixJQUFJLENBQUosQ0FEd0I7QUFFN0IsMEJBRjZCLEdBRXBCLFNBRm9CO0FBRzdCLDBCQUg2QixHQUdwQixFQUhvQjs7QUFJakMsd0JBQUksTUFBTSxTQUFLLGFBQWYsRUFBOEI7QUFDMUIsaUNBQVMsU0FBSyxhQUFMLENBQW1CLEVBQW5CLENBQVQ7QUFDQSxpQ0FBUyxPQUFPLFFBQVAsQ0FBVDtBQUNILHFCQUhELE1BR087QUFDQyw0QkFERCxHQUNRLEdBQUcsS0FBSCxDQUFVLENBQVYsRUFBYSxDQUFiLENBRFI7QUFFQyw2QkFGRCxHQUVTLEdBQUcsS0FBSCxDQUFVLENBQVYsRUFBYSxDQUFiLENBRlQ7O0FBR0gsK0JBQU8sS0FBSyxXQUFMLEVBQVA7QUFDQSxnQ0FBUSxNQUFNLFdBQU4sRUFBUjtBQUNBLCtCQUFPLFNBQUssa0JBQUwsQ0FBeUIsSUFBekIsQ0FBUDtBQUNBLGdDQUFRLFNBQUssa0JBQUwsQ0FBeUIsS0FBekIsQ0FBUjtBQUNJLGdDQVBELEdBT1UsT0FBTyxHQUFQLEdBQWEsS0FQdkI7QUFRTjtBQUNHLDBCQWhCNkIsR0FnQnBCLFFBQVEsRUFBUixDQWhCb0I7O0FBaUJqQywyQkFBTyxNQUFQLElBQWlCLFNBQUssV0FBTCxDQUFrQixNQUFsQixFQUEwQixNQUExQixDQUFqQjtBQUNIO0FBQ0QsdUJBQU8sTUFBUDtBQTNLSTtBQUFBO0FBOEtGLG1CQTlLRSx1QkE4S1csTUE5S1g7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkErS0UsU0FBSyxXQUFMLEVBL0tGO0FBQUE7QUFnTEEsaUJBaExBLEdBZ0xJLFNBQUssTUFBTCxDQUFhLE1BQWIsQ0FoTEo7QUFBQSx1QkFpTGlCLFNBQUssc0JBQUwsQ0FBNkI7QUFDOUMsOEJBQVUsRUFBRSxJQUFGO0FBRG9DLGlCQUE3QixDQWpMakI7QUFBQTtBQWlMQSx3QkFqTEE7O0FBb0xKLHVCQUFPLFNBQUssV0FBTCxDQUFrQixRQUFsQixFQUE0QixDQUE1QixDQUFQO0FBcExJO0FBQUE7QUF1TEYsbUJBdkxFLHVCQXVMVyxNQXZMWDtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBdUxtQixzQkF2TG5CLG1GQXVMNEIsRUF2TDVCO0FBQUEsdUJBd0xFLFNBQUssV0FBTCxFQXhMRjtBQUFBO0FBeUxBLGlCQXpMQSxHQXlMSSxTQUFLLE1BQUwsQ0FBYSxNQUFiLENBekxKOztBQTBMSix1QkFBTyxTQUFLLGVBQUwsQ0FBc0IsU0FBSyxNQUFMLENBQWE7QUFDdEMsOEJBQVUsRUFBRSxJQUFGO0FBRDRCLGlCQUFiLEVBRTFCLE1BRjBCLENBQXRCLENBQVA7QUExTEk7QUFBQTtBQStMRixtQkEvTEUsdUJBK0xXLE1BL0xYLEVBK0xtQixJQS9MbkIsRUErTHlCLElBL0x6QixFQStMK0IsTUEvTC9CO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBK0x1QyxxQkEvTHZDLG1GQStMK0MsU0EvTC9DO0FBK0wwRCxzQkEvTDFELG1GQStMbUUsRUEvTG5FO0FBQUEsdUJBZ01FLFNBQUssV0FBTCxFQWhNRjtBQUFBO0FBaU1BLHFCQWpNQSxHQWlNUTtBQUNSLDhCQUFVLFNBQUssUUFBTCxDQUFlLE1BQWYsQ0FERjtBQUVSLDRCQUFRLElBRkE7QUFHUiw4QkFBVSxPQUFPLFFBQVAsRUFIRjtBQUlSLGdDQUFZO0FBSkosaUJBak1SOztBQXVNSixvQkFBSSxRQUFRLE9BQVosRUFBcUI7QUFDakIsMEJBQU0sT0FBTixJQUFpQixNQUFNLFFBQU4sRUFBakI7QUFDSDtBQXpNRyx1QkEwTWlCLFNBQUssaUJBQUwsQ0FBd0IsU0FBSyxNQUFMLENBQWEsS0FBYixFQUFvQixNQUFwQixDQUF4QixDQTFNakI7QUFBQTtBQTBNQSx3QkExTUE7O0FBMk1KLHVCQUFPO0FBQ0gsNEJBQVEsUUFETDtBQUVILDBCQUFNLFNBQVMsSUFBVCxFQUFlLFFBQWY7QUFGSCxpQkFBUDtBQTNNSTtBQUFBO0FBaU5GLG1CQWpORSx1QkFpTlcsRUFqTlg7QUFBQTs7QUFBQTtBQUFBLHVCQWtORSxTQUFLLFdBQUwsRUFsTkY7QUFBQTtBQW1OSix1QkFBTyxTQUFLLHNCQUFMLENBQTZCLEVBQUUsTUFBTSxFQUFSLEVBQTdCLENBQVA7QUFuTkk7QUFBQTtBQXNORixlQXRORSxtQkFzTk8sSUF0TlA7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQXNOYSxtQkF0TmIsbUZBc05tQixRQXRObkI7QUFzTjZCLHNCQXRON0IsbUZBc05zQyxLQXROdEM7QUFzTjZDLHNCQXRON0MsbUZBc05zRCxFQXROdEQ7QUFzTjBELHVCQXROMUQsbUZBc05vRSxTQXROcEU7QUFzTitFLG9CQXROL0UsbUZBc05zRixTQXROdEY7QUF1TkEsdUJBdk5BLEdBdU5VLFVBQVUsU0FBSyxPQUFmLEdBQXlCLEdBQXpCLEdBQStCLFNBQUssYUFBTCxDQUFvQixJQUFwQixFQUEwQixNQUExQixDQUEvQixHQUFtRSxPQXZON0U7QUF3TkEscUJBeE5BLEdBd05RLFNBQUssSUFBTCxDQUFXLE1BQVgsRUFBbUIsU0FBSyxhQUFMLENBQW9CLElBQXBCLENBQW5CLENBeE5SO0FBeU5BLG1CQXpOQSxHQXlOTSxTQUFLLElBQUwsQ0FBVSxLQUFWLElBQW1CLE9Bek56Qjs7QUEwTkosb0JBQUksT0FBTyxRQUFYLEVBQXFCO0FBQ2pCLHdCQUFJLE9BQU8sSUFBUCxDQUFhLEtBQWIsRUFBb0IsTUFBeEI7QUFDSSwrQkFBTyxNQUFNLFNBQUssU0FBTCxDQUFnQixLQUFoQixDQUFiO0FBREo7QUFFSCxpQkFIRCxNQUdPO0FBQ0MseUJBREQsR0FDUyxTQUFLLEtBQUwsR0FBYyxRQUFkLEVBRFQ7QUFFQywyQkFGRCxHQUVTLFNBQUssU0FBTCxDQUFnQixTQUFLLE9BQUwsQ0FBYyxTQUFLLE1BQUwsQ0FBYTtBQUNuRCxzQ0FBYyxTQUFLLE1BRGdDO0FBRW5ELGlDQUFTO0FBRjBDLHFCQUFiLEVBR3ZDLE1BSHVDLENBQWQsQ0FBaEIsQ0FGVDtBQU1DLHdCQU5ELEdBTVEsU0FBUyxHQUFULEdBQWUsT0FBZixHQUF5QixHQUF6QixHQUErQixPQU52QztBQU9DLDZCQVBELEdBT2EsU0FBSyxJQUFMLENBQVcsU0FBSyxNQUFMLENBQWEsSUFBYixDQUFYLEVBQStCLFNBQUssTUFBTCxDQUFhLFNBQUssTUFBbEIsQ0FBL0IsQ0FQYjtBQVFDLDBCQVJELEdBUVUsVUFBUSxhQUFSLEdBQXdCLFNBUmxDOztBQVNILHdCQUFJLFVBQVUsS0FBZCxFQUFxQjtBQUNqQiwrQkFBTyxNQUFNLE1BQWI7QUFDSCxxQkFGRCxNQUVPO0FBQ0gsK0JBQU8sTUFBUDtBQUNBLGtDQUFVO0FBQ04sNENBQWdCLG1DQURWO0FBRU4sOENBQWtCLEtBQUs7QUFGakIseUJBQVY7QUFJSDtBQUNKO0FBL09HLHVCQWdQaUIsU0FBSyxLQUFMLENBQVksR0FBWixFQUFpQixNQUFqQixFQUF5QixPQUF6QixFQUFrQyxJQUFsQyxDQWhQakI7QUFBQTtBQWdQQSx3QkFoUEE7O0FBaVBKLG9CQUFJLFdBQVcsUUFBZjtBQUNJLDBCQUFNLElBQUksYUFBSixDQUFtQixTQUFLLEVBQUwsR0FBVSxHQUFWLEdBQWdCLFNBQUssSUFBTCxDQUFXLFFBQVgsQ0FBbkMsQ0FBTjtBQURKLGlCQUVBLE9BQU8sUUFBUDtBQW5QSTtBQUFBO0FBQUEsS0FBWjs7QUF1UEE7O0FBRUEsUUFBSSxPQUFPOztBQUVQLGNBQU0sTUFGQztBQUdQLGdCQUFRLE1BSEQ7QUFJUCxxQkFBYSxJQUpOO0FBS1AscUJBQWEsSUFMTjtBQU1QLG1CQUFXLEdBTko7QUFPUCxnQkFBUTtBQUNKLG9CQUFRLHFHQURKO0FBRUosbUJBQU8scUJBRkg7QUFHSixtQkFBTyxpQkFISDtBQUlKLG1CQUFPLENBQ0gsb0VBREcsRUFFSCwrQkFGRyxFQUdILHlDQUhHLEVBSUgsdUNBSkcsRUFLSCx1Q0FMRztBQUpILFNBUEQ7QUFtQlAsZUFBTztBQUNILG1CQUFPO0FBQ0gsdUJBQU8sQ0FDSCxjQURHLEVBRUgsbUJBRkcsRUFHSCxnQkFIRyxFQUlILHVCQUpHLEVBS0gsb0JBTEcsRUFNSCxtQkFORyxFQU9ILGVBUEcsRUFRSCxlQVJHO0FBREosYUFESjtBQWFILG9CQUFRO0FBQ0osd0JBQVEsQ0FDSixlQURJLEVBRUosY0FGSSxFQUdKLGlCQUhJLEVBSUosYUFKSSxFQUtKLFVBTEksRUFNSixXQU5JLEVBT0osbUJBUEksRUFRSixPQVJJLEVBU0osZUFUSSxFQVVKLFVBVkksRUFXSixrQkFYSTtBQURKLGFBYkw7QUE0QkgscUJBQVM7QUFDTCx3QkFBUSxDQUNKLGVBREksRUFFSixZQUZJLEVBR0osNEJBSEksRUFJSixlQUpJO0FBREg7QUE1Qk4sU0FuQkE7O0FBeURELG9CQXpEQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkEwRGlCLFNBQUssc0JBQUwsRUExRGpCO0FBQUE7QUEwREMsdUJBMUREO0FBMkRDLHNCQTNERCxHQTJEVSxFQTNEVjs7QUE0REgscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxRQUFRLE1BQTVCLEVBQW9DLEdBQXBDLEVBQXlDO0FBQ2pDLDBCQURpQyxHQUN4QixRQUFRLENBQVIsQ0FEd0I7QUFFakMsc0JBRmlDLEdBRTVCLE9BQU8sZUFBUCxDQUY0QjtBQUdqQywwQkFIaUMsR0FHeEIsT0FBTyxNQUFQLENBSHdCO0FBQUEsc0NBSWYsT0FBTyxLQUFQLENBQWMsR0FBZCxDQUplO0FBQUE7QUFJL0Isd0JBSitCO0FBSXpCLHlCQUp5Qjs7QUFLckMsMkJBQU8sSUFBUCxDQUFhO0FBQ1QsOEJBQU0sRUFERztBQUVULGtDQUFVLE1BRkQ7QUFHVCxnQ0FBUSxJQUhDO0FBSVQsaUNBQVMsS0FKQTtBQUtULGdDQUFRO0FBTEMscUJBQWI7QUFPSDtBQUNELHVCQUFPLE1BQVA7QUF6RUc7QUFBQTtBQTRFRCxvQkE1RUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBNkVHLFNBQUssV0FBTCxFQTdFSDtBQUFBO0FBQUEsdUJBOEVrQixTQUFLLGVBQUwsRUE5RWxCO0FBQUE7QUE4RUMsd0JBOUVEO0FBK0VDLHdCQS9FRCxHQStFWSxTQUFTLFFBQVQsQ0EvRVo7QUFnRkMsc0JBaEZELEdBZ0ZVLEVBQUUsUUFBUSxRQUFWLEVBaEZWOztBQWlGSCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFNBQUssVUFBTCxDQUFnQixNQUFwQyxFQUE0QyxHQUE1QyxFQUFpRDtBQUN6Qyw0QkFEeUMsR0FDOUIsU0FBSyxVQUFMLENBQWdCLENBQWhCLENBRDhCO0FBRXpDLDZCQUZ5QyxHQUU3QixTQUFTLFdBQVQsRUFGNkI7QUFHekMsMkJBSHlDLEdBRy9CO0FBQ1YsZ0NBQVEsU0FERTtBQUVWLGdDQUFRLFNBRkU7QUFHVixpQ0FBUztBQUhDLHFCQUgrQjs7QUFRN0Msd0JBQUksV0FBVyxRQUFmO0FBQ0ksNEJBQUksYUFBYSxTQUFTLE9BQVQsQ0FBakI7QUFDSSxvQ0FBUSxNQUFSLElBQWtCLFNBQVMsT0FBVCxFQUFrQixTQUFsQixDQUFsQjtBQURKO0FBREoscUJBR0EsSUFBSSx1QkFBdUIsUUFBM0I7QUFDSSw0QkFBSSxhQUFhLFNBQVMsbUJBQVQsQ0FBakI7QUFDSSxvQ0FBUSxPQUFSLElBQW1CLFNBQVMsbUJBQVQsRUFBOEIsU0FBOUIsQ0FBbkI7QUFESjtBQURKLHFCQUdBLElBQUksUUFBUSxPQUFSLEtBQW9CLFFBQVEsTUFBUixDQUF4QjtBQUNJLGdDQUFRLE1BQVIsSUFBa0IsUUFBUSxPQUFSLElBQW1CLFFBQVEsTUFBUixDQUFyQztBQURKLHFCQUVBLE9BQU8sUUFBUCxJQUFtQixPQUFuQjtBQUNIO0FBQ0QsdUJBQU8sTUFBUDtBQW5HRztBQUFBO0FBc0dELHNCQXRHQywwQkFzR2UsTUF0R2Y7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFzR3VCLHNCQXRHdkIsbUZBc0dnQyxFQXRHaEM7QUFBQSx1QkF1R0csU0FBSyxXQUFMLEVBdkdIO0FBQUE7QUFBQSx1QkF3R21CLFNBQUssZUFBTCxDQUFzQixTQUFLLE1BQUwsQ0FBYTtBQUNyRCw0QkFBUSxTQUFLLFFBQUwsQ0FBZSxNQUFmO0FBRDZDLGlCQUFiLEVBRXpDLE1BRnlDLENBQXRCLENBeEduQjtBQUFBO0FBd0dDLHlCQXhHRDtBQTJHQyx5QkEzR0QsR0EyR2EsU0FBSyxZQUFMLEVBM0diO0FBNEdDLHNCQTVHRCxHQTRHVTtBQUNULDRCQUFRLFVBQVUsTUFBVixDQURDO0FBRVQsNEJBQVEsVUFBVSxNQUFWLENBRkM7QUFHVCxpQ0FBYSxTQUhKO0FBSVQsZ0NBQVksU0FBSyxPQUFMLENBQWMsU0FBZDtBQUpILGlCQTVHVjs7QUFrSEgsdUJBQU8sTUFBUDtBQWxIRztBQUFBO0FBcUhELG1CQXJIQyx1QkFxSFksTUFySFo7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkFzSEcsU0FBSyxXQUFMLEVBdEhIO0FBQUE7QUFBQSx1QkF1SGdCLFNBQUssZ0JBQUwsQ0FBdUI7QUFDdEMsNEJBQVEsU0FBSyxRQUFMLENBQWUsTUFBZjtBQUQ4QixpQkFBdkIsQ0F2SGhCO0FBQUE7QUF1SEMsc0JBdkhEO0FBMEhDLHlCQTFIRCxHQTBIYSxTQUFLLFlBQUwsRUExSGI7O0FBMkhILHVCQUFPO0FBQ0gsaUNBQWEsU0FEVjtBQUVILGdDQUFZLFNBQUssT0FBTCxDQUFjLFNBQWQsQ0FGVDtBQUdILDRCQUFRLE9BQU8sTUFBUCxDQUhMO0FBSUgsMkJBQU8sT0FBTyxLQUFQLENBSko7QUFLSCwyQkFBTyxPQUFPLEtBQVAsQ0FMSjtBQU1ILDJCQUFPLE9BQU8sS0FBUCxDQU5KO0FBT0gsNEJBQVEsT0FBTyxNQUFQLENBUEw7QUFRSCw0QkFBUSxTQVJMO0FBU0gsNkJBQVMsU0FUTjtBQVVILDZCQUFTLFNBVk47QUFXSCw0QkFBUSxPQUFPLE1BQVAsQ0FYTDtBQVlILDhCQUFVLFNBWlA7QUFhSCxrQ0FBYyxTQWJYO0FBY0gsK0JBQVcsU0FkUjtBQWVILGtDQUFjLFNBZlg7QUFnQkgsbUNBQWUsT0FBTyxRQUFQLENBaEJaO0FBaUJILDRCQUFRO0FBakJMLGlCQUFQO0FBM0hHO0FBQUE7QUFnSkQsbUJBaEpDLHVCQWdKWSxNQWhKWjtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQWdKb0Isc0JBaEpwQixtRkFnSjZCLEVBaEo3QjtBQUFBLHVCQWlKRyxTQUFLLFdBQUwsRUFqSkg7QUFBQTtBQWtKSCx1QkFBTyxTQUFLLGdCQUFMLENBQXVCLFNBQUssTUFBTCxDQUFhO0FBQ3ZDLDRCQUFRLFNBQUssUUFBTCxDQUFlLE1BQWY7QUFEK0IsaUJBQWIsRUFFM0IsTUFGMkIsQ0FBdkIsQ0FBUDtBQWxKRztBQUFBO0FBdUpELG1CQXZKQyx1QkF1SlksTUF2SlosRUF1Sm9CLElBdkpwQixFQXVKMEIsSUF2SjFCLEVBdUpnQyxNQXZKaEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBdUp3QyxxQkF2SnhDLG1GQXVKZ0QsU0F2SmhEO0FBdUoyRCxzQkF2SjNELG1GQXVKb0UsRUF2SnBFO0FBQUEsdUJBd0pHLFNBQUssV0FBTCxFQXhKSDtBQUFBO0FBeUpILG9CQUFJLFFBQVEsUUFBWjtBQUNJLDBCQUFNLElBQUksYUFBSixDQUFtQixTQUFLLEVBQUwsR0FBVSwyQkFBN0IsQ0FBTjtBQURKLGlCQXpKRyxPQTJKa0IsU0FBSyxhQUFMLENBQW9CLFNBQUssTUFBTCxDQUFhO0FBQ2xELHFDQUFpQixTQUFLLFFBQUwsQ0FBZSxNQUFmLENBRGlDO0FBRWxELDhCQUFXLFFBQVEsS0FBVCxHQUFrQixLQUFsQixHQUEwQixLQUZjO0FBR2xELDhCQUFVLE1BSHdDO0FBSWxELDZCQUFTO0FBSnlDLGlCQUFiLEVBS3RDLE1BTHNDLENBQXBCLENBM0psQjtBQUFBO0FBMkpDLHdCQTNKRDs7QUFpS0gsdUJBQU87QUFDSCw0QkFBUSxRQURMO0FBRUgsMEJBQU0sU0FBUyxRQUFULEVBQW1CLFVBQW5CLEVBQStCLFFBQS9CO0FBRkgsaUJBQVA7QUFqS0c7QUFBQTtBQXVLRCxtQkF2S0MsdUJBdUtZLEVBdktaO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBdUtnQixzQkF2S2hCLG1GQXVLeUIsRUF2S3pCO0FBQUEsdUJBd0tHLFNBQUssV0FBTCxFQXhLSDtBQUFBO0FBeUtILHVCQUFPLFNBQUssbUJBQUwsQ0FBMEIsU0FBSyxNQUFMLENBQWE7QUFDMUMsZ0NBQVk7QUFEOEIsaUJBQWIsRUFFOUIsTUFGOEIsQ0FBMUIsQ0FBUDtBQXpLRztBQUFBO0FBOEtELGVBOUtDLG1CQThLUSxJQTlLUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBOEtjLG1CQTlLZCxtRkE4S29CLEtBOUtwQjtBQThLMkIsc0JBOUszQixtRkE4S29DLEtBOUtwQztBQThLMkMsc0JBOUszQyxtRkE4S29ELEVBOUtwRDtBQThLd0QsdUJBOUt4RCxtRkE4S2tFLFNBOUtsRTtBQThLNkUsb0JBOUs3RSxtRkE4S29GLFNBOUtwRjtBQStLQyxtQkEvS0QsR0ErS08sU0FBSyxJQUFMLENBQVUsS0FBVixJQUFtQixHQUFuQixHQUF5QixHQS9LaEM7O0FBZ0xILG9CQUFJLE9BQU8sS0FBWCxFQUFrQjtBQUNkLDJCQUFPLE1BQU0sU0FBSyxPQUFYLEdBQXFCLEdBQXJCLEdBQTJCLFNBQUssYUFBTCxDQUFvQixJQUFwQixFQUEwQixNQUExQixDQUFsQztBQUNILGlCQUZELE1BRU87QUFDQyx5QkFERCxHQUNTLFNBQUssS0FBTCxFQURUOztBQUVILDJCQUFPLFNBQUssU0FBTCxDQUFnQixTQUFLLE1BQUwsQ0FBYTtBQUNoQyxrQ0FBVSxJQURzQjtBQUVoQyxpQ0FBUztBQUZ1QixxQkFBYixFQUdwQixNQUhvQixDQUFoQixDQUFQO0FBSUEsOEJBQVU7QUFDTix3Q0FBZ0IsbUNBRFY7QUFFTiwwQ0FBa0IsS0FBSyxNQUZqQjtBQUdOLCtCQUFPLFNBQUssTUFITjtBQUlOLGdDQUFRLFNBQUssSUFBTCxDQUFXLFNBQUssTUFBTCxDQUFhLElBQWIsQ0FBWCxFQUErQixTQUFLLE1BQUwsQ0FBYSxTQUFLLE1BQWxCLENBQS9CLEVBQTBELFFBQTFEO0FBSkYscUJBQVY7QUFNSDtBQTlMRSx1QkErTGtCLFNBQUssS0FBTCxDQUFZLEdBQVosRUFBaUIsTUFBakIsRUFBeUIsT0FBekIsRUFBa0MsSUFBbEMsQ0EvTGxCO0FBQUE7QUErTEMsd0JBL0xEOztBQWdNSCxvQkFBSSxXQUFXLFFBQWY7QUFDSSwwQkFBTSxJQUFJLGFBQUosQ0FBbUIsU0FBSyxFQUFMLEdBQVUsR0FBVixHQUFnQixTQUFTLE9BQVQsQ0FBbkMsQ0FBTjtBQURKLGlCQUVBLElBQUksYUFBYSxRQUFqQjtBQUNJLHdCQUFJLENBQUMsU0FBUyxTQUFULENBQUw7QUFDSSw4QkFBTSxJQUFJLGFBQUosQ0FBbUIsU0FBSyxFQUFMLEdBQVUsR0FBVixHQUFnQixTQUFLLElBQUwsQ0FBVyxRQUFYLENBQW5DLENBQU47QUFESjtBQURKLGlCQUdBLE9BQU8sUUFBUDtBQXJNRztBQUFBO0FBQUEsS0FBWDs7QUF5TUE7O0FBRUEsUUFBSSxZQUFZOztBQUVaLG9CQUFpQixRQUZMO0FBR1osbUJBQWlCLE9BSEw7QUFJWixrQkFBaUIsTUFKTDtBQUtaLG1CQUFpQixPQUxMO0FBTVosaUJBQWlCLEtBTkw7QUFPWixrQkFBaUIsTUFQTDtBQVFaLG1CQUFpQixPQVJMO0FBU1osdUJBQWlCLFdBVEw7QUFVWixvQkFBaUIsUUFWTDtBQVdaLG9CQUFpQixRQVhMO0FBWVosbUJBQWlCLE9BWkw7QUFhWixxQkFBaUIsU0FiTDtBQWNaLGtCQUFpQixNQWRMO0FBZVosaUJBQWlCLEtBZkw7QUFnQlosb0JBQWlCLFFBaEJMO0FBaUJaLG1CQUFpQixPQWpCTDtBQWtCWixnQkFBaUIsSUFsQkw7QUFtQlosb0JBQWlCLFFBbkJMO0FBb0JaLGdCQUFpQixJQXBCTDtBQXFCWix1QkFBaUIsV0FyQkw7QUFzQlosc0JBQWlCLFVBdEJMO0FBdUJaLHNCQUFpQixVQXZCTDtBQXdCWixtQkFBaUIsT0F4Qkw7QUF5QlosZ0JBQWlCLElBekJMO0FBMEJaLGdCQUFpQixJQTFCTDtBQTJCWixrQkFBaUIsTUEzQkw7QUE0QlosZ0JBQWlCLElBNUJMO0FBNkJaLGVBQWlCLEdBN0JMO0FBOEJaLGlCQUFpQixLQTlCTDtBQStCWixvQkFBaUIsUUEvQkw7QUFnQ1oscUJBQWlCLFNBaENMO0FBaUNaLHFCQUFpQixTQWpDTDtBQWtDWixrQkFBaUIsTUFsQ0w7QUFtQ1oseUJBQWlCLGFBbkNMO0FBb0NaLG9CQUFpQixRQXBDTDtBQXFDWixzQkFBaUIsVUFyQ0w7QUFzQ1osb0JBQWlCLFFBdENMO0FBdUNaLHFCQUFpQixTQXZDTDtBQXdDWixlQUFpQixHQXhDTDtBQXlDWixnQkFBaUIsSUF6Q0w7QUEwQ1osbUJBQWlCLE9BMUNMO0FBMkNaLGtCQUFpQixNQTNDTDtBQTRDWixpQkFBaUIsS0E1Q0w7QUE2Q1osaUJBQWlCLEtBN0NMO0FBOENaLG9CQUFpQixRQTlDTDtBQStDWixnQkFBaUIsSUEvQ0w7QUFnRFosa0JBQWlCLE1BaERMO0FBaURaLGtCQUFpQixNQWpETDtBQWtEWixpQkFBaUIsS0FsREw7QUFtRFosaUJBQWlCLEtBbkRMO0FBb0RaLGdCQUFpQixJQXBETDtBQXFEWixrQkFBaUIsTUFyREw7QUFzRFosbUJBQWlCLE9BdERMO0FBdURaLG9CQUFpQixRQXZETDtBQXdEWixpQkFBaUIsS0F4REw7QUF5RFosZ0JBQWlCLElBekRMO0FBMERaLG1CQUFpQixPQTFETDtBQTJEWixxQkFBaUIsU0EzREw7QUE0RFoscUJBQWlCLFNBNURMO0FBNkRaLGdCQUFpQixJQTdETDtBQThEWixtQkFBaUIsT0E5REw7QUErRFosb0JBQWlCLFFBL0RMO0FBZ0VaLHNCQUFpQixVQWhFTDtBQWlFWixrQkFBaUIsTUFqRUw7QUFrRVosd0JBQWlCLFlBbEVMO0FBbUVaLHNCQUFpQixVQW5FTDtBQW9FWixtQkFBaUIsT0FwRUw7QUFxRVosbUJBQWlCLE9BckVMO0FBc0VaLG9CQUFpQixRQXRFTDtBQXVFWixnQkFBaUIsSUF2RUw7QUF3RVosa0JBQWlCLE1BeEVMO0FBeUVaLGlCQUFpQixLQXpFTDtBQTBFWixpQkFBaUIsS0ExRUw7QUEyRVosaUJBQWlCLEtBM0VMO0FBNEVaLGdCQUFpQjtBQTVFTCxLQUFoQjs7QUErRUEsUUFBSSxxQkFBcUIsU0FBckIsa0JBQXFCLENBQVUsU0FBVixFQUFxQjtBQUMxQyxZQUFJLFNBQVMsRUFBYjs7QUFEMEMscUNBRWpDLEVBRmlDO0FBR3RDLG1CQUFPLEVBQVAsSUFBYSxVQUFVLE1BQVYsRUFBa0I7QUFDM0IsdUJBQU8sSUFBSSxRQUFKLENBQWMsT0FBUSxVQUFVLEVBQVYsQ0FBUixFQUF1QixNQUF2QixDQUFkLENBQVA7QUFDSCxhQUZEO0FBSHNDOztBQUUxQyxhQUFLLElBQUksRUFBVCxJQUFlLFNBQWY7QUFBQSxtQkFBUyxFQUFUO0FBQUEsU0FJQSxPQUFPLFNBQVAsR0FBbUIsT0FBTyxJQUFQLENBQWEsU0FBYixDQUFuQjtBQUNBLGVBQU8sTUFBUDtBQUNILEtBUkQ7O0FBVUE7O0FBRUEsUUFBTSxPQUFPLE9BQU8sTUFBUCxDQUFlLG1CQUFvQixTQUFwQixDQUFmLEVBQStDOztBQUV4RCx3QkFGd0Q7O0FBSXhEOztBQUVBLDRCQU53RDtBQU94RCxvQ0FQd0Q7QUFReEQsa0NBUndEO0FBU3hELGdEQVR3RDtBQVV4RCw0Q0FWd0Q7QUFXeEQsa0NBWHdEO0FBWXhELHNDQVp3RDtBQWF4RCxzQ0Fid0Q7QUFjeEQsa0RBZHdEOztBQWdCeEQ7O0FBRUEsb0JBbEJ3RDtBQW1CeEQsd0JBbkJ3RDtBQW9CeEQsOEJBcEJ3RDtBQXFCeEQsd0JBckJ3RDtBQXNCeEQsc0JBdEJ3RDtBQXVCeEQsa0JBdkJ3RDtBQXdCeEQsd0JBeEJ3RDtBQXlCeEQsc0JBekJ3RDtBQTBCeEQsd0JBMUJ3RDtBQTJCeEQsc0JBM0J3RDtBQTRCeEQsb0JBNUJ3RDtBQTZCeEQsNEJBN0J3RDtBQThCeEQsZ0JBOUJ3RDtBQStCeEQsd0JBL0J3RDs7QUFpQ3hEOztBQUVBLGtCQUFVLE9BbkM4QztBQW9DeEQsaUJBQVMsTUFwQytDOztBQXNDeEQ7O0FBRUEsa0NBeEN3RDtBQXlDeEQsc0NBekN3RDtBQTBDeEQsc0NBMUN3RDtBQTJDeEQsc0NBM0N3RDtBQTRDeEQsb0NBNUN3RDtBQTZDeEQsc0NBN0N3RDtBQThDeEQsc0NBOUN3RDtBQStDeEQsd0NBL0N3RDtBQWdEeEQsa0JBaER3RDtBQWlEeEQsa0JBakR3RDtBQWtEeEQ7O0FBbER3RCxLQUEvQyxDQUFiOztBQXNEQTs7QUFFQSxRQUFJLFVBQUosRUFBZ0I7O0FBRVosZUFBTyxPQUFQLEdBQWlCLElBQWpCO0FBRUgsS0FKRCxNQUlPOztBQUVILGVBQU8sSUFBUCxHQUFjLElBQWQ7QUFDSDs7QUFFRDtBQUVDLENBbHZlRCxJLENBa3ZlTTs7Ozs7QUM5d2VOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2T0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDLzJCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2dkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25JQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0TUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqd0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9TQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt2YXIgZj1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK28rXCInXCIpO3Rocm93IGYuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixmfXZhciBsPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSkiLCJcInVzZSBzdHJpY3RcIjtcblxuLypcblxuTUlUIExpY2Vuc2VcblxuQ29weXJpZ2h0IChjKSAyMDE3IElnb3IgS3JvaXRvclxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG5vZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG5pbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG50byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG5jb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG5GSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG5PVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuU09GVFdBUkUuXG5cbiovXG5cbihmdW5jdGlvbiAoKSB7XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIGRlcGVuZGVuY2llc1xuXG5jb25zdCBDcnlwdG9KUyA9IHJlcXVpcmUgKCdjcnlwdG8tanMnKVxuICAgICwgcXMgICAgICAgPSByZXF1aXJlICgncXMnKSAvLyBxdWVyeXN0cmluZ1xuICAgIC8vICwgd3MgICAgICAgPSByZXF1aXJlICgnd3MnKSAvLyB3ZWJzb2NrZXRcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gdGhpcyBpcyB1cGRhdGVkIGJ5IHZzcy5qcyB3aGVuIGJ1aWxkaW5nXG5cbmNvbnN0IHZlcnNpb24gPSAnMS40Ljk2J1xuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBwbGF0Zm9ybSBkZXRlY3Rpb25cblxuY29uc3QgaXNOb2RlICAgICA9ICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJylcbiAgICAsIGlzQ29tbW9uSlMgPSAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcpICYmICh0eXBlb2YgcmVxdWlyZSAhPT0gJ3VuZGVmaW5lZCcpXG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuY2xhc3MgQ0NYVEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgICAgIHN1cGVyIChtZXNzYWdlKVxuICAgICAgICAvLyBhIHdvcmthcm91bmQgdG8gbWFrZSBgaW5zdGFuY2VvZiBDQ1hURXJyb3JgIHdvcmsgaW4gRVM1XG4gICAgICAgIHRoaXMuY29uc3RydWN0b3IgPSBDQ1hURXJyb3JcbiAgICAgICAgdGhpcy5fX3Byb3RvX18gICA9IENDWFRFcnJvci5wcm90b3R5cGVcbiAgICAgICAgdGhpcy5tZXNzYWdlICAgICA9IG1lc3NhZ2VcbiAgICB9XG59XG5cbmNsYXNzIEV4Y2hhbmdlRXJyb3IgZXh0ZW5kcyBDQ1hURXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgICAgIHN1cGVyIChtZXNzYWdlKVxuICAgICAgICB0aGlzLmNvbnN0cnVjdG9yID0gRXhjaGFuZ2VFcnJvclxuICAgICAgICB0aGlzLl9fcHJvdG9fXyAgID0gRXhjaGFuZ2VFcnJvci5wcm90b3R5cGVcbiAgICAgICAgdGhpcy5tZXNzYWdlICAgICA9IG1lc3NhZ2VcbiAgICB9XG59XG5cbmNsYXNzIE5vdFN1cHBvcnRlZCBleHRlbmRzIEV4Y2hhbmdlRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgICAgIHN1cGVyIChtZXNzYWdlKVxuICAgICAgICB0aGlzLmNvbnN0cnVjdG9yID0gTm90U3VwcG9ydGVkXG4gICAgICAgIHRoaXMuX19wcm90b19fICAgPSBOb3RTdXBwb3J0ZWQucHJvdG90eXBlXG4gICAgICAgIHRoaXMubWVzc2FnZSAgICAgPSBtZXNzYWdlXG4gICAgfVxufVxuXG5jbGFzcyBBdXRoZW50aWNhdGlvbkVycm9yIGV4dGVuZHMgRXhjaGFuZ2VFcnJvciB7XG4gICAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICAgICAgc3VwZXIgKG1lc3NhZ2UpXG4gICAgICAgIHRoaXMuY29uc3RydWN0b3IgPSBBdXRoZW50aWNhdGlvbkVycm9yXG4gICAgICAgIHRoaXMuX19wcm90b19fICAgPSBBdXRoZW50aWNhdGlvbkVycm9yLnByb3RvdHlwZVxuICAgICAgICB0aGlzLm1lc3NhZ2UgICAgID0gbWVzc2FnZVxuICAgIH1cbn1cblxuY2xhc3MgSW5zdWZmaWNpZW50RnVuZHMgZXh0ZW5kcyBFeGNoYW5nZUVycm9yIHtcbiAgICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgICAgICBzdXBlciAobWVzc2FnZSlcbiAgICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IEluc3VmZmljaWVudEZ1bmRzXG4gICAgICAgIHRoaXMuX19wcm90b19fICAgPSBJbnN1ZmZpY2llbnRGdW5kcy5wcm90b3R5cGVcbiAgICAgICAgdGhpcy5tZXNzYWdlICAgICA9IG1lc3NhZ2VcbiAgICB9ICAgXG59XG5cbmNsYXNzIE5ldHdvcmtFcnJvciBleHRlbmRzIENDWFRFcnJvciB7XG4gICAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICAgICAgc3VwZXIgKG1lc3NhZ2UpXG4gICAgICAgIHRoaXMuY29uc3RydWN0b3IgPSBOZXR3b3JrRXJyb3JcbiAgICAgICAgdGhpcy5fX3Byb3RvX18gICA9IE5ldHdvcmtFcnJvci5wcm90b3R5cGVcbiAgICAgICAgdGhpcy5tZXNzYWdlICAgICA9IG1lc3NhZ2VcbiAgICB9XG59XG5cbmNsYXNzIEREb1NQcm90ZWN0aW9uIGV4dGVuZHMgTmV0d29ya0Vycm9yIHtcbiAgICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgICAgICBzdXBlciAobWVzc2FnZSlcbiAgICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IEREb1NQcm90ZWN0aW9uXG4gICAgICAgIHRoaXMuX19wcm90b19fICAgPSBERG9TUHJvdGVjdGlvbi5wcm90b3R5cGVcbiAgICAgICAgdGhpcy5tZXNzYWdlICAgICA9IG1lc3NhZ2VcbiAgICB9XG59XG5cbmNsYXNzIFJlcXVlc3RUaW1lb3V0IGV4dGVuZHMgTmV0d29ya0Vycm9yIHtcbiAgICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgICAgICBzdXBlciAobWVzc2FnZSlcbiAgICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IFJlcXVlc3RUaW1lb3V0XG4gICAgICAgIHRoaXMuX19wcm90b19fICAgPSBSZXF1ZXN0VGltZW91dC5wcm90b3R5cGVcbiAgICAgICAgdGhpcy5tZXNzYWdlICAgICA9IG1lc3NhZ2VcbiAgICB9XG59XG5cbmNsYXNzIEV4Y2hhbmdlTm90QXZhaWxhYmxlIGV4dGVuZHMgTmV0d29ya0Vycm9yIHtcbiAgICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgICAgICBzdXBlciAobWVzc2FnZSlcbiAgICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IEV4Y2hhbmdlTm90QXZhaWxhYmxlXG4gICAgICAgIHRoaXMuX19wcm90b19fICAgPSBFeGNoYW5nZU5vdEF2YWlsYWJsZS5wcm90b3R5cGVcbiAgICAgICAgdGhpcy5tZXNzYWdlICAgICA9IG1lc3NhZ2VcbiAgICB9XG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIHV0aWxpdHkgaGVscGVyc1xuXG5jb25zdCBzbGVlcCA9IG1zID0+IG5ldyBQcm9taXNlIChyZXNvbHZlID0+IHNldFRpbWVvdXQgKHJlc29sdmUsIG1zKSk7XG5cbmNvbnN0IGRlY2ltYWwgPSBmbG9hdCA9PiBwYXJzZUZsb2F0IChmbG9hdCkudG9TdHJpbmcgKClcblxuY29uc3QgdGltZW91dCA9IChtcywgcHJvbWlzZSkgPT5cbiAgICAgICAgUHJvbWlzZS5yYWNlIChbXG4gICAgICAgICAgICBwcm9taXNlLFxuICAgICAgICAgICAgc2xlZXAgKG1zKS50aGVuICgoKSA9PiB7IHRocm93IG5ldyBSZXF1ZXN0VGltZW91dCAoJ3JlcXVlc3QgdGltZWQgb3V0JykgfSlcbiAgICAgICAgXSlcblxuY29uc3QgY2FwaXRhbGl6ZSA9IHN0cmluZyA9PiBzdHJpbmcubGVuZ3RoID8gKHN0cmluZy5jaGFyQXQgKDApLnRvVXBwZXJDYXNlICgpICsgc3RyaW5nLnNsaWNlICgxKSkgOiBzdHJpbmdcblxuY29uc3Qga2V5c29ydCA9IG9iamVjdCA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0ge31cbiAgICBPYmplY3Qua2V5cyAob2JqZWN0KS5zb3J0ICgpLmZvckVhY2ggKGtleSA9PiByZXN1bHRba2V5XSA9IG9iamVjdFtrZXldKVxuICAgIHJldHVybiByZXN1bHRcbn1cblxuY29uc3QgZXh0ZW5kID0gKC4uLmFyZ3MpID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSB7fVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKylcbiAgICAgICAgaWYgKHR5cGVvZiBhcmdzW2ldID09PSAnb2JqZWN0JylcbiAgICAgICAgICAgIE9iamVjdC5rZXlzIChhcmdzW2ldKS5mb3JFYWNoIChrZXkgPT5cbiAgICAgICAgICAgICAgICAocmVzdWx0W2tleV0gPSBhcmdzW2ldW2tleV0pKVxuICAgIHJldHVybiByZXN1bHRcbn1cblxuY29uc3Qgb21pdCA9IGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgICBjb25zdCByZXN1bHQgPSBleHRlbmQgKG9iamVjdClcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKylcbiAgICAgICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbaV0gPT09ICdzdHJpbmcnKVxuICAgICAgICAgICAgZGVsZXRlIHJlc3VsdFthcmd1bWVudHNbaV1dXG4gICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkgKGFyZ3VtZW50c1tpXSkpXG4gICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IGFyZ3VtZW50c1tpXS5sZW5ndGg7IGsrKylcbiAgICAgICAgICAgICAgICBkZWxldGUgcmVzdWx0W2FyZ3VtZW50c1tpXVtrXV1cbiAgICByZXR1cm4gcmVzdWx0XG59XG5cbmNvbnN0IGluZGV4QnkgPSAoYXJyYXksIGtleSkgPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQgZWxlbWVudCA9IGFycmF5W2ldXG4gICAgICAgIGlmICh0eXBlb2YgZWxlbWVudFtrZXldICE9ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXN1bHRbZWxlbWVudFtrZXldXSA9IGVsZW1lbnRcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0XG59XG5cbmNvbnN0IHNvcnRCeSA9IChhcnJheSwga2V5LCBkZXNjZW5kaW5nID0gZmFsc2UpID0+IHtcbiAgICBkZXNjZW5kaW5nID0gZGVzY2VuZGluZyA/IC0xIDogMVxuICAgIHJldHVybiBhcnJheS5zb3J0ICgoYSwgYikgPT4gKChhW2tleV0gPCBiW2tleV0pID8gLWRlc2NlbmRpbmcgOiAoKGFba2V5XSA+IGJba2V5XSkgPyBkZXNjZW5kaW5nIDogMCkpKVxufVxuXG5jb25zdCBmbGF0dGVuID0gKGFycmF5LCByZXN1bHQgPSBbXSkgPT4ge1xuICAgIGZvciAobGV0IGkgPSAwLCBsZW5ndGggPSBhcnJheS5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGFycmF5W2ldXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5ICh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGZsYXR0ZW4gKHZhbHVlLCByZXN1bHQpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCAodmFsdWUpXG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdFxufVxuXG5jb25zdCB1bmlxdWUgPSBhcnJheSA9PiBhcnJheS5maWx0ZXIgKCh2YWx1ZSwgaW5kZXgsIHNlbGYpID0+IChzZWxmLmluZGV4T2YgKHZhbHVlKSA9PSBpbmRleCkpXG5cbmNvbnN0IHBsdWNrID0gKGFycmF5LCBrZXkpID0+IGFycmF5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIgKGVsZW1lbnQgPT4gKHR5cGVvZiBlbGVtZW50W2tleV0gIT0gJ3VuZGVmaW5lZCcpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwIChlbGVtZW50ID0+IGVsZW1lbnRba2V5XSlcblxuY29uc3QgdXJsZW5jb2RlID0gb2JqZWN0ID0+IHFzLnN0cmluZ2lmeSAob2JqZWN0KVxuXG5jb25zdCBzdW0gPSAoLi4uYXJncykgPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGFyZ3MuZmlsdGVyIChhcmcgPT4gdHlwZW9mIGFyZyAhPSAndW5kZWZpbmVkJylcbiAgICByZXR1cm4gKHJlc3VsdC5sZW5ndGggPiAwKSA/XG4gICAgICAgIHJlc3VsdC5yZWR1Y2UgKChzdW0sIHZhbHVlKSA9PiBzdW0gKyB2YWx1ZSwgMCkgOiB1bmRlZmluZWRcbn1cblxuY29uc3Qgb3JkZXJlZCA9IHggPT4geCAvLyBhIHN0dWIgdG8ga2VlcCBhc3NvYyBrZXlzIGluIG9yZGVyLCBpbiBKUyBpdCBkb2VzIG5vdGhpbmcsIGl0J3MgbW9zdGx5IGZvciBQeXRob25cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gYSBjcm9zcy1wbGF0Zm9ybSBGZXRjaCBBUElcblxuY29uc3Qgbm9kZUZldGNoICAgPSBpc05vZGUgJiYgbW9kdWxlLnJlcXVpcmUgKCdub2RlLWZldGNoJykgICAgICAgICAvLyB1c2luZyBtb2R1bGUucmVxdWlyZSB0byBwcmV2ZW50IFdlYnBhY2sgLyBSZWFjdCBOYXRpdmUgZnJvbSB0cnlpbmcgdG8gaW5jbHVkZSBpdFxuICAgICwgd2luZG93RmV0Y2ggPSAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmZldGNoKSAvLyBuYXRpdmUgRmV0Y2ggQVBJIChpbiBuZXdlciBicm93c2VycylcbiAgICAsIHhockZldGNoICAgID0gKHVybCwgb3B0aW9ucywgdmVyYm9zZSA9IGZhbHNlKSA9PiAgICAgICAgICAgICAgLy8gYSBxdWljayBhZC1ob2MgcG9seWZpbGwgKGZvciBvbGRlciBicm93c2VycylcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBQcm9taXNlICgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cgKHVybCwgb3B0aW9ucylcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCAoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1ldGhvZCA9IG9wdGlvbnMubWV0aG9kIHx8ICdHRVQnXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHIub3BlbiAobWV0aG9kLCB1cmwsIHRydWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4aHIuc3RhdHVzID09IDIwMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlICh4aHIucmVzcG9uc2VUZXh0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7IC8vIFs0MDMsIDQwNCwgLi4uXS5pbmRleE9mICh4aHIuc3RhdHVzKSA+PSAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yIChtZXRob2QsIHVybCwgeGhyLnN0YXR1cywgeGhyLnJlc3BvbnNlVGV4dClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5oZWFkZXJzICE9ICd1bmRlZmluZWQnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBoZWFkZXIgaW4gb3B0aW9ucy5oZWFkZXJzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIgKGhlYWRlciwgb3B0aW9ucy5oZWFkZXJzW2hlYWRlcl0pXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHIuc2VuZCAob3B0aW9ucy5ib2R5KVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcblxuY29uc3QgZmV0Y2ggPSBub2RlRmV0Y2ggfHwgd2luZG93RmV0Y2ggfHwgeGhyRmV0Y2hcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gc3RyaW5nIOKGkOKGkiBiaW5hcnkg4oaQ4oaSIGJhc2U2NCBjb252ZXJzaW9uIHJvdXRpbmVzXG5cbmNvbnN0IHN0cmluZ1RvQmluYXJ5ID0gc3RyID0+IHtcbiAgICBjb25zdCBhcnIgPSBuZXcgVWludDhBcnJheSAoc3RyLmxlbmd0aClcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykgeyBhcnJbaV0gPSBzdHIuY2hhckNvZGVBdChpKTsgfVxuICAgIHJldHVybiBDcnlwdG9KUy5saWIuV29yZEFycmF5LmNyZWF0ZSAoYXJyKVxufVxuXG5jb25zdCBzdHJpbmdUb0Jhc2U2NCA9IHN0cmluZyA9PiBDcnlwdG9KUy5lbmMuTGF0aW4xLnBhcnNlIChzdHJpbmcpLnRvU3RyaW5nIChDcnlwdG9KUy5lbmMuQmFzZTY0KVxuICAgICwgdXRmMTZUb0Jhc2U2NCAgPSBzdHJpbmcgPT4gQ3J5cHRvSlMuZW5jLlV0ZjE2IC5wYXJzZSAoc3RyaW5nKS50b1N0cmluZyAoQ3J5cHRvSlMuZW5jLkJhc2U2NClcbiAgICAsIGJhc2U2NFRvQmluYXJ5ID0gc3RyaW5nID0+IENyeXB0b0pTLmVuYy5CYXNlNjQucGFyc2UgKHN0cmluZylcbiAgICAsIGJhc2U2NFRvU3RyaW5nID0gc3RyaW5nID0+IENyeXB0b0pTLmVuYy5CYXNlNjQucGFyc2UgKHN0cmluZykudG9TdHJpbmcgKENyeXB0b0pTLmVuYy5VdGY4KVxuICAgICwgYmluYXJ5VG9TdHJpbmcgPSBzdHJpbmcgPT4gc3RyaW5nXG5cbmNvbnN0IGJpbmFyeUNvbmNhdCA9ICguLi5hcmdzKSA9PiBhcmdzLnJlZHVjZSAoKGEsIGIpID0+IGEuY29uY2F0IChiKSlcblxuLy8gdXJsLXNhZmUtYmFzZTY0IHdpdGhvdXQgZXF1YWxzIHNpZ25zLCB3aXRoICsgcmVwbGFjZWQgYnkgLSBhbmQgc2xhc2hlcyByZXBsYWNlZCBieSB1bmRlcnNjb3Jlc1xuY29uc3QgdXJsZW5jb2RlQmFzZTY0ID0gYmFzZTY0c3RyaW5nID0+IGJhc2U2NHN0cmluZy5yZXBsYWNlICgvWz1dKyQvLCAnJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSAoL1xcKy9nLCAnLScpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UgKC9cXC8vZywgJ18nKVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBjcnlwdG9ncmFwaHlcblxuY29uc3QgaGFzaCA9IChyZXF1ZXN0LCBoYXNoID0gJ21kNScsIGRpZ2VzdCA9ICdoZXgnKSA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gQ3J5cHRvSlNbaGFzaC50b1VwcGVyQ2FzZSAoKV0gKHJlcXVlc3QpXG4gICAgcmV0dXJuIChkaWdlc3QgPT0gJ2JpbmFyeScpID8gcmVzdWx0IDogcmVzdWx0LnRvU3RyaW5nIChDcnlwdG9KUy5lbmNbY2FwaXRhbGl6ZSAoZGlnZXN0KV0pXG59XG5cbmNvbnN0IGhtYWMgPSAocmVxdWVzdCwgc2VjcmV0LCBoYXNoID0gJ3NoYTI1NicsIGRpZ2VzdCA9ICdoZXgnKSA9PiB7XG4gICAgY29uc3QgZW5jb2RpbmcgPSAoZGlnZXN0ID09ICdiaW5hcnknKSA/ICdMYXRpbjEnIDogY2FwaXRhbGl6ZSAoZGlnZXN0KVxuICAgIHJldHVybiBDcnlwdG9KU1snSG1hYycgKyBoYXNoLnRvVXBwZXJDYXNlICgpXSAocmVxdWVzdCwgc2VjcmV0KS50b1N0cmluZyAoQ3J5cHRvSlMuZW5jW2NhcGl0YWxpemUgKGVuY29kaW5nKV0pXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIGEgSlNPTiBXZWIgVG9rZW4gYXV0aGVudGljYXRpb24gbWV0aG9kXG5cbmNvbnN0IGp3dCA9IChyZXF1ZXN0LCBzZWNyZXQsIGFsZyA9ICdIUzI1NicsIGhhc2ggPSAnc2hhMjU2JykgPT4ge1xuICAgIGNvbnN0IGVuY29kZWRIZWFkZXIgPSB1cmxlbmNvZGVCYXNlNjQgKHN0cmluZ1RvQmFzZTY0IChKU09OLnN0cmluZ2lmeSAoeyAnYWxnJzogYWxnLCAndHlwJzogJ0pXVCcgfSkpKVxuICAgICAgICAsIGVuY29kZWREYXRhID0gdXJsZW5jb2RlQmFzZTY0IChzdHJpbmdUb0Jhc2U2NCAoSlNPTi5zdHJpbmdpZnkgKHJlcXVlc3QpKSlcbiAgICAgICAgLCB0b2tlbiA9IFsgZW5jb2RlZEhlYWRlciwgZW5jb2RlZERhdGEgXS5qb2luICgnLicpXG4gICAgICAgICwgc2lnbmF0dXJlID0gdXJsZW5jb2RlQmFzZTY0ICh1dGYxNlRvQmFzZTY0IChobWFjICh0b2tlbiwgc2VjcmV0LCBoYXNoLCAndXRmMTYnKSkpXG4gICAgcmV0dXJuIFsgdG9rZW4sIHNpZ25hdHVyZSBdLmpvaW4gKCcuJylcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gY29uc3QgV2ViU29ja2V0ID0gcmVxdWlyZSgnd3MnKVxuLy8gY29uc3Qgd3MgPSBuZXcgV2ViU29ja2V0ICh0aGlzLnVybHNbJ3dlYnNvY2tldCddKVxuLy8gd3Mub24gKCdvcGVuJywgZnVuY3Rpb24gb3BlbiAoKSB7XG4vLyAgICAgY29uc29sZS5sb2cgKCdjb25uZWN0ZWQnKVxuLy8gICAgIC8vIHdzLnNlbmQgKERhdGUubm93ICgpKVxuLy8gfSlcbi8vIHdzLm9uICgnY2xvc2UnLCBmdW5jdGlvbiBjbG9zZSAoKSB7XG4vLyAgICAgY29uc29sZS5sb2cgKCdkaXNjb25uZWN0ZWQnKVxuLy8gfSk7XG4vLyB3cy5vbiAoJ21lc3NhZ2UnLCBmdW5jdGlvbiBpbmNvbWluZyAoZGF0YSkge1xuLy8gICAgIC8vIGNvbnNvbGUubG9nIChgUm91bmR0cmlwIHRpbWU6ICR7RGF0ZS5ub3coKSAtIGRhdGF9IG1zYCk7XG4vLyAgICAgc2V0VGltZW91dCAoZnVuY3Rpb24gdGltZW91dCAoKSB7XG4vLyAgICAgICAgIHdzLnNlbmQgKERhdGUubm93ICgpKVxuLy8gICAgIH0sIDUwMClcbi8vIH0pXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIHRoZSBiYXNlIGNsYXNzXG5cbmNvbnN0IEV4Y2hhbmdlID0gZnVuY3Rpb24gKGNvbmZpZykge1xuXG4gICAgdGhpcy5oYXNoID0gaGFzaFxuICAgIHRoaXMuaG1hYyA9IGhtYWNcbiAgICB0aGlzLmp3dCA9IGp3dCAvLyBKU09OIFdlYiBUb2tlblxuICAgIHRoaXMuYmluYXJ5Q29uY2F0ID0gYmluYXJ5Q29uY2F0XG4gICAgdGhpcy5zdHJpbmdUb0JpbmFyeSA9IHN0cmluZ1RvQmluYXJ5XG4gICAgdGhpcy5zdHJpbmdUb0Jhc2U2NCA9IHN0cmluZ1RvQmFzZTY0XG4gICAgdGhpcy5iYXNlNjRUb0JpbmFyeSA9IGJhc2U2NFRvQmluYXJ5XG4gICAgdGhpcy5iYXNlNjRUb1N0cmluZyA9IGJhc2U2NFRvU3RyaW5nXG4gICAgdGhpcy5iaW5hcnlUb1N0cmluZyA9IGJpbmFyeVRvU3RyaW5nXG4gICAgdGhpcy51dGYxNlRvQmFzZTY0ID0gdXRmMTZUb0Jhc2U2NFxuICAgIHRoaXMudXJsZW5jb2RlID0gdXJsZW5jb2RlXG4gICAgdGhpcy5lbmNvZGVVUklDb21wb25lbnQgPSBlbmNvZGVVUklDb21wb25lbnRcbiAgICB0aGlzLm9taXQgPSBvbWl0XG4gICAgdGhpcy5wbHVjayA9IHBsdWNrXG4gICAgdGhpcy51bmlxdWUgPSB1bmlxdWVcbiAgICB0aGlzLmV4dGVuZCA9IGV4dGVuZFxuICAgIHRoaXMuZmxhdHRlbiA9IGZsYXR0ZW5cbiAgICB0aGlzLmluZGV4QnkgPSBpbmRleEJ5XG4gICAgdGhpcy5zb3J0QnkgPSBzb3J0QnlcbiAgICB0aGlzLmtleXNvcnQgPSBrZXlzb3J0XG4gICAgdGhpcy5kZWNpbWFsID0gZGVjaW1hbFxuICAgIHRoaXMuY2FwaXRhbGl6ZSA9IGNhcGl0YWxpemVcbiAgICB0aGlzLmpzb24gPSBKU09OLnN0cmluZ2lmeVxuICAgIHRoaXMuc3VtID0gc3VtXG4gICAgdGhpcy5vcmRlcmVkID0gb3JkZXJlZFxuXG4gICAgdGhpcy5lbmNvZGUgPSBzdHJpbmcgPT4gc3RyaW5nXG4gICAgdGhpcy5kZWNvZGUgPSBzdHJpbmcgPT4gc3RyaW5nXG5cbiAgICBpZiAoaXNOb2RlKVxuICAgICAgICB0aGlzLm5vZGVWZXJzaW9uID0gcHJvY2Vzcy52ZXJzaW9uLm1hdGNoICgvXFxkK1xcLlxcZCsuXFxkKy8pIFswXVxuXG4gICAgdGhpcy5pbml0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLm9yZGVycyA9IHt9XG4gICAgICAgIHRoaXMudHJhZGVzID0ge31cbiAgICAgICAgaWYgKHRoaXMuYXBpKVxuICAgICAgICAgICAgdGhpcy5kZWZpbmVSRVNUQVBJICh0aGlzLmFwaSwgJ3JlcXVlc3QnKTtcbiAgICAgICAgaWYgKHRoaXMubWFya2V0cylcbiAgICAgICAgICAgIHRoaXMuc2V0TWFya2V0cyAodGhpcy5tYXJrZXRzKTtcbiAgICB9XG5cbiAgICB0aGlzLmRlZmluZVJFU1RBUEkgPSBmdW5jdGlvbiAoYXBpLCBtZXRob2ROYW1lLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgT2JqZWN0LmtleXMgKGFwaSkuZm9yRWFjaCAodHlwZSA9PiB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyAoYXBpW3R5cGVdKS5mb3JFYWNoIChodHRwTWV0aG9kID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgdXJscyA9IGFwaVt0eXBlXVtodHRwTWV0aG9kXVxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdXJscy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgdXJsID0gdXJsc1tpXS50cmltICgpXG4gICAgICAgICAgICAgICAgICAgIGxldCBzcGxpdFBhdGggPSB1cmwuc3BsaXQgKC9bXmEtekEtWjAtOV0vKVxuXG4gICAgICAgICAgICAgICAgICAgIGxldCB1cHBlcmNhc2VNZXRob2QgID0gaHR0cE1ldGhvZC50b1VwcGVyQ2FzZSAoKVxuICAgICAgICAgICAgICAgICAgICBsZXQgbG93ZXJjYXNlTWV0aG9kICA9IGh0dHBNZXRob2QudG9Mb3dlckNhc2UgKClcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNhbWVsY2FzZU1ldGhvZCAgPSBjYXBpdGFsaXplIChsb3dlcmNhc2VNZXRob2QpXG4gICAgICAgICAgICAgICAgICAgIGxldCBjYW1lbGNhc2VTdWZmaXggID0gc3BsaXRQYXRoLm1hcCAoY2FwaXRhbGl6ZSkuam9pbiAoJycpXG4gICAgICAgICAgICAgICAgICAgIGxldCB1bmRlcnNjb3JlU3VmZml4ID0gc3BsaXRQYXRoLm1hcCAoeCA9PiB4LnRyaW0gKCkudG9Mb3dlckNhc2UgKCkpLmZpbHRlciAoeCA9PiB4Lmxlbmd0aCA+IDApLmpvaW4gKCdfJylcblxuICAgICAgICAgICAgICAgICAgICBpZiAoY2FtZWxjYXNlU3VmZml4LmluZGV4T2YgKGNhbWVsY2FzZU1ldGhvZCkgPT09IDApXG4gICAgICAgICAgICAgICAgICAgICAgICBjYW1lbGNhc2VTdWZmaXggPSBjYW1lbGNhc2VTdWZmaXguc2xpY2UgKGNhbWVsY2FzZU1ldGhvZC5sZW5ndGgpXG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHVuZGVyc2NvcmVTdWZmaXguaW5kZXhPZiAobG93ZXJjYXNlTWV0aG9kKSA9PT0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVyc2NvcmVTdWZmaXggPSB1bmRlcnNjb3JlU3VmZml4LnNsaWNlIChsb3dlcmNhc2VNZXRob2QubGVuZ3RoKVxuXG4gICAgICAgICAgICAgICAgICAgIGxldCBjYW1lbGNhc2UgID0gdHlwZSArIGNhbWVsY2FzZU1ldGhvZCArIGNhcGl0YWxpemUgKGNhbWVsY2FzZVN1ZmZpeClcbiAgICAgICAgICAgICAgICAgICAgbGV0IHVuZGVyc2NvcmUgPSB0eXBlICsgJ18nICsgbG93ZXJjYXNlTWV0aG9kICsgJ18nICsgdW5kZXJzY29yZVN1ZmZpeFxuXG4gICAgICAgICAgICAgICAgICAgIGlmICgnc3VmZml4ZXMnIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgnY2FtZWxjYXNlJyBpbiBvcHRpb25zWydzdWZmaXhlcyddKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbWVsY2FzZSArPSBvcHRpb25zWydzdWZmaXhlcyddWydjYW1lbGNhc2UnXVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCd1bmRlcnNjb3JlJyBpbiBvcHRpb25zLnN1ZmZpeGVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVyc2NvcmUgKz0gb3B0aW9uc1snc3VmZml4ZXMnXVsndW5kZXJzY29yZSddXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoJ3VuZGVyc2NvcmVfc3VmZml4JyBpbiBvcHRpb25zKVxuICAgICAgICAgICAgICAgICAgICAgICAgdW5kZXJzY29yZSArPSBvcHRpb25zLnVuZGVyc2NvcmVTdWZmaXg7XG4gICAgICAgICAgICAgICAgICAgIGlmICgnY2FtZWxjYXNlX3N1ZmZpeCcgaW4gb3B0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbWVsY2FzZSArPSBvcHRpb25zLmNhbWVsY2FzZVN1ZmZpeDtcblxuICAgICAgICAgICAgICAgICAgICBsZXQgcGFydGlhbCA9IHBhcmFtcyA9PiB0aGlzW21ldGhvZE5hbWVdICh1cmwsIHR5cGUsIHVwcGVyY2FzZU1ldGhvZCwgcGFyYW1zKVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXNbY2FtZWxjYXNlXSAgPSBwYXJ0aWFsXG4gICAgICAgICAgICAgICAgICAgIHRoaXNbdW5kZXJzY29yZV0gPSBwYXJ0aWFsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICB9LFxuXG4gICAgLy8gdGhpcy5pbml0aWFsaXplU3RyZWFtaW5nQVBJID0gZnVuY3Rpb24gKCkge1xuICAgIC8vICAgICB0aGlzLndzID0gbmV3IFdlYlNvY2tldCAodGhpcy51cmxzWyd3ZWJzb2NrZXQnXSlcbiAgICAvLyAgICAgd3Mub24gKCdvcGVuJywgZnVuY3Rpb24gb3BlbiAoKSB7XG4gICAgLy8gICAgICAgICBjb25zb2xlLmxvZyAoJ2Nvbm5lY3RlZCcpXG4gICAgLy8gICAgICAgICAvLyB3cy5zZW5kIChEYXRlLm5vdyAoKSlcbiAgICAvLyAgICAgfSlcbiAgICAvLyAgICAgd3Mub24gKCdjbG9zZScsIGZ1bmN0aW9uIGNsb3NlICgpIHtcbiAgICAvLyAgICAgICAgIGNvbnNvbGUubG9nICgnZGlzY29ubmVjdGVkJylcbiAgICAvLyAgICAgfSlcbiAgICAvLyAgICAgd3Mub24gKCdtZXNzYWdlJywgZnVuY3Rpb24gaW5jb21pbmcgKGRhdGEpIHtcbiAgICAvLyAgICAgICAgIC8vIGNvbnNvbGUubG9nIChgUm91bmR0cmlwIHRpbWU6ICR7RGF0ZS5ub3coKSAtIGRhdGF9IG1zYCk7XG4gICAgLy8gICAgICAgICBzZXRUaW1lb3V0IChmdW5jdGlvbiB0aW1lb3V0ICgpIHtcbiAgICAvLyAgICAgICAgICAgICB3cy5zZW5kIChEYXRlLm5vdyAoKSlcbiAgICAvLyAgICAgICAgIH0sIDUwMClcbiAgICAvLyAgICAgfSlcbiAgICAvLyB9LFxuXG4gICAgdGhpcy5mZXRjaCA9IGZ1bmN0aW9uICh1cmwsIG1ldGhvZCA9ICdHRVQnLCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG5cbiAgICAgICAgaWYgKGlzTm9kZSAmJiB0aGlzLnVzZXJBZ2VudClcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy51c2VyQWdlbnQgPT0gJ3N0cmluZycpXG4gICAgICAgICAgICAgICAgaGVhZGVycyA9IGV4dGVuZCAoeyAnVXNlci1BZ2VudCc6IHRoaXMudXNlckFnZW50IH0sIGhlYWRlcnMpXG4gICAgICAgICAgICBlbHNlIGlmICgodHlwZW9mIHRoaXMudXNlckFnZW50ID09ICdvYmplY3QnKSAmJiAoJ1VzZXItQWdlbnQnIGluIHRoaXMudXNlckFnZW50KSlcbiAgICAgICAgICAgICAgICBoZWFkZXJzID0gZXh0ZW5kICh0aGlzLnVzZXJBZ2VudCwgaGVhZGVycylcblxuICAgICAgICBpZiAodGhpcy5wcm94eS5sZW5ndGgpXG4gICAgICAgICAgICBoZWFkZXJzID0gZXh0ZW5kICh7ICdPcmlnaW4nOiAnKicgfSwgaGVhZGVycylcblxuICAgICAgICBsZXQgb3B0aW9ucyA9IHsgJ21ldGhvZCc6IG1ldGhvZCwgJ2hlYWRlcnMnOiBoZWFkZXJzLCAnYm9keSc6IGJvZHkgfVxuXG4gICAgICAgIHVybCA9IHRoaXMucHJveHkgKyB1cmxcblxuICAgICAgICBpZiAodGhpcy52ZXJib3NlKVxuICAgICAgICAgICAgY29uc29sZS5sb2cgKHRoaXMuaWQsIG1ldGhvZCwgdXJsLCBcIlxcblJlcXVlc3Q6XFxuXCIsIG9wdGlvbnMpXG5cbiAgICAgICAgcmV0dXJuIHRpbWVvdXQgKHRoaXMudGltZW91dCwgZmV0Y2ggKHVybCwgb3B0aW9ucylcbiAgICAgICAgICAgIC5jYXRjaCAoZSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGlzTm9kZSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VOb3RBdmFpbGFibGUgKFsgdGhpcy5pZCwgbWV0aG9kLCB1cmwsIGUudHlwZSwgZS5tZXNzYWdlIF0uam9pbiAoJyAnKSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgZSAvLyByZXRocm93IGFsbCB1bmtub3duIGVycm9yc1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuIChyZXNwb25zZSA9PiB7XG5cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJlc3BvbnNlID09ICdzdHJpbmcnKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2VcblxuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZS50ZXh0ICgpLnRoZW4gKHRleHQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy52ZXJib3NlKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cgKHRoaXMuaWQsIG1ldGhvZCwgdXJsLCB0ZXh0ID8gKFwiXFxuUmVzcG9uc2U6XFxuXCIgKyB0ZXh0KSA6ICcnKVxuICAgICAgICAgICAgICAgICAgICBpZiAoKHJlc3BvbnNlLnN0YXR1cyA+PSAyMDApICYmIChyZXNwb25zZS5zdGF0dXMgPD0gMzAwKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0XG4gICAgICAgICAgICAgICAgICAgIGxldCBlcnJvciA9IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICBsZXQgZGV0YWlscyA9IHRleHRcbiAgICAgICAgICAgICAgICAgICAgaWYgKFsgNDI5IF0uaW5kZXhPZiAocmVzcG9uc2Uuc3RhdHVzKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IEREb1NQcm90ZWN0aW9uXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoWyA0MDQsIDQwOSwgNTAwLCA1MDEsIDUwMiwgNTIxLCA1MjIsIDUyNSBdLmluZGV4T2YgKHJlc3BvbnNlLnN0YXR1cykgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBFeGNoYW5nZU5vdEF2YWlsYWJsZVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFsgNDAwLCA0MDMsIDQwNSwgNTAzIF0uaW5kZXhPZiAocmVzcG9uc2Uuc3RhdHVzKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGRvc1Byb3RlY3Rpb24gPSB0ZXh0Lm1hdGNoICgvY2xvdWRmbGFyZXxpbmNhcHN1bGEvaSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZG9zUHJvdGVjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gRERvU1Byb3RlY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBFeGNoYW5nZU5vdEF2YWlsYWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbHMgPSB0ZXh0ICsgJyAocG9zc2libGUgcmVhc29uczogJyArIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ludmFsaWQgQVBJIGtleXMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFkIG9yIG9sZCBub25jZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleGNoYW5nZSBpcyBkb3duIG9yIG9mZmxpbmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb24gbWFpbnRlbmFuY2UnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRERvUyBwcm90ZWN0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JhdGUtbGltaXRpbmcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0uam9pbiAoJywgJykgKyAnKSdcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChbIDQwOCwgNTA0IF0uaW5kZXhPZiAocmVzcG9uc2Uuc3RhdHVzKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IFJlcXVlc3RUaW1lb3V0XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoWyA0MDEsIDQyMiwgNTExIF0uaW5kZXhPZiAocmVzcG9uc2Uuc3RhdHVzKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IEF1dGhlbnRpY2F0aW9uRXJyb3JcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gRXJyb3JcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3IgKFsgdGhpcy5pZCwgbWV0aG9kLCB1cmwsIHJlc3BvbnNlLnN0YXR1cywgcmVzcG9uc2Uuc3RhdHVzVGV4dCwgZGV0YWlscyBdLmpvaW4gKCcgJykpXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pLnRoZW4gKHJlc3BvbnNlID0+IHRoaXMuaGFuZGxlUmVzcG9uc2UgKHVybCwgbWV0aG9kLCBoZWFkZXJzLCByZXNwb25zZSkpKVxuICAgIH1cblxuICAgIHRoaXMuaGFuZGxlUmVzcG9uc2UgPSBmdW5jdGlvbiAodXJsLCBtZXRob2QgPSAnR0VUJywgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuXG4gICAgICAgIHRyeSB7XG5cbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlIChib2R5KVxuXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcblxuICAgICAgICAgICAgbGV0IG1haW50ZW5hbmNlID0gYm9keS5tYXRjaCAoL29mZmxpbmV8YnVzeXxyZXRyeXx3YWl0fHVuYXZhaWxhYmxlfG1haW50YWlufG1haW50ZW5hbmNlfG1haW50ZW5hbmNpbmcvaSlcbiAgICAgICAgICAgIGxldCBkZG9zUHJvdGVjdGlvbiA9IGJvZHkubWF0Y2ggKC9jbG91ZGZsYXJlfGluY2Fwc3VsYXxvdmVybG9hZC9pKVxuXG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgZXJyb3IgPSBFeGNoYW5nZU5vdEF2YWlsYWJsZVxuICAgICAgICAgICAgICAgIGxldCBkZXRhaWxzID0gJ25vdCBhY2Nlc3NpYmxlIGZyb20gdGhpcyBsb2NhdGlvbiBhdCB0aGUgbW9tZW50J1xuICAgICAgICAgICAgICAgIGlmIChtYWludGVuYW5jZSlcbiAgICAgICAgICAgICAgICAgICAgZGV0YWlscyA9ICdvZmZsaW5lLCBvbiBtYWludGVuYW5jZSBvciB1bnJlYWNoYWJsZSBmcm9tIHRoaXMgbG9jYXRpb24gYXQgdGhlIG1vbWVudCdcbiAgICAgICAgICAgICAgICBpZiAoZGRvc1Byb3RlY3Rpb24pXG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0gRERvU1Byb3RlY3Rpb25cbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3IgKFsgdGhpcy5pZCwgbWV0aG9kLCB1cmwsIGRldGFpbHMgXS5qb2luICgnICcpKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy52ZXJib3NlKVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nICh0aGlzLmlkLCBtZXRob2QsIHVybCwgJ2Vycm9yJywgZSwgXCJyZXNwb25zZSBib2R5OlxcbidcIiArIGJvZHkgKyBcIidcIilcblxuICAgICAgICAgICAgdGhyb3cgZVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zZXRfbWFya2V0cyA9XG4gICAgdGhpcy5zZXRNYXJrZXRzID0gZnVuY3Rpb24gKG1hcmtldHMpIHtcbiAgICAgICAgbGV0IHZhbHVlcyA9IE9iamVjdC52YWx1ZXMgKG1hcmtldHMpXG4gICAgICAgIHRoaXMubWFya2V0cyA9IGluZGV4QnkgKHZhbHVlcywgJ3N5bWJvbCcpXG4gICAgICAgIHRoaXMubWFya2V0c0J5SWQgPSBpbmRleEJ5IChtYXJrZXRzLCAnaWQnKVxuICAgICAgICB0aGlzLm1hcmtldHNfYnlfaWQgPSB0aGlzLm1hcmtldHNCeUlkXG4gICAgICAgIHRoaXMuc3ltYm9scyA9IE9iamVjdC5rZXlzICh0aGlzLm1hcmtldHMpXG4gICAgICAgIGxldCBiYXNlID0gdGhpcy5wbHVjayAodmFsdWVzLmZpbHRlciAobWFya2V0ID0+ICdiYXNlJyBpbiBtYXJrZXQpLCAnYmFzZScpXG4gICAgICAgIGxldCBxdW90ZSA9IHRoaXMucGx1Y2sgKHZhbHVlcy5maWx0ZXIgKG1hcmtldCA9PiAncXVvdGUnIGluIG1hcmtldCksICdxdW90ZScpXG4gICAgICAgIHRoaXMuY3VycmVuY2llcyA9IHRoaXMudW5pcXVlIChiYXNlLmNvbmNhdCAocXVvdGUpKVxuICAgICAgICByZXR1cm4gdGhpcy5tYXJrZXRzXG4gICAgfVxuXG4gICAgdGhpcy5sb2FkX21hcmtldHMgPVxuICAgIHRoaXMubG9hZE1hcmtldHMgPSBmdW5jdGlvbiAocmVsb2FkID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKCFyZWxvYWQgJiYgdGhpcy5tYXJrZXRzKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMubWFya2V0c0J5SWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UgKChyZXNvbHZlLCByZWplY3QpID0+IHJlc29sdmUgKHRoaXMuc2V0TWFya2V0cyAodGhpcy5tYXJrZXRzKSkpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UgKChyZXNvbHZlLCByZWplY3QpID0+IHJlc29sdmUgKHRoaXMubWFya2V0cykpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZmV0Y2hNYXJrZXRzICgpLnRoZW4gKG1hcmtldHMgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0TWFya2V0cyAobWFya2V0cylcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICB0aGlzLmZldGNoX3RpY2tlcnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZldGNoVGlja2VycyAoKVxuICAgIH1cblxuICAgIHRoaXMuZmV0Y2hUaWNrZXJzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkICh0aGlzLmlkICsgJyBBUEkgZG9lcyBub3QgYWxsb3cgdG8gZmV0Y2ggYWxsIHRpY2tlcnMgYXQgb25jZSB3aXRoIGEgc2luZ2xlIGNhbGwgdG8gZmV0Y2hfdGlja2VycyAoKSBmb3Igbm93JylcbiAgICB9XG5cbiAgICB0aGlzLmZldGNoX21hcmtldHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZldGNoTWFya2V0cyAoKVxuICAgIH1cblxuICAgIHRoaXMuZmV0Y2hNYXJrZXRzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UgKChyZXNvbHZlLCByZWplY3QpID0+IHJlc29sdmUgKHRoaXMubWFya2V0cykpXG4gICAgfVxuXG4gICAgdGhpcy5jb21tb25DdXJyZW5jeUNvZGUgPSBmdW5jdGlvbiAoY3VycmVuY3kpIHtcbiAgICAgICAgaWYgKCF0aGlzLnN1YnN0aXR1dGVDb21tb25DdXJyZW5jeUNvZGVzKVxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbmN5XG4gICAgICAgIGlmIChjdXJyZW5jeSA9PSAnWEJUJylcbiAgICAgICAgICAgIHJldHVybiAnQlRDJ1xuICAgICAgICBpZiAoY3VycmVuY3kgPT0gJ0JDQycpXG4gICAgICAgICAgICByZXR1cm4gJ0JDSCdcbiAgICAgICAgaWYgKGN1cnJlbmN5ID09ICdEUksnKVxuICAgICAgICAgICAgcmV0dXJuICdEQVNIJ1xuICAgICAgICByZXR1cm4gY3VycmVuY3lcbiAgICB9XG5cbiAgICB0aGlzLm1hcmtldCA9IGZ1bmN0aW9uIChtYXJrZXQpIHtcbiAgICAgICAgcmV0dXJuICgoKHR5cGVvZiBtYXJrZXQgPT09ICdzdHJpbmcnKSAmJlxuICAgICAgICAgICAgKHR5cGVvZiB0aGlzLm1hcmtldHMgIT0gJ3VuZGVmaW5lZCcpICYmXG4gICAgICAgICAgICAodHlwZW9mIHRoaXMubWFya2V0c1ttYXJrZXRdICE9ICd1bmRlZmluZWQnKSkgP1xuICAgICAgICAgICAgICAgIHRoaXMubWFya2V0c1ttYXJrZXRdIDpcbiAgICAgICAgICAgICAgICBtYXJrZXQpXG4gICAgfVxuXG4gICAgdGhpcy5tYXJrZXRfaWQgPVxuICAgIHRoaXMubWFya2V0SWQgPSBmdW5jdGlvbiAobWFya2V0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcmtldCAobWFya2V0KS5pZCB8fCBtYXJrZXRcbiAgICB9XG5cbiAgICB0aGlzLnN5bWJvbCA9IGZ1bmN0aW9uIChtYXJrZXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFya2V0IChtYXJrZXQpLnN5bWJvbCB8fCBtYXJrZXRcbiAgICB9XG5cbiAgICB0aGlzLmV4dHJhY3RfcGFyYW1zID1cbiAgICB0aGlzLmV4dHJhY3RQYXJhbXMgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgIHZhciByZSA9IC97KFthLXpBLVowLTlfXSs/KX0vZ1xuICAgICAgICB2YXIgbWF0Y2hlcyA9IFtdXG4gICAgICAgIGxldCBtYXRjaFxuICAgICAgICB3aGlsZSAobWF0Y2ggPSByZS5leGVjIChzdHJpbmcpKVxuICAgICAgICAgICAgbWF0Y2hlcy5wdXNoIChtYXRjaFsxXSlcbiAgICAgICAgcmV0dXJuIG1hdGNoZXNcbiAgICB9XG5cbiAgICB0aGlzLmltcGxvZGVfcGFyYW1zID1cbiAgICB0aGlzLmltcGxvZGVQYXJhbXMgPSBmdW5jdGlvbiAoc3RyaW5nLCBwYXJhbXMpIHtcbiAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gcGFyYW1zKVxuICAgICAgICAgICAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UgKCd7JyArIHByb3BlcnR5ICsgJ30nLCBwYXJhbXNbcHJvcGVydHldKVxuICAgICAgICByZXR1cm4gc3RyaW5nXG4gICAgfVxuXG4gICAgdGhpcy51cmwgPSBmdW5jdGlvbiAocGF0aCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHRoaXMuaW1wbG9kZVBhcmFtcyAocGF0aCwgcGFyYW1zKTtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5vbWl0IChwYXJhbXMsIHRoaXMuZXh0cmFjdFBhcmFtcyAocGF0aCkpXG4gICAgICAgIGlmIChPYmplY3Qua2V5cyAocXVlcnkpLmxlbmd0aClcbiAgICAgICAgICAgIHJlc3VsdCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocXVlcnkpXG4gICAgICAgIHJldHVybiByZXN1bHRcbiAgICB9XG5cbiAgICB0aGlzLnBhcnNlX3RyYWRlcyA9XG4gICAgdGhpcy5wYXJzZVRyYWRlcyA9IGZ1bmN0aW9uICh0cmFkZXMsIG1hcmtldCA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gW11cbiAgICAgICAgZm9yIChsZXQgdCA9IDA7IHQgPCB0cmFkZXMubGVuZ3RoOyB0KyspIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoICh0aGlzLnBhcnNlVHJhZGUgKHRyYWRlc1t0XSwgbWFya2V0KSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgfVxuXG4gICAgdGhpcy5wYXJzZV9vcmRlcnMgPVxuICAgIHRoaXMucGFyc2VPcmRlcnMgPSBmdW5jdGlvbiAob3JkZXIsIG1hcmtldCA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gW11cbiAgICAgICAgZm9yIChsZXQgdCA9IDA7IHQgPCBvcmRlci5sZW5ndGg7IHQrKykge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2ggKHRoaXMucGFyc2VPcmRlciAob3JkZXJbdF0sIG1hcmtldCkpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH1cblxuICAgIHRoaXMucGFyc2Vfb2hsY3YgPVxuICAgIHRoaXMucGFyc2VPSExDViA9IGZ1bmN0aW9uIChvaGxjdiwgbWFya2V0ID0gdW5kZWZpbmVkLCB0aW1lZnJhbWUgPSA2MCwgc2luY2UgPSB1bmRlZmluZWQsIGxpbWl0ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBvaGxjdlxuICAgIH1cblxuICAgIHRoaXMucGFyc2Vfb2hsY3ZzID1cbiAgICB0aGlzLnBhcnNlT0hMQ1ZzID0gZnVuY3Rpb24gKG9obGN2cywgbWFya2V0ID0gdW5kZWZpbmVkLCB0aW1lZnJhbWUgPSA2MCwgc2luY2UgPSB1bmRlZmluZWQsIGxpbWl0ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSBbXVxuICAgICAgICBmb3IgKGxldCB0ID0gMDsgdCA8IG9obGN2cy5sZW5ndGg7IHQrKykge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2ggKHRoaXMucGFyc2VPSExDViAob2hsY3ZzW3RdLCBtYXJrZXQsIHRpbWVmcmFtZSwgc2luY2UsIGxpbWl0KSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgfVxuXG4gICAgdGhpcy5jcmVhdGVfbGltaXRfYnV5X29yZGVyID1cbiAgICB0aGlzLmNyZWF0ZUxpbWl0QnV5T3JkZXIgPSBmdW5jdGlvbiAobWFya2V0LCBhbW91bnQsIHByaWNlLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVPcmRlciAgKG1hcmtldCwgJ2xpbWl0JywgJ2J1eScsIGFtb3VudCwgcHJpY2UsIHBhcmFtcylcbiAgICB9XG5cbiAgICB0aGlzLmNyZWF0ZV9saW1pdF9zZWxsX29yZGVyID1cbiAgICB0aGlzLmNyZWF0ZUxpbWl0U2VsbE9yZGVyID0gZnVuY3Rpb24gKG1hcmtldCwgYW1vdW50LCBwcmljZSwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlT3JkZXIgKG1hcmtldCwgJ2xpbWl0JywgJ3NlbGwnLCBhbW91bnQsIHByaWNlLCBwYXJhbXMpXG4gICAgfVxuXG4gICAgdGhpcy5jcmVhdGVfbWFya2V0X2J1eV9vcmRlciA9XG4gICAgdGhpcy5jcmVhdGVNYXJrZXRCdXlPcmRlciA9IGZ1bmN0aW9uIChtYXJrZXQsIGFtb3VudCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlT3JkZXIgKG1hcmtldCwgJ21hcmtldCcsICdidXknLCBhbW91bnQsIHVuZGVmaW5lZCwgcGFyYW1zKVxuICAgIH1cblxuICAgIHRoaXMuY3JlYXRlX21hcmtldF9zZWxsX29yZGVyID1cbiAgICB0aGlzLmNyZWF0ZU1hcmtldFNlbGxPcmRlciA9IGZ1bmN0aW9uIChtYXJrZXQsIGFtb3VudCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlT3JkZXIgKG1hcmtldCwgJ21hcmtldCcsICdzZWxsJywgYW1vdW50LCB1bmRlZmluZWQsIHBhcmFtcylcbiAgICB9XG5cbiAgICB0aGlzLmlzbzg2MDEgICAgICAgID0gdGltZXN0YW1wID0+IG5ldyBEYXRlICh0aW1lc3RhbXApLnRvSVNPU3RyaW5nICgpXG4gICAgdGhpcy5wYXJzZTg2MDEgICAgICA9IERhdGUucGFyc2VcbiAgICB0aGlzLnNlY29uZHMgICAgICAgID0gKCkgPT4gTWF0aC5mbG9vciAodGhpcy5taWxsaXNlY29uZHMgKCkgLyAxMDAwKVxuICAgIHRoaXMubWljcm9zZWNvbmRzICAgPSAoKSA9PiBNYXRoLmZsb29yICh0aGlzLm1pbGxpc2Vjb25kcyAoKSAqIDEwMDApXG4gICAgdGhpcy5taWxsaXNlY29uZHMgICA9IERhdGUubm93XG4gICAgdGhpcy5ub25jZSAgICAgICAgICA9IHRoaXMuc2Vjb25kc1xuICAgIHRoaXMuaWQgICAgICAgICAgICAgPSB1bmRlZmluZWRcbiAgICB0aGlzLnJhdGVMaW1pdCAgICAgID0gMjAwMCAgLy8gbWlsbGlzZWNvbmRzID0gc2Vjb25kcyAqIDEwMDBcbiAgICB0aGlzLnRpbWVvdXQgICAgICAgID0gMTAwMDAgLy8gbWlsbGlzZWNvbmRzID0gc2Vjb25kcyAqIDEwMDBcbiAgICB0aGlzLnZlcmJvc2UgICAgICAgID0gZmFsc2VcbiAgICB0aGlzLnVzZXJBZ2VudCAgICAgID0gZmFsc2VcbiAgICB0aGlzLnR3b2ZhICAgICAgICAgID0gZmFsc2UgLy8gdHdvLWZhY3RvciBhdXRoZW50aWNhdGlvblxuICAgIHRoaXMuc3Vic3RpdHV0ZUNvbW1vbkN1cnJlbmN5Q29kZXMgPSB0cnVlXG4gICAgdGhpcy55eXl5bW1kZGhobW1zcyA9IHRpbWVzdGFtcCA9PiB7XG4gICAgICAgIGxldCBkYXRlID0gbmV3IERhdGUgKHRpbWVzdGFtcClcbiAgICAgICAgbGV0IHl5eXkgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyICgpXG4gICAgICAgIGxldCBNTSA9IGRhdGUuZ2V0VVRDTW9udGggKClcbiAgICAgICAgbGV0IGRkID0gZGF0ZS5nZXRVVENEYXkgKClcbiAgICAgICAgbGV0IGhoID0gZGF0ZS5nZXRVVENIb3VycyAoKVxuICAgICAgICBsZXQgbW0gPSBkYXRlLmdldFVUQ01pbnV0ZXMgKClcbiAgICAgICAgbGV0IHNzID0gZGF0ZS5nZXRVVENTZWNvbmRzICgpXG4gICAgICAgIE1NID0gTU0gPCAxMCA/ICgnMCcgKyBNTSkgOiBNTVxuICAgICAgICBkZCA9IGRkIDwgMTAgPyAoJzAnICsgZGQpIDogZGRcbiAgICAgICAgaGggPSBoaCA8IDEwID8gKCcwJyArIGhoKSA6IGhoXG4gICAgICAgIG1tID0gbW0gPCAxMCA/ICgnMCcgKyBtbSkgOiBtbVxuICAgICAgICBzcyA9IHNzIDwgMTAgPyAoJzAnICsgc3MpIDogc3NcbiAgICAgICAgcmV0dXJuIHl5eXkgKyAnLScgKyBNTSArICctJyArIGRkICsgJyAnICsgaGggKyAnOicgKyBtbSArICc6JyArIHNzXG4gICAgfVxuXG4gICAgaWYgKGlzTm9kZSlcbiAgICAgICAgdGhpcy51c2VyQWdlbnQgPSB7XG4gICAgICAgICAgICAnVXNlci1BZ2VudCc6ICdjY3h0LycgKyB2ZXJzaW9uICtcbiAgICAgICAgICAgICAgICAnICgraHR0cHM6Ly9naXRodWIuY29tL2tyb2l0b3IvY2N4dCknICtcbiAgICAgICAgICAgICAgICAnIE5vZGUuanMvJyArIHRoaXMubm9kZVZlcnNpb24gKyAnIChKYXZhU2NyaXB0KSdcbiAgICAgICAgfVxuXG4gICAgLy8gcHJlcGVuZGVkIHRvIFVSTCwgbGlrZSBodHRwczovL3Byb3h5LmNvbS9odHRwczovL2V4Y2hhbmdlLmNvbS9hcGkuLi5cbiAgICB0aGlzLnByb3h5ID0gJydcblxuICAgIHRoaXMuaGFzRmV0Y2hUaWNrZXJzID0gZmFsc2VcblxuICAgIGZvciAodmFyIHByb3BlcnR5IGluIGNvbmZpZylcbiAgICAgICAgdGhpc1twcm9wZXJ0eV0gPSBjb25maWdbcHJvcGVydHldXG5cbiAgICB0aGlzLmZldGNoX2JhbGFuY2UgICAgPSB0aGlzLmZldGNoQmFsYW5jZVxuICAgIHRoaXMuZmV0Y2hfb3JkZXJfYm9vayA9IHRoaXMuZmV0Y2hPcmRlckJvb2tcbiAgICB0aGlzLmZldGNoX3RpY2tlciAgICAgPSB0aGlzLmZldGNoVGlja2VyXG4gICAgdGhpcy5mZXRjaF90cmFkZXMgICAgID0gdGhpcy5mZXRjaFRyYWRlc1xuXG4gICAgdGhpcy5pbml0ICgpXG59XG5cbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxudmFyIF8xYnJva2VyID0ge1xuXG4gICAgJ2lkJzogJ18xYnJva2VyJyxcbiAgICAnbmFtZSc6ICcxQnJva2VyJyxcbiAgICAnY291bnRyaWVzJzogJ1VTJyxcbiAgICAncmF0ZUxpbWl0JzogMTUwMCxcbiAgICAndmVyc2lvbic6ICd2MicsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc3NjYwMjEtNDIwYmQ5ZmMtNWVjYi0xMWU3LThlZDYtNTZkMDA4MWVmZWQyLmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly8xYnJva2VyLmNvbS9hcGknLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vMWJyb2tlci5jb20nLFxuICAgICAgICAnZG9jJzogJ2h0dHBzOi8vMWJyb2tlci5jb20vP2M9ZW4vY29udGVudC9hcGktZG9jdW1lbnRhdGlvbicsXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHJpdmF0ZSc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ21hcmtldC9iYXJzJyxcbiAgICAgICAgICAgICAgICAnbWFya2V0L2NhdGVnb3JpZXMnLFxuICAgICAgICAgICAgICAgICdtYXJrZXQvZGV0YWlscycsXG4gICAgICAgICAgICAgICAgJ21hcmtldC9saXN0JyxcbiAgICAgICAgICAgICAgICAnbWFya2V0L3F1b3RlcycsXG4gICAgICAgICAgICAgICAgJ21hcmtldC90aWNrcycsXG4gICAgICAgICAgICAgICAgJ29yZGVyL2NhbmNlbCcsXG4gICAgICAgICAgICAgICAgJ29yZGVyL2NyZWF0ZScsXG4gICAgICAgICAgICAgICAgJ29yZGVyL29wZW4nLFxuICAgICAgICAgICAgICAgICdwb3NpdGlvbi9jbG9zZScsXG4gICAgICAgICAgICAgICAgJ3Bvc2l0aW9uL2Nsb3NlX2NhbmNlbCcsXG4gICAgICAgICAgICAgICAgJ3Bvc2l0aW9uL2VkaXQnLFxuICAgICAgICAgICAgICAgICdwb3NpdGlvbi9oaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAncG9zaXRpb24vb3BlbicsXG4gICAgICAgICAgICAgICAgJ3Bvc2l0aW9uL3NoYXJlZC9nZXQnLFxuICAgICAgICAgICAgICAgICdzb2NpYWwvcHJvZmlsZV9zdGF0aXN0aWNzJyxcbiAgICAgICAgICAgICAgICAnc29jaWFsL3Byb2ZpbGVfdHJhZGVzJyxcbiAgICAgICAgICAgICAgICAndXNlci9iaXRjb2luX2RlcG9zaXRfYWRkcmVzcycsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZGV0YWlscycsXG4gICAgICAgICAgICAgICAgJ3VzZXIvb3ZlcnZpZXcnLFxuICAgICAgICAgICAgICAgICd1c2VyL3F1b3RhX3N0YXR1cycsXG4gICAgICAgICAgICAgICAgJ3VzZXIvdHJhbnNhY3Rpb25fbG9nJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQ2F0ZWdvcmllcyAoKSB7XG4gICAgICAgIGxldCBjYXRlZ29yaWVzID0gYXdhaXQgdGhpcy5wcml2YXRlR2V0TWFya2V0Q2F0ZWdvcmllcyAoKTtcbiAgICAgICAgcmV0dXJuIGNhdGVnb3JpZXNbJ3Jlc3BvbnNlJ107XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoTWFya2V0cyAoKSB7XG4gICAgICAgIGxldCB0aGlzXyA9IHRoaXM7IC8vIHdvcmthcm91bmQgZm9yIEJhYmVsIGJ1ZyAobm90IHBhc3NpbmcgYHRoaXNgIHRvIF9yZWN1cnNpdmUoKSBjYWxsKVxuICAgICAgICBsZXQgY2F0ZWdvcmllcyA9IGF3YWl0IHRoaXMuZmV0Y2hDYXRlZ29yaWVzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgY2F0ZWdvcmllcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgbGV0IGNhdGVnb3J5ID0gY2F0ZWdvcmllc1tjXTtcbiAgICAgICAgICAgIGxldCBtYXJrZXRzID0gYXdhaXQgdGhpc18ucHJpdmF0ZUdldE1hcmtldExpc3QgKHtcbiAgICAgICAgICAgICAgICAnY2F0ZWdvcnknOiBjYXRlZ29yeS50b0xvd2VyQ2FzZSAoKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZm9yIChsZXQgcCA9IDA7IHAgPCBtYXJrZXRzWydyZXNwb25zZSddLmxlbmd0aDsgcCsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IG1hcmtldCA9IG1hcmtldHNbJ3Jlc3BvbnNlJ11bcF07XG4gICAgICAgICAgICAgICAgbGV0IGlkID0gbWFya2V0WydzeW1ib2wnXTtcbiAgICAgICAgICAgICAgICBsZXQgc3ltYm9sID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGxldCBiYXNlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGxldCBxdW90ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBpZiAoKGNhdGVnb3J5ID09ICdGT1JFWCcpIHx8IChjYXRlZ29yeSA9PSAnQ1JZUFRPJykpIHtcbiAgICAgICAgICAgICAgICAgICAgc3ltYm9sID0gbWFya2V0WyduYW1lJ107XG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXJ0cyA9IHN5bWJvbC5zcGxpdCAoJy8nKTtcbiAgICAgICAgICAgICAgICAgICAgYmFzZSA9IHBhcnRzWzBdO1xuICAgICAgICAgICAgICAgICAgICBxdW90ZSA9IHBhcnRzWzFdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGJhc2UgPSBpZDtcbiAgICAgICAgICAgICAgICAgICAgcXVvdGUgPSAnVVNEJztcbiAgICAgICAgICAgICAgICAgICAgc3ltYm9sID0gYmFzZSArICcvJyArIHF1b3RlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBiYXNlID0gdGhpc18uY29tbW9uQ3VycmVuY3lDb2RlIChiYXNlKTtcbiAgICAgICAgICAgICAgICBxdW90ZSA9IHRoaXNfLmNvbW1vbkN1cnJlbmN5Q29kZSAocXVvdGUpO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoICh7XG4gICAgICAgICAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICAgICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgICAgICAgICAnYmFzZSc6IGJhc2UsXG4gICAgICAgICAgICAgICAgICAgICdxdW90ZSc6IHF1b3RlLFxuICAgICAgICAgICAgICAgICAgICAnaW5mbyc6IG1hcmtldCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgYmFsYW5jZSA9IGF3YWl0IHRoaXMucHJpdmF0ZUdldFVzZXJPdmVydmlldyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYmFsYW5jZVsncmVzcG9uc2UnXTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgIH07XG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgdGhpcy5jdXJyZW5jaWVzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSB0aGlzLmN1cnJlbmNpZXNbY107XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd1c2VkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0WydCVEMnXVsnZnJlZSddID0gcGFyc2VGbG9hdCAocmVzcG9uc2VbJ2JhbGFuY2UnXSk7XG4gICAgICAgIHJlc3VsdFsnQlRDJ11bJ3RvdGFsJ10gPSByZXN1bHRbJ0JUQyddWydmcmVlJ107XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZUdldE1hcmtldFF1b3RlcyAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdzeW1ib2xzJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSByZXNwb25zZVsncmVzcG9uc2UnXVswXTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMucGFyc2U4NjAxIChvcmRlcmJvb2tbJ3VwZGF0ZWQnXSk7XG4gICAgICAgIGxldCBiaWRQcmljZSA9IHBhcnNlRmxvYXQgKG9yZGVyYm9va1snYmlkJ10pO1xuICAgICAgICBsZXQgYXNrUHJpY2UgPSBwYXJzZUZsb2F0IChvcmRlcmJvb2tbJ2FzayddKTtcbiAgICAgICAgbGV0IGJpZCA9IFsgYmlkUHJpY2UsIHVuZGVmaW5lZCBdO1xuICAgICAgICBsZXQgYXNrID0gWyBhc2tQcmljZSwgdW5kZWZpbmVkIF07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2JpZHMnOiBbIGJpZCBdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbIGFzayBdLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0KSB7XG4gICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyBmZXRjaFRyYWRlcyAoKSBtZXRob2Qgbm90IGltcGxlbWVudGVkIHlldCcpO1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCB0aGlzLnByaXZhdGVHZXRNYXJrZXRCYXJzICh7XG4gICAgICAgICAgICAnc3ltYm9sJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICdyZXNvbHV0aW9uJzogNjAsXG4gICAgICAgICAgICAnbGltaXQnOiAxLFxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IGF3YWl0IHRoaXMuZmV0Y2hPcmRlckJvb2sgKG1hcmtldCk7XG4gICAgICAgIGxldCB0aWNrZXIgPSByZXN1bHRbJ3Jlc3BvbnNlJ11bMF07XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLnBhcnNlODYwMSAodGlja2VyWydkYXRlJ10pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydoJ10pLFxuICAgICAgICAgICAgJ2xvdyc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbCddKSxcbiAgICAgICAgICAgICdiaWQnOiBvcmRlcmJvb2tbJ2JpZHMnXVswXVswXSxcbiAgICAgICAgICAgICdhc2snOiBvcmRlcmJvb2tbJ2Fza3MnXVswXVswXSxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ28nXSksXG4gICAgICAgICAgICAnY2xvc2UnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2MnXSksXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdzeW1ib2wnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICAgICAgJ21hcmdpbic6IGFtb3VudCxcbiAgICAgICAgICAgICdkaXJlY3Rpb24nOiAoc2lkZSA9PSAnc2VsbCcpID8gJ3Nob3J0JyA6ICdsb25nJyxcbiAgICAgICAgICAgICdsZXZlcmFnZSc6IDEsXG4gICAgICAgICAgICAndHlwZSc6IHNpZGUsXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlID09ICdsaW1pdCcpXG4gICAgICAgICAgICBvcmRlclsncHJpY2UnXSA9IHByaWNlO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBvcmRlclsndHlwZSddICs9ICdfbWFya2V0JztcbiAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMucHJpdmF0ZUdldE9yZGVyQ3JlYXRlICh0aGlzLmV4dGVuZCAob3JkZXIsIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXN1bHQsXG4gICAgICAgICAgICAnaWQnOiByZXN1bHRbJ3Jlc3BvbnNlJ11bJ29yZGVyX2lkJ10sXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdE9yZGVyQ2FuY2VsICh7ICdvcmRlcl9pZCc6IGlkIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICghdGhpcy5hcGlLZXkpXG4gICAgICAgICAgICB0aHJvdyBuZXcgQXV0aGVudGljYXRpb25FcnJvciAodGhpcy5pZCArICcgcmVxdWlyZXMgYXBpS2V5IGZvciBhbGwgcmVxdWVzdHMnKTtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ10gKyAnLycgKyB0aGlzLnZlcnNpb24gKyAnLycgKyBwYXRoICsgJy5waHAnO1xuICAgICAgICBsZXQgcXVlcnkgPSB0aGlzLmV4dGVuZCAoeyAndG9rZW4nOiB0aGlzLmFwaUtleSB9LCBwYXJhbXMpO1xuICAgICAgICB1cmwgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHF1ZXJ5KTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCAodXJsLCBtZXRob2QpO1xuICAgICAgICBpZiAoJ3dhcm5pbmcnIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlWyd3YXJuaW5nJ10pXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnIFdhcm5pbmc6ICcgKyByZXNwb25zZVsnd2FybmluZ19tZXNzYWdlJ10pO1xuICAgICAgICBpZiAoJ2Vycm9yJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIGlmIChyZXNwb25zZVsnZXJyb3InXSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgRXJyb3I6ICcgKyByZXNwb25zZVsnZXJyb3JfY29kZSddICsgcmVzcG9uc2VbJ2Vycm9yX21lc3NhZ2UnXSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBjcnlwdG9jYXBpdGFsID0ge1xuXG4gICAgJ2lkJzogJ2NyeXB0b2NhcGl0YWwnLFxuICAgICduYW1lJzogJ0NyeXB0byBDYXBpdGFsJyxcbiAgICAnY29tbWVudCc6ICdDcnlwdG8gQ2FwaXRhbCBBUEknLFxuICAgICdjb3VudHJpZXMnOiAnUEEnLCAvLyBQYW5hbWFcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yNzk5MzE1OC03YTEzZjE0MC02NGFjLTExZTctODljYy1hM2I0NDFmMGIwZjguanBnJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL2NyeXB0b2NhcGl0YWwuY28nLFxuICAgICAgICAnZG9jJzogJ2h0dHBzOi8vZ2l0aHViLmNvbS9jcnlwdG9jYXAnLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ3N0YXRzJyxcbiAgICAgICAgICAgICAgICAnaGlzdG9yaWNhbC1wcmljZXMnLFxuICAgICAgICAgICAgICAgICdvcmRlci1ib29rJyxcbiAgICAgICAgICAgICAgICAndHJhbnNhY3Rpb25zJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2JhbGFuY2VzLWFuZC1pbmZvJyxcbiAgICAgICAgICAgICAgICAnb3Blbi1vcmRlcnMnLFxuICAgICAgICAgICAgICAgICd1c2VyLXRyYW5zYWN0aW9ucycsXG4gICAgICAgICAgICAgICAgJ2J0Yy1kZXBvc2l0LWFkZHJlc3MvZ2V0JyxcbiAgICAgICAgICAgICAgICAnYnRjLWRlcG9zaXQtYWRkcmVzcy9uZXcnLFxuICAgICAgICAgICAgICAgICdkZXBvc2l0cy9nZXQnLFxuICAgICAgICAgICAgICAgICd3aXRoZHJhd2Fscy9nZXQnLFxuICAgICAgICAgICAgICAgICdvcmRlcnMvbmV3JyxcbiAgICAgICAgICAgICAgICAnb3JkZXJzL2VkaXQnLFxuICAgICAgICAgICAgICAgICdvcmRlcnMvY2FuY2VsJyxcbiAgICAgICAgICAgICAgICAnb3JkZXJzL3N0YXR1cycsXG4gICAgICAgICAgICAgICAgJ3dpdGhkcmF3YWxzL25ldycsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0QmFsYW5jZXNBbmRJbmZvICgpO1xuICAgICAgICBsZXQgYmFsYW5jZSA9IHJlc3BvbnNlWydiYWxhbmNlcy1hbmQtaW5mbyddO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGJhbGFuY2UgfTtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCB0aGlzLmN1cnJlbmNpZXMubGVuZ3RoOyBjKyspIHtcbiAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IHRoaXMuY3VycmVuY2llc1tjXTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd1c2VkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoY3VycmVuY3kgaW4gYmFsYW5jZVsnYXZhaWxhYmxlJ10pXG4gICAgICAgICAgICAgICAgYWNjb3VudFsnZnJlZSddID0gcGFyc2VGbG9hdCAoYmFsYW5jZVsnYXZhaWxhYmxlJ11bY3VycmVuY3ldKTtcbiAgICAgICAgICAgIGlmIChjdXJyZW5jeSBpbiBiYWxhbmNlWydvbl9ob2xkJ10pXG4gICAgICAgICAgICAgICAgYWNjb3VudFsndXNlZCddID0gcGFyc2VGbG9hdCAoYmFsYW5jZVsnb25faG9sZCddW2N1cnJlbmN5XSk7XG4gICAgICAgICAgICBhY2NvdW50Wyd0b3RhbCddID0gdGhpcy5zdW0gKGFjY291bnRbJ2ZyZWUnXSwgYWNjb3VudFsndXNlZCddKTtcbiAgICAgICAgICAgIHJlc3VsdFtjdXJyZW5jeV0gPSBhY2NvdW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0T3JkZXJCb29rICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2N1cnJlbmN5JzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSByZXNwb25zZVsnb3JkZXItYm9vayddO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IFtdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaWRlcyA9IHsgJ2JpZHMnOiAnYmlkJywgJ2Fza3MnOiAnYXNrJyB9O1xuICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzIChzaWRlcyk7XG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwga2V5cy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgbGV0IGtleSA9IGtleXNba107XG4gICAgICAgICAgICBsZXQgc2lkZSA9IHNpZGVzW2tleV07XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHBhcnNlSW50IChvcmRlclsndGltZXN0YW1wJ10pICogMTAwMDtcbiAgICAgICAgICAgICAgICBsZXQgcHJpY2UgPSBwYXJzZUZsb2F0IChvcmRlclsncHJpY2UnXSk7XG4gICAgICAgICAgICAgICAgbGV0IGFtb3VudCA9IHBhcnNlRmxvYXQgKG9yZGVyWydvcmRlcl9hbW91bnQnXSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W2tleV0ucHVzaCAoWyBwcmljZSwgYW1vdW50LCB0aW1lc3RhbXAgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFN0YXRzICh7XG4gICAgICAgICAgICAnY3VycmVuY3knOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IHRpY2tlciA9IHJlc3BvbnNlWydzdGF0cyddO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ21heCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ21pbiddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2JpZCddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2FzayddKSxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ29wZW4nXSksXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdF9wcmljZSddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2RhaWx5X2NoYW5nZSddKSxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndG90YWxfYnRjX3RyYWRlZCddKSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0VHJhbnNhY3Rpb25zICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2N1cnJlbmN5JzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdzaWRlJzogc2lkZSxcbiAgICAgICAgICAgICd0eXBlJzogdHlwZSxcbiAgICAgICAgICAgICdjdXJyZW5jeSc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgICAgICAnYW1vdW50JzogYW1vdW50LFxuICAgICAgICB9O1xuICAgICAgICBpZiAodHlwZSA9PSAnbGltaXQnKVxuICAgICAgICAgICAgb3JkZXJbJ2xpbWl0X3ByaWNlJ10gPSBwcmljZTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RPcmRlcnNOZXcgKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3VsdCxcbiAgICAgICAgICAgICdpZCc6IHJlc3VsdCxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0T3JkZXJzQ2FuY2VsICh7ICdpZCc6IGlkIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0aGlzLmlkID09ICdjcnlwdG9jYXBpdGFsJylcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyBpcyBhbiBhYnN0cmFjdCBiYXNlIEFQSSBmb3IgXzFidGN4ZScpO1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArICcvJyArIHBhdGg7XG4gICAgICAgIGlmIChhcGkgPT0gJ3B1YmxpYycpIHtcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyAocGFyYW1zKS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChwYXJhbXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICAgICAnYXBpX2tleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgICAgICdub25jZSc6IHRoaXMubm9uY2UgKCksXG4gICAgICAgICAgICB9LCBwYXJhbXMpO1xuICAgICAgICAgICAgbGV0IHJlcXVlc3QgPSB0aGlzLmpzb24gKHF1ZXJ5KTtcbiAgICAgICAgICAgIHF1ZXJ5WydzaWduYXR1cmUnXSA9IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKHJlcXVlc3QpLCB0aGlzLmVuY29kZSAodGhpcy5zZWNyZXQpKTtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLmpzb24gKHF1ZXJ5KTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgICAgIGlmICgnZXJyb3JzJyBpbiByZXNwb25zZSkge1xuICAgICAgICAgICAgbGV0IGVycm9ycyA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgZSA9IDA7IGUgPCByZXNwb25zZVsnZXJyb3JzJ10ubGVuZ3RoOyBlKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgZXJyb3IgPSByZXNwb25zZVsnZXJyb3JzJ11bZV07XG4gICAgICAgICAgICAgICAgZXJyb3JzLnB1c2ggKGVycm9yWydjb2RlJ10gKyAnOiAnICsgZXJyb3JbJ21lc3NhZ2UnXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlcnJvcnMgPSBlcnJvcnMuam9pbiAoJyAnKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgZXJyb3JzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIF8xYnRjeGUgPSBleHRlbmQgKGNyeXB0b2NhcGl0YWwsIHtcblxuICAgICdpZCc6ICdfMWJ0Y3hlJyxcbiAgICAnbmFtZSc6ICcxQlRDWEUnLFxuICAgICdjb3VudHJpZXMnOiAnUEEnLCAvLyBQYW5hbWFcbiAgICAnY29tbWVudCc6ICdDcnlwdG8gQ2FwaXRhbCBBUEknLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2MDQ5LTJiMjk0NDA4LTVlY2MtMTFlNy04NWNjLWFkYWZmMDEzZGMxYS5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vMWJ0Y3hlLmNvbS9hcGknLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vMWJ0Y3hlLmNvbScsXG4gICAgICAgICdkb2MnOiAnaHR0cHM6Ly8xYnRjeGUuY29tL2FwaS1kb2NzLnBocCcsXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9VU0QnOiB7ICdpZCc6ICdVU0QnLCAnc3ltYm9sJzogJ0JUQy9VU0QnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnVVNEJyB9LFxuICAgICAgICAnQlRDL0VVUic6IHsgJ2lkJzogJ0VVUicsICdzeW1ib2wnOiAnQlRDL0VVUicsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdFVVInIH0sXG4gICAgICAgICdCVEMvQ05ZJzogeyAnaWQnOiAnQ05ZJywgJ3N5bWJvbCc6ICdCVEMvQ05ZJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ0NOWScgfSxcbiAgICAgICAgJ0JUQy9SVUInOiB7ICdpZCc6ICdSVUInLCAnc3ltYm9sJzogJ0JUQy9SVUInLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnUlVCJyB9LFxuICAgICAgICAnQlRDL0NIRic6IHsgJ2lkJzogJ0NIRicsICdzeW1ib2wnOiAnQlRDL0NIRicsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdDSEYnIH0sXG4gICAgICAgICdCVEMvSlBZJzogeyAnaWQnOiAnSlBZJywgJ3N5bWJvbCc6ICdCVEMvSlBZJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ0pQWScgfSxcbiAgICAgICAgJ0JUQy9HQlAnOiB7ICdpZCc6ICdHQlAnLCAnc3ltYm9sJzogJ0JUQy9HQlAnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnR0JQJyB9LFxuICAgICAgICAnQlRDL0NBRCc6IHsgJ2lkJzogJ0NBRCcsICdzeW1ib2wnOiAnQlRDL0NBRCcsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdDQUQnIH0sXG4gICAgICAgICdCVEMvQVVEJzogeyAnaWQnOiAnQVVEJywgJ3N5bWJvbCc6ICdCVEMvQVVEJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ0FVRCcgfSxcbiAgICAgICAgJ0JUQy9BRUQnOiB7ICdpZCc6ICdBRUQnLCAnc3ltYm9sJzogJ0JUQy9BRUQnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnQUVEJyB9LFxuICAgICAgICAnQlRDL0JHTic6IHsgJ2lkJzogJ0JHTicsICdzeW1ib2wnOiAnQlRDL0JHTicsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdCR04nIH0sXG4gICAgICAgICdCVEMvQ1pLJzogeyAnaWQnOiAnQ1pLJywgJ3N5bWJvbCc6ICdCVEMvQ1pLJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ0NaSycgfSxcbiAgICAgICAgJ0JUQy9ES0snOiB7ICdpZCc6ICdES0snLCAnc3ltYm9sJzogJ0JUQy9ES0snLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnREtLJyB9LFxuICAgICAgICAnQlRDL0hLRCc6IHsgJ2lkJzogJ0hLRCcsICdzeW1ib2wnOiAnQlRDL0hLRCcsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdIS0QnIH0sXG4gICAgICAgICdCVEMvSFJLJzogeyAnaWQnOiAnSFJLJywgJ3N5bWJvbCc6ICdCVEMvSFJLJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ0hSSycgfSxcbiAgICAgICAgJ0JUQy9IVUYnOiB7ICdpZCc6ICdIVUYnLCAnc3ltYm9sJzogJ0JUQy9IVUYnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnSFVGJyB9LFxuICAgICAgICAnQlRDL0lMUyc6IHsgJ2lkJzogJ0lMUycsICdzeW1ib2wnOiAnQlRDL0lMUycsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdJTFMnIH0sXG4gICAgICAgICdCVEMvSU5SJzogeyAnaWQnOiAnSU5SJywgJ3N5bWJvbCc6ICdCVEMvSU5SJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ0lOUicgfSxcbiAgICAgICAgJ0JUQy9NVVInOiB7ICdpZCc6ICdNVVInLCAnc3ltYm9sJzogJ0JUQy9NVVInLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnTVVSJyB9LFxuICAgICAgICAnQlRDL01YTic6IHsgJ2lkJzogJ01YTicsICdzeW1ib2wnOiAnQlRDL01YTicsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdNWE4nIH0sXG4gICAgICAgICdCVEMvTk9LJzogeyAnaWQnOiAnTk9LJywgJ3N5bWJvbCc6ICdCVEMvTk9LJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ05PSycgfSxcbiAgICAgICAgJ0JUQy9OWkQnOiB7ICdpZCc6ICdOWkQnLCAnc3ltYm9sJzogJ0JUQy9OWkQnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnTlpEJyB9LFxuICAgICAgICAnQlRDL1BMTic6IHsgJ2lkJzogJ1BMTicsICdzeW1ib2wnOiAnQlRDL1BMTicsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdQTE4nIH0sXG4gICAgICAgICdCVEMvUk9OJzogeyAnaWQnOiAnUk9OJywgJ3N5bWJvbCc6ICdCVEMvUk9OJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ1JPTicgfSxcbiAgICAgICAgJ0JUQy9TRUsnOiB7ICdpZCc6ICdTRUsnLCAnc3ltYm9sJzogJ0JUQy9TRUsnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnU0VLJyB9LFxuICAgICAgICAnQlRDL1NHRCc6IHsgJ2lkJzogJ1NHRCcsICdzeW1ib2wnOiAnQlRDL1NHRCcsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdTR0QnIH0sXG4gICAgICAgICdCVEMvVEhCJzogeyAnaWQnOiAnVEhCJywgJ3N5bWJvbCc6ICdCVEMvVEhCJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ1RIQicgfSxcbiAgICAgICAgJ0JUQy9UUlknOiB7ICdpZCc6ICdUUlknLCAnc3ltYm9sJzogJ0JUQy9UUlknLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnVFJZJyB9LFxuICAgICAgICAnQlRDL1pBUic6IHsgJ2lkJzogJ1pBUicsICdzeW1ib2wnOiAnQlRDL1pBUicsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdaQVInIH0sXG4gICAgfSxcbn0pXG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGFueHBybyA9IHtcblxuICAgICdpZCc6ICdhbnhwcm8nLFxuICAgICduYW1lJzogJ0FOWFBybycsXG4gICAgJ2NvdW50cmllcyc6IFsgJ0pQJywgJ1NHJywgJ0hLJywgJ05aJyBdLFxuICAgICd2ZXJzaW9uJzogJzInLFxuICAgICdyYXRlTGltaXQnOiAxNTAwLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY1OTgzLWZkODU5NWRhLTVlYzktMTFlNy04MmUzLWFkYjNhYjhjMjYxMi5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vYW54cHJvLmNvbS9hcGknLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vYW54cHJvLmNvbScsXG4gICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAnaHR0cDovL2RvY3MuYW54djIuYXBpYXJ5LmlvJyxcbiAgICAgICAgICAgICdodHRwczovL2FueHByby5jb20vcGFnZXMvYXBpJyxcbiAgICAgICAgXSxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICd7Y3VycmVuY3lfcGFpcn0vbW9uZXkvdGlja2VyJyxcbiAgICAgICAgICAgICAgICAne2N1cnJlbmN5X3BhaXJ9L21vbmV5L2RlcHRoL2Z1bGwnLFxuICAgICAgICAgICAgICAgICd7Y3VycmVuY3lfcGFpcn0vbW9uZXkvdHJhZGUvZmV0Y2gnLCAvLyBkaXNhYmxlZCBieSBBTlhQcm9cbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ3tjdXJyZW5jeV9wYWlyfS9tb25leS9vcmRlci9hZGQnLFxuICAgICAgICAgICAgICAgICd7Y3VycmVuY3lfcGFpcn0vbW9uZXkvb3JkZXIvY2FuY2VsJyxcbiAgICAgICAgICAgICAgICAne2N1cnJlbmN5X3BhaXJ9L21vbmV5L29yZGVyL3F1b3RlJyxcbiAgICAgICAgICAgICAgICAne2N1cnJlbmN5X3BhaXJ9L21vbmV5L29yZGVyL3Jlc3VsdCcsXG4gICAgICAgICAgICAgICAgJ3tjdXJyZW5jeV9wYWlyfS9tb25leS9vcmRlcnMnLFxuICAgICAgICAgICAgICAgICdtb25leS97Y3VycmVuY3l9L2FkZHJlc3MnLFxuICAgICAgICAgICAgICAgICdtb25leS97Y3VycmVuY3l9L3NlbmRfc2ltcGxlJyxcbiAgICAgICAgICAgICAgICAnbW9uZXkvaW5mbycsXG4gICAgICAgICAgICAgICAgJ21vbmV5L3RyYWRlL2xpc3QnLFxuICAgICAgICAgICAgICAgICdtb25leS93YWxsZXQvaGlzdG9yeScsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgJ21hcmtldHMnOiB7XG4gICAgICAgICdCVEMvVVNEJzogeyAnaWQnOiAnQlRDVVNEJywgJ3N5bWJvbCc6ICdCVEMvVVNEJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ1VTRCcgfSxcbiAgICAgICAgJ0JUQy9IS0QnOiB7ICdpZCc6ICdCVENIS0QnLCAnc3ltYm9sJzogJ0JUQy9IS0QnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnSEtEJyB9LFxuICAgICAgICAnQlRDL0VVUic6IHsgJ2lkJzogJ0JUQ0VVUicsICdzeW1ib2wnOiAnQlRDL0VVUicsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdFVVInIH0sXG4gICAgICAgICdCVEMvQ0FEJzogeyAnaWQnOiAnQlRDQ0FEJywgJ3N5bWJvbCc6ICdCVEMvQ0FEJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ0NBRCcgfSxcbiAgICAgICAgJ0JUQy9BVUQnOiB7ICdpZCc6ICdCVENBVUQnLCAnc3ltYm9sJzogJ0JUQy9BVUQnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnQVVEJyB9LFxuICAgICAgICAnQlRDL1NHRCc6IHsgJ2lkJzogJ0JUQ1NHRCcsICdzeW1ib2wnOiAnQlRDL1NHRCcsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdTR0QnIH0sXG4gICAgICAgICdCVEMvSlBZJzogeyAnaWQnOiAnQlRDSlBZJywgJ3N5bWJvbCc6ICdCVEMvSlBZJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ0pQWScgfSxcbiAgICAgICAgJ0JUQy9HQlAnOiB7ICdpZCc6ICdCVENHQlAnLCAnc3ltYm9sJzogJ0JUQy9HQlAnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnR0JQJyB9LFxuICAgICAgICAnQlRDL05aRCc6IHsgJ2lkJzogJ0JUQ05aRCcsICdzeW1ib2wnOiAnQlRDL05aRCcsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdOWkQnIH0sXG4gICAgICAgICdMVEMvQlRDJzogeyAnaWQnOiAnTFRDQlRDJywgJ3N5bWJvbCc6ICdMVEMvQlRDJywgJ2Jhc2UnOiAnTFRDJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ0RPR0UvQlRDJzogeyAnaWQnOiAnRE9HRUJUQycsICdzeW1ib2wnOiAnRE9HRS9CVEMnLCAnYmFzZSc6ICdET0dFJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ1NUUi9CVEMnOiB7ICdpZCc6ICdTVFJCVEMnLCAnc3ltYm9sJzogJ1NUUi9CVEMnLCAnYmFzZSc6ICdTVFInLCAncXVvdGUnOiAnQlRDJyB9LFxuICAgICAgICAnWFJQL0JUQyc6IHsgJ2lkJzogJ1hSUEJUQycsICdzeW1ib2wnOiAnWFJQL0JUQycsICdiYXNlJzogJ1hSUCcsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RNb25leUluZm8gKCk7XG4gICAgICAgIGxldCBiYWxhbmNlID0gcmVzcG9uc2VbJ2RhdGEnXTtcbiAgICAgICAgbGV0IGN1cnJlbmNpZXMgPSBPYmplY3Qua2V5cyAoYmFsYW5jZVsnV2FsbGV0cyddKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiBiYWxhbmNlIH07XG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgY3VycmVuY2llcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gY3VycmVuY2llc1tjXTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd1c2VkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoY3VycmVuY3kgaW4gYmFsYW5jZVsnV2FsbGV0cyddKSB7XG4gICAgICAgICAgICAgICAgbGV0IHdhbGxldCA9IGJhbGFuY2VbJ1dhbGxldHMnXVtjdXJyZW5jeV07XG4gICAgICAgICAgICAgICAgYWNjb3VudFsnZnJlZSddID0gcGFyc2VGbG9hdCAod2FsbGV0WydBdmFpbGFibGVfQmFsYW5jZSddWyd2YWx1ZSddKTtcbiAgICAgICAgICAgICAgICBhY2NvdW50Wyd0b3RhbCddID0gcGFyc2VGbG9hdCAod2FsbGV0WydCYWxhbmNlJ11bJ3ZhbHVlJ10pO1xuICAgICAgICAgICAgICAgIGFjY291bnRbJ3VzZWQnXSA9IGFjY291bnRbJ3RvdGFsJ10gLSBhY2NvdW50WydmcmVlJ107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldEN1cnJlbmN5UGFpck1vbmV5RGVwdGhGdWxsICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2N1cnJlbmN5X3BhaXInOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IHJlc3BvbnNlWydkYXRhJ107XG4gICAgICAgIGxldCB0ID0gcGFyc2VJbnQgKG9yZGVyYm9va1snZGF0YVVwZGF0ZVRpbWUnXSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSBwYXJzZUludCAodCAvIDEwMDApO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAob3JkZXJbJ3ByaWNlJ10pO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBwYXJzZUZsb2F0IChvcmRlclsnYW1vdW50J10pO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtzaWRlXS5wdXNoIChbIHByaWNlLCBhbW91bnQgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldEN1cnJlbmN5UGFpck1vbmV5VGlja2VyICh7XG4gICAgICAgICAgICAnY3VycmVuY3lfcGFpcic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgdGlja2VyID0gcmVzcG9uc2VbJ2RhdGEnXTtcbiAgICAgICAgbGV0IHQgPSBwYXJzZUludCAodGlja2VyWydkYXRhVXBkYXRlVGltZSddKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHBhcnNlSW50ICh0IC8gMTAwMCk7XG4gICAgICAgIGxldCBiaWQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGxldCBhc2sgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmICh0aWNrZXJbJ2J1eSddWyd2YWx1ZSddKVxuICAgICAgICAgICAgYmlkID0gcGFyc2VGbG9hdCAodGlja2VyWydidXknXVsndmFsdWUnXSk7XG4gICAgICAgIGlmICh0aWNrZXJbJ3NlbGwnXVsndmFsdWUnXSlcbiAgICAgICAgICAgIGFzayA9IHBhcnNlRmxvYXQgKHRpY2tlclsnc2VsbCddWyd2YWx1ZSddKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddWyd2YWx1ZSddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddWyd2YWx1ZSddKSxcbiAgICAgICAgICAgICdiaWQnOiBiaWQsXG4gICAgICAgICAgICAnYXNrJzogYXNrLFxuICAgICAgICAgICAgJ3Z3YXAnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3Z3YXAnXVsndmFsdWUnXSksXG4gICAgICAgICAgICAnb3Blbic6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjbG9zZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdmaXJzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsYXN0JzogcGFyc2VGbG9hdCAodGlja2VyWydsYXN0J11bJ3ZhbHVlJ10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2F2ZyddWyd2YWx1ZSddKSxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWyd2b2wnXVsndmFsdWUnXSksXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBlcnJvciA9IHRoaXMuaWQgKyAnIHN3aXRjaGVkIG9mZiB0aGUgdHJhZGVzIGVuZHBvaW50LCBzZWUgdGhlaXIgZG9jcyBhdCBodHRwOi8vZG9jcy5hbnh2Mi5hcGlhcnkuaW8vcmVmZXJlbmNlL21hcmtldC1kYXRhL2N1cnJlbmN5cGFpcm1vbmV5dHJhZGVmZXRjaC1kaXNhYmxlZCc7XG4gICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yIChlcnJvcik7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldEN1cnJlbmN5UGFpck1vbmV5VHJhZGVGZXRjaCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdjdXJyZW5jeV9wYWlyJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdjdXJyZW5jeV9wYWlyJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICdhbW91bnRfaW50JzogYW1vdW50LFxuICAgICAgICAgICAgJ3R5cGUnOiBzaWRlLFxuICAgICAgICB9O1xuICAgICAgICBpZiAodHlwZSA9PSAnbGltaXQnKVxuICAgICAgICAgICAgb3JkZXJbJ3ByaWNlX2ludCddID0gcHJpY2U7XG4gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0Q3VycmVuY3lQYWlyT3JkZXJBZGQgKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3VsdCxcbiAgICAgICAgICAgICdpZCc6IHJlc3VsdFsnZGF0YSddXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdEN1cnJlbmN5UGFpck9yZGVyQ2FuY2VsICh7ICdvaWQnOiBpZCB9KTtcbiAgICB9LFxuXG4gICAgbm9uY2UgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHJlcXVlc3QgPSB0aGlzLmltcGxvZGVQYXJhbXMgKHBhdGgsIHBhcmFtcyk7XG4gICAgICAgIGxldCBxdWVyeSA9IHRoaXMub21pdCAocGFyYW1zLCB0aGlzLmV4dHJhY3RQYXJhbXMgKHBhdGgpKTtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ10gKyAnLycgKyB0aGlzLnZlcnNpb24gKyAnLycgKyByZXF1ZXN0O1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHF1ZXJ5KS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChxdWVyeSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpO1xuICAgICAgICAgICAgYm9keSA9IHRoaXMudXJsZW5jb2RlICh0aGlzLmV4dGVuZCAoeyAnbm9uY2UnOiBub25jZSB9LCBxdWVyeSkpO1xuICAgICAgICAgICAgbGV0IHNlY3JldCA9IHRoaXMuYmFzZTY0VG9CaW5hcnkgKHRoaXMuc2VjcmV0KTtcbiAgICAgICAgICAgIGxldCBhdXRoID0gcmVxdWVzdCArIFwiXFwwXCIgKyBib2R5O1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgICAgICAgJ1Jlc3QtS2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ1Jlc3QtU2lnbic6IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKGF1dGgpLCBzZWNyZXQsICdzaGE1MTInLCAnYmFzZTY0JyksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdyZXN1bHQnIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlWydyZXN1bHQnXSA9PSAnc3VjY2VzcycpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgJyArIHRoaXMuanNvbiAocmVzcG9uc2UpKTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBiaW5hbmNlID0ge1xuXG4gICAgJ2lkJzogJ2JpbmFuY2UnLFxuICAgICduYW1lJzogJ0JpbmFuY2UnLFxuICAgICdjb3VudHJpZXMnOiAnQ04nLCAvLyBDaGluYVxuICAgICdyYXRlTGltaXQnOiAxMDAwLFxuICAgICd2ZXJzaW9uJzogJ3YxJyxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yOTYwNDAyMC1kNTQ4M2NkYy04N2VlLTExZTctOTRjNy1kMWE4ZDkxNjkyOTMuanBnJyxcbiAgICAgICAgJ2FwaSc6ICdodHRwczovL3d3dy5iaW5hbmNlLmNvbS9hcGknLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vd3d3LmJpbmFuY2UuY29tJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL3d3dy5iaW5hbmNlLmNvbS9yZXN0YXBpcHViLmh0bWwnLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ3BpbmcnLFxuICAgICAgICAgICAgICAgICd0aW1lJyxcbiAgICAgICAgICAgICAgICAnZGVwdGgnLFxuICAgICAgICAgICAgICAgICdhZ2dUcmFkZXMnLFxuICAgICAgICAgICAgICAgICdrbGluZXMnLFxuICAgICAgICAgICAgICAgICd0aWNrZXIvMjRocicsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAncHJpdmF0ZSc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ29yZGVyJyxcbiAgICAgICAgICAgICAgICAnb3Blbk9yZGVycycsXG4gICAgICAgICAgICAgICAgJ2FsbE9yZGVycycsXG4gICAgICAgICAgICAgICAgJ2FjY291bnQnLFxuICAgICAgICAgICAgICAgICdteVRyYWRlcycsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ29yZGVyJyxcbiAgICAgICAgICAgICAgICAnb3JkZXIvdGVzdCcsXG4gICAgICAgICAgICAgICAgJ3VzZXJEYXRhU3RyZWFtJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAncHV0JzogW1xuICAgICAgICAgICAgICAgICd1c2VyRGF0YVN0cmVhbSdcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAnZGVsZXRlJzogW1xuICAgICAgICAgICAgICAgICdvcmRlcicsXG4gICAgICAgICAgICAgICAgJ3VzZXJEYXRhU3RyZWFtJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JOQi9CVEMnOiB7ICdpZCc6ICdCTkJCVEMnLCAnc3ltYm9sJzogJ0JOQi9CVEMnLCAnYmFzZSc6ICdCTkInLCAncXVvdGUnOiAnQlRDJyB9LFxuICAgICAgICAnTkVPL0JUQyc6IHsgJ2lkJzogJ05FT0JUQycsICdzeW1ib2wnOiAnTkVPL0JUQycsICdiYXNlJzogJ05FTycsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdFVEgvQlRDJzogeyAnaWQnOiAnRVRIQlRDJywgJ3N5bWJvbCc6ICdFVEgvQlRDJywgJ2Jhc2UnOiAnRVRIJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ0hTUi9CVEMnOiB7ICdpZCc6ICdIU1JCVEMnLCAnc3ltYm9sJzogJ0hTUi9CVEMnLCAnYmFzZSc6ICdIU1InLCAncXVvdGUnOiAnQlRDJyB9LFxuICAgICAgICAnTFRDL0JUQyc6IHsgJ2lkJzogJ0xUQ0JUQycsICdzeW1ib2wnOiAnTFRDL0JUQycsICdiYXNlJzogJ0xUQycsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdHQVMvQlRDJzogeyAnaWQnOiAnR0FTQlRDJywgJ3N5bWJvbCc6ICdHQVMvQlRDJywgJ2Jhc2UnOiAnR0FTJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ0hDQy9CVEMnOiB7ICdpZCc6ICdIQ0NCVEMnLCAnc3ltYm9sJzogJ0hDQy9CVEMnLCAnYmFzZSc6ICdIQ0MnLCAncXVvdGUnOiAnQlRDJyB9LFxuICAgICAgICAnQkNIL0JUQyc6IHsgJ2lkJzogJ0JDQ0JUQycsICdzeW1ib2wnOiAnQkNIL0JUQycsICdiYXNlJzogJ0JDSCcsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdCTkIvRVRIJzogeyAnaWQnOiAnQk5CRVRIJywgJ3N5bWJvbCc6ICdCTkIvRVRIJywgJ2Jhc2UnOiAnQk5CJywgJ3F1b3RlJzogJ0VUSCcgfSxcbiAgICAgICAgJ0ROVC9FVEgnOiB7ICdpZCc6ICdETlRFVEgnLCAnc3ltYm9sJzogJ0ROVC9FVEgnLCAnYmFzZSc6ICdETlQnLCAncXVvdGUnOiAnRVRIJyB9LFxuICAgICAgICAnT0FYL0VUSCc6IHsgJ2lkJzogJ09BWEVUSCcsICdzeW1ib2wnOiAnT0FYL0VUSCcsICdiYXNlJzogJ09BWCcsICdxdW90ZSc6ICdFVEgnIH0sXG4gICAgICAgICdNQ08vRVRIJzogeyAnaWQnOiAnTUNPRVRIJywgJ3N5bWJvbCc6ICdNQ08vRVRIJywgJ2Jhc2UnOiAnTUNPJywgJ3F1b3RlJzogJ0VUSCcgfSxcbiAgICAgICAgJ0JUTS9FVEgnOiB7ICdpZCc6ICdCVE1FVEgnLCAnc3ltYm9sJzogJ0JUTS9FVEgnLCAnYmFzZSc6ICdCVE0nLCAncXVvdGUnOiAnRVRIJyB9LFxuICAgICAgICAnU05UL0VUSCc6IHsgJ2lkJzogJ1NOVEVUSCcsICdzeW1ib2wnOiAnU05UL0VUSCcsICdiYXNlJzogJ1NOVCcsICdxdW90ZSc6ICdFVEgnIH0sXG4gICAgICAgICdFT1MvRVRIJzogeyAnaWQnOiAnRU9TRVRIJywgJ3N5bWJvbCc6ICdFT1MvRVRIJywgJ2Jhc2UnOiAnRU9TJywgJ3F1b3RlJzogJ0VUSCcgfSxcbiAgICAgICAgJ0JOVC9FVEgnOiB7ICdpZCc6ICdCTlRFVEgnLCAnc3ltYm9sJzogJ0JOVC9FVEgnLCAnYmFzZSc6ICdCTlQnLCAncXVvdGUnOiAnRVRIJyB9LFxuICAgICAgICAnSUNOL0VUSCc6IHsgJ2lkJzogJ0lDTkVUSCcsICdzeW1ib2wnOiAnSUNOL0VUSCcsICdiYXNlJzogJ0lDTicsICdxdW90ZSc6ICdFVEgnIH0sXG4gICAgICAgICdCVEMvVVNEVCc6IHsgJ2lkJzogJ0JUQ1VTRFQnLCAnc3ltYm9sJzogJ0JUQy9VU0RUJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ1VTRFQnIH0sXG4gICAgICAgICdFVEgvVVNEVCc6IHsgJ2lkJzogJ0VUSFVTRFQnLCAnc3ltYm9sJzogJ0VUSC9VU0RUJywgJ2Jhc2UnOiAnRVRIJywgJ3F1b3RlJzogJ1VTRFQnIH0sXG4gICAgICAgICdRVFVNL0VUSCc6IHsgJ2lkJzogJ1FUVU1FVEgnLCAnc3ltYm9sJzogJ1FUVU0vRVRIJywgJ2Jhc2UnOiAnUVRVTScsICdxdW90ZSc6ICdFVEgnIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZUdldEFjY291bnQgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogcmVzcG9uc2UgfTtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gcmVzcG9uc2VbJ2JhbGFuY2VzJ107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmFsYW5jZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCBiYWxhbmNlID0gYmFsYW5jZXNbaV07XG4gICAgICAgICAgICBsZXQgYXNzZXQgPSBiYWxhbmNlWydhc3NldCddO1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gdGhpcy5jb21tb25DdXJyZW5jeUNvZGUgKGFzc2V0KTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogcGFyc2VGbG9hdCAoYmFsYW5jZVsnZnJlZSddKSxcbiAgICAgICAgICAgICAgICAndXNlZCc6IHBhcnNlRmxvYXQgKGJhbGFuY2VbJ2xvY2tlZCddKSxcbiAgICAgICAgICAgICAgICAndG90YWwnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYWNjb3VudFsndG90YWwnXSA9IHRoaXMuc3VtIChhY2NvdW50WydmcmVlJ10sIGFjY291bnRbJ3VzZWQnXSk7XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgbSA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgdGhpcy5wdWJsaWNHZXREZXB0aCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiBtWydpZCddLFxuICAgICAgICAgICAgJ2xpbWl0JzogMTAwLCAvLyBkZWZhdWx0ID0gbWF4aW11bSA9IDEwMFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAob3JkZXJbMF0pO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBwYXJzZUZsb2F0IChvcmRlclsxXSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3NpZGVdLnB1c2ggKFsgcHJpY2UsIGFtb3VudCBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBwYXJzZVRpY2tlciAodGlja2VyLCBtYXJrZXQpIHtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRpY2tlclsnY2xvc2VUaW1lJ107XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2hpZ2hQcmljZSddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvd1ByaWNlJ10pLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYmlkUHJpY2UnXSksXG4gICAgICAgICAgICAnYXNrJzogcGFyc2VGbG9hdCAodGlja2VyWydhc2tQcmljZSddKSxcbiAgICAgICAgICAgICd2d2FwJzogcGFyc2VGbG9hdCAodGlja2VyWyd3ZWlnaHRlZEF2Z1ByaWNlJ10pLFxuICAgICAgICAgICAgJ29wZW4nOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ29wZW5QcmljZSddKSxcbiAgICAgICAgICAgICdjbG9zZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsncHJldkNsb3NlUHJpY2UnXSksXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdFByaWNlJ10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsncHJpY2VDaGFuZ2VQZXJjZW50J10pLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWyd2b2x1bWUnXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBsZXQgbSA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFRpY2tlcjI0aHIgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiBtWydpZCddLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VUaWNrZXIgKHJlc3BvbnNlLCBtKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPSExDViAobWFya2V0LCB0aW1lZnJhbWUgPSA2MCwgc2luY2UgPSB1bmRlZmluZWQsIGxpbWl0ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIEtsaW5lL2NhbmRsZXN0aWNrIGJhcnMgZm9yIGEgc3ltYm9sLiBLbGluZXMgYXJlIHVuaXF1ZWx5IGlkZW50aWZpZWQgYnkgdGhlaXIgb3BlbiB0aW1lLlxuICAgICAgICAvLyBQYXJhbWV0ZXJzOlxuICAgICAgICAvLyBOYW1lICAgIFR5cGUgICAgTWFuZGF0b3J5ICAgRGVzY3JpcHRpb25cbiAgICAgICAgLy8gc3ltYm9sICBTVFJJTkcgIFlFU1xuICAgICAgICAvLyBpbnRlcnZhbCAgICBFTlVNICAgIFlFU1xuICAgICAgICAvLyBsaW1pdCAgIElOVCBOTyAgRGVmYXVsdCA1MDA7IG1heCA1MDAuXG4gICAgICAgIC8vIHN0YXJ0VGltZSAgIExPTkcgICAgTk9cbiAgICAgICAgLy8gZW5kVGltZSBMT05HICAgIE5PXG4gICAgICAgIC8vIElmIHN0YXJ0VGltZSBhbmQgZW5kVGltZSBhcmUgbm90IHNlbnQsIHRoZSBtb3N0IHJlY2VudCBrbGluZXMgYXJlIHJldHVybmVkLlxuICAgICAgICAvLyBSZXNwb25zZTpcbiAgICAgICAgLy8gW1xuICAgICAgICAvLyAgIFtcbiAgICAgICAgLy8gICAgIDE0OTkwNDAwMDAwMDAsICAgICAgLy8gT3BlbiB0aW1lXG4gICAgICAgIC8vICAgICBcIjAuMDE2MzQ3OTBcIiwgICAgICAgLy8gT3BlblxuICAgICAgICAvLyAgICAgXCIwLjgwMDAwMDAwXCIsICAgICAgIC8vIEhpZ2hcbiAgICAgICAgLy8gICAgIFwiMC4wMTU3NTgwMFwiLCAgICAgICAvLyBMb3dcbiAgICAgICAgLy8gICAgIFwiMC4wMTU3NzEwMFwiLCAgICAgICAvLyBDbG9zZVxuICAgICAgICAvLyAgICAgXCIxNDg5NzYuMTE0Mjc4MTVcIiwgIC8vIFZvbHVtZVxuICAgICAgICAvLyAgICAgMTQ5OTY0NDc5OTk5OSwgICAgICAvLyBDbG9zZSB0aW1lXG4gICAgICAgIC8vICAgICBcIjI0MzQuMTkwNTUzMzRcIiwgICAgLy8gUXVvdGUgYXNzZXQgdm9sdW1lXG4gICAgICAgIC8vICAgICAzMDgsICAgICAgICAgICAgICAgIC8vIE51bWJlciBvZiB0cmFkZXNcbiAgICAgICAgLy8gICAgIFwiMTc1Ni44NzQwMjM5N1wiLCAgICAvLyBUYWtlciBidXkgYmFzZSBhc3NldCB2b2x1bWVcbiAgICAgICAgLy8gICAgIFwiMjguNDY2OTQzNjhcIiwgICAgICAvLyBUYWtlciBidXkgcXVvdGUgYXNzZXQgdm9sdW1lXG4gICAgICAgIC8vICAgICBcIjE3OTI4ODk5LjYyNDg0MzM5XCIgLy8gQ2FuIGJlIGlnbm9yZWRcbiAgICAgICAgLy8gICBdXG4gICAgICAgIC8vIF1cbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkICh0aGlzLmlkICsgJyBmZXRjaE9ITENWIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQnKTtcbiAgICB9LFxuXG4gICAgcGFyc2VUcmFkZSAodHJhZGUsIG1hcmtldCA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdGltZXN0YW1wRmllbGQgPSAoJ1QnIGluIHRyYWRlKSA/ICdUJyA6ICd0aW1lJztcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRyYWRlW3RpbWVzdGFtcEZpZWxkXTtcbiAgICAgICAgbGV0IHByaWNlRmllbGQgPSAoJ3AnIGluIHRyYWRlKSA/ICdwJyA6ICdwcmljZSc7XG4gICAgICAgIGxldCBwcmljZSA9IHBhcnNlRmxvYXQgKHRyYWRlW3ByaWNlRmllbGRdKTtcbiAgICAgICAgbGV0IGFtb3VudEZpZWxkID0gKCdxJyBpbiB0cmFkZSkgPyAncScgOiAncXR5JztcbiAgICAgICAgbGV0IGFtb3VudCA9IHBhcnNlRmxvYXQgKHRyYWRlW2Ftb3VudEZpZWxkXSk7XG4gICAgICAgIGxldCBpZEZpZWxkID0gKCdhJyBpbiB0cmFkZSkgPyAnYScgOiAnaWQnO1xuICAgICAgICBsZXQgaWQgPSB0cmFkZVtpZEZpZWxkXS50b1N0cmluZyAoKTtcbiAgICAgICAgbGV0IHNpZGUgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmICgnbScgaW4gdHJhZGUpIHtcbiAgICAgICAgICAgIHNpZGUgPSAnc2VsbCc7XG4gICAgICAgICAgICBpZiAodHJhZGVbJ20nXSlcbiAgICAgICAgICAgICAgICBzaWRlID0gJ2J1eSc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgaXNCdXllciA9IHRyYWRlWydpc0J1eWVyJ107XG4gICAgICAgICAgICBsZXQgaXNNYWtlciA9IHRyYWRlWydpc01ha2VyJ107XG4gICAgICAgICAgICBpZiAoaXNCdXllcikge1xuICAgICAgICAgICAgICAgIHNpZGUgPSBpc01ha2VyID8gJ3NlbGwnIDogJ2J1eSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNpZGUgPSBpc01ha2VyID8gJ2J1eScgOiAnc2VsbCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogdHJhZGUsXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ3N5bWJvbCc6IG1hcmtldFsnc3ltYm9sJ10sXG4gICAgICAgICAgICAnaWQnOiBpZCxcbiAgICAgICAgICAgICd0eXBlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3NpZGUnOiBzaWRlLFxuICAgICAgICAgICAgJ3ByaWNlJzogcHJpY2UsXG4gICAgICAgICAgICAnYW1vdW50JzogYW1vdW50LFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgbSA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldEFnZ1RyYWRlcyAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiBtWydpZCddLFxuICAgICAgICAgICAgLy8gJ2Zyb21JZCc6IDEyMywgICAgLy8gSUQgdG8gZ2V0IGFnZ3JlZ2F0ZSB0cmFkZXMgZnJvbSBJTkNMVVNJVkUuXG4gICAgICAgICAgICAvLyAnc3RhcnRUaW1lJzogNDU2LCAvLyBUaW1lc3RhbXAgaW4gbXMgdG8gZ2V0IGFnZ3JlZ2F0ZSB0cmFkZXMgZnJvbSBJTkNMVVNJVkUuXG4gICAgICAgICAgICAvLyAnZW5kVGltZSc6IDc4OSwgICAvLyBUaW1lc3RhbXAgaW4gbXMgdG8gZ2V0IGFnZ3JlZ2F0ZSB0cmFkZXMgdW50aWwgSU5DTFVTSVZFLlxuICAgICAgICAgICAgJ2xpbWl0JzogNTAwLCAgICAgICAgLy8gZGVmYXVsdCA9IG1heGltdW0gPSA1MDBcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlVHJhZGVzIChyZXNwb25zZSwgbSk7XG4gICAgfSxcblxuICAgIHBhcnNlT3JkZXIgKG9yZGVyKSB7XG4gICAgICAgIC8vIHtcbiAgICAgICAgLy8gICBcInN5bWJvbFwiOiBcIkxUQ0JUQ1wiLFxuICAgICAgICAvLyAgIFwib3JkZXJJZFwiOiAxLFxuICAgICAgICAvLyAgIFwiY2xpZW50T3JkZXJJZFwiOiBcIm15T3JkZXIxXCIsXG4gICAgICAgIC8vICAgXCJwcmljZVwiOiBcIjAuMVwiLFxuICAgICAgICAvLyAgIFwib3JpZ1F0eVwiOiBcIjEuMFwiLFxuICAgICAgICAvLyAgIFwiZXhlY3V0ZWRRdHlcIjogXCIwLjBcIixcbiAgICAgICAgLy8gICBcInN0YXR1c1wiOiBcIk5FV1wiLFxuICAgICAgICAvLyAgIFwidGltZUluRm9yY2VcIjogXCJHVENcIixcbiAgICAgICAgLy8gICBcInR5cGVcIjogXCJMSU1JVFwiLFxuICAgICAgICAvLyAgIFwic2lkZVwiOiBcIkJVWVwiLFxuICAgICAgICAvLyAgIFwic3RvcFByaWNlXCI6IFwiMC4wXCIsXG4gICAgICAgIC8vICAgXCJpY2ViZXJnUXR5XCI6IFwiMC4wXCIsXG4gICAgICAgIC8vICAgXCJ0aW1lXCI6IDE0OTk4MjczMTk1NTlcbiAgICAgICAgLy8gfVxuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWQgKHRoaXMuaWQgKyAnIHBhcnNlT3JkZXIgaXMgbm90IGltcGxlbWVudGVkIHlldCcpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAnc3ltYm9sJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICdxdWFudGl0eSc6ICclZicuc3ByaW50ZiAoYW1vdW50KSxcbiAgICAgICAgICAgICdwcmljZSc6ICclZicuc3ByaW50ZiAocHJpY2UpLFxuICAgICAgICAgICAgJ3R5cGUnOiB0eXBlLnRvVXBwZXJDYXNlICgpLFxuICAgICAgICAgICAgJ3NpZGUnOiBzaWRlLnRvVXBwZXJDYXNlICgpLFxuICAgICAgICAgICAgJ3RpbWVJbkZvcmNlJzogJ0dUQycsIC8vIEdvb2QgVG8gQ2FuY2VsXG4gICAgICAgICAgICAvLyAndGltZUluRm9yY2UnOiAnSU9DJywgLy8gSW1tZWRpYXRlIE9yIENhbmNlbFxuICAgICAgICB9O1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0T3JkZXIgKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ2lkJzogcmVzcG9uc2VbJ29yZGVySWQnXS50b1N0cmluZyAoKSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlciAoaWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBzeW1ib2wgPSAoJ3N5bWJvbCcgaW4gcGFyYW1zKTtcbiAgICAgICAgaWYgKCFzeW1ib2wpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgZmV0Y2hPcmRlciByZXF1aXJlcyBhIHN5bWJvbCBwYXJhbScpO1xuICAgICAgICBsZXQgbSA9IHRoaXMubWFya2V0IChzeW1ib2wpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVHZXRPcmRlciAodGhpcy5leHRlbmQgKHBhcmFtcywge1xuICAgICAgICAgICAgJ3N5bWJvbCc6IG1bJ2lkJ10sXG4gICAgICAgICAgICAnb3JkZXJJZCc6IGlkLnRvU3RyaW5nICgpLFxuICAgICAgICB9KSk7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlT3JkZXIgKHJlc3BvbnNlKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlcnMgKCkge1xuICAgICAgICAvLyBzeW1ib2wgIFNUUklORyAgWUVTXG4gICAgICAgIC8vIG9yZGVySWQgTE9ORyAgICBOT1xuICAgICAgICAvLyBsaW1pdCAgIElOVCBOTyAgRGVmYXVsdCA1MDA7IG1heCA1MDAuXG4gICAgICAgIC8vIHJlY3ZXaW5kb3cgIExPTkcgICAgTk9cbiAgICAgICAgLy8gdGltZXN0YW1wICAgTE9ORyAgICBZRVNcbiAgICAgICAgLy8gSWYgb3JkZXJJZCBpcyBzZXQsIGl0IHdpbGwgZ2V0IG9yZGVycyA+PSB0aGF0IG9yZGVySWQuIE90aGVyd2lzZSBtb3N0IHJlY2VudCBvcmRlcnMgYXJlIHJldHVybmVkLlxuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWQgKHRoaXMuaWQgKyAnIGZldGNoT3JkZXJzIG5vdCBpbXBsZW1lbnRlZCB5ZXQnKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hNeU9wZW5PcmRlcnMgKG1hcmtldCA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgaWYgKCFtYXJrZXQpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgZmV0Y2hNeU9wZW5PcmRlcnMgcmVxdWlyZXMgYSBzeW1ib2wnKTtcbiAgICAgICAgbGV0IG0gPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlR2V0T3Blbk9yZGVycyAoe1xuICAgICAgICAgICAgJ3N5bWJvbCc6IG1bJ2lkJ10sXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZU9yZGVycyAocmVzcG9uc2UsIG0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0T3JkZXJDYW5jZWwgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnb3JkZXJJZCc6IHBhcnNlSW50IChpZCksXG4gICAgICAgICAgICAvLyAnb3JpZ0NsaWVudE9yZGVySWQnOiBpZCxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIG5vbmNlICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgJy8nICsgdGhpcy52ZXJzaW9uICsgJy8nICsgcGF0aDtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChwYXJhbXMpLmxlbmd0aClcbiAgICAgICAgICAgICAgICB1cmwgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHBhcmFtcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpO1xuICAgICAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy51cmxlbmNvZGUgKHRoaXMuZXh0ZW5kICh7ICd0aW1lc3RhbXAnOiBub25jZSB9LCBwYXJhbXMpKTtcbiAgICAgICAgICAgIGxldCBhdXRoID0gdGhpcy5zZWNyZXQgKyAnfCcgKyBxdWVyeTtcbiAgICAgICAgICAgIGxldCBzaWduYXR1cmUgPSB0aGlzLmhhc2ggKHRoaXMuZW5jb2RlIChhdXRoKSwgJ3NoYTI1NicpO1xuICAgICAgICAgICAgcXVlcnkgKz0gJyYnICsgJ3NpZ25hdHVyZT0nICsgc2lnbmF0dXJlO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnWC1NQlgtQVBJS0VZJzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKG1ldGhvZCA9PSAnR0VUJykge1xuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyBxdWVyeTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYm9keSA9IHF1ZXJ5O1xuICAgICAgICAgICAgICAgIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgICAgICBpZiAoJ2NvZGUnIGluIHJlc3BvbnNlKSB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2VbJ2NvZGUnXSA8IDApXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGJpdDJjID0ge1xuXG4gICAgJ2lkJzogJ2JpdDJjJyxcbiAgICAnbmFtZSc6ICdCaXQyQycsXG4gICAgJ2NvdW50cmllcyc6ICdJTCcsIC8vIElzcmFlbFxuICAgICdyYXRlTGltaXQnOiAzMDAwLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2MTE5LTM1OTMyMjBlLTVlY2UtMTFlNy04YjNhLTVhMDQxZjZiY2MzZi5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vd3d3LmJpdDJjLmNvLmlsJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy5iaXQyYy5jby5pbCcsXG4gICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAnaHR0cHM6Ly93d3cuYml0MmMuY28uaWwvaG9tZS9hcGknLFxuICAgICAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS9PZmVyRS9iaXQyYycsXG4gICAgICAgIF0sXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnRXhjaGFuZ2VzL3twYWlyfS9UaWNrZXInLFxuICAgICAgICAgICAgICAgICdFeGNoYW5nZXMve3BhaXJ9L29yZGVyYm9vaycsXG4gICAgICAgICAgICAgICAgJ0V4Y2hhbmdlcy97cGFpcn0vdHJhZGVzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvQmFsYW5jZScsXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvQmFsYW5jZS92MicsXG4gICAgICAgICAgICAgICAgJ01lcmNoYW50L0NyZWF0ZUNoZWNrb3V0JyxcbiAgICAgICAgICAgICAgICAnT3JkZXIvQWNjb3VudEhpc3RvcnknLFxuICAgICAgICAgICAgICAgICdPcmRlci9BZGRDb2luRnVuZHNSZXF1ZXN0JyxcbiAgICAgICAgICAgICAgICAnT3JkZXIvQWRkRnVuZCcsXG4gICAgICAgICAgICAgICAgJ09yZGVyL0FkZE9yZGVyJyxcbiAgICAgICAgICAgICAgICAnT3JkZXIvQWRkT3JkZXJNYXJrZXRQcmljZUJ1eScsXG4gICAgICAgICAgICAgICAgJ09yZGVyL0FkZE9yZGVyTWFya2V0UHJpY2VTZWxsJyxcbiAgICAgICAgICAgICAgICAnT3JkZXIvQ2FuY2VsT3JkZXInLFxuICAgICAgICAgICAgICAgICdPcmRlci9NeU9yZGVycycsXG4gICAgICAgICAgICAgICAgJ1BheW1lbnQvR2V0TXlJZCcsXG4gICAgICAgICAgICAgICAgJ1BheW1lbnQvU2VuZCcsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgJ21hcmtldHMnOiB7XG4gICAgICAgICdCVEMvTklTJzogeyAnaWQnOiAnQnRjTmlzJywgJ3N5bWJvbCc6ICdCVEMvTklTJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ05JUycgfSxcbiAgICAgICAgJ0xUQy9CVEMnOiB7ICdpZCc6ICdMdGNCdGMnLCAnc3ltYm9sJzogJ0xUQy9CVEMnLCAnYmFzZSc6ICdMVEMnLCAncXVvdGUnOiAnQlRDJyB9LFxuICAgICAgICAnTFRDL05JUyc6IHsgJ2lkJzogJ0x0Y05pcycsICdzeW1ib2wnOiAnTFRDL05JUycsICdiYXNlJzogJ0xUQycsICdxdW90ZSc6ICdOSVMnIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGxldCBiYWxhbmNlID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdEFjY291bnRCYWxhbmNlVjIgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogYmFsYW5jZSB9O1xuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IHRoaXMuY3VycmVuY2llcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gdGhpcy5jdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChjdXJyZW5jeSBpbiBiYWxhbmNlKSB7XG4gICAgICAgICAgICAgICAgbGV0IGF2YWlsYWJsZSA9ICdBVkFJTEFCTEVfJyArIGN1cnJlbmN5O1xuICAgICAgICAgICAgICAgIGFjY291bnRbJ2ZyZWUnXSA9IGJhbGFuY2VbYXZhaWxhYmxlXTtcbiAgICAgICAgICAgICAgICBhY2NvdW50Wyd0b3RhbCddID0gYmFsYW5jZVtjdXJyZW5jeV07XG4gICAgICAgICAgICAgICAgYWNjb3VudFsndXNlZCddID0gYWNjb3VudFsndG90YWwnXSAtIGFjY291bnRbJ2ZyZWUnXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdFtjdXJyZW5jeV0gPSBhY2NvdW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSBhd2FpdCB0aGlzLnB1YmxpY0dldEV4Y2hhbmdlc1BhaXJPcmRlcmJvb2sgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAncGFpcic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IFtdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaWRlcyA9IFsgJ2JpZHMnLCAnYXNrcycgXTtcbiAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBzaWRlcy5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1tzXTtcbiAgICAgICAgICAgIGxldCBvcmRlcnMgPSBvcmRlcmJvb2tbc2lkZV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBvcmRlciA9IG9yZGVyc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgcHJpY2UgPSBvcmRlclswXTtcbiAgICAgICAgICAgICAgICBsZXQgYW1vdW50ID0gb3JkZXJbMV07XG4gICAgICAgICAgICAgICAgbGV0IHRpbWVzdGFtcCA9IG9yZGVyWzJdICogMTAwMDtcbiAgICAgICAgICAgICAgICByZXN1bHRbc2lkZV0ucHVzaCAoWyBwcmljZSwgYW1vdW50LCB0aW1lc3RhbXAgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBsZXQgdGlja2VyID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRFeGNoYW5nZXNQYWlyVGlja2VyICh7XG4gICAgICAgICAgICAncGFpcic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2gnXSksXG4gICAgICAgICAgICAnbG93JzogcGFyc2VGbG9hdCAodGlja2VyWydsJ10pLFxuICAgICAgICAgICAgJ2JpZCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhc2snOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xsJ10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2F2J10pLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2EnXSksXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldEV4Y2hhbmdlc1BhaXJUcmFkZXMgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAncGFpcic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgbWV0aG9kID0gJ3ByaXZhdGVQb3N0T3JkZXJBZGRPcmRlcic7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdBbW91bnQnOiBhbW91bnQsXG4gICAgICAgICAgICAnUGFpcic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlID09ICdtYXJrZXQnKSB7XG4gICAgICAgICAgICBtZXRob2QgKz0gJ01hcmtldFByaWNlJyArIHRoaXMuY2FwaXRhbGl6ZSAoc2lkZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvcmRlclsnUHJpY2UnXSA9IHByaWNlO1xuICAgICAgICAgICAgb3JkZXJbJ1RvdGFsJ10gPSBhbW91bnQgKiBwcmljZTtcbiAgICAgICAgICAgIG9yZGVyWydJc0JpZCddID0gKHNpZGUgPT0gJ2J1eScpO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCB0aGlzW21ldGhvZF0gKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3VsdCxcbiAgICAgICAgICAgICdpZCc6IHJlc3VsdFsnTmV3T3JkZXInXVsnaWQnXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0T3JkZXJDYW5jZWxPcmRlciAoeyAnaWQnOiBpZCB9KTtcbiAgICB9LFxuXG4gICAgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArICcvJyArIHRoaXMuaW1wbG9kZVBhcmFtcyAocGF0aCwgcGFyYW1zKTtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgdXJsICs9ICcuanNvbic7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpO1xuICAgICAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5leHRlbmQgKHsgJ25vbmNlJzogbm9uY2UgfSwgcGFyYW1zKTtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtTGVuZ3RoJzogYm9keS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgJ2tleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgICAgICdzaWduJzogdGhpcy5obWFjICh0aGlzLmVuY29kZSAoYm9keSksIHRoaXMuZW5jb2RlICh0aGlzLnNlY3JldCksICdzaGE1MTInLCAnYmFzZTY0JyksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgYml0YmF5ID0ge1xuXG4gICAgJ2lkJzogJ2JpdGJheScsXG4gICAgJ25hbWUnOiAnQml0QmF5JyxcbiAgICAnY291bnRyaWVzJzogWyAnUEwnLCAnRVUnIF0sIC8vIFBvbGFuZFxuICAgICdyYXRlTGltaXQnOiAxMDAwLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2MTMyLTk3OGE3YmQ4LTVlY2UtMTFlNy05NTQwLWJjOTZkMWU5YmJiOC5qcGcnLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vYml0YmF5Lm5ldCcsXG4gICAgICAgICdhcGknOiB7XG4gICAgICAgICAgICAncHVibGljJzogJ2h0dHBzOi8vYml0YmF5Lm5ldC9BUEkvUHVibGljJyxcbiAgICAgICAgICAgICdwcml2YXRlJzogJ2h0dHBzOi8vYml0YmF5Lm5ldC9BUEkvVHJhZGluZy90cmFkaW5nQXBpLnBocCcsXG4gICAgICAgIH0sXG4gICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAnaHR0cHM6Ly9iaXRiYXkubmV0L3B1YmxpYy1hcGknLFxuICAgICAgICAgICAgJ2h0dHBzOi8vYml0YmF5Lm5ldC9hY2NvdW50L3RhYi1hcGknLFxuICAgICAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS9CaXRCYXlOZXQvQVBJJyxcbiAgICAgICAgXSxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICd7aWR9L2FsbCcsXG4gICAgICAgICAgICAgICAgJ3tpZH0vbWFya2V0JyxcbiAgICAgICAgICAgICAgICAne2lkfS9vcmRlcmJvb2snLFxuICAgICAgICAgICAgICAgICd7aWR9L3RpY2tlcicsXG4gICAgICAgICAgICAgICAgJ3tpZH0vdHJhZGVzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2luZm8nLFxuICAgICAgICAgICAgICAgICd0cmFkZScsXG4gICAgICAgICAgICAgICAgJ2NhbmNlbCcsXG4gICAgICAgICAgICAgICAgJ29yZGVyYm9vaycsXG4gICAgICAgICAgICAgICAgJ29yZGVycycsXG4gICAgICAgICAgICAgICAgJ3RyYW5zZmVyJyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXcnLFxuICAgICAgICAgICAgICAgICdoaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAndHJhbnNhY3Rpb25zJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9VU0QnOiB7ICdpZCc6ICdCVENVU0QnLCAnc3ltYm9sJzogJ0JUQy9VU0QnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnVVNEJyB9LFxuICAgICAgICAnQlRDL0VVUic6IHsgJ2lkJzogJ0JUQ0VVUicsICdzeW1ib2wnOiAnQlRDL0VVUicsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdFVVInIH0sXG4gICAgICAgICdCVEMvUExOJzogeyAnaWQnOiAnQlRDUExOJywgJ3N5bWJvbCc6ICdCVEMvUExOJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ1BMTicgfSxcbiAgICAgICAgJ0xUQy9VU0QnOiB7ICdpZCc6ICdMVENVU0QnLCAnc3ltYm9sJzogJ0xUQy9VU0QnLCAnYmFzZSc6ICdMVEMnLCAncXVvdGUnOiAnVVNEJyB9LFxuICAgICAgICAnTFRDL0VVUic6IHsgJ2lkJzogJ0xUQ0VVUicsICdzeW1ib2wnOiAnTFRDL0VVUicsICdiYXNlJzogJ0xUQycsICdxdW90ZSc6ICdFVVInIH0sXG4gICAgICAgICdMVEMvUExOJzogeyAnaWQnOiAnTFRDUExOJywgJ3N5bWJvbCc6ICdMVEMvUExOJywgJ2Jhc2UnOiAnTFRDJywgJ3F1b3RlJzogJ1BMTicgfSxcbiAgICAgICAgJ0xUQy9CVEMnOiB7ICdpZCc6ICdMVENCVEMnLCAnc3ltYm9sJzogJ0xUQy9CVEMnLCAnYmFzZSc6ICdMVEMnLCAncXVvdGUnOiAnQlRDJyB9LFxuICAgICAgICAnRVRIL1VTRCc6IHsgJ2lkJzogJ0VUSFVTRCcsICdzeW1ib2wnOiAnRVRIL1VTRCcsICdiYXNlJzogJ0VUSCcsICdxdW90ZSc6ICdVU0QnIH0sXG4gICAgICAgICdFVEgvRVVSJzogeyAnaWQnOiAnRVRIRVVSJywgJ3N5bWJvbCc6ICdFVEgvRVVSJywgJ2Jhc2UnOiAnRVRIJywgJ3F1b3RlJzogJ0VVUicgfSxcbiAgICAgICAgJ0VUSC9QTE4nOiB7ICdpZCc6ICdFVEhQTE4nLCAnc3ltYm9sJzogJ0VUSC9QTE4nLCAnYmFzZSc6ICdFVEgnLCAncXVvdGUnOiAnUExOJyB9LFxuICAgICAgICAnRVRIL0JUQyc6IHsgJ2lkJzogJ0VUSEJUQycsICdzeW1ib2wnOiAnRVRIL0JUQycsICdiYXNlJzogJ0VUSCcsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdMU0svVVNEJzogeyAnaWQnOiAnTFNLVVNEJywgJ3N5bWJvbCc6ICdMU0svVVNEJywgJ2Jhc2UnOiAnTFNLJywgJ3F1b3RlJzogJ1VTRCcgfSxcbiAgICAgICAgJ0xTSy9FVVInOiB7ICdpZCc6ICdMU0tFVVInLCAnc3ltYm9sJzogJ0xTSy9FVVInLCAnYmFzZSc6ICdMU0snLCAncXVvdGUnOiAnRVVSJyB9LFxuICAgICAgICAnTFNLL1BMTic6IHsgJ2lkJzogJ0xTS1BMTicsICdzeW1ib2wnOiAnTFNLL1BMTicsICdiYXNlJzogJ0xTSycsICdxdW90ZSc6ICdQTE4nIH0sXG4gICAgICAgICdMU0svQlRDJzogeyAnaWQnOiAnTFNLQlRDJywgJ3N5bWJvbCc6ICdMU0svQlRDJywgJ2Jhc2UnOiAnTFNLJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdEluZm8gKCk7XG4gICAgICAgIGxldCBiYWxhbmNlID0gcmVzcG9uc2VbJ2JhbGFuY2VzJ107XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogYmFsYW5jZSB9O1xuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IHRoaXMuY3VycmVuY2llcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gdGhpcy5jdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChjdXJyZW5jeSBpbiBiYWxhbmNlKSB7XG4gICAgICAgICAgICAgICAgYWNjb3VudFsnZnJlZSddID0gcGFyc2VGbG9hdCAoYmFsYW5jZVtjdXJyZW5jeV1bJ2F2YWlsYWJsZSddKTtcbiAgICAgICAgICAgICAgICBhY2NvdW50Wyd1c2VkJ10gPSBwYXJzZUZsb2F0IChiYWxhbmNlW2N1cnJlbmN5XVsnbG9ja2VkJ10pO1xuICAgICAgICAgICAgICAgIGFjY291bnRbJ3RvdGFsJ10gPSB0aGlzLnN1bSAoYWNjb3VudFsnZnJlZSddLCBhY2NvdW50Wyd1c2VkJ10pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IGF3YWl0IHRoaXMucHVibGljR2V0SWRPcmRlcmJvb2sgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnaWQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBvcmRlcmJvb2tbJ2JpZHMnXSxcbiAgICAgICAgICAgICdhc2tzJzogb3JkZXJib29rWydhc2tzJ10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGxldCB0aWNrZXIgPSBhd2FpdCB0aGlzLnB1YmxpY0dldElkVGlja2VyICh7XG4gICAgICAgICAgICAnaWQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydtYXgnXSksXG4gICAgICAgICAgICAnbG93JzogcGFyc2VGbG9hdCAodGlja2VyWydtaW4nXSksXG4gICAgICAgICAgICAnYmlkJzogcGFyc2VGbG9hdCAodGlja2VyWydiaWQnXSksXG4gICAgICAgICAgICAnYXNrJzogcGFyc2VGbG9hdCAodGlja2VyWydhc2snXSksXG4gICAgICAgICAgICAndndhcCc6IHBhcnNlRmxvYXQgKHRpY2tlclsndndhcCddKSxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xhc3QnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYXZlcmFnZSddKSxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWyd2b2x1bWUnXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0SWRUcmFkZXMgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnaWQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcblxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdFRyYWRlICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ3R5cGUnOiBzaWRlLFxuICAgICAgICAgICAgJ2N1cnJlbmN5JzogcFsnYmFzZSddLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IGFtb3VudCxcbiAgICAgICAgICAgICdwYXltZW50X2N1cnJlbmN5JzogcFsncXVvdGUnXSxcbiAgICAgICAgICAgICdyYXRlJzogcHJpY2UsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJpdmF0ZVBvc3RDYW5jZWwgKHsgJ2lkJzogaWQgfSk7XG4gICAgfSxcblxuICAgIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ11bYXBpXTtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgdXJsICs9ICcvJyArIHRoaXMuaW1wbG9kZVBhcmFtcyAocGF0aCwgcGFyYW1zKSArICcuanNvbic7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBib2R5ID0gdGhpcy51cmxlbmNvZGUgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAgICAgJ21ldGhvZCc6IHBhdGgsXG4gICAgICAgICAgICAgICAgJ21vbWVudCc6IHRoaXMubm9uY2UgKCksXG4gICAgICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgICAgICAgICdDb250ZW50LUxlbmd0aCc6IGJvZHkubGVuZ3RoLFxuICAgICAgICAgICAgICAgICdBUEktS2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ0FQSS1IYXNoJzogdGhpcy5obWFjICh0aGlzLmVuY29kZSAoYm9keSksIHRoaXMuZW5jb2RlICh0aGlzLnNlY3JldCksICdzaGE1MTInKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBiaXRiYXlzID0ge1xuXG4gICAgJ2lkJzogJ2JpdGJheXMnLFxuICAgICduYW1lJzogJ0JpdEJheXMnLFxuICAgICdjb3VudHJpZXMnOiBbICdDTicsICdHQicsICdISycsICdBVScsICdDQScgXSxcbiAgICAncmF0ZUxpbWl0JzogMTUwMCxcbiAgICAndmVyc2lvbic6ICd2MScsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc4MDg1OTktOTgzNjg3ZDItNjA1MS0xMWU3LThkOTUtODBkZmNiZTVjYmI0LmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly9iaXRiYXlzLmNvbS9hcGknLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vYml0YmF5cy5jb20nLFxuICAgICAgICAnZG9jJzogJ2h0dHBzOi8vYml0YmF5cy5jb20vaGVscC9hcGkvJyxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICd0aWNrZXInLFxuICAgICAgICAgICAgICAgICd0cmFkZXMnLFxuICAgICAgICAgICAgICAgICdkZXB0aCcsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAncHJpdmF0ZSc6IHtcbiAgICAgICAgICAgICdwb3N0JzogW1xuICAgICAgICAgICAgICAgICdjYW5jZWwnLFxuICAgICAgICAgICAgICAgICdpbmZvJyxcbiAgICAgICAgICAgICAgICAnb3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnb3JkZXInLFxuICAgICAgICAgICAgICAgICd0cmFuc2FjdGlvbnMnLFxuICAgICAgICAgICAgICAgICd0cmFkZScsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgJ21hcmtldHMnOiB7XG4gICAgICAgICdCVEMvVVNEJzogeyAnaWQnOiAnYnRjX3VzZCcsICdzeW1ib2wnOiAnQlRDL1VTRCcsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdVU0QnIH0sXG4gICAgICAgICdCVEMvQ05ZJzogeyAnaWQnOiAnYnRjX2NueScsICdzeW1ib2wnOiAnQlRDL0NOWScsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdDTlknIH0sXG4gICAgICAgICdPRFMvQlRDJzogeyAnaWQnOiAnb2RzX2J0YycsICdzeW1ib2wnOiAnT0RTL0JUQycsICdiYXNlJzogJ09EUycsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdMU0svQlRDJzogeyAnaWQnOiAnbHNrX2J0YycsICdzeW1ib2wnOiAnTFNLL0JUQycsICdiYXNlJzogJ0xTSycsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdMU0svQ05ZJzogeyAnaWQnOiAnbHNrX2NueScsICdzeW1ib2wnOiAnTFNLL0NOWScsICdiYXNlJzogJ0xTSycsICdxdW90ZSc6ICdDTlknIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RJbmZvICgpO1xuICAgICAgICBsZXQgYmFsYW5jZSA9IHJlc3BvbnNlWydyZXN1bHQnXVsnd2FsbGV0J107XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogYmFsYW5jZSB9O1xuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IHRoaXMuY3VycmVuY2llcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gdGhpcy5jdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IGxvd2VyY2FzZSA9IGN1cnJlbmN5LnRvTG93ZXJDYXNlICgpO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChsb3dlcmNhc2UgaW4gYmFsYW5jZSkge1xuICAgICAgICAgICAgICAgIGFjY291bnRbJ2ZyZWUnXSA9IHBhcnNlRmxvYXQgKGJhbGFuY2VbbG93ZXJjYXNlXVsnYXZhaWwnXSk7XG4gICAgICAgICAgICAgICAgYWNjb3VudFsndXNlZCddID0gcGFyc2VGbG9hdCAoYmFsYW5jZVtsb3dlcmNhc2VdWydsb2NrJ10pO1xuICAgICAgICAgICAgICAgIGFjY291bnRbJ3RvdGFsJ10gPSB0aGlzLnN1bSAoYWNjb3VudFsnZnJlZSddLCBhY2NvdW50Wyd1c2VkJ10pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXREZXB0aCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdtYXJrZXQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IHJlc3BvbnNlWydyZXN1bHQnXTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAob3JkZXJbMF0pO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBwYXJzZUZsb2F0IChvcmRlclsxXSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3NpZGVdLnB1c2ggKFsgcHJpY2UsIGFtb3VudCBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0VGlja2VyICh7XG4gICAgICAgICAgICAnbWFya2V0JzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aWNrZXIgPSByZXNwb25zZVsncmVzdWx0J107XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2J1eSddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3NlbGwnXSksXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xhc3QnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWyd2b2wnXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0VHJhZGVzICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ21hcmtldCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAnbWFya2V0JzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICdvcCc6IHNpZGUsXG4gICAgICAgICAgICAnYW1vdW50JzogYW1vdW50LFxuICAgICAgICB9O1xuICAgICAgICBpZiAodHlwZSA9PSAnbWFya2V0Jykge1xuICAgICAgICAgICAgb3JkZXJbJ29yZGVyX3R5cGUnXSA9IDE7XG4gICAgICAgICAgICBvcmRlclsncHJpY2UnXSA9IHByaWNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3JkZXJbJ29yZGVyX3R5cGUnXSA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdFRyYWRlICh0aGlzLmV4dGVuZCAob3JkZXIsIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXNwb25zZSxcbiAgICAgICAgICAgICdpZCc6IHJlc3BvbnNlWydyZXN1bHQnXVsnaWQnXS50b1N0cmluZyAoKSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0Q2FuY2VsICh7ICdpZCc6IGlkIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgJy8nICsgdGhpcy52ZXJzaW9uICsgJy8nICsgcGF0aDtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChwYXJhbXMpLmxlbmd0aClcbiAgICAgICAgICAgICAgICB1cmwgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHBhcmFtcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpO1xuICAgICAgICAgICAgYm9keSA9IHRoaXMudXJsZW5jb2RlICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgICAgICdub25jZSc6IG5vbmNlLFxuICAgICAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICAgICAgICAnQ29udGVudC1MZW5ndGgnOiBib2R5Lmxlbmd0aCxcbiAgICAgICAgICAgICAgICAnS2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ1NpZ24nOiB0aGlzLmhtYWMgKHRoaXMuZW5jb2RlIChib2R5KSwgdGhpcy5zZWNyZXQsICdzaGE1MTInKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgICAgICBpZiAoJ3N0YXR1cycgaW4gcmVzcG9uc2UpXG4gICAgICAgICAgICBpZiAocmVzcG9uc2VbJ3N0YXR1cyddID09IDIwMClcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGJpdGNvaW5jb2lkID0ge1xuXG4gICAgJ2lkJzogJ2JpdGNvaW5jb2lkJyxcbiAgICAnbmFtZSc6ICdCaXRjb2luLmNvLmlkJyxcbiAgICAnY291bnRyaWVzJzogJ0lEJywgLy8gSW5kb25lc2lhXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc3NjYxMzgtMDQzYzc3ODYtNWVjZi0xMWU3LTg4MmItODA5YzE0ZjM4YjUzLmpwZycsXG4gICAgICAgICdhcGknOiB7XG4gICAgICAgICAgICAncHVibGljJzogJ2h0dHBzOi8vdmlwLmJpdGNvaW4uY28uaWQvYXBpJyxcbiAgICAgICAgICAgICdwcml2YXRlJzogJ2h0dHBzOi8vdmlwLmJpdGNvaW4uY28uaWQvdGFwaScsXG4gICAgICAgIH0sXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly93d3cuYml0Y29pbi5jby5pZCcsXG4gICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAnaHR0cHM6Ly92aXAuYml0Y29pbi5jby5pZC9kb3dubG9hZHMvQklUQ09JTkNPSUQtQVBJLURPQ1VNRU5UQVRJT04ucGRmJyxcbiAgICAgICAgICAgICdodHRwczovL3ZpcC5iaXRjb2luLmNvLmlkL3RyYWRlX2FwaScsXG4gICAgICAgIF0sXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAne3BhaXJ9L3RpY2tlcicsXG4gICAgICAgICAgICAgICAgJ3twYWlyfS90cmFkZXMnLFxuICAgICAgICAgICAgICAgICd7cGFpcn0vZGVwdGgnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnZ2V0SW5mbycsXG4gICAgICAgICAgICAgICAgJ3RyYW5zSGlzdG9yeScsXG4gICAgICAgICAgICAgICAgJ3RyYWRlJyxcbiAgICAgICAgICAgICAgICAndHJhZGVIaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAnb3Blbk9yZGVycycsXG4gICAgICAgICAgICAgICAgJ2NhbmNlbE9yZGVyJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9JRFInOiAgeyAnaWQnOiAnYnRjX2lkcicsICdzeW1ib2wnOiAnQlRDL0lEUicsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdJRFInLCAnYmFzZUlkJzogJ2J0YycsICdxdW90ZUlkJzogJ2lkcicgfSxcbiAgICAgICAgJ0JUUy9CVEMnOiAgeyAnaWQnOiAnYnRzX2J0YycsICdzeW1ib2wnOiAnQlRTL0JUQycsICdiYXNlJzogJ0JUUycsICdxdW90ZSc6ICdCVEMnLCAnYmFzZUlkJzogJ2J0cycsICdxdW90ZUlkJzogJ2J0YycgfSxcbiAgICAgICAgJ0RBU0gvQlRDJzogeyAnaWQnOiAnZHJrX2J0YycsICdzeW1ib2wnOiAnREFTSC9CVEMnLCAnYmFzZSc6ICdEQVNIJywgJ3F1b3RlJzogJ0JUQycsICdiYXNlSWQnOiAnZHJrJywgJ3F1b3RlSWQnOiAnYnRjJyB9LFxuICAgICAgICAnRE9HRS9CVEMnOiB7ICdpZCc6ICdkb2dlX2J0YycsICdzeW1ib2wnOiAnRE9HRS9CVEMnLCAnYmFzZSc6ICdET0dFJywgJ3F1b3RlJzogJ0JUQycsICdiYXNlSWQnOiAnZG9nZScsICdxdW90ZUlkJzogJ2J0YycgfSxcbiAgICAgICAgJ0VUSC9CVEMnOiAgeyAnaWQnOiAnZXRoX2J0YycsICdzeW1ib2wnOiAnRVRIL0JUQycsICdiYXNlJzogJ0VUSCcsICdxdW90ZSc6ICdCVEMnLCAnYmFzZUlkJzogJ2V0aCcsICdxdW90ZUlkJzogJ2J0YycgfSxcbiAgICAgICAgJ0xUQy9CVEMnOiAgeyAnaWQnOiAnbHRjX2J0YycsICdzeW1ib2wnOiAnTFRDL0JUQycsICdiYXNlJzogJ0xUQycsICdxdW90ZSc6ICdCVEMnLCAnYmFzZUlkJzogJ2x0YycsICdxdW90ZUlkJzogJ2J0YycgfSxcbiAgICAgICAgJ05YVC9CVEMnOiAgeyAnaWQnOiAnbnh0X2J0YycsICdzeW1ib2wnOiAnTlhUL0JUQycsICdiYXNlJzogJ05YVCcsICdxdW90ZSc6ICdCVEMnLCAnYmFzZUlkJzogJ254dCcsICdxdW90ZUlkJzogJ2J0YycgfSxcbiAgICAgICAgJ1NUUi9CVEMnOiAgeyAnaWQnOiAnc3RyX2J0YycsICdzeW1ib2wnOiAnU1RSL0JUQycsICdiYXNlJzogJ1NUUicsICdxdW90ZSc6ICdCVEMnLCAnYmFzZUlkJzogJ3N0cicsICdxdW90ZUlkJzogJ2J0YycgfSxcbiAgICAgICAgJ05FTS9CVEMnOiAgeyAnaWQnOiAnbmVtX2J0YycsICdzeW1ib2wnOiAnTkVNL0JUQycsICdiYXNlJzogJ05FTScsICdxdW90ZSc6ICdCVEMnLCAnYmFzZUlkJzogJ25lbScsICdxdW90ZUlkJzogJ2J0YycgfSxcbiAgICAgICAgJ1hSUC9CVEMnOiAgeyAnaWQnOiAneHJwX2J0YycsICdzeW1ib2wnOiAnWFJQL0JUQycsICdiYXNlJzogJ1hSUCcsICdxdW90ZSc6ICdCVEMnLCAnYmFzZUlkJzogJ3hycCcsICdxdW90ZUlkJzogJ2J0YycgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdEdldEluZm8gKCk7XG4gICAgICAgIGxldCBiYWxhbmNlID0gcmVzcG9uc2VbJ3JldHVybiddWydiYWxhbmNlJ107XG4gICAgICAgIGxldCBmcm96ZW4gPSByZXNwb25zZVsncmV0dXJuJ11bJ2JhbGFuY2VfaG9sZCddO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGJhbGFuY2UgfTtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCB0aGlzLmN1cnJlbmNpZXMubGVuZ3RoOyBjKyspIHtcbiAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IHRoaXMuY3VycmVuY2llc1tjXTtcbiAgICAgICAgICAgIGxldCBsb3dlcmNhc2UgPSBjdXJyZW5jeS50b0xvd2VyQ2FzZSAoKTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd1c2VkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAobG93ZXJjYXNlIGluIGJhbGFuY2UpIHtcbiAgICAgICAgICAgICAgICBhY2NvdW50WydmcmVlJ10gPSBwYXJzZUZsb2F0IChiYWxhbmNlW2xvd2VyY2FzZV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGxvd2VyY2FzZSBpbiBmcm96ZW4pIHtcbiAgICAgICAgICAgICAgICBhY2NvdW50Wyd1c2VkJ10gPSBwYXJzZUZsb2F0IChmcm96ZW5bbG93ZXJjYXNlXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhY2NvdW50Wyd0b3RhbCddID0gdGhpcy5zdW0gKGFjY291bnRbJ2ZyZWUnXSwgYWNjb3VudFsndXNlZCddKTtcbiAgICAgICAgICAgIHJlc3VsdFtjdXJyZW5jeV0gPSBhY2NvdW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFBhaXJEZXB0aCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdwYWlyJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdiaWRzJzogW10sXG4gICAgICAgICAgICAnYXNrcyc6IFtdLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHNpZGVzID0geyAnYmlkcyc6ICdidXknLCAnYXNrcyc6ICdzZWxsJyB9O1xuICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzIChzaWRlcyk7XG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwga2V5cy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgbGV0IGtleSA9IGtleXNba107XG4gICAgICAgICAgICBsZXQgc2lkZSA9IHNpZGVzW2tleV07XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAob3JkZXJbMF0pO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBwYXJzZUZsb2F0IChvcmRlclsxXSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W2tleV0ucHVzaCAoWyBwcmljZSwgYW1vdW50IF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgbGV0IHBhaXIgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRQYWlyVGlja2VyICh7XG4gICAgICAgICAgICAncGFpcic6IHBhaXJbJ2lkJ10sXG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgdGlja2VyID0gcmVzcG9uc2VbJ3RpY2tlciddO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gcGFyc2VGbG9hdCAodGlja2VyWydzZXJ2ZXJfdGltZSddKSAqIDEwMDA7XG4gICAgICAgIGxldCBiYXNlVm9sdW1lID0gJ3ZvbF8nICsgcGFpclsnYmFzZUlkJ10udG9Mb3dlckNhc2UgKCk7XG4gICAgICAgIGxldCBxdW90ZVZvbHVtZSA9ICd2b2xfJyArIHBhaXJbJ3F1b3RlSWQnXS50b0xvd2VyQ2FzZSAoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2J1eSddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3NlbGwnXSksXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xhc3QnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyW2Jhc2VWb2x1bWVdKSxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlcltxdW90ZVZvbHVtZV0pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldFBhaXJUcmFkZXMgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAncGFpcic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAncGFpcic6IHBbJ2lkJ10sXG4gICAgICAgICAgICAndHlwZSc6IHNpZGUsXG4gICAgICAgICAgICAncHJpY2UnOiBwcmljZSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IGJhc2UgPSBwWydiYXNlJ10udG9Mb3dlckNhc2UgKCk7XG4gICAgICAgIG9yZGVyW2Jhc2VdID0gYW1vdW50O1xuICAgICAgICBsZXQgcmVzdWx0ID0gdGhpcy5wcml2YXRlUG9zdFRyYWRlICh0aGlzLmV4dGVuZCAob3JkZXIsIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXN1bHQsXG4gICAgICAgICAgICAnaWQnOiByZXN1bHRbJ3JldHVybiddWydvcmRlcl9pZCddLnRvU3RyaW5nICgpLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0Q2FuY2VsT3JkZXIgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnaWQnOiBpZCxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ11bYXBpXTtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgdXJsICs9ICcvJyArIHRoaXMuaW1wbG9kZVBhcmFtcyAocGF0aCwgcGFyYW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLnVybGVuY29kZSAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICAgICAnbWV0aG9kJzogcGF0aCxcbiAgICAgICAgICAgICAgICAnbm9uY2UnOiB0aGlzLm5vbmNlICgpLFxuICAgICAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICAgICAgICAnQ29udGVudC1MZW5ndGgnOiBib2R5Lmxlbmd0aCxcbiAgICAgICAgICAgICAgICAnS2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ1NpZ24nOiB0aGlzLmhtYWMgKHRoaXMuZW5jb2RlIChib2R5KSwgdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSwgJ3NoYTUxMicpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgICAgIGlmICgnZXJyb3InIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyByZXNwb25zZVsnZXJyb3InXSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBiaXRmaW5leCA9IHtcblxuICAgICdpZCc6ICdiaXRmaW5leCcsXG4gICAgJ25hbWUnOiAnQml0ZmluZXgnLFxuICAgICdjb3VudHJpZXMnOiAnVVMnLFxuICAgICd2ZXJzaW9uJzogJ3YxJyxcbiAgICAncmF0ZUxpbWl0JzogMTUwMCxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yNzc2NjI0NC1lMzI4YTUwYy01ZWQyLTExZTctOTQ3Yi0wNDE0MTY1NzliYjMuanBnJyxcbiAgICAgICAgJ2FwaSc6ICdodHRwczovL2FwaS5iaXRmaW5leC5jb20nLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vd3d3LmJpdGZpbmV4LmNvbScsXG4gICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAnaHR0cHM6Ly9iaXRmaW5leC5yZWFkbWUuaW8vdjEvZG9jcycsXG4gICAgICAgICAgICAnaHR0cHM6Ly9iaXRmaW5leC5yZWFkbWUuaW8vdjIvZG9jcycsXG4gICAgICAgICAgICAnaHR0cHM6Ly9naXRodWIuY29tL2JpdGZpbmV4Y29tL2JpdGZpbmV4LWFwaS1ub2RlJyxcbiAgICAgICAgXSxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdib29rL3tzeW1ib2x9JyxcbiAgICAgICAgICAgICAgICAnY2FuZGxlcy97c3ltYm9sfScsXG4gICAgICAgICAgICAgICAgJ2xlbmRib29rL3tjdXJyZW5jeX0nLFxuICAgICAgICAgICAgICAgICdsZW5kcy97Y3VycmVuY3l9JyxcbiAgICAgICAgICAgICAgICAncHVidGlja2VyL3tzeW1ib2x9JyxcbiAgICAgICAgICAgICAgICAnc3RhdHMve3N5bWJvbH0nLFxuICAgICAgICAgICAgICAgICdzeW1ib2xzJyxcbiAgICAgICAgICAgICAgICAnc3ltYm9sc19kZXRhaWxzJyxcbiAgICAgICAgICAgICAgICAndG9kYXknLFxuICAgICAgICAgICAgICAgICd0cmFkZXMve3N5bWJvbH0nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnYWNjb3VudF9pbmZvcycsXG4gICAgICAgICAgICAgICAgJ2JhbGFuY2VzJyxcbiAgICAgICAgICAgICAgICAnYmFza2V0X21hbmFnZScsXG4gICAgICAgICAgICAgICAgJ2NyZWRpdHMnLFxuICAgICAgICAgICAgICAgICdkZXBvc2l0L25ldycsXG4gICAgICAgICAgICAgICAgJ2Z1bmRpbmcvY2xvc2UnLFxuICAgICAgICAgICAgICAgICdoaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAnaGlzdG9yeS9tb3ZlbWVudHMnLFxuICAgICAgICAgICAgICAgICdrZXlfaW5mbycsXG4gICAgICAgICAgICAgICAgJ21hcmdpbl9pbmZvcycsXG4gICAgICAgICAgICAgICAgJ215dHJhZGVzJyxcbiAgICAgICAgICAgICAgICAnb2ZmZXIvY2FuY2VsJyxcbiAgICAgICAgICAgICAgICAnb2ZmZXIvbmV3JyxcbiAgICAgICAgICAgICAgICAnb2ZmZXIvc3RhdHVzJyxcbiAgICAgICAgICAgICAgICAnb2ZmZXJzJyxcbiAgICAgICAgICAgICAgICAnb3JkZXIvY2FuY2VsJyxcbiAgICAgICAgICAgICAgICAnb3JkZXIvY2FuY2VsL2FsbCcsXG4gICAgICAgICAgICAgICAgJ29yZGVyL2NhbmNlbC9tdWx0aScsXG4gICAgICAgICAgICAgICAgJ29yZGVyL2NhbmNlbC9yZXBsYWNlJyxcbiAgICAgICAgICAgICAgICAnb3JkZXIvbmV3JyxcbiAgICAgICAgICAgICAgICAnb3JkZXIvbmV3L211bHRpJyxcbiAgICAgICAgICAgICAgICAnb3JkZXIvc3RhdHVzJyxcbiAgICAgICAgICAgICAgICAnb3JkZXJzJyxcbiAgICAgICAgICAgICAgICAncG9zaXRpb24vY2xhaW0nLFxuICAgICAgICAgICAgICAgICdwb3NpdGlvbnMnLFxuICAgICAgICAgICAgICAgICdzdW1tYXJ5JyxcbiAgICAgICAgICAgICAgICAndGFrZW5fZnVuZHMnLFxuICAgICAgICAgICAgICAgICd0b3RhbF90YWtlbl9mdW5kcycsXG4gICAgICAgICAgICAgICAgJ3RyYW5zZmVyJyxcbiAgICAgICAgICAgICAgICAndW51c2VkX3Rha2VuX2Z1bmRzJyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXcnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hNYXJrZXRzICgpIHtcbiAgICAgICAgbGV0IG1hcmtldHMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFN5bWJvbHNEZXRhaWxzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgbWFya2V0cy5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IG1hcmtldHNbcF07XG4gICAgICAgICAgICBsZXQgaWQgPSBtYXJrZXRbJ3BhaXInXS50b1VwcGVyQ2FzZSAoKTtcbiAgICAgICAgICAgIGxldCBiYXNlSWQgPSBpZC5zbGljZSAoMCwgMyk7XG4gICAgICAgICAgICBsZXQgcXVvdGVJZCA9IGlkLnNsaWNlICgzLCA2KTtcbiAgICAgICAgICAgIGxldCBiYXNlID0gYmFzZUlkO1xuICAgICAgICAgICAgbGV0IHF1b3RlID0gcXVvdGVJZDtcbiAgICAgICAgICAgIC8vIGlzc3VlICM0IEJpdGZpbmV4IG5hbWVzIERhc2ggYXMgRFNILCBpbnN0ZWFkIG9mIERBU0hcbiAgICAgICAgICAgIGlmIChiYXNlID09ICdEU0gnKVxuICAgICAgICAgICAgICAgIGJhc2UgPSAnREFTSCc7XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gYmFzZSArICcvJyArIHF1b3RlO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2ggKHtcbiAgICAgICAgICAgICAgICAnaWQnOiBpZCxcbiAgICAgICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgICAgICdiYXNlJzogYmFzZSxcbiAgICAgICAgICAgICAgICAncXVvdGUnOiBxdW90ZSxcbiAgICAgICAgICAgICAgICAnYmFzZUlkJzogYmFzZUlkLFxuICAgICAgICAgICAgICAgICdxdW90ZUlkJzogcXVvdGVJZCxcbiAgICAgICAgICAgICAgICAnaW5mbyc6IG1hcmtldCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RCYWxhbmNlcyAoKTtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0ge307XG4gICAgICAgIGZvciAobGV0IGIgPSAwOyBiIDwgcmVzcG9uc2UubGVuZ3RoOyBiKyspIHtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0gcmVzcG9uc2VbYl07XG4gICAgICAgICAgICBpZiAoYWNjb3VudFsndHlwZSddID09ICdleGNoYW5nZScpIHtcbiAgICAgICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBhY2NvdW50WydjdXJyZW5jeSddO1xuICAgICAgICAgICAgICAgIC8vIGlzc3VlICM0IEJpdGZpbmV4IG5hbWVzIERhc2ggYXMgRFNILCBpbnN0ZWFkIG9mIERBU0hcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVuY3kgPT0gJ0RTSCcpXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbmN5ID0gJ0RBU0gnO1xuICAgICAgICAgICAgICAgIGxldCB1cHBlcmNhc2UgPSBjdXJyZW5jeS50b1VwcGVyQ2FzZSAoKTtcbiAgICAgICAgICAgICAgICBiYWxhbmNlc1t1cHBlcmNhc2VdID0gYWNjb3VudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IHJlc3BvbnNlIH07XG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgdGhpcy5jdXJyZW5jaWVzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSB0aGlzLmN1cnJlbmNpZXNbY107XG4gICAgICAgICAgICBsZXQgYWNjb3VudCA9IHtcbiAgICAgICAgICAgICAgICAnZnJlZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAndXNlZCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAndG90YWwnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGN1cnJlbmN5IGluIGJhbGFuY2VzKSB7XG4gICAgICAgICAgICAgICAgYWNjb3VudFsnZnJlZSddID0gcGFyc2VGbG9hdCAoYmFsYW5jZXNbY3VycmVuY3ldWydhdmFpbGFibGUnXSk7XG4gICAgICAgICAgICAgICAgYWNjb3VudFsndG90YWwnXSA9IHBhcnNlRmxvYXQgKGJhbGFuY2VzW2N1cnJlbmN5XVsnYW1vdW50J10pO1xuICAgICAgICAgICAgICAgIGFjY291bnRbJ3VzZWQnXSA9IGFjY291bnRbJ3RvdGFsJ10gLSBhY2NvdW50WydmcmVlJ107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRCb29rU3ltYm9sICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ3N5bWJvbCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IFtdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaWRlcyA9IFsgJ2JpZHMnLCAnYXNrcycgXTtcbiAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBzaWRlcy5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1tzXTtcbiAgICAgICAgICAgIGxldCBvcmRlcnMgPSBvcmRlcmJvb2tbc2lkZV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBvcmRlciA9IG9yZGVyc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgcHJpY2UgPSBwYXJzZUZsb2F0IChvcmRlclsncHJpY2UnXSk7XG4gICAgICAgICAgICAgICAgbGV0IGFtb3VudCA9IHBhcnNlRmxvYXQgKG9yZGVyWydhbW91bnQnXSk7XG4gICAgICAgICAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHBhcnNlSW50IChwYXJzZUZsb2F0IChvcmRlclsndGltZXN0YW1wJ10pKTtcbiAgICAgICAgICAgICAgICByZXN1bHRbc2lkZV0ucHVzaCAoWyBwcmljZSwgYW1vdW50LCB0aW1lc3RhbXAgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgdGlja2VyID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRQdWJ0aWNrZXJTeW1ib2wgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHBhcnNlRmxvYXQgKHRpY2tlclsndGltZXN0YW1wJ10pICogMTAwMDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2JpZCddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2FzayddKSxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdF9wcmljZSddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogcGFyc2VGbG9hdCAodGlja2VyWydtaWQnXSksXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndm9sdW1lJ10pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIHBhcnNlVHJhZGUgKHRyYWRlLCBtYXJrZXQpIHtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRyYWRlWyd0aW1lc3RhbXAnXSAqIDEwMDA7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaWQnOiB0cmFkZVsndGlkJ10udG9TdHJpbmcgKCksXG4gICAgICAgICAgICAnaW5mbyc6IHRyYWRlLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdzeW1ib2wnOiBtYXJrZXRbJ3N5bWJvbCddLFxuICAgICAgICAgICAgJ3R5cGUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnc2lkZSc6IHRyYWRlWyd0eXBlJ10sXG4gICAgICAgICAgICAncHJpY2UnOiBwYXJzZUZsb2F0ICh0cmFkZVsncHJpY2UnXSksXG4gICAgICAgICAgICAnYW1vdW50JzogcGFyc2VGbG9hdCAodHJhZGVbJ2Ftb3VudCddKSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG0gPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHRyYWRlcyA9IGF3YWl0IHRoaXMucHVibGljR2V0VHJhZGVzU3ltYm9sICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ3N5bWJvbCc6IG1bJ2lkJ10sXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVRyYWRlcyAodHJhZGVzLCBtKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG9yZGVyID0ge1xuICAgICAgICAgICAgJ3N5bWJvbCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgICAgICAnYW1vdW50JzogYW1vdW50LnRvU3RyaW5nICgpLFxuICAgICAgICAgICAgJ3NpZGUnOiBzaWRlLFxuICAgICAgICAgICAgJ3R5cGUnOiAnZXhjaGFuZ2UgJyArIHR5cGUsXG4gICAgICAgICAgICAnb2Nvb3JkZXInOiBmYWxzZSxcbiAgICAgICAgICAgICdidXlfcHJpY2Vfb2NvJzogMCxcbiAgICAgICAgICAgICdzZWxsX3ByaWNlX29jbyc6IDAsXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlID09ICdtYXJrZXQnKSB7XG4gICAgICAgICAgICBvcmRlclsncHJpY2UnXSA9IHRoaXMubm9uY2UgKCkudG9TdHJpbmcgKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvcmRlclsncHJpY2UnXSA9IHByaWNlLnRvU3RyaW5nICgpO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0T3JkZXJOZXcgKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3VsdCxcbiAgICAgICAgICAgICdpZCc6IHJlc3VsdFsnb3JkZXJfaWQnXS50b1N0cmluZyAoKSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0T3JkZXJDYW5jZWwgKHsgJ29yZGVyX2lkJzogaWQgfSk7XG4gICAgfSxcblxuICAgIG5vbmNlICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCByZXF1ZXN0ID0gJy8nICsgdGhpcy52ZXJzaW9uICsgJy8nICsgdGhpcy5pbXBsb2RlUGFyYW1zIChwYXRoLCBwYXJhbXMpO1xuICAgICAgICBsZXQgcXVlcnkgPSB0aGlzLm9taXQgKHBhcmFtcywgdGhpcy5leHRyYWN0UGFyYW1zIChwYXRoKSk7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgcmVxdWVzdDtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChxdWVyeSkubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG5vbmNlID0gdGhpcy5ub25jZSAoKTtcbiAgICAgICAgICAgIHF1ZXJ5ID0gdGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICAgICAnbm9uY2UnOiBub25jZS50b1N0cmluZyAoKSxcbiAgICAgICAgICAgICAgICAncmVxdWVzdCc6IHJlcXVlc3QsXG4gICAgICAgICAgICB9LCBxdWVyeSk7XG4gICAgICAgICAgICBxdWVyeSA9IHRoaXMuanNvbiAocXVlcnkpO1xuICAgICAgICAgICAgcXVlcnkgPSB0aGlzLmVuY29kZSAocXVlcnkpO1xuICAgICAgICAgICAgbGV0IHBheWxvYWQgPSB0aGlzLnN0cmluZ1RvQmFzZTY0IChxdWVyeSk7XG4gICAgICAgICAgICBsZXQgc2VjcmV0ID0gdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KTtcbiAgICAgICAgICAgIGxldCBzaWduYXR1cmUgPSB0aGlzLmhtYWMgKHBheWxvYWQsIHNlY3JldCwgJ3NoYTM4NCcpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnWC1CRlgtQVBJS0VZJzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ1gtQkZYLVBBWUxPQUQnOiB0aGlzLmRlY29kZSAocGF5bG9hZCksXG4gICAgICAgICAgICAgICAgJ1gtQkZYLVNJR05BVFVSRSc6IHNpZ25hdHVyZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgICAgICBpZiAoJ21lc3NhZ2UnIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBiaXRmbHllciA9IHtcblxuICAgICdpZCc6ICdiaXRmbHllcicsXG4gICAgJ25hbWUnOiAnYml0Rmx5ZXInLFxuICAgICdjb3VudHJpZXMnOiAnSlAnLFxuICAgICd2ZXJzaW9uJzogJ3YxJyxcbiAgICAncmF0ZUxpbWl0JzogNTAwLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI4MDUxNjQyLTU2MTU0MTgyLTY2MGUtMTFlNy05YjBkLTYwNDJkMWU2ZWRkOC5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vYXBpLmJpdGZseWVyLmpwJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL2JpdGZseWVyLmpwJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL2JpdGZseWVyLmpwL0FQSScsXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnZ2V0bWFya2V0cycsICAgIC8vIG9yICdtYXJrZXRzJ1xuICAgICAgICAgICAgICAgICdnZXRib2FyZCcsICAgICAgLy8gb3IgJ2JvYXJkJ1xuICAgICAgICAgICAgICAgICdnZXR0aWNrZXInLCAgICAgLy8gb3IgJ3RpY2tlcidcbiAgICAgICAgICAgICAgICAnZ2V0ZXhlY3V0aW9ucycsIC8vIG9yICdleGVjdXRpb25zJ1xuICAgICAgICAgICAgICAgICdnZXRoZWFsdGgnLFxuICAgICAgICAgICAgICAgICdnZXRjaGF0cycsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAncHJpdmF0ZSc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ2dldHBlcm1pc3Npb25zJyxcbiAgICAgICAgICAgICAgICAnZ2V0YmFsYW5jZScsXG4gICAgICAgICAgICAgICAgJ2dldGNvbGxhdGVyYWwnLFxuICAgICAgICAgICAgICAgICdnZXRjb2xsYXRlcmFsYWNjb3VudHMnLFxuICAgICAgICAgICAgICAgICdnZXRhZGRyZXNzZXMnLFxuICAgICAgICAgICAgICAgICdnZXRjb2luaW5zJyxcbiAgICAgICAgICAgICAgICAnZ2V0Y29pbm91dHMnLFxuICAgICAgICAgICAgICAgICdnZXRiYW5rYWNjb3VudHMnLFxuICAgICAgICAgICAgICAgICdnZXRkZXBvc2l0cycsXG4gICAgICAgICAgICAgICAgJ2dldHdpdGhkcmF3YWxzJyxcbiAgICAgICAgICAgICAgICAnZ2V0Y2hpbGRvcmRlcnMnLFxuICAgICAgICAgICAgICAgICdnZXRwYXJlbnRvcmRlcnMnLFxuICAgICAgICAgICAgICAgICdnZXRwYXJlbnRvcmRlcicsXG4gICAgICAgICAgICAgICAgJ2dldGV4ZWN1dGlvbnMnLFxuICAgICAgICAgICAgICAgICdnZXRwb3NpdGlvbnMnLFxuICAgICAgICAgICAgICAgICdnZXR0cmFkaW5nY29tbWlzc2lvbicsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ3NlbmRjb2luJyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXcnLFxuICAgICAgICAgICAgICAgICdzZW5kY2hpbGRvcmRlcicsXG4gICAgICAgICAgICAgICAgJ2NhbmNlbGNoaWxkb3JkZXInLFxuICAgICAgICAgICAgICAgICdzZW5kcGFyZW50b3JkZXInLFxuICAgICAgICAgICAgICAgICdjYW5jZWxwYXJlbnRvcmRlcicsXG4gICAgICAgICAgICAgICAgJ2NhbmNlbGFsbGNoaWxkb3JkZXJzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoTWFya2V0cyAoKSB7XG4gICAgICAgIGxldCBtYXJrZXRzID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgbWFya2V0cy5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IG1hcmtldHNbcF07XG4gICAgICAgICAgICBsZXQgaWQgPSBtYXJrZXRbJ3Byb2R1Y3RfY29kZSddO1xuICAgICAgICAgICAgbGV0IGN1cnJlbmNpZXMgPSBpZC5zcGxpdCAoJ18nKTtcbiAgICAgICAgICAgIGxldCBiYXNlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgbGV0IHF1b3RlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgbGV0IHN5bWJvbCA9IGlkO1xuICAgICAgICAgICAgbGV0IG51bUN1cnJlbmNpZXMgPSBjdXJyZW5jaWVzLmxlbmd0aDtcbiAgICAgICAgICAgIGlmIChudW1DdXJyZW5jaWVzID09IDIpIHtcbiAgICAgICAgICAgICAgICBiYXNlID0gY3VycmVuY2llc1swXTtcbiAgICAgICAgICAgICAgICBxdW90ZSA9IGN1cnJlbmNpZXNbMV07XG4gICAgICAgICAgICAgICAgc3ltYm9sID0gYmFzZSArICcvJyArIHF1b3RlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0LnB1c2ggKHtcbiAgICAgICAgICAgICAgICAnaWQnOiBpZCxcbiAgICAgICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgICAgICdiYXNlJzogYmFzZSxcbiAgICAgICAgICAgICAgICAncXVvdGUnOiBxdW90ZSxcbiAgICAgICAgICAgICAgICAnaW5mbyc6IG1hcmtldCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZUdldEJhbGFuY2UgKCk7XG4gICAgICAgIGxldCBiYWxhbmNlcyA9IHt9O1xuICAgICAgICBmb3IgKGxldCBiID0gMDsgYiA8IHJlc3BvbnNlLmxlbmd0aDsgYisrKSB7XG4gICAgICAgICAgICBsZXQgYWNjb3VudCA9IHJlc3BvbnNlW2JdO1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gYWNjb3VudFsnY3VycmVuY3lfY29kZSddO1xuICAgICAgICAgICAgYmFsYW5jZXNbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IHJlc3BvbnNlIH07XG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgdGhpcy5jdXJyZW5jaWVzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSB0aGlzLmN1cnJlbmNpZXNbY107XG4gICAgICAgICAgICBsZXQgYWNjb3VudCA9IHtcbiAgICAgICAgICAgICAgICAnZnJlZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAndXNlZCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAndG90YWwnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGN1cnJlbmN5IGluIGJhbGFuY2VzKSB7XG4gICAgICAgICAgICAgICAgYWNjb3VudFsndG90YWwnXSA9IGJhbGFuY2VzW2N1cnJlbmN5XVsnYW1vdW50J107XG4gICAgICAgICAgICAgICAgYWNjb3VudFsnZnJlZSddID0gYmFsYW5jZXNbY3VycmVuY3ldWydhdmFpbGFibGUnXTtcbiAgICAgICAgICAgICAgICBhY2NvdW50Wyd1c2VkJ10gPSBhY2NvdW50Wyd0b3RhbCddIC0gYWNjb3VudFsnZnJlZSddO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IGF3YWl0IHRoaXMucHVibGljR2V0Qm9hcmQgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAncHJvZHVjdF9jb2RlJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdiaWRzJzogW10sXG4gICAgICAgICAgICAnYXNrcyc6IFtdLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHNpZGVzID0gWyAnYmlkcycsICdhc2tzJyBdO1xuICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IHNpZGVzLmxlbmd0aDsgcysrKSB7XG4gICAgICAgICAgICBsZXQgc2lkZSA9IHNpZGVzW3NdO1xuICAgICAgICAgICAgbGV0IG9yZGVycyA9IG9yZGVyYm9va1tzaWRlXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9yZGVyID0gb3JkZXJzW2ldO1xuICAgICAgICAgICAgICAgIGxldCBwcmljZSA9IHBhcnNlRmxvYXQgKG9yZGVyWydwcmljZSddKTtcbiAgICAgICAgICAgICAgICBsZXQgYW1vdW50ID0gcGFyc2VGbG9hdCAob3JkZXJbJ3NpemUnXSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3NpZGVdLnB1c2ggKFsgcHJpY2UsIGFtb3VudCBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCB0aWNrZXIgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFRpY2tlciAoe1xuICAgICAgICAgICAgJ3Byb2R1Y3RfY29kZSc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5wYXJzZTg2MDEgKHRpY2tlclsndGltZXN0YW1wJ10pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xvdyc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2Jlc3RfYmlkJ10pLFxuICAgICAgICAgICAgJ2Fzayc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYmVzdF9hc2snXSksXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2x0cCddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbHVtZV9ieV9wcm9kdWN0J10pLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWyd2b2x1bWUnXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0RXhlY3V0aW9ucyAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdwcm9kdWN0X2NvZGUnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG9yZGVyID0ge1xuICAgICAgICAgICAgJ3Byb2R1Y3RfY29kZSc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgICAgICAnY2hpbGRfb3JkZXJfdHlwZSc6IHR5cGUudG9VcHBlckNhc2UgKCksXG4gICAgICAgICAgICAnc2lkZSc6IHNpZGUudG9VcHBlckNhc2UgKCksXG4gICAgICAgICAgICAncHJpY2UnOiBwcmljZSxcbiAgICAgICAgICAgICdzaXplJzogYW1vdW50LFxuICAgICAgICB9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdFNlbmRjaGlsZG9yZGVyICh0aGlzLmV4dGVuZCAob3JkZXIsIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXN1bHQsXG4gICAgICAgICAgICAnaWQnOiByZXN1bHRbJ2NoaWxkX29yZGVyX2FjY2VwdGFuY2VfaWQnXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdENhbmNlbGNoaWxkb3JkZXIgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAncGFyZW50X29yZGVyX2lkJzogaWQsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCByZXF1ZXN0ID0gJy8nICsgdGhpcy52ZXJzaW9uICsgJy8nO1xuICAgICAgICBpZiAoYXBpID09ICdwcml2YXRlJylcbiAgICAgICAgICAgIHJlcXVlc3QgKz0gJ21lLyc7XG4gICAgICAgIHJlcXVlc3QgKz0gcGF0aDtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ10gKyByZXF1ZXN0O1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHBhcmFtcykubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocGFyYW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCkudG9TdHJpbmcgKCk7XG4gICAgICAgICAgICBib2R5ID0gdGhpcy5qc29uIChwYXJhbXMpO1xuICAgICAgICAgICAgbGV0IGF1dGggPSBbIG5vbmNlLCBtZXRob2QsIHJlcXVlc3QsIGJvZHkgXS5qb2luICgnJyk7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdBQ0NFU1MtS0VZJzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ0FDQ0VTUy1USU1FU1RBTVAnOiBub25jZSxcbiAgICAgICAgICAgICAgICAnQUNDRVNTLVNJR04nOiB0aGlzLmhtYWMgKHRoaXMuZW5jb2RlIChhdXRoKSwgdGhpcy5zZWNyZXQpLFxuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgYml0bGlzaCA9IHtcblxuICAgICdpZCc6ICdiaXRsaXNoJyxcbiAgICAnbmFtZSc6ICdiaXRsaXNoJyxcbiAgICAnY291bnRyaWVzJzogWyAnR0InLCAnRVUnLCAnUlUnIF0sXG4gICAgJ3JhdGVMaW1pdCc6IDE1MDAsXG4gICAgJ3ZlcnNpb24nOiAndjEnLFxuICAgICdoYXNGZXRjaFRpY2tlcnMnOiB0cnVlLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2Mjc1LWRjZmM2YzMwLTVlZDMtMTFlNy04MzlkLTAwYTg0NjM4NWQwYi5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vYml0bGlzaC5jb20vYXBpJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL2JpdGxpc2guY29tJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL2JpdGxpc2guY29tL2FwaScsXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnaW5zdHJ1bWVudHMnLFxuICAgICAgICAgICAgICAgICdvaGxjdicsXG4gICAgICAgICAgICAgICAgJ3BhaXJzJyxcbiAgICAgICAgICAgICAgICAndGlja2VycycsXG4gICAgICAgICAgICAgICAgJ3RyYWRlc19kZXB0aCcsXG4gICAgICAgICAgICAgICAgJ3RyYWRlc19oaXN0b3J5JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2FjY291bnRzX29wZXJhdGlvbnMnLFxuICAgICAgICAgICAgICAgICdiYWxhbmNlJyxcbiAgICAgICAgICAgICAgICAnY2FuY2VsX3RyYWRlJyxcbiAgICAgICAgICAgICAgICAnY2FuY2VsX3RyYWRlc19ieV9pZHMnLFxuICAgICAgICAgICAgICAgICdjYW5jZWxfYWxsX3RyYWRlcycsXG4gICAgICAgICAgICAgICAgJ2NyZWF0ZV9iY29kZScsXG4gICAgICAgICAgICAgICAgJ2NyZWF0ZV90ZW1wbGF0ZV93YWxsZXQnLFxuICAgICAgICAgICAgICAgICdjcmVhdGVfdHJhZGUnLFxuICAgICAgICAgICAgICAgICdkZXBvc2l0JyxcbiAgICAgICAgICAgICAgICAnbGlzdF9hY2NvdW50c19vcGVyYXRpb25zX2Zyb21fdHMnLFxuICAgICAgICAgICAgICAgICdsaXN0X2FjdGl2ZV90cmFkZXMnLFxuICAgICAgICAgICAgICAgICdsaXN0X2Jjb2RlcycsXG4gICAgICAgICAgICAgICAgJ2xpc3RfbXlfbWF0Y2hlc19mcm9tX3RzJyxcbiAgICAgICAgICAgICAgICAnbGlzdF9teV90cmFkZXMnLFxuICAgICAgICAgICAgICAgICdsaXN0X215X3RyYWRzX2Zyb21fdHMnLFxuICAgICAgICAgICAgICAgICdsaXN0X3BheW1lbnRfbWV0aG9kcycsXG4gICAgICAgICAgICAgICAgJ2xpc3RfcGF5bWVudHMnLFxuICAgICAgICAgICAgICAgICdyZWRlZW1fY29kZScsXG4gICAgICAgICAgICAgICAgJ3Jlc2lnbicsXG4gICAgICAgICAgICAgICAgJ3NpZ25pbicsXG4gICAgICAgICAgICAgICAgJ3NpZ25vdXQnLFxuICAgICAgICAgICAgICAgICd0cmFkZV9kZXRhaWxzJyxcbiAgICAgICAgICAgICAgICAndHJhZGVfb3B0aW9ucycsXG4gICAgICAgICAgICAgICAgJ3dpdGhkcmF3JyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXdfYnlfaWQnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hNYXJrZXRzICgpIHtcbiAgICAgICAgbGV0IG1hcmtldHMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFBhaXJzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMgKG1hcmtldHMpO1xuICAgICAgICBmb3IgKGxldCBwID0gMDsgcCA8IGtleXMubGVuZ3RoOyBwKyspIHtcbiAgICAgICAgICAgIGxldCBtYXJrZXQgPSBtYXJrZXRzW2tleXNbcF1dO1xuICAgICAgICAgICAgbGV0IGlkID0gbWFya2V0WydpZCddO1xuICAgICAgICAgICAgbGV0IHN5bWJvbCA9IG1hcmtldFsnbmFtZSddO1xuICAgICAgICAgICAgbGV0IFsgYmFzZSwgcXVvdGUgXSA9IHN5bWJvbC5zcGxpdCAoJy8nKTtcbiAgICAgICAgICAgIC8vIGlzc3VlICM0IGJpdGxpc2ggbmFtZXMgRGFzaCBhcyBEU0gsIGluc3RlYWQgb2YgREFTSFxuICAgICAgICAgICAgaWYgKGJhc2UgPT0gJ0RTSCcpXG4gICAgICAgICAgICAgICAgYmFzZSA9ICdEQVNIJztcbiAgICAgICAgICAgIHN5bWJvbCA9IGJhc2UgKyAnLycgKyBxdW90ZTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoICh7XG4gICAgICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgICAgICAgICAgJ3N5bWJvbCc6IHN5bWJvbCxcbiAgICAgICAgICAgICAgICAnYmFzZSc6IGJhc2UsXG4gICAgICAgICAgICAgICAgJ3F1b3RlJzogcXVvdGUsXG4gICAgICAgICAgICAgICAgJ2luZm8nOiBtYXJrZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBwYXJzZVRpY2tlciAodGlja2VyLCBtYXJrZXQpIHtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydtYXgnXSksXG4gICAgICAgICAgICAnbG93JzogcGFyc2VGbG9hdCAodGlja2VyWydtaW4nXSksXG4gICAgICAgICAgICAnYmlkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Fzayc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2ZpcnN0J10pLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xhc3QnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VycyAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCB0aWNrZXJzID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRUaWNrZXJzICgpO1xuICAgICAgICBsZXQgaWRzID0gT2JqZWN0LmtleXMgKHRpY2tlcnMpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge307XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgaWQgPSBpZHNbaV07XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gdGhpcy5tYXJrZXRzX2J5X2lkW2lkXTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBtYXJrZXRbJ3N5bWJvbCddO1xuICAgICAgICAgICAgbGV0IHRpY2tlciA9IHRpY2tlcnNbaWRdO1xuICAgICAgICAgICAgcmVzdWx0W3N5bWJvbF0gPSB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIG1hcmtldCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgdGlja2VycyA9IGF3YWl0IHRoaXMucHVibGljR2V0VGlja2VycyAoKTtcbiAgICAgICAgbGV0IHRpY2tlciA9IHRpY2tlcnNbcFsnaWQnXV07XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIHApO1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRUcmFkZXNEZXB0aCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdwYWlyX2lkJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSBwYXJzZUludCAocGFyc2VJbnQgKG9yZGVyYm9va1snbGFzdCddKSAvIDEwMDApO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSB7ICdiaWRzJzogJ2JpZCcsICdhc2tzJzogJ2FzaycgfTtcbiAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyAoc2lkZXMpO1xuICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGtleXMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgIGxldCBrZXkgPSBrZXlzW2tdO1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1trZXldO1xuICAgICAgICAgICAgbGV0IG9yZGVycyA9IG9yZGVyYm9va1tzaWRlXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9yZGVyID0gb3JkZXJzW2ldO1xuICAgICAgICAgICAgICAgIGxldCBwcmljZSA9IHBhcnNlRmxvYXQgKG9yZGVyWydwcmljZSddKTtcbiAgICAgICAgICAgICAgICBsZXQgYW1vdW50ID0gcGFyc2VGbG9hdCAob3JkZXJbJ3ZvbHVtZSddKTtcbiAgICAgICAgICAgICAgICByZXN1bHRba2V5XS5wdXNoIChbIHByaWNlLCBhbW91bnQgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0VHJhZGVzSGlzdG9yeSAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdwYWlyX2lkJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RCYWxhbmNlICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IHJlc3BvbnNlIH07XG4gICAgICAgIGxldCBjdXJyZW5jaWVzID0gT2JqZWN0LmtleXMgKHJlc3BvbnNlKTtcbiAgICAgICAgbGV0IGJhbGFuY2UgPSB7fTtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBjdXJyZW5jaWVzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBjdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSByZXNwb25zZVtjdXJyZW5jeV07XG4gICAgICAgICAgICBjdXJyZW5jeSA9IGN1cnJlbmN5LnRvVXBwZXJDYXNlICgpO1xuICAgICAgICAgICAgLy8gaXNzdWUgIzQgYml0bGlzaCBuYW1lcyBEYXNoIGFzIERTSCwgaW5zdGVhZCBvZiBEQVNIXG4gICAgICAgICAgICBpZiAoY3VycmVuY3kgPT0gJ0RTSCcpXG4gICAgICAgICAgICAgICAgY3VycmVuY3kgPSAnREFTSCc7XG4gICAgICAgICAgICBiYWxhbmNlW2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCB0aGlzLmN1cnJlbmNpZXMubGVuZ3RoOyBjKyspIHtcbiAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IHRoaXMuY3VycmVuY2llc1tjXTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd1c2VkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoY3VycmVuY3kgaW4gYmFsYW5jZSkge1xuICAgICAgICAgICAgICAgIGFjY291bnRbJ2ZyZWUnXSA9IHBhcnNlRmxvYXQgKGJhbGFuY2VbY3VycmVuY3ldWydmdW5kcyddKTtcbiAgICAgICAgICAgICAgICBhY2NvdW50Wyd1c2VkJ10gPSBwYXJzZUZsb2F0IChiYWxhbmNlW2N1cnJlbmN5XVsnaG9sZGVkJ10pO1xuICAgICAgICAgICAgICAgIGFjY291bnRbJ3RvdGFsJ10gPSB0aGlzLnN1bSAoYWNjb3VudFsnZnJlZSddLCBhY2NvdW50Wyd1c2VkJ10pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgc2lnbkluICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJpdmF0ZVBvc3RTaWduaW4gKHtcbiAgICAgICAgICAgICdsb2dpbic6IHRoaXMubG9naW4sXG4gICAgICAgICAgICAncGFzc3dkJzogdGhpcy5wYXNzd29yZCxcbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdwYWlyX2lkJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICdkaXInOiAoc2lkZSA9PSAnYnV5JykgPyAnYmlkJyA6ICdhc2snLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IGFtb3VudCxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHR5cGUgPT0gJ2xpbWl0JylcbiAgICAgICAgICAgIG9yZGVyWydwcmljZSddID0gcHJpY2U7XG4gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0Q3JlYXRlVHJhZGUgKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3VsdCxcbiAgICAgICAgICAgICdpZCc6IHJlc3VsdFsnaWQnXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0Q2FuY2VsVHJhZGUgKHsgJ2lkJzogaWQgfSk7XG4gICAgfSxcblxuICAgIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ10gKyAnLycgKyB0aGlzLnZlcnNpb24gKyAnLycgKyBwYXRoO1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHBhcmFtcykubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocGFyYW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLmpzb24gKHRoaXMuZXh0ZW5kICh7ICd0b2tlbic6IHRoaXMuYXBpS2V5IH0sIHBhcmFtcykpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgYml0bWFya2V0ID0ge1xuXG4gICAgJ2lkJzogJ2JpdG1hcmtldCcsXG4gICAgJ25hbWUnOiAnQml0TWFya2V0JyxcbiAgICAnY291bnRyaWVzJzogWyAnUEwnLCAnRVUnIF0sXG4gICAgJ3JhdGVMaW1pdCc6IDE1MDAsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc3NjcyNTYtYTg1NTUyMDAtNWVmOS0xMWU3LTk2ZmQtNDY5YTY1ZTJiMGJkLmpwZycsXG4gICAgICAgICdhcGknOiB7XG4gICAgICAgICAgICAncHVibGljJzogJ2h0dHBzOi8vd3d3LmJpdG1hcmtldC5uZXQnLFxuICAgICAgICAgICAgJ3ByaXZhdGUnOiAnaHR0cHM6Ly93d3cuYml0bWFya2V0LnBsL2FwaTIvJywgLy8gbGFzdCBzbGFzaCBpcyBjcml0aWNhbFxuICAgICAgICB9LFxuICAgICAgICAnd3d3JzogW1xuICAgICAgICAgICAgJ2h0dHBzOi8vd3d3LmJpdG1hcmtldC5wbCcsXG4gICAgICAgICAgICAnaHR0cHM6Ly93d3cuYml0bWFya2V0Lm5ldCcsXG4gICAgICAgIF0sXG4gICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAnaHR0cHM6Ly93d3cuYml0bWFya2V0Lm5ldC9kb2NzLnBocD9maWxlPWFwaV9wdWJsaWMuaHRtbCcsXG4gICAgICAgICAgICAnaHR0cHM6Ly93d3cuYml0bWFya2V0Lm5ldC9kb2NzLnBocD9maWxlPWFwaV9wcml2YXRlLmh0bWwnLFxuICAgICAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS9iaXRtYXJrZXQtbmV0L2FwaScsXG4gICAgICAgIF0sXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnanNvbi97bWFya2V0fS90aWNrZXInLFxuICAgICAgICAgICAgICAgICdqc29uL3ttYXJrZXR9L29yZGVyYm9vaycsXG4gICAgICAgICAgICAgICAgJ2pzb24ve21hcmtldH0vdHJhZGVzJyxcbiAgICAgICAgICAgICAgICAnanNvbi9jdHJhbnNmZXInLFxuICAgICAgICAgICAgICAgICdncmFwaHMve21hcmtldH0vOTBtJyxcbiAgICAgICAgICAgICAgICAnZ3JhcGhzL3ttYXJrZXR9LzZoJyxcbiAgICAgICAgICAgICAgICAnZ3JhcGhzL3ttYXJrZXR9LzFkJyxcbiAgICAgICAgICAgICAgICAnZ3JhcGhzL3ttYXJrZXR9LzdkJyxcbiAgICAgICAgICAgICAgICAnZ3JhcGhzL3ttYXJrZXR9LzFtJyxcbiAgICAgICAgICAgICAgICAnZ3JhcGhzL3ttYXJrZXR9LzNtJyxcbiAgICAgICAgICAgICAgICAnZ3JhcGhzL3ttYXJrZXR9LzZtJyxcbiAgICAgICAgICAgICAgICAnZ3JhcGhzL3ttYXJrZXR9LzF5JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2luZm8nLFxuICAgICAgICAgICAgICAgICd0cmFkZScsXG4gICAgICAgICAgICAgICAgJ2NhbmNlbCcsXG4gICAgICAgICAgICAgICAgJ29yZGVycycsXG4gICAgICAgICAgICAgICAgJ3RyYWRlcycsXG4gICAgICAgICAgICAgICAgJ2hpc3RvcnknLFxuICAgICAgICAgICAgICAgICd3aXRoZHJhd2FscycsXG4gICAgICAgICAgICAgICAgJ3RyYWRpbmdkZXNrJyxcbiAgICAgICAgICAgICAgICAndHJhZGluZ2Rlc2tTdGF0dXMnLFxuICAgICAgICAgICAgICAgICd0cmFkaW5nZGVza0NvbmZpcm0nLFxuICAgICAgICAgICAgICAgICdjcnlwdG90cmFkaW5nZGVzaycsXG4gICAgICAgICAgICAgICAgJ2NyeXB0b3RyYWRpbmdkZXNrU3RhdHVzJyxcbiAgICAgICAgICAgICAgICAnY3J5cHRvdHJhZGluZ2Rlc2tDb25maXJtJyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXcnLFxuICAgICAgICAgICAgICAgICd3aXRoZHJhd0ZpYXQnLFxuICAgICAgICAgICAgICAgICd3aXRoZHJhd1BMTlBQJyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXdGaWF0RmFzdCcsXG4gICAgICAgICAgICAgICAgJ2RlcG9zaXQnLFxuICAgICAgICAgICAgICAgICd0cmFuc2ZlcicsXG4gICAgICAgICAgICAgICAgJ3RyYW5zZmVycycsXG4gICAgICAgICAgICAgICAgJ21hcmdpbkxpc3QnLFxuICAgICAgICAgICAgICAgICdtYXJnaW5PcGVuJyxcbiAgICAgICAgICAgICAgICAnbWFyZ2luQ2xvc2UnLFxuICAgICAgICAgICAgICAgICdtYXJnaW5DYW5jZWwnLFxuICAgICAgICAgICAgICAgICdtYXJnaW5Nb2RpZnknLFxuICAgICAgICAgICAgICAgICdtYXJnaW5CYWxhbmNlQWRkJyxcbiAgICAgICAgICAgICAgICAnbWFyZ2luQmFsYW5jZVJlbW92ZScsXG4gICAgICAgICAgICAgICAgJ3N3YXBMaXN0JyxcbiAgICAgICAgICAgICAgICAnc3dhcE9wZW4nLFxuICAgICAgICAgICAgICAgICdzd2FwQ2xvc2UnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgICdtYXJrZXRzJzoge1xuICAgICAgICAnQlRDL1BMTic6IHsgJ2lkJzogJ0JUQ1BMTicsICdzeW1ib2wnOiAnQlRDL1BMTicsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdQTE4nIH0sXG4gICAgICAgICdCVEMvRVVSJzogeyAnaWQnOiAnQlRDRVVSJywgJ3N5bWJvbCc6ICdCVEMvRVVSJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ0VVUicgfSxcbiAgICAgICAgJ0xUQy9QTE4nOiB7ICdpZCc6ICdMVENQTE4nLCAnc3ltYm9sJzogJ0xUQy9QTE4nLCAnYmFzZSc6ICdMVEMnLCAncXVvdGUnOiAnUExOJyB9LFxuICAgICAgICAnTFRDL0JUQyc6IHsgJ2lkJzogJ0xUQ0JUQycsICdzeW1ib2wnOiAnTFRDL0JUQycsICdiYXNlJzogJ0xUQycsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdMaXRlTWluZVgvQlRDJzogeyAnaWQnOiAnTGl0ZU1pbmVYQlRDJywgJ3N5bWJvbCc6ICdMaXRlTWluZVgvQlRDJywgJ2Jhc2UnOiAnTGl0ZU1pbmVYJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ1BsblgvQlRDJzogeyAnaWQnOiAnUGxueEJUQycsICdzeW1ib2wnOiAnUGxuWC9CVEMnLCAnYmFzZSc6ICdQbG5YJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdEluZm8gKCk7XG4gICAgICAgIGxldCBkYXRhID0gcmVzcG9uc2VbJ2RhdGEnXTtcbiAgICAgICAgbGV0IGJhbGFuY2UgPSBkYXRhWydiYWxhbmNlcyddO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGRhdGEgfTtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCB0aGlzLmN1cnJlbmNpZXMubGVuZ3RoOyBjKyspIHtcbiAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IHRoaXMuY3VycmVuY2llc1tjXTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd1c2VkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoY3VycmVuY3kgaW4gYmFsYW5jZVsnYXZhaWxhYmxlJ10pXG4gICAgICAgICAgICAgICAgYWNjb3VudFsnZnJlZSddID0gYmFsYW5jZVsnYXZhaWxhYmxlJ11bY3VycmVuY3ldO1xuICAgICAgICAgICAgaWYgKGN1cnJlbmN5IGluIGJhbGFuY2VbJ2Jsb2NrZWQnXSlcbiAgICAgICAgICAgICAgICBhY2NvdW50Wyd1c2VkJ10gPSBiYWxhbmNlWydibG9ja2VkJ11bY3VycmVuY3ldO1xuICAgICAgICAgICAgYWNjb3VudFsndG90YWwnXSA9IHRoaXMuc3VtIChhY2NvdW50WydmcmVlJ10sIGFjY291bnRbJ3VzZWQnXSk7XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRKc29uTWFya2V0T3JkZXJib29rICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ21hcmtldCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IG9yZGVyYm9va1snYmlkcyddLFxuICAgICAgICAgICAgJ2Fza3MnOiBvcmRlcmJvb2tbJ2Fza3MnXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG5cbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBsZXQgdGlja2VyID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRKc29uTWFya2V0VGlja2VyICh7XG4gICAgICAgICAgICAnbWFya2V0JzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2JpZCddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2FzayddKSxcbiAgICAgICAgICAgICd2d2FwJzogcGFyc2VGbG9hdCAodGlja2VyWyd2d2FwJ10pLFxuICAgICAgICAgICAgJ29wZW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdCddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbHVtZSddKSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdGhpcy5wdWJsaWNHZXRKc29uTWFya2V0VHJhZGVzICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ21hcmtldCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0VHJhZGUgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnbWFya2V0JzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICd0eXBlJzogc2lkZSxcbiAgICAgICAgICAgICdhbW91bnQnOiBhbW91bnQsXG4gICAgICAgICAgICAncmF0ZSc6IHByaWNlLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgIH07XG4gICAgICAgIGlmICgnaWQnIGluIHJlc3BvbnNlWydvcmRlciddKVxuICAgICAgICAgICAgcmVzdWx0WydpZCddID0gcmVzcG9uc2VbJ2lkJ107XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdENhbmNlbCAoeyAnaWQnOiBpZCB9KTtcbiAgICB9LFxuXG4gICAgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXVthcGldO1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICB1cmwgKz0gJy8nICsgdGhpcy5pbXBsb2RlUGFyYW1zIChwYXRoICsgJy5qc29uJywgcGFyYW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCk7XG4gICAgICAgICAgICBsZXQgcXVlcnkgPSB0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgICAgICd0b25jZSc6IG5vbmNlLFxuICAgICAgICAgICAgICAgICdtZXRob2QnOiBwYXRoLFxuICAgICAgICAgICAgfSwgcGFyYW1zKTtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQVBJLUtleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgICAgICdBUEktSGFzaCc6IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKGJvZHkpLCB0aGlzLmVuY29kZSAodGhpcy5zZWNyZXQpLCAnc2hhNTEyJyksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgYml0bWV4ID0ge1xuXG4gICAgJ2lkJzogJ2JpdG1leCcsXG4gICAgJ25hbWUnOiAnQml0TUVYJyxcbiAgICAnY291bnRyaWVzJzogJ1NDJywgLy8gU2V5Y2hlbGxlc1xuICAgICd2ZXJzaW9uJzogJ3YxJyxcbiAgICAncmF0ZUxpbWl0JzogMTUwMCxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yNzc2NjMxOS1mNjUzYzZlNi01ZWQ0LTExZTctOTMzZC1mMGJjMzY5OWFlOGYuanBnJyxcbiAgICAgICAgJ2FwaSc6ICdodHRwczovL3d3dy5iaXRtZXguY29tJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy5iaXRtZXguY29tJyxcbiAgICAgICAgJ2RvYyc6IFtcbiAgICAgICAgICAgICdodHRwczovL3d3dy5iaXRtZXguY29tL2FwcC9hcGlPdmVydmlldycsXG4gICAgICAgICAgICAnaHR0cHM6Ly9naXRodWIuY29tL0JpdE1FWC9hcGktY29ubmVjdG9ycy90cmVlL21hc3Rlci9vZmZpY2lhbC1odHRwJyxcbiAgICAgICAgXSxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdhbm5vdW5jZW1lbnQnLFxuICAgICAgICAgICAgICAgICdhbm5vdW5jZW1lbnQvdXJnZW50JyxcbiAgICAgICAgICAgICAgICAnZnVuZGluZycsXG4gICAgICAgICAgICAgICAgJ2luc3RydW1lbnQnLFxuICAgICAgICAgICAgICAgICdpbnN0cnVtZW50L2FjdGl2ZScsXG4gICAgICAgICAgICAgICAgJ2luc3RydW1lbnQvYWN0aXZlQW5kSW5kaWNlcycsXG4gICAgICAgICAgICAgICAgJ2luc3RydW1lbnQvYWN0aXZlSW50ZXJ2YWxzJyxcbiAgICAgICAgICAgICAgICAnaW5zdHJ1bWVudC9jb21wb3NpdGVJbmRleCcsXG4gICAgICAgICAgICAgICAgJ2luc3RydW1lbnQvaW5kaWNlcycsXG4gICAgICAgICAgICAgICAgJ2luc3VyYW5jZScsXG4gICAgICAgICAgICAgICAgJ2xlYWRlcmJvYXJkJyxcbiAgICAgICAgICAgICAgICAnbGlxdWlkYXRpb24nLFxuICAgICAgICAgICAgICAgICdvcmRlckJvb2snLFxuICAgICAgICAgICAgICAgICdvcmRlckJvb2svTDInLFxuICAgICAgICAgICAgICAgICdxdW90ZScsXG4gICAgICAgICAgICAgICAgJ3F1b3RlL2J1Y2tldGVkJyxcbiAgICAgICAgICAgICAgICAnc2NoZW1hJyxcbiAgICAgICAgICAgICAgICAnc2NoZW1hL3dlYnNvY2tldEhlbHAnLFxuICAgICAgICAgICAgICAgICdzZXR0bGVtZW50JyxcbiAgICAgICAgICAgICAgICAnc3RhdHMnLFxuICAgICAgICAgICAgICAgICdzdGF0cy9oaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAndHJhZGUnLFxuICAgICAgICAgICAgICAgICd0cmFkZS9idWNrZXRlZCcsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAncHJpdmF0ZSc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ2FwaUtleScsXG4gICAgICAgICAgICAgICAgJ2NoYXQnLFxuICAgICAgICAgICAgICAgICdjaGF0L2NoYW5uZWxzJyxcbiAgICAgICAgICAgICAgICAnY2hhdC9jb25uZWN0ZWQnLFxuICAgICAgICAgICAgICAgICdleGVjdXRpb24nLFxuICAgICAgICAgICAgICAgICdleGVjdXRpb24vdHJhZGVIaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAnbm90aWZpY2F0aW9uJyxcbiAgICAgICAgICAgICAgICAnb3JkZXInLFxuICAgICAgICAgICAgICAgICdwb3NpdGlvbicsXG4gICAgICAgICAgICAgICAgJ3VzZXInLFxuICAgICAgICAgICAgICAgICd1c2VyL2FmZmlsaWF0ZVN0YXR1cycsXG4gICAgICAgICAgICAgICAgJ3VzZXIvY2hlY2tSZWZlcnJhbENvZGUnLFxuICAgICAgICAgICAgICAgICd1c2VyL2NvbW1pc3Npb24nLFxuICAgICAgICAgICAgICAgICd1c2VyL2RlcG9zaXRBZGRyZXNzJyxcbiAgICAgICAgICAgICAgICAndXNlci9tYXJnaW4nLFxuICAgICAgICAgICAgICAgICd1c2VyL21pbldpdGhkcmF3YWxGZWUnLFxuICAgICAgICAgICAgICAgICd1c2VyL3dhbGxldCcsXG4gICAgICAgICAgICAgICAgJ3VzZXIvd2FsbGV0SGlzdG9yeScsXG4gICAgICAgICAgICAgICAgJ3VzZXIvd2FsbGV0U3VtbWFyeScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2FwaUtleScsXG4gICAgICAgICAgICAgICAgJ2FwaUtleS9kaXNhYmxlJyxcbiAgICAgICAgICAgICAgICAnYXBpS2V5L2VuYWJsZScsXG4gICAgICAgICAgICAgICAgJ2NoYXQnLFxuICAgICAgICAgICAgICAgICdvcmRlcicsXG4gICAgICAgICAgICAgICAgJ29yZGVyL2J1bGsnLFxuICAgICAgICAgICAgICAgICdvcmRlci9jYW5jZWxBbGxBZnRlcicsXG4gICAgICAgICAgICAgICAgJ29yZGVyL2Nsb3NlUG9zaXRpb24nLFxuICAgICAgICAgICAgICAgICdwb3NpdGlvbi9pc29sYXRlJyxcbiAgICAgICAgICAgICAgICAncG9zaXRpb24vbGV2ZXJhZ2UnLFxuICAgICAgICAgICAgICAgICdwb3NpdGlvbi9yaXNrTGltaXQnLFxuICAgICAgICAgICAgICAgICdwb3NpdGlvbi90cmFuc2Zlck1hcmdpbicsXG4gICAgICAgICAgICAgICAgJ3VzZXIvY2FuY2VsV2l0aGRyYXdhbCcsXG4gICAgICAgICAgICAgICAgJ3VzZXIvY29uZmlybUVtYWlsJyxcbiAgICAgICAgICAgICAgICAndXNlci9jb25maXJtRW5hYmxlVEZBJyxcbiAgICAgICAgICAgICAgICAndXNlci9jb25maXJtV2l0aGRyYXdhbCcsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZGlzYWJsZVRGQScsXG4gICAgICAgICAgICAgICAgJ3VzZXIvbG9nb3V0JyxcbiAgICAgICAgICAgICAgICAndXNlci9sb2dvdXRBbGwnLFxuICAgICAgICAgICAgICAgICd1c2VyL3ByZWZlcmVuY2VzJyxcbiAgICAgICAgICAgICAgICAndXNlci9yZXF1ZXN0RW5hYmxlVEZBJyxcbiAgICAgICAgICAgICAgICAndXNlci9yZXF1ZXN0V2l0aGRyYXdhbCcsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ3B1dCc6IFtcbiAgICAgICAgICAgICAgICAnb3JkZXInLFxuICAgICAgICAgICAgICAgICdvcmRlci9idWxrJyxcbiAgICAgICAgICAgICAgICAndXNlcicsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ2RlbGV0ZSc6IFtcbiAgICAgICAgICAgICAgICAnYXBpS2V5JyxcbiAgICAgICAgICAgICAgICAnb3JkZXInLFxuICAgICAgICAgICAgICAgICdvcmRlci9hbGwnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE1hcmtldHMgKCkge1xuICAgICAgICBsZXQgbWFya2V0cyA9IGF3YWl0IHRoaXMucHVibGljR2V0SW5zdHJ1bWVudEFjdGl2ZSAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGxldCBwID0gMDsgcCA8IG1hcmtldHMubGVuZ3RoOyBwKyspIHtcbiAgICAgICAgICAgIGxldCBtYXJrZXQgPSBtYXJrZXRzW3BdO1xuICAgICAgICAgICAgbGV0IGlkID0gbWFya2V0WydzeW1ib2wnXTtcbiAgICAgICAgICAgIGxldCBiYXNlID0gbWFya2V0Wyd1bmRlcmx5aW5nJ107XG4gICAgICAgICAgICBsZXQgcXVvdGUgPSBtYXJrZXRbJ3F1b3RlQ3VycmVuY3knXTtcbiAgICAgICAgICAgIGxldCBpc0Z1dHVyZXNDb250cmFjdCA9IGlkICE9IChiYXNlICsgcXVvdGUpO1xuICAgICAgICAgICAgYmFzZSA9IHRoaXMuY29tbW9uQ3VycmVuY3lDb2RlIChiYXNlKTtcbiAgICAgICAgICAgIHF1b3RlID0gdGhpcy5jb21tb25DdXJyZW5jeUNvZGUgKHF1b3RlKTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBpc0Z1dHVyZXNDb250cmFjdCA/IGlkIDogKGJhc2UgKyAnLycgKyBxdW90ZSk7XG4gICAgICAgICAgICByZXN1bHQucHVzaCAoe1xuICAgICAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICAgICAgICAgICdzeW1ib2wnOiBzeW1ib2wsXG4gICAgICAgICAgICAgICAgJ2Jhc2UnOiBiYXNlLFxuICAgICAgICAgICAgICAgICdxdW90ZSc6IHF1b3RlLFxuICAgICAgICAgICAgICAgICdpbmZvJzogbWFya2V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlR2V0VXNlck1hcmdpbiAoeyAnY3VycmVuY3knOiAnYWxsJyB9KTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiByZXNwb25zZSB9O1xuICAgICAgICBmb3IgKGxldCBiID0gMDsgYiA8IHJlc3BvbnNlLmxlbmd0aDsgYisrKSB7XG4gICAgICAgICAgICBsZXQgYmFsYW5jZSA9IHJlc3BvbnNlW2JdO1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gYmFsYW5jZVsnY3VycmVuY3knXS50b1VwcGVyQ2FzZSAoKTtcbiAgICAgICAgICAgIGN1cnJlbmN5ID0gdGhpcy5jb21tb25DdXJyZW5jeUNvZGUgKGN1cnJlbmN5KTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogYmFsYW5jZVsnYXZhaWxhYmxlTWFyZ2luJ10sXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogYmFsYW5jZVsnYW1vdW50J10sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGN1cnJlbmN5ID09ICdCVEMnKSB7XG4gICAgICAgICAgICAgICAgYWNjb3VudFsnZnJlZSddID0gYWNjb3VudFsnZnJlZSddICogMC4wMDAwMDAwMTtcbiAgICAgICAgICAgICAgICBhY2NvdW50Wyd0b3RhbCddID0gYWNjb3VudFsndG90YWwnXSAqIDAuMDAwMDAwMDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhY2NvdW50Wyd1c2VkJ10gPSBhY2NvdW50Wyd0b3RhbCddIC0gYWNjb3VudFsnZnJlZSddO1xuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IGF3YWl0IHRoaXMucHVibGljR2V0T3JkZXJCb29rTDIgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnc3ltYm9sJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdiaWRzJzogW10sXG4gICAgICAgICAgICAnYXNrcyc6IFtdLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgZm9yIChsZXQgbyA9IDA7IG8gPCBvcmRlcmJvb2subGVuZ3RoOyBvKyspIHtcbiAgICAgICAgICAgIGxldCBvcmRlciA9IG9yZGVyYm9va1tvXTtcbiAgICAgICAgICAgIGxldCBzaWRlID0gKG9yZGVyWydzaWRlJ10gPT0gJ1NlbGwnKSA/ICdhc2tzJyA6ICdiaWRzJztcbiAgICAgICAgICAgIGxldCBhbW91bnQgPSBvcmRlclsnc2l6ZSddO1xuICAgICAgICAgICAgbGV0IHByaWNlID0gb3JkZXJbJ3ByaWNlJ107XG4gICAgICAgICAgICByZXN1bHRbc2lkZV0ucHVzaCAoWyBwcmljZSwgYW1vdW50IF0pO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdFsnYmlkcyddID0gdGhpcy5zb3J0QnkgKHJlc3VsdFsnYmlkcyddLCAwLCB0cnVlKTtcbiAgICAgICAgcmVzdWx0Wydhc2tzJ10gPSB0aGlzLnNvcnRCeSAocmVzdWx0Wydhc2tzJ10sIDApO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXF1ZXN0ID0ge1xuICAgICAgICAgICAgJ3N5bWJvbCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgICAgICAnYmluU2l6ZSc6ICcxZCcsXG4gICAgICAgICAgICAncGFydGlhbCc6IHRydWUsXG4gICAgICAgICAgICAnY291bnQnOiAxLFxuICAgICAgICAgICAgJ3JldmVyc2UnOiB0cnVlLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgcXVvdGVzID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRRdW90ZUJ1Y2tldGVkIChyZXF1ZXN0KTtcbiAgICAgICAgbGV0IHF1b3Rlc0xlbmd0aCA9IHF1b3Rlcy5sZW5ndGg7XG4gICAgICAgIGxldCBxdW90ZSA9IHF1b3Rlc1txdW90ZXNMZW5ndGggLSAxXTtcbiAgICAgICAgbGV0IHRpY2tlcnMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFRyYWRlQnVja2V0ZWQgKHJlcXVlc3QpO1xuICAgICAgICBsZXQgdGlja2VyID0gdGlja2Vyc1swXTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydoaWdoJ10pLFxuICAgICAgICAgICAgJ2xvdyc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbG93J10pLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHF1b3RlWydiaWRQcmljZSddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0IChxdW90ZVsnYXNrUHJpY2UnXSksXG4gICAgICAgICAgICAndndhcCc6IHBhcnNlRmxvYXQgKHRpY2tlclsndndhcCddKSxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogcGFyc2VGbG9hdCAodGlja2VyWydjbG9zZSddKSxcbiAgICAgICAgICAgICdmaXJzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsYXN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaG9tZU5vdGlvbmFsJ10pLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWydmb3JlaWduTm90aW9uYWwnXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0VHJhZGUgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnc3ltYm9sJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdzeW1ib2wnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICAgICAgJ3NpZGUnOiB0aGlzLmNhcGl0YWxpemUgKHNpZGUpLFxuICAgICAgICAgICAgJ29yZGVyUXR5JzogYW1vdW50LFxuICAgICAgICAgICAgJ29yZFR5cGUnOiB0aGlzLmNhcGl0YWxpemUgKHR5cGUpLFxuICAgICAgICB9O1xuICAgICAgICBpZiAodHlwZSA9PSAnbGltaXQnKVxuICAgICAgICAgICAgb3JkZXJbJ3JhdGUnXSA9IHByaWNlO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0T3JkZXIgKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ2lkJzogcmVzcG9uc2VbJ29yZGVySUQnXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVEZWxldGVPcmRlciAoeyAnb3JkZXJJRCc6IGlkIH0pO1xuICAgIH0sXG5cbiAgICByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCBxdWVyeSA9ICcvYXBpLycgKyB0aGlzLnZlcnNpb24gKyAnLycgKyBwYXRoO1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHBhcmFtcykubGVuZ3RoKVxuICAgICAgICAgICAgcXVlcnkgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHBhcmFtcyk7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgcXVlcnk7XG4gICAgICAgIGlmIChhcGkgPT0gJ3ByaXZhdGUnKSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpLnRvU3RyaW5nICgpO1xuICAgICAgICAgICAgaWYgKG1ldGhvZCA9PSAnUE9TVCcpXG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChwYXJhbXMpLmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgYm9keSA9IHRoaXMuanNvbiAocGFyYW1zKTtcbiAgICAgICAgICAgIGxldCByZXF1ZXN0ID0gWyBtZXRob2QsIHF1ZXJ5LCBub25jZSwgYm9keSB8fCAnJ10uam9pbiAoJycpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICdhcGktbm9uY2UnOiBub25jZSxcbiAgICAgICAgICAgICAgICAnYXBpLWtleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgICAgICdhcGktc2lnbmF0dXJlJzogdGhpcy5obWFjICh0aGlzLmVuY29kZSAocmVxdWVzdCksIHRoaXMuZW5jb2RlICh0aGlzLnNlY3JldCkpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGJpdHNvID0ge1xuXG4gICAgJ2lkJzogJ2JpdHNvJyxcbiAgICAnbmFtZSc6ICdCaXRzbycsXG4gICAgJ2NvdW50cmllcyc6ICdNWCcsIC8vIE1leGljb1xuICAgICdyYXRlTGltaXQnOiAyMDAwLCAvLyAzMCByZXF1ZXN0cyBwZXIgbWludXRlXG4gICAgJ3ZlcnNpb24nOiAndjMnLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2MzM1LTcxNWNlN2FhLTVlZDUtMTFlNy04OGE4LTE3M2EyN2JiMzBmZS5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vYXBpLmJpdHNvLmNvbScsXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly9iaXRzby5jb20nLFxuICAgICAgICAnZG9jJzogJ2h0dHBzOi8vYml0c28uY29tL2FwaV9pbmZvJyxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdhdmFpbGFibGVfYm9va3MnLFxuICAgICAgICAgICAgICAgICd0aWNrZXInLFxuICAgICAgICAgICAgICAgICdvcmRlcl9ib29rJyxcbiAgICAgICAgICAgICAgICAndHJhZGVzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnYWNjb3VudF9zdGF0dXMnLFxuICAgICAgICAgICAgICAgICdiYWxhbmNlJyxcbiAgICAgICAgICAgICAgICAnZmVlcycsXG4gICAgICAgICAgICAgICAgJ2Z1bmRpbmdzJyxcbiAgICAgICAgICAgICAgICAnZnVuZGluZ3Mve2ZpZH0nLFxuICAgICAgICAgICAgICAgICdmdW5kaW5nX2Rlc3RpbmF0aW9uJyxcbiAgICAgICAgICAgICAgICAna3ljX2RvY3VtZW50cycsXG4gICAgICAgICAgICAgICAgJ2xlZGdlcicsXG4gICAgICAgICAgICAgICAgJ2xlZGdlci90cmFkZXMnLFxuICAgICAgICAgICAgICAgICdsZWRnZXIvZmVlcycsXG4gICAgICAgICAgICAgICAgJ2xlZGdlci9mdW5kaW5ncycsXG4gICAgICAgICAgICAgICAgJ2xlZGdlci93aXRoZHJhd2FscycsXG4gICAgICAgICAgICAgICAgJ214X2JhbmtfY29kZXMnLFxuICAgICAgICAgICAgICAgICdvcGVuX29yZGVycycsXG4gICAgICAgICAgICAgICAgJ29yZGVyX3RyYWRlcy97b2lkfScsXG4gICAgICAgICAgICAgICAgJ29yZGVycy97b2lkfScsXG4gICAgICAgICAgICAgICAgJ3VzZXJfdHJhZGVzJyxcbiAgICAgICAgICAgICAgICAndXNlcl90cmFkZXMve3RpZH0nLFxuICAgICAgICAgICAgICAgICd3aXRoZHJhd2Fscy8nLFxuICAgICAgICAgICAgICAgICd3aXRoZHJhd2Fscy97d2lkfScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2JpdGNvaW5fd2l0aGRyYXdhbCcsXG4gICAgICAgICAgICAgICAgJ2RlYml0X2NhcmRfd2l0aGRyYXdhbCcsXG4gICAgICAgICAgICAgICAgJ2V0aGVyX3dpdGhkcmF3YWwnLFxuICAgICAgICAgICAgICAgICdvcmRlcnMnLFxuICAgICAgICAgICAgICAgICdwaG9uZV9udW1iZXInLFxuICAgICAgICAgICAgICAgICdwaG9uZV92ZXJpZmljYXRpb24nLFxuICAgICAgICAgICAgICAgICdwaG9uZV93aXRoZHJhd2FsJyxcbiAgICAgICAgICAgICAgICAnc3BlaV93aXRoZHJhd2FsJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAnZGVsZXRlJzogW1xuICAgICAgICAgICAgICAgICdvcmRlcnMve29pZH0nLFxuICAgICAgICAgICAgICAgICdvcmRlcnMvYWxsJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hNYXJrZXRzICgpIHtcbiAgICAgICAgbGV0IG1hcmtldHMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldEF2YWlsYWJsZUJvb2tzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgbWFya2V0c1sncGF5bG9hZCddLmxlbmd0aDsgcCsrKSB7XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gbWFya2V0c1sncGF5bG9hZCddW3BdO1xuICAgICAgICAgICAgbGV0IGlkID0gbWFya2V0Wydib29rJ107XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gaWQudG9VcHBlckNhc2UgKCkucmVwbGFjZSAoJ18nLCAnLycpO1xuICAgICAgICAgICAgbGV0IFsgYmFzZSwgcXVvdGUgXSA9IHN5bWJvbC5zcGxpdCAoJy8nKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoICh7XG4gICAgICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgICAgICAgICAgJ3N5bWJvbCc6IHN5bWJvbCxcbiAgICAgICAgICAgICAgICAnYmFzZSc6IGJhc2UsXG4gICAgICAgICAgICAgICAgJ3F1b3RlJzogcXVvdGUsXG4gICAgICAgICAgICAgICAgJ2luZm8nOiBtYXJrZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVHZXRCYWxhbmNlICgpO1xuICAgICAgICBsZXQgYmFsYW5jZXMgPSByZXNwb25zZVsncGF5bG9hZCddWydiYWxhbmNlcyddO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IHJlc3BvbnNlIH07XG4gICAgICAgIGZvciAobGV0IGIgPSAwOyBiIDwgYmFsYW5jZXMubGVuZ3RoOyBiKyspIHtcbiAgICAgICAgICAgIGxldCBiYWxhbmNlID0gYmFsYW5jZXNbYl07XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBiYWxhbmNlWydjdXJyZW5jeSddLnRvVXBwZXJDYXNlICgpO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiBwYXJzZUZsb2F0IChiYWxhbmNlWydhdmFpbGFibGUnXSksXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiBwYXJzZUZsb2F0IChiYWxhbmNlWydsb2NrZWQnXSksXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogcGFyc2VGbG9hdCAoYmFsYW5jZVsndG90YWwnXSksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRPcmRlckJvb2sgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnYm9vayc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgb3JkZXJib29rID0gcmVzcG9uc2VbJ3BheWxvYWQnXTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMucGFyc2U4NjAxIChvcmRlcmJvb2tbJ3VwZGF0ZWRfYXQnXSk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IFtdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaWRlcyA9IFsgJ2JpZHMnLCAnYXNrcycgXTtcbiAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBzaWRlcy5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1tzXTtcbiAgICAgICAgICAgIGxldCBvcmRlcnMgPSBvcmRlcmJvb2tbc2lkZV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBvcmRlciA9IG9yZGVyc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgcHJpY2UgPSBwYXJzZUZsb2F0IChvcmRlclsncHJpY2UnXSk7XG4gICAgICAgICAgICAgICAgbGV0IGFtb3VudCA9IHBhcnNlRmxvYXQgKG9yZGVyWydhbW91bnQnXSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3NpZGVdLnB1c2ggKFsgcHJpY2UsIGFtb3VudCBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRUaWNrZXIgKHtcbiAgICAgICAgICAgICdib29rJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aWNrZXIgPSByZXNwb25zZVsncGF5bG9hZCddO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5wYXJzZTg2MDEgKHRpY2tlclsnY3JlYXRlZF9hdCddKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2JpZCddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2FzayddKSxcbiAgICAgICAgICAgICd2d2FwJzogcGFyc2VGbG9hdCAodGlja2VyWyd2d2FwJ10pLFxuICAgICAgICAgICAgJ29wZW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbHVtZSddKSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wdWJsaWNHZXRUcmFkZXMgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnYm9vayc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAnYm9vayc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgICAgICAnc2lkZSc6IHNpZGUsXG4gICAgICAgICAgICAndHlwZSc6IHR5cGUsXG4gICAgICAgICAgICAnbWFqb3InOiBhbW91bnQsXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlID09ICdsaW1pdCcpXG4gICAgICAgICAgICBvcmRlclsncHJpY2UnXSA9IHByaWNlO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0T3JkZXJzICh0aGlzLmV4dGVuZCAob3JkZXIsIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXNwb25zZSxcbiAgICAgICAgICAgICdpZCc6IHJlc3BvbnNlWydwYXlsb2FkJ11bJ29pZCddLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJpdmF0ZURlbGV0ZU9yZGVycyAoeyAnb2lkJzogaWQgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gJy8nICsgdGhpcy52ZXJzaW9uICsgJy8nICsgdGhpcy5pbXBsb2RlUGFyYW1zIChwYXRoLCBwYXJhbXMpO1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArIHF1ZXJ5O1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHBhcmFtcykubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocGFyYW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyAocGFyYW1zKS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgYm9keSA9IHRoaXMuanNvbiAocGFyYW1zKTtcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCkudG9TdHJpbmcgKCk7XG4gICAgICAgICAgICBsZXQgcmVxdWVzdCA9IFsgbm9uY2UsIG1ldGhvZCwgcXVlcnksIGJvZHkgfHwgJycgXS5qb2luICgnJyk7XG4gICAgICAgICAgICBsZXQgc2lnbmF0dXJlID0gdGhpcy5obWFjICh0aGlzLmVuY29kZSAocmVxdWVzdCksIHRoaXMuZW5jb2RlICh0aGlzLnNlY3JldCkpO1xuICAgICAgICAgICAgbGV0IGF1dGggPSB0aGlzLmFwaUtleSArICc6JyArIG5vbmNlICsgJzonICsgc2lnbmF0dXJlO1xuICAgICAgICAgICAgaGVhZGVycyA9IHsgJ0F1dGhvcml6YXRpb24nOiBcIkJpdHNvIFwiICsgYXV0aCB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdzdWNjZXNzJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIGlmIChyZXNwb25zZVsnc3VjY2VzcyddKVxuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgYml0c3RhbXAgPSB7XG5cbiAgICAnaWQnOiAnYml0c3RhbXAnLFxuICAgICduYW1lJzogJ0JpdHN0YW1wJyxcbiAgICAnY291bnRyaWVzJzogJ0dCJyxcbiAgICAncmF0ZUxpbWl0JzogMTAwMCxcbiAgICAndmVyc2lvbic6ICd2MicsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc3ODYzNzctOGM4YWI1N2UtNWZlOS0xMWU3LThlYTQtMmIwNWI2YmNjZWVjLmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly93d3cuYml0c3RhbXAubmV0L2FwaScsXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly93d3cuYml0c3RhbXAubmV0JyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL3d3dy5iaXRzdGFtcC5uZXQvYXBpJyxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdvcmRlcl9ib29rL3tpZH0vJyxcbiAgICAgICAgICAgICAgICAndGlja2VyX2hvdXIve2lkfS8nLFxuICAgICAgICAgICAgICAgICd0aWNrZXIve2lkfS8nLFxuICAgICAgICAgICAgICAgICd0cmFuc2FjdGlvbnMve2lkfS8nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnYmFsYW5jZS8nLFxuICAgICAgICAgICAgICAgICdiYWxhbmNlL3tpZH0vJyxcbiAgICAgICAgICAgICAgICAnYnV5L3tpZH0vJyxcbiAgICAgICAgICAgICAgICAnYnV5L21hcmtldC97aWR9LycsXG4gICAgICAgICAgICAgICAgJ2NhbmNlbF9vcmRlci8nLFxuICAgICAgICAgICAgICAgICdsaXF1aWRhdGlvbl9hZGRyZXNzL2luZm8vJyxcbiAgICAgICAgICAgICAgICAnbGlxdWlkYXRpb25fYWRkcmVzcy9uZXcvJyxcbiAgICAgICAgICAgICAgICAnb3Blbl9vcmRlcnMvYWxsLycsXG4gICAgICAgICAgICAgICAgJ29wZW5fb3JkZXJzL3tpZH0vJyxcbiAgICAgICAgICAgICAgICAnc2VsbC97aWR9LycsXG4gICAgICAgICAgICAgICAgJ3NlbGwvbWFya2V0L3tpZH0vJyxcbiAgICAgICAgICAgICAgICAndHJhbnNmZXItZnJvbS1tYWluLycsXG4gICAgICAgICAgICAgICAgJ3RyYW5zZmVyLXRvLW1haW4vJyxcbiAgICAgICAgICAgICAgICAndXNlcl90cmFuc2FjdGlvbnMvJyxcbiAgICAgICAgICAgICAgICAndXNlcl90cmFuc2FjdGlvbnMve2lkfS8nLFxuICAgICAgICAgICAgICAgICd3aXRoZHJhd2FsL2NhbmNlbC8nLFxuICAgICAgICAgICAgICAgICd3aXRoZHJhd2FsL29wZW4vJyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXdhbC9zdGF0dXMvJyxcbiAgICAgICAgICAgICAgICAneHJwX2FkZHJlc3MvJyxcbiAgICAgICAgICAgICAgICAneHJwX3dpdGhkcmF3YWwvJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9VU0QnOiB7ICdpZCc6ICdidGN1c2QnLCAnc3ltYm9sJzogJ0JUQy9VU0QnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnVVNEJyB9LFxuICAgICAgICAnQlRDL0VVUic6IHsgJ2lkJzogJ2J0Y2V1cicsICdzeW1ib2wnOiAnQlRDL0VVUicsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdFVVInIH0sXG4gICAgICAgICdFVVIvVVNEJzogeyAnaWQnOiAnZXVydXNkJywgJ3N5bWJvbCc6ICdFVVIvVVNEJywgJ2Jhc2UnOiAnRVVSJywgJ3F1b3RlJzogJ1VTRCcgfSxcbiAgICAgICAgJ1hSUC9VU0QnOiB7ICdpZCc6ICd4cnB1c2QnLCAnc3ltYm9sJzogJ1hSUC9VU0QnLCAnYmFzZSc6ICdYUlAnLCAncXVvdGUnOiAnVVNEJyB9LFxuICAgICAgICAnWFJQL0VVUic6IHsgJ2lkJzogJ3hycGV1cicsICdzeW1ib2wnOiAnWFJQL0VVUicsICdiYXNlJzogJ1hSUCcsICdxdW90ZSc6ICdFVVInIH0sXG4gICAgICAgICdYUlAvQlRDJzogeyAnaWQnOiAneHJwYnRjJywgJ3N5bWJvbCc6ICdYUlAvQlRDJywgJ2Jhc2UnOiAnWFJQJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ0xUQy9VU0QnOiB7ICdpZCc6ICdsdGN1c2QnLCAnc3ltYm9sJzogJ0xUQy9VU0QnLCAnYmFzZSc6ICdMVEMnLCAncXVvdGUnOiAnVVNEJyB9LFxuICAgICAgICAnTFRDL0VVUic6IHsgJ2lkJzogJ2x0Y2V1cicsICdzeW1ib2wnOiAnTFRDL0VVUicsICdiYXNlJzogJ0xUQycsICdxdW90ZSc6ICdFVVInIH0sXG4gICAgICAgICdMVEMvQlRDJzogeyAnaWQnOiAnbHRjYnRjJywgJ3N5bWJvbCc6ICdMVEMvQlRDJywgJ2Jhc2UnOiAnTFRDJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ0VUSC9VU0QnOiB7ICdpZCc6ICdldGh1c2QnLCAnc3ltYm9sJzogJ0VUSC9VU0QnLCAnYmFzZSc6ICdFVEgnLCAncXVvdGUnOiAnVVNEJyB9LFxuICAgICAgICAnRVRIL0VVUic6IHsgJ2lkJzogJ2V0aGV1cicsICdzeW1ib2wnOiAnRVRIL0VVUicsICdiYXNlJzogJ0VUSCcsICdxdW90ZSc6ICdFVVInIH0sXG4gICAgICAgICdFVEgvQlRDJzogeyAnaWQnOiAnZXRoYnRjJywgJ3N5bWJvbCc6ICdFVEgvQlRDJywgJ2Jhc2UnOiAnRVRIJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IGF3YWl0IHRoaXMucHVibGljR2V0T3JkZXJCb29rSWQgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnaWQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHBhcnNlSW50IChvcmRlcmJvb2tbJ3RpbWVzdGFtcCddKSAqIDEwMDA7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IFtdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaWRlcyA9IFsgJ2JpZHMnLCAnYXNrcycgXTtcbiAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBzaWRlcy5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1tzXTtcbiAgICAgICAgICAgIGxldCBvcmRlcnMgPSBvcmRlcmJvb2tbc2lkZV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBvcmRlciA9IG9yZGVyc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgcHJpY2UgPSBwYXJzZUZsb2F0IChvcmRlclswXSk7XG4gICAgICAgICAgICAgICAgbGV0IGFtb3VudCA9IHBhcnNlRmxvYXQgKG9yZGVyWzFdKTtcbiAgICAgICAgICAgICAgICByZXN1bHRbc2lkZV0ucHVzaCAoWyBwcmljZSwgYW1vdW50IF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgbGV0IHRpY2tlciA9IGF3YWl0IHRoaXMucHVibGljR2V0VGlja2VySWQgKHtcbiAgICAgICAgICAgICdpZCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gcGFyc2VJbnQgKHRpY2tlclsndGltZXN0YW1wJ10pICogMTAwMDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2JpZCddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2FzayddKSxcbiAgICAgICAgICAgICd2d2FwJzogcGFyc2VGbG9hdCAodGlja2VyWyd2d2FwJ10pLFxuICAgICAgICAgICAgJ29wZW4nOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ29wZW4nXSksXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdCddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbHVtZSddKSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBwYXJzZVRyYWRlICh0cmFkZSwgbWFya2V0KSB7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSBwYXJzZUludCAodHJhZGVbJ2RhdGUnXSk7XG4gICAgICAgIGxldCBzaWRlID0gKHRyYWRlWyd0eXBlJ10gPT0gMCkgPyAnYnV5JyA6ICdzZWxsJztcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpZCc6IHRyYWRlWyd0aWQnXS50b1N0cmluZyAoKSxcbiAgICAgICAgICAgICdpbmZvJzogdHJhZGUsXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ3N5bWJvbCc6IG1hcmtldFsnc3ltYm9sJ10sXG4gICAgICAgICAgICAndHlwZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdzaWRlJzogc2lkZSxcbiAgICAgICAgICAgICdwcmljZSc6IHBhcnNlRmxvYXQgKHRyYWRlWydwcmljZSddKSxcbiAgICAgICAgICAgICdhbW91bnQnOiBwYXJzZUZsb2F0ICh0cmFkZVsnYW1vdW50J10pLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgbSA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFRyYW5zYWN0aW9uc0lkICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2lkJzogbVsnaWQnXSxcbiAgICAgICAgICAgICd0aW1lJzogJ21pbnV0ZScsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVRyYWRlcyAocmVzcG9uc2UsIG0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBsZXQgYmFsYW5jZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RCYWxhbmNlICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGJhbGFuY2UgfTtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCB0aGlzLmN1cnJlbmNpZXMubGVuZ3RoOyBjKyspIHtcbiAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IHRoaXMuY3VycmVuY2llc1tjXTtcbiAgICAgICAgICAgIGxldCBsb3dlcmNhc2UgPSBjdXJyZW5jeS50b0xvd2VyQ2FzZSAoKTtcbiAgICAgICAgICAgIGxldCB0b3RhbCA9IGxvd2VyY2FzZSArICdfYmFsYW5jZSc7XG4gICAgICAgICAgICBsZXQgZnJlZSA9IGxvd2VyY2FzZSArICdfYXZhaWxhYmxlJztcbiAgICAgICAgICAgIGxldCB1c2VkID0gbG93ZXJjYXNlICsgJ19yZXNlcnZlZCc7XG4gICAgICAgICAgICBsZXQgYWNjb3VudCA9IHtcbiAgICAgICAgICAgICAgICAnZnJlZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAndXNlZCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAndG90YWwnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGZyZWUgaW4gYmFsYW5jZSlcbiAgICAgICAgICAgICAgICBhY2NvdW50WydmcmVlJ10gPSBwYXJzZUZsb2F0IChiYWxhbmNlW2ZyZWVdKTtcbiAgICAgICAgICAgIGlmICh1c2VkIGluIGJhbGFuY2UpXG4gICAgICAgICAgICAgICAgYWNjb3VudFsndXNlZCddID0gcGFyc2VGbG9hdCAoYmFsYW5jZVt1c2VkXSk7XG4gICAgICAgICAgICBpZiAodG90YWwgaW4gYmFsYW5jZSlcbiAgICAgICAgICAgICAgICBhY2NvdW50Wyd0b3RhbCddID0gcGFyc2VGbG9hdCAoYmFsYW5jZVt0b3RhbF0pO1xuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IG1ldGhvZCA9ICdwcml2YXRlUG9zdCcgKyB0aGlzLmNhcGl0YWxpemUgKHNpZGUpO1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAnaWQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IGFtb3VudCxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHR5cGUgPT0gJ21hcmtldCcpXG4gICAgICAgICAgICBtZXRob2QgKz0gJ01hcmtldCc7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIG9yZGVyWydwcmljZSddID0gcHJpY2U7XG4gICAgICAgIG1ldGhvZCArPSAnSWQnO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzW21ldGhvZF0gKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ2lkJzogcmVzcG9uc2VbJ2lkJ10sXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdENhbmNlbE9yZGVyICh7ICdpZCc6IGlkIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgJy8nICsgdGhpcy52ZXJzaW9uICsgJy8nICsgdGhpcy5pbXBsb2RlUGFyYW1zIChwYXRoLCBwYXJhbXMpO1xuICAgICAgICBsZXQgcXVlcnkgPSB0aGlzLm9taXQgKHBhcmFtcywgdGhpcy5leHRyYWN0UGFyYW1zIChwYXRoKSk7XG4gICAgICAgIGlmIChhcGkgPT0gJ3B1YmxpYycpIHtcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyAocXVlcnkpLmxlbmd0aClcbiAgICAgICAgICAgICAgICB1cmwgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHF1ZXJ5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghdGhpcy51aWQpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEF1dGhlbnRpY2F0aW9uRXJyb3IgKHRoaXMuaWQgKyAnIHJlcXVpcmVzIGAnICsgdGhpcy5pZCArICcudWlkYCBwcm9wZXJ0eSBmb3IgYXV0aGVudGljYXRpb24nKTtcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCkudG9TdHJpbmcgKCk7XG4gICAgICAgICAgICBsZXQgYXV0aCA9IG5vbmNlICsgdGhpcy51aWQgKyB0aGlzLmFwaUtleTtcbiAgICAgICAgICAgIGxldCBzaWduYXR1cmUgPSB0aGlzLmVuY29kZSAodGhpcy5obWFjICh0aGlzLmVuY29kZSAoYXV0aCksIHRoaXMuZW5jb2RlICh0aGlzLnNlY3JldCkpKTtcbiAgICAgICAgICAgIHF1ZXJ5ID0gdGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICAgICAna2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ3NpZ25hdHVyZSc6IHNpZ25hdHVyZS50b1VwcGVyQ2FzZSAoKSxcbiAgICAgICAgICAgICAgICAnbm9uY2UnOiBub25jZSxcbiAgICAgICAgICAgIH0sIHF1ZXJ5KTtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtTGVuZ3RoJzogYm9keS5sZW5ndGgudG9TdHJpbmcgKCksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdzdGF0dXMnIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlWydzdGF0dXMnXSA9PSAnZXJyb3InKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgYml0dHJleCA9IHtcblxuICAgICdpZCc6ICdiaXR0cmV4JyxcbiAgICAnbmFtZSc6ICdCaXR0cmV4JyxcbiAgICAnY291bnRyaWVzJzogJ1VTJyxcbiAgICAndmVyc2lvbic6ICd2MS4xJyxcbiAgICAncmF0ZUxpbWl0JzogMTUwMCxcbiAgICAnaGFzRmV0Y2hUaWNrZXJzJzogdHJ1ZSxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yNzc2NjM1Mi1jZjBiM2MyNi01ZWQ1LTExZTctODJiNy1mMzgyNmI3YTk3ZDguanBnJyxcbiAgICAgICAgJ2FwaSc6ICdodHRwczovL2JpdHRyZXguY29tL2FwaScsXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly9iaXR0cmV4LmNvbScsXG4gICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAnaHR0cHM6Ly9iaXR0cmV4LmNvbS9Ib21lL0FwaScsXG4gICAgICAgICAgICAnaHR0cHM6Ly93d3cubnBtanMub3JnL3BhY2thZ2Uvbm9kZS5iaXR0cmV4LmFwaScsXG4gICAgICAgIF0sXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnY3VycmVuY2llcycsXG4gICAgICAgICAgICAgICAgJ21hcmtldGhpc3RvcnknLFxuICAgICAgICAgICAgICAgICdtYXJrZXRzJyxcbiAgICAgICAgICAgICAgICAnbWFya2V0c3VtbWFyaWVzJyxcbiAgICAgICAgICAgICAgICAnbWFya2V0c3VtbWFyeScsXG4gICAgICAgICAgICAgICAgJ29yZGVyYm9vaycsXG4gICAgICAgICAgICAgICAgJ3RpY2tlcicsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAnYWNjb3VudCc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ2JhbGFuY2UnLFxuICAgICAgICAgICAgICAgICdiYWxhbmNlcycsXG4gICAgICAgICAgICAgICAgJ2RlcG9zaXRhZGRyZXNzJyxcbiAgICAgICAgICAgICAgICAnZGVwb3NpdGhpc3RvcnknLFxuICAgICAgICAgICAgICAgICdvcmRlcicsXG4gICAgICAgICAgICAgICAgJ29yZGVyaGlzdG9yeScsXG4gICAgICAgICAgICAgICAgJ3dpdGhkcmF3YWxoaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXcnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ21hcmtldCc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ2J1eWxpbWl0JyxcbiAgICAgICAgICAgICAgICAnYnV5bWFya2V0JyxcbiAgICAgICAgICAgICAgICAnY2FuY2VsJyxcbiAgICAgICAgICAgICAgICAnb3Blbm9yZGVycycsXG4gICAgICAgICAgICAgICAgJ3NlbGxsaW1pdCcsXG4gICAgICAgICAgICAgICAgJ3NlbGxtYXJrZXQnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hNYXJrZXRzICgpIHtcbiAgICAgICAgbGV0IG1hcmtldHMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgcCA9IDA7IHAgPCBtYXJrZXRzWydyZXN1bHQnXS5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IG1hcmtldHNbJ3Jlc3VsdCddW3BdO1xuICAgICAgICAgICAgbGV0IGlkID0gbWFya2V0WydNYXJrZXROYW1lJ107XG4gICAgICAgICAgICBsZXQgYmFzZSA9IG1hcmtldFsnTWFya2V0Q3VycmVuY3knXTtcbiAgICAgICAgICAgIGxldCBxdW90ZSA9IG1hcmtldFsnQmFzZUN1cnJlbmN5J107XG4gICAgICAgICAgICBiYXNlID0gdGhpcy5jb21tb25DdXJyZW5jeUNvZGUgKGJhc2UpO1xuICAgICAgICAgICAgcXVvdGUgPSB0aGlzLmNvbW1vbkN1cnJlbmN5Q29kZSAocXVvdGUpO1xuICAgICAgICAgICAgbGV0IHN5bWJvbCA9IGJhc2UgKyAnLycgKyBxdW90ZTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoICh7XG4gICAgICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgICAgICAgICAgJ3N5bWJvbCc6IHN5bWJvbCxcbiAgICAgICAgICAgICAgICAnYmFzZSc6IGJhc2UsXG4gICAgICAgICAgICAgICAgJ3F1b3RlJzogcXVvdGUsXG4gICAgICAgICAgICAgICAgJ2luZm8nOiBtYXJrZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmFjY291bnRHZXRCYWxhbmNlcyAoKTtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gcmVzcG9uc2VbJ3Jlc3VsdCddO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGJhbGFuY2VzIH07XG4gICAgICAgIGxldCBpbmRleGVkID0gdGhpcy5pbmRleEJ5IChiYWxhbmNlcywgJ0N1cnJlbmN5Jyk7XG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgdGhpcy5jdXJyZW5jaWVzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSB0aGlzLmN1cnJlbmNpZXNbY107XG4gICAgICAgICAgICBsZXQgYWNjb3VudCA9IHtcbiAgICAgICAgICAgICAgICAnZnJlZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAndXNlZCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAndG90YWwnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGN1cnJlbmN5IGluIGluZGV4ZWQpIHtcbiAgICAgICAgICAgICAgICBsZXQgYmFsYW5jZSA9IGluZGV4ZWRbY3VycmVuY3ldO1xuICAgICAgICAgICAgICAgIGFjY291bnRbJ2ZyZWUnXSA9IGJhbGFuY2VbJ0F2YWlsYWJsZSddO1xuICAgICAgICAgICAgICAgIGFjY291bnRbJ3VzZWQnXSA9IGJhbGFuY2VbJ0JhbGFuY2UnXSAtIGJhbGFuY2VbJ0F2YWlsYWJsZSddO1xuICAgICAgICAgICAgICAgIGFjY291bnRbJ3RvdGFsJ10gPSBiYWxhbmNlWydCYWxhbmNlJ107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBwYXJzZUJpZEFzayAoYmlkYXNrKSB7XG4gICAgICAgIGxldCBwcmljZSA9IHBhcnNlRmxvYXQgKGJpZGFza1snUmF0ZSddKTtcbiAgICAgICAgbGV0IGFtb3VudCA9IHBhcnNlRmxvYXQgKGJpZGFza1snUXVhbnRpdHknXSk7XG4gICAgICAgIHJldHVybiBbIHByaWNlLCBhbW91bnQgXTtcbiAgICB9LFxuXG4gICAgcGFyc2VCaWRBc2tzIChiaWRhc2tzKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiaWRhc2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCAodGhpcy5wYXJzZUJpZEFzayAoYmlkYXNrc1tpXSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0T3JkZXJib29rICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ21hcmtldCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgICAgICAndHlwZSc6ICdib3RoJyxcbiAgICAgICAgICAgICdkZXB0aCc6IDUwLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IHJlc3BvbnNlWydyZXN1bHQnXTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSB7ICdiaWRzJzogJ2J1eScsICdhc2tzJzogJ3NlbGwnIH07XG4gICAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMgKHNpZGVzKTtcbiAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBrZXlzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICBsZXQga2V5ID0ga2V5c1trXTtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNba2V5XTtcbiAgICAgICAgICAgIHJlc3VsdFtrZXldID0gdGhpcy5wYXJzZUJpZEFza3MgKG9yZGVyYm9va1tzaWRlXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgcGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KSB7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLnBhcnNlODYwMSAodGlja2VyWydUaW1lU3RhbXAnXSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ0hpZ2gnXSksXG4gICAgICAgICAgICAnbG93JzogcGFyc2VGbG9hdCAodGlja2VyWydMb3cnXSksXG4gICAgICAgICAgICAnYmlkJzogcGFyc2VGbG9hdCAodGlja2VyWydCaWQnXSksXG4gICAgICAgICAgICAnYXNrJzogcGFyc2VGbG9hdCAodGlja2VyWydBc2snXSksXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ0xhc3QnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWydCYXNlVm9sdW1lJ10pLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWydWb2x1bWUnXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXJzICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRNYXJrZXRzdW1tYXJpZXMgKCk7XG4gICAgICAgIGxldCB0aWNrZXJzID0gcmVzcG9uc2VbJ3Jlc3VsdCddO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge307XG4gICAgICAgIGZvciAobGV0IHQgPSAwOyB0IDwgdGlja2Vycy5sZW5ndGg7IHQrKykge1xuICAgICAgICAgICAgbGV0IHRpY2tlciA9IHRpY2tlcnNbdF07XG4gICAgICAgICAgICBsZXQgaWQgPSB0aWNrZXJbJ01hcmtldE5hbWUnXTtcbiAgICAgICAgICAgIGxldCBtYXJrZXQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gaWQ7XG4gICAgICAgICAgICBpZiAoaWQgaW4gdGhpcy5tYXJrZXRzX2J5X2lkKSB7XG4gICAgICAgICAgICAgICAgbWFya2V0ID0gdGhpcy5tYXJrZXRzX2J5X2lkW2lkXTtcbiAgICAgICAgICAgICAgICBzeW1ib2wgPSBtYXJrZXRbJ3N5bWJvbCddO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsZXQgWyBxdW90ZSwgYmFzZSBdID0gaWQuc3BsaXQgKCctJyk7XG4gICAgICAgICAgICAgICAgYmFzZSA9IHRoaXMuY29tbW9uQ3VycmVuY3lDb2RlIChiYXNlKTtcbiAgICAgICAgICAgICAgICBxdW90ZSA9IHRoaXMuY29tbW9uQ3VycmVuY3lDb2RlIChxdW90ZSk7XG4gICAgICAgICAgICAgICAgc3ltYm9sID0gYmFzZSArICcvJyArIHF1b3RlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0W3N5bWJvbF0gPSB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIG1hcmtldCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgbSA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldE1hcmtldHN1bW1hcnkgKHtcbiAgICAgICAgICAgICdtYXJrZXQnOiBtWydpZCddLFxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IHRpY2tlciA9IHJlc3BvbnNlWydyZXN1bHQnXVswXTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VUaWNrZXIgKHRpY2tlciwgbSk7XG4gICAgfSxcblxuICAgIHBhcnNlVHJhZGUgKHRyYWRlLCBtYXJrZXQgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMucGFyc2U4NjAxICh0cmFkZVsnVGltZVN0YW1wJ10pO1xuICAgICAgICBsZXQgc2lkZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHRyYWRlWydPcmRlclR5cGUnXSA9PSAnQlVZJykge1xuICAgICAgICAgICAgc2lkZSA9ICdidXknO1xuICAgICAgICB9IGVsc2UgaWYgKHRyYWRlWydPcmRlclR5cGUnXSA9PSAnU0VMTCcpIHtcbiAgICAgICAgICAgIHNpZGUgPSAnc2VsbCc7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHR5cGUgPSB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaWQnOiB0cmFkZVsnSWQnXS50b1N0cmluZyAoKSxcbiAgICAgICAgICAgICdpbmZvJzogdHJhZGUsXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ3N5bWJvbCc6IG1hcmtldFsnc3ltYm9sJ10sXG4gICAgICAgICAgICAndHlwZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdzaWRlJzogc2lkZSxcbiAgICAgICAgICAgICdwcmljZSc6IHRyYWRlWydQcmljZSddLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IHRyYWRlWydRdWFudGl0eSddLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgbSA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldE1hcmtldGhpc3RvcnkgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnbWFya2V0JzogbVsnaWQnXSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlVHJhZGVzIChyZXNwb25zZVsncmVzdWx0J10sIG0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE15T3Blbk9yZGVycyAobWFya2V0ID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgbSA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0UmV0dXJuT3Blbk9yZGVycyAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdjdXJyZW5jeVBhaXInOiBtWydpZCddLFxuICAgICAgICB9KSk7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlT3JkZXJzIChyZXNwb25zZVsncmVzdWx0J10sIG1hcmtldCk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBtZXRob2QgPSAnbWFya2V0R2V0JyArIHRoaXMuY2FwaXRhbGl6ZSAoc2lkZSkgKyB0eXBlO1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAnbWFya2V0JzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICdxdWFudGl0eSc6IGFtb3VudCxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHR5cGUgPT0gJ2xpbWl0JylcbiAgICAgICAgICAgIG9yZGVyWydyYXRlJ10gPSBwcmljZTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpc1ttZXRob2RdICh0aGlzLmV4dGVuZCAob3JkZXIsIHBhcmFtcykpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXNwb25zZSxcbiAgICAgICAgICAgICdpZCc6IHJlc3BvbnNlWydyZXN1bHQnXVsndXVpZCddLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFya2V0R2V0Q2FuY2VsICh7ICd1dWlkJzogaWQgfSk7XG4gICAgfSxcblxuICAgIHBhcnNlT3JkZXIgKG9yZGVyLCBtYXJrZXQgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHNpZGUgPSAob3JkZXJbJ1R5cGUnXSA9PSAnTElNSVRfQlVZJykgPyAnYnV5JyA6ICdzZWxsJztcbiAgICAgICAgbGV0IG9wZW4gPSBvcmRlclsnSXNPcGVuJ107XG4gICAgICAgIGxldCBjYW5jZWxlZCA9IG9yZGVyWydDYW5jZWxJbml0aWF0ZWQnXTtcbiAgICAgICAgbGV0IHN0YXR1cyA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKG9wZW4pIHtcbiAgICAgICAgICAgIHN0YXR1cyA9ICdvcGVuJztcbiAgICAgICAgfSBlbHNlIGlmIChjYW5jZWxlZCkge1xuICAgICAgICAgICAgc3RhdHVzID0gJ2NhbmNlbGVkJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0YXR1cyA9ICdjbG9zZWQnO1xuICAgICAgICB9XG4gICAgICAgIGxldCBzeW1ib2wgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChtYXJrZXQpIHtcbiAgICAgICAgICAgIHN5bWJvbCA9IG1hcmtldFsnc3ltYm9sJ107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgZXhjaGFuZ2UgPSBvcmRlclsnRXhjaGFuZ2UnXTtcbiAgICAgICAgICAgIGlmIChleGNoYW5nZSBpbiB0aGlzLm1hcmtldHNfYnlfaWQpIHtcbiAgICAgICAgICAgICAgICBtYXJrZXQgPSB0aGlzLm1hcmtldHNfYnlfaWRbZXhjaGFuZ2VdO1xuICAgICAgICAgICAgICAgIHN5bWJvbCA9IFsnc3ltYm9sJ107XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMucGFyc2U4NjAxIChvcmRlclsnT3BlbmVkJ10pO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2luZm8nOiBvcmRlcixcbiAgICAgICAgICAgICdpZCc6IG9yZGVyWydPcmRlclV1aWQnXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgJ3R5cGUnOiAnbGltaXQnLFxuICAgICAgICAgICAgJ3NpZGUnOiBzaWRlLFxuICAgICAgICAgICAgJ3ByaWNlJzogb3JkZXJbJ1ByaWNlUGVyVW5pdCddLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IG9yZGVyWydRdWFudGl0eSddLFxuICAgICAgICAgICAgJ3JlbWFpbmluZyc6IG9yZGVyWydRdWFudGl0eVJlbWFpbmluZyddLFxuICAgICAgICAgICAgJ3N0YXR1cyc6IHN0YXR1cyxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlciAoaWQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5hY2NvdW50R2V0T3JkZXIgKHsgJ3V1aWQnOiBpZCB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VPcmRlciAocmVzcG9uc2VbJ3Jlc3VsdCddKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArICcvJyArIHRoaXMudmVyc2lvbiArICcvJztcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgdXJsICs9IGFwaSArICcvJyArIG1ldGhvZC50b0xvd2VyQ2FzZSAoKSArIHBhdGg7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHBhcmFtcykubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocGFyYW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCk7XG4gICAgICAgICAgICB1cmwgKz0gYXBpICsgJy8nO1xuICAgICAgICAgICAgaWYgKCgoYXBpID09ICdhY2NvdW50JykgJiYgKHBhdGggIT0gJ3dpdGhkcmF3JykpIHx8IChwYXRoID09ICdvcGVub3JkZXJzJykpXG4gICAgICAgICAgICAgICAgdXJsICs9IG1ldGhvZC50b0xvd2VyQ2FzZSAoKTtcbiAgICAgICAgICAgIHVybCArPSBwYXRoICsgJz8nICsgdGhpcy51cmxlbmNvZGUgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAgICAgJ25vbmNlJzogbm9uY2UsXG4gICAgICAgICAgICAgICAgJ2FwaWtleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgICAgICBsZXQgc2lnbmF0dXJlID0gdGhpcy5obWFjICh0aGlzLmVuY29kZSAodXJsKSwgdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSwgJ3NoYTUxMicpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHsgJ2FwaXNpZ24nOiBzaWduYXR1cmUgfTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgICAgIGlmICgnc3VjY2VzcycgaW4gcmVzcG9uc2UpXG4gICAgICAgICAgICBpZiAocmVzcG9uc2VbJ3N1Y2Nlc3MnXSlcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGJsaW5rdHJhZGUgPSB7XG5cbiAgICAnaWQnOiAnYmxpbmt0cmFkZScsXG4gICAgJ25hbWUnOiAnQmxpbmtUcmFkZScsXG4gICAgJ2NvdW50cmllcyc6IFsgJ1VTJywgJ1ZFJywgJ1ZOJywgJ0JSJywgJ1BLJywgJ0NMJyBdLFxuICAgICdyYXRlTGltaXQnOiAxMDAwLFxuICAgICd2ZXJzaW9uJzogJ3YxJyxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yNzk5MDk2OC03NWQ5Yzg4NC02NDcwLTExZTctOTA3My00Njc1NmM4ZTdlOGMuanBnJyxcbiAgICAgICAgJ2FwaSc6IHtcbiAgICAgICAgICAgICdwdWJsaWMnOiAnaHR0cHM6Ly9hcGkuYmxpbmt0cmFkZS5jb20vYXBpJyxcbiAgICAgICAgICAgICdwcml2YXRlJzogJ2h0dHBzOi8vYXBpLmJsaW5rdHJhZGUuY29tL3RhcGknLFxuICAgICAgICB9LFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vYmxpbmt0cmFkZS5jb20nLFxuICAgICAgICAnZG9jJzogJ2h0dHBzOi8vYmxpbmt0cmFkZS5jb20vZG9jcycsXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAne2N1cnJlbmN5fS90aWNrZXInLCAgICAvLyA/Y3J5cHRvX2N1cnJlbmN5PUJUQ1xuICAgICAgICAgICAgICAgICd7Y3VycmVuY3l9L29yZGVyYm9vaycsIC8vID9jcnlwdG9fY3VycmVuY3k9QlRDXG4gICAgICAgICAgICAgICAgJ3tjdXJyZW5jeX0vdHJhZGVzJywgICAgLy8gP2NyeXB0b19jdXJyZW5jeT1CVEMmc2luY2U9PFRJTUVTVEFNUD4mbGltaXQ9PE5VTUJFUj5cbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ0QnLCAgIC8vIG9yZGVyXG4gICAgICAgICAgICAgICAgJ0YnLCAgIC8vIGNhbmNlbCBvcmRlclxuICAgICAgICAgICAgICAgICdVMicsICAvLyBiYWxhbmNlXG4gICAgICAgICAgICAgICAgJ1U0JywgIC8vIG15IG9yZGVyc1xuICAgICAgICAgICAgICAgICdVNicsICAvLyB3aXRoZHJhd1xuICAgICAgICAgICAgICAgICdVMTgnLCAvLyBkZXBvc2l0XG4gICAgICAgICAgICAgICAgJ1UyNCcsIC8vIGNvbmZpcm0gd2l0aGRyYXdhbFxuICAgICAgICAgICAgICAgICdVMjYnLCAvLyBsaXN0IHdpdGhkcmF3YWxzXG4gICAgICAgICAgICAgICAgJ1UzMCcsIC8vIGxpc3QgZGVwb3NpdHNcbiAgICAgICAgICAgICAgICAnVTM0JywgLy8gbGVkZ2VyXG4gICAgICAgICAgICAgICAgJ1U3MCcsIC8vIGNhbmNlbCB3aXRoZHJhd2FsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgJ21hcmtldHMnOiB7XG4gICAgICAgICdCVEMvVkVGJzogeyAnaWQnOiAnQlRDVkVGJywgJ3N5bWJvbCc6ICdCVEMvVkVGJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ1ZFRicsICdicm9rZXJJZCc6IDEsICdicm9rZXInOiAnU3VyQml0Y29pbicgfSxcbiAgICAgICAgJ0JUQy9WTkQnOiB7ICdpZCc6ICdCVENWTkQnLCAnc3ltYm9sJzogJ0JUQy9WTkQnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnVk5EJywgJ2Jyb2tlcklkJzogMywgJ2Jyb2tlcic6ICdWQlRDJyB9LFxuICAgICAgICAnQlRDL0JSTCc6IHsgJ2lkJzogJ0JUQ0JSTCcsICdzeW1ib2wnOiAnQlRDL0JSTCcsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdCUkwnLCAnYnJva2VySWQnOiA0LCAnYnJva2VyJzogJ0ZveEJpdCcgfSxcbiAgICAgICAgJ0JUQy9QS1InOiB7ICdpZCc6ICdCVENQS1InLCAnc3ltYm9sJzogJ0JUQy9QS1InLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnUEtSJywgJ2Jyb2tlcklkJzogOCwgJ2Jyb2tlcic6ICdVcmR1Qml0JyB9LFxuICAgICAgICAnQlRDL0NMUCc6IHsgJ2lkJzogJ0JUQ0NMUCcsICdzeW1ib2wnOiAnQlRDL0NMUCcsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdDTFAnLCAnYnJva2VySWQnOiA5LCAnYnJva2VyJzogJ0NoaWxlQml0JyB9LFxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdFUyICh7XG4gICAgICAgICAgICAnQmFsYW5jZVJlcUlEJzogdGhpcy5ub25jZSAoKSxcbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSBhd2FpdCB0aGlzLnB1YmxpY0dldEN1cnJlbmN5T3JkZXJib29rICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2N1cnJlbmN5JzogcFsncXVvdGUnXSxcbiAgICAgICAgICAgICdjcnlwdG9fY3VycmVuY3knOiBwWydiYXNlJ10sXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IFtdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaWRlcyA9IFsgJ2JpZHMnLCAnYXNrcycgXTtcbiAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBzaWRlcy5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1tzXTtcbiAgICAgICAgICAgIGxldCBvcmRlcnMgPSBvcmRlcmJvb2tbc2lkZV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBvcmRlciA9IG9yZGVyc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgcHJpY2UgPSBwYXJzZUZsb2F0IChvcmRlclswXSk7XG4gICAgICAgICAgICAgICAgbGV0IGFtb3VudCA9IHBhcnNlRmxvYXQgKG9yZGVyWzFdKTtcbiAgICAgICAgICAgICAgICByZXN1bHRbc2lkZV0ucHVzaCAoWyBwcmljZSwgYW1vdW50IF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHRpY2tlciA9IGF3YWl0IHRoaXMucHVibGljR2V0Q3VycmVuY3lUaWNrZXIgKHtcbiAgICAgICAgICAgICdjdXJyZW5jeSc6IHBbJ3F1b3RlJ10sXG4gICAgICAgICAgICAnY3J5cHRvX2N1cnJlbmN5JzogcFsnYmFzZSddLFxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgbG93ZXJjYXNlUXVvdGUgPSBwWydxdW90ZSddLnRvTG93ZXJDYXNlICgpO1xuICAgICAgICBsZXQgcXVvdGVWb2x1bWUgPSAndm9sXycgKyBsb3dlcmNhc2VRdW90ZTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2J1eSddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3NlbGwnXSksXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xhc3QnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWyd2b2wnXSksXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbcXVvdGVWb2x1bWVdKSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICByZXR1cm4gdGhpcy5wdWJsaWNHZXRDdXJyZW5jeVRyYWRlcyAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdjdXJyZW5jeSc6IHBbJ3F1b3RlJ10sXG4gICAgICAgICAgICAnY3J5cHRvX2N1cnJlbmN5JzogcFsnYmFzZSddLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgaWYgKHR5cGUgPT0gJ21hcmtldCcpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgYWxsb3dzIGxpbWl0IG9yZGVycyBvbmx5Jyk7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdDbE9yZElEJzogdGhpcy5ub25jZSAoKSxcbiAgICAgICAgICAgICdTeW1ib2wnOiBwWydpZCddLFxuICAgICAgICAgICAgJ1NpZGUnOiB0aGlzLmNhcGl0YWxpemUgKHNpZGUpLFxuICAgICAgICAgICAgJ09yZFR5cGUnOiAyLFxuICAgICAgICAgICAgJ1ByaWNlJzogcHJpY2UsXG4gICAgICAgICAgICAnT3JkZXJRdHknOiBhbW91bnQsXG4gICAgICAgICAgICAnQnJva2VySUQnOiBwWydicm9rZXJJZCddLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0RCAodGhpcy5leHRlbmQgKG9yZGVyLCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnT3JkZXJJRCddLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0RiAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdDbE9yZElEJzogaWQsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddW2FwaV0gKyAnLycgKyB0aGlzLnZlcnNpb24gKyAnLycgKyB0aGlzLmltcGxvZGVQYXJhbXMgKHBhdGgsIHBhcmFtcyk7XG4gICAgICAgIGxldCBxdWVyeSA9IHRoaXMub21pdCAocGFyYW1zLCB0aGlzLmV4dHJhY3RQYXJhbXMgKHBhdGgpKTtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChxdWVyeSkubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG5vbmNlID0gdGhpcy5ub25jZSAoKS50b1N0cmluZyAoKTtcbiAgICAgICAgICAgIGxldCByZXF1ZXN0ID0gdGhpcy5leHRlbmQgKHsgJ01zZ1R5cGUnOiBwYXRoIH0sIHF1ZXJ5KTtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLmpzb24gKHJlcXVlc3QpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQVBJS2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ05vbmNlJzogbm9uY2UsXG4gICAgICAgICAgICAgICAgJ1NpZ25hdHVyZSc6IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKG5vbmNlKSwgdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSksXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBibDNwID0ge1xuXG4gICAgJ2lkJzogJ2JsM3AnLFxuICAgICduYW1lJzogJ0JMM1AnLFxuICAgICdjb3VudHJpZXMnOiBbICdOTCcsICdFVScgXSwgLy8gTmV0aGVybGFuZHMsIEVVXG4gICAgJ3JhdGVMaW1pdCc6IDEwMDAsXG4gICAgJ3ZlcnNpb24nOiAnMScsXG4gICAgJ2NvbW1lbnQnOiAnQW4gZXhjaGFuZ2UgbWFya2V0IGJ5IEJpdG9uaWNOTCcsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjg1MDE3NTItNjBjMjFiODItNmZlYi0xMWU3LTgxOGItMDU1ZWU2ZDBlNzU0LmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly9hcGkuYmwzcC5ldScsXG4gICAgICAgICd3d3cnOiBbXG4gICAgICAgICAgICAnaHR0cHM6Ly9ibDNwLmV1JyxcbiAgICAgICAgICAgICdodHRwczovL2JpdG9uaWMubmwnLFxuICAgICAgICBdLFxuICAgICAgICAnZG9jJzogW1xuICAgICAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS9CaXRvbmljTkwvYmwzcC1hcGkvdHJlZS9tYXN0ZXIvZG9jcycsXG4gICAgICAgICAgICAnaHR0cHM6Ly9ibDNwLmV1L2FwaScsXG4gICAgICAgICAgICAnaHR0cHM6Ly9iaXRvbmljLm5sL2VuL2FwaScsXG4gICAgICAgIF0sXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAne21hcmtldH0vdGlja2VyJyxcbiAgICAgICAgICAgICAgICAne21hcmtldH0vb3JkZXJib29rJyxcbiAgICAgICAgICAgICAgICAne21hcmtldH0vdHJhZGVzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ3ttYXJrZXR9L21vbmV5L2RlcHRoL2Z1bGwnLFxuICAgICAgICAgICAgICAgICd7bWFya2V0fS9tb25leS9vcmRlci9hZGQnLFxuICAgICAgICAgICAgICAgICd7bWFya2V0fS9tb25leS9vcmRlci9jYW5jZWwnLFxuICAgICAgICAgICAgICAgICd7bWFya2V0fS9tb25leS9vcmRlci9yZXN1bHQnLFxuICAgICAgICAgICAgICAgICd7bWFya2V0fS9tb25leS9vcmRlcnMnLFxuICAgICAgICAgICAgICAgICd7bWFya2V0fS9tb25leS9vcmRlcnMvaGlzdG9yeScsXG4gICAgICAgICAgICAgICAgJ3ttYXJrZXR9L21vbmV5L3RyYWRlcy9mZXRjaCcsXG4gICAgICAgICAgICAgICAgJ0dFTk1LVC9tb25leS9pbmZvJyxcbiAgICAgICAgICAgICAgICAnR0VOTUtUL21vbmV5L2RlcG9zaXRfYWRkcmVzcycsXG4gICAgICAgICAgICAgICAgJ0dFTk1LVC9tb25leS9uZXdfZGVwb3NpdF9hZGRyZXNzJyxcbiAgICAgICAgICAgICAgICAnR0VOTUtUL21vbmV5L3dhbGxldC9oaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAnR0VOTUtUL21vbmV5L3dpdGhkcmF3JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9FVVInOiB7ICdpZCc6ICdCVENFVVInLCAnc3ltYm9sJzogJ0JUQy9FVVInLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnRVVSJyB9LFxuICAgICAgICAnTFRDL0VVUic6IHsgJ2lkJzogJ0xUQ0VVUicsICdzeW1ib2wnOiAnTFRDL0VVUicsICdiYXNlJzogJ0xUQycsICdxdW90ZSc6ICdFVVInIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RHRU5NS1RNb25leUluZm8gKCk7XG4gICAgICAgIGxldCBkYXRhID0gcmVzcG9uc2VbJ2RhdGEnXTtcbiAgICAgICAgbGV0IGJhbGFuY2UgPSBkYXRhWyd3YWxsZXRzJ107XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogZGF0YSB9O1xuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IHRoaXMuY3VycmVuY2llcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gdGhpcy5jdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChjdXJyZW5jeSBpbiBiYWxhbmNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCdhdmFpbGFibGUnIGluIGJhbGFuY2VbY3VycmVuY3ldKSB7XG4gICAgICAgICAgICAgICAgICAgIGFjY291bnRbJ2ZyZWUnXSA9IHBhcnNlRmxvYXQgKGJhbGFuY2VbY3VycmVuY3ldWydhdmFpbGFibGUnXVsndmFsdWUnXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGN1cnJlbmN5IGluIGJhbGFuY2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoJ2JhbGFuY2UnIGluIGJhbGFuY2VbY3VycmVuY3ldKSB7XG4gICAgICAgICAgICAgICAgICAgIGFjY291bnRbJ3RvdGFsJ10gPSBwYXJzZUZsb2F0IChiYWxhbmNlW2N1cnJlbmN5XVsnYmFsYW5jZSddWyd2YWx1ZSddKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYWNjb3VudFsndG90YWwnXSkge1xuICAgICAgICAgICAgICAgIGlmIChhY2NvdW50WydmcmVlJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgYWNjb3VudFsndXNlZCddID0gYWNjb3VudFsndG90YWwnXSAtIGFjY291bnRbJ2ZyZWUnXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldE1hcmtldE9yZGVyYm9vayAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdtYXJrZXQnOiBwWydpZCddLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IHJlc3BvbnNlWydkYXRhJ107XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdiaWRzJzogW10sXG4gICAgICAgICAgICAnYXNrcyc6IFtdLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHNpZGVzID0gWyAnYmlkcycsICdhc2tzJyBdO1xuICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IHNpZGVzLmxlbmd0aDsgcysrKSB7XG4gICAgICAgICAgICBsZXQgc2lkZSA9IHNpZGVzW3NdO1xuICAgICAgICAgICAgbGV0IG9yZGVycyA9IG9yZGVyYm9va1tzaWRlXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9yZGVyID0gb3JkZXJzW2ldO1xuICAgICAgICAgICAgICAgIGxldCBwcmljZSA9IG9yZGVyWydwcmljZV9pbnQnXSAvIDEwMDAwMDtcbiAgICAgICAgICAgICAgICBsZXQgYW1vdW50ID0gb3JkZXJbJ2Ftb3VudF9pbnQnXSAvIDEwMDAwMDAwMDtcbiAgICAgICAgICAgICAgICByZXN1bHRbc2lkZV0ucHVzaCAoWyBwcmljZSwgYW1vdW50IF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgbGV0IHRpY2tlciA9IGF3YWl0IHRoaXMucHVibGljR2V0TWFya2V0VGlja2VyICh7XG4gICAgICAgICAgICAnbWFya2V0JzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aWNrZXJbJ3RpbWVzdGFtcCddICogMTAwMDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2JpZCddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2FzayddKSxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdCddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbHVtZSddWycyNGgnXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0TWFya2V0VHJhZGVzICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ21hcmtldCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAnbWFya2V0JzogcFsnaWQnXSxcbiAgICAgICAgICAgICdhbW91bnRfaW50JzogYW1vdW50LFxuICAgICAgICAgICAgJ2ZlZV9jdXJyZW5jeSc6IHBbJ3F1b3RlJ10sXG4gICAgICAgICAgICAndHlwZSc6IChzaWRlID09ICdidXknKSA/ICdiaWQnIDogJ2FzaycsXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlID09ICdsaW1pdCcpXG4gICAgICAgICAgICBvcmRlclsncHJpY2VfaW50J10gPSBwcmljZTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdE1hcmtldE1vbmV5T3JkZXJBZGQgKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ2lkJzogcmVzcG9uc2VbJ29yZGVyX2lkJ10udG9TdHJpbmcgKCksXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdE1hcmtldE1vbmV5T3JkZXJDYW5jZWwgKHsgJ29yZGVyX2lkJzogaWQgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHJlcXVlc3QgPSB0aGlzLmltcGxvZGVQYXJhbXMgKHBhdGgsIHBhcmFtcyk7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgJy8nICsgdGhpcy52ZXJzaW9uICsgJy8nICsgcmVxdWVzdDtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5vbWl0IChwYXJhbXMsIHRoaXMuZXh0cmFjdFBhcmFtcyAocGF0aCkpO1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHF1ZXJ5KS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChxdWVyeSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpO1xuICAgICAgICAgICAgYm9keSA9IHRoaXMudXJsZW5jb2RlICh0aGlzLmV4dGVuZCAoeyAnbm9uY2UnOiBub25jZSB9LCBxdWVyeSkpO1xuICAgICAgICAgICAgbGV0IHNlY3JldCA9IHRoaXMuYmFzZTY0VG9CaW5hcnkgKHRoaXMuc2VjcmV0KTtcbiAgICAgICAgICAgIGxldCBhdXRoID0gcmVxdWVzdCArIFwiXFwwXCIgKyBib2R5O1xuICAgICAgICAgICAgbGV0IHNpZ25hdHVyZSA9IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKGF1dGgpLCBzZWNyZXQsICdzaGE1MTInLCAnYmFzZTY0Jyk7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICAgICAgICAnQ29udGVudC1MZW5ndGgnOiBib2R5Lmxlbmd0aCxcbiAgICAgICAgICAgICAgICAnUmVzdC1LZXknOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgICAgICAnUmVzdC1TaWduJzogc2lnbmF0dXJlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGJ0Y2NoaW5hID0ge1xuXG4gICAgJ2lkJzogJ2J0Y2NoaW5hJyxcbiAgICAnbmFtZSc6ICdCVENDaGluYScsXG4gICAgJ2NvdW50cmllcyc6ICdDTicsXG4gICAgJ3JhdGVMaW1pdCc6IDE1MDAsXG4gICAgJ3ZlcnNpb24nOiAndjEnLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2MzY4LTQ2NWIzMjg2LTVlZDYtMTFlNy05YTExLTBmNjQ2N2UxZDgyYi5qcGcnLFxuICAgICAgICAnYXBpJzoge1xuICAgICAgICAgICAgJ3B1YmxpYyc6ICdodHRwczovL2RhdGEuYnRjY2hpbmEuY29tL2RhdGEnLFxuICAgICAgICAgICAgJ3ByaXZhdGUnOiAnaHR0cHM6Ly9hcGkuYnRjY2hpbmEuY29tL2FwaV90cmFkZV92MS5waHAnLFxuICAgICAgICB9LFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vd3d3LmJ0Y2NoaW5hLmNvbScsXG4gICAgICAgICdkb2MnOiAnaHR0cHM6Ly93d3cuYnRjY2hpbmEuY29tL2FwaWRvY3MnXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnaGlzdG9yeWRhdGEnLFxuICAgICAgICAgICAgICAgICdvcmRlcmJvb2snLFxuICAgICAgICAgICAgICAgICd0aWNrZXInLFxuICAgICAgICAgICAgICAgICd0cmFkZXMnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnQnV5SWNlYmVyZ09yZGVyJyxcbiAgICAgICAgICAgICAgICAnQnV5T3JkZXInLFxuICAgICAgICAgICAgICAgICdCdXlPcmRlcjInLFxuICAgICAgICAgICAgICAgICdCdXlTdG9wT3JkZXInLFxuICAgICAgICAgICAgICAgICdDYW5jZWxJY2ViZXJnT3JkZXInLFxuICAgICAgICAgICAgICAgICdDYW5jZWxPcmRlcicsXG4gICAgICAgICAgICAgICAgJ0NhbmNlbFN0b3BPcmRlcicsXG4gICAgICAgICAgICAgICAgJ0dldEFjY291bnRJbmZvJyxcbiAgICAgICAgICAgICAgICAnZ2V0QXJjaGl2ZWRPcmRlcicsXG4gICAgICAgICAgICAgICAgJ2dldEFyY2hpdmVkT3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnR2V0RGVwb3NpdHMnLFxuICAgICAgICAgICAgICAgICdHZXRJY2ViZXJnT3JkZXInLFxuICAgICAgICAgICAgICAgICdHZXRJY2ViZXJnT3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnR2V0TWFya2V0RGVwdGgnLFxuICAgICAgICAgICAgICAgICdHZXRNYXJrZXREZXB0aDInLFxuICAgICAgICAgICAgICAgICdHZXRPcmRlcicsXG4gICAgICAgICAgICAgICAgJ0dldE9yZGVycycsXG4gICAgICAgICAgICAgICAgJ0dldFN0b3BPcmRlcicsXG4gICAgICAgICAgICAgICAgJ0dldFN0b3BPcmRlcnMnLFxuICAgICAgICAgICAgICAgICdHZXRUcmFuc2FjdGlvbnMnLFxuICAgICAgICAgICAgICAgICdHZXRXaXRoZHJhd2FsJyxcbiAgICAgICAgICAgICAgICAnR2V0V2l0aGRyYXdhbHMnLFxuICAgICAgICAgICAgICAgICdSZXF1ZXN0V2l0aGRyYXdhbCcsXG4gICAgICAgICAgICAgICAgJ1NlbGxJY2ViZXJnT3JkZXInLFxuICAgICAgICAgICAgICAgICdTZWxsT3JkZXInLFxuICAgICAgICAgICAgICAgICdTZWxsT3JkZXIyJyxcbiAgICAgICAgICAgICAgICAnU2VsbFN0b3BPcmRlcicsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE1hcmtldHMgKCkge1xuICAgICAgICBsZXQgbWFya2V0cyA9IGF3YWl0IHRoaXMucHVibGljR2V0VGlja2VyICh7XG4gICAgICAgICAgICAnbWFya2V0JzogJ2FsbCcsXG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMgKG1hcmtldHMpO1xuICAgICAgICBmb3IgKGxldCBwID0gMDsgcCA8IGtleXMubGVuZ3RoOyBwKyspIHtcbiAgICAgICAgICAgIGxldCBrZXkgPSBrZXlzW3BdO1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IG1hcmtldHNba2V5XTtcbiAgICAgICAgICAgIGxldCBwYXJ0cyA9IGtleS5zcGxpdCAoJ18nKTtcbiAgICAgICAgICAgIGxldCBpZCA9IHBhcnRzWzFdO1xuICAgICAgICAgICAgbGV0IGJhc2UgPSBpZC5zbGljZSAoMCwgMyk7XG4gICAgICAgICAgICBsZXQgcXVvdGUgPSBpZC5zbGljZSAoMywgNik7XG4gICAgICAgICAgICBiYXNlID0gYmFzZS50b1VwcGVyQ2FzZSAoKTtcbiAgICAgICAgICAgIHF1b3RlID0gcXVvdGUudG9VcHBlckNhc2UgKCk7XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gYmFzZSArICcvJyArIHF1b3RlO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2ggKHtcbiAgICAgICAgICAgICAgICAnaWQnOiBpZCxcbiAgICAgICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgICAgICdiYXNlJzogYmFzZSxcbiAgICAgICAgICAgICAgICAncXVvdGUnOiBxdW90ZSxcbiAgICAgICAgICAgICAgICAnaW5mbyc6IG1hcmtldCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RHZXRBY2NvdW50SW5mbyAoKTtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gcmVzcG9uc2VbJ3Jlc3VsdCddO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGJhbGFuY2VzIH07XG5cbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCB0aGlzLmN1cnJlbmNpZXMubGVuZ3RoOyBjKyspIHtcbiAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IHRoaXMuY3VycmVuY2llc1tjXTtcbiAgICAgICAgICAgIGxldCBsb3dlcmNhc2UgPSBjdXJyZW5jeS50b0xvd2VyQ2FzZSAoKTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd1c2VkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAobG93ZXJjYXNlIGluIGJhbGFuY2VzWydiYWxhbmNlJ10pXG4gICAgICAgICAgICAgICAgYWNjb3VudFsndG90YWwnXSA9IHBhcnNlRmxvYXQgKGJhbGFuY2VzWydiYWxhbmNlJ11bbG93ZXJjYXNlXVsnYW1vdW50J10pO1xuICAgICAgICAgICAgaWYgKGxvd2VyY2FzZSBpbiBiYWxhbmNlc1snZnJvemVuJ10pXG4gICAgICAgICAgICAgICAgYWNjb3VudFsndXNlZCddID0gcGFyc2VGbG9hdCAoYmFsYW5jZXNbJ2Zyb3plbiddW2xvd2VyY2FzZV1bJ2Ftb3VudCddKTtcbiAgICAgICAgICAgIGFjY291bnRbJ2ZyZWUnXSA9IGFjY291bnRbJ3RvdGFsJ10gLSBhY2NvdW50Wyd1c2VkJ107XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRPcmRlcmJvb2sgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnbWFya2V0JzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSBvcmRlcmJvb2tbJ2RhdGUnXSAqIDEwMDA7O1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBvcmRlcmJvb2tbJ2JpZHMnXSxcbiAgICAgICAgICAgICdhc2tzJzogb3JkZXJib29rWydhc2tzJ10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICByZXN1bHRbJ2Fza3MnXSA9IHRoaXMuc29ydEJ5IChyZXN1bHRbJ2Fza3MnXSwgMCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHRpY2tlcnMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFRpY2tlciAoe1xuICAgICAgICAgICAgJ21hcmtldCc6IHBbJ2lkJ10sXG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgdGlja2VyID0gdGlja2Vyc1sndGlja2VyJ107XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aWNrZXJbJ2RhdGUnXSAqIDEwMDA7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2hpZ2gnXSksXG4gICAgICAgICAgICAnbG93JzogcGFyc2VGbG9hdCAodGlja2VyWydsb3cnXSksXG4gICAgICAgICAgICAnYmlkJzogcGFyc2VGbG9hdCAodGlja2VyWydidXknXSksXG4gICAgICAgICAgICAnYXNrJzogcGFyc2VGbG9hdCAodGlja2VyWydzZWxsJ10pLFxuICAgICAgICAgICAgJ3Z3YXAnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3Z3YXAnXSksXG4gICAgICAgICAgICAnb3Blbic6IHBhcnNlRmxvYXQgKHRpY2tlclsnb3BlbiddKSxcbiAgICAgICAgICAgICdjbG9zZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsncHJldl9jbG9zZSddKSxcbiAgICAgICAgICAgICdmaXJzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsYXN0JzogcGFyc2VGbG9hdCAodGlja2VyWydsYXN0J10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndm9sJ10pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldFRyYWRlcyAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdtYXJrZXQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IG1ldGhvZCA9ICdwcml2YXRlUG9zdCcgKyB0aGlzLmNhcGl0YWxpemUgKHNpZGUpICsgJ09yZGVyMic7XG4gICAgICAgIGxldCBvcmRlciA9IHt9O1xuICAgICAgICBsZXQgaWQgPSBwWydpZCddLnRvVXBwZXJDYXNlICgpO1xuICAgICAgICBpZiAodHlwZSA9PSAnbWFya2V0Jykge1xuICAgICAgICAgICAgb3JkZXJbJ3BhcmFtcyddID0gWyB1bmRlZmluZWQsIGFtb3VudCwgaWQgXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9yZGVyWydwYXJhbXMnXSA9IFsgcHJpY2UsIGFtb3VudCwgaWQgXTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzW21ldGhvZF0gKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ2lkJzogcmVzcG9uc2VbJ2lkJ10sXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG1hcmtldCA9IHBhcmFtc1snbWFya2V0J107IC8vIFRPRE8gZml4bWVcbiAgICAgICAgcmV0dXJuIHRoaXMucHJpdmF0ZVBvc3RDYW5jZWxPcmRlciAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdwYXJhbXMnOiBbIGlkLCBtYXJrZXQgXSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIG5vbmNlICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWljcm9zZWNvbmRzICgpO1xuICAgIH0sXG5cbiAgICByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddW2FwaV0gKyAnLycgKyBwYXRoO1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHBhcmFtcykubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocGFyYW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5hcGlLZXkpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEF1dGhlbnRpY2F0aW9uRXJyb3IgKHRoaXMuaWQgKyAnIHJlcXVpcmVzIGAnICsgdGhpcy5pZCArICcuYXBpS2V5YCBwcm9wZXJ0eSBmb3IgYXV0aGVudGljYXRpb24nKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5zZWNyZXQpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEF1dGhlbnRpY2F0aW9uRXJyb3IgKHRoaXMuaWQgKyAnIHJlcXVpcmVzIGAnICsgdGhpcy5pZCArICcuc2VjcmV0YCBwcm9wZXJ0eSBmb3IgYXV0aGVudGljYXRpb24nKTtcbiAgICAgICAgICAgIGxldCBwID0gW107XG4gICAgICAgICAgICBpZiAoJ3BhcmFtcycgaW4gcGFyYW1zKVxuICAgICAgICAgICAgICAgIHAgPSBwYXJhbXNbJ3BhcmFtcyddO1xuICAgICAgICAgICAgbGV0IG5vbmNlID0gdGhpcy5ub25jZSAoKTtcbiAgICAgICAgICAgIGxldCByZXF1ZXN0ID0ge1xuICAgICAgICAgICAgICAgICdtZXRob2QnOiBwYXRoLFxuICAgICAgICAgICAgICAgICdpZCc6IG5vbmNlLFxuICAgICAgICAgICAgICAgICdwYXJhbXMnOiBwLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHAgPSBwLmpvaW4gKCcsJyk7XG4gICAgICAgICAgICBib2R5ID0gdGhpcy5qc29uIChyZXF1ZXN0KTtcbiAgICAgICAgICAgIGxldCBxdWVyeSA9IChcbiAgICAgICAgICAgICAgICAndG9uY2U9JyArIG5vbmNlICtcbiAgICAgICAgICAgICAgICAnJmFjY2Vzc2tleT0nICsgdGhpcy5hcGlLZXkgK1xuICAgICAgICAgICAgICAgICcmcmVxdWVzdG1ldGhvZD0nICsgbWV0aG9kLnRvTG93ZXJDYXNlICgpICtcbiAgICAgICAgICAgICAgICAnJmlkPScgKyBub25jZSArXG4gICAgICAgICAgICAgICAgJyZtZXRob2Q9JyArIHBhdGggK1xuICAgICAgICAgICAgICAgICcmcGFyYW1zPScgKyBwXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbGV0IHNpZ25hdHVyZSA9IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKHF1ZXJ5KSwgdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSwgJ3NoYTEnKTtcbiAgICAgICAgICAgIGxldCBhdXRoID0gdGhpcy5hcGlLZXkgKyAnOicgKyBzaWduYXR1cmU7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdDb250ZW50LUxlbmd0aCc6IGJvZHkubGVuZ3RoLFxuICAgICAgICAgICAgICAgICdBdXRob3JpemF0aW9uJzogJ0Jhc2ljICcgKyB0aGlzLnN0cmluZ1RvQmFzZTY0IChhdXRoKSxcbiAgICAgICAgICAgICAgICAnSnNvbi1ScGMtVG9uY2UnOiBub25jZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBidGNlID0ge1xuXG4gICAgJ2lkJzogJ2J0Y2UnLFxuICAgICduYW1lJzogJ0JUQy1lJyxcbiAgICAnY291bnRyaWVzJzogWyAnQkcnLCAnUlUnIF0sIC8vIEJ1bGdhcmlhLCBSdXNzaWFcbiAgICAndmVyc2lvbic6ICczJyxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yNzg0MzIyNS0xYjU3MTUxNC02MTFhLTExZTctOTIwOC0yNjQxYTU2MGI1NjEuanBnJyxcbiAgICAgICAgJ2FwaSc6IHtcbiAgICAgICAgICAgICdwdWJsaWMnOiAnaHR0cHM6Ly9idGMtZS5jb20vYXBpJyxcbiAgICAgICAgICAgICdwcml2YXRlJzogJ2h0dHBzOi8vYnRjLWUuY29tL3RhcGknLFxuICAgICAgICB9LFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vYnRjLWUuY29tJyxcbiAgICAgICAgJ2RvYyc6IFtcbiAgICAgICAgICAgICdodHRwczovL2J0Yy1lLmNvbS9hcGkvMy9kb2NzJyxcbiAgICAgICAgICAgICdodHRwczovL2J0Yy1lLmNvbS90YXBpL2RvY3MnLFxuICAgICAgICBdLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ2luZm8nLFxuICAgICAgICAgICAgICAgICd0aWNrZXIve3BhaXJ9JyxcbiAgICAgICAgICAgICAgICAnZGVwdGgve3BhaXJ9JyxcbiAgICAgICAgICAgICAgICAndHJhZGVzL3twYWlyfScsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAncHJpdmF0ZSc6IHtcbiAgICAgICAgICAgICdwb3N0JzogW1xuICAgICAgICAgICAgICAgICdnZXRJbmZvJyxcbiAgICAgICAgICAgICAgICAnVHJhZGUnLFxuICAgICAgICAgICAgICAgICdBY3RpdmVPcmRlcnMnLFxuICAgICAgICAgICAgICAgICdPcmRlckluZm8nLFxuICAgICAgICAgICAgICAgICdDYW5jZWxPcmRlcicsXG4gICAgICAgICAgICAgICAgJ1RyYWRlSGlzdG9yeScsXG4gICAgICAgICAgICAgICAgJ1RyYW5zSGlzdG9yeScsXG4gICAgICAgICAgICAgICAgJ0NvaW5EZXBvc2l0QWRkcmVzcycsXG4gICAgICAgICAgICAgICAgJ1dpdGhkcmF3Q29pbicsXG4gICAgICAgICAgICAgICAgJ0NyZWF0ZUNvdXBvbicsXG4gICAgICAgICAgICAgICAgJ1JlZGVlbUNvdXBvbicsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoTWFya2V0cyAoKSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0SW5mbyAoKTtcbiAgICAgICAgbGV0IG1hcmtldHMgPSByZXNwb25zZVsncGFpcnMnXTtcbiAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyAobWFya2V0cyk7XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgcCA9IDA7IHAgPCBrZXlzLmxlbmd0aDsgcCsrKSB7XG4gICAgICAgICAgICBsZXQgaWQgPSBrZXlzW3BdO1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IG1hcmtldHNbaWRdO1xuICAgICAgICAgICAgbGV0IFsgYmFzZSwgcXVvdGUgXSA9IGlkLnNwbGl0ICgnXycpO1xuICAgICAgICAgICAgYmFzZSA9IGJhc2UudG9VcHBlckNhc2UgKCk7XG4gICAgICAgICAgICBxdW90ZSA9IHF1b3RlLnRvVXBwZXJDYXNlICgpO1xuICAgICAgICAgICAgaWYgKGJhc2UgPT0gJ0RTSCcpXG4gICAgICAgICAgICAgICAgYmFzZSA9ICdEQVNIJztcbiAgICAgICAgICAgIGJhc2UgPSB0aGlzLmNvbW1vbkN1cnJlbmN5Q29kZSAoYmFzZSk7XG4gICAgICAgICAgICBxdW90ZSA9IHRoaXMuY29tbW9uQ3VycmVuY3lDb2RlIChxdW90ZSk7XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gYmFzZSArICcvJyArIHF1b3RlO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2ggKHtcbiAgICAgICAgICAgICAgICAnaWQnOiBpZCxcbiAgICAgICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgICAgICdiYXNlJzogYmFzZSxcbiAgICAgICAgICAgICAgICAncXVvdGUnOiBxdW90ZSxcbiAgICAgICAgICAgICAgICAnaW5mbyc6IG1hcmtldCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RHZXRJbmZvICgpO1xuICAgICAgICBsZXQgYmFsYW5jZXMgPSByZXNwb25zZVsncmV0dXJuJ107XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogYmFsYW5jZXMgfTtcbiAgICAgICAgbGV0IGZ1bmRzID0gYmFsYW5jZXNbJ2Z1bmRzJ107XG4gICAgICAgIGxldCBjdXJyZW5jaWVzID0gT2JqZWN0LmtleXMgKGZ1bmRzKTtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBjdXJyZW5jaWVzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBjdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IHVwcGVyY2FzZSA9IGN1cnJlbmN5LnRvVXBwZXJDYXNlICgpO1xuICAgICAgICAgICAgLy8gdGhleSBtaXNzcGVsbCBEQVNIIGFzIGRzaCA6L1xuICAgICAgICAgICAgaWYgKHVwcGVyY2FzZSA9PSAnRFNIJylcbiAgICAgICAgICAgICAgICB1cHBlcmNhc2UgPSAnREFTSCc7XG4gICAgICAgICAgICBsZXQgYWNjb3VudCA9IHtcbiAgICAgICAgICAgICAgICAnZnJlZSc6IGZ1bmRzW2N1cnJlbmN5XSxcbiAgICAgICAgICAgICAgICAndXNlZCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAndG90YWwnOiBmdW5kc1tjdXJyZW5jeV0sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVzdWx0W3VwcGVyY2FzZV0gPSBhY2NvdW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0RGVwdGhQYWlyICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ3BhaXInOiBwWydpZCddLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgaWYgKHBbJ2lkJ10gaW4gcmVzcG9uc2UpIHtcbiAgICAgICAgICAgIGxldCBvcmRlcmJvb2sgPSByZXNwb25zZVtwWydpZCddXTtcbiAgICAgICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAgICAgJ2JpZHMnOiBvcmRlcmJvb2tbJ2JpZHMnXSxcbiAgICAgICAgICAgICAgICAnYXNrcyc6IG9yZGVyYm9va1snYXNrcyddLFxuICAgICAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlc3VsdFsnYmlkcyddID0gdGhpcy5zb3J0QnkgKHJlc3VsdFsnYmlkcyddLCAwLCB0cnVlKTtcbiAgICAgICAgICAgIHJlc3VsdFsnYXNrcyddID0gdGhpcy5zb3J0QnkgKHJlc3VsdFsnYXNrcyddLCAwKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyBwWydzeW1ib2wnXSArICcgb3JkZXIgYm9vayBpcyBlbXB0eSBvciBub3QgYXZhaWxhYmxlJyk7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHRpY2tlcnMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFRpY2tlclBhaXIgKHtcbiAgICAgICAgICAgICdwYWlyJzogcFsnaWQnXSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aWNrZXIgPSB0aWNrZXJzW3BbJ2lkJ11dO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGlja2VyWyd1cGRhdGVkJ10gKiAxMDAwO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogdGlja2VyWydoaWdoJ10gPyB0aWNrZXJbJ2hpZ2gnXSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsb3cnOiB0aWNrZXJbJ2xvdyddID8gdGlja2VyWydsb3cnXSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiaWQnOiB0aWNrZXJbJ3NlbGwnXSA/IHRpY2tlclsnYnV5J10gOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXNrJzogdGlja2VyWydidXknXSA/IHRpY2tlclsnc2VsbCddIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3Z3YXAnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnb3Blbic6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjbG9zZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdmaXJzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsYXN0JzogdGlja2VyWydsYXN0J10gPyB0aWNrZXJbJ2xhc3QnXSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdGlja2VyWydhdmcnXSA/IHRpY2tlclsnYXZnJ10gOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHRpY2tlclsndm9sX2N1ciddID8gdGlja2VyWyd2b2xfY3VyJ10gOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiB0aWNrZXJbJ3ZvbCddID8gdGlja2VyWyd2b2wnXSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wdWJsaWNHZXRUcmFkZXNQYWlyICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ3BhaXInOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG9yZGVyID0ge1xuICAgICAgICAgICAgJ3BhaXInOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICAgICAgJ3R5cGUnOiBzaWRlLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IGFtb3VudCxcbiAgICAgICAgICAgICdyYXRlJzogcHJpY2UsXG4gICAgICAgIH07XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RUcmFkZSAodGhpcy5leHRlbmQgKG9yZGVyLCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsncmV0dXJuJ11bJ29yZGVyX2lkJ10sXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdENhbmNlbE9yZGVyICh7ICdvcmRlcl9pZCc6IGlkIH0pO1xuICAgIH0sXG5cbiAgICBwYXJzZU9yZGVyIChvcmRlcikge1xuICAgICAgICBsZXQgc3RhdHVzQ29kZSA9IG9yZGVyWydzdGF0dXMnXTtcbiAgICAgICAgbGV0IHN0YXR1cyA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHN0YXR1c0NvZGUgPT0gMCkge1xuICAgICAgICAgICAgc3RhdHVzID0gJ29wZW4nO1xuICAgICAgICB9IGVsc2UgaWYgKChzdGF0dXNDb2RlID09IDIpIHx8IChzdGF0dXNDb2RlID09IDMpKSB7XG4gICAgICAgICAgICBzdGF0dXMgPSAnY2FuY2VsZWQnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RhdHVzID0gJ2Nsb3NlZCc7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IG9yZGVyWyd0aW1lc3RhbXBfY3JlYXRlZCddICogMTAwMDtcbiAgICAgICAgbGV0IG1hcmtldCA9IHRoaXMubWFya2V0c19ieV9pZFtvcmRlclsncGFpciddXTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdpbmZvJzogb3JkZXIsXG4gICAgICAgICAgICAnaWQnOiBvcmRlclsnaWQnXSxcbiAgICAgICAgICAgICdzeW1ib2wnOiBtYXJrZXRbJ3N5bWJvbCddLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICd0eXBlJzogJ2xpbWl0JyxcbiAgICAgICAgICAgICdzaWRlJzogb3JkZXJbJ3R5cGUnXSxcbiAgICAgICAgICAgICdwcmljZSc6IG9yZGVyWydyYXRlJ10sXG4gICAgICAgICAgICAnYW1vdW50Jzogb3JkZXJbJ3N0YXJ0X2Ftb3VudCddLFxuICAgICAgICAgICAgJ3JlbWFpbmluZyc6IG9yZGVyWydhbW91bnQnXSxcbiAgICAgICAgICAgICdzdGF0dXMnOiBzdGF0dXMsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXIgKGlkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RPcmRlckluZm8gKHsgJ29yZGVyX2lkJzogaWQgfSk7XG4gICAgICAgIGxldCBvcmRlciA9IHJlc3BvbnNlWydyZXR1cm4nXVtpZF07XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlT3JkZXIgKHRoaXMuZXh0ZW5kICh7ICdpZCc6IGlkIH0sIG9yZGVyKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ11bYXBpXSArICcvJyArIHRoaXMudmVyc2lvbiArICcvJyArIHRoaXMuaW1wbG9kZVBhcmFtcyAocGF0aCwgcGFyYW1zKTtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5vbWl0IChwYXJhbXMsIHRoaXMuZXh0cmFjdFBhcmFtcyAocGF0aCkpO1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHF1ZXJ5KS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChxdWVyeSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpO1xuICAgICAgICAgICAgYm9keSA9IHRoaXMudXJsZW5jb2RlICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgICAgICdub25jZSc6IG5vbmNlLFxuICAgICAgICAgICAgICAgICdtZXRob2QnOiBwYXRoLFxuICAgICAgICAgICAgfSwgcXVlcnkpKTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgICAgICAgICdDb250ZW50LUxlbmd0aCc6IGJvZHkubGVuZ3RoLFxuICAgICAgICAgICAgICAgICdLZXknOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgICAgICAnU2lnbic6IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKGJvZHkpLCB0aGlzLmVuY29kZSAodGhpcy5zZWNyZXQpLCAnc2hhNTEyJyksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdzdWNjZXNzJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIGlmICghcmVzcG9uc2VbJ3N1Y2Nlc3MnXSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgJyArIHRoaXMuanNvbiAocmVzcG9uc2UpKTtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGJ0Y21hcmtldHMgPSB7XG5cbiAgICAnaWQnOiAnYnRjbWFya2V0cycsXG4gICAgJ25hbWUnOiAnQlRDIE1hcmtldHMnLFxuICAgICdjb3VudHJpZXMnOiAnQVUnLCAvLyBBdXN0cmFsaWFcbiAgICAncmF0ZUxpbWl0JzogMTAwMCwgLy8gbWFya2V0IGRhdGEgY2FjaGVkIGZvciAxIHNlY29uZCAodHJhZGVzIGNhY2hlZCBmb3IgMiBzZWNvbmRzKVxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI5MTQyOTExLTBlMWFjZmMyLTdkNWMtMTFlNy05OGM0LTA3ZDk1MzJiMjlkNy5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vYXBpLmJ0Y21hcmtldHMubmV0JyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL2J0Y21hcmtldHMubmV0LycsXG4gICAgICAgICdkb2MnOiAnaHR0cHM6Ly9naXRodWIuY29tL0JUQ01hcmtldHMvQVBJJyxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdtYXJrZXQve2lkfS90aWNrJyxcbiAgICAgICAgICAgICAgICAnbWFya2V0L3tpZH0vb3JkZXJib29rJyxcbiAgICAgICAgICAgICAgICAnbWFya2V0L3tpZH0vdHJhZGVzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnYWNjb3VudC9iYWxhbmNlJyxcbiAgICAgICAgICAgICAgICAnYWNjb3VudC97aWR9L3RyYWRpbmdmZWUnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICdwb3N0JzogW1xuICAgICAgICAgICAgICAgICdmdW5kdHJhbnNmZXIvd2l0aGRyYXdDcnlwdG8nLFxuICAgICAgICAgICAgICAgICdmdW5kdHJhbnNmZXIvd2l0aGRyYXdFRlQnLFxuICAgICAgICAgICAgICAgICdvcmRlci9jcmVhdGUnLFxuICAgICAgICAgICAgICAgICdvcmRlci9jYW5jZWwnLFxuICAgICAgICAgICAgICAgICdvcmRlci9oaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAnb3JkZXIvb3BlbicsXG4gICAgICAgICAgICAgICAgJ29yZGVyL3RyYWRlL2hpc3RvcnknLFxuICAgICAgICAgICAgICAgICdvcmRlci9jcmVhdGVCYXRjaCcsIC8vIHRoZXkgcHJvbWlzZSBpdCdzIGNvbWluZyBzb29uLi4uXG4gICAgICAgICAgICAgICAgJ29yZGVyL2RldGFpbCcsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgJ21hcmtldHMnOiB7XG4gICAgICAgICdCVEMvQVVEJzogeyAnaWQnOiAnQlRDL0FVRCcsICdzeW1ib2wnOiAnQlRDL0FVRCcsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdBVUQnIH0sXG4gICAgICAgICdMVEMvQVVEJzogeyAnaWQnOiAnTFRDL0FVRCcsICdzeW1ib2wnOiAnTFRDL0FVRCcsICdiYXNlJzogJ0xUQycsICdxdW90ZSc6ICdBVUQnIH0sXG4gICAgICAgICdFVEgvQVVEJzogeyAnaWQnOiAnRVRIL0FVRCcsICdzeW1ib2wnOiAnRVRIL0FVRCcsICdiYXNlJzogJ0VUSCcsICdxdW90ZSc6ICdBVUQnIH0sXG4gICAgICAgICdFVEMvQVVEJzogeyAnaWQnOiAnRVRDL0FVRCcsICdzeW1ib2wnOiAnRVRDL0FVRCcsICdiYXNlJzogJ0VUQycsICdxdW90ZSc6ICdBVUQnIH0sXG4gICAgICAgICdYUlAvQVVEJzogeyAnaWQnOiAnWFJQL0FVRCcsICdzeW1ib2wnOiAnWFJQL0FVRCcsICdiYXNlJzogJ1hSUCcsICdxdW90ZSc6ICdBVUQnIH0sXG4gICAgICAgICdCQ0gvQVVEJzogeyAnaWQnOiAnQkNIL0FVRCcsICdzeW1ib2wnOiAnQkNIL0FVRCcsICdiYXNlJzogJ0JDSCcsICdxdW90ZSc6ICdBVUQnIH0sXG4gICAgICAgICdMVEMvQlRDJzogeyAnaWQnOiAnTFRDL0JUQycsICdzeW1ib2wnOiAnTFRDL0JUQycsICdiYXNlJzogJ0xUQycsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdFVEgvQlRDJzogeyAnaWQnOiAnRVRIL0JUQycsICdzeW1ib2wnOiAnRVRIL0JUQycsICdiYXNlJzogJ0VUSCcsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdFVEMvQlRDJzogeyAnaWQnOiAnRVRDL0JUQycsICdzeW1ib2wnOiAnRVRDL0JUQycsICdiYXNlJzogJ0VUQycsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdYUlAvQlRDJzogeyAnaWQnOiAnWFJQL0JUQycsICdzeW1ib2wnOiAnWFJQL0JUQycsICdiYXNlJzogJ1hSUCcsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdCQ0gvQlRDJzogeyAnaWQnOiAnQkNIL0JUQycsICdzeW1ib2wnOiAnQkNIL0JUQycsICdiYXNlJzogJ0JDSCcsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBiYWxhbmNlcyA9IGF3YWl0IHRoaXMucHJpdmF0ZUdldEFjY291bnRCYWxhbmNlICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGJhbGFuY2VzIH07XG4gICAgICAgIGZvciAobGV0IGIgPSAwOyBiIDwgYmFsYW5jZXMubGVuZ3RoOyBiKyspIHtcbiAgICAgICAgICAgIGxldCBiYWxhbmNlID0gYmFsYW5jZXNbYl07XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBiYWxhbmNlWydjdXJyZW5jeSddO1xuICAgICAgICAgICAgbGV0IG11bHRpcGxpZXIgPSAxMDAwMDAwMDA7XG4gICAgICAgICAgICBsZXQgZnJlZSA9IHBhcnNlRmxvYXQgKGJhbGFuY2VbJ2JhbGFuY2UnXSAvIG11bHRpcGxpZXIpO1xuICAgICAgICAgICAgbGV0IHVzZWQgPSBwYXJzZUZsb2F0IChiYWxhbmNlWydwZW5kaW5nRnVuZHMnXSAvIG11bHRpcGxpZXIpO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiBmcmVlLFxuICAgICAgICAgICAgICAgICd1c2VkJzogdXNlZCxcbiAgICAgICAgICAgICAgICAndG90YWwnOiB0aGlzLnN1bSAoZnJlZSwgdXNlZCksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgcGFyc2VCaWRBc2sgKGJpZGFzaykge1xuICAgICAgICBsZXQgcHJpY2UgPSBiaWRhc2tbMF07XG4gICAgICAgIGxldCBhbW91bnQgPSBiaWRhc2tbMV07XG4gICAgICAgIHJldHVybiBbIHByaWNlLCBhbW91bnQgXTtcbiAgICB9LFxuXG4gICAgcGFyc2VCaWRBc2tzIChiaWRhc2tzKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiaWRhc2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCAodGhpcy5wYXJzZUJpZEFzayAoYmlkYXNrc1tpXSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBtID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSBhd2FpdCB0aGlzLnB1YmxpY0dldE1hcmtldElkT3JkZXJib29rICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2lkJzogbVsnaWQnXSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSBvcmRlcmJvb2tbJ3RpbWVzdGFtcCddICogMTAwMDtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdiaWRzJzogW10sXG4gICAgICAgICAgICAnYXNrcyc6IFtdLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHNpZGVzID0gWyAnYmlkcycsICdhc2tzJyBdO1xuICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IHNpZGVzLmxlbmd0aDsgcysrKSB7XG4gICAgICAgICAgICBsZXQgc2lkZSA9IHNpZGVzW3NdO1xuICAgICAgICAgICAgcmVzdWx0W3NpZGVdID0gdGhpcy5wYXJzZUJpZEFza3MgKG9yZGVyYm9va1tzaWRlXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgcGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KSB7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aWNrZXJbJ3RpbWVzdGFtcCddICogMTAwMDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsb3cnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmlkJzogcGFyc2VGbG9hdCAodGlja2VyWydiZXN0QmlkJ10pLFxuICAgICAgICAgICAgJ2Fzayc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYmVzdEFzayddKSxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdFByaWNlJ10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndm9sdW1lMjRoJ10pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG0gPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHRpY2tlciA9IGF3YWl0IHRoaXMucHVibGljR2V0TWFya2V0SWRUaWNrICh7XG4gICAgICAgICAgICAnaWQnOiBtWydpZCddLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VUaWNrZXIgKHRpY2tlciwgbSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldE1hcmtldElkVHJhZGVzICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgLy8gJ3NpbmNlJzogNTk4NjgzNDUyMzEsXG4gICAgICAgICAgICAnaWQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG0gPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IG11bHRpcGxpZXIgPSAxMDAwMDAwMDA7IC8vIGZvciBwcmljZSBhbmQgdm9sdW1lXG4gICAgICAgIC8vIGRvZXMgQlRDIE1hcmtldHMgc3VwcG9ydCBtYXJrZXQgb3JkZXJzIGF0IGFsbD9cbiAgICAgICAgbGV0IG9yZGVyU2lkZSA9IChzaWRlID09ICdidXknKSA/ICdCaWQnIDogJ0Fzayc7XG4gICAgICAgIGxldCBvcmRlciA9IHRoaXMub3JkZXJlZCAoe1xuICAgICAgICAgICAgJ2N1cnJlbmN5JzogbVsncXVvdGUnXSxcbiAgICAgICAgICAgICdpbnN0cnVtZW50JzogbVsnYmFzZSddLFxuICAgICAgICAgICAgJ3ByaWNlJzogcHJpY2UgKiBtdWx0aXBsaWVyLFxuICAgICAgICAgICAgJ3ZvbHVtZSc6IGFtb3VudCAqIG11bHRpcGxpZXIsXG4gICAgICAgICAgICAnb3JkZXJTaWRlJzogb3JkZXJTaWRlLFxuICAgICAgICAgICAgJ29yZGVydHlwZSc6IHRoaXMuY2FwaXRhbGl6ZSAodHlwZSksXG4gICAgICAgICAgICAnY2xpZW50UmVxdWVzdElkJzogdGhpcy5ub25jZSAoKS50b1N0cmluZyAoKSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RPcmRlckNyZWF0ZSAodGhpcy5leHRlbmQgKG9yZGVyLCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnaWQnXS50b1N0cmluZyAoKSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXJzIChpZHMpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJpdmF0ZVBvc3RPcmRlckNhbmNlbCAoeyAnb3JkZXJfaWRzJzogaWRzIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FuY2VsT3JkZXJzIChbIGlkIF0pO1xuICAgIH0sXG5cbiAgICBub25jZSAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJpID0gJy8nICsgdGhpcy5pbXBsb2RlUGFyYW1zIChwYXRoLCBwYXJhbXMpO1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArIHVyaTtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5vbWl0IChwYXJhbXMsIHRoaXMuZXh0cmFjdFBhcmFtcyAocGF0aCkpO1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHBhcmFtcykubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocGFyYW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCkudG9TdHJpbmcgKCk7XG4gICAgICAgICAgICBsZXQgYXV0aCA9IHVyaSArIFwiXFxuXCIgKyBub25jZSArIFwiXFxuXCI7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgICAgJ2FwaWtleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgICAgICd0aW1lc3RhbXAnOiBub25jZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAobWV0aG9kID09ICdQT1NUJykge1xuICAgICAgICAgICAgICAgIGJvZHkgPSB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICAgICAgICAgIGhlYWRlcnNbJ0NvbnRlbnQtTGVuZ3RoJ10gPSBib2R5Lmxlbmd0aDtcbiAgICAgICAgICAgICAgICBhdXRoICs9IGJvZHk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgc2VjcmV0ID0gdGhpcy5iYXNlNjRUb0JpbmFyeSAodGhpcy5zZWNyZXQpO1xuICAgICAgICAgICAgbGV0IHNpZ25hdHVyZSA9IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKGF1dGgpLCBzZWNyZXQsICdzaGE1MTInLCAnYmFzZTY0Jyk7XG4gICAgICAgICAgICBoZWFkZXJzWydzaWduYXR1cmUnXSA9IHNpZ25hdHVyZTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgICAgIGlmIChhcGkgPT0gJ3ByaXZhdGUnKSB7XG4gICAgICAgICAgICBpZiAoJ3N1Y2Nlc3MnIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgICAgIGlmICghcmVzcG9uc2VbJ3N1Y2Nlc3MnXSlcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGJ0Y3RyYWRlciA9IHtcblxuICAgICdpZCc6ICdidGN0cmFkZXInLFxuICAgICduYW1lJzogJ0JUQ1RyYWRlcicsXG4gICAgJ2NvdW50cmllcyc6IFsgJ1RSJywgJ0dSJywgJ1BIJyBdLCAvLyBUdXJrZXksIEdyZWVjZSwgUGhpbGlwcGluZXNcbiAgICAncmF0ZUxpbWl0JzogMTAwMCxcbiAgICAnY29tbWVudCc6ICdiYXNlIEFQSSBmb3IgQlRDRXhjaGFuZ2UsIEJUQ1R1cmsnLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3OTkyNDA0LWNkYTFlMzg2LTY0OWMtMTFlNy04ZGMxLTQwYmJkMjg5Nzc2OC5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vd3d3LmJ0Y3RyYWRlci5jb20vYXBpJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy5idGN0cmFkZXIuY29tJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL2dpdGh1Yi5jb20vQlRDVHJhZGVyL2Jyb2tlci1hcGktZG9jcycsXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnb2hsY2RhdGEnLCAvLyA/bGFzdD1DT1VOVFxuICAgICAgICAgICAgICAgICdvcmRlcmJvb2snLFxuICAgICAgICAgICAgICAgICd0aWNrZXInLFxuICAgICAgICAgICAgICAgICd0cmFkZXMnLCAgIC8vID9sYXN0PUNPVU5UIChtYXggNTApXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAncHJpdmF0ZSc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ2JhbGFuY2UnLFxuICAgICAgICAgICAgICAgICdvcGVuT3JkZXJzJyxcbiAgICAgICAgICAgICAgICAndXNlclRyYW5zYWN0aW9ucycsIC8vID9vZmZzZXQ9MCZsaW1pdD0yNSZzb3J0PWFzY1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICdwb3N0JzogW1xuICAgICAgICAgICAgICAgICdidXknLFxuICAgICAgICAgICAgICAgICdjYW5jZWxPcmRlcicsXG4gICAgICAgICAgICAgICAgJ3NlbGwnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlR2V0QmFsYW5jZSAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiByZXNwb25zZSB9O1xuICAgICAgICBsZXQgYmFzZSA9IHtcbiAgICAgICAgICAgICdmcmVlJzogcmVzcG9uc2VbJ2JpdGNvaW5fYXZhaWxhYmxlJ10sXG4gICAgICAgICAgICAndXNlZCc6IHJlc3BvbnNlWydiaXRjb2luX3Jlc2VydmVkJ10sXG4gICAgICAgICAgICAndG90YWwnOiByZXNwb25zZVsnYml0Y29pbl9iYWxhbmNlJ10sXG4gICAgICAgIH07XG4gICAgICAgIGxldCBxdW90ZSA9IHtcbiAgICAgICAgICAgICdmcmVlJzogcmVzcG9uc2VbJ21vbmV5X2F2YWlsYWJsZSddLFxuICAgICAgICAgICAgJ3VzZWQnOiByZXNwb25zZVsnbW9uZXlfcmVzZXJ2ZWQnXSxcbiAgICAgICAgICAgICd0b3RhbCc6IHJlc3BvbnNlWydtb25leV9iYWxhbmNlJ10sXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzeW1ib2wgPSB0aGlzLnN5bWJvbHNbMF07XG4gICAgICAgIGxldCBtYXJrZXQgPSB0aGlzLm1hcmtldHNbc3ltYm9sXTtcbiAgICAgICAgcmVzdWx0W21hcmtldFsnYmFzZSddXSA9IGJhc2U7XG4gICAgICAgIHJlc3VsdFttYXJrZXRbJ3F1b3RlJ11dID0gcXVvdGU7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSBhd2FpdCB0aGlzLnB1YmxpY0dldE9yZGVyYm9vayAocGFyYW1zKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHBhcnNlSW50IChvcmRlcmJvb2tbJ3RpbWVzdGFtcCddICogMTAwMCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IFtdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaWRlcyA9IFsgJ2JpZHMnLCAnYXNrcycgXTtcbiAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBzaWRlcy5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1tzXTtcbiAgICAgICAgICAgIGxldCBvcmRlcnMgPSBvcmRlcmJvb2tbc2lkZV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBvcmRlciA9IG9yZGVyc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgcHJpY2UgPSBwYXJzZUZsb2F0IChvcmRlclswXSk7XG4gICAgICAgICAgICAgICAgbGV0IGFtb3VudCA9IHBhcnNlRmxvYXQgKG9yZGVyWzFdKTtcbiAgICAgICAgICAgICAgICByZXN1bHRbc2lkZV0ucHVzaCAoWyBwcmljZSwgYW1vdW50IF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgbGV0IHRpY2tlciA9IGF3YWl0IHRoaXMucHVibGljR2V0VGlja2VyICgpO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gcGFyc2VJbnQgKHRpY2tlclsndGltZXN0YW1wJ10gKiAxMDAwKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2JpZCddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2FzayddKSxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ29wZW4nXSksXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdCddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogcGFyc2VGbG9hdCAodGlja2VyWydhdmVyYWdlJ10pLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbHVtZSddKSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgbWF4Q291bnQgPSA1MDtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0VHJhZGVzIChwYXJhbXMpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgbWV0aG9kID0gJ3ByaXZhdGVQb3N0JyArIHRoaXMuY2FwaXRhbGl6ZSAoc2lkZSk7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdUeXBlJzogKHNpZGUgPT0gJ2J1eScpID8gJ0J1eUJ0YycgOiAnU2VsQnRjJyxcbiAgICAgICAgICAgICdJc01hcmtldE9yZGVyJzogKHR5cGUgPT0gJ21hcmtldCcpID8gMSA6IDAsXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlID09ICdtYXJrZXQnKSB7XG4gICAgICAgICAgICBpZiAoc2lkZSA9PSAnYnV5JylcbiAgICAgICAgICAgICAgICBvcmRlclsnVG90YWwnXSA9IGFtb3VudDtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBvcmRlclsnQW1vdW50J10gPSBhbW91bnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvcmRlclsnUHJpY2UnXSA9IHByaWNlO1xuICAgICAgICAgICAgb3JkZXJbJ0Ftb3VudCddID0gYW1vdW50O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXNbbWV0aG9kXSAodGhpcy5leHRlbmQgKG9yZGVyLCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnaWQnXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0Q2FuY2VsT3JkZXIgKHsgJ2lkJzogaWQgfSk7XG4gICAgfSxcblxuICAgIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHRoaXMuaWQgPT0gJ2J0Y3RyYWRlcicpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgaXMgYW4gYWJzdHJhY3QgYmFzZSBBUEkgZm9yIEJUQ0V4Y2hhbmdlLCBCVENUdXJrJyk7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgJy8nICsgcGF0aDtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChwYXJhbXMpLmxlbmd0aClcbiAgICAgICAgICAgICAgICB1cmwgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHBhcmFtcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpLnRvU3RyaW5nO1xuICAgICAgICAgICAgYm9keSA9IHRoaXMudXJsZW5jb2RlIChwYXJhbXMpO1xuICAgICAgICAgICAgbGV0IHNlY3JldCA9IHRoaXMuYmFzZTY0VG9TdHJpbmcgKHRoaXMuc2VjcmV0KTtcbiAgICAgICAgICAgIGxldCBhdXRoID0gdGhpcy5hcGlLZXkgKyBub25jZTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ1gtUENLJzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ1gtU3RhbXAnOiBub25jZS50b1N0cmluZyAoKSxcbiAgICAgICAgICAgICAgICAnWC1TaWduYXR1cmUnOiB0aGlzLmhtYWMgKHRoaXMuZW5jb2RlIChhdXRoKSwgc2VjcmV0LCAnc2hhMjU2JywgJ2Jhc2U2NCcpLFxuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICAgICAgICAnQ29udGVudC1MZW5ndGgnOiBib2R5Lmxlbmd0aCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBidGNleGNoYW5nZSA9IGV4dGVuZCAoYnRjdHJhZGVyLCB7XG5cbiAgICAnaWQnOiAnYnRjZXhjaGFuZ2UnLFxuICAgICduYW1lJzogJ0JUQ0V4Y2hhbmdlJyxcbiAgICAnY291bnRyaWVzJzogJ1BIJywgLy8gUGhpbGlwcGluZXNcbiAgICAncmF0ZUxpbWl0JzogMTUwMCxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yNzk5MzA1Mi00YzkyOTExYS02NGFhLTExZTctOTZkOC1lYzZhYzM0MzU3NTcuanBnJyxcbiAgICAgICAgJ2FwaSc6ICdodHRwczovL3d3dy5idGNleGNoYW5nZS5waC9hcGknLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vd3d3LmJ0Y2V4Y2hhbmdlLnBoJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL2dpdGh1Yi5jb20vQlRDVHJhZGVyL2Jyb2tlci1hcGktZG9jcycsXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9QSFAnOiB7ICdpZCc6ICdCVEMvUEhQJywgJ3N5bWJvbCc6ICdCVEMvUEhQJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ1BIUCcgfSxcbiAgICB9LFxufSlcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgYnRjdHJhZGV1YSA9IHtcblxuICAgICdpZCc6ICdidGN0cmFkZXVhJyxcbiAgICAnbmFtZSc6ICdCVEMgVHJhZGUgVUEnLFxuICAgICdjb3VudHJpZXMnOiAnVUEnLCAvLyBVa3JhaW5lLFxuICAgICdyYXRlTGltaXQnOiAzMDAwLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3OTQxNDgzLTc5ZmM3MzUwLTYyZDktMTFlNy05ZjYxLWFjNDdmMjhmY2Q5Ni5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vYnRjLXRyYWRlLmNvbS51YS9hcGknLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vYnRjLXRyYWRlLmNvbS51YScsXG4gICAgICAgICdkb2MnOiAnaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vZG9jdW1lbnQvZC8xb2NZQTB5TXlfUlhkNTYxc2ZHM3FFUFo4MGt5bGwzNkhVeHZDUmU1R2JoRS9lZGl0JyxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdkZWFscy97c3ltYm9sfScsXG4gICAgICAgICAgICAgICAgJ3RyYWRlcy9zZWxsL3tzeW1ib2x9JyxcbiAgICAgICAgICAgICAgICAndHJhZGVzL2J1eS97c3ltYm9sfScsXG4gICAgICAgICAgICAgICAgJ2phcGFuX3N0YXQvaGlnaC97c3ltYm9sfScsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAncHJpdmF0ZSc6IHtcbiAgICAgICAgICAgICdwb3N0JzogW1xuICAgICAgICAgICAgICAgICdhdXRoJyxcbiAgICAgICAgICAgICAgICAnYXNrL3tzeW1ib2x9JyxcbiAgICAgICAgICAgICAgICAnYmFsYW5jZScsXG4gICAgICAgICAgICAgICAgJ2JpZC97c3ltYm9sfScsXG4gICAgICAgICAgICAgICAgJ2J1eS97c3ltYm9sfScsXG4gICAgICAgICAgICAgICAgJ215X29yZGVycy97c3ltYm9sfScsXG4gICAgICAgICAgICAgICAgJ29yZGVyL3N0YXR1cy97aWR9JyxcbiAgICAgICAgICAgICAgICAncmVtb3ZlL29yZGVyL3tpZH0nLFxuICAgICAgICAgICAgICAgICdzZWxsL3tzeW1ib2x9JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9VQUgnOiB7ICdpZCc6ICdidGNfdWFoJywgJ3N5bWJvbCc6ICdCVEMvVUFIJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ1VBSCcgfSxcbiAgICAgICAgJ0VUSC9VQUgnOiB7ICdpZCc6ICdldGhfdWFoJywgJ3N5bWJvbCc6ICdFVEgvVUFIJywgJ2Jhc2UnOiAnRVRIJywgJ3F1b3RlJzogJ1VBSCcgfSxcbiAgICAgICAgJ0xUQy9VQUgnOiB7ICdpZCc6ICdsdGNfdWFoJywgJ3N5bWJvbCc6ICdMVEMvVUFIJywgJ2Jhc2UnOiAnTFRDJywgJ3F1b3RlJzogJ1VBSCcgfSxcbiAgICAgICAgJ0RPR0UvVUFIJzogeyAnaWQnOiAnZG9nZV91YWgnLCAnc3ltYm9sJzogJ0RPR0UvVUFIJywgJ2Jhc2UnOiAnRE9HRScsICdxdW90ZSc6ICdVQUgnIH0sXG4gICAgICAgICdEQVNIL1VBSCc6IHsgJ2lkJzogJ2Rhc2hfdWFoJywgJ3N5bWJvbCc6ICdEQVNIL1VBSCcsICdiYXNlJzogJ0RBU0gnLCAncXVvdGUnOiAnVUFIJyB9LFxuICAgICAgICAnU0lCL1VBSCc6IHsgJ2lkJzogJ3NpYl91YWgnLCAnc3ltYm9sJzogJ1NJQi9VQUgnLCAnYmFzZSc6ICdTSUInLCAncXVvdGUnOiAnVUFIJyB9LFxuICAgICAgICAnS1JCL1VBSCc6IHsgJ2lkJzogJ2tyYl91YWgnLCAnc3ltYm9sJzogJ0tSQi9VQUgnLCAnYmFzZSc6ICdLUkInLCAncXVvdGUnOiAnVUFIJyB9LFxuICAgICAgICAnTlZDL1VBSCc6IHsgJ2lkJzogJ252Y191YWgnLCAnc3ltYm9sJzogJ05WQy9VQUgnLCAnYmFzZSc6ICdOVkMnLCAncXVvdGUnOiAnVUFIJyB9LFxuICAgICAgICAnTFRDL0JUQyc6IHsgJ2lkJzogJ2x0Y19idGMnLCAnc3ltYm9sJzogJ0xUQy9CVEMnLCAnYmFzZSc6ICdMVEMnLCAncXVvdGUnOiAnQlRDJyB9LFxuICAgICAgICAnTlZDL0JUQyc6IHsgJ2lkJzogJ252Y19idGMnLCAnc3ltYm9sJzogJ05WQy9CVEMnLCAnYmFzZSc6ICdOVkMnLCAncXVvdGUnOiAnQlRDJyB9LFxuICAgICAgICAnSVRJL1VBSCc6IHsgJ2lkJzogJ2l0aV91YWgnLCAnc3ltYm9sJzogJ0lUSS9VQUgnLCAnYmFzZSc6ICdJVEknLCAncXVvdGUnOiAnVUFIJyB9LFxuICAgICAgICAnRE9HRS9CVEMnOiB7ICdpZCc6ICdkb2dlX2J0YycsICdzeW1ib2wnOiAnRE9HRS9CVEMnLCAnYmFzZSc6ICdET0dFJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ0RBU0gvQlRDJzogeyAnaWQnOiAnZGFzaF9idGMnLCAnc3ltYm9sJzogJ0RBU0gvQlRDJywgJ2Jhc2UnOiAnREFTSCcsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgfSxcblxuICAgIHNpZ25JbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0QXV0aCAoKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdEJhbGFuY2UgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogcmVzcG9uc2UgfTtcbiAgICAgICAgaWYgKCdhY2NvdW50cycgaW4gcmVzdWx0KSB7XG4gICAgICAgICAgICBsZXQgYWNjb3VudHMgPSByZXNwb25zZVsnYWNjb3VudHMnXTtcbiAgICAgICAgICAgIGZvciAobGV0IGIgPSAwOyBiIDwgYWNjb3VudHMubGVuZ3RoOyBiKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgYWNjb3VudCA9IGFjY291bnRzW2JdO1xuICAgICAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IGFjY291bnRbJ2N1cnJlbmN5J107XG4gICAgICAgICAgICAgICAgbGV0IGJhbGFuY2UgPSBwYXJzZUZsb2F0IChhY2NvdW50WydiYWxhbmNlJ10pO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtjdXJyZW5jeV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICdmcmVlJzogYmFsYW5jZSxcbiAgICAgICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICd0b3RhbCc6IGJhbGFuY2UsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgYmlkcyA9IGF3YWl0IHRoaXMucHVibGljR2V0VHJhZGVzQnV5U3ltYm9sICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ3N5bWJvbCc6IHBbJ2lkJ10sXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgYXNrcyA9IGF3YWl0IHRoaXMucHVibGljR2V0VHJhZGVzU2VsbFN5bWJvbCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiBwWydpZCddLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IHtcbiAgICAgICAgICAgICdiaWRzJzogW10sXG4gICAgICAgICAgICAnYXNrcyc6IFtdLFxuICAgICAgICB9O1xuICAgICAgICBpZiAoYmlkcykge1xuICAgICAgICAgICAgaWYgKCdsaXN0JyBpbiBiaWRzKVxuICAgICAgICAgICAgICAgIG9yZGVyYm9va1snYmlkcyddID0gYmlkc1snbGlzdCddO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhc2tzKSB7XG4gICAgICAgICAgICBpZiAoJ2xpc3QnIGluIGFza3MpXG4gICAgICAgICAgICAgICAgb3JkZXJib29rWydhc2tzJ10gPSBhc2tzWydsaXN0J107XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAob3JkZXJbJ3ByaWNlJ10pO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBwYXJzZUZsb2F0IChvcmRlclsnY3VycmVuY3lfdHJhZGUnXSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3NpZGVdLnB1c2ggKFsgcHJpY2UsIGFtb3VudCBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0SmFwYW5TdGF0SGlnaFN5bWJvbCAoe1xuICAgICAgICAgICAgJ3N5bWJvbCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgdGlja2VyID0gcmVzcG9uc2VbJ3RyYWRlcyddO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbG93JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2JpZCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhc2snOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgICAgIGxldCB0aWNrZXJMZW5ndGggPSB0aWNrZXIubGVuZ3RoO1xuICAgICAgICBpZiAodGlja2VyTGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgbGV0IHN0YXJ0ID0gTWF0aC5tYXggKHRpY2tlckxlbmd0aCAtIDQ4LCAwKTtcbiAgICAgICAgICAgIGZvciAobGV0IHQgPSBzdGFydDsgdCA8IHRpY2tlci5sZW5ndGg7IHQrKykge1xuICAgICAgICAgICAgICAgIGxldCBjYW5kbGUgPSB0aWNrZXJbdF07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByZXN1bHRbJ29wZW4nXSA9PSAndW5kZWZpbmVkJylcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0WydvcGVuJ10gPSBjYW5kbGVbMV07XG4gICAgICAgICAgICAgICAgaWYgKCh0eXBlb2YgcmVzdWx0WydoaWdoJ10gPT0gJ3VuZGVmaW5lZCcpIHx8IChyZXN1bHRbJ2hpZ2gnXSA8IGNhbmRsZVsyXSkpXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdFsnaGlnaCddID0gY2FuZGxlWzJdO1xuICAgICAgICAgICAgICAgIGlmICgodHlwZW9mIHJlc3VsdFsnbG93J10gPT0gJ3VuZGVmaW5lZCcpIHx8IChyZXN1bHRbJ2xvdyddID4gY2FuZGxlWzNdKSlcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0Wydsb3cnXSA9IGNhbmRsZVszXTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJlc3VsdFsncXVvdGVWb2x1bWUnXSA9PSAndW5kZWZpbmVkJylcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0WydxdW90ZVZvbHVtZSddID0gLWNhbmRsZVs1XTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdFsncXVvdGVWb2x1bWUnXSAtPSBjYW5kbGVbNV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgbGFzdCA9IHRpY2tlckxlbmd0aCAtIDE7XG4gICAgICAgICAgICByZXN1bHRbJ2Nsb3NlJ10gPSB0aWNrZXJbbGFzdF1bNF07XG4gICAgICAgICAgICByZXN1bHRbJ3F1b3RlVm9sdW1lJ10gPSAtMSAqIHJlc3VsdFsncXVvdGVWb2x1bWUnXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdGhpcy5wdWJsaWNHZXREZWFsc1N5bWJvbCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgaWYgKHR5cGUgPT0gJ21hcmtldCcpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgYWxsb3dzIGxpbWl0IG9yZGVycyBvbmx5Jyk7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCBtZXRob2QgPSAncHJpdmF0ZVBvc3QnICsgdGhpcy5jYXBpdGFsaXplIChzaWRlKSArICdJZCc7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdjb3VudCc6IGFtb3VudCxcbiAgICAgICAgICAgICdjdXJyZW5jeTEnOiBwWydxdW90ZSddLFxuICAgICAgICAgICAgJ2N1cnJlbmN5JzogcFsnYmFzZSddLFxuICAgICAgICAgICAgJ3ByaWNlJzogcHJpY2UsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB0aGlzW21ldGhvZF0gKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdFJlbW92ZU9yZGVySWQgKHsgJ2lkJzogaWQgfSk7XG4gICAgfSxcblxuICAgIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ10gKyAnLycgKyB0aGlzLmltcGxvZGVQYXJhbXMgKHBhdGgsIHBhcmFtcyk7XG4gICAgICAgIGxldCBxdWVyeSA9IHRoaXMub21pdCAocGFyYW1zLCB0aGlzLmV4dHJhY3RQYXJhbXMgKHBhdGgpKTtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChxdWVyeSkubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSB0aGlzLmltcGxvZGVQYXJhbXMgKHBhdGgsIHF1ZXJ5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCk7XG4gICAgICAgICAgICBib2R5ID0gdGhpcy51cmxlbmNvZGUgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAgICAgJ291dF9vcmRlcl9pZCc6IG5vbmNlLFxuICAgICAgICAgICAgICAgICdub25jZSc6IG5vbmNlLFxuICAgICAgICAgICAgfSwgcXVlcnkpKTtcbiAgICAgICAgICAgIGxldCBhdXRoID0gYm9keSArIHRoaXMuc2VjcmV0O1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAncHVibGljLWtleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgICAgICdhcGktc2lnbic6IHRoaXMuaGFzaCAodGhpcy5lbmNvZGUgKGF1dGgpLCAnc2hhMjU2JyksXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgICAgICAgICdDb250ZW50LUxlbmd0aCc6IGJvZHkubGVuZ3RoLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGJ0Y3R1cmsgPSBleHRlbmQgKGJ0Y3RyYWRlciwge1xuXG4gICAgJ2lkJzogJ2J0Y3R1cmsnLFxuICAgICduYW1lJzogJ0JUQ1R1cmsnLFxuICAgICdjb3VudHJpZXMnOiAnVFInLCAvLyBUdXJrZXlcbiAgICAncmF0ZUxpbWl0JzogMTAwMCxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yNzk5MjcwOS0xOGUxNTY0Ni02NGEzLTExZTctOWZhMi1iMDk1MGVjNzcxMmYuanBnJyxcbiAgICAgICAgJ2FwaSc6ICdodHRwczovL3d3dy5idGN0dXJrLmNvbS9hcGknLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vd3d3LmJ0Y3R1cmsuY29tJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL2dpdGh1Yi5jb20vQlRDVHJhZGVyL2Jyb2tlci1hcGktZG9jcycsXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9UUlknOiB7ICdpZCc6ICdCVEMvVFJZJywgJ3N5bWJvbCc6ICdCVEMvVFJZJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ1RSWScgfSxcbiAgICB9LFxufSlcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgYnRjeCA9IHtcblxuICAgICdpZCc6ICdidGN4JyxcbiAgICAnbmFtZSc6ICdCVENYJyxcbiAgICAnY291bnRyaWVzJzogWyAnSVMnLCAnVVMnLCAnRVUnIF0sXG4gICAgJ3JhdGVMaW1pdCc6IDE1MDAsIC8vIHN1cHBvcnQgaW4gZW5nbGlzaCBpcyB2ZXJ5IHBvb3IsIHVuYWJsZSB0byB0ZWxsIHJhdGUgbGltaXRzXG4gICAgJ3ZlcnNpb24nOiAndjEnLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2Mzg1LTlmZGNjOThjLTVlZDYtMTFlNy04ZjE0LTY2ZDVlNWNkNDdlNi5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vYnRjLXguaXMvYXBpJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL2J0Yy14LmlzJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL2J0Yy14LmlzL2N1c3RvbS9hcGktZG9jdW1lbnQuaHRtbCcsXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnZGVwdGgve2lkfS97bGltaXR9JyxcbiAgICAgICAgICAgICAgICAndGlja2VyL3tpZH0nLFxuICAgICAgICAgICAgICAgICd0cmFkZS97aWR9L3tsaW1pdH0nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnYmFsYW5jZScsXG4gICAgICAgICAgICAgICAgJ2NhbmNlbCcsXG4gICAgICAgICAgICAgICAgJ2hpc3RvcnknLFxuICAgICAgICAgICAgICAgICdvcmRlcicsXG4gICAgICAgICAgICAgICAgJ3JlZGVlbScsXG4gICAgICAgICAgICAgICAgJ3RyYWRlJyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXcnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgICdtYXJrZXRzJzoge1xuICAgICAgICAnQlRDL1VTRCc6IHsgJ2lkJzogJ2J0Yy91c2QnLCAnc3ltYm9sJzogJ0JUQy9VU0QnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnVVNEJyB9LFxuICAgICAgICAnQlRDL0VVUic6IHsgJ2lkJzogJ2J0Yy9ldXInLCAnc3ltYm9sJzogJ0JUQy9FVVInLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnRVVSJyB9LFxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBsZXQgYmFsYW5jZXMgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0QmFsYW5jZSAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiBiYWxhbmNlcyB9O1xuICAgICAgICBsZXQgY3VycmVuY2llcyA9IE9iamVjdC5rZXlzIChiYWxhbmNlcyk7XG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgY3VycmVuY2llcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gY3VycmVuY2llc1tjXTtcbiAgICAgICAgICAgIGxldCB1cHBlcmNhc2UgPSBjdXJyZW5jeS50b1VwcGVyQ2FzZSAoKTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogYmFsYW5jZXNbY3VycmVuY3ldLFxuICAgICAgICAgICAgICAgICd1c2VkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IGJhbGFuY2VzW2N1cnJlbmN5XSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXN1bHRbdXBwZXJjYXNlXSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IGF3YWl0IHRoaXMucHVibGljR2V0RGVwdGhJZExpbWl0ICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2lkJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICdsaW1pdCc6IDEwMDAsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IFtdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaWRlcyA9IFsgJ2JpZHMnLCAnYXNrcycgXTtcbiAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBzaWRlcy5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1tzXTtcbiAgICAgICAgICAgIGxldCBvcmRlcnMgPSBvcmRlcmJvb2tbc2lkZV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBvcmRlciA9IG9yZGVyc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgcHJpY2UgPSBvcmRlclsncHJpY2UnXTtcbiAgICAgICAgICAgICAgICBsZXQgYW1vdW50ID0gb3JkZXJbJ2Ftb3VudCddO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtzaWRlXS5wdXNoIChbIHByaWNlLCBhbW91bnQgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBsZXQgdGlja2VyID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRUaWNrZXJJZCAoe1xuICAgICAgICAgICAgJ2lkJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aWNrZXJbJ3RpbWUnXSAqIDEwMDA7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2hpZ2gnXSksXG4gICAgICAgICAgICAnbG93JzogcGFyc2VGbG9hdCAodGlja2VyWydsb3cnXSksXG4gICAgICAgICAgICAnYmlkJzogcGFyc2VGbG9hdCAodGlja2VyWydzZWxsJ10pLFxuICAgICAgICAgICAgJ2Fzayc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYnV5J10pLFxuICAgICAgICAgICAgJ3Z3YXAnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnb3Blbic6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjbG9zZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdmaXJzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsYXN0JzogcGFyc2VGbG9hdCAodGlja2VyWydsYXN0J10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndm9sdW1lJ10pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldFRyYWRlSWRMaW1pdCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdpZCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgICAgICAnbGltaXQnOiAxMDAwLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdFRyYWRlICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ3R5cGUnOiBzaWRlLnRvVXBwZXJDYXNlICgpLFxuICAgICAgICAgICAgJ21hcmtldCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgICAgICAnYW1vdW50JzogYW1vdW50LFxuICAgICAgICAgICAgJ3ByaWNlJzogcHJpY2UsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXNwb25zZSxcbiAgICAgICAgICAgICdpZCc6IHJlc3BvbnNlWydvcmRlciddWydpZCddLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJpdmF0ZVBvc3RDYW5jZWwgKHsgJ29yZGVyJzogaWQgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ10gKyAnLycgKyB0aGlzLnZlcnNpb24gKyAnLyc7XG4gICAgICAgIGlmIChhcGkgPT0gJ3B1YmxpYycpIHtcbiAgICAgICAgICAgIHVybCArPSB0aGlzLmltcGxvZGVQYXJhbXMgKHBhdGgsIHBhcmFtcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpO1xuICAgICAgICAgICAgdXJsICs9IGFwaTtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLnVybGVuY29kZSAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICAgICAnTWV0aG9kJzogcGF0aC50b1VwcGVyQ2FzZSAoKSxcbiAgICAgICAgICAgICAgICAnTm9uY2UnOiBub25jZSxcbiAgICAgICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgICAgICAgJ0tleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgICAgICdTaWduYXR1cmUnOiB0aGlzLmhtYWMgKHRoaXMuZW5jb2RlIChib2R5KSwgdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSwgJ3NoYTUxMicpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgICAgIGlmICgnZXJyb3InIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlWydlcnJvciddKSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBidGVyID0ge1xuICAgICdpZCc6ICdidGVyJyxcbiAgICAnbmFtZSc6ICdCdGVyJyxcbiAgICAnY291bnRyaWVzJzogWyAnVkcnLCAnQ04nIF0sIC8vIEJyaXRpc2ggVmlyZ2luIElzbGFuZHMsIENoaW5hXG4gICAgJ3ZlcnNpb24nOiAnMicsXG4gICAgJ2hhc0ZldGNoVGlja2Vycyc6IHRydWUsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc5ODA0NzktY2ZhMzE4OGMtNjM4Ny0xMWU3LTgxOTEtOTNmYzQxODRiYTVjLmpwZycsXG4gICAgICAgICdhcGknOiB7XG4gICAgICAgICAgICAncHVibGljJzogJ2h0dHBzOi8vZGF0YS5idGVyLmNvbS9hcGknLFxuICAgICAgICAgICAgJ3ByaXZhdGUnOiAnaHR0cHM6Ly9hcGkuYnRlci5jb20vYXBpJyxcbiAgICAgICAgfSxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL2J0ZXIuY29tJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL2J0ZXIuY29tL2FwaTInLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ3BhaXJzJyxcbiAgICAgICAgICAgICAgICAnbWFya2V0aW5mbycsXG4gICAgICAgICAgICAgICAgJ21hcmtldGxpc3QnLFxuICAgICAgICAgICAgICAgICd0aWNrZXJzJyxcbiAgICAgICAgICAgICAgICAndGlja2VyL3tpZH0nLFxuICAgICAgICAgICAgICAgICdvcmRlckJvb2sve2lkfScsXG4gICAgICAgICAgICAgICAgJ3RyYWRlL3tpZH0nLFxuICAgICAgICAgICAgICAgICd0cmFkZUhpc3Rvcnkve2lkfScsXG4gICAgICAgICAgICAgICAgJ3RyYWRlSGlzdG9yeS97aWR9L3t0aWR9JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2JhbGFuY2VzJyxcbiAgICAgICAgICAgICAgICAnZGVwb3NpdEFkZHJlc3MnLFxuICAgICAgICAgICAgICAgICduZXdBZGRyZXNzJyxcbiAgICAgICAgICAgICAgICAnZGVwb3NpdHNXaXRoZHJhd2FscycsXG4gICAgICAgICAgICAgICAgJ2J1eScsXG4gICAgICAgICAgICAgICAgJ3NlbGwnLFxuICAgICAgICAgICAgICAgICdjYW5jZWxPcmRlcicsXG4gICAgICAgICAgICAgICAgJ2NhbmNlbEFsbE9yZGVycycsXG4gICAgICAgICAgICAgICAgJ2dldE9yZGVyJyxcbiAgICAgICAgICAgICAgICAnb3Blbk9yZGVycycsXG4gICAgICAgICAgICAgICAgJ3RyYWRlSGlzdG9yeScsXG4gICAgICAgICAgICAgICAgJ3dpdGhkcmF3JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoTWFya2V0cyAoKSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0TWFya2V0bGlzdCAoKTtcbiAgICAgICAgbGV0IG1hcmtldHMgPSByZXNwb25zZVsnZGF0YSddO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgbWFya2V0cy5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IG1hcmtldHNbcF07XG4gICAgICAgICAgICBsZXQgaWQgPSBtYXJrZXRbJ3BhaXInXTtcbiAgICAgICAgICAgIGxldCBiYXNlID0gbWFya2V0WydjdXJyX2EnXTtcbiAgICAgICAgICAgIGxldCBxdW90ZSA9IG1hcmtldFsnY3Vycl9iJ107XG4gICAgICAgICAgICBiYXNlID0gdGhpcy5jb21tb25DdXJyZW5jeUNvZGUgKGJhc2UpO1xuICAgICAgICAgICAgcXVvdGUgPSB0aGlzLmNvbW1vbkN1cnJlbmN5Q29kZSAocXVvdGUpO1xuICAgICAgICAgICAgbGV0IHN5bWJvbCA9IGJhc2UgKyAnLycgKyBxdW90ZTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoICh7XG4gICAgICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgICAgICAgICAgJ3N5bWJvbCc6IHN5bWJvbCxcbiAgICAgICAgICAgICAgICAnYmFzZSc6IGJhc2UsXG4gICAgICAgICAgICAgICAgJ3F1b3RlJzogcXVvdGUsXG4gICAgICAgICAgICAgICAgJ2luZm8nOiBtYXJrZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgYmFsYW5jZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RCYWxhbmNlcyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiBiYWxhbmNlIH07XG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgdGhpcy5jdXJyZW5jaWVzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSB0aGlzLmN1cnJlbmNpZXNbY107XG4gICAgICAgICAgICBsZXQgY29kZSA9IHRoaXMuY29tbW9uQ3VycmVuY3lDb2RlIChjdXJyZW5jeSk7XG4gICAgICAgICAgICBsZXQgYWNjb3VudCA9IHtcbiAgICAgICAgICAgICAgICAnZnJlZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAndXNlZCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAndG90YWwnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKCdhdmFpbGFibGUnIGluIGJhbGFuY2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVuY3kgaW4gYmFsYW5jZVsnYXZhaWxhYmxlJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgYWNjb3VudFsnZnJlZSddID0gcGFyc2VGbG9hdCAoYmFsYW5jZVsnYXZhaWxhYmxlJ11bY3VycmVuY3ldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoJ2xvY2tlZCcgaW4gYmFsYW5jZSkge1xuICAgICAgICAgICAgICAgIGlmIChjdXJyZW5jeSBpbiBiYWxhbmNlWydsb2NrZWQnXSkge1xuICAgICAgICAgICAgICAgICAgICBhY2NvdW50Wyd1c2VkJ10gPSBwYXJzZUZsb2F0IChiYWxhbmNlWydsb2NrZWQnXVtjdXJyZW5jeV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFjY291bnRbJ3RvdGFsJ10gPSB0aGlzLnN1bSAoYWNjb3VudFsnZnJlZSddLCBhY2NvdW50Wyd1c2VkJ10pO1xuICAgICAgICAgICAgcmVzdWx0W2NvZGVdID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRPcmRlckJvb2tJZCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdpZCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IFtdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaWRlcyA9IFsgJ2JpZHMnLCAnYXNrcycgXTtcbiAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBzaWRlcy5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1tzXTtcbiAgICAgICAgICAgIGxldCBvcmRlcnMgPSBvcmRlcmJvb2tbc2lkZV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBvcmRlciA9IG9yZGVyc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgcHJpY2UgPSBwYXJzZUZsb2F0IChvcmRlclswXSk7XG4gICAgICAgICAgICAgICAgbGV0IGFtb3VudCA9IHBhcnNlRmxvYXQgKG9yZGVyWzFdKTtcbiAgICAgICAgICAgICAgICByZXN1bHRbc2lkZV0ucHVzaCAoWyBwcmljZSwgYW1vdW50IF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlc3VsdFsnYXNrcyddID0gdGhpcy5zb3J0QnkgKHJlc3VsdFsnYXNrcyddLCAwKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgcGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaDI0aHInXSksXG4gICAgICAgICAgICAnbG93JzogcGFyc2VGbG9hdCAodGlja2VyWydsb3cyNGhyJ10pLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaGVzdEJpZCddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvd2VzdEFzayddKSxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdCddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3BlcmNlbnRDaGFuZ2UnXSksXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2Jhc2VWb2x1bWUnXSksXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3F1b3RlVm9sdW1lJ10pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VycyAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCB0aWNrZXJzID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRUaWNrZXJzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge307XG4gICAgICAgIGxldCBpZHMgPSBPYmplY3Qua2V5cyAodGlja2Vycyk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgaWQgPSBpZHNbaV07XG4gICAgICAgICAgICBsZXQgWyBiYXNlSWQsIHF1b3RlSWQgXSA9IGlkLnNwbGl0ICgnXycpO1xuICAgICAgICAgICAgbGV0IGJhc2UgPSBiYXNlSWQudG9VcHBlckNhc2UgKCk7XG4gICAgICAgICAgICBsZXQgcXVvdGUgPSBxdW90ZUlkLnRvVXBwZXJDYXNlICgpO1xuICAgICAgICAgICAgYmFzZSA9IHRoaXMuY29tbW9uQ3VycmVuY3lDb2RlIChiYXNlKTtcbiAgICAgICAgICAgIHF1b3RlID0gdGhpcy5jb21tb25DdXJyZW5jeUNvZGUgKHF1b3RlKTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBiYXNlICsgJy8nICsgcXVvdGU7XG4gICAgICAgICAgICBsZXQgdGlja2VyID0gdGlja2Vyc1tpZF07XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKHN5bWJvbCBpbiB0aGlzLm1hcmtldHMpXG4gICAgICAgICAgICAgICAgbWFya2V0ID0gdGhpcy5tYXJrZXRzW3N5bWJvbF07XG4gICAgICAgICAgICBpZiAoaWQgaW4gdGhpcy5tYXJrZXRzX2J5X2lkKVxuICAgICAgICAgICAgICAgIG1hcmtldCA9IHRoaXMubWFya2V0c19ieV9pZFtpZF07XG4gICAgICAgICAgICByZXN1bHRbc3ltYm9sXSA9IHRoaXMucGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCB0aWNrZXIgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFRpY2tlcklkICh7XG4gICAgICAgICAgICAnaWQnOiBwWydpZCddLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VUaWNrZXIgKHRpY2tlciwgcCk7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldFRyYWRlSGlzdG9yeUlkICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2lkJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGlmICh0eXBlID09ICdtYXJrZXQnKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnIGFsbG93cyBsaW1pdCBvcmRlcnMgb25seScpO1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgbWV0aG9kID0gJ3ByaXZhdGVQb3N0JyArIHRoaXMuY2FwaXRhbGl6ZSAoc2lkZSk7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdjdXJyZW5jeVBhaXInOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICAgICAgJ3JhdGUnOiBwcmljZSxcbiAgICAgICAgICAgICdhbW91bnQnOiBhbW91bnQsXG4gICAgICAgIH07XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXNbbWV0aG9kXSAodGhpcy5leHRlbmQgKG9yZGVyLCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnb3JkZXJOdW1iZXInXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0Q2FuY2VsT3JkZXIgKHsgJ29yZGVyTnVtYmVyJzogaWQgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHByZWZpeCA9IChhcGkgPT0gJ3ByaXZhdGUnKSA/IChhcGkgKyAnLycpIDogJyc7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddW2FwaV0gKyB0aGlzLnZlcnNpb24gKyAnLzEvJyArIHByZWZpeCArIHRoaXMuaW1wbG9kZVBhcmFtcyAocGF0aCwgcGFyYW1zKTtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5vbWl0IChwYXJhbXMsIHRoaXMuZXh0cmFjdFBhcmFtcyAocGF0aCkpO1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHF1ZXJ5KS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChxdWVyeSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpO1xuICAgICAgICAgICAgbGV0IHJlcXVlc3QgPSB7ICdub25jZSc6IG5vbmNlIH07XG4gICAgICAgICAgICBib2R5ID0gdGhpcy51cmxlbmNvZGUgKHRoaXMuZXh0ZW5kIChyZXF1ZXN0LCBxdWVyeSkpO1xuICAgICAgICAgICAgbGV0IHNpZ25hdHVyZSA9IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKGJvZHkpLCB0aGlzLmVuY29kZSAodGhpcy5zZWNyZXQpLCAnc2hhNTEyJyk7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdLZXknOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgICAgICAnU2lnbic6IHNpZ25hdHVyZSxcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtTGVuZ3RoJzogYm9keS5sZW5ndGgudG9TdHJpbmcgKCksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdyZXN1bHQnIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlWydyZXN1bHQnXSAhPSAndHJ1ZScpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBieGludGggPSB7XG5cbiAgICAnaWQnOiAnYnhpbnRoJyxcbiAgICAnbmFtZSc6ICdCWC5pbi50aCcsXG4gICAgJ2NvdW50cmllcyc6ICdUSCcsIC8vIFRoYWlsYW5kXG4gICAgJ3JhdGVMaW1pdCc6IDE1MDAsXG4gICAgJ2hhc0ZldGNoVGlja2Vycyc6IHRydWUsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc3NjY0MTItNTY3YjFlYjQtNWVkNy0xMWU3LTk0YTgtZmY2YTM4ODRmNmM1LmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly9ieC5pbi50aC9hcGknLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vYnguaW4udGgnLFxuICAgICAgICAnZG9jJzogJ2h0dHBzOi8vYnguaW4udGgvaW5mby9hcGknLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJycsIC8vIHRpY2tlclxuICAgICAgICAgICAgICAgICdvcHRpb25zJyxcbiAgICAgICAgICAgICAgICAnb3B0aW9uYm9vaycsXG4gICAgICAgICAgICAgICAgJ29yZGVyYm9vaycsXG4gICAgICAgICAgICAgICAgJ3BhaXJpbmcnLFxuICAgICAgICAgICAgICAgICd0cmFkZScsXG4gICAgICAgICAgICAgICAgJ3RyYWRlaGlzdG9yeScsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAncHJpdmF0ZSc6IHtcbiAgICAgICAgICAgICdwb3N0JzogW1xuICAgICAgICAgICAgICAgICdiYWxhbmNlJyxcbiAgICAgICAgICAgICAgICAnYmlsbGVyJyxcbiAgICAgICAgICAgICAgICAnYmlsbGdyb3VwJyxcbiAgICAgICAgICAgICAgICAnYmlsbHBheScsXG4gICAgICAgICAgICAgICAgJ2NhbmNlbCcsXG4gICAgICAgICAgICAgICAgJ2RlcG9zaXQnLFxuICAgICAgICAgICAgICAgICdnZXRvcmRlcnMnLFxuICAgICAgICAgICAgICAgICdoaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAnb3B0aW9uLWlzc3VlJyxcbiAgICAgICAgICAgICAgICAnb3B0aW9uLWJpZCcsXG4gICAgICAgICAgICAgICAgJ29wdGlvbi1zZWxsJyxcbiAgICAgICAgICAgICAgICAnb3B0aW9uLW15aXNzdWUnLFxuICAgICAgICAgICAgICAgICdvcHRpb24tbXliaWQnLFxuICAgICAgICAgICAgICAgICdvcHRpb24tbXlvcHRpb25zJyxcbiAgICAgICAgICAgICAgICAnb3B0aW9uLWV4ZXJjaXNlJyxcbiAgICAgICAgICAgICAgICAnb3B0aW9uLWNhbmNlbCcsXG4gICAgICAgICAgICAgICAgJ29wdGlvbi1oaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAnb3JkZXInLFxuICAgICAgICAgICAgICAgICd3aXRoZHJhd2FsJyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXdhbC1oaXN0b3J5JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoTWFya2V0cyAoKSB7XG4gICAgICAgIGxldCBtYXJrZXRzID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRQYWlyaW5nICgpO1xuICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzIChtYXJrZXRzKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGxldCBwID0gMDsgcCA8IGtleXMubGVuZ3RoOyBwKyspIHtcbiAgICAgICAgICAgIGxldCBtYXJrZXQgPSBtYXJrZXRzW2tleXNbcF1dO1xuICAgICAgICAgICAgbGV0IGlkID0gbWFya2V0WydwYWlyaW5nX2lkJ10udG9TdHJpbmcgKCk7XG4gICAgICAgICAgICBsZXQgYmFzZSA9IG1hcmtldFsncHJpbWFyeV9jdXJyZW5jeSddO1xuICAgICAgICAgICAgbGV0IHF1b3RlID0gbWFya2V0WydzZWNvbmRhcnlfY3VycmVuY3knXTtcbiAgICAgICAgICAgIGJhc2UgPSB0aGlzLmNvbW1vbkN1cnJlbmN5Q29kZSAoYmFzZSk7XG4gICAgICAgICAgICBxdW90ZSA9IHRoaXMuY29tbW9uQ3VycmVuY3lDb2RlIChxdW90ZSk7XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gYmFzZSArICcvJyArIHF1b3RlO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2ggKHtcbiAgICAgICAgICAgICAgICAnaWQnOiBpZCxcbiAgICAgICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgICAgICdiYXNlJzogYmFzZSxcbiAgICAgICAgICAgICAgICAncXVvdGUnOiBxdW90ZSxcbiAgICAgICAgICAgICAgICAnaW5mbyc6IG1hcmtldCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGNvbW1vbkN1cnJlbmN5Q29kZSAoY3VycmVuY3kpIHtcbiAgICAgICAgLy8gd2h5IHdvdWxkIHRoZXkgdXNlIHRocmVlIGxldHRlcnMgaW5zdGVhZCBvZiBmb3VyIGZvciBjdXJyZW5jeSBjb2Rlc1xuICAgICAgICBpZiAoY3VycmVuY3kgPT0gJ0RBUycpXG4gICAgICAgICAgICByZXR1cm4gJ0RBU0gnO1xuICAgICAgICBpZiAoY3VycmVuY3kgPT0gJ0RPRycpXG4gICAgICAgICAgICByZXR1cm4gJ0RPR0UnO1xuICAgICAgICByZXR1cm4gY3VycmVuY3k7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RCYWxhbmNlICgpO1xuICAgICAgICBsZXQgYmFsYW5jZSA9IHJlc3BvbnNlWydiYWxhbmNlJ107XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogYmFsYW5jZSB9O1xuICAgICAgICBsZXQgY3VycmVuY2llcyA9IE9iamVjdC5rZXlzIChiYWxhbmNlKTtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBjdXJyZW5jaWVzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBjdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IGNvZGUgPSB0aGlzLmNvbW1vbkN1cnJlbmN5Q29kZSAoY3VycmVuY3kpO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiBwYXJzZUZsb2F0IChiYWxhbmNlW2N1cnJlbmN5XVsnYXZhaWxhYmxlJ10pLFxuICAgICAgICAgICAgICAgICd1c2VkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHBhcnNlRmxvYXQgKGJhbGFuY2VbY3VycmVuY3ldWyd0b3RhbCddKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhY2NvdW50Wyd1c2VkJ10gPSBhY2NvdW50Wyd0b3RhbCddIC0gYWNjb3VudFsnZnJlZSddO1xuICAgICAgICAgICAgcmVzdWx0W2NvZGVdID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRPcmRlcmJvb2sgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAncGFpcmluZyc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IFtdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaWRlcyA9IFsgJ2JpZHMnLCAnYXNrcycgXTtcbiAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBzaWRlcy5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1tzXTtcbiAgICAgICAgICAgIGxldCBvcmRlcnMgPSBvcmRlcmJvb2tbc2lkZV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBvcmRlciA9IG9yZGVyc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgcHJpY2UgPSBwYXJzZUZsb2F0IChvcmRlclswXSk7XG4gICAgICAgICAgICAgICAgbGV0IGFtb3VudCA9IHBhcnNlRmxvYXQgKG9yZGVyWzFdKTtcbiAgICAgICAgICAgICAgICByZXN1bHRbc2lkZV0ucHVzaCAoWyBwcmljZSwgYW1vdW50IF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIHBhcnNlVGlja2VyICh0aWNrZXIsIG1hcmtldCkge1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbG93JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnb3JkZXJib29rJ11bJ2JpZHMnXVsnaGlnaGJpZCddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ29yZGVyYm9vayddWydhc2tzJ11bJ2hpZ2hiaWQnXSksXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xhc3RfcHJpY2UnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogcGFyc2VGbG9hdCAodGlja2VyWydjaGFuZ2UnXSksXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbHVtZV8yNGhvdXJzJ10pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VycyAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCB0aWNrZXJzID0gYXdhaXQgdGhpcy5wdWJsaWNHZXQgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7fTtcbiAgICAgICAgbGV0IGlkcyA9IE9iamVjdC5rZXlzICh0aWNrZXJzKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCBpZCA9IGlkc1tpXTtcbiAgICAgICAgICAgIGxldCB0aWNrZXIgPSB0aWNrZXJzW2lkXTtcbiAgICAgICAgICAgIGxldCBtYXJrZXQgPSB0aGlzLm1hcmtldHNfYnlfaWRbaWRdO1xuICAgICAgICAgICAgbGV0IHN5bWJvbCA9IG1hcmtldFsnc3ltYm9sJ107XG4gICAgICAgICAgICByZXN1bHRbc3ltYm9sXSA9IHRoaXMucGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCB0aWNrZXJzID0gYXdhaXQgdGhpcy5wdWJsaWNHZXQgKHsgJ3BhaXJpbmcnOiBwWydpZCddIH0pO1xuICAgICAgICBsZXQgaWQgPSBwWydpZCddLnRvU3RyaW5nICgpO1xuICAgICAgICBsZXQgdGlja2VyID0gdGlja2Vyc1tpZF07XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIHApO1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wdWJsaWNHZXRUcmFkZSAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdwYWlyaW5nJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RPcmRlciAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdwYWlyaW5nJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICd0eXBlJzogc2lkZSxcbiAgICAgICAgICAgICdhbW91bnQnOiBhbW91bnQsXG4gICAgICAgICAgICAncmF0ZSc6IHByaWNlLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnb3JkZXJfaWQnXS50b1N0cmluZyAoKSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBwYWlyaW5nID0gdW5kZWZpbmVkOyAvLyBUT0RPIGZpeG1lXG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0Q2FuY2VsICh7XG4gICAgICAgICAgICAnb3JkZXJfaWQnOiBpZCxcbiAgICAgICAgICAgICdwYWlyaW5nJzogcGFpcmluZyxcbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ10gKyAnLyc7XG4gICAgICAgIGlmIChwYXRoKVxuICAgICAgICAgICAgdXJsICs9IHBhdGggKyAnLyc7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyAocGFyYW1zKS5sZW5ndGgpXG4gICAgICAgICAgICB1cmwgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHBhcmFtcyk7XG4gICAgICAgIGlmIChhcGkgPT0gJ3ByaXZhdGUnKSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpO1xuICAgICAgICAgICAgbGV0IGF1dGggPSB0aGlzLmFwaUtleSArIG5vbmNlLnRvU3RyaW5nICgpICsgdGhpcy5zZWNyZXQ7XG4gICAgICAgICAgICBsZXQgc2lnbmF0dXJlID0gdGhpcy5oYXNoICh0aGlzLmVuY29kZSAoYXV0aCksICdzaGEyNTYnKTtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLnVybGVuY29kZSAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICAgICAna2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ25vbmNlJzogbm9uY2UsXG4gICAgICAgICAgICAgICAgJ3NpZ25hdHVyZSc6IHNpZ25hdHVyZSxcbiAgICAgICAgICAgICAgICAvLyB0d29mYTogdGhpcy50d29mYSxcbiAgICAgICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtTGVuZ3RoJzogYm9keS5sZW5ndGgsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJylcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgaWYgKCdzdWNjZXNzJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIGlmIChyZXNwb25zZVsnc3VjY2VzcyddKVxuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgY2NleCA9IHtcblxuICAgICdpZCc6ICdjY2V4JyxcbiAgICAnbmFtZSc6ICdDLUNFWCcsXG4gICAgJ2NvdW50cmllcyc6IFsgJ0RFJywgJ0VVJyBdLFxuICAgICdyYXRlTGltaXQnOiAxNTAwLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2NDMzLTE2ODgxZjkwLTVlZDgtMTFlNy05MmY4LTNkOTJjYzc0N2E2Yy5qcGcnLFxuICAgICAgICAnYXBpJzoge1xuICAgICAgICAgICAgJ3RpY2tlcnMnOiAnaHR0cHM6Ly9jLWNleC5jb20vdCcsXG4gICAgICAgICAgICAncHVibGljJzogJ2h0dHBzOi8vYy1jZXguY29tL3QvYXBpX3B1Yi5odG1sJyxcbiAgICAgICAgICAgICdwcml2YXRlJzogJ2h0dHBzOi8vYy1jZXguY29tL3QvYXBpLmh0bWwnLFxuICAgICAgICB9LFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vYy1jZXguY29tJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL2MtY2V4LmNvbS8/aWQ9YXBpJyxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICd0aWNrZXJzJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnY29pbm5hbWVzJyxcbiAgICAgICAgICAgICAgICAne21hcmtldH0nLFxuICAgICAgICAgICAgICAgICdwYWlycycsXG4gICAgICAgICAgICAgICAgJ3ByaWNlcycsXG4gICAgICAgICAgICAgICAgJ3ZvbHVtZV97Y29pbn0nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ2JhbGFuY2VkaXN0cmlidXRpb24nLFxuICAgICAgICAgICAgICAgICdtYXJrZXRoaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAnbWFya2V0cycsXG4gICAgICAgICAgICAgICAgJ21hcmtldHN1bW1hcmllcycsXG4gICAgICAgICAgICAgICAgJ29yZGVyYm9vaycsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAncHJpdmF0ZSc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ2J1eWxpbWl0JyxcbiAgICAgICAgICAgICAgICAnY2FuY2VsJyxcbiAgICAgICAgICAgICAgICAnZ2V0YmFsYW5jZScsXG4gICAgICAgICAgICAgICAgJ2dldGJhbGFuY2VzJyxcbiAgICAgICAgICAgICAgICAnZ2V0b3Blbm9yZGVycycsXG4gICAgICAgICAgICAgICAgJ2dldG9yZGVyJyxcbiAgICAgICAgICAgICAgICAnZ2V0b3JkZXJoaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAnbXl0cmFkZXMnLFxuICAgICAgICAgICAgICAgICdzZWxsbGltaXQnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hNYXJrZXRzICgpIHtcbiAgICAgICAgbGV0IG1hcmtldHMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgcCA9IDA7IHAgPCBtYXJrZXRzWydyZXN1bHQnXS5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IG1hcmtldHNbJ3Jlc3VsdCddW3BdO1xuICAgICAgICAgICAgbGV0IGlkID0gbWFya2V0WydNYXJrZXROYW1lJ107XG4gICAgICAgICAgICBsZXQgYmFzZSA9IG1hcmtldFsnTWFya2V0Q3VycmVuY3knXTtcbiAgICAgICAgICAgIGxldCBxdW90ZSA9IG1hcmtldFsnQmFzZUN1cnJlbmN5J107XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gYmFzZSArICcvJyArIHF1b3RlO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2ggKHtcbiAgICAgICAgICAgICAgICAnaWQnOiBpZCxcbiAgICAgICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgICAgICdiYXNlJzogYmFzZSxcbiAgICAgICAgICAgICAgICAncXVvdGUnOiBxdW90ZSxcbiAgICAgICAgICAgICAgICAnaW5mbyc6IG1hcmtldCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZUdldEJhbGFuY2VzICgpO1xuICAgICAgICBsZXQgYmFsYW5jZXMgPSByZXNwb25zZVsncmVzdWx0J107XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogYmFsYW5jZXMgfTtcbiAgICAgICAgZm9yIChsZXQgYiA9IDA7IGIgPCBiYWxhbmNlcy5sZW5ndGg7IGIrKykge1xuICAgICAgICAgICAgbGV0IGJhbGFuY2UgPSBiYWxhbmNlc1tiXTtcbiAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IGJhbGFuY2VbJ0N1cnJlbmN5J107XG4gICAgICAgICAgICBsZXQgYWNjb3VudCA9IHtcbiAgICAgICAgICAgICAgICAnZnJlZSc6IGJhbGFuY2VbJ0F2YWlsYWJsZSddLFxuICAgICAgICAgICAgICAgICd1c2VkJzogYmFsYW5jZVsnUGVuZGluZyddLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IGJhbGFuY2VbJ0JhbGFuY2UnXSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldE9yZGVyYm9vayAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdtYXJrZXQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICAgICAgJ3R5cGUnOiAnYm90aCcsXG4gICAgICAgICAgICAnZGVwdGgnOiAxMDAsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgb3JkZXJib29rID0gcmVzcG9uc2VbJ3Jlc3VsdCddO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IFtdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaWRlcyA9IHsgJ2JpZHMnOiAnYnV5JywgJ2Fza3MnOiAnc2VsbCcgfTtcbiAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyAoc2lkZXMpO1xuICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGtleXMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgIGxldCBrZXkgPSBrZXlzW2tdO1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1trZXldO1xuICAgICAgICAgICAgbGV0IG9yZGVycyA9IG9yZGVyYm9va1tzaWRlXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9yZGVyID0gb3JkZXJzW2ldO1xuICAgICAgICAgICAgICAgIGxldCBwcmljZSA9IHBhcnNlRmxvYXQgKG9yZGVyWydSYXRlJ10pO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBwYXJzZUZsb2F0IChvcmRlclsnUXVhbnRpdHknXSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W2tleV0ucHVzaCAoWyBwcmljZSwgYW1vdW50IF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIHBhcnNlVGlja2VyICh0aWNrZXIsIG1hcmtldCkge1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGlja2VyWyd1cGRhdGVkJ10gKiAxMDAwO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydoaWdoJ10pLFxuICAgICAgICAgICAgJ2xvdyc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbG93J10pLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYnV5J10pLFxuICAgICAgICAgICAgJ2Fzayc6IHBhcnNlRmxvYXQgKHRpY2tlclsnc2VsbCddKSxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdHByaWNlJ10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2F2ZyddKSxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWydidXlzdXBwb3J0J10pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy50aWNrZXJzR2V0TWFya2V0ICh7XG4gICAgICAgICAgICAnbWFya2V0JzogcFsnaWQnXS50b0xvd2VyQ2FzZSAoKSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aWNrZXIgPSByZXNwb25zZVsndGlja2VyJ107XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIHApO1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wdWJsaWNHZXRNYXJrZXRoaXN0b3J5ICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ21hcmtldCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgICAgICAndHlwZSc6ICdib3RoJyxcbiAgICAgICAgICAgICdkZXB0aCc6IDEwMCxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBtZXRob2QgPSAncHJpdmF0ZUdldCcgKyB0aGlzLmNhcGl0YWxpemUgKHNpZGUpICsgdHlwZTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpc1ttZXRob2RdICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ21hcmtldCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgICAgICAncXVhbnRpdHknOiBhbW91bnQsXG4gICAgICAgICAgICAncmF0ZSc6IHByaWNlLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsncmVzdWx0J11bJ3V1aWQnXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVHZXRDYW5jZWwgKHsgJ3V1aWQnOiBpZCB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXVthcGldO1xuICAgICAgICBpZiAoYXBpID09ICdwcml2YXRlJykge1xuICAgICAgICAgICAgbGV0IG5vbmNlID0gdGhpcy5ub25jZSAoKS50b1N0cmluZyAoKTtcbiAgICAgICAgICAgIGxldCBxdWVyeSA9IHRoaXMua2V5c29ydCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICAgICAnYSc6IHBhdGgsXG4gICAgICAgICAgICAgICAgJ2FwaWtleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgICAgICdub25jZSc6IG5vbmNlLFxuICAgICAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgICAgICB1cmwgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHF1ZXJ5KTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7ICdhcGlzaWduJzogdGhpcy5obWFjICh0aGlzLmVuY29kZSAodXJsKSwgdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSwgJ3NoYTUxMicpIH07XG4gICAgICAgIH0gZWxzZSBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICB1cmwgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAgICAgJ2EnOiAnZ2V0JyArIHBhdGgsXG4gICAgICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHVybCArPSAnLycgKyB0aGlzLmltcGxvZGVQYXJhbXMgKHBhdGgsIHBhcmFtcykgKyAnLmpzb24nO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKGFwaSA9PSAndGlja2VycycpXG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgIGlmICgnc3VjY2VzcycgaW4gcmVzcG9uc2UpXG4gICAgICAgICAgICBpZiAocmVzcG9uc2VbJ3N1Y2Nlc3MnXSlcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGNleCA9IHtcblxuICAgICdpZCc6ICdjZXgnLFxuICAgICduYW1lJzogJ0NFWC5JTycsXG4gICAgJ2NvdW50cmllcyc6IFsgJ0dCJywgJ0VVJywgJ0NZJywgJ1JVJyBdLFxuICAgICdyYXRlTGltaXQnOiAxNTAwLFxuICAgICdoYXNGZXRjaFRpY2tlcnMnOiB0cnVlLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2NDQyLThkZGMzM2IwLTVlZDgtMTFlNy04Yjk4LWY3ODZhZWYwZjNjOS5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vY2V4LmlvL2FwaScsXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly9jZXguaW8nLFxuICAgICAgICAnZG9jJzogJ2h0dHBzOi8vY2V4LmlvL2NleC1hcGknLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ2N1cnJlbmN5X2xpbWl0cycsXG4gICAgICAgICAgICAgICAgJ2xhc3RfcHJpY2Uve3BhaXJ9JyxcbiAgICAgICAgICAgICAgICAnbGFzdF9wcmljZXMve2N1cnJlbmNpZXN9JyxcbiAgICAgICAgICAgICAgICAnb2hsY3YvaGQve3l5eXltbWRkfS97cGFpcn0nLFxuICAgICAgICAgICAgICAgICdvcmRlcl9ib29rL3twYWlyfScsXG4gICAgICAgICAgICAgICAgJ3RpY2tlci97cGFpcn0nLFxuICAgICAgICAgICAgICAgICd0aWNrZXJzL3tjdXJyZW5jaWVzfScsXG4gICAgICAgICAgICAgICAgJ3RyYWRlX2hpc3Rvcnkve3BhaXJ9JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnY29udmVydC97cGFpcn0nLFxuICAgICAgICAgICAgICAgICdwcmljZV9zdGF0cy97cGFpcn0nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnYWN0aXZlX29yZGVyc19zdGF0dXMvJyxcbiAgICAgICAgICAgICAgICAnYXJjaGl2ZWRfb3JkZXJzL3twYWlyfScsXG4gICAgICAgICAgICAgICAgJ2JhbGFuY2UvJyxcbiAgICAgICAgICAgICAgICAnY2FuY2VsX29yZGVyLycsXG4gICAgICAgICAgICAgICAgJ2NhbmNlbF9vcmRlcnMve3BhaXJ9JyxcbiAgICAgICAgICAgICAgICAnY2FuY2VsX3JlcGxhY2Vfb3JkZXIve3BhaXJ9JyxcbiAgICAgICAgICAgICAgICAnY2xvc2VfcG9zaXRpb24ve3BhaXJ9JyxcbiAgICAgICAgICAgICAgICAnZ2V0X2FkZHJlc3MvJyxcbiAgICAgICAgICAgICAgICAnZ2V0X215ZmVlLycsXG4gICAgICAgICAgICAgICAgJ2dldF9vcmRlci8nLFxuICAgICAgICAgICAgICAgICdnZXRfb3JkZXJfdHgvJyxcbiAgICAgICAgICAgICAgICAnb3Blbl9vcmRlcnMve3BhaXJ9JyxcbiAgICAgICAgICAgICAgICAnb3Blbl9vcmRlcnMvJyxcbiAgICAgICAgICAgICAgICAnb3Blbl9wb3NpdGlvbi97cGFpcn0nLFxuICAgICAgICAgICAgICAgICdvcGVuX3Bvc2l0aW9ucy97cGFpcn0nLFxuICAgICAgICAgICAgICAgICdwbGFjZV9vcmRlci97cGFpcn0nLFxuICAgICAgICAgICAgICAgICdwbGFjZV9vcmRlci97cGFpcn0nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE1hcmtldHMgKCkge1xuICAgICAgICBsZXQgbWFya2V0cyA9IGF3YWl0IHRoaXMucHVibGljR2V0Q3VycmVuY3lMaW1pdHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgcCA9IDA7IHAgPCBtYXJrZXRzWydkYXRhJ11bJ3BhaXJzJ10ubGVuZ3RoOyBwKyspIHtcbiAgICAgICAgICAgIGxldCBtYXJrZXQgPSBtYXJrZXRzWydkYXRhJ11bJ3BhaXJzJ11bcF07XG4gICAgICAgICAgICBsZXQgaWQgPSBtYXJrZXRbJ3N5bWJvbDEnXSArICcvJyArIG1hcmtldFsnc3ltYm9sMiddO1xuICAgICAgICAgICAgbGV0IHN5bWJvbCA9IGlkO1xuICAgICAgICAgICAgbGV0IFsgYmFzZSwgcXVvdGUgXSA9IHN5bWJvbC5zcGxpdCAoJy8nKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoICh7XG4gICAgICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgICAgICAgICAgJ3N5bWJvbCc6IHN5bWJvbCxcbiAgICAgICAgICAgICAgICAnYmFzZSc6IGJhc2UsXG4gICAgICAgICAgICAgICAgJ3F1b3RlJzogcXVvdGUsXG4gICAgICAgICAgICAgICAgJ2luZm8nOiBtYXJrZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgYmFsYW5jZXMgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0QmFsYW5jZSAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiBiYWxhbmNlcyB9O1xuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IHRoaXMuY3VycmVuY2llcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gdGhpcy5jdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiBwYXJzZUZsb2F0IChiYWxhbmNlc1tjdXJyZW5jeV1bJ2F2YWlsYWJsZSddKSxcbiAgICAgICAgICAgICAgICAndXNlZCc6IHBhcnNlRmxvYXQgKGJhbGFuY2VzW2N1cnJlbmN5XVsnb3JkZXJzJ10pLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhY2NvdW50Wyd0b3RhbCddID0gdGhpcy5zdW0gKGFjY291bnRbJ2ZyZWUnXSwgYWNjb3VudFsndXNlZCddKTtcbiAgICAgICAgICAgIHJlc3VsdFtjdXJyZW5jeV0gPSBhY2NvdW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSBhd2FpdCAgdGhpcy5wdWJsaWNHZXRPcmRlckJvb2tQYWlyICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ3BhaXInOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IG9yZGVyYm9va1sndGltZXN0YW1wJ10gKiAxMDAwO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBvcmRlcmJvb2tbJ2JpZHMnXSxcbiAgICAgICAgICAgICdhc2tzJzogb3JkZXJib29rWydhc2tzJ10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBwYXJzZVRpY2tlciAodGlja2VyLCBtYXJrZXQpIHtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHBhcnNlSW50ICh0aWNrZXJbJ3RpbWVzdGFtcCddKSAqIDEwMDA7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2hpZ2gnXSksXG4gICAgICAgICAgICAnbG93JzogcGFyc2VGbG9hdCAodGlja2VyWydsb3cnXSksXG4gICAgICAgICAgICAnYmlkJzogcGFyc2VGbG9hdCAodGlja2VyWydiaWQnXSksXG4gICAgICAgICAgICAnYXNrJzogcGFyc2VGbG9hdCAodGlja2VyWydhc2snXSksXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xhc3QnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWyd2b2x1bWUnXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXJzICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IGN1cnJlbmNpZXMgPSB0aGlzLmN1cnJlbmNpZXMuam9pbiAoJy8nKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRUaWNrZXJzQ3VycmVuY2llcyAoe1xuICAgICAgICAgICAgJ2N1cnJlbmNpZXMnOiBjdXJyZW5jaWVzLFxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IHRpY2tlcnMgPSByZXNwb25zZVsnZGF0YSddO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge307XG4gICAgICAgIGZvciAobGV0IHQgPSAwOyB0IDwgdGlja2Vycy5sZW5ndGg7IHQrKykge1xuICAgICAgICAgICAgbGV0IHRpY2tlciA9IHRpY2tlcnNbdF07XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gdGlja2VyWydwYWlyJ10ucmVwbGFjZSAoJzonLCAnLycpO1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IHRoaXMubWFya2V0c1tzeW1ib2xdO1xuICAgICAgICAgICAgcmVzdWx0W3N5bWJvbF0gPSB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIG1hcmtldCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgdGlja2VyID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRUaWNrZXJQYWlyICh7XG4gICAgICAgICAgICAncGFpcic6IHBbJ2lkJ10sXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVRpY2tlciAodGlja2VyLCBwKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0VHJhZGVIaXN0b3J5UGFpciAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdwYWlyJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdwYWlyJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICd0eXBlJzogc2lkZSxcbiAgICAgICAgICAgICdhbW91bnQnOiBhbW91bnQsXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlID09ICdsaW1pdCcpXG4gICAgICAgICAgICBvcmRlclsncHJpY2UnXSA9IHByaWNlO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBvcmRlclsnb3JkZXJfdHlwZSddID0gdHlwZTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdFBsYWNlT3JkZXJQYWlyICh0aGlzLmV4dGVuZCAob3JkZXIsIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXNwb25zZSxcbiAgICAgICAgICAgICdpZCc6IHJlc3BvbnNlWydpZCddLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJpdmF0ZVBvc3RDYW5jZWxPcmRlciAoeyAnaWQnOiBpZCB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArICcvJyArIHRoaXMuaW1wbG9kZVBhcmFtcyAocGF0aCwgcGFyYW1zKTtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5vbWl0IChwYXJhbXMsIHRoaXMuZXh0cmFjdFBhcmFtcyAocGF0aCkpO1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHF1ZXJ5KS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChxdWVyeSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMudWlkKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBBdXRoZW50aWNhdGlvbkVycm9yICh0aGlzLmlkICsgJyByZXF1aXJlcyBgJyArIHRoaXMuaWQgKyAnLnVpZGAgcHJvcGVydHkgZm9yIGF1dGhlbnRpY2F0aW9uJyk7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpLnRvU3RyaW5nICgpO1xuICAgICAgICAgICAgbGV0IGF1dGggPSBub25jZSArIHRoaXMudWlkICsgdGhpcy5hcGlLZXk7XG4gICAgICAgICAgICBsZXQgc2lnbmF0dXJlID0gdGhpcy5obWFjICh0aGlzLmVuY29kZSAoYXV0aCksIHRoaXMuZW5jb2RlICh0aGlzLnNlY3JldCkpO1xuICAgICAgICAgICAgYm9keSA9IHRoaXMudXJsZW5jb2RlICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgICAgICdrZXknOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgICAgICAnc2lnbmF0dXJlJzogc2lnbmF0dXJlLnRvVXBwZXJDYXNlICgpLFxuICAgICAgICAgICAgICAgICdub25jZSc6IG5vbmNlLFxuICAgICAgICAgICAgfSwgcXVlcnkpKTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgICAgICAgICdDb250ZW50LUxlbmd0aCc6IGJvZHkubGVuZ3RoLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgICAgIGlmICgnZScgaW4gcmVzcG9uc2UpIHtcbiAgICAgICAgICAgIGlmICgnb2snIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZVsnb2snXSA9PSAnb2snKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgJyArIHRoaXMuanNvbiAocmVzcG9uc2UpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgY2hidGMgPSB7XG4gICAgJ2lkJzogJ2NoYnRjJyxcbiAgICAnbmFtZSc6ICdDSEJUQycsXG4gICAgJ2NvdW50cmllcyc6ICdDTicsXG4gICAgJ3JhdGVMaW1pdCc6IDEwMDAsXG4gICAgJ3ZlcnNpb24nOiAndjEnLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI4NTU1NjU5LWYwMDQwZGMyLTcxMDktMTFlNy05ZDk5LTY4OGE0MzhiZjlmNC5qcGcnLFxuICAgICAgICAnYXBpJzoge1xuICAgICAgICAgICAgJ3B1YmxpYyc6ICdodHRwOi8vYXBpLmNoYnRjLmNvbS9kYXRhJywgLy8gbm8gaHR0cHMgZm9yIHB1YmxpYyBBUElcbiAgICAgICAgICAgICdwcml2YXRlJzogJ2h0dHBzOi8vdHJhZGUuY2hidGMuY29tL2FwaScsXG4gICAgICAgIH0sXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly90cmFkZS5jaGJ0Yy5jb20vYXBpJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL3d3dy5jaGJ0Yy5jb20vaS9kZXZlbG9wZXInLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ3RpY2tlcicsXG4gICAgICAgICAgICAgICAgJ2RlcHRoJyxcbiAgICAgICAgICAgICAgICAndHJhZGVzJyxcbiAgICAgICAgICAgICAgICAna2xpbmUnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnb3JkZXInLFxuICAgICAgICAgICAgICAgICdjYW5jZWxPcmRlcicsXG4gICAgICAgICAgICAgICAgJ2dldE9yZGVyJyxcbiAgICAgICAgICAgICAgICAnZ2V0T3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnZ2V0T3JkZXJzTmV3JyxcbiAgICAgICAgICAgICAgICAnZ2V0T3JkZXJzSWdub3JlVHJhZGVUeXBlJyxcbiAgICAgICAgICAgICAgICAnZ2V0VW5maW5pc2hlZE9yZGVyc0lnbm9yZVRyYWRlVHlwZScsXG4gICAgICAgICAgICAgICAgJ2dldEFjY291bnRJbmZvJyxcbiAgICAgICAgICAgICAgICAnZ2V0VXNlckFkZHJlc3MnLFxuICAgICAgICAgICAgICAgICdnZXRXaXRoZHJhd0FkZHJlc3MnLFxuICAgICAgICAgICAgICAgICdnZXRXaXRoZHJhd1JlY29yZCcsXG4gICAgICAgICAgICAgICAgJ2dldENoYXJnZVJlY29yZCcsXG4gICAgICAgICAgICAgICAgJ2dldENueVdpdGhkcmF3UmVjb3JkJyxcbiAgICAgICAgICAgICAgICAnZ2V0Q255Q2hhcmdlUmVjb3JkJyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXcnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgICdtYXJrZXRzJzoge1xuICAgICAgICAnQlRDL0NOWSc6IHsgJ2lkJzogJ2J0Y19jbnknLCAnc3ltYm9sJzogJ0JUQy9DTlknLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnQ05ZJyB9LFxuICAgICAgICAnTFRDL0NOWSc6IHsgJ2lkJzogJ2x0Y19jbnknLCAnc3ltYm9sJzogJ0xUQy9DTlknLCAnYmFzZSc6ICdMVEMnLCAncXVvdGUnOiAnQ05ZJyB9LFxuICAgICAgICAnRVRIL0NOWSc6IHsgJ2lkJzogJ2V0aF9jbnknLCAnc3ltYm9sJzogJ0VUSC9DTlknLCAnYmFzZSc6ICdFVEgnLCAncXVvdGUnOiAnQ05ZJyB9LFxuICAgICAgICAnRVRDL0NOWSc6IHsgJ2lkJzogJ2V0Y19jbnknLCAnc3ltYm9sJzogJ0VUQy9DTlknLCAnYmFzZSc6ICdFVEMnLCAncXVvdGUnOiAnQ05ZJyB9LFxuICAgICAgICAnQlRTL0NOWSc6IHsgJ2lkJzogJ2J0c19jbnknLCAnc3ltYm9sJzogJ0JUUy9DTlknLCAnYmFzZSc6ICdCVFMnLCAncXVvdGUnOiAnQ05ZJyB9LFxuICAgICAgICAnRU9TL0NOWSc6IHsgJ2lkJzogJ2Vvc19jbnknLCAnc3ltYm9sJzogJ0VPUy9DTlknLCAnYmFzZSc6ICdFT1MnLCAncXVvdGUnOiAnQ05ZJyB9LFxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0R2V0QWNjb3VudEluZm8gKCk7XG4gICAgICAgIGxldCBiYWxhbmNlcyA9IHJlc3BvbnNlWydyZXN1bHQnXTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiBiYWxhbmNlcyB9O1xuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IHRoaXMuY3VycmVuY2llcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gdGhpcy5jdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChjdXJyZW5jeSBpbiBiYWxhbmNlc1snYmFsYW5jZSddKVxuICAgICAgICAgICAgICAgIGFjY291bnRbJ2ZyZWUnXSA9IGJhbGFuY2VzWydiYWxhbmNlJ11bY3VycmVuY3ldWydhbW91bnQnXTtcbiAgICAgICAgICAgIGlmIChjdXJyZW5jeSBpbiBiYWxhbmNlc1snZnJvemVuJ10pXG4gICAgICAgICAgICAgICAgYWNjb3VudFsndXNlZCddID0gYmFsYW5jZXNbJ2Zyb3plbiddW2N1cnJlbmN5XVsnYW1vdW50J107XG4gICAgICAgICAgICBhY2NvdW50Wyd0b3RhbCddID0gdGhpcy5zdW0gKGFjY291bnRbJ2ZyZWUnXSwgYWNjb3VudFsndXNlZCddKTtcbiAgICAgICAgICAgIHJlc3VsdFtjdXJyZW5jeV0gPSBhY2NvdW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSBhd2FpdCB0aGlzLnB1YmxpY0dldERlcHRoICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2N1cnJlbmN5JzogcFsnaWQnXSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgbGV0IGJpZHMgPSB1bmRlZmluZWQ7XG4gICAgICAgIGxldCBhc2tzID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoJ2JpZHMnIGluIG9yZGVyYm9vaylcbiAgICAgICAgICAgIGJpZHMgPSBvcmRlcmJvb2tbJ2JpZHMnXTtcbiAgICAgICAgaWYgKCdhc2tzJyBpbiBvcmRlcmJvb2spXG4gICAgICAgICAgICBhc2tzID0gb3JkZXJib29rWydhc2tzJ107XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IGJpZHMsXG4gICAgICAgICAgICAnYXNrcyc6IGFza3MsXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBpZiAocmVzdWx0WydiaWRzJ10pXG4gICAgICAgICAgICByZXN1bHRbJ2JpZHMnXSA9IHRoaXMuc29ydEJ5IChyZXN1bHRbJ2JpZHMnXSwgMCwgdHJ1ZSk7XG4gICAgICAgIGlmIChyZXN1bHRbJ2Fza3MnXSlcbiAgICAgICAgICAgIHJlc3VsdFsnYXNrcyddID0gdGhpcy5zb3J0QnkgKHJlc3VsdFsnYXNrcyddLCAwKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFRpY2tlciAoe1xuICAgICAgICAgICAgJ2N1cnJlbmN5JzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aWNrZXIgPSByZXNwb25zZVsndGlja2VyJ107XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2J1eSddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3NlbGwnXSksXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xhc3QnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWyd2b2wnXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0VHJhZGVzICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2N1cnJlbmN5JzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBwYXJhbVN0cmluZyA9ICcmcHJpY2U9JyArIHByaWNlLnRvU3RyaW5nICgpO1xuICAgICAgICBwYXJhbVN0cmluZyArPSAnJmFtb3VudD0nICsgYW1vdW50LnRvU3RyaW5nICgpO1xuICAgICAgICBsZXQgdHJhZGVUeXBlID0gKHNpZGUgPT0gJ2J1eScpID8gJzEnIDogJzAnO1xuICAgICAgICBwYXJhbVN0cmluZyArPSAnJnRyYWRlVHlwZT0nICsgdHJhZGVUeXBlO1xuICAgICAgICBwYXJhbVN0cmluZyArPSAnJmN1cnJlbmN5PScgKyB0aGlzLm1hcmtldElkIChtYXJrZXQpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0T3JkZXIgKHBhcmFtU3RyaW5nKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnaWQnXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgcGFyYW1TdHJpbmcgPSAnJmlkPScgKyBpZC50b1N0cmluZyAoKTtcbiAgICAgICAgaWYgKCdjdXJyZW5jeScgaW4gcGFyYW1zKVxuICAgICAgICAgICAgcGFyYW1TdHJpbmcgKz0gJyZjdXJyZW5jeT0nICsgcGFyYW1zWydjdXJyZW5jeSddO1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdENhbmNlbE9yZGVyIChwYXJhbVN0cmluZyk7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXIgKGlkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgcGFyYW1TdHJpbmcgPSAnJmlkPScgKyBpZC50b1N0cmluZyAoKTtcbiAgICAgICAgaWYgKCdjdXJyZW5jeScgaW4gcGFyYW1zKVxuICAgICAgICAgICAgcGFyYW1TdHJpbmcgKz0gJyZjdXJyZW5jeT0nICsgcGFyYW1zWydjdXJyZW5jeSddO1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdEdldE9yZGVyIChwYXJhbVN0cmluZyk7XG4gICAgfSxcblxuICAgIG5vbmNlICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddW2FwaV07XG4gICAgICAgIGlmIChhcGkgPT0gJ3B1YmxpYycpIHtcbiAgICAgICAgICAgIHVybCArPSAnLycgKyB0aGlzLnZlcnNpb24gKyAnLycgKyBwYXRoO1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChwYXJhbXMpLmxlbmd0aClcbiAgICAgICAgICAgICAgICB1cmwgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHBhcmFtcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgcGFyYW1zTGVuZ3RoID0gcGFyYW1zLmxlbmd0aDsgLy8gcGFyYW1zIHNob3VsZCBiZSBhIHN0cmluZyBoZXJlXG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpO1xuICAgICAgICAgICAgbGV0IGF1dGggPSAnbWV0aG9kPScgKyBwYXRoO1xuICAgICAgICAgICAgYXV0aCArPSAnJmFjY2Vzc2tleT0nICsgdGhpcy5hcGlLZXk7XG4gICAgICAgICAgICBhdXRoICs9IHBhcmFtc0xlbmd0aCA/IHBhcmFtcyA6ICcnO1xuICAgICAgICAgICAgbGV0IHNlY3JldCA9IHRoaXMuaGFzaCAodGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSwgJ3NoYTEnKTtcbiAgICAgICAgICAgIGxldCBzaWduYXR1cmUgPSB0aGlzLmhtYWMgKHRoaXMuZW5jb2RlIChhdXRoKSwgdGhpcy5lbmNvZGUgKHNlY3JldCksICdtZDUnKTtcbiAgICAgICAgICAgIGxldCBzdWZmaXggPSAnc2lnbj0nICsgc2lnbmF0dXJlICsgJyZyZXFUaW1lPScgKyBub25jZS50b1N0cmluZyAoKTtcbiAgICAgICAgICAgIHVybCArPSAnLycgKyBwYXRoICsgJz8nICsgYXV0aCArICcmJyArIHN1ZmZpeDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgICAgIGlmIChhcGkgPT0gJ3ByaXZhdGUnKVxuICAgICAgICAgICAgaWYgKCdjb2RlJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgJyArIHRoaXMuanNvbiAocmVzcG9uc2UpKTtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGNoaWxlYml0ID0gZXh0ZW5kIChibGlua3RyYWRlLCB7XG4gICAgJ2lkJzogJ2NoaWxlYml0JyxcbiAgICAnbmFtZSc6ICdDaGlsZUJpdCcsXG4gICAgJ2NvdW50cmllcyc6ICdDTCcsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc5OTE0MTQtMTI5OGYwZDgtNjQ3Zi0xMWU3LTljNDAtZDU2NDA5MjY2MzM2LmpwZycsXG4gICAgICAgICdhcGknOiB7XG4gICAgICAgICAgICAncHVibGljJzogJ2h0dHBzOi8vYXBpLmJsaW5rdHJhZGUuY29tL2FwaScsXG4gICAgICAgICAgICAncHJpdmF0ZSc6ICdodHRwczovL2FwaS5ibGlua3RyYWRlLmNvbS90YXBpJyxcbiAgICAgICAgfSxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL2NoaWxlYml0Lm5ldCcsXG4gICAgICAgICdkb2MnOiAnaHR0cHM6Ly9ibGlua3RyYWRlLmNvbS9kb2NzJyxcbiAgICB9LFxuICAgICdjb21tZW50JzogJ0JsaW5rdHJhZGUgQVBJJyxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9DTFAnOiB7ICdpZCc6ICdCVENDTFAnLCAnc3ltYm9sJzogJ0JUQy9DTFAnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnQ0xQJywgJ2Jyb2tlcklkJzogOSwgJ2Jyb2tlcic6ICdDaGlsZUJpdCcgfSxcbiAgICB9LFxufSlcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgY29pbmNoZWNrID0ge1xuXG4gICAgJ2lkJzogJ2NvaW5jaGVjaycsXG4gICAgJ25hbWUnOiAnY29pbmNoZWNrJyxcbiAgICAnY291bnRyaWVzJzogWyAnSlAnLCAnSUQnIF0sXG4gICAgJ3JhdGVMaW1pdCc6IDE1MDAsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc3NjY0NjQtM2I1YzNjNzQtNWVkOS0xMWU3LTg0MGUtMzFiMzI5NjhlMWRhLmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly9jb2luY2hlY2suY29tL2FwaScsXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly9jb2luY2hlY2suY29tJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL2NvaW5jaGVjay5jb20vZG9jdW1lbnRzL2V4Y2hhbmdlL2FwaScsXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnZXhjaGFuZ2Uvb3JkZXJzL3JhdGUnLFxuICAgICAgICAgICAgICAgICdvcmRlcl9ib29rcycsXG4gICAgICAgICAgICAgICAgJ3JhdGUve3BhaXJ9JyxcbiAgICAgICAgICAgICAgICAndGlja2VyJyxcbiAgICAgICAgICAgICAgICAndHJhZGVzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnYWNjb3VudHMnLFxuICAgICAgICAgICAgICAgICdhY2NvdW50cy9iYWxhbmNlJyxcbiAgICAgICAgICAgICAgICAnYWNjb3VudHMvbGV2ZXJhZ2VfYmFsYW5jZScsXG4gICAgICAgICAgICAgICAgJ2JhbmtfYWNjb3VudHMnLFxuICAgICAgICAgICAgICAgICdkZXBvc2l0X21vbmV5JyxcbiAgICAgICAgICAgICAgICAnZXhjaGFuZ2Uvb3JkZXJzL29wZW5zJyxcbiAgICAgICAgICAgICAgICAnZXhjaGFuZ2Uvb3JkZXJzL3RyYW5zYWN0aW9ucycsXG4gICAgICAgICAgICAgICAgJ2V4Y2hhbmdlL29yZGVycy90cmFuc2FjdGlvbnNfcGFnaW5hdGlvbicsXG4gICAgICAgICAgICAgICAgJ2V4Y2hhbmdlL2xldmVyYWdlL3Bvc2l0aW9ucycsXG4gICAgICAgICAgICAgICAgJ2xlbmRpbmcvYm9ycm93cy9tYXRjaGVzJyxcbiAgICAgICAgICAgICAgICAnc2VuZF9tb25leScsXG4gICAgICAgICAgICAgICAgJ3dpdGhkcmF3cycsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2JhbmtfYWNjb3VudHMnLFxuICAgICAgICAgICAgICAgICdkZXBvc2l0X21vbmV5L3tpZH0vZmFzdCcsXG4gICAgICAgICAgICAgICAgJ2V4Y2hhbmdlL29yZGVycycsXG4gICAgICAgICAgICAgICAgJ2V4Y2hhbmdlL3RyYW5zZmVycy90b19sZXZlcmFnZScsXG4gICAgICAgICAgICAgICAgJ2V4Y2hhbmdlL3RyYW5zZmVycy9mcm9tX2xldmVyYWdlJyxcbiAgICAgICAgICAgICAgICAnbGVuZGluZy9ib3Jyb3dzJyxcbiAgICAgICAgICAgICAgICAnbGVuZGluZy9ib3Jyb3dzL3tpZH0vcmVwYXknLFxuICAgICAgICAgICAgICAgICdzZW5kX21vbmV5JyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXdzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAnZGVsZXRlJzogW1xuICAgICAgICAgICAgICAgICdiYW5rX2FjY291bnRzL3tpZH0nLFxuICAgICAgICAgICAgICAgICdleGNoYW5nZS9vcmRlcnMve2lkfScsXG4gICAgICAgICAgICAgICAgJ3dpdGhkcmF3cy97aWR9JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9KUFknOiAgeyAnaWQnOiAnYnRjX2pweScsICAnc3ltYm9sJzogJ0JUQy9KUFknLCAgJ2Jhc2UnOiAnQlRDJywgICdxdW90ZSc6ICdKUFknIH0sIC8vIHRoZSBvbmx5IHJlYWwgcGFpclxuICAgICAgICAnRVRIL0pQWSc6ICB7ICdpZCc6ICdldGhfanB5JywgICdzeW1ib2wnOiAnRVRIL0pQWScsICAnYmFzZSc6ICdFVEgnLCAgJ3F1b3RlJzogJ0pQWScgfSxcbiAgICAgICAgJ0VUQy9KUFknOiAgeyAnaWQnOiAnZXRjX2pweScsICAnc3ltYm9sJzogJ0VUQy9KUFknLCAgJ2Jhc2UnOiAnRVRDJywgICdxdW90ZSc6ICdKUFknIH0sXG4gICAgICAgICdEQU8vSlBZJzogIHsgJ2lkJzogJ2Rhb19qcHknLCAgJ3N5bWJvbCc6ICdEQU8vSlBZJywgICdiYXNlJzogJ0RBTycsICAncXVvdGUnOiAnSlBZJyB9LFxuICAgICAgICAnTFNLL0pQWSc6ICB7ICdpZCc6ICdsc2tfanB5JywgICdzeW1ib2wnOiAnTFNLL0pQWScsICAnYmFzZSc6ICdMU0snLCAgJ3F1b3RlJzogJ0pQWScgfSxcbiAgICAgICAgJ0ZDVC9KUFknOiAgeyAnaWQnOiAnZmN0X2pweScsICAnc3ltYm9sJzogJ0ZDVC9KUFknLCAgJ2Jhc2UnOiAnRkNUJywgICdxdW90ZSc6ICdKUFknIH0sXG4gICAgICAgICdYTVIvSlBZJzogIHsgJ2lkJzogJ3htcl9qcHknLCAgJ3N5bWJvbCc6ICdYTVIvSlBZJywgICdiYXNlJzogJ1hNUicsICAncXVvdGUnOiAnSlBZJyB9LFxuICAgICAgICAnUkVQL0pQWSc6ICB7ICdpZCc6ICdyZXBfanB5JywgICdzeW1ib2wnOiAnUkVQL0pQWScsICAnYmFzZSc6ICdSRVAnLCAgJ3F1b3RlJzogJ0pQWScgfSxcbiAgICAgICAgJ1hSUC9KUFknOiAgeyAnaWQnOiAneHJwX2pweScsICAnc3ltYm9sJzogJ1hSUC9KUFknLCAgJ2Jhc2UnOiAnWFJQJywgICdxdW90ZSc6ICdKUFknIH0sXG4gICAgICAgICdaRUMvSlBZJzogIHsgJ2lkJzogJ3plY19qcHknLCAgJ3N5bWJvbCc6ICdaRUMvSlBZJywgICdiYXNlJzogJ1pFQycsICAncXVvdGUnOiAnSlBZJyB9LFxuICAgICAgICAnWEVNL0pQWSc6ICB7ICdpZCc6ICd4ZW1fanB5JywgICdzeW1ib2wnOiAnWEVNL0pQWScsICAnYmFzZSc6ICdYRU0nLCAgJ3F1b3RlJzogJ0pQWScgfSxcbiAgICAgICAgJ0xUQy9KUFknOiAgeyAnaWQnOiAnbHRjX2pweScsICAnc3ltYm9sJzogJ0xUQy9KUFknLCAgJ2Jhc2UnOiAnTFRDJywgICdxdW90ZSc6ICdKUFknIH0sXG4gICAgICAgICdEQVNIL0pQWSc6IHsgJ2lkJzogJ2Rhc2hfanB5JywgJ3N5bWJvbCc6ICdEQVNIL0pQWScsICdiYXNlJzogJ0RBU0gnLCAncXVvdGUnOiAnSlBZJyB9LFxuICAgICAgICAnRVRIL0JUQyc6ICB7ICdpZCc6ICdldGhfYnRjJywgICdzeW1ib2wnOiAnRVRIL0JUQycsICAnYmFzZSc6ICdFVEgnLCAgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ0VUQy9CVEMnOiAgeyAnaWQnOiAnZXRjX2J0YycsICAnc3ltYm9sJzogJ0VUQy9CVEMnLCAgJ2Jhc2UnOiAnRVRDJywgICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdMU0svQlRDJzogIHsgJ2lkJzogJ2xza19idGMnLCAgJ3N5bWJvbCc6ICdMU0svQlRDJywgICdiYXNlJzogJ0xTSycsICAncXVvdGUnOiAnQlRDJyB9LFxuICAgICAgICAnRkNUL0JUQyc6ICB7ICdpZCc6ICdmY3RfYnRjJywgICdzeW1ib2wnOiAnRkNUL0JUQycsICAnYmFzZSc6ICdGQ1QnLCAgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ1hNUi9CVEMnOiAgeyAnaWQnOiAneG1yX2J0YycsICAnc3ltYm9sJzogJ1hNUi9CVEMnLCAgJ2Jhc2UnOiAnWE1SJywgICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdSRVAvQlRDJzogIHsgJ2lkJzogJ3JlcF9idGMnLCAgJ3N5bWJvbCc6ICdSRVAvQlRDJywgICdiYXNlJzogJ1JFUCcsICAncXVvdGUnOiAnQlRDJyB9LFxuICAgICAgICAnWFJQL0JUQyc6ICB7ICdpZCc6ICd4cnBfYnRjJywgICdzeW1ib2wnOiAnWFJQL0JUQycsICAnYmFzZSc6ICdYUlAnLCAgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ1pFQy9CVEMnOiAgeyAnaWQnOiAnemVjX2J0YycsICAnc3ltYm9sJzogJ1pFQy9CVEMnLCAgJ2Jhc2UnOiAnWkVDJywgICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdYRU0vQlRDJzogIHsgJ2lkJzogJ3hlbV9idGMnLCAgJ3N5bWJvbCc6ICdYRU0vQlRDJywgICdiYXNlJzogJ1hFTScsICAncXVvdGUnOiAnQlRDJyB9LFxuICAgICAgICAnTFRDL0JUQyc6ICB7ICdpZCc6ICdsdGNfYnRjJywgICdzeW1ib2wnOiAnTFRDL0JUQycsICAnYmFzZSc6ICdMVEMnLCAgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ0RBU0gvQlRDJzogeyAnaWQnOiAnZGFzaF9idGMnLCAnc3ltYm9sJzogJ0RBU0gvQlRDJywgJ2Jhc2UnOiAnREFTSCcsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGxldCBiYWxhbmNlcyA9IGF3YWl0IHRoaXMucHJpdmF0ZUdldEFjY291bnRzQmFsYW5jZSAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiBiYWxhbmNlcyB9O1xuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IHRoaXMuY3VycmVuY2llcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gdGhpcy5jdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IGxvd2VyY2FzZSA9IGN1cnJlbmN5LnRvTG93ZXJDYXNlICgpO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChsb3dlcmNhc2UgaW4gYmFsYW5jZXMpXG4gICAgICAgICAgICAgICAgYWNjb3VudFsnZnJlZSddID0gcGFyc2VGbG9hdCAoYmFsYW5jZXNbbG93ZXJjYXNlXSk7XG4gICAgICAgICAgICBsZXQgcmVzZXJ2ZWQgPSBsb3dlcmNhc2UgKyAnX3Jlc2VydmVkJztcbiAgICAgICAgICAgIGlmIChyZXNlcnZlZCBpbiBiYWxhbmNlcylcbiAgICAgICAgICAgICAgICBhY2NvdW50Wyd1c2VkJ10gPSBwYXJzZUZsb2F0IChiYWxhbmNlc1tyZXNlcnZlZF0pO1xuICAgICAgICAgICAgYWNjb3VudFsndG90YWwnXSA9IHRoaXMuc3VtIChhY2NvdW50WydmcmVlJ10sIGFjY291bnRbJ3VzZWQnXSk7XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgIHRoaXMucHVibGljR2V0T3JkZXJCb29rcyAocGFyYW1zKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAob3JkZXJbMF0pO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBwYXJzZUZsb2F0IChvcmRlclsxXSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3NpZGVdLnB1c2ggKFsgcHJpY2UsIGFtb3VudCBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGxldCB0aWNrZXIgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFRpY2tlciAoKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRpY2tlclsndGltZXN0YW1wJ10gKiAxMDAwO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydoaWdoJ10pLFxuICAgICAgICAgICAgJ2xvdyc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbG93J10pLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYmlkJ10pLFxuICAgICAgICAgICAgJ2Fzayc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYXNrJ10pLFxuICAgICAgICAgICAgJ3Z3YXAnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnb3Blbic6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjbG9zZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdmaXJzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsYXN0JzogcGFyc2VGbG9hdCAodGlja2VyWydsYXN0J10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndm9sdW1lJ10pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldFRyYWRlcyAocGFyYW1zKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IHByZWZpeCA9ICcnO1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAncGFpcic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlID09ICdtYXJrZXQnKSB7XG4gICAgICAgICAgICBsZXQgb3JkZXJfdHlwZSA9IHR5cGUgKyAnXycgKyBzaWRlO1xuICAgICAgICAgICAgb3JkZXJbJ29yZGVyX3R5cGUnXSA9IG9yZGVyX3R5cGU7XG4gICAgICAgICAgICBsZXQgcHJlZml4ID0gKHNpZGUgPT0gJ2J1eScpID8gKG9yZGVyX3R5cGUgKyAnXycpIDogJyc7XG4gICAgICAgICAgICBvcmRlcltwcmVmaXggKyAnYW1vdW50J10gPSBhbW91bnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvcmRlclsnb3JkZXJfdHlwZSddID0gc2lkZTtcbiAgICAgICAgICAgIG9yZGVyWydyYXRlJ10gPSBwcmljZTtcbiAgICAgICAgICAgIG9yZGVyWydhbW91bnQnXSA9IGFtb3VudDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0RXhjaGFuZ2VPcmRlcnMgKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ2lkJzogcmVzcG9uc2VbJ2lkJ10udG9TdHJpbmcgKCksXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlRGVsZXRlRXhjaGFuZ2VPcmRlcnNJZCAoeyAnaWQnOiBpZCB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArICcvJyArIHRoaXMuaW1wbG9kZVBhcmFtcyAocGF0aCwgcGFyYW1zKTtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5vbWl0IChwYXJhbXMsIHRoaXMuZXh0cmFjdFBhcmFtcyAocGF0aCkpO1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHF1ZXJ5KS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChxdWVyeSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpLnRvU3RyaW5nICgpO1xuICAgICAgICAgICAgbGV0IGxlbmd0aCA9IDA7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHF1ZXJ5KS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBib2R5ID0gdGhpcy51cmxlbmNvZGUgKHRoaXMua2V5c29ydCAocXVlcnkpKTtcbiAgICAgICAgICAgICAgICBsZW5ndGggPSBib2R5Lmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBhdXRoID0gbm9uY2UgKyB1cmwgKyAoYm9keSB8fCAnJyk7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICAgICAgICAnQ29udGVudC1MZW5ndGgnOiBsZW5ndGgsXG4gICAgICAgICAgICAgICAgJ0FDQ0VTUy1LRVknOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgICAgICAnQUNDRVNTLU5PTkNFJzogbm9uY2UsXG4gICAgICAgICAgICAgICAgJ0FDQ0VTUy1TSUdOQVRVUkUnOiB0aGlzLmhtYWMgKHRoaXMuZW5jb2RlIChhdXRoKSwgdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJylcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgaWYgKCdzdWNjZXNzJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIGlmIChyZXNwb25zZVsnc3VjY2VzcyddKVxuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgY29pbmZsb29yID0ge1xuXG4gICAgJ2lkJzogJ2NvaW5mbG9vcicsXG4gICAgJ25hbWUnOiAnY29pbmZsb29yJyxcbiAgICAncmF0ZUxpbWl0JzogMTAwMCxcbiAgICAnY291bnRyaWVzJzogJ1VLJyxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yODI0NjA4MS02MjNmYzE2NC02YTFjLTExZTctOTEzZi1iYWMwZDU1NzZjOTAuanBnJyxcbiAgICAgICAgJ2FwaSc6ICdodHRwczovL3dlYmFwaS5jb2luZmxvb3IuY28udWs6ODA5MC9iaXN0JyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy5jb2luZmxvb3IuY28udWsnLFxuICAgICAgICAnZG9jJzogW1xuICAgICAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS9jb2luZmxvb3IvYXBpJyxcbiAgICAgICAgICAgICdodHRwczovL3d3dy5jb2luZmxvb3IuY28udWsvYXBpJyxcbiAgICAgICAgXSxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICd7aWR9L3RpY2tlci8nLFxuICAgICAgICAgICAgICAgICd7aWR9L29yZGVyX2Jvb2svJyxcbiAgICAgICAgICAgICAgICAne2lkfS90cmFuc2FjdGlvbnMvJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ3tpZH0vYmFsYW5jZS8nLFxuICAgICAgICAgICAgICAgICd7aWR9L3VzZXJfdHJhbnNhY3Rpb25zLycsXG4gICAgICAgICAgICAgICAgJ3tpZH0vb3Blbl9vcmRlcnMvJyxcbiAgICAgICAgICAgICAgICAne2lkfS9jYW5jZWxfb3JkZXIvJyxcbiAgICAgICAgICAgICAgICAne2lkfS9idXkvJyxcbiAgICAgICAgICAgICAgICAne2lkfS9zZWxsLycsXG4gICAgICAgICAgICAgICAgJ3tpZH0vYnV5X21hcmtldC8nLFxuICAgICAgICAgICAgICAgICd7aWR9L3NlbGxfbWFya2V0LycsXG4gICAgICAgICAgICAgICAgJ3tpZH0vZXN0aW1hdGVfc2VsbF9tYXJrZXQvJyxcbiAgICAgICAgICAgICAgICAne2lkfS9lc3RpbWF0ZV9idXlfbWFya2V0LycsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgJ21hcmtldHMnOiB7XG4gICAgICAgICdCVEMvR0JQJzogeyAnaWQnOiAnWEJUL0dCUCcsICdzeW1ib2wnOiAnQlRDL0dCUCcsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdHQlAnIH0sXG4gICAgICAgICdCVEMvRVVSJzogeyAnaWQnOiAnWEJUL0VVUicsICdzeW1ib2wnOiAnQlRDL0VVUicsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdFVVInIH0sXG4gICAgICAgICdCVEMvVVNEJzogeyAnaWQnOiAnWEJUL1VTRCcsICdzeW1ib2wnOiAnQlRDL1VTRCcsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdVU0QnIH0sXG4gICAgICAgICdCVEMvUExOJzogeyAnaWQnOiAnWEJUL1BMTicsICdzeW1ib2wnOiAnQlRDL1BMTicsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdQTE4nIH0sXG4gICAgICAgICdCQ0gvR0JQJzogeyAnaWQnOiAnQkNIL0dCUCcsICdzeW1ib2wnOiAnQkNIL0dCUCcsICdiYXNlJzogJ0JDSCcsICdxdW90ZSc6ICdHQlAnIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAobWFya2V0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0SWRCYWxhbmNlICh7XG4gICAgICAgICAgICAnaWQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCkge1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRJZE9yZGVyQm9vayAoe1xuICAgICAgICAgICAgJ2lkJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdiaWRzJzogW10sXG4gICAgICAgICAgICAnYXNrcyc6IFtdLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHNpZGVzID0gWyAnYmlkcycsICdhc2tzJyBdO1xuICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IHNpZGVzLmxlbmd0aDsgcysrKSB7XG4gICAgICAgICAgICBsZXQgc2lkZSA9IHNpZGVzW3NdO1xuICAgICAgICAgICAgbGV0IG9yZGVycyA9IG9yZGVyYm9va1tzaWRlXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9yZGVyID0gb3JkZXJzW2ldO1xuICAgICAgICAgICAgICAgIGxldCBwcmljZSA9IHBhcnNlRmxvYXQgKG9yZGVyWzBdKTtcbiAgICAgICAgICAgICAgICBsZXQgYW1vdW50ID0gcGFyc2VGbG9hdCAob3JkZXJbMV0pO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtzaWRlXS5wdXNoIChbIHByaWNlLCBhbW91bnQgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgcGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KSB7XG4gICAgICAgIC8vIHJld3JpdGUgdG8gZ2V0IHRoZSB0aW1lc3RhbXAgZnJvbSBIVFRQIGhlYWRlcnNcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydoaWdoJ10pLFxuICAgICAgICAgICAgJ2xvdyc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbG93J10pLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYmlkJ10pLFxuICAgICAgICAgICAgJ2Fzayc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYXNrJ10pLFxuICAgICAgICAgICAgJ3Z3YXAnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3Z3YXAnXSksXG4gICAgICAgICAgICAnb3Blbic6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjbG9zZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdmaXJzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsYXN0JzogcGFyc2VGbG9hdCAodGlja2VyWydsYXN0J10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndm9sdW1lJ10pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgbGV0IG0gPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHRpY2tlciA9IGF3YWl0IHRoaXMucHVibGljR2V0SWRUaWNrZXIgKHtcbiAgICAgICAgICAgICdpZCc6IG1bJ2lkJ10sXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVRpY2tlciAodGlja2VyLCBtKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0SWRUcmFuc2FjdGlvbnMgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnaWQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IG9yZGVyID0geyAnaWQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpIH07XG4gICAgICAgIGxldCBtZXRob2QgPSAncHJpdmF0ZVBvc3RJZCcgKyB0aGlzLmNhcGl0YWxpemUgKHNpZGUpO1xuICAgICAgICBpZiAodHlwZSA9PSAnbWFya2V0Jykge1xuICAgICAgICAgICAgb3JkZXJbJ3F1YW50aXR5J10gPSBhbW91bnQ7XG4gICAgICAgICAgICBtZXRob2QgKz0gJ01hcmtldCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvcmRlclsncHJpY2UnXSA9IHByaWNlO1xuICAgICAgICAgICAgb3JkZXJbJ2Ftb3VudCddID0gYW1vdW50O1xuICAgICAgICB9ICAgICAgICBcbiAgICAgICAgcmV0dXJuIHRoaXNbbWV0aG9kXSAodGhpcy5leHRlbmQgKG9yZGVyLCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0SWRDYW5jZWxPcmRlciAoeyAnaWQnOiBpZCB9KTtcbiAgICB9LFxuXG4gICAgcmVxdWVzdCAocGF0aCwgdHlwZSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gY3VybCAtayAtdSAnW1VzZXIgSURdL1tBUEkga2V5XTpbUGFzc3BocmFzZV0nIGh0dHBzOi8vd2ViYXBpLmNvaW5mbG9vci5jby51azo4MDkwL2Jpc3QvWEJUL0dCUC9iYWxhbmNlL1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArICcvJyArIHRoaXMuaW1wbG9kZVBhcmFtcyAocGF0aCwgcGFyYW1zKTtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5vbWl0IChwYXJhbXMsIHRoaXMuZXh0cmFjdFBhcmFtcyAocGF0aCkpO1xuICAgICAgICBpZiAodHlwZSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChxdWVyeSkubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG5vbmNlID0gdGhpcy5ub25jZSAoKTtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLnVybGVuY29kZSAodGhpcy5leHRlbmQgKHsgJ25vbmNlJzogbm9uY2UgfSwgcXVlcnkpKTtcbiAgICAgICAgICAgIGxldCBhdXRoID0gdGhpcy51aWQgKyAnLycgKyB0aGlzLmFwaUtleSArICc6JyArIHRoaXMucGFzc3dvcmQ7XG4gICAgICAgICAgICBsZXQgc2lnbmF0dXJlID0gdGhpcy5zdHJpbmdUb0Jhc2U2NCAoYXV0aCk7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICAgICAgICAnQ29udGVudC1MZW5ndGgnOiBib2R5Lmxlbmd0aCxcbiAgICAgICAgICAgICAgICAnQXV0aG9yaXphdGlvbic6ICdCYXNpYyAnICsgc2lnbmF0dXJlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGNvaW5naSA9IHtcblxuICAgICdpZCc6ICdjb2luZ2knLFxuICAgICduYW1lJzogJ0NvaW5naScsXG4gICAgJ3JhdGVMaW1pdCc6IDEwMDAsXG4gICAgJ2NvdW50cmllcyc6IFsgJ1BBJywgJ0JHJywgJ0NOJywgJ1VTJyBdLCAvLyBQYW5hbWEsIEJ1bGdhcmlhLCBDaGluYSwgVVNcbiAgICAnaGFzRmV0Y2hUaWNrZXJzJzogdHJ1ZSxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yODYxOTcwNy01YzkyMzJhOC03MjEyLTExZTctODZkNi05OGZlNWQxNWNjNmUuanBnJyxcbiAgICAgICAgJ2FwaSc6ICdodHRwczovL2FwaS5jb2luZ2kuY29tJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL2NvaW5naS5jb20nLFxuICAgICAgICAnZG9jJzogJ2h0dHA6Ly9kb2NzLmNvaW5naS5hcGlhcnkuaW8vJyxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdjdXJyZW50Jzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnb3JkZXItYm9vay97cGFpcn0ve2Fza0NvdW50fS97YmlkQ291bnR9L3tkZXB0aH0nLFxuICAgICAgICAgICAgICAgICd0cmFuc2FjdGlvbnMve3BhaXJ9L3ttYXhDb3VudH0nLFxuICAgICAgICAgICAgICAgICcyNGhvdXItcm9sbGluZy1hZ2dyZWdhdGlvbicsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAndXNlcic6IHtcbiAgICAgICAgICAgICdwb3N0JzogW1xuICAgICAgICAgICAgICAgICdiYWxhbmNlJyxcbiAgICAgICAgICAgICAgICAnYWRkLW9yZGVyJyxcbiAgICAgICAgICAgICAgICAnY2FuY2VsLW9yZGVyJyxcbiAgICAgICAgICAgICAgICAnb3JkZXJzJyxcbiAgICAgICAgICAgICAgICAndHJhbnNhY3Rpb25zJyxcbiAgICAgICAgICAgICAgICAnY3JlYXRlLWNyeXB0by13aXRoZHJhd2FsJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0xUQy9CVEMnOiB7ICdpZCc6ICdsdGMtYnRjJywgJ3N5bWJvbCc6ICdMVEMvQlRDJywgJ2Jhc2UnOiAnTFRDJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ1BQQy9CVEMnOiB7ICdpZCc6ICdwcGMtYnRjJywgJ3N5bWJvbCc6ICdQUEMvQlRDJywgJ2Jhc2UnOiAnUFBDJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ0RPR0UvQlRDJzogeyAnaWQnOiAnZG9nZS1idGMnLCAnc3ltYm9sJzogJ0RPR0UvQlRDJywgJ2Jhc2UnOiAnRE9HRScsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdWVEMvQlRDJzogeyAnaWQnOiAndnRjLWJ0YycsICdzeW1ib2wnOiAnVlRDL0JUQycsICdiYXNlJzogJ1ZUQycsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdGVEMvQlRDJzogeyAnaWQnOiAnZnRjLWJ0YycsICdzeW1ib2wnOiAnRlRDL0JUQycsICdiYXNlJzogJ0ZUQycsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdOTUMvQlRDJzogeyAnaWQnOiAnbm1jLWJ0YycsICdzeW1ib2wnOiAnTk1DL0JUQycsICdiYXNlJzogJ05NQycsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdEQVNIL0JUQyc6IHsgJ2lkJzogJ2Rhc2gtYnRjJywgJ3N5bWJvbCc6ICdEQVNIL0JUQycsICdiYXNlJzogJ0RBU0gnLCAncXVvdGUnOiAnQlRDJyB9LFxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBsZXQgY3VycmVuY2llcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IHRoaXMuY3VycmVuY2llcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gdGhpcy5jdXJyZW5jaWVzW2NdLnRvTG93ZXJDYXNlICgpO1xuICAgICAgICAgICAgY3VycmVuY2llcy5wdXNoIChjdXJyZW5jeSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGJhbGFuY2VzID0gYXdhaXQgdGhpcy51c2VyUG9zdEJhbGFuY2UgKHtcbiAgICAgICAgICAgICdjdXJyZW5jaWVzJzogY3VycmVuY2llcy5qb2luICgnLCcpXG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGJhbGFuY2VzIH07XG4gICAgICAgIGZvciAobGV0IGIgPSAwOyBiIDwgYmFsYW5jZXMubGVuZ3RoOyBiKyspIHtcbiAgICAgICAgICAgIGxldCBiYWxhbmNlID0gYmFsYW5jZXNbYl07XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBiYWxhbmNlWydjdXJyZW5jeSddWyduYW1lJ107XG4gICAgICAgICAgICBjdXJyZW5jeSA9IGN1cnJlbmN5LnRvVXBwZXJDYXNlICgpO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiBiYWxhbmNlWydhdmFpbGFibGUnXSxcbiAgICAgICAgICAgICAgICAndXNlZCc6IGJhbGFuY2VbJ2Jsb2NrZWQnXSArIGJhbGFuY2VbJ2luT3JkZXJzJ10gKyBiYWxhbmNlWyd3aXRoZHJhd2luZyddLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhY2NvdW50Wyd0b3RhbCddID0gdGhpcy5zdW0gKGFjY291bnRbJ2ZyZWUnXSwgYWNjb3VudFsndXNlZCddKTtcbiAgICAgICAgICAgIHJlc3VsdFtjdXJyZW5jeV0gPSBhY2NvdW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSBhd2FpdCB0aGlzLmN1cnJlbnRHZXRPcmRlckJvb2tQYWlyQXNrQ291bnRCaWRDb3VudERlcHRoICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ3BhaXInOiBwWydpZCddLFxuICAgICAgICAgICAgJ2Fza0NvdW50JzogNTEyLCAvLyBtYXhpbXVtIHJldHVybmVkIG51bWJlciBvZiBhc2tzIDEtNTEyXG4gICAgICAgICAgICAnYmlkQ291bnQnOiA1MTIsIC8vIG1heGltdW0gcmV0dXJuZWQgbnVtYmVyIG9mIGJpZHMgMS01MTJcbiAgICAgICAgICAgICdkZXB0aCc6IDMyLCAvLyBtYXhpbXVtIG51bWJlciBvZiBkZXB0aCByYW5nZSBzdGVwcyAxLTMyXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IFtdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaWRlcyA9IFsgJ2JpZHMnLCAnYXNrcycgXTtcbiAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBzaWRlcy5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1tzXTtcbiAgICAgICAgICAgIGxldCBvcmRlcnMgPSBvcmRlcmJvb2tbc2lkZV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBvcmRlciA9IG9yZGVyc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgcHJpY2UgPSBvcmRlclsncHJpY2UnXTtcbiAgICAgICAgICAgICAgICBsZXQgYW1vdW50ID0gb3JkZXJbJ2Jhc2VBbW91bnQnXTtcbiAgICAgICAgICAgICAgICByZXN1bHRbc2lkZV0ucHVzaCAoWyBwcmljZSwgYW1vdW50IF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIHBhcnNlVGlja2VyICh0aWNrZXIsIG1hcmtldCkge1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiB0aWNrZXJbJ2hpZ2gnXSxcbiAgICAgICAgICAgICdsb3cnOiB0aWNrZXJbJ2xvdyddLFxuICAgICAgICAgICAgJ2JpZCc6IHRpY2tlclsnaGlnaGVzdEJpZCddLFxuICAgICAgICAgICAgJ2Fzayc6IHRpY2tlclsnbG93ZXN0QXNrJ10sXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogdGlja2VyWydiYXNlVm9sdW1lJ10sXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiB0aWNrZXJbJ2NvdW50ZXJWb2x1bWUnXSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGlja2VyO1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlcnMgKCkge1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmN1cnJlbnRHZXQyNGhvdXJSb2xsaW5nQWdncmVnYXRpb24gKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7fTtcbiAgICAgICAgZm9yIChsZXQgdCA9IDA7IHQgPCByZXNwb25zZS5sZW5ndGg7IHQrKykge1xuICAgICAgICAgICAgbGV0IHRpY2tlciA9IHJlc3BvbnNlW3RdO1xuICAgICAgICAgICAgbGV0IGJhc2UgPSB0aWNrZXJbJ2N1cnJlbmN5UGFpciddWydiYXNlJ10udG9VcHBlckNhc2UgKCk7XG4gICAgICAgICAgICBsZXQgcXVvdGUgPSB0aWNrZXJbJ2N1cnJlbmN5UGFpciddWydjb3VudGVyJ10udG9VcHBlckNhc2UgKCk7XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gYmFzZSArICcvJyArIHF1b3RlO1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IHRoaXMubWFya2V0c1tzeW1ib2xdO1xuICAgICAgICAgICAgcmVzdWx0W3N5bWJvbF0gPSB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIG1hcmtldCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmN1cnJlbnRHZXQyNGhvdXJSb2xsaW5nQWdncmVnYXRpb24gKCk7XG4gICAgICAgIGxldCB0aWNrZXJzID0ge307XG4gICAgICAgIGZvciAobGV0IHQgPSAwOyB0IDwgcmVzcG9uc2UubGVuZ3RoOyB0KyspIHtcbiAgICAgICAgICAgIGxldCB0aWNrZXIgPSByZXNwb25zZVt0XTtcbiAgICAgICAgICAgIGxldCBiYXNlID0gdGlja2VyWydjdXJyZW5jeVBhaXInXVsnYmFzZSddLnRvVXBwZXJDYXNlICgpO1xuICAgICAgICAgICAgbGV0IHF1b3RlID0gdGlja2VyWydjdXJyZW5jeVBhaXInXVsnY291bnRlciddLnRvVXBwZXJDYXNlICgpO1xuICAgICAgICAgICAgbGV0IHN5bWJvbCA9IGJhc2UgKyAnLycgKyBxdW90ZTtcbiAgICAgICAgICAgIHRpY2tlcnNbc3ltYm9sXSA9IHRpY2tlcjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgc3ltYm9sID0gcFsnc3ltYm9sJ107XG4gICAgICAgIGlmIChzeW1ib2wgaW4gdGlja2Vycykge1xuICAgICAgICAgICAgbGV0IHRpY2tlciA9IHRpY2tlcnNbc3ltYm9sXTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIHApO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgc3ltYm9sICsgJyB0aWNrZXIgbm90IGZvdW5kJyk7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRHZXRUcmFuc2FjdGlvbnNQYWlyTWF4Q291bnQgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAncGFpcic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgICAgICAnbWF4Q291bnQnOiAxMjgsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAnY3VycmVuY3lQYWlyJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICd2b2x1bWUnOiBhbW91bnQsXG4gICAgICAgICAgICAncHJpY2UnOiBwcmljZSxcbiAgICAgICAgICAgICdvcmRlclR5cGUnOiAoc2lkZSA9PSAnYnV5JykgPyAwIDogMSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy51c2VyUG9zdEFkZE9yZGVyICh0aGlzLmV4dGVuZCAob3JkZXIsIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXNwb25zZSxcbiAgICAgICAgICAgICdpZCc6IHJlc3BvbnNlWydyZXN1bHQnXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnVzZXJQb3N0Q2FuY2VsT3JkZXIgKHsgJ29yZGVySWQnOiBpZCB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArICcvJyArIGFwaSArICcvJyArIHRoaXMuaW1wbG9kZVBhcmFtcyAocGF0aCwgcGFyYW1zKTtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5vbWl0IChwYXJhbXMsIHRoaXMuZXh0cmFjdFBhcmFtcyAocGF0aCkpO1xuICAgICAgICBpZiAoYXBpID09ICdjdXJyZW50Jykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChxdWVyeSkubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG5vbmNlID0gdGhpcy5ub25jZSAoKTtcbiAgICAgICAgICAgIGxldCByZXF1ZXN0ID0gdGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICAgICAndG9rZW4nOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgICAgICAnbm9uY2UnOiBub25jZSxcbiAgICAgICAgICAgIH0sIHF1ZXJ5KTtcbiAgICAgICAgICAgIGxldCBhdXRoID0gbm9uY2UudG9TdHJpbmcgKCkgKyAnJCcgKyB0aGlzLmFwaUtleTtcbiAgICAgICAgICAgIHJlcXVlc3RbJ3NpZ25hdHVyZSddID0gdGhpcy5obWFjICh0aGlzLmVuY29kZSAoYXV0aCksIHRoaXMuZW5jb2RlICh0aGlzLnNlY3JldCkpO1xuICAgICAgICAgICAgYm9keSA9IHRoaXMuanNvbiAocmVxdWVzdCk7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtTGVuZ3RoJzogYm9keS5sZW5ndGgsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdlcnJvcnMnIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBjb2lubWFya2V0Y2FwID0ge1xuXG4gICAgJ2lkJzogJ2NvaW5tYXJrZXRjYXAnLFxuICAgICduYW1lJzogJ0NvaW5NYXJrZXRDYXAnLFxuICAgICdyYXRlTGltaXQnOiAxMDAwMCxcbiAgICAndmVyc2lvbic6ICd2MScsXG4gICAgJ2NvdW50cmllcyc6ICdVUycsXG4gICAgJ2hhc0ZldGNoVGlja2Vycyc6IHRydWUsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjgyNDQyNDQtOWJlNjMxMmEtNjllZC0xMWU3LTk5YzEtN2MxNzk3Mjc1MjY1LmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly9hcGkuY29pbm1hcmtldGNhcC5jb20nLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vY29pbm1hcmtldGNhcC5jb20nLFxuICAgICAgICAnZG9jJzogJ2h0dHBzOi8vY29pbm1hcmtldGNhcC5jb20vYXBpJyxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICd0aWNrZXIvJyxcbiAgICAgICAgICAgICAgICAndGlja2VyL3tpZH0vJyxcbiAgICAgICAgICAgICAgICAnZ2xvYmFsLycsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgJ2N1cnJlbmNpZXMnOiBbXG4gICAgICAgICdBVUQnLFxuICAgICAgICAnQlJMJyxcbiAgICAgICAgJ0NBRCcsXG4gICAgICAgICdDSEYnLFxuICAgICAgICAnQ05ZJyxcbiAgICAgICAgJ0VVUicsXG4gICAgICAgICdHQlAnLFxuICAgICAgICAnSEtEJyxcbiAgICAgICAgJ0lEUicsXG4gICAgICAgICdJTlInLFxuICAgICAgICAnSlBZJyxcbiAgICAgICAgJ0tSVycsXG4gICAgICAgICdNWE4nLFxuICAgICAgICAnUlVCJyxcbiAgICAgICAgJ1VTRCcsXG4gICAgXSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICgnRmV0Y2hpbmcgb3JkZXIgYm9va3MgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgQVBJIG9mICcgKyB0aGlzLmlkKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hNYXJrZXRzICgpIHtcbiAgICAgICAgbGV0IG1hcmtldHMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFRpY2tlciAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGxldCBwID0gMDsgcCA8IG1hcmtldHMubGVuZ3RoOyBwKyspIHtcbiAgICAgICAgICAgIGxldCBtYXJrZXQgPSBtYXJrZXRzW3BdO1xuICAgICAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCB0aGlzLmN1cnJlbmNpZXMubGVuZ3RoOyBjKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgYmFzZSA9IG1hcmtldFsnc3ltYm9sJ107XG4gICAgICAgICAgICAgICAgbGV0IGJhc2VJZCA9IG1hcmtldFsnaWQnXTtcbiAgICAgICAgICAgICAgICBsZXQgcXVvdGUgPSB0aGlzLmN1cnJlbmNpZXNbY107XG4gICAgICAgICAgICAgICAgbGV0IHF1b3RlSWQgPSBxdW90ZS50b0xvd2VyQ2FzZSAoKTtcbiAgICAgICAgICAgICAgICBsZXQgc3ltYm9sID0gYmFzZSArICcvJyArIHF1b3RlO1xuICAgICAgICAgICAgICAgIGxldCBpZCA9IGJhc2VJZCArICcvJyArIHF1b3RlO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoICh7XG4gICAgICAgICAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICAgICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgICAgICAgICAnYmFzZSc6IGJhc2UsXG4gICAgICAgICAgICAgICAgICAgICdxdW90ZSc6IHF1b3RlLFxuICAgICAgICAgICAgICAgICAgICAnYmFzZUlkJzogYmFzZUlkLFxuICAgICAgICAgICAgICAgICAgICAncXVvdGVJZCc6IHF1b3RlSWQsXG4gICAgICAgICAgICAgICAgICAgICdpbmZvJzogbWFya2V0LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoR2xvYmFsIChjdXJyZW5jeSA9ICdVU0QnKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXF1ZXN0ID0ge307XG4gICAgICAgIGlmIChjdXJyZW5jeSlcbiAgICAgICAgICAgIHJlcXVlc3RbJ2NvbnZlcnQnXSA9IGN1cnJlbmN5O1xuICAgICAgICByZXR1cm4gdGhpcy5wdWJsaWNHZXRHbG9iYWwgKHJlcXVlc3QpO1xuICAgIH0sXG5cbiAgICBwYXJzZVRpY2tlciAodGlja2VyLCBtYXJrZXQpIHtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBpZiAoJ2xhc3RfdXBkYXRlZCcgaW4gdGlja2VyKVxuICAgICAgICAgICAgaWYgKHRpY2tlclsnbGFzdF91cGRhdGVkJ10pXG4gICAgICAgICAgICAgICAgdGltZXN0YW1wID0gcGFyc2VJbnQgKHRpY2tlclsnbGFzdF91cGRhdGVkJ10pICogMTAwMDtcbiAgICAgICAgbGV0IHZvbHVtZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IHZvbHVtZUtleSA9ICcyNGhfdm9sdW1lXycgKyBtYXJrZXRbJ3F1b3RlSWQnXTtcbiAgICAgICAgaWYgKHRpY2tlclt2b2x1bWVLZXldKVxuICAgICAgICAgICAgdm9sdW1lID0gcGFyc2VGbG9hdCAodGlja2VyW3ZvbHVtZUtleV0pO1xuICAgICAgICBsZXQgcHJpY2UgPSAncHJpY2VfJyArIG1hcmtldFsncXVvdGVJZCddO1xuICAgICAgICBsZXQgY2hhbmdlID0gdW5kZWZpbmVkO1xuICAgICAgICBsZXQgY2hhbmdlS2V5ID0gJ3BlcmNlbnRfY2hhbmdlXzI0aCc7XG4gICAgICAgIGlmICh0aWNrZXJbY2hhbmdlS2V5XSlcbiAgICAgICAgICAgIGNoYW5nZSA9IHBhcnNlRmxvYXQgKHRpY2tlcltjaGFuZ2VLZXldKTtcbiAgICAgICAgbGV0IGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChwcmljZSBpbiB0aWNrZXIpXG4gICAgICAgICAgICBpZiAodGlja2VyW3ByaWNlXSlcbiAgICAgICAgICAgICAgICBsYXN0ID0gcGFyc2VGbG9hdCAodGlja2VyW3ByaWNlXSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbG93JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2JpZCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhc2snOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBsYXN0LFxuICAgICAgICAgICAgJ2NoYW5nZSc6IGNoYW5nZSxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHZvbHVtZSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlcnMgKGN1cnJlbmN5ID0gJ1VTRCcpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlcXVlc3QgPSB7fTtcbiAgICAgICAgaWYgKGN1cnJlbmN5KVxuICAgICAgICAgICAgcmVxdWVzdFsnY29udmVydCddID0gY3VycmVuY3k7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0VGlja2VyIChyZXF1ZXN0KTtcbiAgICAgICAgbGV0IHRpY2tlcnMgPSB7fTtcbiAgICAgICAgZm9yIChsZXQgdCA9IDA7IHQgPCByZXNwb25zZS5sZW5ndGg7IHQrKykge1xuICAgICAgICAgICAgbGV0IHRpY2tlciA9IHJlc3BvbnNlW3RdO1xuICAgICAgICAgICAgbGV0IGlkID0gdGlja2VyWydpZCddICsgJy8nICsgY3VycmVuY3k7XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gdGhpcy5tYXJrZXRzX2J5X2lkW2lkXTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBtYXJrZXRbJ3N5bWJvbCddO1xuICAgICAgICAgICAgdGlja2Vyc1tzeW1ib2xdID0gdGhpcy5wYXJzZVRpY2tlciAodGlja2VyLCBtYXJrZXQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aWNrZXJzO1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCByZXF1ZXN0ID0ge1xuICAgICAgICAgICAgJ2NvbnZlcnQnOiBwWydxdW90ZSddLFxuICAgICAgICAgICAgJ2lkJzogcFsnYmFzZUlkJ10sXG4gICAgICAgIH07XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0VGlja2VySWQgKHJlcXVlc3QpO1xuICAgICAgICBsZXQgdGlja2VyID0gcmVzcG9uc2VbMF07XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIHApO1xuICAgIH0sXG5cbiAgICByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgJy8nICsgdGhpcy52ZXJzaW9uICsgJy8nICsgdGhpcy5pbXBsb2RlUGFyYW1zIChwYXRoLCBwYXJhbXMpO1xuICAgICAgICBsZXQgcXVlcnkgPSB0aGlzLm9taXQgKHBhcmFtcywgdGhpcy5leHRyYWN0UGFyYW1zIChwYXRoKSk7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyAocXVlcnkpLmxlbmd0aClcbiAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICByZXR1cm4gdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGNvaW5tYXRlID0ge1xuXG4gICAgJ2lkJzogJ2NvaW5tYXRlJyxcbiAgICAnbmFtZSc6ICdDb2luTWF0ZScsXG4gICAgJ2NvdW50cmllcyc6IFsgJ0dCJywgJ0NaJyBdLCAvLyBVSywgQ3plY2ggUmVwdWJsaWNcbiAgICAncmF0ZUxpbWl0JzogMTAwMCxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yNzgxMTIyOS1jMWVmYjUxMC02MDZjLTExZTctOWEzNi04NGJhMmNlNDEyZDguanBnJyxcbiAgICAgICAgJ2FwaSc6ICdodHRwczovL2NvaW5tYXRlLmlvL2FwaScsXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly9jb2lubWF0ZS5pbycsXG4gICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAnaHR0cDovL2RvY3MuY29pbm1hdGUuYXBpYXJ5LmlvJyxcbiAgICAgICAgICAgICdodHRwczovL2NvaW5tYXRlLmlvL2RldmVsb3BlcnMnLFxuICAgICAgICBdLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ29yZGVyQm9vaycsXG4gICAgICAgICAgICAgICAgJ3RpY2tlcicsXG4gICAgICAgICAgICAgICAgJ3RyYW5zYWN0aW9ucycsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAncHJpdmF0ZSc6IHtcbiAgICAgICAgICAgICdwb3N0JzogW1xuICAgICAgICAgICAgICAgICdiYWxhbmNlcycsXG4gICAgICAgICAgICAgICAgJ2JpdGNvaW5XaXRoZHJhd2FsJyxcbiAgICAgICAgICAgICAgICAnYml0Y29pbkRlcG9zaXRBZGRyZXNzZXMnLFxuICAgICAgICAgICAgICAgICdidXlJbnN0YW50JyxcbiAgICAgICAgICAgICAgICAnYnV5TGltaXQnLFxuICAgICAgICAgICAgICAgICdjYW5jZWxPcmRlcicsXG4gICAgICAgICAgICAgICAgJ2NhbmNlbE9yZGVyV2l0aEluZm8nLFxuICAgICAgICAgICAgICAgICdjcmVhdGVWb3VjaGVyJyxcbiAgICAgICAgICAgICAgICAnb3Blbk9yZGVycycsXG4gICAgICAgICAgICAgICAgJ3JlZGVlbVZvdWNoZXInLFxuICAgICAgICAgICAgICAgICdzZWxsSW5zdGFudCcsXG4gICAgICAgICAgICAgICAgJ3NlbGxMaW1pdCcsXG4gICAgICAgICAgICAgICAgJ3RyYW5zYWN0aW9uSGlzdG9yeScsXG4gICAgICAgICAgICAgICAgJ3VuY29uZmlybWVkQml0Y29pbkRlcG9zaXRzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9FVVInOiB7ICdpZCc6ICdCVENfRVVSJywgJ3N5bWJvbCc6ICdCVEMvRVVSJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ0VVUicgfSxcbiAgICAgICAgJ0JUQy9DWksnOiB7ICdpZCc6ICdCVENfQ1pLJywgJ3N5bWJvbCc6ICdCVEMvQ1pLJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ0NaSycgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdEJhbGFuY2VzICgpO1xuICAgICAgICBsZXQgYmFsYW5jZXMgPSByZXNwb25zZVsnZGF0YSddO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGJhbGFuY2VzIH07XG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgdGhpcy5jdXJyZW5jaWVzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSB0aGlzLmN1cnJlbmNpZXNbY107XG4gICAgICAgICAgICBsZXQgYWNjb3VudCA9IHtcbiAgICAgICAgICAgICAgICAnZnJlZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAndXNlZCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAndG90YWwnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGN1cnJlbmN5IGluIGJhbGFuY2VzKSB7XG4gICAgICAgICAgICAgICAgYWNjb3VudFsnZnJlZSddID0gYmFsYW5jZXNbY3VycmVuY3ldWydhdmFpbGFibGUnXTtcbiAgICAgICAgICAgICAgICBhY2NvdW50Wyd1c2VkJ10gPSBiYWxhbmNlc1tjdXJyZW5jeV1bJ3Jlc2VydmVkJ107XG4gICAgICAgICAgICAgICAgYWNjb3VudFsndG90YWwnXSA9IGJhbGFuY2VzW2N1cnJlbmN5XVsnYmFsYW5jZSddO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRPcmRlckJvb2sgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnY3VycmVuY3lQYWlyJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICdncm91cEJ5UHJpY2VMaW1pdCc6ICdGYWxzZScsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgb3JkZXJib29rID0gcmVzcG9uc2VbJ2RhdGEnXTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IG9yZGVyYm9va1sndGltZXN0YW1wJ10gKiAxMDAwO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gb3JkZXJbJ3ByaWNlJ107XG4gICAgICAgICAgICAgICAgbGV0IGFtb3VudCA9IG9yZGVyWydhbW91bnQnXTtcbiAgICAgICAgICAgICAgICByZXN1bHRbc2lkZV0ucHVzaCAoWyBwcmljZSwgYW1vdW50IF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRUaWNrZXIgKHtcbiAgICAgICAgICAgICdjdXJyZW5jeVBhaXInOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IHRpY2tlciA9IHJlc3BvbnNlWydkYXRhJ107XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aWNrZXJbJ3RpbWVzdGFtcCddICogMTAwMDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2JpZCddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2FzayddKSxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdCddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2Ftb3VudCddKSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdGhpcy5wdWJsaWNHZXRUcmFuc2FjdGlvbnMgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnY3VycmVuY3lQYWlyJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICdtaW51dGVzSW50b0hpc3RvcnknOiAxMCxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBtZXRob2QgPSAncHJpdmF0ZVBvc3QnICsgdGhpcy5jYXBpdGFsaXplIChzaWRlKTtcbiAgICAgICAgbGV0IG9yZGVyID0ge1xuICAgICAgICAgICAgJ2N1cnJlbmN5UGFpcic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlID09ICdtYXJrZXQnKSB7XG4gICAgICAgICAgICBpZiAoc2lkZSA9PSAnYnV5JylcbiAgICAgICAgICAgICAgICBvcmRlclsndG90YWwnXSA9IGFtb3VudDsgLy8gYW1vdW50IGluIGZpYXRcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBvcmRlclsnYW1vdW50J10gPSBhbW91bnQ7IC8vIGFtb3VudCBpbiBmaWF0XG4gICAgICAgICAgICBtZXRob2QgKz0gJ0luc3RhbnQnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3JkZXJbJ2Ftb3VudCddID0gYW1vdW50OyAvLyBhbW91bnQgaW4gY3J5cHRvXG4gICAgICAgICAgICBvcmRlclsncHJpY2UnXSA9IHByaWNlO1xuICAgICAgICAgICAgbWV0aG9kICs9IHRoaXMuY2FwaXRhbGl6ZSAodHlwZSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpc1ttZXRob2RdIChzZWxmLmV4dGVuZCAob3JkZXIsIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXNwb25zZSxcbiAgICAgICAgICAgICdpZCc6IHJlc3BvbnNlWydkYXRhJ10udG9TdHJpbmcgKCksXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdENhbmNlbE9yZGVyICh7ICdvcmRlcklkJzogaWQgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ10gKyAnLycgKyBwYXRoO1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHBhcmFtcykubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocGFyYW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghdGhpcy51aWQpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEF1dGhlbnRpY2F0aW9uRXJyb3IgKHRoaXMuaWQgKyAnIHJlcXVpcmVzIGAnICsgdGhpcy5pZCArICcudWlkYCBwcm9wZXJ0eSBmb3IgYXV0aGVudGljYXRpb24nKTtcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCkudG9TdHJpbmcgKCk7XG4gICAgICAgICAgICBsZXQgYXV0aCA9IG5vbmNlICsgdGhpcy51aWQgKyB0aGlzLmFwaUtleTtcbiAgICAgICAgICAgIGxldCBzaWduYXR1cmUgPSB0aGlzLmhtYWMgKHRoaXMuZW5jb2RlIChhdXRoKSwgdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSk7XG4gICAgICAgICAgICBib2R5ID0gdGhpcy51cmxlbmNvZGUgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAgICAgJ2NsaWVudElkJzogdGhpcy51aWQsXG4gICAgICAgICAgICAgICAgJ25vbmNlJzogbm9uY2UsXG4gICAgICAgICAgICAgICAgJ3B1YmxpY0tleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgICAgICdzaWduYXR1cmUnOiBzaWduYXR1cmUudG9VcHBlckNhc2UgKCksXG4gICAgICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgICAgICBpZiAoJ2Vycm9yJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIGlmIChyZXNwb25zZVsnZXJyb3InXSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgJyArIHRoaXMuanNvbiAocmVzcG9uc2UpKTtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGNvaW5zZWN1cmUgPSB7XG5cbiAgICAnaWQnOiAnY29pbnNlY3VyZScsXG4gICAgJ25hbWUnOiAnQ29pbnNlY3VyZScsXG4gICAgJ2NvdW50cmllcyc6ICdJTicsIC8vIEluZGlhXG4gICAgJ3JhdGVMaW1pdCc6IDEwMDAsXG4gICAgJ3ZlcnNpb24nOiAndjEnLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2NDcyLTljYmQyMDBhLTVlZDktMTFlNy05NTUxLTIyNjdhZDdiYWMwOC5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vYXBpLmNvaW5zZWN1cmUuaW4nLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vY29pbnNlY3VyZS5pbicsXG4gICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAnaHR0cHM6Ly9hcGkuY29pbnNlY3VyZS5pbicsXG4gICAgICAgICAgICAnaHR0cHM6Ly9naXRodWIuY29tL2NvaW5zZWN1cmUvcGx1Z2lucycsXG4gICAgICAgIF0sXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnYml0Y29pbi9zZWFyY2gvY29uZmlybWF0aW9uL3t0eGlkfScsXG4gICAgICAgICAgICAgICAgJ2V4Y2hhbmdlL2Fzay9sb3cnLFxuICAgICAgICAgICAgICAgICdleGNoYW5nZS9hc2svb3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnZXhjaGFuZ2UvYmlkL2hpZ2gnLFxuICAgICAgICAgICAgICAgICdleGNoYW5nZS9iaWQvb3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnZXhjaGFuZ2UvbGFzdFRyYWRlJyxcbiAgICAgICAgICAgICAgICAnZXhjaGFuZ2UvbWF4MjRIcicsXG4gICAgICAgICAgICAgICAgJ2V4Y2hhbmdlL21pbjI0SHInLFxuICAgICAgICAgICAgICAgICdleGNoYW5nZS90aWNrZXInLFxuICAgICAgICAgICAgICAgICdleGNoYW5nZS90cmFkZXMnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdtZmEvYXV0aHkvY2FsbCcsXG4gICAgICAgICAgICAgICAgJ21mYS9hdXRoeS9zbXMnLFxuICAgICAgICAgICAgICAgICduZXRraS9zZWFyY2gve25ldGtpTmFtZX0nLFxuICAgICAgICAgICAgICAgICd1c2VyL2Jhbmsvb3RwL3tudW1iZXJ9JyxcbiAgICAgICAgICAgICAgICAndXNlci9reWMvb3RwL3tudW1iZXJ9JyxcbiAgICAgICAgICAgICAgICAndXNlci9wcm9maWxlL3Bob25lL290cC97bnVtYmVyfScsXG4gICAgICAgICAgICAgICAgJ3VzZXIvd2FsbGV0L2NvaW4vYWRkcmVzcy97aWR9JyxcbiAgICAgICAgICAgICAgICAndXNlci93YWxsZXQvY29pbi9kZXBvc2l0L2NvbmZpcm1lZC9hbGwnLFxuICAgICAgICAgICAgICAgICd1c2VyL3dhbGxldC9jb2luL2RlcG9zaXQvY29uZmlybWVkL3tpZH0nLFxuICAgICAgICAgICAgICAgICd1c2VyL3dhbGxldC9jb2luL2RlcG9zaXQvdW5jb25maXJtZWQvYWxsJyxcbiAgICAgICAgICAgICAgICAndXNlci93YWxsZXQvY29pbi9kZXBvc2l0L3VuY29uZmlybWVkL3tpZH0nLFxuICAgICAgICAgICAgICAgICd1c2VyL3dhbGxldC9jb2luL3dhbGxldHMnLFxuICAgICAgICAgICAgICAgICd1c2VyL2V4Y2hhbmdlL2JhbmsvZmlhdC9hY2NvdW50cycsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYmFuay9maWF0L2JhbGFuY2UvYXZhaWxhYmxlJyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS9iYW5rL2ZpYXQvYmFsYW5jZS9wZW5kaW5nJyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS9iYW5rL2ZpYXQvYmFsYW5jZS90b3RhbCcsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYmFuay9maWF0L2RlcG9zaXQvY2FuY2VsbGVkJyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS9iYW5rL2ZpYXQvZGVwb3NpdC91bnZlcmlmaWVkJyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS9iYW5rL2ZpYXQvZGVwb3NpdC92ZXJpZmllZCcsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYmFuay9maWF0L3dpdGhkcmF3L2NhbmNlbGxlZCcsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYmFuay9maWF0L3dpdGhkcmF3L2NvbXBsZXRlZCcsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYmFuay9maWF0L3dpdGhkcmF3L3VudmVyaWZpZWQnLFxuICAgICAgICAgICAgICAgICd1c2VyL2V4Y2hhbmdlL2JhbmsvZmlhdC93aXRoZHJhdy92ZXJpZmllZCcsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYXNrL2NhbmNlbGxlZCcsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYXNrL2NvbXBsZXRlZCcsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYXNrL3BlbmRpbmcnLFxuICAgICAgICAgICAgICAgICd1c2VyL2V4Y2hhbmdlL2JpZC9jYW5jZWxsZWQnLFxuICAgICAgICAgICAgICAgICd1c2VyL2V4Y2hhbmdlL2JpZC9jb21wbGV0ZWQnLFxuICAgICAgICAgICAgICAgICd1c2VyL2V4Y2hhbmdlL2JpZC9wZW5kaW5nJyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS9iYW5rL2NvaW4vYWRkcmVzc2VzJyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS9iYW5rL2NvaW4vYmFsYW5jZS9hdmFpbGFibGUnLFxuICAgICAgICAgICAgICAgICd1c2VyL2V4Y2hhbmdlL2JhbmsvY29pbi9iYWxhbmNlL3BlbmRpbmcnLFxuICAgICAgICAgICAgICAgICd1c2VyL2V4Y2hhbmdlL2JhbmsvY29pbi9iYWxhbmNlL3RvdGFsJyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS9iYW5rL2NvaW4vZGVwb3NpdC9jYW5jZWxsZWQnLFxuICAgICAgICAgICAgICAgICd1c2VyL2V4Y2hhbmdlL2JhbmsvY29pbi9kZXBvc2l0L3VudmVyaWZpZWQnLFxuICAgICAgICAgICAgICAgICd1c2VyL2V4Y2hhbmdlL2JhbmsvY29pbi9kZXBvc2l0L3ZlcmlmaWVkJyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS9iYW5rL2NvaW4vd2l0aGRyYXcvY2FuY2VsbGVkJyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS9iYW5rL2NvaW4vd2l0aGRyYXcvY29tcGxldGVkJyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS9iYW5rL2NvaW4vd2l0aGRyYXcvdW52ZXJpZmllZCcsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYmFuay9jb2luL3dpdGhkcmF3L3ZlcmlmaWVkJyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS9iYW5rL3N1bW1hcnknLFxuICAgICAgICAgICAgICAgICd1c2VyL2V4Y2hhbmdlL2NvaW4vZmVlJyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS9maWF0L2ZlZScsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2Uva3ljcycsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvcmVmZXJyYWwvY29pbi9wYWlkJyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS9yZWZlcnJhbC9jb2luL3N1Y2Nlc3NmdWwnLFxuICAgICAgICAgICAgICAgICd1c2VyL2V4Y2hhbmdlL3JlZmVycmFsL2ZpYXQvcGFpZCcsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvcmVmZXJyYWxzJyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS90cmFkZS9zdW1tYXJ5JyxcbiAgICAgICAgICAgICAgICAndXNlci9sb2dpbi90b2tlbi97dG9rZW59JyxcbiAgICAgICAgICAgICAgICAndXNlci9zdW1tYXJ5JyxcbiAgICAgICAgICAgICAgICAndXNlci93YWxsZXQvc3VtbWFyeScsXG4gICAgICAgICAgICAgICAgJ3dhbGxldC9jb2luL3dpdGhkcmF3L2NhbmNlbGxlZCcsXG4gICAgICAgICAgICAgICAgJ3dhbGxldC9jb2luL3dpdGhkcmF3L2NvbXBsZXRlZCcsXG4gICAgICAgICAgICAgICAgJ3dhbGxldC9jb2luL3dpdGhkcmF3L3VudmVyaWZpZWQnLFxuICAgICAgICAgICAgICAgICd3YWxsZXQvY29pbi93aXRoZHJhdy92ZXJpZmllZCcsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2xvZ2luJyxcbiAgICAgICAgICAgICAgICAnbG9naW4vaW5pdGlhdGUnLFxuICAgICAgICAgICAgICAgICdsb2dpbi9wYXNzd29yZC9mb3Jnb3QnLFxuICAgICAgICAgICAgICAgICdtZmEvYXV0aHkvaW5pdGlhdGUnLFxuICAgICAgICAgICAgICAgICdtZmEvZ2EvaW5pdGlhdGUnLFxuICAgICAgICAgICAgICAgICdzaWdudXAnLFxuICAgICAgICAgICAgICAgICd1c2VyL25ldGtpL3VwZGF0ZScsXG4gICAgICAgICAgICAgICAgJ3VzZXIvcHJvZmlsZS9pbWFnZS91cGRhdGUnLFxuICAgICAgICAgICAgICAgICd1c2VyL2V4Y2hhbmdlL2JhbmsvY29pbi93aXRoZHJhdy9pbml0aWF0ZScsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYmFuay9jb2luL3dpdGhkcmF3L25ld1ZlcmlmeWNvZGUnLFxuICAgICAgICAgICAgICAgICd1c2VyL2V4Y2hhbmdlL2JhbmsvZmlhdC93aXRoZHJhdy9pbml0aWF0ZScsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYmFuay9maWF0L3dpdGhkcmF3L25ld1ZlcmlmeWNvZGUnLFxuICAgICAgICAgICAgICAgICd1c2VyL3Bhc3N3b3JkL2NoYW5nZScsXG4gICAgICAgICAgICAgICAgJ3VzZXIvcGFzc3dvcmQvcmVzZXQnLFxuICAgICAgICAgICAgICAgICd1c2VyL3dhbGxldC9jb2luL3dpdGhkcmF3L2luaXRpYXRlJyxcbiAgICAgICAgICAgICAgICAnd2FsbGV0L2NvaW4vd2l0aGRyYXcvbmV3VmVyaWZ5Y29kZScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ3B1dCc6IFtcbiAgICAgICAgICAgICAgICAnc2lnbnVwL3ZlcmlmeS97dG9rZW59JyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS9reWMnLFxuICAgICAgICAgICAgICAgICd1c2VyL2V4Y2hhbmdlL2JhbmsvZmlhdC9kZXBvc2l0L25ldycsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYXNrL25ldycsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYmlkL25ldycsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvaW5zdGFudC9idXknLFxuICAgICAgICAgICAgICAgICd1c2VyL2V4Y2hhbmdlL2luc3RhbnQvc2VsbCcsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYmFuay9jb2luL3dpdGhkcmF3L3ZlcmlmeScsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYmFuay9maWF0L2FjY291bnQvbmV3JyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS9iYW5rL2ZpYXQvd2l0aGRyYXcvdmVyaWZ5JyxcbiAgICAgICAgICAgICAgICAndXNlci9tZmEvYXV0aHkvaW5pdGlhdGUvZW5hYmxlJyxcbiAgICAgICAgICAgICAgICAndXNlci9tZmEvZ2EvaW5pdGlhdGUvZW5hYmxlJyxcbiAgICAgICAgICAgICAgICAndXNlci9uZXRraS9jcmVhdGUnLFxuICAgICAgICAgICAgICAgICd1c2VyL3Byb2ZpbGUvcGhvbmUvbmV3JyxcbiAgICAgICAgICAgICAgICAndXNlci93YWxsZXQvY29pbi9hZGRyZXNzL25ldycsXG4gICAgICAgICAgICAgICAgJ3VzZXIvd2FsbGV0L2NvaW4vbmV3JyxcbiAgICAgICAgICAgICAgICAndXNlci93YWxsZXQvY29pbi93aXRoZHJhdy9zZW5kVG9FeGNoYW5nZScsXG4gICAgICAgICAgICAgICAgJ3VzZXIvd2FsbGV0L2NvaW4vd2l0aGRyYXcvdmVyaWZ5JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAnZGVsZXRlJzogW1xuICAgICAgICAgICAgICAgICd1c2VyL2djbS97Y29kZX0nLFxuICAgICAgICAgICAgICAgICd1c2VyL2xvZ291dCcsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYmFuay9jb2luL3dpdGhkcmF3L3VudmVyaWZpZWQvY2FuY2VsL3t3aXRoZHJhd0lEfScsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYmFuay9maWF0L2RlcG9zaXQvY2FuY2VsL3tkZXBvc2l0SUR9JyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS9hc2svY2FuY2VsL3tvcmRlcklEfScsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYmlkL2NhbmNlbC97b3JkZXJJRH0nLFxuICAgICAgICAgICAgICAgICd1c2VyL2V4Y2hhbmdlL2JhbmsvZmlhdC93aXRoZHJhdy91bnZlcmlmaWVkL2NhbmNlbC97d2l0aGRyYXdJRH0nLFxuICAgICAgICAgICAgICAgICd1c2VyL21mYS9hdXRoeS9kaXNhYmxlL3tjb2RlfScsXG4gICAgICAgICAgICAgICAgJ3VzZXIvbWZhL2dhL2Rpc2FibGUve2NvZGV9JyxcbiAgICAgICAgICAgICAgICAndXNlci9wcm9maWxlL3Bob25lL2RlbGV0ZScsXG4gICAgICAgICAgICAgICAgJ3VzZXIvcHJvZmlsZS9pbWFnZS9kZWxldGUve25ldGtpTmFtZX0nLFxuICAgICAgICAgICAgICAgICd1c2VyL3dhbGxldC9jb2luL3dpdGhkcmF3L3VudmVyaWZpZWQvY2FuY2VsL3t3aXRoZHJhd0lEfScsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgJ21hcmtldHMnOiB7XG4gICAgICAgICdCVEMvSU5SJzogeyAnaWQnOiAnQlRDL0lOUicsICdzeW1ib2wnOiAnQlRDL0lOUicsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdJTlInIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZUdldFVzZXJFeGNoYW5nZUJhbmtTdW1tYXJ5ICgpO1xuICAgICAgICBsZXQgYmFsYW5jZSA9IHJlc3BvbnNlWydtZXNzYWdlJ107XG4gICAgICAgIGxldCBjb2luID0ge1xuICAgICAgICAgICAgJ2ZyZWUnOiBiYWxhbmNlWydhdmFpbGFibGVDb2luQmFsYW5jZSddLFxuICAgICAgICAgICAgJ3VzZWQnOiBiYWxhbmNlWydwZW5kaW5nQ29pbkJhbGFuY2UnXSxcbiAgICAgICAgICAgICd0b3RhbCc6IGJhbGFuY2VbJ3RvdGFsQ29pbkJhbGFuY2UnXSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IGZpYXQgPSB7XG4gICAgICAgICAgICAnZnJlZSc6IGJhbGFuY2VbJ2F2YWlsYWJsZUZpYXRCYWxhbmNlJ10sXG4gICAgICAgICAgICAndXNlZCc6IGJhbGFuY2VbJ3BlbmRpbmdGaWF0QmFsYW5jZSddLFxuICAgICAgICAgICAgJ3RvdGFsJzogYmFsYW5jZVsndG90YWxGaWF0QmFsYW5jZSddLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2luZm8nOiBiYWxhbmNlLFxuICAgICAgICAgICAgJ0JUQyc6IGNvaW4sXG4gICAgICAgICAgICAnSU5SJzogZmlhdCxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IGJpZHMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldEV4Y2hhbmdlQmlkT3JkZXJzIChwYXJhbXMpO1xuICAgICAgICBsZXQgYXNrcyA9IGF3YWl0IHRoaXMucHVibGljR2V0RXhjaGFuZ2VBc2tPcmRlcnMgKHBhcmFtcyk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IGJpZHNbJ21lc3NhZ2UnXSxcbiAgICAgICAgICAgICdhc2tzJzogYXNrc1snbWVzc2FnZSddLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IFtdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaWRlcyA9IFsgJ2JpZHMnLCAnYXNrcycgXTtcbiAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBzaWRlcy5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1tzXTtcbiAgICAgICAgICAgIGxldCBvcmRlcnMgPSBvcmRlcmJvb2tbc2lkZV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBvcmRlciA9IG9yZGVyc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgcHJpY2UgPSBvcmRlclsncmF0ZSddO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBvcmRlclsndm9sJ107XG4gICAgICAgICAgICAgICAgcmVzdWx0W3NpZGVdLnB1c2ggKFsgcHJpY2UsIGFtb3VudCBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0RXhjaGFuZ2VUaWNrZXIgKCk7XG4gICAgICAgIGxldCB0aWNrZXIgPSByZXNwb25zZVsnbWVzc2FnZSddO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGlja2VyWyd0aW1lc3RhbXAnXTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2JpZCddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2FzayddKSxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ29wZW4nXSksXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdFByaWNlJ10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsnY29pbnZvbHVtZSddKSxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsnZmlhdHZvbHVtZSddKSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdGhpcy5wdWJsaWNHZXRFeGNoYW5nZVRyYWRlcyAocGFyYW1zKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IG1ldGhvZCA9ICdwcml2YXRlUHV0VXNlckV4Y2hhbmdlJztcbiAgICAgICAgbGV0IG9yZGVyID0ge307XG4gICAgICAgIGlmICh0eXBlID09ICdtYXJrZXQnKSB7XG4gICAgICAgICAgICBtZXRob2QgKz0gJ0luc3RhbnQnICsgdGhpcy5jYXBpdGFsaXplIChzaWRlKTtcbiAgICAgICAgICAgIGlmIChzaWRlID09ICdidXknKVxuICAgICAgICAgICAgICAgIG9yZGVyWydtYXhGaWF0J10gPSBhbW91bnQ7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgb3JkZXJbJ21heFZvbCddID0gYW1vdW50O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IGRpcmVjdGlvbiA9IChzaWRlID09ICdidXknKSA/ICdCaWQnIDogJ0Fzayc7XG4gICAgICAgICAgICBtZXRob2QgKz0gZGlyZWN0aW9uICsgJ05ldyc7XG4gICAgICAgICAgICBvcmRlclsncmF0ZSddID0gcHJpY2U7XG4gICAgICAgICAgICBvcmRlclsndm9sJ10gPSBhbW91bnQ7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpc1ttZXRob2RdIChzZWxmLmV4dGVuZCAob3JkZXIsIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXNwb25zZSxcbiAgICAgICAgICAgICdpZCc6IHJlc3BvbnNlWydtZXNzYWdlJ11bJ29yZGVySUQnXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyBjYW5jZWxPcmRlciAoKSBpcyBub3QgZnVsbHkgaW1wbGVtZW50ZWQgeWV0Jyk7XG4gICAgICAgIGxldCBtZXRob2QgPSAncHJpdmF0ZURlbGV0ZVVzZXJFeGNoYW5nZUFza0NhbmNlbE9yZGVySWQnOyAvLyBUT0RPIGZpeG1lLCBoYXZlIHRvIHNwZWNpZnkgb3JkZXIgc2lkZSBoZXJlXG4gICAgICAgIHJldHVybiB0aGlzW21ldGhvZF0gKHsgJ29yZGVySUQnOiBpZCB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArICcvJyArIHRoaXMudmVyc2lvbiArICcvJyArIHRoaXMuaW1wbG9kZVBhcmFtcyAocGF0aCwgcGFyYW1zKTtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5vbWl0IChwYXJhbXMsIHRoaXMuZXh0cmFjdFBhcmFtcyAocGF0aCkpO1xuICAgICAgICBpZiAoYXBpID09ICdwcml2YXRlJykge1xuICAgICAgICAgICAgaGVhZGVycyA9IHsgJ0F1dGhvcml6YXRpb24nOiB0aGlzLmFwaUtleSB9O1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChxdWVyeSkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgYm9keSA9IHRoaXMuanNvbiAocXVlcnkpO1xuICAgICAgICAgICAgICAgIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gJ2FwcGxpY2F0aW9uL2pzb24nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdzdWNjZXNzJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIGlmIChyZXNwb25zZVsnc3VjY2VzcyddKVxuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgY29pbnNwb3QgPSB7XG5cbiAgICAnaWQnOiAnY29pbnNwb3QnLFxuICAgICduYW1lJzogJ0NvaW5TcG90JyxcbiAgICAnY291bnRyaWVzJzogJ0FVJywgLy8gQXVzdHJhbGlhXG4gICAgJ3JhdGVMaW1pdCc6IDEwMDAsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjgyMDg0MjktM2NhY2RmOWEtNjg5Ni0xMWU3LTg1NGUtNGM3OWE3NzJhMzBmLmpwZycsXG4gICAgICAgICdhcGknOiB7XG4gICAgICAgICAgICAncHVibGljJzogJ2h0dHBzOi8vd3d3LmNvaW5zcG90LmNvbS5hdS9wdWJhcGknLFxuICAgICAgICAgICAgJ3ByaXZhdGUnOiAnaHR0cHM6Ly93d3cuY29pbnNwb3QuY29tLmF1L2FwaScsXG4gICAgICAgIH0sXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly93d3cuY29pbnNwb3QuY29tLmF1JyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL3d3dy5jb2luc3BvdC5jb20uYXUvYXBpJyxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdsYXRlc3QnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnb3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnb3JkZXJzL2hpc3RvcnknLFxuICAgICAgICAgICAgICAgICdteS9jb2luL2RlcG9zaXQnLFxuICAgICAgICAgICAgICAgICdteS9jb2luL3NlbmQnLFxuICAgICAgICAgICAgICAgICdxdW90ZS9idXknLFxuICAgICAgICAgICAgICAgICdxdW90ZS9zZWxsJyxcbiAgICAgICAgICAgICAgICAnbXkvYmFsYW5jZXMnLFxuICAgICAgICAgICAgICAgICdteS9vcmRlcnMnLFxuICAgICAgICAgICAgICAgICdteS9idXknLFxuICAgICAgICAgICAgICAgICdteS9zZWxsJyxcbiAgICAgICAgICAgICAgICAnbXkvYnV5L2NhbmNlbCcsXG4gICAgICAgICAgICAgICAgJ215L3NlbGwvY2FuY2VsJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9BVUQnOiB7ICdpZCc6ICdCVEMnLCAnc3ltYm9sJzogJ0JUQy9BVUQnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnQVVEJyB9LFxuICAgICAgICAnTFRDL0FVRCc6IHsgJ2lkJzogJ0xUQycsICdzeW1ib2wnOiAnTFRDL0FVRCcsICdiYXNlJzogJ0xUQycsICdxdW90ZSc6ICdBVUQnIH0sXG4gICAgICAgICdET0dFL0FVRCc6IHsgJ2lkJzogJ0RPR0UnLCAnc3ltYm9sJzogJ0RPR0UvQVVEJywgJ2Jhc2UnOiAnRE9HRScsICdxdW90ZSc6ICdBVUQnIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RNeUJhbGFuY2VzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IHJlc3BvbnNlIH07XG4gICAgICAgIGlmICgnYmFsYW5jZScgaW4gcmVzcG9uc2UpIHtcbiAgICAgICAgICAgIGxldCBiYWxhbmNlcyA9IHJlc3BvbnNlWydiYWxhbmNlJ107XG4gICAgICAgICAgICBsZXQgY3VycmVuY2llcyA9IE9iamVjdC5rZXlzIChiYWxhbmNlcyk7XG4gICAgICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IGN1cnJlbmNpZXMubGVuZ3RoOyBjKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBjdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgICAgIGxldCB1cHBlcmNhc2UgPSBjdXJyZW5jeS50b1VwcGVyQ2FzZSAoKTtcbiAgICAgICAgICAgICAgICBsZXQgYWNjb3VudCA9IHtcbiAgICAgICAgICAgICAgICAgICAgJ2ZyZWUnOiBiYWxhbmNlc1tjdXJyZW5jeV0sXG4gICAgICAgICAgICAgICAgICAgICd1c2VkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAndG90YWwnOiBiYWxhbmNlc1tjdXJyZW5jeV0sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBpZiAodXBwZXJjYXNlID09ICdEUksnKVxuICAgICAgICAgICAgICAgICAgICB1cHBlcmNhc2UgPSAnREFTSCc7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3VwcGVyY2FzZV0gPSBhY2NvdW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0T3JkZXJzICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2NvaW50eXBlJzogcFsnaWQnXSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdiaWRzJzogW10sXG4gICAgICAgICAgICAnYXNrcyc6IFtdLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHNpZGVzID0geyAnYmlkcyc6ICdidXlvcmRlcnMnLCAnYXNrcyc6ICdzZWxsb3JkZXJzJyB9O1xuICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzIChzaWRlcyk7XG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwga2V5cy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgbGV0IGtleSA9IGtleXNba107XG4gICAgICAgICAgICBsZXQgc2lkZSA9IHNpZGVzW2tleV07XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAob3JkZXJbJ3JhdGUnXSk7XG4gICAgICAgICAgICAgICAgbGV0IGFtb3VudCA9IHBhcnNlRmxvYXQgKG9yZGVyWydhbW91bnQnXSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W2tleV0ucHVzaCAoWyBwcmljZSwgYW1vdW50IF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlc3VsdFsnYmlkcyddID0gdGhpcy5zb3J0QnkgKHJlc3VsdFsnYmlkcyddLCAwLCB0cnVlKTtcbiAgICAgICAgcmVzdWx0Wydhc2tzJ10gPSB0aGlzLnNvcnRCeSAocmVzdWx0Wydhc2tzJ10sIDApO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0TGF0ZXN0ICgpO1xuICAgICAgICBsZXQgaWQgPSB0aGlzLm1hcmtldElkIChtYXJrZXQpO1xuICAgICAgICBpZCA9IGlkLnRvTG93ZXJDYXNlICgpO1xuICAgICAgICBsZXQgdGlja2VyID0gcmVzcG9uc2VbJ3ByaWNlcyddW2lkXTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xvdyc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2JpZCddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2FzayddKSxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdCddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJpdmF0ZVBvc3RPcmRlcnNIaXN0b3J5ICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2NvaW50eXBlJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBtZXRob2QgPSAncHJpdmF0ZVBvc3RNeScgKyB0aGlzLmNhcGl0YWxpemUgKHNpZGUpO1xuICAgICAgICBpZiAodHlwZSA9PSAnbWFya2V0JylcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyBhbGxvd3MgbGltaXQgb3JkZXJzIG9ubHknKTtcbiAgICAgICAgbGV0IG9yZGVyID0ge1xuICAgICAgICAgICAgJ2NvaW50eXBlJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICdhbW91bnQnOiBhbW91bnQsXG4gICAgICAgICAgICAncmF0ZSc6IHByaWNlLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGhpc1ttZXRob2RdICh0aGlzLmV4dGVuZCAob3JkZXIsIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyBjYW5jZWxPcmRlciAoKSBpcyBub3QgZnVsbHkgaW1wbGVtZW50ZWQgeWV0Jyk7XG4gICAgICAgIGxldCBtZXRob2QgPSAncHJpdmF0ZVBvc3RNeUJ1eSc7XG4gICAgICAgIHJldHVybiB0aGlzW21ldGhvZF0gKHsgJ2lkJzogaWQgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmFwaUtleSlcbiAgICAgICAgICAgIHRocm93IG5ldyBBdXRoZW50aWNhdGlvbkVycm9yICh0aGlzLmlkICsgJyByZXF1aXJlcyBhcGlLZXkgZm9yIGFsbCByZXF1ZXN0cycpO1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXVthcGldICsgJy8nICsgcGF0aDtcbiAgICAgICAgaWYgKGFwaSA9PSAncHJpdmF0ZScpIHtcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCk7XG4gICAgICAgICAgICBib2R5ID0gdGhpcy5qc29uICh0aGlzLmV4dGVuZCAoeyAnbm9uY2UnOiBub25jZSB9LCBwYXJhbXMpKTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAnQ29udGVudC1MZW5ndGgnOiBib2R5Lmxlbmd0aCxcbiAgICAgICAgICAgICAgICAna2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ3NpZ24nOiB0aGlzLmhtYWMgKHRoaXMuZW5jb2RlIChib2R5KSwgdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSwgJ3NoYTUxMicpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGNyeXB0b3BpYSA9IHtcblxuICAgICdpZCc6ICdjcnlwdG9waWEnLFxuICAgICduYW1lJzogJ0NyeXB0b3BpYScsXG4gICAgJ3JhdGVMaW1pdCc6IDE1MDAsXG4gICAgJ2NvdW50cmllcyc6ICdOWicsIC8vIE5ldyBaZWFsYW5kXG4gICAgJ2hhc0ZldGNoVGlja2Vycyc6IHRydWUsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjk0ODQzOTQtN2I0ZWE2ZTItODRjNi0xMWU3LTgzZTUtMWZjY2Y0YjJkYzgxLmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly93d3cuY3J5cHRvcGlhLmNvLm56L2FwaScsXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly93d3cuY3J5cHRvcGlhLmNvLm56JyxcbiAgICAgICAgJ2RvYyc6IFtcbiAgICAgICAgICAgICdodHRwczovL3d3dy5jcnlwdG9waWEuY28ubnovRm9ydW0vVGhyZWFkLzI1NScsXG4gICAgICAgICAgICAnaHR0cHM6Ly93d3cuY3J5cHRvcGlhLmNvLm56L0ZvcnVtL1RocmVhZC8yNTYnLFxuICAgICAgICBdLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ0dldEN1cnJlbmNpZXMnLFxuICAgICAgICAgICAgICAgICdHZXRUcmFkZVBhaXJzJyxcbiAgICAgICAgICAgICAgICAnR2V0TWFya2V0cycsXG4gICAgICAgICAgICAgICAgJ0dldE1hcmtldHMve2lkfScsXG4gICAgICAgICAgICAgICAgJ0dldE1hcmtldHMve2hvdXJzfScsXG4gICAgICAgICAgICAgICAgJ0dldE1hcmtldHMve2lkfS97aG91cnN9JyxcbiAgICAgICAgICAgICAgICAnR2V0TWFya2V0L3tpZH0nLFxuICAgICAgICAgICAgICAgICdHZXRNYXJrZXQve2lkfS97aG91cnN9JyxcbiAgICAgICAgICAgICAgICAnR2V0TWFya2V0SGlzdG9yeS97aWR9JyxcbiAgICAgICAgICAgICAgICAnR2V0TWFya2V0SGlzdG9yeS97aWR9L3tob3Vyc30nLFxuICAgICAgICAgICAgICAgICdHZXRNYXJrZXRPcmRlcnMve2lkfScsXG4gICAgICAgICAgICAgICAgJ0dldE1hcmtldE9yZGVycy97aWR9L3tjb3VudH0nLFxuICAgICAgICAgICAgICAgICdHZXRNYXJrZXRPcmRlckdyb3Vwcy97aWRzfS97Y291bnR9JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ0NhbmNlbFRyYWRlJyxcbiAgICAgICAgICAgICAgICAnR2V0QmFsYW5jZScsXG4gICAgICAgICAgICAgICAgJ0dldERlcG9zaXRBZGRyZXNzJyxcbiAgICAgICAgICAgICAgICAnR2V0T3Blbk9yZGVycycsXG4gICAgICAgICAgICAgICAgJ0dldFRyYWRlSGlzdG9yeScsXG4gICAgICAgICAgICAgICAgJ0dldFRyYW5zYWN0aW9ucycsXG4gICAgICAgICAgICAgICAgJ1N1Ym1pdFRpcCcsXG4gICAgICAgICAgICAgICAgJ1N1Ym1pdFRyYWRlJyxcbiAgICAgICAgICAgICAgICAnU3VibWl0VHJhbnNmZXInLFxuICAgICAgICAgICAgICAgICdTdWJtaXRXaXRoZHJhdycsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE1hcmtldHMgKCkge1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgbGV0IG1hcmtldHMgPSByZXNwb25zZVsnRGF0YSddO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1hcmtldHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCBtYXJrZXQgPSBtYXJrZXRzW2ldO1xuICAgICAgICAgICAgbGV0IGlkID0gbWFya2V0WydUcmFkZVBhaXJJZCddO1xuICAgICAgICAgICAgbGV0IHN5bWJvbCA9IG1hcmtldFsnTGFiZWwnXTtcbiAgICAgICAgICAgIGxldCBbIGJhc2UsIHF1b3RlIF0gPSBzeW1ib2wuc3BsaXQgKCcvJyk7XG4gICAgICAgICAgICByZXN1bHQucHVzaCAoe1xuICAgICAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICAgICAgICAgICdzeW1ib2wnOiBzeW1ib2wsXG4gICAgICAgICAgICAgICAgJ2Jhc2UnOiBiYXNlLFxuICAgICAgICAgICAgICAgICdxdW90ZSc6IHF1b3RlLFxuICAgICAgICAgICAgICAgICdpbmZvJzogbWFya2V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRNYXJrZXRPcmRlcnNJZCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdpZCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgb3JkZXJib29rID0gcmVzcG9uc2VbJ0RhdGEnXTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSB7ICdiaWRzJzogJ0J1eScsICdhc2tzJzogJ1NlbGwnIH07XG4gICAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMgKHNpZGVzKTtcbiAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBrZXlzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICBsZXQga2V5ID0ga2V5c1trXTtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNba2V5XTtcbiAgICAgICAgICAgIGxldCBvcmRlcnMgPSBvcmRlcmJvb2tbc2lkZV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBvcmRlciA9IG9yZGVyc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgcHJpY2UgPSBwYXJzZUZsb2F0IChvcmRlclsnUHJpY2UnXSk7XG4gICAgICAgICAgICAgICAgbGV0IGFtb3VudCA9IHBhcnNlRmxvYXQgKG9yZGVyWydUb3RhbCddKTtcbiAgICAgICAgICAgICAgICByZXN1bHRba2V5XS5wdXNoIChbIHByaWNlLCBhbW91bnQgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgcGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KSB7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydIaWdoJ10pLFxuICAgICAgICAgICAgJ2xvdyc6IHBhcnNlRmxvYXQgKHRpY2tlclsnTG93J10pLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnQmlkUHJpY2UnXSksXG4gICAgICAgICAgICAnYXNrJzogcGFyc2VGbG9hdCAodGlja2VyWydBc2tQcmljZSddKSxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ09wZW4nXSksXG4gICAgICAgICAgICAnY2xvc2UnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ0Nsb3NlJ10pLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ0xhc3RQcmljZSddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ0NoYW5nZSddKSxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsnQmFzZVZvbHVtZSddKSxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsnVm9sdW1lJ10pLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBtID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0TWFya2V0SWQgKHtcbiAgICAgICAgICAgICdpZCc6IG1bJ2lkJ10sXG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgdGlja2VyID0gcmVzcG9uc2VbJ0RhdGEnXTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VUaWNrZXIgKHRpY2tlciwgbSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VycyAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0TWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHt9O1xuICAgICAgICBsZXQgdGlja2VycyA9IHJlc3BvbnNlWydEYXRhJ107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGlja2Vycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IHRpY2tlciA9IHRpY2tlcnNbaV07XG4gICAgICAgICAgICBsZXQgaWQgPSB0aWNrZXJbJ1RyYWRlUGFpcklkJ107XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gdGhpcy5tYXJrZXRzX2J5X2lkW2lkXTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBtYXJrZXRbJ3N5bWJvbCddO1xuICAgICAgICAgICAgcmVzdWx0W3N5bWJvbF0gPSB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIG1hcmtldCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgcGFyc2VUcmFkZSAodHJhZGUsIG1hcmtldCkge1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdHJhZGVbJ1RpbWVzdGFtcCddICogMTAwMDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpZCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdpbmZvJzogdHJhZGUsXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ3N5bWJvbCc6IG1hcmtldFsnc3ltYm9sJ10sXG4gICAgICAgICAgICAndHlwZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdzaWRlJzogdHJhZGVbJ1R5cGUnXS50b0xvd2VyQ2FzZSAoKSxcbiAgICAgICAgICAgICdwcmljZSc6IHRyYWRlWydQcmljZSddLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IHRyYWRlWydBbW91bnQnXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG0gPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRNYXJrZXRIaXN0b3J5SWRIb3VycyAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdpZCc6IG1bJ2lkJ10sXG4gICAgICAgICAgICAnaG91cnMnOiAyNCwgLy8gZGVmYXVsdFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IHRyYWRlcyA9IHJlc3BvbnNlWydEYXRhJ107XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlVHJhZGVzICh0cmFkZXMsIG0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0R2V0QmFsYW5jZSAoKTtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gcmVzcG9uc2VbJ0RhdGEnXTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiByZXNwb25zZSB9O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJhbGFuY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgYmFsYW5jZSA9IGJhbGFuY2VzW2ldO1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gYmFsYW5jZVsnU3ltYm9sJ107XG4gICAgICAgICAgICBsZXQgYWNjb3VudCA9IHtcbiAgICAgICAgICAgICAgICAnZnJlZSc6IGJhbGFuY2VbJ0F2YWlsYWJsZSddLFxuICAgICAgICAgICAgICAgICd1c2VkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IGJhbGFuY2VbJ1RvdGFsJ10sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYWNjb3VudFsndXNlZCddID0gYWNjb3VudFsndG90YWwnXSAtIGFjY291bnRbJ2ZyZWUnXTtcbiAgICAgICAgICAgIHJlc3VsdFtjdXJyZW5jeV0gPSBhY2NvdW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdNYXJrZXQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICAgICAgJ1R5cGUnOiB0aGlzLmNhcGl0YWxpemUgKHNpZGUpLFxuICAgICAgICAgICAgJ1JhdGUnOiBwcmljZSxcbiAgICAgICAgICAgICdBbW91bnQnOiBhbW91bnQsXG4gICAgICAgIH07XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RTdWJtaXRUcmFkZSAodGhpcy5leHRlbmQgKG9yZGVyLCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnRGF0YSddWydPcmRlcklkJ10udG9TdHJpbmcgKCksXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdENhbmNlbFRyYWRlICh7XG4gICAgICAgICAgICAnVHlwZSc6ICdUcmFkZScsXG4gICAgICAgICAgICAnT3JkZXJJZCc6IGlkLFxuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArICcvJyArIHRoaXMuaW1wbG9kZVBhcmFtcyAocGF0aCwgcGFyYW1zKTtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5vbWl0IChwYXJhbXMsIHRoaXMuZXh0cmFjdFBhcmFtcyAocGF0aCkpO1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHF1ZXJ5KS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChxdWVyeSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpLnRvU3RyaW5nICgpO1xuICAgICAgICAgICAgYm9keSA9IHRoaXMuanNvbiAocXVlcnkpO1xuICAgICAgICAgICAgbGV0IGhhc2ggPSB0aGlzLmhhc2ggKHRoaXMuZW5jb2RlIChib2R5KSwgJ21kNScsICdiYXNlNjQnKTtcbiAgICAgICAgICAgIGxldCBzZWNyZXQgPSB0aGlzLmJhc2U2NFRvQmluYXJ5ICh0aGlzLnNlY3JldCk7XG4gICAgICAgICAgICBsZXQgdXJpID0gdGhpcy5lbmNvZGVVUklDb21wb25lbnQgKHVybCk7XG4gICAgICAgICAgICBsZXQgbG93ZXJjYXNlID0gdXJpLnRvTG93ZXJDYXNlICgpO1xuICAgICAgICAgICAgbGV0IHBheWxvYWQgPSB0aGlzLmFwaUtleSArIG1ldGhvZCArIGxvd2VyY2FzZSArIG5vbmNlICsgdGhpcy5iaW5hcnlUb1N0cmluZyAoaGFzaCk7XG4gICAgICAgICAgICBsZXQgc2lnbmF0dXJlID0gdGhpcy5obWFjICh0aGlzLmVuY29kZSAocGF5bG9hZCksIHNlY3JldCwgJ3NoYTI1NicsICdiYXNlNjQnKTtcbiAgICAgICAgICAgIGxldCBhdXRoID0gJ2FteCAnICsgdGhpcy5hcGlLZXkgKyAnOicgKyB0aGlzLmJpbmFyeVRvU3RyaW5nIChzaWduYXR1cmUpICsgJzonICsgbm9uY2U7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtTGVuZ3RoJzogYm9keS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgJ0F1dGhvcml6YXRpb24nOiBhdXRoLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgICAgIGlmICgnU3VjY2VzcycgaW4gcmVzcG9uc2UpXG4gICAgICAgICAgICBpZiAocmVzcG9uc2VbJ1N1Y2Nlc3MnXSlcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGRzeCA9IHtcblxuICAgICdpZCc6ICdkc3gnLFxuICAgICduYW1lJzogJ0RTWCcsXG4gICAgJ2NvdW50cmllcyc6ICdVSycsXG4gICAgJ3JhdGVMaW1pdCc6IDE1MDAsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc5OTAyNzUtMTQxMzE1OGEtNjQ1YS0xMWU3LTkzMWMtOTQ3MTdmNzUxMGUzLmpwZycsXG4gICAgICAgICdhcGknOiB7XG4gICAgICAgICAgICAnbWFwaSc6ICdodHRwczovL2RzeC51ay9tYXBpJywgIC8vIG1hcmtldCBkYXRhXG4gICAgICAgICAgICAndGFwaSc6ICdodHRwczovL2RzeC51ay90YXBpJywgIC8vIHRyYWRpbmdcbiAgICAgICAgICAgICdkd2FwaSc6ICdodHRwczovL2RzeC51ay9kd2FwaScsIC8vIGRlcG9zaXQvd2l0aGRyYXdcbiAgICAgICAgfSxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL2RzeC51aycsXG4gICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAnaHR0cHM6Ly9hcGkuZHN4LnVrJyxcbiAgICAgICAgICAgICdodHRwczovL2RzeC51ay9hcGlfZG9jcy9wdWJsaWMnLFxuICAgICAgICAgICAgJ2h0dHBzOi8vZHN4LnVrL2FwaV9kb2NzL3ByaXZhdGUnLFxuICAgICAgICAgICAgJycsXG4gICAgICAgIF0sXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAnbWFwaSc6IHsgLy8gbWFya2V0IGRhdGEgKHB1YmxpYylcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ2JhcnNGcm9tTW9tZW50L3tpZH0ve3BlcmlvZH0ve3N0YXJ0fScsIC8vIGVtcHR5IHJlcGx5IDpcXFxuICAgICAgICAgICAgICAgICdkZXB0aC97aWR9JyxcbiAgICAgICAgICAgICAgICAnaW5mbycsXG4gICAgICAgICAgICAgICAgJ2xhc3RCYXJzL3tpZH0ve3BlcmlvZH0ve2Ftb3VudH0nLCAvLyBwZXJpb2QgaXMgKG0sIGggb3IgZClcbiAgICAgICAgICAgICAgICAncGVyaW9kQmFycy97aWR9L3twZXJpb2R9L3tzdGFydH0ve2VuZH0nLFxuICAgICAgICAgICAgICAgICd0aWNrZXIve2lkfScsXG4gICAgICAgICAgICAgICAgJ3RyYWRlcy97aWR9JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICd0YXBpJzogeyAvLyB0cmFkaW5nIChwcml2YXRlKVxuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2dldEluZm8nLFxuICAgICAgICAgICAgICAgICdUcmFuc0hpc3RvcnknLFxuICAgICAgICAgICAgICAgICdUcmFkZUhpc3RvcnknLFxuICAgICAgICAgICAgICAgICdPcmRlckhpc3RvcnknLFxuICAgICAgICAgICAgICAgICdBY3RpdmVPcmRlcnMnLFxuICAgICAgICAgICAgICAgICdUcmFkZScsXG4gICAgICAgICAgICAgICAgJ0NhbmNlbE9yZGVyJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdkd2FwaSc6IHsgLy8gZGVwb3NpdCAvIHdpdGhkcmF3IChwcml2YXRlKVxuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2dldENyeXB0b0RlcG9zaXRBZGRyZXNzJyxcbiAgICAgICAgICAgICAgICAnY3J5cHRvV2l0aGRyYXcnLFxuICAgICAgICAgICAgICAgICdmaWF0V2l0aGRyYXcnLFxuICAgICAgICAgICAgICAgICdnZXRUcmFuc2FjdGlvblN0YXR1cycsXG4gICAgICAgICAgICAgICAgJ2dldFRyYW5zYWN0aW9ucycsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE1hcmtldHMgKCkge1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLm1hcGlHZXRJbmZvICgpO1xuICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzIChyZXNwb25zZVsncGFpcnMnXSk7XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgcCA9IDA7IHAgPCBrZXlzLmxlbmd0aDsgcCsrKSB7XG4gICAgICAgICAgICBsZXQgaWQgPSBrZXlzW3BdO1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IHJlc3BvbnNlWydwYWlycyddW2lkXTtcbiAgICAgICAgICAgIGxldCBiYXNlID0gaWQuc2xpY2UgKDAsIDMpO1xuICAgICAgICAgICAgbGV0IHF1b3RlID0gaWQuc2xpY2UgKDMsIDYpO1xuICAgICAgICAgICAgYmFzZSA9IGJhc2UudG9VcHBlckNhc2UgKCk7XG4gICAgICAgICAgICBxdW90ZSA9IHF1b3RlLnRvVXBwZXJDYXNlICgpO1xuICAgICAgICAgICAgbGV0IHN5bWJvbCA9IGJhc2UgKyAnLycgKyBxdW90ZTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoICh7XG4gICAgICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgICAgICAgICAgJ3N5bWJvbCc6IHN5bWJvbCxcbiAgICAgICAgICAgICAgICAnYmFzZSc6IGJhc2UsXG4gICAgICAgICAgICAgICAgJ3F1b3RlJzogcXVvdGUsXG4gICAgICAgICAgICAgICAgJ2luZm8nOiBtYXJrZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnRhcGlQb3N0R2V0SW5mbyAoKTtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gcmVzcG9uc2VbJ3JldHVybiddO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGJhbGFuY2VzIH07XG4gICAgICAgIGxldCBjdXJyZW5jaWVzID0gT2JqZWN0LmtleXMgKGJhbGFuY2VzWyd0b3RhbCddKTtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBjdXJyZW5jaWVzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBjdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiBiYWxhbmNlc1snZnVuZHMnXVtjdXJyZW5jeV0sXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogYmFsYW5jZXNbJ3RvdGFsJ11bY3VycmVuY3ldLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGFjY291bnRbJ3VzZWQnXSA9IGFjY291bnRbJ3RvdGFsJ10gLSBhY2NvdW50WydmcmVlJ107XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLm1hcGlHZXREZXB0aElkICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2lkJzogcFsnaWQnXSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSByZXNwb25zZVtwWydpZCddXTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gb3JkZXJbMF07XG4gICAgICAgICAgICAgICAgbGV0IGFtb3VudCA9IG9yZGVyWzFdO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtzaWRlXS5wdXNoIChbIHByaWNlLCBhbW91bnQgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLm1hcGlHZXRUaWNrZXJJZCAoe1xuICAgICAgICAgICAgJ2lkJzogcFsnaWQnXSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aWNrZXIgPSByZXNwb25zZVtwWydpZCddXTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRpY2tlclsndXBkYXRlZCddICogMTAwMDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2J1eSddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3NlbGwnXSksXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xhc3QnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYXZnJ10pLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbCddKSxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndm9sX2N1ciddKSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBpR2V0VHJhZGVzSWQgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnaWQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgaWYgKHR5cGUgPT0gJ21hcmtldCcpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgYWxsb3dzIGxpbWl0IG9yZGVycyBvbmx5Jyk7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdwYWlyJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICd0eXBlJzogc2lkZSxcbiAgICAgICAgICAgICdyYXRlJzogcHJpY2UsXG4gICAgICAgICAgICAnYW1vdW50JzogYW1vdW50LFxuICAgICAgICB9O1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnRhcGlQb3N0VHJhZGUgKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ2lkJzogcmVzcG9uc2VbJ3JldHVybiddWydvcmRlcklkJ10udG9TdHJpbmcgKCksXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy50YXBpUG9zdENhbmNlbE9yZGVyICh7ICdvcmRlcklkJzogaWQgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdtYXBpJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddW2FwaV07XG4gICAgICAgIGlmICgoYXBpID09ICdtYXBpJykgfHwgKGFwaSA9PSAnZHdhcGknKSlcbiAgICAgICAgICAgIHVybCArPSAnLycgKyB0aGlzLmltcGxvZGVQYXJhbXMgKHBhdGgsIHBhcmFtcyk7XG4gICAgICAgIGxldCBxdWVyeSA9IHRoaXMub21pdCAocGFyYW1zLCB0aGlzLmV4dHJhY3RQYXJhbXMgKHBhdGgpKTtcbiAgICAgICAgaWYgKGFwaSA9PSAnbWFwaScpIHtcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyAocXVlcnkpLmxlbmd0aClcbiAgICAgICAgICAgICAgICB1cmwgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHF1ZXJ5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCk7XG4gICAgICAgICAgICBsZXQgbWV0aG9kID0gcGF0aDtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLnVybGVuY29kZSAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICAgICAnbWV0aG9kJzogcGF0aCxcbiAgICAgICAgICAgICAgICAnbm9uY2UnOiBub25jZSxcbiAgICAgICAgICAgIH0sIHF1ZXJ5KSk7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICAgICAgICAnQ29udGVudC1MZW5ndGgnOiBib2R5Lmxlbmd0aCxcbiAgICAgICAgICAgICAgICAnS2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ1NpZ24nOiB0aGlzLmhtYWMgKHRoaXMuZW5jb2RlIChib2R5KSwgdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSwgJ3NoYTUxMicsICdiYXNlNjQnKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgICAgICBpZiAoYXBpID09ICdtYXBpJylcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgaWYgKCdzdWNjZXNzJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIGlmIChyZXNwb25zZVsnc3VjY2VzcyddKVxuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgZXhtbyA9IHtcblxuICAgICdpZCc6ICdleG1vJyxcbiAgICAnbmFtZSc6ICdFWE1PJyxcbiAgICAnY291bnRyaWVzJzogWyAnRVMnLCAnUlUnIF0sIC8vIFNwYWluLCBSdXNzaWFcbiAgICAncmF0ZUxpbWl0JzogMTAwMCwgLy8gb25jZSBldmVyeSAzNTAgbXMg4omIIDE4MCByZXF1ZXN0cyBwZXIgbWludXRlIOKJiCAzIHJlcXVlc3RzIHBlciBzZWNvbmRcbiAgICAndmVyc2lvbic6ICd2MScsXG4gICAgJ2hhc0ZldGNoVGlja2Vycyc6IHRydWUsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc3NjY0OTEtMWIwZWE5NTYtNWVkYS0xMWU3LTkyMjUtNDBkNjdiNDgxYjhkLmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly9hcGkuZXhtby5jb20nLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vZXhtby5tZScsXG4gICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAnaHR0cHM6Ly9leG1vLm1lL3J1L2FwaV9kb2MnLFxuICAgICAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS9leG1vLWRldi9leG1vX2FwaV9saWIvdHJlZS9tYXN0ZXIvbm9kZWpzJyxcbiAgICAgICAgXSxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdjdXJyZW5jeScsXG4gICAgICAgICAgICAgICAgJ29yZGVyX2Jvb2snLFxuICAgICAgICAgICAgICAgICdwYWlyX3NldHRpbmdzJyxcbiAgICAgICAgICAgICAgICAndGlja2VyJyxcbiAgICAgICAgICAgICAgICAndHJhZGVzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ3VzZXJfaW5mbycsXG4gICAgICAgICAgICAgICAgJ29yZGVyX2NyZWF0ZScsXG4gICAgICAgICAgICAgICAgJ29yZGVyX2NhbmNlbCcsXG4gICAgICAgICAgICAgICAgJ3VzZXJfb3Blbl9vcmRlcnMnLFxuICAgICAgICAgICAgICAgICd1c2VyX3RyYWRlcycsXG4gICAgICAgICAgICAgICAgJ3VzZXJfY2FuY2VsbGVkX29yZGVycycsXG4gICAgICAgICAgICAgICAgJ29yZGVyX3RyYWRlcycsXG4gICAgICAgICAgICAgICAgJ3JlcXVpcmVkX2Ftb3VudCcsXG4gICAgICAgICAgICAgICAgJ2RlcG9zaXRfYWRkcmVzcycsXG4gICAgICAgICAgICAgICAgJ3dpdGhkcmF3X2NyeXB0JyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXdfZ2V0X3R4aWQnLFxuICAgICAgICAgICAgICAgICdleGNvZGVfY3JlYXRlJyxcbiAgICAgICAgICAgICAgICAnZXhjb2RlX2xvYWQnLFxuICAgICAgICAgICAgICAgICd3YWxsZXRfaGlzdG9yeScsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE1hcmtldHMgKCkge1xuICAgICAgICBsZXQgbWFya2V0cyA9IGF3YWl0IHRoaXMucHVibGljR2V0UGFpclNldHRpbmdzICgpO1xuICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzIChtYXJrZXRzKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGxldCBwID0gMDsgcCA8IGtleXMubGVuZ3RoOyBwKyspIHtcbiAgICAgICAgICAgIGxldCBpZCA9IGtleXNbcF07XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gbWFya2V0c1tpZF07XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gaWQucmVwbGFjZSAoJ18nLCAnLycpO1xuICAgICAgICAgICAgbGV0IFsgYmFzZSwgcXVvdGUgXSA9IHN5bWJvbC5zcGxpdCAoJy8nKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoICh7XG4gICAgICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgICAgICAgICAgJ3N5bWJvbCc6IHN5bWJvbCxcbiAgICAgICAgICAgICAgICAnYmFzZSc6IGJhc2UsXG4gICAgICAgICAgICAgICAgJ3F1b3RlJzogcXVvdGUsXG4gICAgICAgICAgICAgICAgJ2luZm8nOiBtYXJrZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0VXNlckluZm8gKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogcmVzcG9uc2UgfTtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCB0aGlzLmN1cnJlbmNpZXMubGVuZ3RoOyBjKyspIHtcbiAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IHRoaXMuY3VycmVuY2llc1tjXTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd1c2VkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoY3VycmVuY3kgaW4gcmVzcG9uc2VbJ2JhbGFuY2VzJ10pXG4gICAgICAgICAgICAgICAgYWNjb3VudFsnZnJlZSddID0gcGFyc2VGbG9hdCAocmVzcG9uc2VbJ2JhbGFuY2VzJ11bY3VycmVuY3ldKTtcbiAgICAgICAgICAgIGlmIChjdXJyZW5jeSBpbiByZXNwb25zZVsncmVzZXJ2ZWQnXSlcbiAgICAgICAgICAgICAgICBhY2NvdW50Wyd1c2VkJ10gPSBwYXJzZUZsb2F0IChyZXNwb25zZVsncmVzZXJ2ZWQnXVtjdXJyZW5jeV0pO1xuICAgICAgICAgICAgYWNjb3VudFsndG90YWwnXSA9IHRoaXMuc3VtIChhY2NvdW50WydmcmVlJ10sIGFjY291bnRbJ3VzZWQnXSk7XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldE9yZGVyQm9vayAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdwYWlyJzogcFsnaWQnXSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSByZXNwb25zZVtwWydpZCddXTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSB7ICdiaWRzJzogJ2JpZCcsICdhc2tzJzogJ2FzaycgfTtcbiAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyAoc2lkZXMpO1xuICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGtleXMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgIGxldCBrZXkgPSBrZXlzW2tdO1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1trZXldO1xuICAgICAgICAgICAgbGV0IG9yZGVycyA9IG9yZGVyYm9va1tzaWRlXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9yZGVyID0gb3JkZXJzW2ldO1xuICAgICAgICAgICAgICAgIGxldCBwcmljZSA9IHBhcnNlRmxvYXQgKG9yZGVyWzBdKTtcbiAgICAgICAgICAgICAgICBsZXQgYW1vdW50ID0gcGFyc2VGbG9hdCAob3JkZXJbMV0pO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldLnB1c2ggKFsgcHJpY2UsIGFtb3VudCBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBwYXJzZVRpY2tlciAodGlja2VyLCBtYXJrZXQpIHtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRpY2tlclsndXBkYXRlZCddICogMTAwMDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2J1eV9wcmljZSddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3NlbGxfcHJpY2UnXSksXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xhc3RfdHJhZGUnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYXZnJ10pLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbCddKSxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndm9sX2N1cnInXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXJzIChjdXJyZW5jeSA9ICdVU0QnKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0VGlja2VyICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge307XG4gICAgICAgIGxldCBpZHMgPSBPYmplY3Qua2V5cyAocmVzcG9uc2UpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IGlkID0gaWRzW2ldO1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IHRoaXMubWFya2V0c19ieV9pZFtpZF07XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gbWFya2V0WydzeW1ib2wnXTtcbiAgICAgICAgICAgIGxldCB0aWNrZXIgPSByZXNwb25zZVtpZF07XG4gICAgICAgICAgICByZXN1bHRbc3ltYm9sXSA9IHRoaXMucGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0VGlja2VyICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVRpY2tlciAocmVzcG9uc2VbcFsnaWQnXV0sIHApO1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wdWJsaWNHZXRUcmFkZXMgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAncGFpcic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcHJlZml4ID0gJyc7XG4gICAgICAgIGlmICh0eXBlID09ICdtYXJrZXQnKVxuICAgICAgICAgICAgcHJlZml4ID0gJ21hcmtldF8nO1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAncGFpcic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgICAgICAncXVhbnRpdHknOiBhbW91bnQsXG4gICAgICAgICAgICAncHJpY2UnOiBwcmljZSB8fCAwLFxuICAgICAgICAgICAgJ3R5cGUnOiBwcmVmaXggKyBzaWRlLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0T3JkZXJDcmVhdGUgKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ2lkJzogcmVzcG9uc2VbJ29yZGVyX2lkJ10udG9TdHJpbmcgKCksXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdE9yZGVyQ2FuY2VsICh7ICdvcmRlcl9pZCc6IGlkIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgJy8nICsgdGhpcy52ZXJzaW9uICsgJy8nICsgcGF0aDtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChwYXJhbXMpLmxlbmd0aClcbiAgICAgICAgICAgICAgICB1cmwgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHBhcmFtcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpO1xuICAgICAgICAgICAgYm9keSA9IHRoaXMudXJsZW5jb2RlICh0aGlzLmV4dGVuZCAoeyAnbm9uY2UnOiBub25jZSB9LCBwYXJhbXMpKTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgICAgICAgICdDb250ZW50LUxlbmd0aCc6IGJvZHkubGVuZ3RoLFxuICAgICAgICAgICAgICAgICdLZXknOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgICAgICAnU2lnbic6IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKGJvZHkpLCB0aGlzLmVuY29kZSAodGhpcy5zZWNyZXQpLCAnc2hhNTEyJyksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdyZXN1bHQnIGluIHJlc3BvbnNlKSB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2VbJ3Jlc3VsdCddKVxuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBmbG93YnRjID0ge1xuXG4gICAgJ2lkJzogJ2Zsb3didGMnLFxuICAgICduYW1lJzogJ2Zsb3dCVEMnLFxuICAgICdjb3VudHJpZXMnOiAnQlInLCAvLyBCcmF6aWxcbiAgICAndmVyc2lvbic6ICd2MScsXG4gICAgJ3JhdGVMaW1pdCc6IDEwMDAsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjgxNjI0NjUtY2Q4MTVkNGMtNjdjZi0xMWU3LThlNTctNDM4YmVhMDUyM2EyLmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly9hcGkuZmxvd2J0Yy5jb206ODQwMC9hamF4JyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3RyYWRlci5mbG93YnRjLmNvbScsXG4gICAgICAgICdkb2MnOiAnaHR0cDovL3d3dy5mbG93YnRjLmNvbS5ici9hcGkvJyxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnR2V0VGlja2VyJyxcbiAgICAgICAgICAgICAgICAnR2V0VHJhZGVzJyxcbiAgICAgICAgICAgICAgICAnR2V0VHJhZGVzQnlEYXRlJyxcbiAgICAgICAgICAgICAgICAnR2V0T3JkZXJCb29rJyxcbiAgICAgICAgICAgICAgICAnR2V0UHJvZHVjdFBhaXJzJyxcbiAgICAgICAgICAgICAgICAnR2V0UHJvZHVjdHMnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnQ3JlYXRlQWNjb3VudCcsXG4gICAgICAgICAgICAgICAgJ0dldFVzZXJJbmZvJyxcbiAgICAgICAgICAgICAgICAnU2V0VXNlckluZm8nLFxuICAgICAgICAgICAgICAgICdHZXRBY2NvdW50SW5mbycsXG4gICAgICAgICAgICAgICAgJ0dldEFjY291bnRUcmFkZXMnLFxuICAgICAgICAgICAgICAgICdHZXREZXBvc2l0QWRkcmVzc2VzJyxcbiAgICAgICAgICAgICAgICAnV2l0aGRyYXcnLFxuICAgICAgICAgICAgICAgICdDcmVhdGVPcmRlcicsXG4gICAgICAgICAgICAgICAgJ01vZGlmeU9yZGVyJyxcbiAgICAgICAgICAgICAgICAnQ2FuY2VsT3JkZXInLFxuICAgICAgICAgICAgICAgICdDYW5jZWxBbGxPcmRlcnMnLFxuICAgICAgICAgICAgICAgICdHZXRBY2NvdW50T3Blbk9yZGVycycsXG4gICAgICAgICAgICAgICAgJ0dldE9yZGVyRmVlJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoTWFya2V0cyAoKSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljUG9zdEdldFByb2R1Y3RQYWlycyAoKTtcbiAgICAgICAgbGV0IG1hcmtldHMgPSByZXNwb25zZVsncHJvZHVjdFBhaXJzJ107XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgcCA9IDA7IHAgPCBtYXJrZXRzLmxlbmd0aDsgcCsrKSB7XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gbWFya2V0c1twXTtcbiAgICAgICAgICAgIGxldCBpZCA9IG1hcmtldFsnbmFtZSddO1xuICAgICAgICAgICAgbGV0IGJhc2UgPSBtYXJrZXRbJ3Byb2R1Y3QxTGFiZWwnXTtcbiAgICAgICAgICAgIGxldCBxdW90ZSA9IG1hcmtldFsncHJvZHVjdDJMYWJlbCddO1xuICAgICAgICAgICAgbGV0IHN5bWJvbCA9IGJhc2UgKyAnLycgKyBxdW90ZTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoICh7XG4gICAgICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgICAgICAgICAgJ3N5bWJvbCc6IHN5bWJvbCxcbiAgICAgICAgICAgICAgICAnYmFzZSc6IGJhc2UsXG4gICAgICAgICAgICAgICAgJ3F1b3RlJzogcXVvdGUsXG4gICAgICAgICAgICAgICAgJ2luZm8nOiBtYXJrZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0R2V0QWNjb3VudEluZm8gKCk7XG4gICAgICAgIGxldCBiYWxhbmNlcyA9IHJlc3BvbnNlWydjdXJyZW5jaWVzJ107XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogcmVzcG9uc2UgfTtcbiAgICAgICAgZm9yIChsZXQgYiA9IDA7IGIgPCBiYWxhbmNlcy5sZW5ndGg7IGIrKykge1xuICAgICAgICAgICAgbGV0IGJhbGFuY2UgPSBiYWxhbmNlc1tiXTtcbiAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IGJhbGFuY2VbJ25hbWUnXTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogYmFsYW5jZVsnYmFsYW5jZSddLFxuICAgICAgICAgICAgICAgICd1c2VkJzogYmFsYW5jZVsnaG9sZCddLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhY2NvdW50Wyd0b3RhbCddID0gdGhpcy5zdW0gKGFjY291bnRbJ2ZyZWUnXSwgYWNjb3VudFsndXNlZCddKTtcbiAgICAgICAgICAgIHJlc3VsdFtjdXJyZW5jeV0gPSBhY2NvdW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSBhd2FpdCB0aGlzLnB1YmxpY1Bvc3RHZXRPcmRlckJvb2sgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAncHJvZHVjdFBhaXInOiBwWydpZCddLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAob3JkZXJbJ3B4J10pO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBwYXJzZUZsb2F0IChvcmRlclsncXR5J10pO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtzaWRlXS5wdXNoIChbIHByaWNlLCBhbW91bnQgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgdGlja2VyID0gYXdhaXQgdGhpcy5wdWJsaWNQb3N0R2V0VGlja2VyICh7XG4gICAgICAgICAgICAncHJvZHVjdFBhaXInOiBwWydpZCddLFxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydoaWdoJ10pLFxuICAgICAgICAgICAgJ2xvdyc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbG93J10pLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYmlkJ10pLFxuICAgICAgICAgICAgJ2Fzayc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYXNrJ10pLFxuICAgICAgICAgICAgJ3Z3YXAnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnb3Blbic6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjbG9zZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdmaXJzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsYXN0JzogcGFyc2VGbG9hdCAodGlja2VyWydsYXN0J10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndm9sdW1lMjRociddKSxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndm9sdW1lMjRoclByb2R1Y3QyJ10pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY1Bvc3RHZXRUcmFkZXMgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnaW5zJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBvcmRlclR5cGUgPSAodHlwZSA9PSAnbWFya2V0JykgPyAxIDogMDtcbiAgICAgICAgbGV0IG9yZGVyID0ge1xuICAgICAgICAgICAgJ2lucyc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgICAgICAnc2lkZSc6IHNpZGUsXG4gICAgICAgICAgICAnb3JkZXJUeXBlJzogb3JkZXJUeXBlLFxuICAgICAgICAgICAgJ3F0eSc6IGFtb3VudCxcbiAgICAgICAgICAgICdweCc6IHByaWNlLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0Q3JlYXRlT3JkZXIgKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ2lkJzogcmVzcG9uc2VbJ3NlcnZlck9yZGVySWQnXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBpZiAoJ2lucycgaW4gcGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdENhbmNlbE9yZGVyICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgICAgICdzZXJ2ZXJPcmRlcklkJzogaWQsXG4gICAgICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgcmVxdWlyZXMgYGluc2Agc3ltYm9sIHBhcmFtZXRlciBmb3IgY2FuY2VsbGluZyBhbiBvcmRlcicpO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgJy8nICsgdGhpcy52ZXJzaW9uICsgJy8nICsgcGF0aDtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChwYXJhbXMpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGJvZHkgPSB0aGlzLmpzb24gKHBhcmFtcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMudWlkKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBBdXRoZW50aWNhdGlvbkVycm9yICh0aGlzLmlkICsgJyByZXF1aXJlcyBgJyArIHRoaXMuaWQgKyAnLnVpZGAgcHJvcGVydHkgZm9yIGF1dGhlbnRpY2F0aW9uJyk7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpO1xuICAgICAgICAgICAgbGV0IGF1dGggPSBub25jZS50b1N0cmluZyAoKSArIHRoaXMudWlkICsgdGhpcy5hcGlLZXk7XG4gICAgICAgICAgICBsZXQgc2lnbmF0dXJlID0gdGhpcy5obWFjICh0aGlzLmVuY29kZSAoYXV0aCksIHRoaXMuZW5jb2RlICh0aGlzLnNlY3JldCkpO1xuICAgICAgICAgICAgYm9keSA9IHRoaXMuanNvbiAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICAgICAnYXBpS2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ2FwaU5vbmNlJzogbm9uY2UsXG4gICAgICAgICAgICAgICAgJ2FwaVNpZyc6IHNpZ25hdHVyZS50b1VwcGVyQ2FzZSAoKSxcbiAgICAgICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICdDb250ZW50LUxlbmd0aCc6IGJvZHkubGVuZ3RoLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgICAgIGlmICgnaXNBY2NlcHRlZCcgaW4gcmVzcG9uc2UpXG4gICAgICAgICAgICBpZiAocmVzcG9uc2VbJ2lzQWNjZXB0ZWQnXSlcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGZveGJpdCA9IGV4dGVuZCAoYmxpbmt0cmFkZSwge1xuICAgICdpZCc6ICdmb3hiaXQnLFxuICAgICduYW1lJzogJ0ZveEJpdCcsXG4gICAgJ2NvdW50cmllcyc6ICdCUicsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc5OTE0MTMtMTFiNDBkNDItNjQ3Zi0xMWU3LTkxZWUtNzhjZWQ4NzRkZDA5LmpwZycsXG4gICAgICAgICdhcGknOiB7XG4gICAgICAgICAgICAncHVibGljJzogJ2h0dHBzOi8vYXBpLmJsaW5rdHJhZGUuY29tL2FwaScsXG4gICAgICAgICAgICAncHJpdmF0ZSc6ICdodHRwczovL2FwaS5ibGlua3RyYWRlLmNvbS90YXBpJyxcbiAgICAgICAgfSxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL2ZveGJpdC5leGNoYW5nZScsXG4gICAgICAgICdkb2MnOiAnaHR0cHM6Ly9ibGlua3RyYWRlLmNvbS9kb2NzJyxcbiAgICB9LFxuICAgICdjb21tZW50JzogJ0JsaW5rdHJhZGUgQVBJJyxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9CUkwnOiB7ICdpZCc6ICdCVENCUkwnLCAnc3ltYm9sJzogJ0JUQy9CUkwnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnQlJMJywgJ2Jyb2tlcklkJzogNCwgJ2Jyb2tlcic6ICdGb3hCaXQnIH0sXG4gICAgfSxcbn0pXG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGZ5YiA9IHtcblxuICAgICdyYXRlTGltaXQnOiAxNTAwLFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICd0aWNrZXInLFxuICAgICAgICAgICAgICAgICd0aWNrZXJkZXRhaWxlZCcsXG4gICAgICAgICAgICAgICAgJ29yZGVyYm9vaycsXG4gICAgICAgICAgICAgICAgJ3RyYWRlcycsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAncHJpdmF0ZSc6IHtcbiAgICAgICAgICAgICdwb3N0JzogW1xuICAgICAgICAgICAgICAgICd0ZXN0JyxcbiAgICAgICAgICAgICAgICAnZ2V0YWNjaW5mbycsXG4gICAgICAgICAgICAgICAgJ2dldHBlbmRpbmdvcmRlcnMnLFxuICAgICAgICAgICAgICAgICdnZXRvcmRlcmhpc3RvcnknLFxuICAgICAgICAgICAgICAgICdjYW5jZWxwZW5kaW5nb3JkZXInLFxuICAgICAgICAgICAgICAgICdwbGFjZW9yZGVyJyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXcnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgbGV0IGJhbGFuY2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0R2V0YWNjaW5mbyAoKTtcbiAgICAgICAgbGV0IGJ0YyA9IHBhcnNlRmxvYXQgKGJhbGFuY2VbJ2J0Y0JhbCddKTtcbiAgICAgICAgbGV0IHN5bWJvbCA9IHRoaXMuc3ltYm9sc1swXTtcbiAgICAgICAgbGV0IHF1b3RlID0gdGhpcy5tYXJrZXRzW3N5bWJvbF1bJ3F1b3RlJ107XG4gICAgICAgIGxldCBsb3dlcmNhc2UgPSBxdW90ZS50b0xvd2VyQ2FzZSAoKSArICdCYWwnO1xuICAgICAgICBsZXQgZmlhdCA9IHBhcnNlRmxvYXQgKGJhbGFuY2VbbG93ZXJjYXNlXSk7XG4gICAgICAgIGxldCBjcnlwdG8gPSB7XG4gICAgICAgICAgICAnZnJlZSc6IGJ0YyxcbiAgICAgICAgICAgICd1c2VkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3RvdGFsJzogYnRjLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgYWNjb3VudHMgPSB7ICdCVEMnOiBjcnlwdG8gfTtcbiAgICAgICAgYWNjb3VudHNbcXVvdGVdID0ge1xuICAgICAgICAgICAgJ2ZyZWUnOiBmaWF0LFxuICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAndG90YWwnOiBmaWF0LFxuICAgICAgICB9O1xuICAgICAgICBhY2NvdW50c1snaW5mbyddID0gYmFsYW5jZTtcbiAgICAgICAgcmV0dXJuIGFjY291bnRzO1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRPcmRlcmJvb2sgKHBhcmFtcyk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdiaWRzJzogW10sXG4gICAgICAgICAgICAnYXNrcyc6IFtdLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHNpZGVzID0gWyAnYmlkcycsICdhc2tzJyBdO1xuICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IHNpZGVzLmxlbmd0aDsgcysrKSB7XG4gICAgICAgICAgICBsZXQgc2lkZSA9IHNpZGVzW3NdO1xuICAgICAgICAgICAgbGV0IG9yZGVycyA9IG9yZGVyYm9va1tzaWRlXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9yZGVyID0gb3JkZXJzW2ldO1xuICAgICAgICAgICAgICAgIGxldCBwcmljZSA9IHBhcnNlRmxvYXQgKG9yZGVyWzBdKTtcbiAgICAgICAgICAgICAgICBsZXQgYW1vdW50ID0gcGFyc2VGbG9hdCAob3JkZXJbMV0pO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtzaWRlXS5wdXNoIChbIHByaWNlLCBhbW91bnQgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBsZXQgdGlja2VyID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRUaWNrZXJkZXRhaWxlZCAoKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgbGFzdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IHZvbHVtZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKCdsYXN0JyBpbiB0aWNrZXIpXG4gICAgICAgICAgICBsYXN0ID0gcGFyc2VGbG9hdCAodGlja2VyWydsYXN0J10pO1xuICAgICAgICBpZiAoJ3ZvbCcgaW4gdGlja2VyKVxuICAgICAgICAgICAgdm9sdW1lID0gcGFyc2VGbG9hdCAodGlja2VyWyd2b2wnXSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbG93JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYmlkJ10pLFxuICAgICAgICAgICAgJ2Fzayc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYXNrJ10pLFxuICAgICAgICAgICAgJ3Z3YXAnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnb3Blbic6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjbG9zZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdmaXJzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsYXN0JzogbGFzdCxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiB2b2x1bWUsXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0VHJhZGVzIChwYXJhbXMpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0UGxhY2VvcmRlciAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdxdHknOiBhbW91bnQsXG4gICAgICAgICAgICAncHJpY2UnOiBwcmljZSxcbiAgICAgICAgICAgICd0eXBlJzogc2lkZVswXS50b1VwcGVyQ2FzZSAoKVxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsncGVuZGluZ19vaWQnXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0Q2FuY2VscGVuZGluZ29yZGVyICh7ICdvcmRlck5vJzogaWQgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ10gKyAnLycgKyBwYXRoO1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICB1cmwgKz0gJy5qc29uJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCk7XG4gICAgICAgICAgICBib2R5ID0gdGhpcy51cmxlbmNvZGUgKHRoaXMuZXh0ZW5kICh7ICd0aW1lc3RhbXAnOiBub25jZSB9LCBwYXJhbXMpKTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgICAgICAgICdrZXknOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgICAgICAnc2lnJzogdGhpcy5obWFjICh0aGlzLmVuY29kZSAoYm9keSksIHRoaXMuZW5jb2RlICh0aGlzLnNlY3JldCksICdzaGExJylcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgICAgICBpZiAoYXBpID09ICdwcml2YXRlJylcbiAgICAgICAgICAgIGlmICgnZXJyb3InIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZVsnZXJyb3InXSlcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBmeWJzZSA9IGV4dGVuZCAoZnliLCB7XG4gICAgJ2lkJzogJ2Z5YnNlJyxcbiAgICAnbmFtZSc6ICdGWUItU0UnLFxuICAgICdjb3VudHJpZXMnOiAnU0UnLCAvLyBTd2VkZW5cbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yNzc2NjUxMi0zMTAxOTc3Mi01ZWRiLTExZTctODI0MS0yZTY3NWU2Nzk3ZjEuanBnJyxcbiAgICAgICAgJ2FwaSc6ICdodHRwczovL3d3dy5meWJzZS5zZS9hcGkvU0VLJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy5meWJzZS5zZScsXG4gICAgICAgICdkb2MnOiAnaHR0cDovL2RvY3MuZnliLmFwaWFyeS5pbycsXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9TRUsnOiB7ICdpZCc6ICdTRUsnLCAnc3ltYm9sJzogJ0JUQy9TRUsnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnU0VLJyB9LFxuICAgIH0sXG59KVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBmeWJzZyA9IGV4dGVuZCAoZnliLCB7XG4gICAgJ2lkJzogJ2Z5YnNnJyxcbiAgICAnbmFtZSc6ICdGWUItU0cnLFxuICAgICdjb3VudHJpZXMnOiAnU0cnLCAvLyBTaW5nYXBvcmVcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yNzc2NjUxMy0zMzY0ZDU2YS01ZWRiLTExZTctOWU2Yi1kNTg5OGJiODljODEuanBnJyxcbiAgICAgICAgJ2FwaSc6ICdodHRwczovL3d3dy5meWJzZy5jb20vYXBpL1NHRCcsXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly93d3cuZnlic2cuY29tJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwOi8vZG9jcy5meWIuYXBpYXJ5LmlvJyxcbiAgICB9LFxuICAgICdtYXJrZXRzJzoge1xuICAgICAgICAnQlRDL1NHRCc6IHsgJ2lkJzogJ1NHRCcsICdzeW1ib2wnOiAnQlRDL1NHRCcsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdTR0QnIH0sXG4gICAgfSxcbn0pXG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGdhdGVjb2luID0ge1xuXG4gICAgJ2lkJzogJ2dhdGVjb2luJyxcbiAgICAnbmFtZSc6ICdHYXRlY29pbicsXG4gICAgJ3JhdGVMaW1pdCc6IDIwMDAsXG4gICAgJ2NvdW50cmllcyc6ICdISycsIC8vIEhvbmcgS29uZ1xuICAgICdjb21tZW50JzogJ2EgcmVndWxhdGVkL2xpY2Vuc2VkIGV4Y2hhbmdlJyxcbiAgICAnaGFzRmV0Y2hUaWNrZXJzJzogdHJ1ZSxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yODY0NjgxNy01MDg0NTdmMi03MjZjLTExZTctOWVlYi0zNTI4ZDI0MTNhNTguanBnJyxcbiAgICAgICAgJ2FwaSc6ICdodHRwczovL2FwaS5nYXRlY29pbi5jb20nLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vZ2F0ZWNvaW4uY29tJyxcbiAgICAgICAgJ2RvYyc6IFtcbiAgICAgICAgICAgICdodHRwczovL2dhdGVjb2luLmNvbS9hcGknLFxuICAgICAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS9HYXRlY29pbi9SRVNUZnVsLUFQSS1JbXBsZW1lbnRhdGlvbicsXG4gICAgICAgICAgICAnaHR0cHM6Ly9hcGkuZ2F0ZWNvaW4uY29tL3N3YWdnZXItdWkvaW5kZXguaHRtbCcsXG4gICAgICAgIF0sXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnUHVibGljL0V4Y2hhbmdlUmF0ZScsIC8vIEdldCB0aGUgZXhjaGFuZ2UgcmF0ZXNcbiAgICAgICAgICAgICAgICAnUHVibGljL0xpdmVUaWNrZXInLCAvLyBHZXQgbGl2ZSB0aWNrZXIgZm9yIGFsbCBjdXJyZW5jeVxuICAgICAgICAgICAgICAgICdQdWJsaWMvTGl2ZVRpY2tlci97Q3VycmVuY3lQYWlyfScsIC8vIEdldCBsaXZlIHRpY2tlciBieSBjdXJyZW5jeVxuICAgICAgICAgICAgICAgICdQdWJsaWMvTGl2ZVRpY2tlcnMnLCAvLyBHZXQgbGl2ZSB0aWNrZXIgZm9yIGFsbCBjdXJyZW5jeVxuICAgICAgICAgICAgICAgICdQdWJsaWMvTWFya2V0RGVwdGgve0N1cnJlbmN5UGFpcn0nLCAvLyBHZXRzIHByaWNlcyBhbmQgbWFya2V0IGRlcHRoIGZvciB0aGUgY3VycmVuY3kgcGFpci5cbiAgICAgICAgICAgICAgICAnUHVibGljL05ldHdvcmtTdGF0aXN0aWNzL3tEaWdpQ3VycmVuY3l9JywgLy8gR2V0IHRoZSBuZXR3b3JrIHN0YXR1cyBvZiBhIHNwZWNpZmljIGRpZ2l0YWwgY3VycmVuY3lcbiAgICAgICAgICAgICAgICAnUHVibGljL1N0YXRpc3RpY0hpc3Rvcnkve0RpZ2lDdXJyZW5jeX0ve1R5cGVvZmRhdGF9JywgLy8gR2V0IHRoZSBoaXN0b3JpY2FsIGRhdGEgb2YgYSBzcGVjaWZpYyBkaWdpdGFsIGN1cnJlbmN5XG4gICAgICAgICAgICAgICAgJ1B1YmxpYy9UaWNrZXJIaXN0b3J5L3tDdXJyZW5jeVBhaXJ9L3tUaW1lZnJhbWV9JywgLy8gR2V0IHRpY2tlciBoaXN0b3J5XG4gICAgICAgICAgICAgICAgJ1B1YmxpYy9UcmFuc2FjdGlvbnMve0N1cnJlbmN5UGFpcn0nLCAvLyBHZXRzIHJlY2VudCB0cmFuc2FjdGlvbnNcbiAgICAgICAgICAgICAgICAnUHVibGljL1RyYW5zYWN0aW9uc0hpc3Rvcnkve0N1cnJlbmN5UGFpcn0nLCAvLyBHZXRzIGFsbCB0cmFuc2FjdGlvbnNcbiAgICAgICAgICAgICAgICAnUmVmZXJlbmNlL0J1c2luZXNzTmF0dXJlTGlzdCcsIC8vIEdldCB0aGUgYnVzaW5lc3MgbmF0dXJlIGxpc3QuXG4gICAgICAgICAgICAgICAgJ1JlZmVyZW5jZS9Db3VudHJpZXMnLCAvLyBHZXQgdGhlIGNvdW50cnkgbGlzdC5cbiAgICAgICAgICAgICAgICAnUmVmZXJlbmNlL0N1cnJlbmNpZXMnLCAvLyBHZXQgdGhlIGN1cnJlbmN5IGxpc3QuXG4gICAgICAgICAgICAgICAgJ1JlZmVyZW5jZS9DdXJyZW5jeVBhaXJzJywgLy8gR2V0IHRoZSBjdXJyZW5jeSBwYWlyIGxpc3QuXG4gICAgICAgICAgICAgICAgJ1JlZmVyZW5jZS9DdXJyZW50U3RhdHVzTGlzdCcsIC8vIEdldCB0aGUgY3VycmVudCBzdGF0dXMgbGlzdC5cbiAgICAgICAgICAgICAgICAnUmVmZXJlbmNlL0lkZW50eWRvY3VtZW50VHlwZXMnLCAvLyBHZXQgdGhlIGRpZmZlcmVudCB0eXBlcyBvZiBpZGVudGl0eSBkb2N1bWVudHMgcG9zc2libGUuXG4gICAgICAgICAgICAgICAgJ1JlZmVyZW5jZS9JbmNvbWVSYW5nZUxpc3QnLCAvLyBHZXQgdGhlIGluY29tZSByYW5nZSBsaXN0LlxuICAgICAgICAgICAgICAgICdSZWZlcmVuY2UvSW5jb21lU291cmNlTGlzdCcsIC8vIEdldCB0aGUgaW5jb21lIHNvdXJjZSBsaXN0LlxuICAgICAgICAgICAgICAgICdSZWZlcmVuY2UvVmVyaWZpY2F0aW9uTGV2ZWxMaXN0JywgLy8gR2V0IHRoZSB2ZXJpZiBsZXZlbCBsaXN0LlxuICAgICAgICAgICAgICAgICdTdHJlYW0vUHVibGljQ2hhbm5lbCcsIC8vIEdldCB0aGUgcHVibGljIHB1Ym51YiBjaGFubmVsIGxpc3RcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnRXhwb3J0L1RyYW5zYWN0aW9ucycsIC8vIFJlcXVlc3QgYSBleHBvcnQgb2YgYWxsIHRyYWRlcyBmcm9tIGJhc2VkIG9uIGN1cnJlbmN5cGFpciwgc3RhcnQgZGF0ZSBhbmQgZW5kIGRhdGVcbiAgICAgICAgICAgICAgICAnUGluZycsIC8vIFBvc3QgYSBzdHJpbmcsIHRoZW4gZ2V0IGl0IGJhY2suXG4gICAgICAgICAgICAgICAgJ1B1YmxpYy9VbnN1YnNjcmliZS97RW1haWxDb2RlfScsIC8vIExldHMgdGhlIHVzZXIgdW5zdWJzY3JpYmUgZnJvbSBlbWFpbHNcbiAgICAgICAgICAgICAgICAnUmVnaXN0ZXJVc2VyJywgLy8gSW5pdGlhbCB0cmFkZXIgcmVnaXN0cmF0aW9uLlxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdBY2NvdW50L0NvcnBvcmF0ZURhdGEnLCAvLyBHZXQgY29ycG9yYXRlIGFjY291bnQgZGF0YVxuICAgICAgICAgICAgICAgICdBY2NvdW50L0RvY3VtZW50QWRkcmVzcycsIC8vIENoZWNrIGlmIHJlc2lkZW5jZSBwcm9vZiB1cGxvYWRlZFxuICAgICAgICAgICAgICAgICdBY2NvdW50L0RvY3VtZW50Q29ycG9yYXRpb24nLCAvLyBDaGVjayBpZiByZWdpc3RlcmVkIGRvY3VtZW50IHVwbG9hZGVkXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvRG9jdW1lbnRJRCcsIC8vIENoZWNrIGlmIElEIGRvY3VtZW50IGNvcHkgdXBsb2FkZWRcbiAgICAgICAgICAgICAgICAnQWNjb3VudC9Eb2N1bWVudEluZm9ybWF0aW9uJywgLy8gR2V0IFN0ZXAzIERhdGFcbiAgICAgICAgICAgICAgICAnQWNjb3VudC9FbWFpbCcsIC8vIEdldCB1c2VyIGVtYWlsXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvRmVlUmF0ZScsIC8vIEdldCBmZWUgcmF0ZSBvZiBsb2dnZWQgaW4gdXNlclxuICAgICAgICAgICAgICAgICdBY2NvdW50L0xldmVsJywgLy8gR2V0IHZlcmlmIGxldmVsIG9mIGxvZ2dlZCBpbiB1c2VyXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvUGVyc29uYWxJbmZvcm1hdGlvbicsIC8vIEdldCBTdGVwMSBEYXRhXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvUGhvbmUnLCAvLyBHZXQgdXNlciBwaG9uZSBudW1iZXJcbiAgICAgICAgICAgICAgICAnQWNjb3VudC9Qcm9maWxlJywgLy8gR2V0IHRyYWRlciBwcm9maWxlXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvUXVlc3Rpb25uYWlyZScsIC8vIEZpbGwgdGhlIHF1ZXN0aW9ubmFpcmVcbiAgICAgICAgICAgICAgICAnQWNjb3VudC9SZWZlcnJhbCcsIC8vIEdldCByZWZlcnJhbCBpbmZvcm1hdGlvblxuICAgICAgICAgICAgICAgICdBY2NvdW50L1JlZmVycmFsQ29kZScsIC8vIEdldCB0aGUgcmVmZXJyYWwgY29kZSBvZiB0aGUgbG9nZ2VkIGluIHVzZXJcbiAgICAgICAgICAgICAgICAnQWNjb3VudC9SZWZlcnJhbE5hbWVzJywgLy8gR2V0IG5hbWVzIG9mIHJlZmVycmVkIHRyYWRlcnNcbiAgICAgICAgICAgICAgICAnQWNjb3VudC9SZWZlcnJhbFJld2FyZCcsIC8vIEdldCByZWZlcnJhbCByZXdhcmQgaW5mb3JtYXRpb25cbiAgICAgICAgICAgICAgICAnQWNjb3VudC9SZWZlcnJlZENvZGUnLCAvLyBHZXQgcmVmZXJyYWwgY29kZVxuICAgICAgICAgICAgICAgICdBY2NvdW50L1Jlc2lkZW50SW5mb3JtYXRpb24nLCAvLyBHZXQgU3RlcDIgRGF0YVxuICAgICAgICAgICAgICAgICdBY2NvdW50L1NlY3VyaXR5U2V0dGluZ3MnLCAvLyBHZXQgdmVyaWYgZGV0YWlscyBvZiBsb2dnZWQgaW4gdXNlclxuICAgICAgICAgICAgICAgICdBY2NvdW50L1VzZXInLCAvLyBHZXQgYWxsIHVzZXIgaW5mb1xuICAgICAgICAgICAgICAgICdBUElLZXkvQVBJS2V5JywgLy8gR2V0IEFQSSBLZXkgZm9yIGxvZ2dlZCBpbiB1c2VyXG4gICAgICAgICAgICAgICAgJ0F1dGgvQ29ubmVjdGlvbkhpc3RvcnknLCAvLyBHZXRzIGNvbm5lY3Rpb24gaGlzdG9yeSBvZiBsb2dnZWQgaW4gdXNlclxuICAgICAgICAgICAgICAgICdCYWxhbmNlL0JhbGFuY2VzJywgLy8gR2V0cyB0aGUgYXZhaWxhYmxlIGJhbGFuY2UgZm9yIGVhY2ggY3VycmVuY3kgZm9yIHRoZSBsb2dnZWQgaW4gYWNjb3VudC5cbiAgICAgICAgICAgICAgICAnQmFsYW5jZS9CYWxhbmNlcy97Q3VycmVuY3l9JywgLy8gR2V0cyB0aGUgYXZhaWxhYmxlIGJhbGFuY2UgZm9yIHMgY3VycmVuY3kgZm9yIHRoZSBsb2dnZWQgaW4gYWNjb3VudC5cbiAgICAgICAgICAgICAgICAnQmFsYW5jZS9EZXBvc2l0cycsIC8vIEdldCBhbGwgYWNjb3VudCBkZXBvc2l0cywgaW5jbHVkaW5nIHdpcmUgYW5kIGRpZ2l0YWwgY3VycmVuY3ksIG9mIHRoZSBsb2dnZWQgaW4gdXNlclxuICAgICAgICAgICAgICAgICdCYWxhbmNlL1dpdGhkcmF3YWxzJywgLy8gR2V0IGFsbCBhY2NvdW50IHdpdGhkcmF3YWxzLCBpbmNsdWRpbmcgd2lyZSBhbmQgZGlnaXRhbCBjdXJyZW5jeSwgb2YgdGhlIGxvZ2dlZCBpbiB1c2VyXG4gICAgICAgICAgICAgICAgJ0JhbmsvQWNjb3VudHMve0N1cnJlbmN5fS97TG9jYXRpb259JywgLy8gR2V0IGludGVybmFsIGJhbmsgYWNjb3VudCBmb3IgZGVwb3NpdFxuICAgICAgICAgICAgICAgICdCYW5rL1RyYW5zYWN0aW9ucycsIC8vIEdldCBhbGwgYWNjb3VudCB0cmFuc2FjdGlvbnMgb2YgdGhlIGxvZ2dlZCBpbiB1c2VyXG4gICAgICAgICAgICAgICAgJ0JhbmsvVXNlckFjY291bnRzJywgLy8gR2V0cyBhbGwgdGhlIGJhbmsgYWNjb3VudHMgcmVsYXRlZCB0byB0aGUgbG9nZ2VkIGluIHVzZXIuXG4gICAgICAgICAgICAgICAgJ0JhbmsvVXNlckFjY291bnRzL3tDdXJyZW5jeX0nLCAvLyBHZXRzIGFsbCB0aGUgYmFuayBhY2NvdW50cyByZWxhdGVkIHRvIHRoZSBsb2dnZWQgaW4gdXNlci5cbiAgICAgICAgICAgICAgICAnRWxlY3Ryb25pY1dhbGxldC9EZXBvc2l0V2FsbGV0cycsIC8vIEdldHMgYWxsIGNyeXB0byBjdXJyZW5jeSBhZGRyZXNzZXMgcmVsYXRlZCBkZXBvc2l0cyB0byB0aGUgbG9nZ2VkIGluIHVzZXIuXG4gICAgICAgICAgICAgICAgJ0VsZWN0cm9uaWNXYWxsZXQvRGVwb3NpdFdhbGxldHMve0RpZ2lDdXJyZW5jeX0nLCAvLyBHZXRzIGFsbCBjcnlwdG8gY3VycmVuY3kgYWRkcmVzc2VzIHJlbGF0ZWQgZGVwb3NpdHMgdG8gdGhlIGxvZ2dlZCBpbiB1c2VyIGJ5IGN1cnJlbmN5LlxuICAgICAgICAgICAgICAgICdFbGVjdHJvbmljV2FsbGV0L1RyYW5zYWN0aW9ucycsIC8vIEdldCBhbGwgZGlnaXRhbCBjdXJyZW5jeSB0cmFuc2FjdGlvbnMgb2YgdGhlIGxvZ2dlZCBpbiB1c2VyXG4gICAgICAgICAgICAgICAgJ0VsZWN0cm9uaWNXYWxsZXQvVHJhbnNhY3Rpb25zL3tEaWdpQ3VycmVuY3l9JywgLy8gR2V0IGFsbCBkaWdpdGFsIGN1cnJlbmN5IHRyYW5zYWN0aW9ucyBvZiB0aGUgbG9nZ2VkIGluIHVzZXJcbiAgICAgICAgICAgICAgICAnRWxlY3Ryb25pY1dhbGxldC9Vc2VyV2FsbGV0cycsIC8vIEdldHMgYWxsIGV4dGVybmFsIGRpZ2l0YWwgY3VycmVuY3kgYWRkcmVzc2VzIHJlbGF0ZWQgdG8gdGhlIGxvZ2dlZCBpbiB1c2VyLlxuICAgICAgICAgICAgICAgICdFbGVjdHJvbmljV2FsbGV0L1VzZXJXYWxsZXRzL3tEaWdpQ3VycmVuY3l9JywgLy8gR2V0cyBhbGwgZXh0ZXJuYWwgZGlnaXRhbCBjdXJyZW5jeSBhZGRyZXNzZXMgcmVsYXRlZCB0byB0aGUgbG9nZ2VkIGluIHVzZXIgYnkgY3VycmVuY3kuXG4gICAgICAgICAgICAgICAgJ0luZm8vUmVmZXJlbmNlQ3VycmVuY3knLCAvLyBHZXQgdXNlcidzIHJlZmVyZW5jZSBjdXJyZW5jeVxuICAgICAgICAgICAgICAgICdJbmZvL1JlZmVyZW5jZUxhbmd1YWdlJywgLy8gR2V0IHVzZXIncyByZWZlcmVuY2UgbGFuZ3VhZ2VcbiAgICAgICAgICAgICAgICAnTm90aWZpY2F0aW9uL01lc3NhZ2VzJywgLy8gR2V0IGZyb20gb2xkZXN0IHVucmVhZCArIDMgcmVhZCBtZXNzYWdlIHRvIG5ld2VzdCBtZXNzYWdlc1xuICAgICAgICAgICAgICAgICdUcmFkZS9PcmRlcnMnLCAvLyBHZXRzIG9wZW4gb3JkZXJzIGZvciB0aGUgbG9nZ2VkIGluIHRyYWRlci5cbiAgICAgICAgICAgICAgICAnVHJhZGUvT3JkZXJzL3tPcmRlcklEfScsIC8vIEdldHMgYW4gb3JkZXIgZm9yIHRoZSBsb2dnZWQgaW4gdHJhZGVyLlxuICAgICAgICAgICAgICAgICdUcmFkZS9TdG9wT3JkZXJzJywgLy8gR2V0cyBhbGwgc3RvcCBvcmRlcnMgZm9yIHRoZSBsb2dnZWQgaW4gdHJhZGVyLiBNYXggMTAwMCByZWNvcmQuXG4gICAgICAgICAgICAgICAgJ1RyYWRlL1N0b3BPcmRlcnNIaXN0b3J5JywgLy8gR2V0cyBhbGwgc3RvcCBvcmRlcnMgZm9yIHRoZSBsb2dnZWQgaW4gdHJhZGVyLiBNYXggMTAwMCByZWNvcmQuXG4gICAgICAgICAgICAgICAgJ1RyYWRlL1RyYWRlcycsIC8vIEdldHMgYWxsIHRyYW5zYWN0aW9ucyBvZiBsb2dnZWQgaW4gdXNlclxuICAgICAgICAgICAgICAgICdUcmFkZS9Vc2VyVHJhZGVzJywgLy8gR2V0cyBhbGwgdHJhbnNhY3Rpb25zIG9mIGxvZ2dlZCBpbiB1c2VyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvRG9jdW1lbnRBZGRyZXNzJywgLy8gVXBsb2FkIGFkZHJlc3MgcHJvb2YgZG9jdW1lbnRcbiAgICAgICAgICAgICAgICAnQWNjb3VudC9Eb2N1bWVudENvcnBvcmF0aW9uJywgLy8gVXBsb2FkIHJlZ2lzdGVyZWQgZG9jdW1lbnQgZG9jdW1lbnRcbiAgICAgICAgICAgICAgICAnQWNjb3VudC9Eb2N1bWVudElEJywgLy8gVXBsb2FkIElEIGRvY3VtZW50IGNvcHlcbiAgICAgICAgICAgICAgICAnQWNjb3VudC9FbWFpbC9SZXF1ZXN0VmVyaWZ5JywgLy8gUmVxdWVzdCBmb3IgdmVyaWZpY2F0aW9uIGVtYWlsXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvRW1haWwvVmVyaWZ5JywgLy8gVmVyaWZpY2F0aW9uIGVtYWlsXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvR29vZ2xlQXV0aCcsIC8vIEVuYWJsZSBnb29nbGUgYXV0aFxuICAgICAgICAgICAgICAgICdBY2NvdW50L0xldmVsJywgLy8gUmVxdWVzdCB2ZXJpZiBsZXZlbCBvZiBsb2dnZWQgaW4gdXNlclxuICAgICAgICAgICAgICAgICdBY2NvdW50L1F1ZXN0aW9ubmFpcmUnLCAvLyBGaWxsIHRoZSBxdWVzdGlvbm5haXJlXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvUmVmZXJyYWwnLCAvLyBQb3N0IGEgcmVmZXJyYWwgZW1haWxcbiAgICAgICAgICAgICAgICAnQVBJS2V5L0FQSUtleScsIC8vIENyZWF0ZSBhIG5ldyBBUEkga2V5IGZvciBsb2dnZWQgaW4gdXNlclxuICAgICAgICAgICAgICAgICdBdXRoL0NoYW5nZVBhc3N3b3JkJywgLy8gQ2hhbmdlIHBhc3N3b3JkLlxuICAgICAgICAgICAgICAgICdBdXRoL0ZvcmdvdFBhc3N3b3JkJywgLy8gUmVxdWVzdCByZXNldCBwYXNzd29yZFxuICAgICAgICAgICAgICAgICdBdXRoL0ZvcmdvdFVzZXJJRCcsIC8vIFJlcXVlc3QgdXNlciBpZFxuICAgICAgICAgICAgICAgICdBdXRoL0xvZ2luJywgLy8gVHJhZGVyIHNlc3Npb24gbG9nIGluLlxuICAgICAgICAgICAgICAgICdBdXRoL0xvZ291dCcsIC8vIExvZ291dCBmcm9tIHRoZSBjdXJyZW50IHNlc3Npb24uXG4gICAgICAgICAgICAgICAgJ0F1dGgvTG9nb3V0T3RoZXJTZXNzaW9ucycsIC8vIExvZ291dCBvdGhlciBzZXNzaW9ucy5cbiAgICAgICAgICAgICAgICAnQXV0aC9SZXNldFBhc3N3b3JkJywgLy8gUmVzZXQgcGFzc3dvcmRcbiAgICAgICAgICAgICAgICAnQmFuay9UcmFuc2FjdGlvbnMnLCAvLyBSZXF1ZXN0IGEgdHJhbnNmZXIgZnJvbSB0aGUgdHJhZGVycyBhY2NvdW50IG9mIHRoZSBsb2dnZWQgaW4gdXNlci4gVGhpcyBpcyBvbmx5IGF2YWlsYWJsZSBmb3IgYmFuayBhY2NvdW50XG4gICAgICAgICAgICAgICAgJ0JhbmsvVXNlckFjY291bnRzJywgLy8gQWRkIGFuIGFjY291bnQgdGhlIGxvZ2dlZCBpbiB1c2VyXG4gICAgICAgICAgICAgICAgJ0VsZWN0cm9uaWNXYWxsZXQvRGVwb3NpdFdhbGxldHMve0RpZ2lDdXJyZW5jeX0nLCAvLyBBZGQgYW4gZGlnaXRhbCBjdXJyZW5jeSBhZGRyZXNzZXMgdG8gdGhlIGxvZ2dlZCBpbiB1c2VyLlxuICAgICAgICAgICAgICAgICdFbGVjdHJvbmljV2FsbGV0L1RyYW5zYWN0aW9ucy9EZXBvc2l0cy97RGlnaUN1cnJlbmN5fScsIC8vIEdldCBhbGwgaW50ZXJuYWwgZGlnaXRhbCBjdXJyZW5jeSB0cmFuc2FjdGlvbnMgb2YgdGhlIGxvZ2dlZCBpbiB1c2VyXG4gICAgICAgICAgICAgICAgJ0VsZWN0cm9uaWNXYWxsZXQvVHJhbnNhY3Rpb25zL1dpdGhkcmF3YWxzL3tEaWdpQ3VycmVuY3l9JywgLy8gR2V0IGFsbCBleHRlcm5hbCBkaWdpdGFsIGN1cnJlbmN5IHRyYW5zYWN0aW9ucyBvZiB0aGUgbG9nZ2VkIGluIHVzZXJcbiAgICAgICAgICAgICAgICAnRWxlY3Ryb25pY1dhbGxldC9Vc2VyV2FsbGV0cy97RGlnaUN1cnJlbmN5fScsIC8vIEFkZCBhbiBleHRlcm5hbCBkaWdpdGFsIGN1cnJlbmN5IGFkZHJlc3NlcyB0byB0aGUgbG9nZ2VkIGluIHVzZXIuXG4gICAgICAgICAgICAgICAgJ0VsZWN0cm9uaWNXYWxsZXQvV2l0aGRyYXdhbHMve0RpZ2lDdXJyZW5jeX0nLCAvLyBSZXF1ZXN0IGEgdHJhbnNmZXIgZnJvbSB0aGUgdHJhZGVycyBhY2NvdW50IHRvIGFuIGV4dGVybmFsIGFkZHJlc3MuIFRoaXMgaXMgb25seSBhdmFpbGFibGUgZm9yIGNyeXB0byBjdXJyZW5jaWVzLlxuICAgICAgICAgICAgICAgICdOb3RpZmljYXRpb24vTWVzc2FnZXMnLCAvLyBNYXJrIGFsbCBhcyByZWFkXG4gICAgICAgICAgICAgICAgJ05vdGlmaWNhdGlvbi9NZXNzYWdlcy97SUR9JywgLy8gTWFyayBhcyByZWFkXG4gICAgICAgICAgICAgICAgJ1RyYWRlL09yZGVycycsIC8vIFBsYWNlIGFuIG9yZGVyIGF0IHRoZSBleGNoYW5nZS5cbiAgICAgICAgICAgICAgICAnVHJhZGUvU3RvcE9yZGVycycsIC8vIFBsYWNlIGEgc3RvcCBvcmRlciBhdCB0aGUgZXhjaGFuZ2UuXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ3B1dCc6IFtcbiAgICAgICAgICAgICAgICAnQWNjb3VudC9Db3Jwb3JhdGVEYXRhJywgLy8gVXBkYXRlIHVzZXIgY29tcGFueSBkYXRhIGZvciBjb3Jwb3JhdGUgYWNjb3VudFxuICAgICAgICAgICAgICAgICdBY2NvdW50L0RvY3VtZW50SUQnLCAvLyBVcGRhdGUgSUQgZG9jdW1lbnQgbWV0YSBkYXRhXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvRG9jdW1lbnRJbmZvcm1hdGlvbicsIC8vIFVwZGF0ZSBTdGVwMyBEYXRhXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvRW1haWwnLCAvLyBVcGRhdGUgdXNlciBlbWFpbFxuICAgICAgICAgICAgICAgICdBY2NvdW50L1BlcnNvbmFsSW5mb3JtYXRpb24nLCAvLyBVcGRhdGUgU3RlcDEgRGF0YVxuICAgICAgICAgICAgICAgICdBY2NvdW50L1Bob25lJywgLy8gVXBkYXRlIHVzZXIgcGhvbmUgbnVtYmVyXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvUXVlc3Rpb25uYWlyZScsIC8vIHVwZGF0ZSB0aGUgcXVlc3Rpb25uYWlyZVxuICAgICAgICAgICAgICAgICdBY2NvdW50L1JlZmVycmVkQ29kZScsIC8vIFVwZGF0ZSByZWZlcnJhbCBjb2RlXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvUmVzaWRlbnRJbmZvcm1hdGlvbicsIC8vIFVwZGF0ZSBTdGVwMiBEYXRhXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvU2VjdXJpdHlTZXR0aW5ncycsIC8vIFVwZGF0ZSB2ZXJpZiBkZXRhaWxzIG9mIGxvZ2dlZCBpbiB1c2VyXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvVXNlcicsIC8vIFVwZGF0ZSBhbGwgdXNlciBpbmZvXG4gICAgICAgICAgICAgICAgJ0JhbmsvVXNlckFjY291bnRzJywgLy8gVXBkYXRlIHRoZSBsYWJlbCBvZiBleGlzdGluZyB1c2VyIGJhbmsgYWNjb3VubnRcbiAgICAgICAgICAgICAgICAnRWxlY3Ryb25pY1dhbGxldC9EZXBvc2l0V2FsbGV0cy97RGlnaUN1cnJlbmN5fS97QWRkcmVzc05hbWV9JywgLy8gVXBkYXRlIHRoZSBuYW1lIG9mIGFuIGFkZHJlc3NcbiAgICAgICAgICAgICAgICAnRWxlY3Ryb25pY1dhbGxldC9Vc2VyV2FsbGV0cy97RGlnaUN1cnJlbmN5fScsIC8vIFVwZGF0ZSB0aGUgbmFtZSBvZiBhbiBleHRlcm5hbCBhZGRyZXNzXG4gICAgICAgICAgICAgICAgJ0luZm8vUmVmZXJlbmNlQ3VycmVuY3knLCAvLyBVc2VyJ3MgcmVmZXJlbmNlIGN1cnJlbmN5XG4gICAgICAgICAgICAgICAgJ0luZm8vUmVmZXJlbmNlTGFuZ3VhZ2UnLCAvLyBVcGRhdGUgdXNlcidzIHJlZmVyZW5jZSBsYW5ndWFnZVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICdkZWxldGUnOiBbXG4gICAgICAgICAgICAgICAgJ0FQSUtleS9BUElLZXkve1B1YmxpY0tleX0nLCAvLyBSZW1vdmUgYW4gQVBJIGtleVxuICAgICAgICAgICAgICAgICdCYW5rL1RyYW5zYWN0aW9ucy97UmVxdWVzdElEfScsIC8vIERlbGV0ZSBwZW5kaW5nIGFjY291bnQgd2l0aGRyYXcgb2YgdGhlIGxvZ2dlZCBpbiB1c2VyXG4gICAgICAgICAgICAgICAgJ0JhbmsvVXNlckFjY291bnRzL3tDdXJyZW5jeX0ve0xhYmVsfScsIC8vIERlbGV0ZSBhbiBhY2NvdW50IG9mIHRoZSBsb2dnZWQgaW4gdXNlclxuICAgICAgICAgICAgICAgICdFbGVjdHJvbmljV2FsbGV0L0RlcG9zaXRXYWxsZXRzL3tEaWdpQ3VycmVuY3l9L3tBZGRyZXNzTmFtZX0nLCAvLyBEZWxldGUgYW4gZGlnaXRhbCBjdXJyZW5jeSBhZGRyZXNzZXMgcmVsYXRlZCB0byB0aGUgbG9nZ2VkIGluIHVzZXIuXG4gICAgICAgICAgICAgICAgJ0VsZWN0cm9uaWNXYWxsZXQvVXNlcldhbGxldHMve0RpZ2lDdXJyZW5jeX0ve0FkZHJlc3NOYW1lfScsIC8vIERlbGV0ZSBhbiBleHRlcm5hbCBkaWdpdGFsIGN1cnJlbmN5IGFkZHJlc3NlcyByZWxhdGVkIHRvIHRoZSBsb2dnZWQgaW4gdXNlci5cbiAgICAgICAgICAgICAgICAnVHJhZGUvT3JkZXJzJywgLy8gQ2FuY2VscyBhbGwgZXhpc3Rpbmcgb3JkZXJcbiAgICAgICAgICAgICAgICAnVHJhZGUvT3JkZXJzL3tPcmRlcklEfScsIC8vIENhbmNlbHMgYW4gZXhpc3Rpbmcgb3JkZXJcbiAgICAgICAgICAgICAgICAnVHJhZGUvU3RvcE9yZGVycycsIC8vIENhbmNlbHMgYWxsIGV4aXN0aW5nIHN0b3Agb3JkZXJzXG4gICAgICAgICAgICAgICAgJ1RyYWRlL1N0b3BPcmRlcnMve0lEfScsIC8vIENhbmNlbHMgYW4gZXhpc3Rpbmcgc3RvcCBvcmRlclxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hNYXJrZXRzICgpIHtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRQdWJsaWNMaXZlVGlja2VycyAoKTtcbiAgICAgICAgbGV0IG1hcmtldHMgPSByZXNwb25zZVsndGlja2VycyddO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgbWFya2V0cy5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IG1hcmtldHNbcF07XG4gICAgICAgICAgICBsZXQgaWQgPSBtYXJrZXRbJ2N1cnJlbmN5UGFpciddO1xuICAgICAgICAgICAgbGV0IGJhc2UgPSBpZC5zbGljZSAoMCwgMyk7XG4gICAgICAgICAgICBsZXQgcXVvdGUgPSBpZC5zbGljZSAoMywgNik7XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gYmFzZSArICcvJyArIHF1b3RlO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2ggKHtcbiAgICAgICAgICAgICAgICAnaWQnOiBpZCxcbiAgICAgICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgICAgICdiYXNlJzogYmFzZSxcbiAgICAgICAgICAgICAgICAncXVvdGUnOiBxdW90ZSxcbiAgICAgICAgICAgICAgICAnaW5mbyc6IG1hcmtldCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZUdldEJhbGFuY2VCYWxhbmNlcyAoKTtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gcmVzcG9uc2VbJ2JhbGFuY2VzJ107XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogYmFsYW5jZXMgfTtcbiAgICAgICAgZm9yIChsZXQgYiA9IDA7IGIgPCBiYWxhbmNlcy5sZW5ndGg7IGIrKykge1xuICAgICAgICAgICAgbGV0IGJhbGFuY2UgPSBiYWxhbmNlc1tiXTtcbiAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IGJhbGFuY2VbJ2N1cnJlbmN5J107XG4gICAgICAgICAgICBsZXQgYWNjb3VudCA9IHtcbiAgICAgICAgICAgICAgICAnZnJlZSc6IGJhbGFuY2VbJ2F2YWlsYWJsZUJhbGFuY2UnXSxcbiAgICAgICAgICAgICAgICAndXNlZCc6IHRoaXMuc3VtIChcbiAgICAgICAgICAgICAgICAgICAgYmFsYW5jZVsncGVuZGluZ0luY29taW5nJ10sXG4gICAgICAgICAgICAgICAgICAgIGJhbGFuY2VbJ3BlbmRpbmdPdXRnb2luZyddLFxuICAgICAgICAgICAgICAgICAgICBiYWxhbmNlWydvcGVuT3JkZXInXSksXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogYmFsYW5jZVsnYmFsYW5jZSddLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlc3VsdFtjdXJyZW5jeV0gPSBhY2NvdW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFB1YmxpY01hcmtldERlcHRoQ3VycmVuY3lQYWlyICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ0N1cnJlbmN5UGFpcic6IHBbJ2lkJ10sXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IFtdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaWRlcyA9IFsgJ2JpZHMnLCAnYXNrcycgXTtcbiAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBzaWRlcy5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1tzXTtcbiAgICAgICAgICAgIGxldCBvcmRlcnMgPSBvcmRlcmJvb2tbc2lkZV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBvcmRlciA9IG9yZGVyc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgcHJpY2UgPSBwYXJzZUZsb2F0IChvcmRlclsncHJpY2UnXSk7XG4gICAgICAgICAgICAgICAgbGV0IGFtb3VudCA9IHBhcnNlRmxvYXQgKG9yZGVyWyd2b2x1bWUnXSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3NpZGVdLnB1c2ggKFsgcHJpY2UsIGFtb3VudCBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBwYXJzZVRpY2tlciAodGlja2VyLCBtYXJrZXQpIHtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHBhcnNlSW50ICh0aWNrZXJbJ2NyZWF0ZURhdGVUaW1lJ10pICogMTAwMDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2JpZCddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2FzayddKSxcbiAgICAgICAgICAgICd2d2FwJzogcGFyc2VGbG9hdCAodGlja2VyWyd2d2FwJ10pLFxuICAgICAgICAgICAgJ29wZW4nOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ29wZW4nXSksXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdCddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbHVtZSddKSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlcnMgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFB1YmxpY0xpdmVUaWNrZXJzICgpO1xuICAgICAgICBsZXQgdGlja2VycyA9IHJlc3BvbnNlWyd0aWNrZXJzJ107XG4gICAgICAgIGxldCByZXN1bHQgPSB7fTtcbiAgICAgICAgZm9yIChsZXQgdCA9IDA7IHQgPCB0aWNrZXJzLmxlbmd0aDsgdCsrKSB7XG4gICAgICAgICAgICBsZXQgdGlja2VyID0gdGlja2Vyc1t0XTtcbiAgICAgICAgICAgIGxldCBpZCA9IHRpY2tlclsnY3VycmVuY3lQYWlyJ107XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gdGhpcy5tYXJrZXRzX2J5X2lkW2lkXTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBtYXJrZXRbJ3N5bWJvbCddO1xuICAgICAgICAgICAgcmVzdWx0W3N5bWJvbF0gPSB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIG1hcmtldCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFB1YmxpY0xpdmVUaWNrZXJDdXJyZW5jeVBhaXIgKHtcbiAgICAgICAgICAgICdDdXJyZW5jeVBhaXInOiBwWydpZCddLFxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IHRpY2tlciA9IHJlc3BvbnNlWyd0aWNrZXInXTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VUaWNrZXIgKHRpY2tlciwgcCk7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldFB1YmxpY1RyYW5zYWN0aW9uc0N1cnJlbmN5UGFpciAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdDdXJyZW5jeVBhaXInOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG9yZGVyID0ge1xuICAgICAgICAgICAgJ0NvZGUnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICAgICAgJ1dheSc6IChzaWRlID09ICdidXknKSA/ICdCaWQnIDogJ0FzaycsXG4gICAgICAgICAgICAnQW1vdW50JzogYW1vdW50LFxuICAgICAgICB9O1xuICAgICAgICBpZiAodHlwZSA9PSAnbGltaXQnKVxuICAgICAgICAgICAgb3JkZXJbJ1ByaWNlJ10gPSBwcmljZTtcbiAgICAgICAgaWYgKHRoaXMudHdvZmEpIHtcbiAgICAgICAgICAgIGlmICgnVmFsaWRhdGlvbkNvZGUnIGluIHBhcmFtcylcbiAgICAgICAgICAgICAgICBvcmRlclsnVmFsaWRhdGlvbkNvZGUnXSA9IHBhcmFtc1snVmFsaWRhdGlvbkNvZGUnXTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXV0aGVudGljYXRpb25FcnJvciAodGhpcy5pZCArICcgdHdvLWZhY3RvciBhdXRoZW50aWNhdGlvbiByZXF1aXJlcyBhIG1pc3NpbmcgVmFsaWRhdGlvbkNvZGUgcGFyYW1ldGVyJyk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdFRyYWRlT3JkZXJzICh0aGlzLmV4dGVuZCAob3JkZXIsIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXNwb25zZSxcbiAgICAgICAgICAgICdpZCc6IHJlc3BvbnNlWydjbE9yZGVySWQnXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVEZWxldGVUcmFkZU9yZGVyc09yZGVySUQgKHsgJ09yZGVySUQnOiBpZCB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArICcvJyArIHRoaXMuaW1wbG9kZVBhcmFtcyAocGF0aCwgcGFyYW1zKTtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5vbWl0IChwYXJhbXMsIHRoaXMuZXh0cmFjdFBhcmFtcyAocGF0aCkpO1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHF1ZXJ5KS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChxdWVyeSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpO1xuICAgICAgICAgICAgbGV0IGNvbnRlbnRUeXBlID0gKG1ldGhvZCA9PSAnR0VUJykgPyAnJyA6ICdhcHBsaWNhdGlvbi9qc29uJztcbiAgICAgICAgICAgIGxldCBhdXRoID0gbWV0aG9kICsgdXJsICsgY29udGVudFR5cGUgKyBub25jZS50b1N0cmluZyAoKTtcbiAgICAgICAgICAgIGF1dGggPSBhdXRoLnRvTG93ZXJDYXNlICgpO1xuICAgICAgICAgICAgbGV0IHNpZ25hdHVyZSA9IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKGF1dGgpLCB0aGlzLmVuY29kZSAodGhpcy5zZWNyZXQpLCAnc2hhMjU2JywgJ2Jhc2U2NCcpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQVBJX1BVQkxJQ19LRVknOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgICAgICAnQVBJX1JFUVVFU1RfU0lHTkFUVVJFJzogc2lnbmF0dXJlLFxuICAgICAgICAgICAgICAgICdBUElfUkVRVUVTVF9EQVRFJzogbm9uY2UsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKG1ldGhvZCAhPSAnR0VUJykge1xuICAgICAgICAgICAgICAgIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gY29udGVudFR5cGU7XG4gICAgICAgICAgICAgICAgYm9keSA9IHRoaXMuanNvbiAodGhpcy5leHRlbmQgKHsgJ25vbmNlJzogbm9uY2UgfSwgcGFyYW1zKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgICAgICBpZiAoJ3Jlc3BvbnNlU3RhdHVzJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIGlmICgnbWVzc2FnZScgaW4gcmVzcG9uc2VbJ3Jlc3BvbnNlU3RhdHVzJ10pXG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlWydyZXNwb25zZVN0YXR1cyddWydtZXNzYWdlJ10gPT0gJ09LJylcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgJyArIHRoaXMuanNvbiAocmVzcG9uc2UpKTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBnZGF4ID0ge1xuICAgICdpZCc6ICdnZGF4JyxcbiAgICAnbmFtZSc6ICdHREFYJyxcbiAgICAnY291bnRyaWVzJzogJ1VTJyxcbiAgICAncmF0ZUxpbWl0JzogMTAwMCxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ3Rlc3QnOiAnaHR0cHM6Ly9hcGktcHVibGljLnNhbmRib3guZ2RheC5jb20nLFxuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2NTI3LWIxYmU0MWM2LTVlZGItMTFlNy05NWY2LTViNDk2YzQ2OWUyYy5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vYXBpLmdkYXguY29tJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy5nZGF4LmNvbScsXG4gICAgICAgICdkb2MnOiAnaHR0cHM6Ly9kb2NzLmdkYXguY29tJyxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdjdXJyZW5jaWVzJyxcbiAgICAgICAgICAgICAgICAncHJvZHVjdHMnLFxuICAgICAgICAgICAgICAgICdwcm9kdWN0cy97aWR9L2Jvb2snLFxuICAgICAgICAgICAgICAgICdwcm9kdWN0cy97aWR9L2NhbmRsZXMnLFxuICAgICAgICAgICAgICAgICdwcm9kdWN0cy97aWR9L3N0YXRzJyxcbiAgICAgICAgICAgICAgICAncHJvZHVjdHMve2lkfS90aWNrZXInLFxuICAgICAgICAgICAgICAgICdwcm9kdWN0cy97aWR9L3RyYWRlcycsXG4gICAgICAgICAgICAgICAgJ3RpbWUnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdhY2NvdW50cycsXG4gICAgICAgICAgICAgICAgJ2FjY291bnRzL3tpZH0nLFxuICAgICAgICAgICAgICAgICdhY2NvdW50cy97aWR9L2hvbGRzJyxcbiAgICAgICAgICAgICAgICAnYWNjb3VudHMve2lkfS9sZWRnZXInLFxuICAgICAgICAgICAgICAgICdjb2luYmFzZS1hY2NvdW50cycsXG4gICAgICAgICAgICAgICAgJ2ZpbGxzJyxcbiAgICAgICAgICAgICAgICAnZnVuZGluZycsXG4gICAgICAgICAgICAgICAgJ29yZGVycycsXG4gICAgICAgICAgICAgICAgJ29yZGVycy97aWR9JyxcbiAgICAgICAgICAgICAgICAncGF5bWVudC1tZXRob2RzJyxcbiAgICAgICAgICAgICAgICAncG9zaXRpb24nLFxuICAgICAgICAgICAgICAgICdyZXBvcnRzL3tpZH0nLFxuICAgICAgICAgICAgICAgICd1c2Vycy9zZWxmL3RyYWlsaW5nLXZvbHVtZScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2RlcG9zaXRzL2NvaW5iYXNlLWFjY291bnQnLFxuICAgICAgICAgICAgICAgICdkZXBvc2l0cy9wYXltZW50LW1ldGhvZCcsXG4gICAgICAgICAgICAgICAgJ2Z1bmRpbmcvcmVwYXknLFxuICAgICAgICAgICAgICAgICdvcmRlcnMnLFxuICAgICAgICAgICAgICAgICdwb3NpdGlvbi9jbG9zZScsXG4gICAgICAgICAgICAgICAgJ3Byb2ZpbGVzL21hcmdpbi10cmFuc2ZlcicsXG4gICAgICAgICAgICAgICAgJ3JlcG9ydHMnLFxuICAgICAgICAgICAgICAgICd3aXRoZHJhd2Fscy9jb2luYmFzZScsXG4gICAgICAgICAgICAgICAgJ3dpdGhkcmF3YWxzL2NyeXB0bycsXG4gICAgICAgICAgICAgICAgJ3dpdGhkcmF3YWxzL3BheW1lbnQtbWV0aG9kJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAnZGVsZXRlJzogW1xuICAgICAgICAgICAgICAgICdvcmRlcnMnLFxuICAgICAgICAgICAgICAgICdvcmRlcnMve2lkfScsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE1hcmtldHMgKCkge1xuICAgICAgICBsZXQgbWFya2V0cyA9IGF3YWl0IHRoaXMucHVibGljR2V0UHJvZHVjdHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgcCA9IDA7IHAgPCBtYXJrZXRzLmxlbmd0aDsgcCsrKSB7XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gbWFya2V0c1twXTtcbiAgICAgICAgICAgIGxldCBpZCA9IG1hcmtldFsnaWQnXTtcbiAgICAgICAgICAgIGxldCBiYXNlID0gbWFya2V0WydiYXNlX2N1cnJlbmN5J107XG4gICAgICAgICAgICBsZXQgcXVvdGUgPSBtYXJrZXRbJ3F1b3RlX2N1cnJlbmN5J107XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gYmFzZSArICcvJyArIHF1b3RlO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2ggKHtcbiAgICAgICAgICAgICAgICAnaWQnOiBpZCxcbiAgICAgICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgICAgICdiYXNlJzogYmFzZSxcbiAgICAgICAgICAgICAgICAncXVvdGUnOiBxdW90ZSxcbiAgICAgICAgICAgICAgICAnaW5mbyc6IG1hcmtldCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBiYWxhbmNlcyA9IGF3YWl0IHRoaXMucHJpdmF0ZUdldEFjY291bnRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGJhbGFuY2VzIH07XG4gICAgICAgIGZvciAobGV0IGIgPSAwOyBiIDwgYmFsYW5jZXMubGVuZ3RoOyBiKyspIHtcbiAgICAgICAgICAgIGxldCBiYWxhbmNlID0gYmFsYW5jZXNbYl07XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBiYWxhbmNlWydjdXJyZW5jeSddO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiBwYXJzZUZsb2F0IChiYWxhbmNlWydhdmFpbGFibGUnXSksXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiBwYXJzZUZsb2F0IChiYWxhbmNlWydob2xkJ10pLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHBhcnNlRmxvYXQgKGJhbGFuY2VbJ2JhbGFuY2UnXSksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IGF3YWl0IHRoaXMucHVibGljR2V0UHJvZHVjdHNJZEJvb2sgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnaWQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICAgICAgJ2xldmVsJzogMiwgLy8gMSBiZXN0IGJpZGFzaywgMiBhZ2dyZWdhdGVkLCAzIGZ1bGxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdiaWRzJzogW10sXG4gICAgICAgICAgICAnYXNrcyc6IFtdLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHNpZGVzID0gWyAnYmlkcycsICdhc2tzJyBdO1xuICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IHNpZGVzLmxlbmd0aDsgcysrKSB7XG4gICAgICAgICAgICBsZXQgc2lkZSA9IHNpZGVzW3NdO1xuICAgICAgICAgICAgbGV0IG9yZGVycyA9IG9yZGVyYm9va1tzaWRlXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9yZGVyID0gb3JkZXJzW2ldO1xuICAgICAgICAgICAgICAgIGxldCBwcmljZSA9IHBhcnNlRmxvYXQgKG9yZGVyWzBdKTtcbiAgICAgICAgICAgICAgICBsZXQgYW1vdW50ID0gcGFyc2VGbG9hdCAob3JkZXJbMV0pO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtzaWRlXS5wdXNoIChbIHByaWNlLCBhbW91bnQgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgdGlja2VyID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRQcm9kdWN0c0lkVGlja2VyICh7XG4gICAgICAgICAgICAnaWQnOiBwWydpZCddLFxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IHF1b3RlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRQcm9kdWN0c0lkU3RhdHMgKHtcbiAgICAgICAgICAgICdpZCc6IHBbJ2lkJ10sXG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5wYXJzZTg2MDEgKHRpY2tlclsndGltZSddKTtcbiAgICAgICAgbGV0IGJpZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IGFzayA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKCdiaWQnIGluIHRpY2tlcilcbiAgICAgICAgICAgIGJpZCA9IHBhcnNlRmxvYXQgKHRpY2tlclsnYmlkJ10pO1xuICAgICAgICBpZiAoJ2FzaycgaW4gdGlja2VyKVxuICAgICAgICAgICAgYXNrID0gcGFyc2VGbG9hdCAodGlja2VyWydhc2snXSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiBwYXJzZUZsb2F0IChxdW90ZVsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0IChxdW90ZVsnbG93J10pLFxuICAgICAgICAgICAgJ2JpZCc6IGJpZCxcbiAgICAgICAgICAgICdhc2snOiBhc2ssXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogcGFyc2VGbG9hdCAocXVvdGVbJ29wZW4nXSksXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHF1b3RlWydsYXN0J10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndm9sdW1lJ10pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIHBhcnNlVHJhZGUgKHRyYWRlLCBtYXJrZXQpIHtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMucGFyc2U4NjAxIChbJ3RpbWUnXSk7XG4gICAgICAgIGxldCB0eXBlID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2lkJzogdHJhZGVbJ3RyYWRlX2lkJ10udG9TdHJpbmcgKCksXG4gICAgICAgICAgICAnaW5mbyc6IHRyYWRlLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdzeW1ib2wnOiBtYXJrZXRbJ3N5bWJvbCddLFxuICAgICAgICAgICAgJ3R5cGUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnc2lkZSc6IHRyYWRlWydzaWRlJ10sXG4gICAgICAgICAgICAncHJpY2UnOiBwYXJzZUZsb2F0ICh0cmFkZVsncHJpY2UnXSksXG4gICAgICAgICAgICAnYW1vdW50JzogcGFyc2VGbG9hdCAodHJhZGVbJ3NpemUnXSksXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldFByb2R1Y3RzSWRUcmFkZXMgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnaWQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLCAvLyBmaXhlcyBpc3N1ZSAjMlxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgcGFyc2VPSExDViAob2hsY3YsIG1hcmtldCA9IHVuZGVmaW5lZCwgdGltZWZyYW1lID0gNjAsIHNpbmNlID0gdW5kZWZpbmVkLCBsaW1pdCA9IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgb2hsY3ZbMF0gKiAxMDAwLFxuICAgICAgICAgICAgb2hsY3ZbM10sXG4gICAgICAgICAgICBvaGxjdlsyXSxcbiAgICAgICAgICAgIG9obGN2WzFdLFxuICAgICAgICAgICAgb2hsY3ZbNF0sXG4gICAgICAgICAgICBvaGxjdls1XSxcbiAgICAgICAgXTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPSExDViAobWFya2V0LCB0aW1lZnJhbWUgPSA2MCwgc2luY2UgPSB1bmRlZmluZWQsIGxpbWl0ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCBtID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0UHJvZHVjdHNJZENhbmRsZXMgKHtcbiAgICAgICAgICAgICdpZCc6IG1bJ2lkJ10sXG4gICAgICAgICAgICAnZ3JhbnVsYXJpdHknOiB0aW1lZnJhbWUsXG4gICAgICAgICAgICAnc3RhcnQnOiBzaW5jZSxcbiAgICAgICAgICAgICdlbmQnOiBsaW1pdCxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlT0hMQ1ZzIChtLCByZXNwb25zZSwgdGltZWZyYW1lLCBzaW5jZSwgbGltaXQpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgb2lkID0gdGhpcy5ub25jZSAoKS50b1N0cmluZyAoKTtcbiAgICAgICAgbGV0IG9yZGVyID0ge1xuICAgICAgICAgICAgJ3Byb2R1Y3RfaWQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICAgICAgJ3NpZGUnOiBzaWRlLFxuICAgICAgICAgICAgJ3NpemUnOiBhbW91bnQsXG4gICAgICAgICAgICAndHlwZSc6IHR5cGUsXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlID09ICdsaW1pdCcpXG4gICAgICAgICAgICBvcmRlclsncHJpY2UnXSA9IHByaWNlO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0T3JkZXJzICh0aGlzLmV4dGVuZCAob3JkZXIsIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXNwb25zZSxcbiAgICAgICAgICAgICdpZCc6IHJlc3BvbnNlWydpZCddLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJpdmF0ZURlbGV0ZU9yZGVyc0lkICh7ICdpZCc6IGlkIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCByZXF1ZXN0ID0gJy8nICsgdGhpcy5pbXBsb2RlUGFyYW1zIChwYXRoLCBwYXJhbXMpO1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArIHJlcXVlc3Q7XG4gICAgICAgIGxldCBxdWVyeSA9IHRoaXMub21pdCAocGFyYW1zLCB0aGlzLmV4dHJhY3RQYXJhbXMgKHBhdGgpKTtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChxdWVyeSkubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmFwaUtleSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXV0aGVudGljYXRpb25FcnJvciAodGhpcy5pZCArICcgcmVxdWlyZXMgYXBpS2V5IHByb3BlcnR5IGZvciBhdXRoZW50aWNhdGlvbiBhbmQgdHJhZGluZycpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLnNlY3JldClcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXV0aGVudGljYXRpb25FcnJvciAodGhpcy5pZCArICcgcmVxdWlyZXMgc2VjcmV0IHByb3BlcnR5IGZvciBhdXRoZW50aWNhdGlvbiBhbmQgdHJhZGluZycpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLnBhc3N3b3JkKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBBdXRoZW50aWNhdGlvbkVycm9yICh0aGlzLmlkICsgJyByZXF1aXJlcyBwYXNzd29yZCBwcm9wZXJ0eSBmb3IgYXV0aGVudGljYXRpb24gYW5kIHRyYWRpbmcnKTtcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCkudG9TdHJpbmcgKCk7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHF1ZXJ5KS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgYm9keSA9IHRoaXMuanNvbiAocXVlcnkpO1xuICAgICAgICAgICAgbGV0IHdoYXQgPSBub25jZSArIG1ldGhvZCArIHJlcXVlc3QgKyAoYm9keSB8fCAnJyk7XG4gICAgICAgICAgICBsZXQgc2VjcmV0ID0gdGhpcy5iYXNlNjRUb0JpbmFyeSAodGhpcy5zZWNyZXQpO1xuICAgICAgICAgICAgbGV0IHNpZ25hdHVyZSA9IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKHdoYXQpLCBzZWNyZXQsICdzaGEyNTYnLCAnYmFzZTY0Jyk7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdDQi1BQ0NFU1MtS0VZJzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ0NCLUFDQ0VTUy1TSUdOJzogdGhpcy5kZWNvZGUgKHNpZ25hdHVyZSksXG4gICAgICAgICAgICAgICAgJ0NCLUFDQ0VTUy1USU1FU1RBTVAnOiBub25jZSxcbiAgICAgICAgICAgICAgICAnQ0ItQUNDRVNTLVBBU1NQSFJBU0UnOiB0aGlzLnBhc3N3b3JkLFxuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdtZXNzYWdlJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgZ2VtaW5pID0ge1xuICAgICdpZCc6ICdnZW1pbmknLFxuICAgICduYW1lJzogJ0dlbWluaScsXG4gICAgJ2NvdW50cmllcyc6ICdVUycsXG4gICAgJ3JhdGVMaW1pdCc6IDE1MDAsIC8vIDIwMCBmb3IgcHJpdmF0ZSBBUElcbiAgICAndmVyc2lvbic6ICd2MScsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc4MTY4NTctY2U3YmU2NDQtNjA5Ni0xMWU3LTgyZDYtM2MyNTcyNjMyMjljLmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly9hcGkuZ2VtaW5pLmNvbScsXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly9nZW1pbmkuY29tJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL2RvY3MuZ2VtaW5pLmNvbS9yZXN0LWFwaScsXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnc3ltYm9scycsXG4gICAgICAgICAgICAgICAgJ3B1YnRpY2tlci97c3ltYm9sfScsXG4gICAgICAgICAgICAgICAgJ2Jvb2sve3N5bWJvbH0nLFxuICAgICAgICAgICAgICAgICd0cmFkZXMve3N5bWJvbH0nLFxuICAgICAgICAgICAgICAgICdhdWN0aW9uL3tzeW1ib2x9JyxcbiAgICAgICAgICAgICAgICAnYXVjdGlvbi97c3ltYm9sfS9oaXN0b3J5JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ29yZGVyL25ldycsXG4gICAgICAgICAgICAgICAgJ29yZGVyL2NhbmNlbCcsXG4gICAgICAgICAgICAgICAgJ29yZGVyL2NhbmNlbC9zZXNzaW9uJyxcbiAgICAgICAgICAgICAgICAnb3JkZXIvY2FuY2VsL2FsbCcsXG4gICAgICAgICAgICAgICAgJ29yZGVyL3N0YXR1cycsXG4gICAgICAgICAgICAgICAgJ29yZGVycycsXG4gICAgICAgICAgICAgICAgJ215dHJhZGVzJyxcbiAgICAgICAgICAgICAgICAndHJhZGV2b2x1bWUnLFxuICAgICAgICAgICAgICAgICdiYWxhbmNlcycsXG4gICAgICAgICAgICAgICAgJ2RlcG9zaXQve2N1cnJlbmN5fS9uZXdBZGRyZXNzJyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXcve2N1cnJlbmN5fScsXG4gICAgICAgICAgICAgICAgJ2hlYXJ0YmVhdCcsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE1hcmtldHMgKCkge1xuICAgICAgICBsZXQgbWFya2V0cyA9IGF3YWl0IHRoaXMucHVibGljR2V0U3ltYm9scyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGxldCBwID0gMDsgcCA8IG1hcmtldHMubGVuZ3RoOyBwKyspIHtcbiAgICAgICAgICAgIGxldCBpZCA9IG1hcmtldHNbcF07XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gaWQ7XG4gICAgICAgICAgICBsZXQgdXBwZXJjYXNlID0gbWFya2V0LnRvVXBwZXJDYXNlICgpO1xuICAgICAgICAgICAgbGV0IGJhc2UgPSB1cHBlcmNhc2Uuc2xpY2UgKDAsIDMpO1xuICAgICAgICAgICAgbGV0IHF1b3RlID0gdXBwZXJjYXNlLnNsaWNlICgzLCA2KTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBiYXNlICsgJy8nICsgcXVvdGU7XG4gICAgICAgICAgICByZXN1bHQucHVzaCAoe1xuICAgICAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICAgICAgICAgICdzeW1ib2wnOiBzeW1ib2wsXG4gICAgICAgICAgICAgICAgJ2Jhc2UnOiBiYXNlLFxuICAgICAgICAgICAgICAgICdxdW90ZSc6IHF1b3RlLFxuICAgICAgICAgICAgICAgICdpbmZvJzogbWFya2V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IGF3YWl0IHRoaXMucHVibGljR2V0Qm9va1N5bWJvbCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAob3JkZXJbJ3ByaWNlJ10pO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBwYXJzZUZsb2F0IChvcmRlclsnYW1vdW50J10pO1xuICAgICAgICAgICAgICAgIGxldCB0aW1lc3RhbXAgPSBwYXJzZUludCAob3JkZXJbJ3RpbWVzdGFtcCddKSAqIDEwMDA7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3NpZGVdLnB1c2ggKFsgcHJpY2UsIGFtb3VudCwgdGltZXN0YW1wIF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHRpY2tlciA9IGF3YWl0IHRoaXMucHVibGljR2V0UHVidGlja2VyU3ltYm9sICh7XG4gICAgICAgICAgICAnc3ltYm9sJzogcFsnaWQnXSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aWNrZXJbJ3ZvbHVtZSddWyd0aW1lc3RhbXAnXTtcbiAgICAgICAgbGV0IGJhc2VWb2x1bWUgPSBwWydiYXNlJ107XG4gICAgICAgIGxldCBxdW90ZVZvbHVtZSA9IHBbJ3F1b3RlJ107XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbG93JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYmlkJ10pLFxuICAgICAgICAgICAgJ2Fzayc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYXNrJ10pLFxuICAgICAgICAgICAgJ3Z3YXAnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnb3Blbic6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjbG9zZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdmaXJzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsYXN0JzogcGFyc2VGbG9hdCAodGlja2VyWydsYXN0J10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndm9sdW1lJ11bYmFzZVZvbHVtZV0pLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWyd2b2x1bWUnXVtxdW90ZVZvbHVtZV0pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldFRyYWRlc1N5bWJvbCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdEJhbGFuY2VzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGJhbGFuY2VzIH07XG4gICAgICAgIGZvciAobGV0IGIgPSAwOyBiIDwgYmFsYW5jZXMubGVuZ3RoOyBiKyspIHtcbiAgICAgICAgICAgIGxldCBiYWxhbmNlID0gYmFsYW5jZXNbYl07XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBiYWxhbmNlWydjdXJyZW5jeSddO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiBwYXJzZUZsb2F0IChiYWxhbmNlWydhdmFpbGFibGUnXSksXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogcGFyc2VGbG9hdCAoYmFsYW5jZVsnYW1vdW50J10pLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGFjY291bnRbJ3VzZWQnXSA9IGFjY291bnRbJ3RvdGFsJ10gLSBhY2NvdW50WydmcmVlJ107XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBpZiAodHlwZSA9PSAnbWFya2V0JylcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyBhbGxvd3MgbGltaXQgb3JkZXJzIG9ubHknKTtcbiAgICAgICAgbGV0IG9yZGVyID0ge1xuICAgICAgICAgICAgJ2NsaWVudF9vcmRlcl9pZCc6IHRoaXMubm9uY2UgKCksXG4gICAgICAgICAgICAnc3ltYm9sJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICdhbW91bnQnOiBhbW91bnQudG9TdHJpbmcgKCksXG4gICAgICAgICAgICAncHJpY2UnOiBwcmljZS50b1N0cmluZyAoKSxcbiAgICAgICAgICAgICdzaWRlJzogc2lkZSxcbiAgICAgICAgICAgICd0eXBlJzogJ2V4Y2hhbmdlIGxpbWl0JywgLy8gZ2VtaW5pIGFsbG93cyBsaW1pdCBvcmRlcnMgb25seVxuICAgICAgICB9O1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0T3JkZXJOZXcgKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ2lkJzogcmVzcG9uc2VbJ29yZGVyX2lkJ10sXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdENhbmNlbE9yZGVyICh7ICdvcmRlcl9pZCc6IGlkIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSAnLycgKyB0aGlzLnZlcnNpb24gKyAnLycgKyB0aGlzLmltcGxvZGVQYXJhbXMgKHBhdGgsIHBhcmFtcyk7XG4gICAgICAgIGxldCBxdWVyeSA9IHRoaXMub21pdCAocGFyYW1zLCB0aGlzLmV4dHJhY3RQYXJhbXMgKHBhdGgpKTtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChxdWVyeSkubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG5vbmNlID0gdGhpcy5ub25jZSAoKTtcbiAgICAgICAgICAgIGxldCByZXF1ZXN0ID0gdGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICAgICAncmVxdWVzdCc6IHVybCxcbiAgICAgICAgICAgICAgICAnbm9uY2UnOiBub25jZSxcbiAgICAgICAgICAgIH0sIHF1ZXJ5KTtcbiAgICAgICAgICAgIGxldCBwYXlsb2FkID0gdGhpcy5qc29uIChyZXF1ZXN0KTtcbiAgICAgICAgICAgIHBheWxvYWQgPSB0aGlzLnN0cmluZ1RvQmFzZTY0ICh0aGlzLmVuY29kZSAocGF5bG9hZCkpO1xuICAgICAgICAgICAgbGV0IHNpZ25hdHVyZSA9IHRoaXMuaG1hYyAocGF5bG9hZCwgdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSwgJ3NoYTM4NCcpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ3RleHQvcGxhaW4nLFxuICAgICAgICAgICAgICAgICdDb250ZW50LUxlbmd0aCc6IDAsXG4gICAgICAgICAgICAgICAgJ1gtR0VNSU5JLUFQSUtFWSc6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgICAgICdYLUdFTUlOSS1QQVlMT0FEJzogcGF5bG9hZCxcbiAgICAgICAgICAgICAgICAnWC1HRU1JTkktU0lHTkFUVVJFJzogc2lnbmF0dXJlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgdXJsO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgICAgIGlmICgncmVzdWx0JyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIGlmIChyZXNwb25zZVsncmVzdWx0J10gPT0gJ2Vycm9yJylcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgJyArIHRoaXMuanNvbiAocmVzcG9uc2UpKTtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGhpdGJ0YyA9IHtcblxuICAgICdpZCc6ICdoaXRidGMnLFxuICAgICduYW1lJzogJ0hpdEJUQycsXG4gICAgJ2NvdW50cmllcyc6ICdISycsIC8vIEhvbmcgS29uZ1xuICAgICdyYXRlTGltaXQnOiAxNTAwLFxuICAgICd2ZXJzaW9uJzogJzEnLFxuICAgICdoYXNGZXRjaFRpY2tlcnMnOiB0cnVlLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2NTU1LThlYWVjMjBlLTVlZGMtMTFlNy05YzViLTZkYzY5ZmM0MmY1ZS5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHA6Ly9hcGkuaGl0YnRjLmNvbScsXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly9oaXRidGMuY29tJyxcbiAgICAgICAgJ2RvYyc6IFtcbiAgICAgICAgICAgICdodHRwczovL2hpdGJ0Yy5jb20vYXBpJyxcbiAgICAgICAgICAgICdodHRwOi8vaGl0YnRjLWNvbS5naXRodWIuaW8vaGl0YnRjLWFwaScsXG4gICAgICAgICAgICAnaHR0cDovL2pzZmlkZGxlLm5ldC9ibWtuaWdodC9ScWJZQicsXG4gICAgICAgIF0sXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAne3N5bWJvbH0vb3JkZXJib29rJyxcbiAgICAgICAgICAgICAgICAne3N5bWJvbH0vdGlja2VyJyxcbiAgICAgICAgICAgICAgICAne3N5bWJvbH0vdHJhZGVzJyxcbiAgICAgICAgICAgICAgICAne3N5bWJvbH0vdHJhZGVzL3JlY2VudCcsXG4gICAgICAgICAgICAgICAgJ3N5bWJvbHMnLFxuICAgICAgICAgICAgICAgICd0aWNrZXInLFxuICAgICAgICAgICAgICAgICd0aW1lLCdcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICd0cmFkaW5nJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnYmFsYW5jZScsXG4gICAgICAgICAgICAgICAgJ29yZGVycy9hY3RpdmUnLFxuICAgICAgICAgICAgICAgICdvcmRlcnMvcmVjZW50JyxcbiAgICAgICAgICAgICAgICAnb3JkZXInLFxuICAgICAgICAgICAgICAgICd0cmFkZXMvYnkvb3JkZXInLFxuICAgICAgICAgICAgICAgICd0cmFkZXMnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICdwb3N0JzogW1xuICAgICAgICAgICAgICAgICduZXdfb3JkZXInLFxuICAgICAgICAgICAgICAgICdjYW5jZWxfb3JkZXInLFxuICAgICAgICAgICAgICAgICdjYW5jZWxfb3JkZXJzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwYXltZW50Jzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnYmFsYW5jZScsXG4gICAgICAgICAgICAgICAgJ2FkZHJlc3Mve2N1cnJlbmN5fScsXG4gICAgICAgICAgICAgICAgJ3RyYW5zYWN0aW9ucycsXG4gICAgICAgICAgICAgICAgJ3RyYW5zYWN0aW9ucy97dHJhbnNhY3Rpb259JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAndHJhbnNmZXJfdG9fdHJhZGluZycsXG4gICAgICAgICAgICAgICAgJ3RyYW5zZmVyX3RvX21haW4nLFxuICAgICAgICAgICAgICAgICdhZGRyZXNzL3tjdXJyZW5jeX0nLFxuICAgICAgICAgICAgICAgICdwYXlvdXQnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE1hcmtldHMgKCkge1xuICAgICAgICBsZXQgbWFya2V0cyA9IGF3YWl0IHRoaXMucHVibGljR2V0U3ltYm9scyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGxldCBwID0gMDsgcCA8IG1hcmtldHNbJ3N5bWJvbHMnXS5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IG1hcmtldHNbJ3N5bWJvbHMnXVtwXTtcbiAgICAgICAgICAgIGxldCBpZCA9IG1hcmtldFsnc3ltYm9sJ107XG4gICAgICAgICAgICBsZXQgYmFzZSA9IG1hcmtldFsnY29tbW9kaXR5J107XG4gICAgICAgICAgICBsZXQgcXVvdGUgPSBtYXJrZXRbJ2N1cnJlbmN5J107XG4gICAgICAgICAgICBsZXQgbG90ID0gcGFyc2VGbG9hdCAobWFya2V0Wydsb3QnXSk7XG4gICAgICAgICAgICBsZXQgc3RlcCA9IHBhcnNlRmxvYXQgKG1hcmtldFsnc3RlcCddKTtcbiAgICAgICAgICAgIGJhc2UgPSB0aGlzLmNvbW1vbkN1cnJlbmN5Q29kZSAoYmFzZSk7XG4gICAgICAgICAgICBxdW90ZSA9IHRoaXMuY29tbW9uQ3VycmVuY3lDb2RlIChxdW90ZSk7XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gYmFzZSArICcvJyArIHF1b3RlO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2ggKHtcbiAgICAgICAgICAgICAgICAnaWQnOiBpZCxcbiAgICAgICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgICAgICdiYXNlJzogYmFzZSxcbiAgICAgICAgICAgICAgICAncXVvdGUnOiBxdW90ZSxcbiAgICAgICAgICAgICAgICAnbG90JzogbG90LFxuICAgICAgICAgICAgICAgICdzdGVwJzogc3RlcCxcbiAgICAgICAgICAgICAgICAnaW5mbyc6IG1hcmtldCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMudHJhZGluZ0dldEJhbGFuY2UgKCk7XG4gICAgICAgIGxldCBiYWxhbmNlcyA9IHJlc3BvbnNlWydiYWxhbmNlJ107XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogYmFsYW5jZXMgfTtcbiAgICAgICAgZm9yIChsZXQgYiA9IDA7IGIgPCBiYWxhbmNlcy5sZW5ndGg7IGIrKykge1xuICAgICAgICAgICAgbGV0IGJhbGFuY2UgPSBiYWxhbmNlc1tiXTtcbiAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IGJhbGFuY2VbJ2N1cnJlbmN5X2NvZGUnXTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogcGFyc2VGbG9hdCAoYmFsYW5jZVsnY2FzaCddKSxcbiAgICAgICAgICAgICAgICAndXNlZCc6IHBhcnNlRmxvYXQgKGJhbGFuY2VbJ3Jlc2VydmVkJ10pLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhY2NvdW50Wyd0b3RhbCddID0gdGhpcy5zdW0gKGFjY291bnRbJ2ZyZWUnXSwgYWNjb3VudFsndXNlZCddKTtcbiAgICAgICAgICAgIHJlc3VsdFtjdXJyZW5jeV0gPSBhY2NvdW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFN5bWJvbE9yZGVyYm9vayAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAob3JkZXJbMF0pO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBwYXJzZUZsb2F0IChvcmRlclsxXSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3NpZGVdLnB1c2ggKFsgcHJpY2UsIGFtb3VudCBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBwYXJzZVRpY2tlciAodGlja2VyLCBtYXJrZXQpIHtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRpY2tlclsndGltZXN0YW1wJ107XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2hpZ2gnXSksXG4gICAgICAgICAgICAnbG93JzogcGFyc2VGbG9hdCAodGlja2VyWydsb3cnXSksXG4gICAgICAgICAgICAnYmlkJzogcGFyc2VGbG9hdCAodGlja2VyWydiaWQnXSksXG4gICAgICAgICAgICAnYXNrJzogcGFyc2VGbG9hdCAodGlja2VyWydhc2snXSksXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogcGFyc2VGbG9hdCAodGlja2VyWydvcGVuJ10pLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xhc3QnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWyd2b2x1bWUnXSksXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbHVtZV9xdW90ZSddKSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlcnMgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgdGlja2VycyA9IGF3YWl0IHRoaXMucHVibGljR2V0VGlja2VyICgpO1xuICAgICAgICBsZXQgaWRzID0gT2JqZWN0LmtleXMgKHRpY2tlcnMpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge307XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgaWQgPSBpZHNbaV07XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gdGhpcy5tYXJrZXRzX2J5X2lkW2lkXTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBtYXJrZXRbJ3N5bWJvbCddO1xuICAgICAgICAgICAgbGV0IHRpY2tlciA9IHRpY2tlcnNbaWRdO1xuICAgICAgICAgICAgcmVzdWx0W3N5bWJvbF0gPSB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIG1hcmtldCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgdGlja2VyID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRTeW1ib2xUaWNrZXIgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiBwWydpZCddLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCdtZXNzYWdlJyBpbiB0aWNrZXIpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgJyArIHRpY2tlclsnbWVzc2FnZSddKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VUaWNrZXIgKHRpY2tlciwgcCk7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldFN5bWJvbFRyYWRlcyAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgLy8gY2hlY2sgaWYgYW1vdW50IGNhbiBiZSBldmVubHkgZGl2aWRlZCBpbnRvIGxvdHNcbiAgICAgICAgLy8gdGhleSB3YW50IGludGVnZXIgcXVhbnRpdHkgaW4gbG90IHVuaXRzXG4gICAgICAgIGxldCBxdWFudGl0eSA9IHBhcnNlRmxvYXQgKGFtb3VudCkgLyBwWydsb3QnXTtcbiAgICAgICAgbGV0IHdob2xlTG90cyA9IE1hdGgucm91bmQgKHF1YW50aXR5KTtcbiAgICAgICAgbGV0IGRpZmZlcmVuY2UgPSBxdWFudGl0eSAtIHdob2xlTG90cztcbiAgICAgICAgaWYgKE1hdGguYWJzIChkaWZmZXJlbmNlKSA+IHBbJ3N0ZXAnXSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyBvcmRlciBhbW91bnQgc2hvdWxkIGJlIGV2ZW5seSBkaXZpc2libGUgYnkgbG90IHVuaXQgc2l6ZSBvZiAnICsgcFsnbG90J10udG9TdHJpbmcgKCkpO1xuICAgICAgICBsZXQgY2xpZW50T3JkZXJJZCA9IHRoaXMubm9uY2UgKCk7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdjbGllbnRPcmRlcklkJzogY2xpZW50T3JkZXJJZC50b1N0cmluZyAoKSxcbiAgICAgICAgICAgICdzeW1ib2wnOiBwWydpZCddLFxuICAgICAgICAgICAgJ3NpZGUnOiBzaWRlLFxuICAgICAgICAgICAgJ3F1YW50aXR5Jzogd2hvbGVMb3RzLnRvU3RyaW5nICgpLCAvLyBxdWFudGl0eSBpbiBpbnRlZ2VyIGxvdCB1bml0c1xuICAgICAgICAgICAgJ3R5cGUnOiB0eXBlLFxuICAgICAgICB9O1xuICAgICAgICBpZiAodHlwZSA9PSAnbGltaXQnKVxuICAgICAgICAgICAgb3JkZXJbJ3ByaWNlJ10gPSAnJS4xMGYnLnNwcmludGYgKHByaWNlKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy50cmFkaW5nUG9zdE5ld09yZGVyICh0aGlzLmV4dGVuZCAob3JkZXIsIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXNwb25zZSxcbiAgICAgICAgICAgICdpZCc6IHJlc3BvbnNlWydFeGVjdXRpb25SZXBvcnQnXVsnY2xpZW50T3JkZXJJZCddLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnRyYWRpbmdQb3N0Q2FuY2VsT3JkZXIgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnY2xpZW50T3JkZXJJZCc6IGlkLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gJy8nICsgJ2FwaScgKyAnLycgKyB0aGlzLnZlcnNpb24gKyAnLycgKyBhcGkgKyAnLycgKyB0aGlzLmltcGxvZGVQYXJhbXMgKHBhdGgsIHBhcmFtcyk7XG4gICAgICAgIGxldCBxdWVyeSA9IHRoaXMub21pdCAocGFyYW1zLCB0aGlzLmV4dHJhY3RQYXJhbXMgKHBhdGgpKTtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChxdWVyeSkubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG5vbmNlID0gdGhpcy5ub25jZSAoKTtcbiAgICAgICAgICAgIHF1ZXJ5ID0gdGhpcy5leHRlbmQgKHsgJ25vbmNlJzogbm9uY2UsICdhcGlrZXknOiB0aGlzLmFwaUtleSB9LCBxdWVyeSk7XG4gICAgICAgICAgICBpZiAobWV0aG9kID09ICdQT1NUJylcbiAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHF1ZXJ5KS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgIGJvZHkgPSB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChxdWVyeSk7XG4gICAgICAgICAgICBsZXQgYXV0aCA9IHVybCArIChib2R5IHx8ICcnKTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgICAgICAgICdYLVNpZ25hdHVyZSc6IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKGF1dGgpLCB0aGlzLmVuY29kZSAodGhpcy5zZWNyZXQpLCAnc2hhNTEyJykudG9Mb3dlckNhc2UgKCksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHVybCA9IHRoaXMudXJsc1snYXBpJ10gKyB1cmw7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdjb2RlJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgaHVvYmkgPSB7XG5cbiAgICAnaWQnOiAnaHVvYmknLFxuICAgICduYW1lJzogJ0h1b2JpJyxcbiAgICAnY291bnRyaWVzJzogJ0NOJyxcbiAgICAncmF0ZUxpbWl0JzogMjAwMCxcbiAgICAndmVyc2lvbic6ICd2MycsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc3NjY1NjktMTVhYTdiOWEtNWVkZC0xMWU3LTllN2YtNDQ3OTFmNGVlNDljLmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cDovL2FwaS5odW9iaS5jb20nLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vd3d3Lmh1b2JpLmNvbScsXG4gICAgICAgICdkb2MnOiAnaHR0cHM6Ly9naXRodWIuY29tL2h1b2JpYXBpL0FQSV9Eb2NzX2VuL3dpa2knLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ3N0YXRpY21hcmtldCc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ3tpZH1fa2xpbmVfe3BlcmlvZH0nLFxuICAgICAgICAgICAgICAgICd0aWNrZXJfe2lkfScsXG4gICAgICAgICAgICAgICAgJ2RlcHRoX3tpZH0nLFxuICAgICAgICAgICAgICAgICdkZXB0aF97aWR9X3tsZW5ndGh9JyxcbiAgICAgICAgICAgICAgICAnZGV0YWlsX3tpZH0nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3VzZG1hcmtldCc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ3tpZH1fa2xpbmVfe3BlcmlvZH0nLFxuICAgICAgICAgICAgICAgICd0aWNrZXJfe2lkfScsXG4gICAgICAgICAgICAgICAgJ2RlcHRoX3tpZH0nLFxuICAgICAgICAgICAgICAgICdkZXB0aF97aWR9X3tsZW5ndGh9JyxcbiAgICAgICAgICAgICAgICAnZGV0YWlsX3tpZH0nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3RyYWRlJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2dldF9hY2NvdW50X2luZm8nLFxuICAgICAgICAgICAgICAgICdnZXRfb3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnb3JkZXJfaW5mbycsXG4gICAgICAgICAgICAgICAgJ2J1eScsXG4gICAgICAgICAgICAgICAgJ3NlbGwnLFxuICAgICAgICAgICAgICAgICdidXlfbWFya2V0JyxcbiAgICAgICAgICAgICAgICAnc2VsbF9tYXJrZXQnLFxuICAgICAgICAgICAgICAgICdjYW5jZWxfb3JkZXInLFxuICAgICAgICAgICAgICAgICdnZXRfbmV3X2RlYWxfb3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnZ2V0X29yZGVyX2lkX2J5X3RyYWRlX2lkJyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXdfY29pbicsXG4gICAgICAgICAgICAgICAgJ2NhbmNlbF93aXRoZHJhd19jb2luJyxcbiAgICAgICAgICAgICAgICAnZ2V0X3dpdGhkcmF3X2NvaW5fcmVzdWx0JyxcbiAgICAgICAgICAgICAgICAndHJhbnNmZXInLFxuICAgICAgICAgICAgICAgICdsb2FuJyxcbiAgICAgICAgICAgICAgICAncmVwYXltZW50JyxcbiAgICAgICAgICAgICAgICAnZ2V0X2xvYW5fYXZhaWxhYmxlJyxcbiAgICAgICAgICAgICAgICAnZ2V0X2xvYW5zJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9DTlknOiB7ICdpZCc6ICdidGMnLCAnc3ltYm9sJzogJ0JUQy9DTlknLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnQ05ZJywgJ3R5cGUnOiAnc3RhdGljbWFya2V0JywgJ2NvaW5UeXBlJzogMSB9LFxuICAgICAgICAnTFRDL0NOWSc6IHsgJ2lkJzogJ2x0YycsICdzeW1ib2wnOiAnTFRDL0NOWScsICdiYXNlJzogJ0xUQycsICdxdW90ZSc6ICdDTlknLCAndHlwZSc6ICdzdGF0aWNtYXJrZXQnLCAnY29pblR5cGUnOiAyIH0sXG4gICAgICAgICdCVEMvVVNEJzogeyAnaWQnOiAnYnRjJywgJ3N5bWJvbCc6ICdCVEMvVVNEJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ1VTRCcsICd0eXBlJzogJ3VzZG1hcmtldCcsICAgICdjb2luVHlwZSc6IDEgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gYXdhaXQgdGhpcy50cmFkZVBvc3RHZXRBY2NvdW50SW5mbyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiBiYWxhbmNlcyB9O1xuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IHRoaXMuY3VycmVuY2llcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gdGhpcy5jdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IGxvd2VyY2FzZSA9IGN1cnJlbmN5LnRvTG93ZXJDYXNlICgpO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGxldCBhdmFpbGFibGUgPSAnYXZhaWxhYmxlXycgKyBsb3dlcmNhc2UgKyAnX2Rpc3BsYXknO1xuICAgICAgICAgICAgbGV0IGZyb3plbiA9ICdmcm96ZW5fJyArIGxvd2VyY2FzZSArICdfZGlzcGxheSc7XG4gICAgICAgICAgICBsZXQgbG9hbiA9ICdsb2FuXycgKyBsb3dlcmNhc2UgKyAnX2Rpc3BsYXknO1xuICAgICAgICAgICAgaWYgKGF2YWlsYWJsZSBpbiBiYWxhbmNlcylcbiAgICAgICAgICAgICAgICBhY2NvdW50WydmcmVlJ10gPSBwYXJzZUZsb2F0IChiYWxhbmNlc1thdmFpbGFibGVdKTtcbiAgICAgICAgICAgIGlmIChmcm96ZW4gaW4gYmFsYW5jZXMpXG4gICAgICAgICAgICAgICAgYWNjb3VudFsndXNlZCddID0gcGFyc2VGbG9hdCAoYmFsYW5jZXNbZnJvemVuXSk7XG4gICAgICAgICAgICBpZiAobG9hbiBpbiBiYWxhbmNlcylcbiAgICAgICAgICAgICAgICBhY2NvdW50Wyd1c2VkJ10gPSB0aGlzLnN1bSAoYWNjb3VudFsndXNlZCddLCBwYXJzZUZsb2F0IChiYWxhbmNlc1tsb2FuXSkpO1xuICAgICAgICAgICAgYWNjb3VudFsndG90YWwnXSA9IHRoaXMuc3VtIChhY2NvdW50WydmcmVlJ10sIGFjY291bnRbJ3VzZWQnXSk7XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgbWV0aG9kID0gcFsndHlwZSddICsgJ0dldERlcHRoSWQnO1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgdGhpc1ttZXRob2RdICh0aGlzLmV4dGVuZCAoeyAnaWQnOiBwWydpZCddIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IG9yZGVyYm9va1snYmlkcyddLFxuICAgICAgICAgICAgJ2Fza3MnOiBvcmRlcmJvb2tbJ2Fza3MnXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IG1ldGhvZCA9IHBbJ3R5cGUnXSArICdHZXRUaWNrZXJJZCc7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXNbbWV0aG9kXSAoeyAnaWQnOiBwWydpZCddIH0pO1xuICAgICAgICBsZXQgdGlja2VyID0gcmVzcG9uc2VbJ3RpY2tlciddO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gcGFyc2VJbnQgKHJlc3BvbnNlWyd0aW1lJ10pICogMTAwMDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2J1eSddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3NlbGwnXSksXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogcGFyc2VGbG9hdCAodGlja2VyWydvcGVuJ10pLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xhc3QnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWyd2b2wnXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IG1ldGhvZCA9IHBbJ3R5cGUnXSArICdHZXREZXRhaWxJZCc7XG4gICAgICAgIHJldHVybiB0aGlzW21ldGhvZF0gKHRoaXMuZXh0ZW5kICh7ICdpZCc6IHBbJ2lkJ10gfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCBtZXRob2QgPSAndHJhZGVQb3N0JyArIHRoaXMuY2FwaXRhbGl6ZSAoc2lkZSk7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdjb2luX3R5cGUnOiBwWydjb2luVHlwZSddLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IGFtb3VudCxcbiAgICAgICAgICAgICdtYXJrZXQnOiBwWydxdW90ZSddLnRvTG93ZXJDYXNlICgpLFxuICAgICAgICB9O1xuICAgICAgICBpZiAodHlwZSA9PSAnbGltaXQnKVxuICAgICAgICAgICAgb3JkZXJbJ3ByaWNlJ10gPSBwcmljZTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgbWV0aG9kICs9IHRoaXMuY2FwaXRhbGl6ZSAodHlwZSk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IHRoaXNbbWV0aG9kXSAodGhpcy5leHRlbmQgKG9yZGVyLCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnaWQnXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyYWRlUG9zdENhbmNlbE9yZGVyICh7ICdpZCc6IGlkIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAndHJhZGUnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ107XG4gICAgICAgIGlmIChhcGkgPT0gJ3RyYWRlJykge1xuICAgICAgICAgICAgdXJsICs9ICcvYXBpJyArIHRoaXMudmVyc2lvbjtcbiAgICAgICAgICAgIGxldCBxdWVyeSA9IHRoaXMua2V5c29ydCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICAgICAnbWV0aG9kJzogcGF0aCxcbiAgICAgICAgICAgICAgICAnYWNjZXNzX2tleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgICAgICdjcmVhdGVkJzogdGhpcy5ub25jZSAoKSxcbiAgICAgICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICAgICAgbGV0IHF1ZXJ5U3RyaW5nID0gdGhpcy51cmxlbmNvZGUgKHRoaXMub21pdCAocXVlcnksICdtYXJrZXQnKSk7XG4gICAgICAgICAgICAvLyBzZWNyZXQga2V5IG11c3QgYmUgYXQgdGhlIGVuZCBvZiBxdWVyeSB0byBiZSBzaWduZWRcbiAgICAgICAgICAgIHF1ZXJ5U3RyaW5nICs9ICcmc2VjcmV0X2tleT0nICsgdGhpcy5zZWNyZXQ7XG4gICAgICAgICAgICBxdWVyeVsnc2lnbiddID0gdGhpcy5oYXNoICh0aGlzLmVuY29kZSAocXVlcnlTdHJpbmcpKTtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtTGVuZ3RoJzogYm9keS5sZW5ndGgsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdXJsICs9ICcvJyArIGFwaSArICcvJyArIHRoaXMuaW1wbG9kZVBhcmFtcyAocGF0aCwgcGFyYW1zKSArICdfanNvbi5qcyc7XG4gICAgICAgICAgICBsZXQgcXVlcnkgPSB0aGlzLm9taXQgKHBhcmFtcywgdGhpcy5leHRyYWN0UGFyYW1zIChwYXRoKSk7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHF1ZXJ5KS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChxdWVyeSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgICAgICBpZiAoJ3N0YXR1cycgaW4gcmVzcG9uc2UpXG4gICAgICAgICAgICBpZiAocmVzcG9uc2VbJ3N0YXR1cyddID09ICdlcnJvcicpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgICAgIGlmICgnY29kZScgaW4gcmVzcG9uc2UpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgJyArIHRoaXMuanNvbiAocmVzcG9uc2UpKTtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGl0Yml0ID0ge1xuXG4gICAgJ2lkJzogJ2l0Yml0JyxcbiAgICAnbmFtZSc6ICdpdEJpdCcsXG4gICAgJ2NvdW50cmllcyc6ICdVUycsXG4gICAgJ3JhdGVMaW1pdCc6IDIwMDAsXG4gICAgJ3ZlcnNpb24nOiAndjEnLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3ODIyMTU5LTY2MTUzNjIwLTYwYWQtMTFlNy04OWU3LTAwNWY2ZDdmM2RlMC5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vYXBpLml0Yml0LmNvbScsXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly93d3cuaXRiaXQuY29tJyxcbiAgICAgICAgJ2RvYyc6IFtcbiAgICAgICAgICAgICdodHRwczovL2FwaS5pdGJpdC5jb20vZG9jcycsXG4gICAgICAgICAgICAnaHR0cHM6Ly93d3cuaXRiaXQuY29tL2FwaScsXG4gICAgICAgIF0sXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnbWFya2V0cy97c3ltYm9sfS90aWNrZXInLFxuICAgICAgICAgICAgICAgICdtYXJrZXRzL3tzeW1ib2x9L29yZGVyX2Jvb2snLFxuICAgICAgICAgICAgICAgICdtYXJrZXRzL3tzeW1ib2x9L3RyYWRlcycsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAncHJpdmF0ZSc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ3dhbGxldHMnLFxuICAgICAgICAgICAgICAgICd3YWxsZXRzL3t3YWxsZXRJZH0nLFxuICAgICAgICAgICAgICAgICd3YWxsZXRzL3t3YWxsZXRJZH0vYmFsYW5jZXMve2N1cnJlbmN5Q29kZX0nLFxuICAgICAgICAgICAgICAgICd3YWxsZXRzL3t3YWxsZXRJZH0vZnVuZGluZ19oaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAnd2FsbGV0cy97d2FsbGV0SWR9L3RyYWRlcycsXG4gICAgICAgICAgICAgICAgJ3dhbGxldHMve3dhbGxldElkfS9vcmRlcnMve2lkfScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ3dhbGxldF90cmFuc2ZlcnMnLFxuICAgICAgICAgICAgICAgICd3YWxsZXRzJyxcbiAgICAgICAgICAgICAgICAnd2FsbGV0cy97d2FsbGV0SWR9L2NyeXB0b2N1cnJlbmN5X2RlcG9zaXRzJyxcbiAgICAgICAgICAgICAgICAnd2FsbGV0cy97d2FsbGV0SWR9L2NyeXB0b2N1cnJlbmN5X3dpdGhkcmF3YWxzJyxcbiAgICAgICAgICAgICAgICAnd2FsbGV0cy97d2FsbGV0SWR9L29yZGVycycsXG4gICAgICAgICAgICAgICAgJ3dpcmVfd2l0aGRyYXdhbCcsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ2RlbGV0ZSc6IFtcbiAgICAgICAgICAgICAgICAnd2FsbGV0cy97d2FsbGV0SWR9L29yZGVycy97aWR9JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9VU0QnOiB7ICdpZCc6ICdYQlRVU0QnLCAnc3ltYm9sJzogJ0JUQy9VU0QnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnVVNEJyB9LFxuICAgICAgICAnQlRDL1NHRCc6IHsgJ2lkJzogJ1hCVFNHRCcsICdzeW1ib2wnOiAnQlRDL1NHRCcsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdTR0QnIH0sXG4gICAgICAgICdCVEMvRVVSJzogeyAnaWQnOiAnWEJURVVSJywgJ3N5bWJvbCc6ICdCVEMvRVVSJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ0VVUicgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IGF3YWl0IHRoaXMucHVibGljR2V0TWFya2V0c1N5bWJvbE9yZGVyQm9vayAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAob3JkZXJbMF0pO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBwYXJzZUZsb2F0IChvcmRlclsxXSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3NpZGVdLnB1c2ggKFsgcHJpY2UsIGFtb3VudCBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGxldCB0aWNrZXIgPSBhd2FpdCB0aGlzLnB1YmxpY0dldE1hcmtldHNTeW1ib2xUaWNrZXIgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMucGFyc2U4NjAxICh0aWNrZXJbJ3NlcnZlclRpbWVVVEMnXSk7XG4gICAgICAgIGxldCBiaWQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGxldCBhc2sgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmICgnYmlkJyBpbiB0aWNrZXIpXG4gICAgICAgICAgICBpZiAodGlja2VyWydiaWQnXSlcbiAgICAgICAgICAgICAgICBiaWQgPSBwYXJzZUZsb2F0ICh0aWNrZXJbJ2JpZCddKTtcbiAgICAgICAgaWYgKCdhc2snIGluIHRpY2tlcilcbiAgICAgICAgICAgIGlmICh0aWNrZXJbJ2FzayddKVxuICAgICAgICAgICAgICAgIGFzayA9IHBhcnNlRmxvYXQgKHRpY2tlclsnYXNrJ10pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydoaWdoMjRoJ10pLFxuICAgICAgICAgICAgJ2xvdyc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbG93MjRoJ10pLFxuICAgICAgICAgICAgJ2JpZCc6IGJpZCxcbiAgICAgICAgICAgICdhc2snOiBhc2ssXG4gICAgICAgICAgICAndndhcCc6IHBhcnNlRmxvYXQgKHRpY2tlclsndndhcDI0aCddKSxcbiAgICAgICAgICAgICdvcGVuJzogcGFyc2VGbG9hdCAodGlja2VyWydvcGVuVG9kYXknXSksXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdFByaWNlJ10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndm9sdW1lMjRoJ10pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldE1hcmtldHNTeW1ib2xUcmFkZXMgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnc3ltYm9sJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZUdldEJhbGFuY2VzICgpO1xuICAgICAgICBsZXQgYmFsYW5jZXMgPSByZXNwb25zZVsnYmFsYW5jZXMnXTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiByZXNwb25zZSB9O1xuICAgICAgICBmb3IgKGxldCBiID0gMDsgYiA8IGJhbGFuY2VzLmxlbmd0aDsgYisrKSB7XG4gICAgICAgICAgICBsZXQgYmFsYW5jZSA9IGJhbGFuY2VzW2JdO1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gYmFsYW5jZVsnY3VycmVuY3knXTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogcGFyc2VGbG9hdCAoYmFsYW5jZVsnYXZhaWxhYmxlQmFsYW5jZSddKSxcbiAgICAgICAgICAgICAgICAndXNlZCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAndG90YWwnOiBwYXJzZUZsb2F0IChiYWxhbmNlWyd0b3RhbEJhbGFuY2UnXSksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYWNjb3VudFsndXNlZCddID0gYWNjb3VudFsndG90YWwnXSAtIGFjY291bnRbJ2ZyZWUnXTtcbiAgICAgICAgICAgIHJlc3VsdFtjdXJyZW5jeV0gPSBhY2NvdW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGZldGNoV2FsbGV0cyAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVHZXRXYWxsZXRzICgpO1xuICAgIH0sXG5cbiAgICBub25jZSAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgaWYgKHR5cGUgPT0gJ21hcmtldCcpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgYWxsb3dzIGxpbWl0IG9yZGVycyBvbmx5Jyk7XG4gICAgICAgIGFtb3VudCA9IGFtb3VudC50b1N0cmluZyAoKTtcbiAgICAgICAgcHJpY2UgPSBwcmljZS50b1N0cmluZyAoKTtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IG9yZGVyID0ge1xuICAgICAgICAgICAgJ3NpZGUnOiBzaWRlLFxuICAgICAgICAgICAgJ3R5cGUnOiB0eXBlLFxuICAgICAgICAgICAgJ2N1cnJlbmN5JzogcFsnYmFzZSddLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IGFtb3VudCxcbiAgICAgICAgICAgICdkaXNwbGF5JzogYW1vdW50LFxuICAgICAgICAgICAgJ3ByaWNlJzogcHJpY2UsXG4gICAgICAgICAgICAnaW5zdHJ1bWVudCc6IHBbJ2lkJ10sXG4gICAgICAgIH07XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RUcmFkZUFkZCAodGhpcy5leHRlbmQgKG9yZGVyLCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnaWQnXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlRGVsZXRlV2FsbGV0c1dhbGxldElkT3JkZXJzSWQgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnaWQnOiBpZCxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ10gKyAnLycgKyB0aGlzLnZlcnNpb24gKyAnLycgKyB0aGlzLmltcGxvZGVQYXJhbXMgKHBhdGgsIHBhcmFtcyk7XG4gICAgICAgIGxldCBxdWVyeSA9IHRoaXMub21pdCAocGFyYW1zLCB0aGlzLmV4dHJhY3RQYXJhbXMgKHBhdGgpKTtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChxdWVyeSkubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChxdWVyeSkubGVuZ3RoKVxuICAgICAgICAgICAgICAgIGJvZHkgPSB0aGlzLmpzb24gKHF1ZXJ5KTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBib2R5ID0gJyc7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpLnRvU3RyaW5nICgpO1xuICAgICAgICAgICAgbGV0IHRpbWVzdGFtcCA9IG5vbmNlO1xuICAgICAgICAgICAgbGV0IGF1dGggPSBbIG1ldGhvZCwgdXJsLCBib2R5LCBub25jZSwgdGltZXN0YW1wIF07XG4gICAgICAgICAgICBsZXQgbWVzc2FnZSA9IG5vbmNlICsgdGhpcy5qc29uIChhdXRoKTtcbiAgICAgICAgICAgIGxldCBoYXNoID0gdGhpcy5oYXNoICh0aGlzLmVuY29kZSAobWVzc2FnZSksICdzaGEyNTYnLCAnYmluYXJ5Jyk7XG4gICAgICAgICAgICBsZXQgYmluaGFzaCA9IHRoaXMuYmluYXJ5Q29uY2F0ICh1cmwsIGhhc2gpO1xuICAgICAgICAgICAgbGV0IHNpZ25hdHVyZSA9IHRoaXMuaG1hYyAoYmluaGFzaCwgdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSwgJ3NoYTUxMicsICdiYXNlNjQnKTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0F1dGhvcml6YXRpb24nOiBzZWxmLmFwaUtleSArICc6JyArIHNpZ25hdHVyZSxcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICdYLUF1dGgtVGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgICAgICdYLUF1dGgtTm9uY2UnOiBub25jZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgICAgICBpZiAoJ2NvZGUnIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBqdWJpID0ge1xuXG4gICAgJ2lkJzogJ2p1YmknLFxuICAgICduYW1lJzogJ2p1YmkuY29tJyxcbiAgICAnY291bnRyaWVzJzogJ0NOJyxcbiAgICAncmF0ZUxpbWl0JzogMTUwMCxcbiAgICAndmVyc2lvbic6ICd2MScsXG4gICAgJ2hhc0ZldGNoVGlja2Vycyc6IHRydWUsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc3NjY1ODEtOWQzOTdkOWEtNWVkZC0xMWU3LThmYjktNWQ4MjM2YzBlNjkyLmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly93d3cuanViaS5jb20vYXBpJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy5qdWJpLmNvbScsXG4gICAgICAgICdkb2MnOiAnaHR0cHM6Ly93d3cuanViaS5jb20vaGVscC9hcGkuaHRtbCcsXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnZGVwdGgnLFxuICAgICAgICAgICAgICAgICdvcmRlcnMnLFxuICAgICAgICAgICAgICAgICd0aWNrZXInLFxuICAgICAgICAgICAgICAgICdhbGx0aWNrZXInLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnYmFsYW5jZScsXG4gICAgICAgICAgICAgICAgJ3RyYWRlX2FkZCcsXG4gICAgICAgICAgICAgICAgJ3RyYWRlX2NhbmNlbCcsXG4gICAgICAgICAgICAgICAgJ3RyYWRlX2xpc3QnLFxuICAgICAgICAgICAgICAgICd0cmFkZV92aWV3JyxcbiAgICAgICAgICAgICAgICAnd2FsbGV0JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoTWFya2V0cyAoKSB7XG4gICAgICAgIGxldCBtYXJrZXRzID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRBbGx0aWNrZXIgKCk7XG4gICAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMgKG1hcmtldHMpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwga2V5cy5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgbGV0IGlkID0ga2V5c1twXTtcbiAgICAgICAgICAgIGxldCBiYXNlID0gaWQudG9VcHBlckNhc2UgKCk7XG4gICAgICAgICAgICBsZXQgcXVvdGUgPSAnQ05ZJztcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBiYXNlICsgJy8nICsgcXVvdGU7XG4gICAgICAgICAgICBiYXNlID0gdGhpcy5jb21tb25DdXJyZW5jeUNvZGUgKGJhc2UpO1xuICAgICAgICAgICAgcXVvdGUgPSB0aGlzLmNvbW1vbkN1cnJlbmN5Q29kZSAocXVvdGUpO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2ggKHtcbiAgICAgICAgICAgICAgICAnaWQnOiBpZCxcbiAgICAgICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgICAgICdiYXNlJzogYmFzZSxcbiAgICAgICAgICAgICAgICAncXVvdGUnOiBxdW90ZSxcbiAgICAgICAgICAgICAgICAnaW5mbyc6IGlkLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdEJhbGFuY2UgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogYmFsYW5jZXMgfTtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCB0aGlzLmN1cnJlbmNpZXMubGVuZ3RoOyBjKyspIHtcbiAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IHRoaXMuY3VycmVuY2llc1tjXTtcbiAgICAgICAgICAgIGxldCBsb3dlcmNhc2UgPSBjdXJyZW5jeS50b0xvd2VyQ2FzZSAoKTtcbiAgICAgICAgICAgIGlmIChsb3dlcmNhc2UgPT0gJ2Rhc2gnKVxuICAgICAgICAgICAgICAgIGxvd2VyY2FzZSA9ICdkcmsnO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGxldCBmcmVlID0gbG93ZXJjYXNlICsgJ19iYWxhbmNlJztcbiAgICAgICAgICAgIGxldCB1c2VkID0gbG93ZXJjYXNlICsgJ19sb2NrJztcbiAgICAgICAgICAgIGlmIChmcmVlIGluIGJhbGFuY2VzKVxuICAgICAgICAgICAgICAgIGFjY291bnRbJ2ZyZWUnXSA9IHBhcnNlRmxvYXQgKGJhbGFuY2VzW2ZyZWVdKTtcbiAgICAgICAgICAgIGlmICh1c2VkIGluIGJhbGFuY2VzKVxuICAgICAgICAgICAgICAgIGFjY291bnRbJ3VzZWQnXSA9IHBhcnNlRmxvYXQgKGJhbGFuY2VzW3VzZWRdKTtcbiAgICAgICAgICAgIGFjY291bnRbJ3RvdGFsJ10gPSB0aGlzLnN1bSAoYWNjb3VudFsnZnJlZSddLCBhY2NvdW50Wyd1c2VkJ10pO1xuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IGF3YWl0IHRoaXMucHVibGljR2V0RGVwdGggKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnY29pbic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IG9yZGVyYm9va1snYmlkcyddLFxuICAgICAgICAgICAgJ2Fza3MnOiBvcmRlcmJvb2tbJ2Fza3MnXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIHJlc3VsdFsnYXNrcyddID0gdGhpcy5zb3J0QnkgKHJlc3VsdFsnYXNrcyddLCAwKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgcGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KSB7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2J1eSddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3NlbGwnXSksXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xhc3QnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWyd2b2wnXSksXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbHVtZSddKSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlcnMgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgdGlja2VycyA9IGF3YWl0IHRoaXMucHVibGljR2V0QWxsdGlja2VyICgpO1xuICAgICAgICBsZXQgaWRzID0gT2JqZWN0LmtleXMgKHRpY2tlcnMpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge307XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgaWQgPSBpZHNbaV07XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gdGhpcy5tYXJrZXRzX2J5X2lkW2lkXTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBtYXJrZXRbJ3N5bWJvbCddO1xuICAgICAgICAgICAgbGV0IHRpY2tlciA9IHRpY2tlcnNbaWRdO1xuICAgICAgICAgICAgcmVzdWx0W3N5bWJvbF0gPSB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIG1hcmtldCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgdGlja2VyID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRUaWNrZXIgKHtcbiAgICAgICAgICAgICdjb2luJzogcFsnaWQnXSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIHApO1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wdWJsaWNHZXRPcmRlcnMgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnY29pbic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0VHJhZGVBZGQgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnYW1vdW50JzogYW1vdW50LFxuICAgICAgICAgICAgJ3ByaWNlJzogcHJpY2UsXG4gICAgICAgICAgICAndHlwZSc6IHNpZGUsXG4gICAgICAgICAgICAnY29pbic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXNwb25zZSxcbiAgICAgICAgICAgICdpZCc6IHJlc3BvbnNlWydpZCddLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVEZWxldGVXYWxsZXRzV2FsbGV0SWRPcmRlcnNJZCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArICcvJyArIHRoaXMudmVyc2lvbiArICcvJyArIHBhdGg7XG4gICAgICAgIGlmIChhcGkgPT0gJ3B1YmxpYycpIHtcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyAocGFyYW1zKS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChwYXJhbXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG5vbmNlID0gdGhpcy5ub25jZSAoKS50b1N0cmluZyAoKTtcbiAgICAgICAgICAgIGxldCBxdWVyeSA9IHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAgICAgJ2tleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgICAgICdub25jZSc6IG5vbmNlLFxuICAgICAgICAgICAgfSwgcGFyYW1zKTtcbiAgICAgICAgICAgIGxldCByZXF1ZXN0ID0gdGhpcy51cmxlbmNvZGUgKHF1ZXJ5KTtcbiAgICAgICAgICAgIGxldCBzZWNyZXQgPSB0aGlzLmhhc2ggKHRoaXMuZW5jb2RlICh0aGlzLnNlY3JldCkpO1xuICAgICAgICAgICAgcXVlcnlbJ3NpZ25hdHVyZSddID0gdGhpcy5obWFjICh0aGlzLmVuY29kZSAocmVxdWVzdCksIHRoaXMuZW5jb2RlIChzZWNyZXQpKTtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtTGVuZ3RoJzogYm9keS5sZW5ndGgsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdyZXN1bHQnIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgaWYgKCFyZXNwb25zZVsncmVzdWx0J10pXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBrcmFrZW4gaXMgYWxzbyBvd25lciBvZiBleC4gQ29pbnNldHRlciAvIENhVmlydEV4IC8gQ2xldmVyY29pblxuXG52YXIga3Jha2VuID0ge1xuXG4gICAgJ2lkJzogJ2tyYWtlbicsXG4gICAgJ25hbWUnOiAnS3Jha2VuJyxcbiAgICAnY291bnRyaWVzJzogJ1VTJyxcbiAgICAndmVyc2lvbic6ICcwJyxcbiAgICAncmF0ZUxpbWl0JzogMTUwMCxcbiAgICAnaGFzRmV0Y2hUaWNrZXJzJzogdHJ1ZSxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yNzc2NjU5OS0yMjcwOTMwNC01ZWRlLTExZTctOWRlMS05ZjMzNzMyZTE1MDkuanBnJyxcbiAgICAgICAgJ2FwaSc6ICdodHRwczovL2FwaS5rcmFrZW4uY29tJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy5rcmFrZW4uY29tJyxcbiAgICAgICAgJ2RvYyc6IFtcbiAgICAgICAgICAgICdodHRwczovL3d3dy5rcmFrZW4uY29tL2VuLXVzL2hlbHAvYXBpJyxcbiAgICAgICAgICAgICdodHRwczovL2dpdGh1Yi5jb20vbm90aGluZ2lzZGVhZC9ucG0ta3Jha2VuLWFwaScsXG4gICAgICAgIF0sXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnQXNzZXRzJyxcbiAgICAgICAgICAgICAgICAnQXNzZXRQYWlycycsXG4gICAgICAgICAgICAgICAgJ0RlcHRoJyxcbiAgICAgICAgICAgICAgICAnT0hMQycsXG4gICAgICAgICAgICAgICAgJ1NwcmVhZCcsXG4gICAgICAgICAgICAgICAgJ1RpY2tlcicsXG4gICAgICAgICAgICAgICAgJ1RpbWUnLFxuICAgICAgICAgICAgICAgICdUcmFkZXMnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnQWRkT3JkZXInLFxuICAgICAgICAgICAgICAgICdCYWxhbmNlJyxcbiAgICAgICAgICAgICAgICAnQ2FuY2VsT3JkZXInLFxuICAgICAgICAgICAgICAgICdDbG9zZWRPcmRlcnMnLFxuICAgICAgICAgICAgICAgICdEZXBvc2l0QWRkcmVzc2VzJyxcbiAgICAgICAgICAgICAgICAnRGVwb3NpdE1ldGhvZHMnLFxuICAgICAgICAgICAgICAgICdEZXBvc2l0U3RhdHVzJyxcbiAgICAgICAgICAgICAgICAnTGVkZ2VycycsXG4gICAgICAgICAgICAgICAgJ09wZW5PcmRlcnMnLFxuICAgICAgICAgICAgICAgICdPcGVuUG9zaXRpb25zJyxcbiAgICAgICAgICAgICAgICAnUXVlcnlMZWRnZXJzJyxcbiAgICAgICAgICAgICAgICAnUXVlcnlPcmRlcnMnLFxuICAgICAgICAgICAgICAgICdRdWVyeVRyYWRlcycsXG4gICAgICAgICAgICAgICAgJ1RyYWRlQmFsYW5jZScsXG4gICAgICAgICAgICAgICAgJ1RyYWRlc0hpc3RvcnknLFxuICAgICAgICAgICAgICAgICdUcmFkZVZvbHVtZScsXG4gICAgICAgICAgICAgICAgJ1dpdGhkcmF3JyxcbiAgICAgICAgICAgICAgICAnV2l0aGRyYXdDYW5jZWwnLFxuICAgICAgICAgICAgICAgICdXaXRoZHJhd0luZm8nLFxuICAgICAgICAgICAgICAgICdXaXRoZHJhd1N0YXR1cycsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE1hcmtldHMgKCkge1xuICAgICAgICBsZXQgbWFya2V0cyA9IGF3YWl0IHRoaXMucHVibGljR2V0QXNzZXRQYWlycyAoKTtcbiAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyAobWFya2V0c1sncmVzdWx0J10pO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwga2V5cy5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgbGV0IGlkID0ga2V5c1twXTtcbiAgICAgICAgICAgIGxldCBtYXJrZXQgPSBtYXJrZXRzWydyZXN1bHQnXVtpZF07XG4gICAgICAgICAgICBsZXQgYmFzZSA9IG1hcmtldFsnYmFzZSddO1xuICAgICAgICAgICAgbGV0IHF1b3RlID0gbWFya2V0WydxdW90ZSddO1xuICAgICAgICAgICAgaWYgKChiYXNlWzBdID09ICdYJykgfHwgKGJhc2VbMF0gPT0gJ1onKSlcbiAgICAgICAgICAgICAgICBiYXNlID0gYmFzZS5zbGljZSAoMSk7XG4gICAgICAgICAgICBpZiAoKHF1b3RlWzBdID09ICdYJykgfHwgKHF1b3RlWzBdID09ICdaJykpXG4gICAgICAgICAgICAgICAgcXVvdGUgPSBxdW90ZS5zbGljZSAoMSk7XG4gICAgICAgICAgICBiYXNlID0gdGhpcy5jb21tb25DdXJyZW5jeUNvZGUgKGJhc2UpO1xuICAgICAgICAgICAgcXVvdGUgPSB0aGlzLmNvbW1vbkN1cnJlbmN5Q29kZSAocXVvdGUpO1xuICAgICAgICAgICAgbGV0IGRhcmtwb29sID0gaWQuaW5kZXhPZiAoJy5kJykgPj0gMDtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBkYXJrcG9vbCA/IG1hcmtldFsnYWx0bmFtZSddIDogKGJhc2UgKyAnLycgKyBxdW90ZSk7XG4gICAgICAgICAgICByZXN1bHQucHVzaCAoe1xuICAgICAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICAgICAgICAgICdzeW1ib2wnOiBzeW1ib2wsXG4gICAgICAgICAgICAgICAgJ2Jhc2UnOiBiYXNlLFxuICAgICAgICAgICAgICAgICdxdW90ZSc6IHF1b3RlLFxuICAgICAgICAgICAgICAgICdkYXJrcG9vbCc6IGRhcmtwb29sLFxuICAgICAgICAgICAgICAgICdpbmZvJzogbWFya2V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IGRhcmtwb29sID0gbWFya2V0LmluZGV4T2YgKCcuZCcpID49IDA7XG4gICAgICAgIGlmIChkYXJrcG9vbClcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyBkb2VzIG5vdCBwcm92aWRlIGFuIG9yZGVyIGJvb2sgZm9yIGRhcmtwb29sIHN5bWJvbCAnICsgbWFya2V0KTtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXREZXB0aCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdwYWlyJzogcFsnaWQnXSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSByZXNwb25zZVsncmVzdWx0J11bcFsnaWQnXV07XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdiaWRzJzogW10sXG4gICAgICAgICAgICAnYXNrcyc6IFtdLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHNpZGVzID0gWyAnYmlkcycsICdhc2tzJyBdO1xuICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IHNpZGVzLmxlbmd0aDsgcysrKSB7XG4gICAgICAgICAgICBsZXQgc2lkZSA9IHNpZGVzW3NdO1xuICAgICAgICAgICAgbGV0IG9yZGVycyA9IG9yZGVyYm9va1tzaWRlXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9yZGVyID0gb3JkZXJzW2ldO1xuICAgICAgICAgICAgICAgIGxldCBwcmljZSA9IHBhcnNlRmxvYXQgKG9yZGVyWzBdKTtcbiAgICAgICAgICAgICAgICBsZXQgYW1vdW50ID0gcGFyc2VGbG9hdCAob3JkZXJbMV0pO1xuICAgICAgICAgICAgICAgIGxldCB0aW1lc3RhbXAgPSBvcmRlclsyXSAqIDEwMDA7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3NpZGVdLnB1c2ggKFsgcHJpY2UsIGFtb3VudCwgdGltZXN0YW1wIF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIHBhcnNlVGlja2VyICh0aWNrZXIsIG1hcmtldCkge1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2gnXVsxXSksXG4gICAgICAgICAgICAnbG93JzogcGFyc2VGbG9hdCAodGlja2VyWydsJ11bMV0pLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYiddWzBdKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2EnXVswXSksXG4gICAgICAgICAgICAndndhcCc6IHBhcnNlRmxvYXQgKHRpY2tlclsncCddWzFdKSxcbiAgICAgICAgICAgICdvcGVuJzogcGFyc2VGbG9hdCAodGlja2VyWydvJ10pLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2MnXVswXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWyd2J11bMV0pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VycyAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBwYWlycyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IHRoaXMuc3ltYm9scy5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgbGV0IHN5bWJvbCA9IHRoaXMuc3ltYm9sc1tzXTtcbiAgICAgICAgICAgIGxldCBtYXJrZXQgPSB0aGlzLm1hcmtldHNbc3ltYm9sXTtcbiAgICAgICAgICAgIGlmICghbWFya2V0WydkYXJrcG9vbCddKVxuICAgICAgICAgICAgICAgIHBhaXJzLnB1c2ggKG1hcmtldFsnaWQnXSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGZpbHRlciA9IHBhaXJzLmpvaW4gKCcsJyk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0VGlja2VyICh7XG4gICAgICAgICAgICAncGFpcic6IGZpbHRlcixcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aWNrZXJzID0gcmVzcG9uc2VbJ3Jlc3VsdCddO1xuICAgICAgICBsZXQgaWRzID0gT2JqZWN0LmtleXMgKHRpY2tlcnMpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge307XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgaWQgPSBpZHNbaV07XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gdGhpcy5tYXJrZXRzX2J5X2lkW2lkXTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBtYXJrZXRbJ3N5bWJvbCddO1xuICAgICAgICAgICAgbGV0IHRpY2tlciA9IHRpY2tlcnNbaWRdO1xuICAgICAgICAgICAgcmVzdWx0W3N5bWJvbF0gPSB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIG1hcmtldCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgZGFya3Bvb2wgPSBtYXJrZXQuaW5kZXhPZiAoJy5kJykgPj0gMDtcbiAgICAgICAgaWYgKGRhcmtwb29sKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnIGRvZXMgbm90IHByb3ZpZGUgYSB0aWNrZXIgZm9yIGRhcmtwb29sIHN5bWJvbCAnICsgbWFya2V0KTtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRUaWNrZXIgKHtcbiAgICAgICAgICAgICdwYWlyJzogcFsnaWQnXSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aWNrZXIgPSByZXNwb25zZVsncmVzdWx0J11bcFsnaWQnXV07XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIHApO1xuICAgIH0sXG5cbiAgICBwYXJzZVRyYWRlICh0cmFkZSwgbWFya2V0KSB7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSBwYXJzZUludCAodHJhZGVbMl0gKiAxMDAwKTtcbiAgICAgICAgbGV0IHNpZGUgPSAodHJhZGVbM10gPT0gJ3MnKSA/ICdzZWxsJyA6ICdidXknO1xuICAgICAgICBsZXQgdHlwZSA9ICh0cmFkZVs0XSA9PSAnbCcpID8gJ2xpbWl0JyA6ICdtYXJrZXQnO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiB0cmFkZSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnc3ltYm9sJzogbWFya2V0WydzeW1ib2wnXSxcbiAgICAgICAgICAgICd0eXBlJzogdHlwZSxcbiAgICAgICAgICAgICdzaWRlJzogc2lkZSxcbiAgICAgICAgICAgICdwcmljZSc6IHBhcnNlRmxvYXQgKHRyYWRlWzBdKSxcbiAgICAgICAgICAgICdhbW91bnQnOiBwYXJzZUZsb2F0ICh0cmFkZVsxXSksXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIHBhcnNlT0hMQ1YgKG9obGN2LCBtYXJrZXQgPSB1bmRlZmluZWQsIHRpbWVmcmFtZSA9IDYwLCBzaW5jZSA9IHVuZGVmaW5lZCwgbGltaXQgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG9obGN2WzBdLFxuICAgICAgICAgICAgb2hsY3ZbMV0sXG4gICAgICAgICAgICBvaGxjdlsyXSxcbiAgICAgICAgICAgIG9obGN2WzNdLFxuICAgICAgICAgICAgb2hsY3ZbNF0sXG4gICAgICAgICAgICBvaGxjdls2XSxcbiAgICAgICAgXTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPSExDViAobWFya2V0LCB0aW1lZnJhbWUgPSA2MCwgc2luY2UgPSB1bmRlZmluZWQsIGxpbWl0ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCBtID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0T0hMQyAoe1xuICAgICAgICAgICAgJ3BhaXInOiBtWydpZCddLFxuICAgICAgICAgICAgJ2ludGVydmFsJzogcGFyc2VJbnQgKHRpbWVmcmFtZSAvIDYwKSxcbiAgICAgICAgICAgICdzaW5jZSc6IHNpbmNlLFxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IG9obGN2cyA9IHJlc3BvbnNlW21bJ2lkJ11dO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZU9ITENWcyAobSwgb2hsY3ZzLCB0aW1lZnJhbWUsIHNpbmNlLCBsaW1pdCk7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBtID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCBpZCA9IG1bJ2lkJ107XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0VHJhZGVzICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ3BhaXInOiBpZCxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCB0cmFkZXMgPSByZXNwb25zZVsncmVzdWx0J11baWRdO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVRyYWRlcyAodHJhZGVzLCBtKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdEJhbGFuY2UgKCk7XG4gICAgICAgIGxldCBiYWxhbmNlcyA9IHJlc3BvbnNlWydyZXN1bHQnXTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiBiYWxhbmNlcyB9O1xuICAgICAgICBsZXQgY3VycmVuY2llcyA9IE9iamVjdC5rZXlzIChiYWxhbmNlcyk7XG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgY3VycmVuY2llcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gY3VycmVuY2llc1tjXTtcbiAgICAgICAgICAgIGxldCBjb2RlID0gY3VycmVuY3k7XG4gICAgICAgICAgICAvLyBYLUlTTzQyMTctQTMgc3RhbmRhcmQgY3VycmVuY3kgY29kZXNcbiAgICAgICAgICAgIGlmIChjb2RlWzBdID09ICdYJykge1xuICAgICAgICAgICAgICAgIGNvZGUgPSBjb2RlLnNsaWNlICgxKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29kZVswXSA9PSAnWicpIHtcbiAgICAgICAgICAgICAgICBjb2RlID0gY29kZS5zbGljZSAoMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb2RlID0gdGhpcy5jb21tb25DdXJyZW5jeUNvZGUgKGNvZGUpO1xuICAgICAgICAgICAgbGV0IGJhbGFuY2UgPSBwYXJzZUZsb2F0IChiYWxhbmNlc1tjdXJyZW5jeV0pO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiBiYWxhbmNlLFxuICAgICAgICAgICAgICAgICd1c2VkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IGJhbGFuY2UsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVzdWx0W2NvZGVdID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAncGFpcic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgICAgICAndHlwZSc6IHNpZGUsXG4gICAgICAgICAgICAnb3JkZXJ0eXBlJzogdHlwZSxcbiAgICAgICAgICAgICd2b2x1bWUnOiBhbW91bnQsXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlID09ICdsaW1pdCcpXG4gICAgICAgICAgICBvcmRlclsncHJpY2UnXSA9IHByaWNlO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0QWRkT3JkZXIgKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIGxldCBsZW5ndGggPSByZXNwb25zZVsncmVzdWx0J11bJ3R4aWQnXS5sZW5ndGg7XG4gICAgICAgIGxldCBpZCA9IChsZW5ndGggPiAxKSA/IHJlc3BvbnNlWydyZXN1bHQnXVsndHhpZCddIDogcmVzcG9uc2VbJ3Jlc3VsdCddWyd0eGlkJ11bMF07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdENhbmNlbE9yZGVyICh7ICd0eGlkJzogaWQgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9ICcvJyArIHRoaXMudmVyc2lvbiArICcvJyArIGFwaSArICcvJyArIHBhdGg7XG4gICAgICAgIGlmIChhcGkgPT0gJ3B1YmxpYycpIHtcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyAocGFyYW1zKS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChwYXJhbXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG5vbmNlID0gdGhpcy5ub25jZSAoKS50b1N0cmluZyAoKTtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLnVybGVuY29kZSAodGhpcy5leHRlbmQgKHsgJ25vbmNlJzogbm9uY2UgfSwgcGFyYW1zKSk7XG4gICAgICAgICAgICBsZXQgYXV0aCA9IHRoaXMuZW5jb2RlIChub25jZSArIGJvZHkpO1xuICAgICAgICAgICAgbGV0IGhhc2ggPSB0aGlzLmhhc2ggKGF1dGgsICdzaGEyNTYnLCAnYmluYXJ5Jyk7XG4gICAgICAgICAgICBsZXQgYmluYXJ5ID0gdGhpcy5zdHJpbmdUb0JpbmFyeSAodGhpcy5lbmNvZGUgKHVybCkpO1xuICAgICAgICAgICAgbGV0IGJpbmhhc2ggPSB0aGlzLmJpbmFyeUNvbmNhdCAoYmluYXJ5LCBoYXNoKTtcbiAgICAgICAgICAgIGxldCBzZWNyZXQgPSB0aGlzLmJhc2U2NFRvQmluYXJ5ICh0aGlzLnNlY3JldCk7XG4gICAgICAgICAgICBsZXQgc2lnbmF0dXJlID0gdGhpcy5obWFjIChiaW5oYXNoLCBzZWNyZXQsICdzaGE1MTInLCAnYmFzZTY0Jyk7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdBUEktS2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ0FQSS1TaWduJzogdGhpcy5kZWNvZGUgKHNpZ25hdHVyZSksXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgdXJsO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgICAgIGlmICgnZXJyb3InIGluIHJlc3BvbnNlKSB7XG4gICAgICAgICAgICBsZXQgbnVtRXJyb3JzID0gcmVzcG9uc2VbJ2Vycm9yJ10ubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKG51bUVycm9ycylcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgJyArIHRoaXMuanNvbiAocmVzcG9uc2UpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgbGFrZWJ0YyA9IHtcblxuICAgICdpZCc6ICdsYWtlYnRjJyxcbiAgICAnbmFtZSc6ICdMYWtlQlRDJyxcbiAgICAnY291bnRyaWVzJzogJ1VTJyxcbiAgICAndmVyc2lvbic6ICdhcGlfdjInLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI4MDc0MTIwLTcyYjdjMzhhLTY2NjAtMTFlNy05MmQ5LWQ5MDI3NTAyMjgxZC5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vYXBpLmxha2VidGMuY29tJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy5sYWtlYnRjLmNvbScsXG4gICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAnaHR0cHM6Ly93d3cubGFrZWJ0Yy5jb20vcy9hcGknLFxuICAgICAgICAgICAgJ2h0dHBzOi8vd3d3Lmxha2VidGMuY29tL3MvYXBpX3YyJyxcbiAgICAgICAgXSxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdiY29yZGVyYm9vaycsXG4gICAgICAgICAgICAgICAgJ2JjdHJhZGVzJyxcbiAgICAgICAgICAgICAgICAndGlja2VyJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2J1eU9yZGVyJyxcbiAgICAgICAgICAgICAgICAnY2FuY2VsT3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnZ2V0QWNjb3VudEluZm8nLFxuICAgICAgICAgICAgICAgICdnZXRFeHRlcm5hbEFjY291bnRzJyxcbiAgICAgICAgICAgICAgICAnZ2V0T3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnZ2V0VHJhZGVzJyxcbiAgICAgICAgICAgICAgICAnb3Blbk9yZGVycycsXG4gICAgICAgICAgICAgICAgJ3NlbGxPcmRlcicsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE1hcmtldHMgKCkge1xuICAgICAgICBsZXQgbWFya2V0cyA9IGF3YWl0IHRoaXMucHVibGljR2V0VGlja2VyICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMgKG1hcmtldHMpO1xuICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGtleXMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgIGxldCBpZCA9IGtleXNba107XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gbWFya2V0c1tpZF07XG4gICAgICAgICAgICBsZXQgYmFzZSA9IGlkLnNsaWNlICgwLCAzKTtcbiAgICAgICAgICAgIGxldCBxdW90ZSA9IGlkLnNsaWNlICgzLCA2KTtcbiAgICAgICAgICAgIGJhc2UgPSBiYXNlLnRvVXBwZXJDYXNlICgpO1xuICAgICAgICAgICAgcXVvdGUgPSBxdW90ZS50b1VwcGVyQ2FzZSAoKTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBiYXNlICsgJy8nICsgcXVvdGU7XG4gICAgICAgICAgICByZXN1bHQucHVzaCAoe1xuICAgICAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICAgICAgICAgICdzeW1ib2wnOiBzeW1ib2wsXG4gICAgICAgICAgICAgICAgJ2Jhc2UnOiBiYXNlLFxuICAgICAgICAgICAgICAgICdxdW90ZSc6IHF1b3RlLFxuICAgICAgICAgICAgICAgICdpbmZvJzogbWFya2V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdEdldEFjY291bnRJbmZvICgpO1xuICAgICAgICBsZXQgYmFsYW5jZXMgPSByZXNwb25zZVsnYmFsYW5jZSddO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IHJlc3BvbnNlIH07XG4gICAgICAgIGxldCBjdXJyZW5jaWVzID0gT2JqZWN0LmtleXMgKGJhbGFuY2VzKTtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBjdXJyZW5jaWVzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBjdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IGJhbGFuY2UgPSBwYXJzZUZsb2F0IChiYWxhbmNlc1tjdXJyZW5jeV0pO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiBiYWxhbmNlLFxuICAgICAgICAgICAgICAgICd1c2VkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IGJhbGFuY2UsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IGF3YWl0IHRoaXMucHVibGljR2V0QmNvcmRlcmJvb2sgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnc3ltYm9sJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdiaWRzJzogW10sXG4gICAgICAgICAgICAnYXNrcyc6IFtdLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHNpZGVzID0gWyAnYmlkcycsICdhc2tzJyBdO1xuICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IHNpZGVzLmxlbmd0aDsgcysrKSB7XG4gICAgICAgICAgICBsZXQgc2lkZSA9IHNpZGVzW3NdO1xuICAgICAgICAgICAgbGV0IG9yZGVycyA9IG9yZGVyYm9va1tzaWRlXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9yZGVyID0gb3JkZXJzW2ldO1xuICAgICAgICAgICAgICAgIGxldCBwcmljZSA9IHBhcnNlRmxvYXQgKG9yZGVyWzBdKTtcbiAgICAgICAgICAgICAgICBsZXQgYW1vdW50ID0gcGFyc2VGbG9hdCAob3JkZXJbMV0pO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtzaWRlXS5wdXNoIChbIHByaWNlLCBhbW91bnQgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgdGlja2VycyA9IGF3YWl0IHRoaXMucHVibGljR2V0VGlja2VyICh7XG4gICAgICAgICAgICAnc3ltYm9sJzogcFsnaWQnXSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aWNrZXIgPSB0aWNrZXJzW3BbJ2lkJ11dO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2hpZ2gnXSksXG4gICAgICAgICAgICAnbG93JzogcGFyc2VGbG9hdCAodGlja2VyWydsb3cnXSksXG4gICAgICAgICAgICAnYmlkJzogcGFyc2VGbG9hdCAodGlja2VyWydiaWQnXSksXG4gICAgICAgICAgICAnYXNrJzogcGFyc2VGbG9hdCAodGlja2VyWydhc2snXSksXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xhc3QnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWyd2b2x1bWUnXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0QmN0cmFkZXMgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnc3ltYm9sJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGlmICh0eXBlID09ICdtYXJrZXQnKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnIGFsbG93cyBsaW1pdCBvcmRlcnMgb25seScpO1xuICAgICAgICBsZXQgbWV0aG9kID0gJ3ByaXZhdGVQb3N0JyArIHRoaXMuY2FwaXRhbGl6ZSAoc2lkZSkgKyAnT3JkZXInO1xuICAgICAgICBsZXQgbWFya2V0SWQgPSB0aGlzLm1hcmtldElkIChtYXJrZXQpO1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAncGFyYW1zJzogWyBwcmljZSwgYW1vdW50LCBtYXJrZXRJZCBdLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzW21ldGhvZF0gKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ2lkJzogcmVzcG9uc2VbJ2lkJ10udG9TdHJpbmcgKCksXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdENhbmNlbE9yZGVyICh7ICdwYXJhbXMnOiBpZCB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArICcvJyArIHRoaXMudmVyc2lvbjtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgdXJsICs9ICcvJyArIHBhdGg7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHBhcmFtcykubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocGFyYW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCk7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHBhcmFtcykubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHBhcmFtcyA9IHBhcmFtcy5qb2luICgnLCcpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHBhcmFtcyA9ICcnO1xuICAgICAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy51cmxlbmNvZGUgKHtcbiAgICAgICAgICAgICAgICAndG9uY2UnOiBub25jZSxcbiAgICAgICAgICAgICAgICAnYWNjZXNza2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ3JlcXVlc3RtZXRob2QnOiBtZXRob2QudG9Mb3dlckNhc2UgKCksXG4gICAgICAgICAgICAgICAgJ2lkJzogbm9uY2UsXG4gICAgICAgICAgICAgICAgJ21ldGhvZCc6IHBhdGgsXG4gICAgICAgICAgICAgICAgJ3BhcmFtcyc6IHBhcmFtcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYm9keSA9IHRoaXMuanNvbiAoe1xuICAgICAgICAgICAgICAgICdtZXRob2QnOiBwYXRoLFxuICAgICAgICAgICAgICAgICdwYXJhbXMnOiBwYXJhbXMsXG4gICAgICAgICAgICAgICAgJ2lkJzogbm9uY2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxldCBzaWduYXR1cmUgPSB0aGlzLmhtYWMgKHRoaXMuZW5jb2RlIChxdWVyeSksIHRoaXMuc2VjcmV0LCAnc2hhMScsICdiYXNlNjQnKTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0pzb24tUnBjLVRvbmNlJzogbm9uY2UsXG4gICAgICAgICAgICAgICAgJ0F1dGhvcml6YXRpb24nOiBcIkJhc2ljIFwiICsgdGhpcy5hcGlLZXkgKyAnOicgKyBzaWduYXR1cmUsXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtTGVuZ3RoJzogYm9keS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgICAgICBpZiAoJ2Vycm9yJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgbGl2ZWNvaW4gPSB7XG5cbiAgICAnaWQnOiAnbGl2ZWNvaW4nLFxuICAgICduYW1lJzogJ0xpdmVDb2luJyxcbiAgICAnY291bnRyaWVzJzogWyAnVVMnLCAnVUsnLCAnUlUnIF0sXG4gICAgJ3JhdGVMaW1pdCc6IDEwMDAsXG4gICAgJ2hhc0ZldGNoVGlja2Vycyc6IHRydWUsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc5ODA3NjgtZjIyZmM0MjQtNjM4YS0xMWU3LTg5YzktNjAxMGE1NGZmOWJlLmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly9hcGkubGl2ZWNvaW4ubmV0JyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy5saXZlY29pbi5uZXQnLFxuICAgICAgICAnZG9jJzogJ2h0dHBzOi8vd3d3LmxpdmVjb2luLm5ldC9hcGk/bGFuZz1lbicsXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnZXhjaGFuZ2UvYWxsL29yZGVyX2Jvb2snLFxuICAgICAgICAgICAgICAgICdleGNoYW5nZS9sYXN0X3RyYWRlcycsXG4gICAgICAgICAgICAgICAgJ2V4Y2hhbmdlL21heGJpZF9taW5hc2snLFxuICAgICAgICAgICAgICAgICdleGNoYW5nZS9vcmRlcl9ib29rJyxcbiAgICAgICAgICAgICAgICAnZXhjaGFuZ2UvcmVzdHJpY3Rpb25zJyxcbiAgICAgICAgICAgICAgICAnZXhjaGFuZ2UvdGlja2VyJywgLy8gb21pdCBwYXJhbXMgdG8gZ2V0IGFsbCB0aWNrZXJzIGF0IG9uY2VcbiAgICAgICAgICAgICAgICAnaW5mby9jb2luSW5mbycsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAncHJpdmF0ZSc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ2V4Y2hhbmdlL2NsaWVudF9vcmRlcnMnLFxuICAgICAgICAgICAgICAgICdleGNoYW5nZS9vcmRlcicsXG4gICAgICAgICAgICAgICAgJ2V4Y2hhbmdlL3RyYWRlcycsXG4gICAgICAgICAgICAgICAgJ2V4Y2hhbmdlL2NvbW1pc3Npb24nLFxuICAgICAgICAgICAgICAgICdleGNoYW5nZS9jb21taXNzaW9uQ29tbW9uSW5mbycsXG4gICAgICAgICAgICAgICAgJ3BheW1lbnQvYmFsYW5jZXMnLFxuICAgICAgICAgICAgICAgICdwYXltZW50L2JhbGFuY2UnLFxuICAgICAgICAgICAgICAgICdwYXltZW50L2dldC9hZGRyZXNzJyxcbiAgICAgICAgICAgICAgICAncGF5bWVudC9oaXN0b3J5L3NpemUnLFxuICAgICAgICAgICAgICAgICdwYXltZW50L2hpc3RvcnkvdHJhbnNhY3Rpb25zJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnZXhjaGFuZ2UvYnV5bGltaXQnLFxuICAgICAgICAgICAgICAgICdleGNoYW5nZS9idXltYXJrZXQnLFxuICAgICAgICAgICAgICAgICdleGNoYW5nZS9jYW5jZWxsaW1pdCcsXG4gICAgICAgICAgICAgICAgJ2V4Y2hhbmdlL3NlbGxsaW1pdCcsXG4gICAgICAgICAgICAgICAgJ2V4Y2hhbmdlL3NlbGxtYXJrZXQnLFxuICAgICAgICAgICAgICAgICdwYXltZW50L291dC9jYXBpdGFsaXN0JyxcbiAgICAgICAgICAgICAgICAncGF5bWVudC9vdXQvY2FyZCcsXG4gICAgICAgICAgICAgICAgJ3BheW1lbnQvb3V0L2NvaW4nLFxuICAgICAgICAgICAgICAgICdwYXltZW50L291dC9va3BheScsXG4gICAgICAgICAgICAgICAgJ3BheW1lbnQvb3V0L3BheWVlcicsXG4gICAgICAgICAgICAgICAgJ3BheW1lbnQvb3V0L3BlcmZlY3Rtb25leScsXG4gICAgICAgICAgICAgICAgJ3BheW1lbnQvdm91Y2hlci9hbW91bnQnLFxuICAgICAgICAgICAgICAgICdwYXltZW50L3ZvdWNoZXIvbWFrZScsXG4gICAgICAgICAgICAgICAgJ3BheW1lbnQvdm91Y2hlci9yZWRlZW0nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hNYXJrZXRzICgpIHtcbiAgICAgICAgbGV0IG1hcmtldHMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldEV4Y2hhbmdlVGlja2VyICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgbWFya2V0cy5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IG1hcmtldHNbcF07XG4gICAgICAgICAgICBsZXQgaWQgPSBtYXJrZXRbJ3N5bWJvbCddO1xuICAgICAgICAgICAgbGV0IHN5bWJvbCA9IGlkO1xuICAgICAgICAgICAgbGV0IFsgYmFzZSwgcXVvdGUgXSA9IHN5bWJvbC5zcGxpdCAoJy8nKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoICh7XG4gICAgICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgICAgICAgICAgJ3N5bWJvbCc6IHN5bWJvbCxcbiAgICAgICAgICAgICAgICAnYmFzZSc6IGJhc2UsXG4gICAgICAgICAgICAgICAgJ3F1b3RlJzogcXVvdGUsXG4gICAgICAgICAgICAgICAgJ2luZm8nOiBtYXJrZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgYmFsYW5jZXMgPSBhd2FpdCB0aGlzLnByaXZhdGVHZXRQYXltZW50QmFsYW5jZXMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogYmFsYW5jZXMgfTtcbiAgICAgICAgZm9yIChsZXQgYiA9IDA7IGIgPCB0aGlzLmN1cnJlbmNpZXMubGVuZ3RoOyBiKyspIHtcbiAgICAgICAgICAgIGxldCBiYWxhbmNlID0gYmFsYW5jZXNbYl07XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBiYWxhbmNlWydjdXJyZW5jeSddO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAoY3VycmVuY3kgaW4gcmVzdWx0KVxuICAgICAgICAgICAgICAgIGFjY291bnQgPSByZXN1bHRbY3VycmVuY3ldO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgICAgICdmcmVlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAndXNlZCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgJ3RvdGFsJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoYmFsYW5jZVsndHlwZSddID09ICd0b3RhbCcpXG4gICAgICAgICAgICAgICAgYWNjb3VudFsndG90YWwnXSA9IHBhcnNlRmxvYXQgKGJhbGFuY2VbJ3ZhbHVlJ10pO1xuICAgICAgICAgICAgaWYgKGJhbGFuY2VbJ3R5cGUnXSA9PSAnYXZhaWxhYmxlJylcbiAgICAgICAgICAgICAgICBhY2NvdW50WydmcmVlJ10gPSBwYXJzZUZsb2F0IChiYWxhbmNlWyd2YWx1ZSddKTtcbiAgICAgICAgICAgIGlmIChiYWxhbmNlWyd0eXBlJ10gPT0gJ3RyYWRlJylcbiAgICAgICAgICAgICAgICBhY2NvdW50Wyd1c2VkJ10gPSBwYXJzZUZsb2F0IChiYWxhbmNlWyd2YWx1ZSddKTtcbiAgICAgICAgICAgIHJlc3VsdFtjdXJyZW5jeV0gPSBhY2NvdW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSBhd2FpdCB0aGlzLnB1YmxpY0dldEV4Y2hhbmdlT3JkZXJCb29rICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2N1cnJlbmN5UGFpcic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgICAgICAnZ3JvdXBCeVByaWNlJzogJ2ZhbHNlJyxcbiAgICAgICAgICAgICdkZXB0aCc6IDEwMCxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSBvcmRlcmJvb2tbJ3RpbWVzdGFtcCddO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAob3JkZXJbMF0pO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBwYXJzZUZsb2F0IChvcmRlclsxXSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3NpZGVdLnB1c2ggKFsgcHJpY2UsIGFtb3VudCBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBwYXJzZVRpY2tlciAodGlja2VyLCBtYXJrZXQpIHtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydoaWdoJ10pLFxuICAgICAgICAgICAgJ2xvdyc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbG93J10pLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYmVzdF9iaWQnXSksXG4gICAgICAgICAgICAnYXNrJzogcGFyc2VGbG9hdCAodGlja2VyWydiZXN0X2FzayddKSxcbiAgICAgICAgICAgICd2d2FwJzogcGFyc2VGbG9hdCAodGlja2VyWyd2d2FwJ10pLFxuICAgICAgICAgICAgJ29wZW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdCddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbHVtZSddKSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlcnMgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldEV4Y2hhbmdlVGlja2VyICgpO1xuICAgICAgICBsZXQgdGlja2VycyA9IHRoaXMuaW5kZXhCeSAocmVzcG9uc2UsICdzeW1ib2wnKTtcbiAgICAgICAgbGV0IGlkcyA9IE9iamVjdC5rZXlzICh0aWNrZXJzKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHt9O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IGlkID0gaWRzW2ldO1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IHRoaXMubWFya2V0c19ieV9pZFtpZF07XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gbWFya2V0WydzeW1ib2wnXTtcbiAgICAgICAgICAgIGxldCB0aWNrZXIgPSB0aWNrZXJzW2lkXTtcbiAgICAgICAgICAgIHJlc3VsdFtzeW1ib2xdID0gdGhpcy5wYXJzZVRpY2tlciAodGlja2VyLCBtYXJrZXQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHRpY2tlciA9IGF3YWl0IHRoaXMucHVibGljR2V0RXhjaGFuZ2VUaWNrZXIgKHtcbiAgICAgICAgICAgICdjdXJyZW5jeVBhaXInOiBwWydpZCddLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VUaWNrZXIgKHRpY2tlciwgcCk7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldEV4Y2hhbmdlTGFzdFRyYWRlcyAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdjdXJyZW5jeVBhaXInOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG1ldGhvZCA9ICdwcml2YXRlUG9zdEV4Y2hhbmdlJyArIHRoaXMuY2FwaXRhbGl6ZSAoc2lkZSkgKyB0eXBlO1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAnY3VycmVuY3lQYWlyJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICdxdWFudGl0eSc6IGFtb3VudCxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHR5cGUgPT0gJ2xpbWl0JylcbiAgICAgICAgICAgIG9yZGVyWydwcmljZSddID0gcHJpY2U7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXNbbWV0aG9kXSAodGhpcy5leHRlbmQgKG9yZGVyLCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnaWQnXS50b1N0cmluZyAoKSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdEV4Y2hhbmdlQ2FuY2VsbGltaXQgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnb3JkZXJJZCc6IGlkLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArICcvJyArIHBhdGg7XG4gICAgICAgIGlmIChhcGkgPT0gJ3B1YmxpYycpIHtcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyAocGFyYW1zKS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChwYXJhbXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy51cmxlbmNvZGUgKHRoaXMua2V5c29ydCAocGFyYW1zKSk7XG4gICAgICAgICAgICBpZiAobWV0aG9kID09ICdHRVQnKVxuICAgICAgICAgICAgICAgIGlmIChxdWVyeSlcbiAgICAgICAgICAgICAgICAgICAgdXJsICs9ICc/JyArIHF1ZXJ5O1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGlmIChxdWVyeSlcbiAgICAgICAgICAgICAgICAgICAgYm9keSA9IHF1ZXJ5O1xuICAgICAgICAgICAgbGV0IHNpZ25hdHVyZSA9IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKHF1ZXJ5KSwgdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSwgJ3NoYTI1NicpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQXBpLUtleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgICAgICdTaWduJzogc2lnbmF0dXJlLnRvVXBwZXJDYXNlICgpLFxuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgICAgICBpZiAoJ3N1Y2Nlc3MnIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgaWYgKCFyZXNwb25zZVsnc3VjY2VzcyddKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgbGlxdWkgPSBleHRlbmQgKGJ0Y2UsIHtcbiAgICAnaWQnOiAnbGlxdWknLFxuICAgICduYW1lJzogJ0xpcXVpJyxcbiAgICAnY291bnRyaWVzJzogJ1VBJyxcbiAgICAncmF0ZUxpbWl0JzogMTAwMCxcbiAgICAndmVyc2lvbic6ICczJyxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yNzk4MjAyMi03NWFlYTgyOC02M2EwLTExZTctOTUxMS1jYTU4NGE4ZWRkNzQuanBnJyxcbiAgICAgICAgJ2FwaSc6IHtcbiAgICAgICAgICAgICdwdWJsaWMnOiAnaHR0cHM6Ly9hcGkubGlxdWkuaW8vYXBpJyxcbiAgICAgICAgICAgICdwcml2YXRlJzogJ2h0dHBzOi8vYXBpLmxpcXVpLmlvL3RhcGknLFxuICAgICAgICB9LFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vbGlxdWkuaW8nLFxuICAgICAgICAnZG9jJzogJ2h0dHBzOi8vbGlxdWkuaW8vYXBpJyxcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXVthcGldO1xuICAgICAgICBsZXQgcXVlcnkgPSB0aGlzLm9taXQgKHBhcmFtcywgdGhpcy5leHRyYWN0UGFyYW1zIChwYXRoKSk7XG4gICAgICAgIGlmIChhcGkgPT0gJ3B1YmxpYycpIHtcbiAgICAgICAgICAgIHVybCArPSAgJy8nICsgdGhpcy52ZXJzaW9uICsgJy8nICsgdGhpcy5pbXBsb2RlUGFyYW1zIChwYXRoLCBwYXJhbXMpO1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChxdWVyeSkubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG5vbmNlID0gdGhpcy5ub25jZSAoKTtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLnVybGVuY29kZSAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICAgICAnbm9uY2UnOiBub25jZSxcbiAgICAgICAgICAgICAgICAnbWV0aG9kJzogcGF0aCxcbiAgICAgICAgICAgIH0sIHF1ZXJ5KSk7XG4gICAgICAgICAgICBsZXQgc2lnbmF0dXJlID0gdGhpcy5obWFjICh0aGlzLmVuY29kZSAoYm9keSksIHRoaXMuZW5jb2RlICh0aGlzLnNlY3JldCksICdzaGE1MTInKTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgICAgICAgICdDb250ZW50LUxlbmd0aCc6IGJvZHkubGVuZ3RoLnRvU3RyaW5nICgpLFxuICAgICAgICAgICAgICAgICdLZXknOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgICAgICAnU2lnbic6IHNpZ25hdHVyZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgICAgICBpZiAoJ3N1Y2Nlc3MnIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgaWYgKCFyZXNwb25zZVsnc3VjY2VzcyddKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSxcbn0pXG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGx1bm8gPSB7XG5cbiAgICAnaWQnOiAnbHVubycsXG4gICAgJ25hbWUnOiAnbHVubycsXG4gICAgJ2NvdW50cmllcyc6IFsgJ0dCJywgJ1NHJywgJ1pBJyBdLFxuICAgICdyYXRlTGltaXQnOiAzMDAwLFxuICAgICd2ZXJzaW9uJzogJzEnLFxuICAgICdoYXNGZXRjaFRpY2tlcnMnOiB0cnVlLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2NjA3LThjMWE2OWQ4LTVlZGUtMTFlNy05MzBjLTU0MGI1ZWI5YmUyNC5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vYXBpLm15Yml0eC5jb20vYXBpJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy5sdW5vLmNvbScsXG4gICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAnaHR0cHM6Ly93d3cubHVuby5jb20vZW4vYXBpJyxcbiAgICAgICAgICAgICdodHRwczovL25wbWpzLm9yZy9wYWNrYWdlL2JpdHgnLFxuICAgICAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS9iYXVzbWVpZXIvbm9kZS1iaXR4JyxcbiAgICAgICAgXSxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdvcmRlcmJvb2snLFxuICAgICAgICAgICAgICAgICd0aWNrZXInLFxuICAgICAgICAgICAgICAgICd0aWNrZXJzJyxcbiAgICAgICAgICAgICAgICAndHJhZGVzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnYWNjb3VudHMve2lkfS9wZW5kaW5nJyxcbiAgICAgICAgICAgICAgICAnYWNjb3VudHMve2lkfS90cmFuc2FjdGlvbnMnLFxuICAgICAgICAgICAgICAgICdiYWxhbmNlJyxcbiAgICAgICAgICAgICAgICAnZmVlX2luZm8nLFxuICAgICAgICAgICAgICAgICdmdW5kaW5nX2FkZHJlc3MnLFxuICAgICAgICAgICAgICAgICdsaXN0b3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnbGlzdHRyYWRlcycsXG4gICAgICAgICAgICAgICAgJ29yZGVycy97aWR9JyxcbiAgICAgICAgICAgICAgICAncXVvdGVzL3tpZH0nLFxuICAgICAgICAgICAgICAgICd3aXRoZHJhd2FscycsXG4gICAgICAgICAgICAgICAgJ3dpdGhkcmF3YWxzL3tpZH0nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICdwb3N0JzogW1xuICAgICAgICAgICAgICAgICdhY2NvdW50cycsXG4gICAgICAgICAgICAgICAgJ3Bvc3RvcmRlcicsXG4gICAgICAgICAgICAgICAgJ21hcmtldG9yZGVyJyxcbiAgICAgICAgICAgICAgICAnc3RvcG9yZGVyJyxcbiAgICAgICAgICAgICAgICAnZnVuZGluZ19hZGRyZXNzJyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXdhbHMnLFxuICAgICAgICAgICAgICAgICdzZW5kJyxcbiAgICAgICAgICAgICAgICAncXVvdGVzJyxcbiAgICAgICAgICAgICAgICAnb2F1dGgyL2dyYW50JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAncHV0JzogW1xuICAgICAgICAgICAgICAgICdxdW90ZXMve2lkfScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ2RlbGV0ZSc6IFtcbiAgICAgICAgICAgICAgICAncXVvdGVzL3tpZH0nLFxuICAgICAgICAgICAgICAgICd3aXRoZHJhd2Fscy97aWR9JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoTWFya2V0cyAoKSB7XG4gICAgICAgIGxldCBtYXJrZXRzID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRUaWNrZXJzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgbWFya2V0c1sndGlja2VycyddLmxlbmd0aDsgcCsrKSB7XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gbWFya2V0c1sndGlja2VycyddW3BdO1xuICAgICAgICAgICAgbGV0IGlkID0gbWFya2V0WydwYWlyJ107XG4gICAgICAgICAgICBsZXQgYmFzZSA9IGlkLnNsaWNlICgwLCAzKTtcbiAgICAgICAgICAgIGxldCBxdW90ZSA9IGlkLnNsaWNlICgzLCA2KTtcbiAgICAgICAgICAgIGJhc2UgPSB0aGlzLmNvbW1vbkN1cnJlbmN5Q29kZSAoYmFzZSk7XG4gICAgICAgICAgICBxdW90ZSA9IHRoaXMuY29tbW9uQ3VycmVuY3lDb2RlIChxdW90ZSk7XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gYmFzZSArICcvJyArIHF1b3RlO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2ggKHtcbiAgICAgICAgICAgICAgICAnaWQnOiBpZCxcbiAgICAgICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgICAgICdiYXNlJzogYmFzZSxcbiAgICAgICAgICAgICAgICAncXVvdGUnOiBxdW90ZSxcbiAgICAgICAgICAgICAgICAnaW5mbyc6IG1hcmtldCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZUdldEJhbGFuY2UgKCk7XG4gICAgICAgIGxldCBiYWxhbmNlcyA9IHJlc3BvbnNlWydiYWxhbmNlJ107XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogcmVzcG9uc2UgfTtcbiAgICAgICAgZm9yIChsZXQgYiA9IDA7IGIgPCBiYWxhbmNlcy5sZW5ndGg7IGIrKykge1xuICAgICAgICAgICAgbGV0IGJhbGFuY2UgPSBiYWxhbmNlc1tiXTtcbiAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IHRoaXMuY29tbW9uQ3VycmVuY3lDb2RlIChiYWxhbmNlWydhc3NldCddKTtcbiAgICAgICAgICAgIGxldCByZXNlcnZlZCA9IHBhcnNlRmxvYXQgKGJhbGFuY2VbJ3Jlc2VydmVkJ10pO1xuICAgICAgICAgICAgbGV0IHVuY29uZmlybWVkID0gcGFyc2VGbG9hdCAoYmFsYW5jZVsndW5jb25maXJtZWQnXSk7XG4gICAgICAgICAgICBsZXQgYWNjb3VudCA9IHtcbiAgICAgICAgICAgICAgICAnZnJlZSc6IHBhcnNlRmxvYXQgKGJhbGFuY2VbJ2JhbGFuY2UnXSksXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB0aGlzLnN1bSAocmVzZXJ2ZWQsIHVuY29uZmlybWVkKSxcbiAgICAgICAgICAgICAgICAndG90YWwnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYWNjb3VudFsndG90YWwnXSA9IHRoaXMuc3VtIChhY2NvdW50WydmcmVlJ10sIGFjY291bnRbJ3VzZWQnXSk7XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRPcmRlcmJvb2sgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAncGFpcic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gb3JkZXJib29rWyd0aW1lc3RhbXAnXTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdiaWRzJzogW10sXG4gICAgICAgICAgICAnYXNrcyc6IFtdLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHNpZGVzID0gWyAnYmlkcycsICdhc2tzJyBdO1xuICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IHNpZGVzLmxlbmd0aDsgcysrKSB7XG4gICAgICAgICAgICBsZXQgc2lkZSA9IHNpZGVzW3NdO1xuICAgICAgICAgICAgbGV0IG9yZGVycyA9IG9yZGVyYm9va1tzaWRlXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9yZGVyID0gb3JkZXJzW2ldO1xuICAgICAgICAgICAgICAgIGxldCBwcmljZSA9IHBhcnNlRmxvYXQgKG9yZGVyWydwcmljZSddKTtcbiAgICAgICAgICAgICAgICBsZXQgYW1vdW50ID0gcGFyc2VGbG9hdCAob3JkZXJbJ3ZvbHVtZSddKTtcbiAgICAgICAgICAgICAgICAvLyBsZXQgdGltZXN0YW1wID0gb3JkZXJbMl0gKiAxMDAwO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtzaWRlXS5wdXNoIChbIHByaWNlLCBhbW91bnQgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgcGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KSB7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aWNrZXJbJ3RpbWVzdGFtcCddO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xvdyc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2JpZCddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2FzayddKSxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdF90cmFkZSddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3JvbGxpbmdfMjRfaG91cl92b2x1bWUnXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXJzICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRUaWNrZXJzICgpO1xuICAgICAgICBsZXQgdGlja2VycyA9IHRoaXMuaW5kZXhCeSAocmVzcG9uc2VbJ3RpY2tlcnMnXSwgJ3BhaXInKTtcbiAgICAgICAgbGV0IGlkcyA9IE9iamVjdC5rZXlzICh0aWNrZXJzKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHt9O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IGlkID0gaWRzW2ldO1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IHRoaXMubWFya2V0c19ieV9pZFtpZF07XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gbWFya2V0WydzeW1ib2wnXTtcbiAgICAgICAgICAgIGxldCB0aWNrZXIgPSB0aWNrZXJzW2lkXTtcbiAgICAgICAgICAgIHJlc3VsdFtzeW1ib2xdID0gdGhpcy5wYXJzZVRpY2tlciAodGlja2VyLCBtYXJrZXQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHRpY2tlciA9IGF3YWl0IHRoaXMucHVibGljR2V0VGlja2VyICh7XG4gICAgICAgICAgICAncGFpcic6IHBbJ2lkJ10sXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVRpY2tlciAodGlja2VyLCBwKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0VHJhZGVzICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ3BhaXInOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG1ldGhvZCA9ICdwcml2YXRlUG9zdCc7XG4gICAgICAgIGxldCBvcmRlciA9IHsgJ3BhaXInOiB0aGlzLm1hcmtldElkIChtYXJrZXQpIH07XG4gICAgICAgIGlmICh0eXBlID09ICdtYXJrZXQnKSB7XG4gICAgICAgICAgICBtZXRob2QgKz0gJ01hcmtldG9yZGVyJztcbiAgICAgICAgICAgIG9yZGVyWyd0eXBlJ10gPSBzaWRlLnRvVXBwZXJDYXNlICgpO1xuICAgICAgICAgICAgaWYgKHNpZGUgPT0gJ2J1eScpXG4gICAgICAgICAgICAgICAgb3JkZXJbJ2NvdW50ZXJfdm9sdW1lJ10gPSBhbW91bnQ7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgb3JkZXJbJ2Jhc2Vfdm9sdW1lJ10gPSBhbW91bnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtZXRob2QgKz0gJ09yZGVyJztcbiAgICAgICAgICAgIG9yZGVyWyd2b2x1bWUnXSA9IGFtb3VudDtcbiAgICAgICAgICAgIG9yZGVyWydwcmljZSddID0gcHJpY2U7XG4gICAgICAgICAgICBpZiAoc2lkZSA9PSAnYnV5JylcbiAgICAgICAgICAgICAgICBvcmRlclsndHlwZSddID0gJ0JJRCc7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgb3JkZXJbJ3R5cGUnXSA9ICdBU0snO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXNbbWV0aG9kXSAodGhpcy5leHRlbmQgKG9yZGVyLCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnb3JkZXJfaWQnXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0U3RvcG9yZGVyICh7ICdvcmRlcl9pZCc6IGlkIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgJy8nICsgdGhpcy52ZXJzaW9uICsgJy8nICsgdGhpcy5pbXBsb2RlUGFyYW1zIChwYXRoLCBwYXJhbXMpO1xuICAgICAgICBsZXQgcXVlcnkgPSB0aGlzLm9taXQgKHBhcmFtcywgdGhpcy5leHRyYWN0UGFyYW1zIChwYXRoKSk7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyAocXVlcnkpLmxlbmd0aClcbiAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICBpZiAoYXBpID09ICdwcml2YXRlJykge1xuICAgICAgICAgICAgbGV0IGF1dGggPSB0aGlzLmVuY29kZSAodGhpcy5hcGlLZXkgKyAnOicgKyB0aGlzLnNlY3JldCk7XG4gICAgICAgICAgICBhdXRoID0gdGhpcy5zdHJpbmdUb0Jhc2U2NCAoYXV0aCk7XG4gICAgICAgICAgICBoZWFkZXJzID0geyAnQXV0aG9yaXphdGlvbic6ICdCYXNpYyAnICsgdGhpcy5kZWNvZGUgKGF1dGgpIH07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgICAgICBpZiAoJ2Vycm9yJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgbWVyY2FkbyA9IHtcblxuICAgICdpZCc6ICdtZXJjYWRvJyxcbiAgICAnbmFtZSc6ICdNZXJjYWRvIEJpdGNvaW4nLFxuICAgICdjb3VudHJpZXMnOiAnQlInLCAvLyBCcmF6aWxcbiAgICAncmF0ZUxpbWl0JzogMTAwMCxcbiAgICAndmVyc2lvbic6ICd2MycsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc4MzcwNjAtZTdjNTg3MTQtNjBlYS0xMWU3LTkxOTItZjA1ZTg2YWRiODNmLmpwZycsXG4gICAgICAgICdhcGknOiB7XG4gICAgICAgICAgICAncHVibGljJzogJ2h0dHBzOi8vd3d3Lm1lcmNhZG9iaXRjb2luLm5ldC9hcGknLFxuICAgICAgICAgICAgJ3ByaXZhdGUnOiAnaHR0cHM6Ly93d3cubWVyY2Fkb2JpdGNvaW4ubmV0L3RhcGknLFxuICAgICAgICB9LFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vd3d3Lm1lcmNhZG9iaXRjb2luLmNvbS5icicsXG4gICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAnaHR0cHM6Ly93d3cubWVyY2Fkb2JpdGNvaW4uY29tLmJyL2FwaS1kb2MnLFxuICAgICAgICAgICAgJ2h0dHBzOi8vd3d3Lm1lcmNhZG9iaXRjb2luLmNvbS5ici90cmFkZS1hcGknLFxuICAgICAgICBdLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbIC8vIGxhc3Qgc2xhc2ggY3JpdGljYWxcbiAgICAgICAgICAgICAgICAnb3JkZXJib29rLycsXG4gICAgICAgICAgICAgICAgJ29yZGVyYm9va19saXRlY29pbi8nLFxuICAgICAgICAgICAgICAgICd0aWNrZXIvJyxcbiAgICAgICAgICAgICAgICAndGlja2VyX2xpdGVjb2luLycsXG4gICAgICAgICAgICAgICAgJ3RyYWRlcy8nLFxuICAgICAgICAgICAgICAgICd0cmFkZXNfbGl0ZWNvaW4vJyxcbiAgICAgICAgICAgICAgICAndjIvdGlja2VyLycsXG4gICAgICAgICAgICAgICAgJ3YyL3RpY2tlcl9saXRlY29pbi8nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnY2FuY2VsX29yZGVyJyxcbiAgICAgICAgICAgICAgICAnZ2V0X2FjY291bnRfaW5mbycsXG4gICAgICAgICAgICAgICAgJ2dldF9vcmRlcicsXG4gICAgICAgICAgICAgICAgJ2dldF93aXRoZHJhd2FsJyxcbiAgICAgICAgICAgICAgICAnbGlzdF9zeXN0ZW1fbWVzc2FnZXMnLFxuICAgICAgICAgICAgICAgICdsaXN0X29yZGVycycsXG4gICAgICAgICAgICAgICAgJ2xpc3Rfb3JkZXJib29rJyxcbiAgICAgICAgICAgICAgICAncGxhY2VfYnV5X29yZGVyJyxcbiAgICAgICAgICAgICAgICAncGxhY2Vfc2VsbF9vcmRlcicsXG4gICAgICAgICAgICAgICAgJ3dpdGhkcmF3X2NvaW4nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgICdtYXJrZXRzJzoge1xuICAgICAgICAnQlRDL0JSTCc6IHsgJ2lkJzogJ0JSTEJUQycsICdzeW1ib2wnOiAnQlRDL0JSTCcsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdCUkwnLCAnc3VmZml4JzogJycgfSxcbiAgICAgICAgJ0xUQy9CUkwnOiB7ICdpZCc6ICdCUkxMVEMnLCAnc3ltYm9sJzogJ0xUQy9CUkwnLCAnYmFzZSc6ICdMVEMnLCAncXVvdGUnOiAnQlJMJywgJ3N1ZmZpeCc6ICdMaXRlY29pbicgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IG1ldGhvZCA9ICdwdWJsaWNHZXRPcmRlcmJvb2snICsgdGhpcy5jYXBpdGFsaXplIChwWydzdWZmaXgnXSk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSBhd2FpdCB0aGlzW21ldGhvZF0gKHBhcmFtcyk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdiaWRzJzogb3JkZXJib29rWydiaWRzJ10sXG4gICAgICAgICAgICAnYXNrcyc6IG9yZGVyYm9va1snYXNrcyddLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgbWV0aG9kID0gJ3B1YmxpY0dldFYyVGlja2VyJyArIHRoaXMuY2FwaXRhbGl6ZSAocFsnc3VmZml4J10pO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzW21ldGhvZF0gKCk7XG4gICAgICAgIGxldCB0aWNrZXIgPSByZXNwb25zZVsndGlja2VyJ107XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSBwYXJzZUludCAodGlja2VyWydkYXRlJ10pICogMTAwMDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2J1eSddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3NlbGwnXSksXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xhc3QnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWyd2b2wnXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IG1ldGhvZCA9ICdwdWJsaWNHZXRUcmFkZXMnICsgdGhpcy5jYXBpdGFsaXplIChwWydzdWZmaXgnXSk7XG4gICAgICAgIHJldHVybiB0aGlzW21ldGhvZF0gKHBhcmFtcyk7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RHZXRBY2NvdW50SW5mbyAoKTtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gcmVzcG9uc2VbJ2JhbGFuY2UnXTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiByZXNwb25zZSB9O1xuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IHRoaXMuY3VycmVuY2llcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gdGhpcy5jdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IGxvd2VyY2FzZSA9IGN1cnJlbmN5LnRvTG93ZXJDYXNlICgpO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChsb3dlcmNhc2UgaW4gYmFsYW5jZXMpIHtcbiAgICAgICAgICAgICAgICBhY2NvdW50WydmcmVlJ10gPSBwYXJzZUZsb2F0IChiYWxhbmNlc1tsb3dlcmNhc2VdWydhdmFpbGFibGUnXSk7XG4gICAgICAgICAgICAgICAgYWNjb3VudFsndG90YWwnXSA9IHBhcnNlRmxvYXQgKGJhbGFuY2VzW2xvd2VyY2FzZV1bJ3RvdGFsJ10pO1xuICAgICAgICAgICAgICAgIGFjY291bnRbJ3VzZWQnXSA9IGFjY291bnRbJ3RvdGFsJ10gLSBhY2NvdW50WydmcmVlJ107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBpZiAodHlwZSA9PSAnbWFya2V0JylcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyBhbGxvd3MgbGltaXQgb3JkZXJzIG9ubHknKTtcbiAgICAgICAgbGV0IG1ldGhvZCA9ICdwcml2YXRlUG9zdFBsYWNlJyArIHRoaXMuY2FwaXRhbGl6ZSAoc2lkZSkgKyAnT3JkZXInO1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAnY29pbl9wYWlyJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICdxdWFudGl0eSc6IGFtb3VudCxcbiAgICAgICAgICAgICdsaW1pdF9wcmljZSc6IHByaWNlLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzW21ldGhvZF0gKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ2lkJzogcmVzcG9uc2VbJ3Jlc3BvbnNlX2RhdGEnXVsnb3JkZXInXVsnb3JkZXJfaWQnXS50b1N0cmluZyAoKSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdENhbmNlbE9yZGVyICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ29yZGVyX2lkJzogaWQsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddW2FwaV0gKyAnLyc7XG4gICAgICAgIGlmIChhcGkgPT0gJ3B1YmxpYycpIHtcbiAgICAgICAgICAgIHVybCArPSBwYXRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdXJsICs9IHRoaXMudmVyc2lvbiArICcvJztcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCk7XG4gICAgICAgICAgICBib2R5ID0gdGhpcy51cmxlbmNvZGUgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAgICAgJ3RhcGlfbWV0aG9kJzogcGF0aCxcbiAgICAgICAgICAgICAgICAndGFwaV9ub25jZSc6IG5vbmNlLFxuICAgICAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgICAgICBsZXQgYXV0aCA9ICcvdGFwaS8nICsgdGhpcy52ZXJzaW9uICsgJy8nICsgJz8nICsgYm9keTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgICAgICAgICdUQVBJLUlEJzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ1RBUEktTUFDJzogdGhpcy5obWFjICh0aGlzLmVuY29kZSAoYXV0aCksIHRoaXMuc2VjcmV0LCAnc2hhNTEyJyksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdlcnJvcl9tZXNzYWdlJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gT0tDb2luXG4vLyBDaGluYVxuLy8gaHR0cHM6Ly93d3cub2tjb2luLmNvbS9cbi8vIGh0dHBzOi8vd3d3Lm9rY29pbi5jb20vcmVzdF9nZXRTdGFydGVkLmh0bWxcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9PS0NvaW4vd2Vic29ja2V0XG4vLyBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9va2NvaW4uY29tXG4vLyBodHRwczovL3d3dy5va2NvaW4uY25cbi8vIGh0dHBzOi8vd3d3Lm9rY29pbi5jbi9yZXN0X2dldFN0YXJ0ZWQuaHRtbFxuXG52YXIgb2tjb2luID0ge1xuXG4gICAgJ3ZlcnNpb24nOiAndjEnLFxuICAgICdyYXRlTGltaXQnOiAxMDAwLCAvLyB1cCB0byAzMDAwIHJlcXVlc3RzIHBlciA1IG1pbnV0ZXMg4omIIDYwMCByZXF1ZXN0cyBwZXIgbWludXRlIOKJiCAxMCByZXF1ZXN0cyBwZXIgc2Vjb25kIOKJiCAxMDAgbXNcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnZGVwdGgnLFxuICAgICAgICAgICAgICAgICdleGNoYW5nZV9yYXRlJyxcbiAgICAgICAgICAgICAgICAnZnV0dXJlX2RlcHRoJyxcbiAgICAgICAgICAgICAgICAnZnV0dXJlX2VzdGltYXRlZF9wcmljZScsXG4gICAgICAgICAgICAgICAgJ2Z1dHVyZV9ob2xkX2Ftb3VudCcsXG4gICAgICAgICAgICAgICAgJ2Z1dHVyZV9pbmRleCcsXG4gICAgICAgICAgICAgICAgJ2Z1dHVyZV9rbGluZScsXG4gICAgICAgICAgICAgICAgJ2Z1dHVyZV9wcmljZV9saW1pdCcsXG4gICAgICAgICAgICAgICAgJ2Z1dHVyZV90aWNrZXInLFxuICAgICAgICAgICAgICAgICdmdXR1cmVfdHJhZGVzJyxcbiAgICAgICAgICAgICAgICAna2xpbmUnLFxuICAgICAgICAgICAgICAgICdvdGNzJyxcbiAgICAgICAgICAgICAgICAndGlja2VyJyxcbiAgICAgICAgICAgICAgICAndHJhZGVzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2FjY291bnRfcmVjb3JkcycsXG4gICAgICAgICAgICAgICAgJ2JhdGNoX3RyYWRlJyxcbiAgICAgICAgICAgICAgICAnYm9ycm93X21vbmV5JyxcbiAgICAgICAgICAgICAgICAnYm9ycm93X29yZGVyX2luZm8nLFxuICAgICAgICAgICAgICAgICdib3Jyb3dzX2luZm8nLFxuICAgICAgICAgICAgICAgICdjYW5jZWxfYm9ycm93JyxcbiAgICAgICAgICAgICAgICAnY2FuY2VsX29yZGVyJyxcbiAgICAgICAgICAgICAgICAnY2FuY2VsX290Y19vcmRlcicsXG4gICAgICAgICAgICAgICAgJ2NhbmNlbF93aXRoZHJhdycsXG4gICAgICAgICAgICAgICAgJ2Z1dHVyZV9iYXRjaF90cmFkZScsXG4gICAgICAgICAgICAgICAgJ2Z1dHVyZV9jYW5jZWwnLFxuICAgICAgICAgICAgICAgICdmdXR1cmVfZGV2b2x2ZScsXG4gICAgICAgICAgICAgICAgJ2Z1dHVyZV9leHBsb3NpdmUnLFxuICAgICAgICAgICAgICAgICdmdXR1cmVfb3JkZXJfaW5mbycsXG4gICAgICAgICAgICAgICAgJ2Z1dHVyZV9vcmRlcnNfaW5mbycsXG4gICAgICAgICAgICAgICAgJ2Z1dHVyZV9wb3NpdGlvbicsXG4gICAgICAgICAgICAgICAgJ2Z1dHVyZV9wb3NpdGlvbl80Zml4JyxcbiAgICAgICAgICAgICAgICAnZnV0dXJlX3RyYWRlJyxcbiAgICAgICAgICAgICAgICAnZnV0dXJlX3RyYWRlc19oaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAnZnV0dXJlX3VzZXJpbmZvJyxcbiAgICAgICAgICAgICAgICAnZnV0dXJlX3VzZXJpbmZvXzRmaXgnLFxuICAgICAgICAgICAgICAgICdsZW5kX2RlcHRoJyxcbiAgICAgICAgICAgICAgICAnb3JkZXJfZmVlJyxcbiAgICAgICAgICAgICAgICAnb3JkZXJfaGlzdG9yeScsXG4gICAgICAgICAgICAgICAgJ29yZGVyX2luZm8nLFxuICAgICAgICAgICAgICAgICdvcmRlcnNfaW5mbycsXG4gICAgICAgICAgICAgICAgJ290Y19vcmRlcl9oaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAnb3RjX29yZGVyX2luZm8nLFxuICAgICAgICAgICAgICAgICdyZXBheW1lbnQnLFxuICAgICAgICAgICAgICAgICdzdWJtaXRfb3RjX29yZGVyJyxcbiAgICAgICAgICAgICAgICAndHJhZGUnLFxuICAgICAgICAgICAgICAgICd0cmFkZV9oaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAndHJhZGVfb3RjX29yZGVyJyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXcnLFxuICAgICAgICAgICAgICAgICd3aXRoZHJhd19pbmZvJyxcbiAgICAgICAgICAgICAgICAndW5yZXBheW1lbnRzX2luZm8nLFxuICAgICAgICAgICAgICAgICd1c2VyaW5mbycsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgdGhpcy5wdWJsaWNHZXREZXB0aCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBvcmRlcmJvb2tbJ2JpZHMnXSxcbiAgICAgICAgICAgICdhc2tzJzogdGhpcy5zb3J0QnkgKG9yZGVyYm9va1snYXNrcyddLCAwKSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRUaWNrZXIgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IHRpY2tlciA9IHJlc3BvbnNlWyd0aWNrZXInXTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHBhcnNlSW50IChyZXNwb25zZVsnZGF0ZSddKSAqIDEwMDA7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2hpZ2gnXSksXG4gICAgICAgICAgICAnbG93JzogcGFyc2VGbG9hdCAodGlja2VyWydsb3cnXSksXG4gICAgICAgICAgICAnYmlkJzogcGFyc2VGbG9hdCAodGlja2VyWydidXknXSksXG4gICAgICAgICAgICAnYXNrJzogcGFyc2VGbG9hdCAodGlja2VyWydzZWxsJ10pLFxuICAgICAgICAgICAgJ3Z3YXAnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnb3Blbic6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjbG9zZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdmaXJzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsYXN0JzogcGFyc2VGbG9hdCAodGlja2VyWydsYXN0J10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndm9sJ10pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldFRyYWRlcyAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPSExDViAobWFya2V0LCB0aW1lZnJhbWUgPSA2MCwgc2luY2UgPSB1bmRlZmluZWQsIGxpbWl0ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCBtID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0S2xpbmUgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiBtWydpZCddLFxuICAgICAgICAgICAgJ3R5cGUnOiAnMW1pbicsXG4gICAgICAgICAgICAnc2luY2UnOiBzaW5jZSxcbiAgICAgICAgICAgICdzaXplJzogcGFyc2VJbnQgKGxpbWl0KSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlT0hMQ1ZzIChtLCByZXNwb25zZSwgdGltZWZyYW1lLCBzaW5jZSwgbGltaXQpO1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0VXNlcmluZm8gKCk7XG4gICAgICAgIGxldCBiYWxhbmNlcyA9IHJlc3BvbnNlWydpbmZvJ11bJ2Z1bmRzJ107XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogcmVzcG9uc2UgfTtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCB0aGlzLmN1cnJlbmNpZXMubGVuZ3RoOyBjKyspIHtcbiAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IHRoaXMuY3VycmVuY2llc1tjXTtcbiAgICAgICAgICAgIGxldCBsb3dlcmNhc2UgPSBjdXJyZW5jeS50b0xvd2VyQ2FzZSAoKTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd1c2VkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAobG93ZXJjYXNlIGluIGJhbGFuY2VzWydmcmVlJ10pXG4gICAgICAgICAgICAgICAgYWNjb3VudFsnZnJlZSddID0gcGFyc2VGbG9hdCAoYmFsYW5jZXNbJ2ZyZWUnXVtsb3dlcmNhc2VdKTtcbiAgICAgICAgICAgIGlmIChsb3dlcmNhc2UgaW4gYmFsYW5jZXNbJ2ZyZWV6ZWQnXSlcbiAgICAgICAgICAgICAgICBhY2NvdW50Wyd1c2VkJ10gPSBwYXJzZUZsb2F0IChiYWxhbmNlc1snZnJlZXplZCddW2xvd2VyY2FzZV0pO1xuICAgICAgICAgICAgYWNjb3VudFsndG90YWwnXSA9IHRoaXMuc3VtIChhY2NvdW50WydmcmVlJ10sIGFjY291bnRbJ3VzZWQnXSk7XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAnc3ltYm9sJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICd0eXBlJzogc2lkZSxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHR5cGUgPT0gJ2xpbWl0Jykge1xuICAgICAgICAgICAgb3JkZXJbJ3ByaWNlJ10gPSBwcmljZTtcbiAgICAgICAgICAgIG9yZGVyWydhbW91bnQnXSA9IGFtb3VudDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChzaWRlID09ICdidXknKSB7XG4gICAgICAgICAgICAgICAgb3JkZXJbJ3ByaWNlJ10gPSBwYXJhbXM7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG9yZGVyWydhbW91bnQnXSA9IGFtb3VudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9yZGVyWyd0eXBlJ10gKz0gJ19tYXJrZXQnO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RUcmFkZSAodGhpcy5leHRlbmQgKG9yZGVyLCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnb3JkZXJfaWQnXS50b1N0cmluZyAoKSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdENhbmNlbE9yZGVyICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ29yZGVyX2lkJzogaWQsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSAnLycgKyAnYXBpJyArICcvJyArIHRoaXMudmVyc2lvbiArICcvJyArIHBhdGggKyAnLmRvJztcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChwYXJhbXMpLmxlbmd0aClcbiAgICAgICAgICAgICAgICB1cmwgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHBhcmFtcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgcXVlcnkgPSB0aGlzLmtleXNvcnQgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAgICAgJ2FwaV9rZXknOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICAgICAgLy8gc2VjcmV0IGtleSBtdXN0IGJlIGF0IHRoZSBlbmQgb2YgcXVlcnlcbiAgICAgICAgICAgIGxldCBxdWVyeVN0cmluZyA9IHRoaXMudXJsZW5jb2RlIChxdWVyeSkgKyAnJnNlY3JldF9rZXk9JyArIHRoaXMuc2VjcmV0O1xuICAgICAgICAgICAgcXVlcnlbJ3NpZ24nXSA9IHRoaXMuaGFzaCAodGhpcy5lbmNvZGUgKHF1ZXJ5U3RyaW5nKSkudG9VcHBlckNhc2UgKCk7XG4gICAgICAgICAgICBib2R5ID0gdGhpcy51cmxlbmNvZGUgKHF1ZXJ5KTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyB9O1xuICAgICAgICB9XG4gICAgICAgIHVybCA9IHRoaXMudXJsc1snYXBpJ10gKyB1cmw7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdyZXN1bHQnIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgaWYgKCFyZXNwb25zZVsncmVzdWx0J10pXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBva2NvaW5jbnkgPSBleHRlbmQgKG9rY29pbiwge1xuICAgICdpZCc6ICdva2NvaW5jbnknLFxuICAgICduYW1lJzogJ09LQ29pbiBDTlknLFxuICAgICdjb3VudHJpZXMnOiAnQ04nLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2NzkyLThiZTkxNTdhLTVlZTUtMTFlNy05MjZjLTZkNjliOGQzMzc4ZC5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vd3d3Lm9rY29pbi5jbicsXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly93d3cub2tjb2luLmNuJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL3d3dy5va2NvaW4uY24vcmVzdF9nZXRTdGFydGVkLmh0bWwnLFxuICAgIH0sXG4gICAgJ21hcmtldHMnOiB7XG4gICAgICAgICdCVEMvQ05ZJzogeyAnaWQnOiAnYnRjX2NueScsICdzeW1ib2wnOiAnQlRDL0NOWScsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdDTlknIH0sXG4gICAgICAgICdMVEMvQ05ZJzogeyAnaWQnOiAnbHRjX2NueScsICdzeW1ib2wnOiAnTFRDL0NOWScsICdiYXNlJzogJ0xUQycsICdxdW90ZSc6ICdDTlknIH0sXG4gICAgfSxcbn0pXG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIG9rY29pbnVzZCA9IGV4dGVuZCAob2tjb2luLCB7XG4gICAgJ2lkJzogJ29rY29pbnVzZCcsXG4gICAgJ25hbWUnOiAnT0tDb2luIFVTRCcsXG4gICAgJ2NvdW50cmllcyc6IFsgJ0NOJywgJ1VTJyBdLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2NzkxLTg5ZmZiNTAyLTVlZTUtMTFlNy04YTViLWM1OTUwYjY4YWM2NS5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vd3d3Lm9rY29pbi5jb20nLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vd3d3Lm9rY29pbi5jb20nLFxuICAgICAgICAnZG9jJzogW1xuICAgICAgICAgICAgJ2h0dHBzOi8vd3d3Lm9rY29pbi5jb20vcmVzdF9nZXRTdGFydGVkLmh0bWwnLFxuICAgICAgICAgICAgJ2h0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL29rY29pbi5jb20nLFxuICAgICAgICBdLFxuICAgIH0sXG4gICAgJ21hcmtldHMnOiB7XG4gICAgICAgICdCVEMvVVNEJzogeyAnaWQnOiAnYnRjX3VzZCcsICdzeW1ib2wnOiAnQlRDL1VTRCcsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdVU0QnIH0sXG4gICAgICAgICdMVEMvVVNEJzogeyAnaWQnOiAnbHRjX3VzZCcsICdzeW1ib2wnOiAnTFRDL1VTRCcsICdiYXNlJzogJ0xUQycsICdxdW90ZSc6ICdVU0QnIH0sXG4gICAgICAgICdFVEgvVVNEJzogeyAnaWQnOiAnZXRoX3VzZCcsICdzeW1ib2wnOiAnRVRIL1VTRCcsICdiYXNlJzogJ0VUSCcsICdxdW90ZSc6ICdVU0QnIH0sXG4gICAgICAgICdFVEMvVVNEJzogeyAnaWQnOiAnZXRjX3VzZCcsICdzeW1ib2wnOiAnRVRDL1VTRCcsICdiYXNlJzogJ0VUQycsICdxdW90ZSc6ICdVU0QnIH0sXG4gICAgfSxcbn0pXG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIG9rZXggPSBleHRlbmQgKG9rY29pbiwge1xuICAgICdpZCc6ICdva2V4JyxcbiAgICAnbmFtZSc6ICdPS0VYJyxcbiAgICAnY291bnRyaWVzJzogWyAnQ04nLCAnVVMnIF0sXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjk1NjI1OTMtOTAzOGE5YmMtODc0Mi0xMWU3LTkxY2MtODIwMWY4NDViZmMxLmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly93d3cub2tleC5jb20nLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vd3d3Lm9rZXguY29tJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL3d3dy5va2V4LmNvbS9yZXN0X2dldFN0YXJ0ZWQuaHRtbCcsXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0xUQy9CVEMnOiB7ICdpZCc6ICdsdGNfYnRjJywgJ3N5bWJvbCc6ICdMVEMvQlRDJywgJ2Jhc2UnOiAnTFRDJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ0VUSC9CVEMnOiB7ICdpZCc6ICdldGhfYnRjJywgJ3N5bWJvbCc6ICdFVEgvQlRDJywgJ2Jhc2UnOiAnRVRIJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ0VUQy9CVEMnOiB7ICdpZCc6ICdldGNfYnRjJywgJ3N5bWJvbCc6ICdFVEMvQlRDJywgJ2Jhc2UnOiAnRVRDJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ0JDSC9CVEMnOiB7ICdpZCc6ICdiY2NfYnRjJywgJ3N5bWJvbCc6ICdCQ0gvQlRDJywgJ2Jhc2UnOiAnQkNIJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICB9LFxufSlcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgcGF5bWl1bSA9IHtcblxuICAgICdpZCc6ICdwYXltaXVtJyxcbiAgICAnbmFtZSc6ICdQYXltaXVtJyxcbiAgICAnY291bnRyaWVzJzogWyAnRlInLCAnRVUnIF0sXG4gICAgJ3JhdGVMaW1pdCc6IDIwMDAsXG4gICAgJ3ZlcnNpb24nOiAndjEnLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzkwNTY0LWE5NDVhOWQ0LTVmZjktMTFlNy05ZDJkLWI2MzU3NjNmMmYyNC5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vcGF5bWl1bS5jb20vYXBpJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy5wYXltaXVtLmNvbScsXG4gICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAnaHR0cHM6Ly9naXRodWIuY29tL1BheW1pdW0vYXBpLWRvY3VtZW50YXRpb24nLFxuICAgICAgICAgICAgJ2h0dHBzOi8vd3d3LnBheW1pdW0uY29tL3BhZ2UvZGV2ZWxvcGVycycsXG4gICAgICAgIF0sXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnY291bnRyaWVzJyxcbiAgICAgICAgICAgICAgICAnZGF0YS97aWR9L3RpY2tlcicsXG4gICAgICAgICAgICAgICAgJ2RhdGEve2lkfS90cmFkZXMnLFxuICAgICAgICAgICAgICAgICdkYXRhL3tpZH0vZGVwdGgnLFxuICAgICAgICAgICAgICAgICdiaXRjb2luX2NoYXJ0cy97aWR9L3RyYWRlcycsXG4gICAgICAgICAgICAgICAgJ2JpdGNvaW5fY2hhcnRzL3tpZH0vZGVwdGgnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdtZXJjaGFudC9nZXRfcGF5bWVudC97VVVJRH0nLFxuICAgICAgICAgICAgICAgICd1c2VyJyxcbiAgICAgICAgICAgICAgICAndXNlci9hZGRyZXNzZXMnLFxuICAgICAgICAgICAgICAgICd1c2VyL2FkZHJlc3Nlcy97YnRjX2FkZHJlc3N9JyxcbiAgICAgICAgICAgICAgICAndXNlci9vcmRlcnMnLFxuICAgICAgICAgICAgICAgICd1c2VyL29yZGVycy97VVVJRH0nLFxuICAgICAgICAgICAgICAgICd1c2VyL3ByaWNlX2FsZXJ0cycsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ3VzZXIvb3JkZXJzJyxcbiAgICAgICAgICAgICAgICAndXNlci9hZGRyZXNzZXMnLFxuICAgICAgICAgICAgICAgICd1c2VyL3BheW1lbnRfcmVxdWVzdHMnLFxuICAgICAgICAgICAgICAgICd1c2VyL3ByaWNlX2FsZXJ0cycsXG4gICAgICAgICAgICAgICAgJ21lcmNoYW50L2NyZWF0ZV9wYXltZW50JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAnZGVsZXRlJzogW1xuICAgICAgICAgICAgICAgICd1c2VyL29yZGVycy97VVVJRH0vY2FuY2VsJyxcbiAgICAgICAgICAgICAgICAndXNlci9wcmljZV9hbGVydHMve2lkfScsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgJ21hcmtldHMnOiB7XG4gICAgICAgICdCVEMvRVVSJzogeyAnaWQnOiAnZXVyJywgJ3N5bWJvbCc6ICdCVEMvRVVSJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ0VVUicgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gYXdhaXQgdGhpcy5wcml2YXRlR2V0VXNlciAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiBiYWxhbmNlcyB9O1xuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IHRoaXMuY3VycmVuY2llcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gdGhpcy5jdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IGxvd2VyY2FzZSA9IGN1cnJlbmN5LnRvTG93ZXJDYXNlICgpO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGxldCBiYWxhbmNlID0gJ2JhbGFuY2VfJyArIGxvd2VyY2FzZTtcbiAgICAgICAgICAgIGxldCBsb2NrZWQgPSAnbG9ja2VkXycgKyBsb3dlcmNhc2U7XG4gICAgICAgICAgICBpZiAoYmFsYW5jZSBpbiBiYWxhbmNlcylcbiAgICAgICAgICAgICAgICBhY2NvdW50WydmcmVlJ10gPSBiYWxhbmNlc1tiYWxhbmNlXTtcbiAgICAgICAgICAgIGlmIChsb2NrZWQgaW4gYmFsYW5jZXMpXG4gICAgICAgICAgICAgICAgYWNjb3VudFsndXNlZCddID0gYmFsYW5jZXNbbG9ja2VkXTtcbiAgICAgICAgICAgIGFjY291bnRbJ3RvdGFsJ10gPSB0aGlzLnN1bSAoYWNjb3VudFsnZnJlZSddLCBhY2NvdW50Wyd1c2VkJ10pO1xuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IGF3YWl0IHRoaXMucHVibGljR2V0RGF0YUlkRGVwdGggKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnaWQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gb3JkZXJbJ3ByaWNlJ107XG4gICAgICAgICAgICAgICAgbGV0IGFtb3VudCA9IG9yZGVyWydhbW91bnQnXTtcbiAgICAgICAgICAgICAgICBsZXQgdGltZXN0YW1wID0gb3JkZXJbJ3RpbWVzdGFtcCddICogMTAwMDtcbiAgICAgICAgICAgICAgICByZXN1bHRbc2lkZV0ucHVzaCAoWyBwcmljZSwgYW1vdW50LCB0aW1lc3RhbXAgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0WydiaWRzJ10gPSB0aGlzLnNvcnRCeSAocmVzdWx0WydiaWRzJ10sIDAsIHRydWUpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGxldCB0aWNrZXIgPSBhd2FpdCB0aGlzLnB1YmxpY0dldERhdGFJZFRpY2tlciAoe1xuICAgICAgICAgICAgJ2lkJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aWNrZXJbJ2F0J10gKiAxMDAwO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydoaWdoJ10pLFxuICAgICAgICAgICAgJ2xvdyc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbG93J10pLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYmlkJ10pLFxuICAgICAgICAgICAgJ2Fzayc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYXNrJ10pLFxuICAgICAgICAgICAgJ3Z3YXAnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3Z3YXAnXSksXG4gICAgICAgICAgICAnb3Blbic6IHBhcnNlRmxvYXQgKHRpY2tlclsnb3BlbiddKSxcbiAgICAgICAgICAgICdjbG9zZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdmaXJzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsYXN0JzogcGFyc2VGbG9hdCAodGlja2VyWydwcmljZSddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndmFyaWF0aW9uJ10pLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndm9sdW1lJ10pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldERhdGFJZFRyYWRlcyAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdpZCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAndHlwZSc6IHRoaXMuY2FwaXRhbGl6ZSAodHlwZSkgKyAnT3JkZXInLFxuICAgICAgICAgICAgJ2N1cnJlbmN5JzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICdkaXJlY3Rpb24nOiBzaWRlLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IGFtb3VudCxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHR5cGUgPT0gJ21hcmtldCcpXG4gICAgICAgICAgICBvcmRlclsncHJpY2UnXSA9IHByaWNlO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0VXNlck9yZGVycyAodGhpcy5leHRlbmQgKG9yZGVyLCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsndXVpZCddLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0Q2FuY2VsT3JkZXIgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnb3JkZXJOdW1iZXInOiBpZCxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ10gKyAnLycgKyB0aGlzLnZlcnNpb24gKyAnLycgKyB0aGlzLmltcGxvZGVQYXJhbXMgKHBhdGgsIHBhcmFtcyk7XG4gICAgICAgIGxldCBxdWVyeSA9IHRoaXMub21pdCAocGFyYW1zLCB0aGlzLmV4dHJhY3RQYXJhbXMgKHBhdGgpKTtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChxdWVyeSkubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYm9keSA9IHRoaXMuanNvbiAocGFyYW1zKTtcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCkudG9TdHJpbmcgKCk7XG4gICAgICAgICAgICBsZXQgYXV0aCA9IG5vbmNlICsgdXJsICsgYm9keTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0FwaS1LZXknOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgICAgICAnQXBpLVNpZ25hdHVyZSc6IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKGF1dGgpLCB0aGlzLnNlY3JldCksXG4gICAgICAgICAgICAgICAgJ0FwaS1Ob25jZSc6IG5vbmNlLFxuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdlcnJvcnMnIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBwb2xvbmlleCA9IHtcblxuICAgICdpZCc6ICdwb2xvbmlleCcsXG4gICAgJ25hbWUnOiAnUG9sb25pZXgnLFxuICAgICdjb3VudHJpZXMnOiAnVVMnLFxuICAgICdyYXRlTGltaXQnOiA1MDAsIC8vIDYgY2FsbHMgcGVyIHNlY29uZFxuICAgICdoYXNGZXRjaFRpY2tlcnMnOiB0cnVlLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2ODE3LWU5NDU2MzEyLTVlZTYtMTFlNy05YjNjLWI2MjhjYTU2MjZhNS5qcGcnLFxuICAgICAgICAnYXBpJzoge1xuICAgICAgICAgICAgJ3B1YmxpYyc6ICdodHRwczovL3BvbG9uaWV4LmNvbS9wdWJsaWMnLFxuICAgICAgICAgICAgJ3ByaXZhdGUnOiAnaHR0cHM6Ly9wb2xvbmlleC5jb20vdHJhZGluZ0FwaScsXG4gICAgICAgIH0sXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly9wb2xvbmlleC5jb20nLFxuICAgICAgICAnZG9jJzogW1xuICAgICAgICAgICAgJ2h0dHBzOi8vcG9sb25pZXguY29tL3N1cHBvcnQvYXBpLycsXG4gICAgICAgICAgICAnaHR0cDovL3Bhc3RlYmluLmNvbS9kTVg3bVpFMCcsXG4gICAgICAgIF0sXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAncmV0dXJuMjRoVm9sdW1lJyxcbiAgICAgICAgICAgICAgICAncmV0dXJuQ2hhcnREYXRhJyxcbiAgICAgICAgICAgICAgICAncmV0dXJuQ3VycmVuY2llcycsXG4gICAgICAgICAgICAgICAgJ3JldHVybkxvYW5PcmRlcnMnLFxuICAgICAgICAgICAgICAgICdyZXR1cm5PcmRlckJvb2snLFxuICAgICAgICAgICAgICAgICdyZXR1cm5UaWNrZXInLFxuICAgICAgICAgICAgICAgICdyZXR1cm5UcmFkZUhpc3RvcnknLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnYnV5JyxcbiAgICAgICAgICAgICAgICAnY2FuY2VsTG9hbk9mZmVyJyxcbiAgICAgICAgICAgICAgICAnY2FuY2VsT3JkZXInLFxuICAgICAgICAgICAgICAgICdjbG9zZU1hcmdpblBvc2l0aW9uJyxcbiAgICAgICAgICAgICAgICAnY3JlYXRlTG9hbk9mZmVyJyxcbiAgICAgICAgICAgICAgICAnZ2VuZXJhdGVOZXdBZGRyZXNzJyxcbiAgICAgICAgICAgICAgICAnZ2V0TWFyZ2luUG9zaXRpb24nLFxuICAgICAgICAgICAgICAgICdtYXJnaW5CdXknLFxuICAgICAgICAgICAgICAgICdtYXJnaW5TZWxsJyxcbiAgICAgICAgICAgICAgICAnbW92ZU9yZGVyJyxcbiAgICAgICAgICAgICAgICAncmV0dXJuQWN0aXZlTG9hbnMnLFxuICAgICAgICAgICAgICAgICdyZXR1cm5BdmFpbGFibGVBY2NvdW50QmFsYW5jZXMnLFxuICAgICAgICAgICAgICAgICdyZXR1cm5CYWxhbmNlcycsXG4gICAgICAgICAgICAgICAgJ3JldHVybkNvbXBsZXRlQmFsYW5jZXMnLFxuICAgICAgICAgICAgICAgICdyZXR1cm5EZXBvc2l0QWRkcmVzc2VzJyxcbiAgICAgICAgICAgICAgICAncmV0dXJuRGVwb3NpdHNXaXRoZHJhd2FscycsXG4gICAgICAgICAgICAgICAgJ3JldHVybkZlZUluZm8nLFxuICAgICAgICAgICAgICAgICdyZXR1cm5MZW5kaW5nSGlzdG9yeScsXG4gICAgICAgICAgICAgICAgJ3JldHVybk1hcmdpbkFjY291bnRTdW1tYXJ5JyxcbiAgICAgICAgICAgICAgICAncmV0dXJuT3BlbkxvYW5PZmZlcnMnLFxuICAgICAgICAgICAgICAgICdyZXR1cm5PcGVuT3JkZXJzJyxcbiAgICAgICAgICAgICAgICAncmV0dXJuT3JkZXJUcmFkZXMnLFxuICAgICAgICAgICAgICAgICdyZXR1cm5UcmFkYWJsZUJhbGFuY2VzJyxcbiAgICAgICAgICAgICAgICAncmV0dXJuVHJhZGVIaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAnc2VsbCcsXG4gICAgICAgICAgICAgICAgJ3RvZ2dsZUF1dG9SZW5ldycsXG4gICAgICAgICAgICAgICAgJ3RyYW5zZmVyQmFsYW5jZScsXG4gICAgICAgICAgICAgICAgJ3dpdGhkcmF3JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoTWFya2V0cyAoKSB7XG4gICAgICAgIGxldCBtYXJrZXRzID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRSZXR1cm5UaWNrZXIgKCk7XG4gICAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMgKG1hcmtldHMpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwga2V5cy5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgbGV0IGlkID0ga2V5c1twXTtcbiAgICAgICAgICAgIGxldCBtYXJrZXQgPSBtYXJrZXRzW2lkXTtcbiAgICAgICAgICAgIGxldCBbIHF1b3RlLCBiYXNlIF0gPSBpZC5zcGxpdCAoJ18nKTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBiYXNlICsgJy8nICsgcXVvdGU7XG4gICAgICAgICAgICByZXN1bHQucHVzaCAoe1xuICAgICAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICAgICAgICAgICdzeW1ib2wnOiBzeW1ib2wsXG4gICAgICAgICAgICAgICAgJ2Jhc2UnOiBiYXNlLFxuICAgICAgICAgICAgICAgICdxdW90ZSc6IHF1b3RlLFxuICAgICAgICAgICAgICAgICdpbmZvJzogbWFya2V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdFJldHVybkNvbXBsZXRlQmFsYW5jZXMgKHtcbiAgICAgICAgICAgICdhY2NvdW50JzogJ2FsbCcsXG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGJhbGFuY2VzIH07XG4gICAgICAgIGxldCBjdXJyZW5jaWVzID0gT2JqZWN0LmtleXMgKGJhbGFuY2VzKTtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBjdXJyZW5jaWVzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBjdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IGJhbGFuY2UgPSBiYWxhbmNlc1tjdXJyZW5jeV07XG4gICAgICAgICAgICBsZXQgYWNjb3VudCA9IHtcbiAgICAgICAgICAgICAgICAnZnJlZSc6IHBhcnNlRmxvYXQgKGJhbGFuY2VbJ2F2YWlsYWJsZSddKSxcbiAgICAgICAgICAgICAgICAndXNlZCc6IHBhcnNlRmxvYXQgKGJhbGFuY2VbJ29uT3JkZXJzJ10pLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhY2NvdW50Wyd0b3RhbCddID0gdGhpcy5zdW0gKGFjY291bnRbJ2ZyZWUnXSwgYWNjb3VudFsndXNlZCddKTtcbiAgICAgICAgICAgIHJlc3VsdFtjdXJyZW5jeV0gPSBhY2NvdW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIHBhcnNlQmlkQXNrIChiaWRhc2spIHtcbiAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAoYmlkYXNrWzBdKTtcbiAgICAgICAgbGV0IGFtb3VudCA9IHBhcnNlRmxvYXQgKGJpZGFza1sxXSk7XG4gICAgICAgIHJldHVybiBbIHByaWNlLCBhbW91bnQgXTtcbiAgICB9LFxuXG4gICAgcGFyc2VCaWRBc2tzIChiaWRhc2tzKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiaWRhc2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCAodGhpcy5wYXJzZUJpZEFzayAoYmlkYXNrc1tpXSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFJldHVybk9yZGVyQm9vayAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdjdXJyZW5jeVBhaXInOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICByZXN1bHRbc2lkZV0gPSB0aGlzLnBhcnNlQmlkQXNrcyAob3JkZXJib29rW3NpZGVdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBwYXJzZVRpY2tlciAodGlja2VyLCBtYXJrZXQpIHtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydoaWdoMjRociddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdzI0aHInXSksXG4gICAgICAgICAgICAnYmlkJzogcGFyc2VGbG9hdCAodGlja2VyWydoaWdoZXN0QmlkJ10pLFxuICAgICAgICAgICAgJ2Fzayc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbG93ZXN0QXNrJ10pLFxuICAgICAgICAgICAgJ3Z3YXAnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnb3Blbic6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjbG9zZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdmaXJzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsYXN0JzogcGFyc2VGbG9hdCAodGlja2VyWydsYXN0J10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsncGVyY2VudENoYW5nZSddKSxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYmFzZVZvbHVtZSddKSxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsncXVvdGVWb2x1bWUnXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXJzICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHRpY2tlcnMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFJldHVyblRpY2tlciAoKTtcbiAgICAgICAgbGV0IGlkcyA9IE9iamVjdC5rZXlzICh0aWNrZXJzKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHt9O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IGlkID0gaWRzW2ldO1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IHRoaXMubWFya2V0c19ieV9pZFtpZF07XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gbWFya2V0WydzeW1ib2wnXTtcbiAgICAgICAgICAgIGxldCB0aWNrZXIgPSB0aWNrZXJzW2lkXTtcbiAgICAgICAgICAgIHJlc3VsdFtzeW1ib2xdID0gdGhpcy5wYXJzZVRpY2tlciAodGlja2VyLCBtYXJrZXQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG0gPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHRpY2tlcnMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFJldHVyblRpY2tlciAoKTtcbiAgICAgICAgbGV0IHRpY2tlciA9IHRpY2tlcnNbbVsnaWQnXV07XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIG0pO1xuICAgIH0sXG5cbiAgICBwYXJzZVRyYWRlICh0cmFkZSwgbWFya2V0ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLnBhcnNlODYwMSAodHJhZGVbJ2RhdGUnXSk7XG4gICAgICAgIGxldCBpZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IG9yZGVyID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoJ3RyYWRlSUQnIGluIHRyYWRlKVxuICAgICAgICAgICAgaWQgPSB0cmFkZVsndHJhZGVJRCddO1xuICAgICAgICBpZiAoJ29yZGVyTnVtYmVyJyBpbiB0cmFkZSlcbiAgICAgICAgICAgIG9yZGVyID0gdHJhZGVbJ29yZGVyTnVtYmVyJ107XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHRyYWRlLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdzeW1ib2wnOiBtYXJrZXRbJ3N5bWJvbCddLFxuICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgICAgICAnb3JkZXInOiBvcmRlcixcbiAgICAgICAgICAgICd0eXBlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3NpZGUnOiB0cmFkZVsndHlwZSddLFxuICAgICAgICAgICAgJ3ByaWNlJzogcGFyc2VGbG9hdCAodHJhZGVbJ3JhdGUnXSksXG4gICAgICAgICAgICAnYW1vdW50JzogcGFyc2VGbG9hdCAodHJhZGVbJ2Ftb3VudCddKSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG0gPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHRyYWRlcyA9IGF3YWl0IHRoaXMucHVibGljR2V0UmV0dXJuVHJhZGVIaXN0b3J5ICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2N1cnJlbmN5UGFpcic6IG1bJ2lkJ10sXG4gICAgICAgICAgICAnZW5kJzogdGhpcy5zZWNvbmRzICgpLCAvLyBsYXN0IDUwMDAwIHRyYWRlcyBieSBkZWZhdWx0XG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVRyYWRlcyAodHJhZGVzLCBtKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hNeVRyYWRlcyAobWFya2V0ID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgbm93ID0gdGhpcy5zZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVxdWVzdCA9IHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnY3VycmVuY3lQYWlyJzogJ2FsbCcsXG4gICAgICAgICAgICAnZW5kJzogdGhpcy5zZWNvbmRzICgpLCAvLyBsYXN0IDUwMDAwIHRyYWRlcyBieSBkZWZhdWx0XG4gICAgICAgIH0sIHBhcmFtcyk7XG4gICAgICAgIGlmIChtYXJrZXQpIHtcbiAgICAgICAgICAgIGxldCBtID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgICAgICByZXF1ZXN0WydjdXJyZW5jeVBhaXInXSA9IG1bJ2lkJ107XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHRyYWRlcyA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RSZXR1cm5UcmFkZUhpc3RvcnkgKHJlcXVlc3QpO1xuICAgICAgICBpZiAobWFya2V0KVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VUcmFkZXMgKHRyYWRlcywgbSk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogdHJhZGVzIH07XG4gICAgICAgIGxldCBpZHMgPSBPYmplY3Qua2V5cyAodHJhZGVzKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCBpZCA9IGlkc1tpXTtcbiAgICAgICAgICAgIGxldCB0cmFkZXMgPSB0cmFkZXNbaWRdO1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IHRoaXMubWFya2V0c19ieV9pZFtpZF07XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gbWFya2V0WydzeW1ib2wnXTtcbiAgICAgICAgICAgIHJlc3VsdFtzeW1ib2xdID0gdGhpcy5wYXJzZVRyYWRlcyAodHJhZGVzLCBtYXJrZXQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIHBhcnNlT3JkZXIgKG9yZGVyLCBtYXJrZXQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpZCc6IG9yZGVyWydvcmRlck51bWJlciddLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IG9yZGVyWyd0aW1lc3RhbXAnXSxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAob3JkZXJbJ3RpbWVzdGFtcCddKSxcbiAgICAgICAgICAgICdzdGF0dXMnOiBvcmRlclsnc3RhdHVzJ10sXG4gICAgICAgICAgICAnc3ltYm9sJzogbWFya2V0WydzeW1ib2wnXSxcbiAgICAgICAgICAgICd0eXBlJzogb3JkZXJbJ3R5cGUnXSxcbiAgICAgICAgICAgICdzaWRlJzogb3JkZXJbJ3NpZGUnXSxcbiAgICAgICAgICAgICdwcmljZSc6IG9yZGVyWydwcmljZSddLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IG9yZGVyWydhbW91bnQnXSxcbiAgICAgICAgICAgICd0cmFkZXMnOiB0aGlzLnBhcnNlVHJhZGVzIChvcmRlclsncmVzdWx0aW5nVHJhZGVzJ10sIG1hcmtldCksXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoTXlPcGVuT3JkZXJzIChtYXJrZXQgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBtID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAobWFya2V0KVxuICAgICAgICAgICAgbSA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgcGFpciA9IG0gPyBtWydpZCddIDogJ2FsbCc7XG4gICAgICAgIGxldCBvcmRlcnMgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0UmV0dXJuT3Blbk9yZGVycyAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdjdXJyZW5jeVBhaXInOiBwYWlyLFxuICAgICAgICB9KSk7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlT3JkZXJzIChvcmRlcnMsIG0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBpZiAodHlwZSA9PSAnbWFya2V0JylcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyBhbGxvd3MgbGltaXQgb3JkZXJzIG9ubHknKTtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG1ldGhvZCA9ICdwcml2YXRlUG9zdCcgKyB0aGlzLmNhcGl0YWxpemUgKHNpZGUpO1xuICAgICAgICBsZXQgbSA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzW21ldGhvZF0gKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnY3VycmVuY3lQYWlyJzogbVsnaWQnXSxcbiAgICAgICAgICAgICdyYXRlJzogcHJpY2UsXG4gICAgICAgICAgICAnYW1vdW50JzogYW1vdW50LFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgb3JkZXIgPSB0aGlzLnBhcnNlT3JkZXIgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ3N0YXR1cyc6ICdvcGVuJyxcbiAgICAgICAgICAgICd0eXBlJzogdHlwZSxcbiAgICAgICAgICAgICdzaWRlJzogc2lkZSxcbiAgICAgICAgICAgICdwcmljZSc6IHByaWNlLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IGFtb3VudCxcbiAgICAgICAgfSwgcmVzcG9uc2UpLCBtKTtcbiAgICAgICAgbGV0IGlkID0gb3JkZXJbJ2lkJ107XG4gICAgICAgIHRoaXMub3JkZXJzW2lkXSA9IG9yZGVyO1xuICAgICAgICByZXR1cm4gdGhpcy5leHRlbmQgKHsgJ2luZm8nOiByZXNwb25zZSB9LCBvcmRlcik7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXIgKGlkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBvcmRlcnMgPSBhd2FpdCB0aGlzLmZldGNoTXlPcGVuT3JkZXJzICgpO1xuICAgICAgICBsZXQgaW5kZXggPSB0aGlzLmluZGV4QnkgKG9yZGVycywgJ2lkJyk7XG4gICAgICAgIGlmIChpZCBpbiBpbmRleCkge1xuICAgICAgICAgICAgdGhpcy5vcmRlcnNbaWRdID0gaW5kZXhbaWRdO1xuICAgICAgICAgICAgcmV0dXJuIGluZGV4W2lkXTtcbiAgICAgICAgfSBlbHNlIGlmIChpZCBpbiB0aGlzLm9yZGVycykge1xuICAgICAgICAgICAgdGhpcy5vcmRlcnNbaWRdWydzdGF0dXMnXSA9ICdjbG9zZWQnO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMub3JkZXJzW2lkXTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgb3JkZXIgJyArIGlkICsgJyBub3QgZm91bmQnKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlclRyYWRlcyAoaWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCB0cmFkZXMgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0UmV0dXJuT3JkZXJUcmFkZXMgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnb3JkZXJOdW1iZXInOiBpZCxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlVHJhZGVzICh0cmFkZXMpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0Q2FuY2VsT3JkZXIgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnb3JkZXJOdW1iZXInOiBpZCxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ11bYXBpXTtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5leHRlbmQgKHsgJ2NvbW1hbmQnOiBwYXRoIH0sIHBhcmFtcyk7XG4gICAgICAgIGlmIChhcGkgPT0gJ3B1YmxpYycpIHtcbiAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcXVlcnlbJ25vbmNlJ10gPSB0aGlzLm5vbmNlICgpO1xuICAgICAgICAgICAgYm9keSA9IHRoaXMudXJsZW5jb2RlIChxdWVyeSk7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICAgICAgICAnS2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ1NpZ24nOiB0aGlzLmhtYWMgKHRoaXMuZW5jb2RlIChib2R5KSwgdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSwgJ3NoYTUxMicpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgICAgIGlmICgnZXJyb3InIGluIHJlc3BvbnNlKSB7XG4gICAgICAgICAgICBsZXQgZXJyb3IgPSB0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSk7XG4gICAgICAgICAgICBsZXQgZmFpbGVkID0gcmVzcG9uc2VbJ2Vycm9yJ10uaW5kZXhPZiAoJ05vdCBlbm91Z2gnKSA+PSAwO1xuICAgICAgICAgICAgaWYgKGZhaWxlZClcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW5zdWZmaWNpZW50RnVuZHMgKGVycm9yKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yIChlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIHF1YWRyaWdhY3ggPSB7XG5cbiAgICAnaWQnOiAncXVhZHJpZ2FjeCcsXG4gICAgJ25hbWUnOiAnUXVhZHJpZ2FDWCcsXG4gICAgJ2NvdW50cmllcyc6ICdDQScsXG4gICAgJ3JhdGVMaW1pdCc6IDEwMDAsXG4gICAgJ3ZlcnNpb24nOiAndjInLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2ODI1LTk4YTZkMGRlLTVlZTctMTFlNy05ZmE0LTM4ZTExYTJjNmY1Mi5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vYXBpLnF1YWRyaWdhY3guY29tJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy5xdWFkcmlnYWN4LmNvbScsXG4gICAgICAgICdkb2MnOiAnaHR0cHM6Ly93d3cucXVhZHJpZ2FjeC5jb20vYXBpX2luZm8nLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ29yZGVyX2Jvb2snLFxuICAgICAgICAgICAgICAgICd0aWNrZXInLFxuICAgICAgICAgICAgICAgICd0cmFuc2FjdGlvbnMnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnYmFsYW5jZScsXG4gICAgICAgICAgICAgICAgJ2JpdGNvaW5fZGVwb3NpdF9hZGRyZXNzJyxcbiAgICAgICAgICAgICAgICAnYml0Y29pbl93aXRoZHJhd2FsJyxcbiAgICAgICAgICAgICAgICAnYnV5JyxcbiAgICAgICAgICAgICAgICAnY2FuY2VsX29yZGVyJyxcbiAgICAgICAgICAgICAgICAnZXRoZXJfZGVwb3NpdF9hZGRyZXNzJyxcbiAgICAgICAgICAgICAgICAnZXRoZXJfd2l0aGRyYXdhbCcsXG4gICAgICAgICAgICAgICAgJ2xvb2t1cF9vcmRlcicsXG4gICAgICAgICAgICAgICAgJ29wZW5fb3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnc2VsbCcsXG4gICAgICAgICAgICAgICAgJ3VzZXJfdHJhbnNhY3Rpb25zJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9DQUQnOiB7ICdpZCc6ICdidGNfY2FkJywgJ3N5bWJvbCc6ICdCVEMvQ0FEJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ0NBRCcgfSxcbiAgICAgICAgJ0JUQy9VU0QnOiB7ICdpZCc6ICdidGNfdXNkJywgJ3N5bWJvbCc6ICdCVEMvVVNEJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ1VTRCcgfSxcbiAgICAgICAgJ0VUSC9CVEMnOiB7ICdpZCc6ICdldGhfYnRjJywgJ3N5bWJvbCc6ICdFVEgvQlRDJywgJ2Jhc2UnOiAnRVRIJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ0VUSC9DQUQnOiB7ICdpZCc6ICdldGhfY2FkJywgJ3N5bWJvbCc6ICdFVEgvQ0FEJywgJ2Jhc2UnOiAnRVRIJywgJ3F1b3RlJzogJ0NBRCcgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdEJhbGFuY2UgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogYmFsYW5jZXMgfTtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCB0aGlzLmN1cnJlbmNpZXMubGVuZ3RoOyBjKyspIHtcbiAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IHRoaXMuY3VycmVuY2llc1tjXTtcbiAgICAgICAgICAgIGxldCBsb3dlcmNhc2UgPSBjdXJyZW5jeS50b0xvd2VyQ2FzZSAoKTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogcGFyc2VGbG9hdCAoYmFsYW5jZXNbbG93ZXJjYXNlICsgJ19hdmFpbGFibGUnXSksXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiBwYXJzZUZsb2F0IChiYWxhbmNlc1tsb3dlcmNhc2UgKyAnX3Jlc2VydmVkJ10pLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHBhcnNlRmxvYXQgKGJhbGFuY2VzW2xvd2VyY2FzZSArICdfYmFsYW5jZSddKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRPcmRlckJvb2sgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnYm9vayc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gcGFyc2VJbnQgKG9yZGVyYm9va1sndGltZXN0YW1wJ10pICogMTAwMDtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdiaWRzJzogW10sXG4gICAgICAgICAgICAnYXNrcyc6IFtdLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHNpZGVzID0gWyAnYmlkcycsICdhc2tzJyBdO1xuICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IHNpZGVzLmxlbmd0aDsgcysrKSB7XG4gICAgICAgICAgICBsZXQgc2lkZSA9IHNpZGVzW3NdO1xuICAgICAgICAgICAgbGV0IG9yZGVycyA9IG9yZGVyYm9va1tzaWRlXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9yZGVyID0gb3JkZXJzW2ldO1xuICAgICAgICAgICAgICAgIGxldCBwcmljZSA9IHBhcnNlRmxvYXQgKG9yZGVyWzBdKTtcbiAgICAgICAgICAgICAgICBsZXQgYW1vdW50ID0gcGFyc2VGbG9hdCAob3JkZXJbMV0pO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtzaWRlXS5wdXNoIChbIHByaWNlLCBhbW91bnQgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBsZXQgdGlja2VyID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRUaWNrZXIgKHtcbiAgICAgICAgICAgICdib29rJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSBwYXJzZUludCAodGlja2VyWyd0aW1lc3RhbXAnXSkgKiAxMDAwO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydoaWdoJ10pLFxuICAgICAgICAgICAgJ2xvdyc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbG93J10pLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYmlkJ10pLFxuICAgICAgICAgICAgJ2Fzayc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYXNrJ10pLFxuICAgICAgICAgICAgJ3Z3YXAnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3Z3YXAnXSksXG4gICAgICAgICAgICAnb3Blbic6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjbG9zZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdmaXJzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsYXN0JzogcGFyc2VGbG9hdCAodGlja2VyWydsYXN0J10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndm9sdW1lJ10pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldFRyYW5zYWN0aW9ucyAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdib29rJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBtZXRob2QgPSAncHJpdmF0ZVBvc3QnICsgdGhpcy5jYXBpdGFsaXplIChzaWRlKTtcbiAgICAgICAgbGV0IG9yZGVyID0ge1xuICAgICAgICAgICAgJ2Ftb3VudCc6IGFtb3VudCxcbiAgICAgICAgICAgICdib29rJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHR5cGUgPT0gJ2xpbWl0JylcbiAgICAgICAgICAgIG9yZGVyWydwcmljZSddID0gcHJpY2U7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXNbbWV0aG9kXSAodGhpcy5leHRlbmQgKG9yZGVyLCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnaWQnXS50b1N0cmluZyAoKSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdENhbmNlbE9yZGVyICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgJy8nICsgdGhpcy52ZXJzaW9uICsgJy8nICsgcGF0aDtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChwYXJhbXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnVpZClcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXV0aGVudGljYXRpb25FcnJvciAodGhpcy5pZCArICcgcmVxdWlyZXMgYCcgKyB0aGlzLmlkICsgJy51aWRgIHByb3BlcnR5IGZvciBhdXRoZW50aWNhdGlvbicpO1xuICAgICAgICAgICAgbGV0IG5vbmNlID0gdGhpcy5ub25jZSAoKTtcbiAgICAgICAgICAgIGxldCByZXF1ZXN0ID0gWyBub25jZS50b1N0cmluZyAoKSwgdGhpcy51aWQsIHRoaXMuYXBpS2V5IF0uam9pbiAoJycpO1xuICAgICAgICAgICAgbGV0IHNpZ25hdHVyZSA9IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKHJlcXVlc3QpLCB0aGlzLmVuY29kZSAodGhpcy5zZWNyZXQpKTtcbiAgICAgICAgICAgIGxldCBxdWVyeSA9IHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAgICAgJ2tleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgICAgICdub25jZSc6IG5vbmNlLFxuICAgICAgICAgICAgICAgICdzaWduYXR1cmUnOiBzaWduYXR1cmUsXG4gICAgICAgICAgICB9LCBwYXJhbXMpO1xuICAgICAgICAgICAgYm9keSA9IHRoaXMuanNvbiAocXVlcnkpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICdDb250ZW50LUxlbmd0aCc6IGJvZHkubGVuZ3RoLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgICAgIGlmICgnZXJyb3InIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBxdW9pbmUgPSB7XG5cbiAgICAnaWQnOiAncXVvaW5lJyxcbiAgICAnbmFtZSc6ICdRVU9JTkUnLFxuICAgICdjb3VudHJpZXMnOiBbICdKUCcsICdTRycsICdWTicgXSxcbiAgICAndmVyc2lvbic6ICcyJyxcbiAgICAncmF0ZUxpbWl0JzogMTAwMCxcbiAgICAnaGFzRmV0Y2hUaWNrZXJzJzogdHJ1ZSxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yNzc2Njg0NC05NjE1YTRlOC01ZWU4LTExZTctODgxNC1mY2QwMDRkYjhjZGQuanBnJyxcbiAgICAgICAgJ2FwaSc6ICdodHRwczovL2FwaS5xdW9pbmUuY29tJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy5xdW9pbmUuY29tJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL2RldmVsb3BlcnMucXVvaW5lLmNvbScsXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAncHJvZHVjdHMnLFxuICAgICAgICAgICAgICAgICdwcm9kdWN0cy97aWR9JyxcbiAgICAgICAgICAgICAgICAncHJvZHVjdHMve2lkfS9wcmljZV9sZXZlbHMnLFxuICAgICAgICAgICAgICAgICdleGVjdXRpb25zJyxcbiAgICAgICAgICAgICAgICAnaXJfbGFkZGVycy97Y3VycmVuY3l9JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnYWNjb3VudHMvYmFsYW5jZScsXG4gICAgICAgICAgICAgICAgJ2NyeXB0b19hY2NvdW50cycsXG4gICAgICAgICAgICAgICAgJ2V4ZWN1dGlvbnMvbWUnLFxuICAgICAgICAgICAgICAgICdmaWF0X2FjY291bnRzJyxcbiAgICAgICAgICAgICAgICAnbG9hbl9iaWRzJyxcbiAgICAgICAgICAgICAgICAnbG9hbnMnLFxuICAgICAgICAgICAgICAgICdvcmRlcnMnLFxuICAgICAgICAgICAgICAgICdvcmRlcnMve2lkfScsXG4gICAgICAgICAgICAgICAgJ29yZGVycy97aWR9L3RyYWRlcycsXG4gICAgICAgICAgICAgICAgJ3RyYWRlcycsXG4gICAgICAgICAgICAgICAgJ3RyYWRlcy97aWR9L2xvYW5zJyxcbiAgICAgICAgICAgICAgICAndHJhZGluZ19hY2NvdW50cycsXG4gICAgICAgICAgICAgICAgJ3RyYWRpbmdfYWNjb3VudHMve2lkfScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2ZpYXRfYWNjb3VudHMnLFxuICAgICAgICAgICAgICAgICdsb2FuX2JpZHMnLFxuICAgICAgICAgICAgICAgICdvcmRlcnMnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICdwdXQnOiBbXG4gICAgICAgICAgICAgICAgJ2xvYW5fYmlkcy97aWR9L2Nsb3NlJyxcbiAgICAgICAgICAgICAgICAnbG9hbnMve2lkfScsXG4gICAgICAgICAgICAgICAgJ29yZGVycy97aWR9JyxcbiAgICAgICAgICAgICAgICAnb3JkZXJzL3tpZH0vY2FuY2VsJyxcbiAgICAgICAgICAgICAgICAndHJhZGVzL3tpZH0nLFxuICAgICAgICAgICAgICAgICd0cmFkZXMve2lkfS9jbG9zZScsXG4gICAgICAgICAgICAgICAgJ3RyYWRlcy9jbG9zZV9hbGwnLFxuICAgICAgICAgICAgICAgICd0cmFkaW5nX2FjY291bnRzL3tpZH0nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hNYXJrZXRzICgpIHtcbiAgICAgICAgbGV0IG1hcmtldHMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFByb2R1Y3RzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgbWFya2V0cy5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IG1hcmtldHNbcF07XG4gICAgICAgICAgICBsZXQgaWQgPSBtYXJrZXRbJ2lkJ107XG4gICAgICAgICAgICBsZXQgYmFzZSA9IG1hcmtldFsnYmFzZV9jdXJyZW5jeSddO1xuICAgICAgICAgICAgbGV0IHF1b3RlID0gbWFya2V0WydxdW90ZWRfY3VycmVuY3knXTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBiYXNlICsgJy8nICsgcXVvdGU7XG4gICAgICAgICAgICByZXN1bHQucHVzaCAoe1xuICAgICAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICAgICAgICAgICdzeW1ib2wnOiBzeW1ib2wsXG4gICAgICAgICAgICAgICAgJ2Jhc2UnOiBiYXNlLFxuICAgICAgICAgICAgICAgICdxdW90ZSc6IHF1b3RlLFxuICAgICAgICAgICAgICAgICdpbmZvJzogbWFya2V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gYXdhaXQgdGhpcy5wcml2YXRlR2V0QWNjb3VudHNCYWxhbmNlICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGJhbGFuY2VzIH07XG4gICAgICAgIGZvciAobGV0IGIgPSAwOyBiIDwgYmFsYW5jZXMubGVuZ3RoOyBiKyspIHtcbiAgICAgICAgICAgIGxldCBiYWxhbmNlID0gYmFsYW5jZXNbYl07XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBiYWxhbmNlWydjdXJyZW5jeSddO1xuICAgICAgICAgICAgbGV0IHRvdGFsID0gcGFyc2VGbG9hdCAoYmFsYW5jZVsnYmFsYW5jZSddKTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogdG90YWwsXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogdG90YWwsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IGF3YWl0IHRoaXMucHVibGljR2V0UHJvZHVjdHNJZFByaWNlTGV2ZWxzICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2lkJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdiaWRzJzogW10sXG4gICAgICAgICAgICAnYXNrcyc6IFtdLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHNpZGVzID0geyAnYmlkcyc6ICdidXlfcHJpY2VfbGV2ZWxzJywgJ2Fza3MnOiAnc2VsbF9wcmljZV9sZXZlbHMnIH07XG4gICAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMgKHNpZGVzKTtcbiAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBrZXlzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICBsZXQga2V5ID0ga2V5c1trXTtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNba2V5XTtcbiAgICAgICAgICAgIGxldCBvcmRlcnMgPSBvcmRlcmJvb2tbc2lkZV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBvcmRlciA9IG9yZGVyc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgcHJpY2UgPSBwYXJzZUZsb2F0IChvcmRlclswXSk7XG4gICAgICAgICAgICAgICAgbGV0IGFtb3VudCA9IHBhcnNlRmxvYXQgKG9yZGVyWzFdKTtcbiAgICAgICAgICAgICAgICByZXN1bHRba2V5XS5wdXNoIChbIHByaWNlLCBhbW91bnQgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgcGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KSB7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgbGV0IGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmICgnbGFzdF90cmFkZWRfcHJpY2UnIGluIHRpY2tlcikge1xuICAgICAgICAgICAgaWYgKHRpY2tlclsnbGFzdF90cmFkZWRfcHJpY2UnXSkge1xuICAgICAgICAgICAgICAgIGxldCBsZW5ndGggPSB0aWNrZXJbJ2xhc3RfdHJhZGVkX3ByaWNlJ10ubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGlmIChsZW5ndGggPiAwKVxuICAgICAgICAgICAgICAgICAgICBsYXN0ID0gcGFyc2VGbG9hdCAodGlja2VyWydsYXN0X3RyYWRlZF9wcmljZSddKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydoaWdoX21hcmtldF9hc2snXSksXG4gICAgICAgICAgICAnbG93JzogcGFyc2VGbG9hdCAodGlja2VyWydsb3dfbWFya2V0X2JpZCddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ21hcmtldF9iaWQnXSksXG4gICAgICAgICAgICAnYXNrJzogcGFyc2VGbG9hdCAodGlja2VyWydtYXJrZXRfYXNrJ10pLFxuICAgICAgICAgICAgJ3Z3YXAnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnb3Blbic6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjbG9zZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdmaXJzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsYXN0JzogbGFzdCxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbHVtZV8yNGgnXSksXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXJzICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHRpY2tlcnMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFByb2R1Y3RzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge307XG4gICAgICAgIGZvciAobGV0IHQgPSAwOyB0IDwgdGlja2Vycy5sZW5ndGg7IHQrKykge1xuICAgICAgICAgICAgbGV0IHRpY2tlciA9IHRpY2tlcnNbdF07XG4gICAgICAgICAgICBsZXQgYmFzZSA9IHRpY2tlclsnYmFzZV9jdXJyZW5jeSddO1xuICAgICAgICAgICAgbGV0IHF1b3RlID0gdGlja2VyWydxdW90ZWRfY3VycmVuY3knXTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBiYXNlICsgJy8nICsgcXVvdGU7XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gdGhpcy5tYXJrZXRzW3N5bWJvbF07XG4gICAgICAgICAgICByZXN1bHRbc3ltYm9sXSA9IHRoaXMucGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCB0aWNrZXIgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFByb2R1Y3RzSWQgKHtcbiAgICAgICAgICAgICdpZCc6IHBbJ2lkJ10sXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVRpY2tlciAodGlja2VyLCBwKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0RXhlY3V0aW9ucyAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdwcm9kdWN0X2lkJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdvcmRlcl90eXBlJzogdHlwZSxcbiAgICAgICAgICAgICdwcm9kdWN0X2lkJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICdzaWRlJzogc2lkZSxcbiAgICAgICAgICAgICdxdWFudGl0eSc6IGFtb3VudCxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHR5cGUgPT0gJ2xpbWl0JylcbiAgICAgICAgICAgIG9yZGVyWydwcmljZSddID0gcHJpY2U7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RPcmRlcnMgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnb3JkZXInOiBvcmRlcixcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ2lkJzogcmVzcG9uc2VbJ2lkJ10udG9TdHJpbmcgKCksXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJpdmF0ZVB1dE9yZGVyc0lkQ2FuY2VsICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSAnLycgKyB0aGlzLmltcGxvZGVQYXJhbXMgKHBhdGgsIHBhcmFtcyk7XG4gICAgICAgIGxldCBxdWVyeSA9IHRoaXMub21pdCAocGFyYW1zLCB0aGlzLmV4dHJhY3RQYXJhbXMgKHBhdGgpKTtcbiAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICdYLVF1b2luZS1BUEktVmVyc2lvbic6IHRoaXMudmVyc2lvbixcbiAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgIH07XG4gICAgICAgIGlmIChhcGkgPT0gJ3B1YmxpYycpIHtcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyAocXVlcnkpLmxlbmd0aClcbiAgICAgICAgICAgICAgICB1cmwgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHF1ZXJ5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCk7XG4gICAgICAgICAgICBsZXQgcmVxdWVzdCA9IHtcbiAgICAgICAgICAgICAgICAncGF0aCc6IHVybCxcbiAgICAgICAgICAgICAgICAnbm9uY2UnOiBub25jZSxcbiAgICAgICAgICAgICAgICAndG9rZW5faWQnOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgICAgICAnaWF0JzogTWF0aC5mbG9vciAobm9uY2UgLyAxMDAwKSwgLy8gaXNzdWVkIGF0XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChxdWVyeSkubGVuZ3RoKVxuICAgICAgICAgICAgICAgIGJvZHkgPSB0aGlzLmpzb24gKHF1ZXJ5KTtcbiAgICAgICAgICAgIGhlYWRlcnNbJ1gtUXVvaW5lLUF1dGgnXSA9IHRoaXMuand0IChyZXF1ZXN0LCB0aGlzLnNlY3JldCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCAodGhpcy51cmxzWydhcGknXSArIHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdtZXNzYWdlJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgc291dGh4Y2hhbmdlID0ge1xuXG4gICAgJ2lkJzogJ3NvdXRoeGNoYW5nZScsXG4gICAgJ25hbWUnOiAnU291dGhYY2hhbmdlJyxcbiAgICAnY291bnRyaWVzJzogJ0FSJywgLy8gQXJnZW50aW5hXG4gICAgJ3JhdGVMaW1pdCc6IDEwMDAsXG4gICAgJ2hhc0ZldGNoVGlja2Vycyc6IHRydWUsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc4Mzg5MTItNGY5NGVjOGEtNjBmNi0xMWU3LTllNWQtYmJmOWJkNTBhNTU5LmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly93d3cuc291dGh4Y2hhbmdlLmNvbS9hcGknLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vd3d3LnNvdXRoeGNoYW5nZS5jb20nLFxuICAgICAgICAnZG9jJzogJ2h0dHBzOi8vd3d3LnNvdXRoeGNoYW5nZS5jb20vSG9tZS9BcGknLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ21hcmtldHMnLFxuICAgICAgICAgICAgICAgICdwcmljZS97c3ltYm9sfScsXG4gICAgICAgICAgICAgICAgJ3ByaWNlcycsXG4gICAgICAgICAgICAgICAgJ2Jvb2sve3N5bWJvbH0nLFxuICAgICAgICAgICAgICAgICd0cmFkZXMve3N5bWJvbH0nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnY2FuY2VsTWFya2V0T3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnY2FuY2VsT3JkZXInLFxuICAgICAgICAgICAgICAgICdnZW5lcmF0ZW5ld2FkZHJlc3MnLFxuICAgICAgICAgICAgICAgICdsaXN0T3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnbGlzdEJhbGFuY2VzJyxcbiAgICAgICAgICAgICAgICAncGxhY2VPcmRlcicsXG4gICAgICAgICAgICAgICAgJ3dpdGhkcmF3JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoTWFya2V0cyAoKSB7XG4gICAgICAgIGxldCBtYXJrZXRzID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgbWFya2V0cy5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IG1hcmtldHNbcF07XG4gICAgICAgICAgICBsZXQgYmFzZSA9IG1hcmtldFswXTtcbiAgICAgICAgICAgIGxldCBxdW90ZSA9IG1hcmtldFsxXTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBiYXNlICsgJy8nICsgcXVvdGU7XG4gICAgICAgICAgICBsZXQgaWQgPSBzeW1ib2w7XG4gICAgICAgICAgICByZXN1bHQucHVzaCAoe1xuICAgICAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICAgICAgICAgICdzeW1ib2wnOiBzeW1ib2wsXG4gICAgICAgICAgICAgICAgJ2Jhc2UnOiBiYXNlLFxuICAgICAgICAgICAgICAgICdxdW90ZSc6IHF1b3RlLFxuICAgICAgICAgICAgICAgICdpbmZvJzogbWFya2V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdExpc3RCYWxhbmNlcyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiBiYWxhbmNlcyB9O1xuICAgICAgICBmb3IgKGxldCBiID0gMDsgYiA8IGJhbGFuY2VzLmxlbmd0aDsgYisrKSB7XG4gICAgICAgICAgICBsZXQgYmFsYW5jZSA9IGJhbGFuY2VzW2JdO1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gYmFsYW5jZVsnQ3VycmVuY3knXTtcbiAgICAgICAgICAgIGxldCB1cHBlcmNhc2UgPSBjdXJyZW5jeS51cHBlcmNhc2U7XG4gICAgICAgICAgICBsZXQgZnJlZSA9IHBhcnNlRmxvYXQgKGJhbGFuY2VbJ0F2YWlsYWJsZSddKTtcbiAgICAgICAgICAgIGxldCB1c2VkID0gcGFyc2VGbG9hdCAoYmFsYW5jZVsnVW5jb25maXJtZWQnXSk7XG4gICAgICAgICAgICBsZXQgdG90YWwgPSB0aGlzLnN1bSAoZnJlZSwgdXNlZCk7XG4gICAgICAgICAgICBsZXQgYWNjb3VudCA9IHtcbiAgICAgICAgICAgICAgICAnZnJlZSc6IGZyZWUsXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1c2VkLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHRvdGFsLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlc3VsdFtjdXJyZW5jeV0gPSBhY2NvdW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSBhd2FpdCB0aGlzLnB1YmxpY0dldEJvb2tTeW1ib2wgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnc3ltYm9sJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdiaWRzJzogW10sXG4gICAgICAgICAgICAnYXNrcyc6IFtdLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHNpZGVzID0geyAnYmlkcyc6ICdCdXlPcmRlcnMnLCAnYXNrcyc6ICdTZWxsT3JkZXJzJyB9O1xuICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzIChzaWRlcyk7XG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwga2V5cy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgbGV0IGtleSA9IGtleXNba107XG4gICAgICAgICAgICBsZXQgc2lkZSA9IHNpZGVzW2tleV07XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAob3JkZXJbJ1ByaWNlJ10pO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBwYXJzZUZsb2F0IChvcmRlclsnQW1vdW50J10pO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldLnB1c2ggKFsgcHJpY2UsIGFtb3VudCBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBwYXJzZVRpY2tlciAodGlja2VyLCBtYXJrZXQpIHtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgYmlkID0gdW5kZWZpbmVkO1xuICAgICAgICBsZXQgYXNrID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoJ0JpZCcgaW4gdGlja2VyKVxuICAgICAgICAgICAgaWYgKHRpY2tlclsnQmlkJ10pXG4gICAgICAgICAgICAgICAgYmlkID0gcGFyc2VGbG9hdCAodGlja2VyWydCaWQnXSk7XG4gICAgICAgIGlmICgnQXNrJyBpbiB0aWNrZXIpXG4gICAgICAgICAgICBpZiAodGlja2VyWydBc2snXSlcbiAgICAgICAgICAgICAgICBhc2sgPSBwYXJzZUZsb2F0ICh0aWNrZXJbJ0FzayddKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsb3cnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmlkJzogYmlkLFxuICAgICAgICAgICAgJ2Fzayc6IGFzayxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnTGFzdCddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ1ZhcmlhdGlvbjI0SHInXSksXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ1ZvbHVtZTI0SHInXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXJzICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRQcmljZXMgKCk7XG4gICAgICAgIGxldCB0aWNrZXJzID0gdGhpcy5pbmRleEJ5IChyZXNwb25zZSwgJ01hcmtldCcpO1xuICAgICAgICBsZXQgaWRzID0gT2JqZWN0LmtleXMgKHRpY2tlcnMpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge307XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgaWQgPSBpZHNbaV07XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gdGhpcy5tYXJrZXRzX2J5X2lkW2lkXTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBtYXJrZXRbJ3N5bWJvbCddO1xuICAgICAgICAgICAgbGV0IHRpY2tlciA9IHRpY2tlcnNbaWRdO1xuICAgICAgICAgICAgcmVzdWx0W3N5bWJvbF0gPSB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIG1hcmtldCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgdGlja2VyID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRQcmljZVN5bWJvbCAoe1xuICAgICAgICAgICAgJ3N5bWJvbCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVRpY2tlciAodGlja2VyLCBwKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0VHJhZGVzU3ltYm9sICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ3N5bWJvbCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAnbGlzdGluZ0N1cnJlbmN5JzogcFsnYmFzZSddLFxuICAgICAgICAgICAgJ3JlZmVyZW5jZUN1cnJlbmN5JzogcFsncXVvdGUnXSxcbiAgICAgICAgICAgICd0eXBlJzogc2lkZSxcbiAgICAgICAgICAgICdhbW91bnQnOiBhbW91bnQsXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlID09ICdsaW1pdCcpXG4gICAgICAgICAgICBvcmRlclsnbGltaXRQcmljZSddID0gcHJpY2U7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RQbGFjZU9yZGVyICh0aGlzLmV4dGVuZCAob3JkZXIsIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXNwb25zZSxcbiAgICAgICAgICAgICdpZCc6IHJlc3BvbnNlLnRvU3RyaW5nICgpLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0Q2FuY2VsT3JkZXIgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnb3JkZXJDb2RlJzogaWQsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgJy8nICsgdGhpcy5pbXBsb2RlUGFyYW1zIChwYXRoLCBwYXJhbXMpO1xuICAgICAgICBsZXQgcXVlcnkgPSB0aGlzLm9taXQgKHBhcmFtcywgdGhpcy5leHRyYWN0UGFyYW1zIChwYXRoKSk7XG4gICAgICAgIGlmIChhcGkgPT0gJ3ByaXZhdGUnKSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpO1xuICAgICAgICAgICAgcXVlcnkgPSB0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgICAgICdrZXknOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgICAgICAnbm9uY2UnOiBub25jZSxcbiAgICAgICAgICAgIH0sIHF1ZXJ5KTtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLmpzb24gKHF1ZXJ5KTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAnSGFzaCc6IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKGJvZHkpLCB0aGlzLmVuY29kZSAodGhpcy5zZWNyZXQpLCAnc2hhNTEyJyksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgLy8gaWYgKCFyZXNwb25zZSlcbiAgICAgICAgLy8gICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgc3VyYml0Y29pbiA9IGV4dGVuZCAoYmxpbmt0cmFkZSwge1xuICAgICdpZCc6ICdzdXJiaXRjb2luJyxcbiAgICAnbmFtZSc6ICdTdXJCaXRjb2luJyxcbiAgICAnY291bnRyaWVzJzogJ1ZFJyxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yNzk5MTUxMS1mMGE1MDE5NC02NDgxLTExZTctOTliNS04ZjAyOTMyNDI0Y2MuanBnJyxcbiAgICAgICAgJ2FwaSc6IHtcbiAgICAgICAgICAgICdwdWJsaWMnOiAnaHR0cHM6Ly9hcGkuYmxpbmt0cmFkZS5jb20vYXBpJyxcbiAgICAgICAgICAgICdwcml2YXRlJzogJ2h0dHBzOi8vYXBpLmJsaW5rdHJhZGUuY29tL3RhcGknLFxuICAgICAgICB9LFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vc3VyYml0Y29pbi5jb20nLFxuICAgICAgICAnZG9jJzogJ2h0dHBzOi8vYmxpbmt0cmFkZS5jb20vZG9jcycsXG4gICAgfSxcbiAgICAnY29tbWVudCc6ICdCbGlua3RyYWRlIEFQSScsXG4gICAgJ21hcmtldHMnOiB7XG4gICAgICAgICdCVEMvVkVGJzogeyAnaWQnOiAnQlRDVkVGJywgJ3N5bWJvbCc6ICdCVEMvVkVGJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ1ZFRicsICdicm9rZXJJZCc6IDEsICdicm9rZXInOiAnU3VyQml0Y29pbicgfSxcbiAgICB9LFxufSlcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgdGhlcm9jayA9IHtcblxuICAgICdpZCc6ICd0aGVyb2NrJyxcbiAgICAnbmFtZSc6ICdUaGVSb2NrVHJhZGluZycsXG4gICAgJ2NvdW50cmllcyc6ICdNVCcsXG4gICAgJ3JhdGVMaW1pdCc6IDEwMDAsXG4gICAgJ3ZlcnNpb24nOiAndjEnLFxuICAgICdoYXNGZXRjaFRpY2tlcnMnOiB0cnVlLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2ODY5LTc1MDU3ZmEyLTVlZTktMTFlNy05YTZmLTEzZTY0MWZhNDcwNy5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vYXBpLnRoZXJvY2t0cmFkaW5nLmNvbScsXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly90aGVyb2NrdHJhZGluZy5jb20nLFxuICAgICAgICAnZG9jJzogW1xuICAgICAgICAgICAgJ2h0dHBzOi8vYXBpLnRoZXJvY2t0cmFkaW5nLmNvbS9kb2MvdjEvaW5kZXguaHRtbCcsXG4gICAgICAgICAgICAnaHR0cHM6Ly9hcGkudGhlcm9ja3RyYWRpbmcuY29tL2RvYy8nLFxuICAgICAgICBdLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ2Z1bmRzL3tpZH0vb3JkZXJib29rJyxcbiAgICAgICAgICAgICAgICAnZnVuZHMve2lkfS90aWNrZXInLFxuICAgICAgICAgICAgICAgICdmdW5kcy97aWR9L3RyYWRlcycsXG4gICAgICAgICAgICAgICAgJ2Z1bmRzL3RpY2tlcnMnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdiYWxhbmNlcycsXG4gICAgICAgICAgICAgICAgJ2JhbGFuY2VzL3tpZH0nLFxuICAgICAgICAgICAgICAgICdkaXNjb3VudHMnLFxuICAgICAgICAgICAgICAgICdkaXNjb3VudHMve2lkfScsXG4gICAgICAgICAgICAgICAgJ2Z1bmRzJyxcbiAgICAgICAgICAgICAgICAnZnVuZHMve2lkfScsXG4gICAgICAgICAgICAgICAgJ2Z1bmRzL3tpZH0vdHJhZGVzJyxcbiAgICAgICAgICAgICAgICAnZnVuZHMve2Z1bmRfaWR9L29yZGVycycsXG4gICAgICAgICAgICAgICAgJ2Z1bmRzL3tmdW5kX2lkfS9vcmRlcnMve2lkfScsXG4gICAgICAgICAgICAgICAgJ2Z1bmRzL3tmdW5kX2lkfS9wb3NpdGlvbl9iYWxhbmNlcycsXG4gICAgICAgICAgICAgICAgJ2Z1bmRzL3tmdW5kX2lkfS9wb3NpdGlvbnMnLFxuICAgICAgICAgICAgICAgICdmdW5kcy97ZnVuZF9pZH0vcG9zaXRpb25zL3tpZH0nLFxuICAgICAgICAgICAgICAgICd0cmFuc2FjdGlvbnMnLFxuICAgICAgICAgICAgICAgICd0cmFuc2FjdGlvbnMve2lkfScsXG4gICAgICAgICAgICAgICAgJ3dpdGhkcmF3X2xpbWl0cy97aWR9JyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXdfbGltaXRzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnYXRtcy93aXRoZHJhdycsXG4gICAgICAgICAgICAgICAgJ2Z1bmRzL3tmdW5kX2lkfS9vcmRlcnMnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICdkZWxldGUnOiBbXG4gICAgICAgICAgICAgICAgJ2Z1bmRzL3tmdW5kX2lkfS9vcmRlcnMve2lkfScsXG4gICAgICAgICAgICAgICAgJ2Z1bmRzL3tmdW5kX2lkfS9vcmRlcnMvcmVtb3ZlX2FsbCcsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE1hcmtldHMgKCkge1xuICAgICAgICBsZXQgbWFya2V0cyA9IGF3YWl0IHRoaXMucHVibGljR2V0RnVuZHNUaWNrZXJzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgbWFya2V0c1sndGlja2VycyddLmxlbmd0aDsgcCsrKSB7XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gbWFya2V0c1sndGlja2VycyddW3BdO1xuICAgICAgICAgICAgbGV0IGlkID0gbWFya2V0WydmdW5kX2lkJ107XG4gICAgICAgICAgICBsZXQgYmFzZSA9IGlkLnNsaWNlICgwLCAzKTtcbiAgICAgICAgICAgIGxldCBxdW90ZSA9IGlkLnNsaWNlICgzLCA2KTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBiYXNlICsgJy8nICsgcXVvdGU7XG4gICAgICAgICAgICByZXN1bHQucHVzaCAoe1xuICAgICAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICAgICAgICAgICdzeW1ib2wnOiBzeW1ib2wsXG4gICAgICAgICAgICAgICAgJ2Jhc2UnOiBiYXNlLFxuICAgICAgICAgICAgICAgICdxdW90ZSc6IHF1b3RlLFxuICAgICAgICAgICAgICAgICdpbmZvJzogbWFya2V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlR2V0QmFsYW5jZXMgKCk7XG4gICAgICAgIGxldCBiYWxhbmNlcyA9IHJlc3BvbnNlWydiYWxhbmNlcyddO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IHJlc3BvbnNlIH07XG4gICAgICAgIGZvciAobGV0IGIgPSAwOyBiIDwgYmFsYW5jZXMubGVuZ3RoOyBiKyspIHtcbiAgICAgICAgICAgIGxldCBiYWxhbmNlID0gYmFsYW5jZXNbYl07XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBiYWxhbmNlWydjdXJyZW5jeSddO1xuICAgICAgICAgICAgbGV0IGZyZWUgPSBiYWxhbmNlWyd0cmFkaW5nX2JhbGFuY2UnXTtcbiAgICAgICAgICAgIGxldCB0b3RhbCA9IGJhbGFuY2VbJ2JhbGFuY2UnXTtcbiAgICAgICAgICAgIGxldCB1c2VkID0gdG90YWwgLSBmcmVlO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiBmcmVlLFxuICAgICAgICAgICAgICAgICd1c2VkJzogdXNlZCxcbiAgICAgICAgICAgICAgICAndG90YWwnOiB0b3RhbCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRGdW5kc0lkT3JkZXJib29rICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2lkJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLnBhcnNlODYwMSAob3JkZXJib29rWydkYXRlJ10pO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAob3JkZXJbJ3ByaWNlJ10pO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBwYXJzZUZsb2F0IChvcmRlclsnYW1vdW50J10pO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtzaWRlXS5wdXNoIChbIHByaWNlLCBhbW91bnQgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgcGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KSB7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLnBhcnNlODYwMSAodGlja2VyWydkYXRlJ10pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydoaWdoJ10pLFxuICAgICAgICAgICAgJ2xvdyc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbG93J10pLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYmlkJ10pLFxuICAgICAgICAgICAgJ2Fzayc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYXNrJ10pLFxuICAgICAgICAgICAgJ3Z3YXAnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnb3Blbic6IHBhcnNlRmxvYXQgKHRpY2tlclsnb3BlbiddKSxcbiAgICAgICAgICAgICdjbG9zZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsnY2xvc2UnXSksXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdCddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbHVtZV90cmFkZWQnXSksXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbHVtZSddKSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlcnMgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldEZ1bmRzVGlja2VycyAoKTtcbiAgICAgICAgbGV0IHRpY2tlcnMgPSB0aGlzLmluZGV4QnkgKHJlc3BvbnNlWyd0aWNrZXJzJ10sICdmdW5kX2lkJyk7XG4gICAgICAgIGxldCBpZHMgPSBPYmplY3Qua2V5cyAodGlja2Vycyk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7fTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCBpZCA9IGlkc1tpXTtcbiAgICAgICAgICAgIGxldCBtYXJrZXQgPSB0aGlzLm1hcmtldHNfYnlfaWRbaWRdO1xuICAgICAgICAgICAgbGV0IHN5bWJvbCA9IG1hcmtldFsnc3ltYm9sJ107XG4gICAgICAgICAgICBsZXQgdGlja2VyID0gdGlja2Vyc1tpZF07XG4gICAgICAgICAgICByZXN1bHRbc3ltYm9sXSA9IHRoaXMucGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCB0aWNrZXIgPSBhd2FpdCB0aGlzLnB1YmxpY0dldEZ1bmRzSWRUaWNrZXIgKHtcbiAgICAgICAgICAgICdpZCc6IHBbJ2lkJ10sXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVRpY2tlciAodGlja2VyLCBwKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0RnVuZHNJZFRyYWRlcyAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdpZCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBpZiAodHlwZSA9PSAnbWFya2V0JylcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyBhbGxvd3MgbGltaXQgb3JkZXJzIG9ubHknKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdEZ1bmRzRnVuZElkT3JkZXJzICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2Z1bmRfaWQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICAgICAgJ3NpZGUnOiBzaWRlLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IGFtb3VudCxcbiAgICAgICAgICAgICdwcmljZSc6IHByaWNlLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnaWQnXS50b1N0cmluZyAoKSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlRGVsZXRlRnVuZHNGdW5kSWRPcmRlcnNJZCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArICcvJyArIHRoaXMudmVyc2lvbiArICcvJyArIHRoaXMuaW1wbG9kZVBhcmFtcyAocGF0aCwgcGFyYW1zKTtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5vbWl0IChwYXJhbXMsIHRoaXMuZXh0cmFjdFBhcmFtcyAocGF0aCkpO1xuICAgICAgICBpZiAoYXBpID09ICdwcml2YXRlJykge1xuICAgICAgICAgICAgbGV0IG5vbmNlID0gdGhpcy5ub25jZSAoKS50b1N0cmluZyAoKTtcbiAgICAgICAgICAgIGxldCBhdXRoID0gbm9uY2UgKyB1cmw7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdYLVRSVC1LRVknOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgICAgICAnWC1UUlQtTk9OQ0UnOiBub25jZSxcbiAgICAgICAgICAgICAgICAnWC1UUlQtU0lHTic6IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKGF1dGgpLCB0aGlzLmVuY29kZSAodGhpcy5zZWNyZXQpLCAnc2hhNTEyJyksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChxdWVyeSkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgYm9keSA9IHRoaXMuanNvbiAocXVlcnkpO1xuICAgICAgICAgICAgICAgIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gJ2FwcGxpY2F0aW9uL2pzb24nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdlcnJvcnMnIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciB1cmR1Yml0ID0gZXh0ZW5kIChibGlua3RyYWRlLCB7XG4gICAgJ2lkJzogJ3VyZHViaXQnLFxuICAgICduYW1lJzogJ1VyZHVCaXQnLFxuICAgICdjb3VudHJpZXMnOiAnUEsnLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3OTkxNDUzLTE1NmJmM2FlLTY0ODAtMTFlNy04MmViLTcyOTVmZTFiNWJiNC5qcGcnLFxuICAgICAgICAnYXBpJzoge1xuICAgICAgICAgICAgJ3B1YmxpYyc6ICdodHRwczovL2FwaS5ibGlua3RyYWRlLmNvbS9hcGknLFxuICAgICAgICAgICAgJ3ByaXZhdGUnOiAnaHR0cHM6Ly9hcGkuYmxpbmt0cmFkZS5jb20vdGFwaScsXG4gICAgICAgIH0sXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly91cmR1Yml0LmNvbScsXG4gICAgICAgICdkb2MnOiAnaHR0cHM6Ly9ibGlua3RyYWRlLmNvbS9kb2NzJyxcbiAgICB9LFxuICAgICdjb21tZW50JzogJ0JsaW5rdHJhZGUgQVBJJyxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9QS1InOiB7ICdpZCc6ICdCVENQS1InLCAnc3ltYm9sJzogJ0JUQy9QS1InLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnUEtSJywgJ2Jyb2tlcklkJzogOCwgJ2Jyb2tlcic6ICdVcmR1Qml0JyB9LFxuICAgIH0sXG59KVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciB2YXVsdG9ybyA9IHtcblxuICAgICdpZCc6ICd2YXVsdG9ybycsXG4gICAgJ25hbWUnOiAnVmF1bHRvcm8nLFxuICAgICdjb3VudHJpZXMnOiAnQ0gnLFxuICAgICdyYXRlTGltaXQnOiAxMDAwLFxuICAgICd2ZXJzaW9uJzogJzEnLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2ODgwLWYyMDVlODcwLTVlZTktMTFlNy04ZmUyLTBkNWIxNTg4MDc1Mi5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vYXBpLnZhdWx0b3JvLmNvbScsXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly93d3cudmF1bHRvcm8uY29tJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL2FwaS52YXVsdG9yby5jb20nLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ2JpZGFuZGFzaycsXG4gICAgICAgICAgICAgICAgJ2J1eW9yZGVycycsXG4gICAgICAgICAgICAgICAgJ2xhdGVzdCcsXG4gICAgICAgICAgICAgICAgJ2xhdGVzdHRyYWRlcycsXG4gICAgICAgICAgICAgICAgJ21hcmtldHMnLFxuICAgICAgICAgICAgICAgICdvcmRlcmJvb2snLFxuICAgICAgICAgICAgICAgICdzZWxsb3JkZXJzJyxcbiAgICAgICAgICAgICAgICAndHJhbnNhY3Rpb25zL2RheScsXG4gICAgICAgICAgICAgICAgJ3RyYW5zYWN0aW9ucy9ob3VyJyxcbiAgICAgICAgICAgICAgICAndHJhbnNhY3Rpb25zL21vbnRoJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnYmFsYW5jZScsXG4gICAgICAgICAgICAgICAgJ215dHJhZGVzJyxcbiAgICAgICAgICAgICAgICAnb3JkZXJzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnYnV5L3tzeW1ib2x9L3t0eXBlfScsXG4gICAgICAgICAgICAgICAgJ2NhbmNlbC97aWR9JyxcbiAgICAgICAgICAgICAgICAnc2VsbC97c3ltYm9sfS97dHlwZX0nLFxuICAgICAgICAgICAgICAgICd3aXRoZHJhdycsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE1hcmtldHMgKCkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGxldCBtYXJrZXRzID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgbWFya2V0ID0gbWFya2V0c1snZGF0YSddO1xuICAgICAgICBsZXQgYmFzZSA9IG1hcmtldFsnQmFzZUN1cnJlbmN5J107XG4gICAgICAgIGxldCBxdW90ZSA9IG1hcmtldFsnTWFya2V0Q3VycmVuY3knXTtcbiAgICAgICAgbGV0IHN5bWJvbCA9IGJhc2UgKyAnLycgKyBxdW90ZTtcbiAgICAgICAgbGV0IGJhc2VJZCA9IGJhc2U7XG4gICAgICAgIGxldCBxdW90ZUlkID0gcXVvdGU7XG4gICAgICAgIGxldCBpZCA9IG1hcmtldFsnTWFya2V0TmFtZSddO1xuICAgICAgICByZXN1bHQucHVzaCAoe1xuICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgJ2Jhc2UnOiBiYXNlLFxuICAgICAgICAgICAgJ3F1b3RlJzogcXVvdGUsXG4gICAgICAgICAgICAnYmFzZUlkJzogYmFzZUlkLFxuICAgICAgICAgICAgJ3F1b3RlSWQnOiBxdW90ZUlkLFxuICAgICAgICAgICAgJ2luZm8nOiBtYXJrZXQsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVHZXRCYWxhbmNlICgpO1xuICAgICAgICBsZXQgYmFsYW5jZXMgPSByZXNwb25zZVsnZGF0YSddO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGJhbGFuY2VzIH07XG4gICAgICAgIGZvciAobGV0IGIgPSAwOyBiIDwgYmFsYW5jZXMubGVuZ3RoOyBiKyspIHtcbiAgICAgICAgICAgIGxldCBiYWxhbmNlID0gYmFsYW5jZXNbYl07XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBiYWxhbmNlWydjdXJyZW5jeV9jb2RlJ107XG4gICAgICAgICAgICBsZXQgdXBwZXJjYXNlID0gY3VycmVuY3kudG9VcHBlckNhc2UgKCk7XG4gICAgICAgICAgICBsZXQgZnJlZSA9IGJhbGFuY2VbJ2Nhc2gnXTtcbiAgICAgICAgICAgIGxldCB1c2VkID0gYmFsYW5jZVsncmVzZXJ2ZWQnXTtcbiAgICAgICAgICAgIGxldCB0b3RhbCA9IHRoaXMuc3VtIChmcmVlLCB1c2VkKTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogZnJlZSxcbiAgICAgICAgICAgICAgICAndXNlZCc6IHVzZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogdG90YWwsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRPcmRlcmJvb2sgKHBhcmFtcyk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IHJlc3BvbnNlWydkYXRhJ11bMF1bJ2InXSxcbiAgICAgICAgICAgICdhc2tzJzogcmVzcG9uc2VbJ2RhdGEnXVsxXVsncyddLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IFtdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaWRlcyA9IFsgJ2JpZHMnLCAnYXNrcycgXTtcbiAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBzaWRlcy5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1tzXTtcbiAgICAgICAgICAgIGxldCBvcmRlcnMgPSBvcmRlcmJvb2tbc2lkZV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBvcmRlciA9IG9yZGVyc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgcHJpY2UgPSBvcmRlclsnR29sZF9QcmljZSddO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBvcmRlclsnR29sZF9BbW91bnQnXTtcbiAgICAgICAgICAgICAgICByZXN1bHRbc2lkZV0ucHVzaCAoWyBwcmljZSwgYW1vdW50IF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlc3VsdFsnYmlkcyddID0gdGhpcy5zb3J0QnkgKHJlc3VsdFsnYmlkcyddLCAwLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcXVvdGUgPSBhd2FpdCB0aGlzLnB1YmxpY0dldEJpZGFuZGFzayAoKTtcbiAgICAgICAgbGV0IGJpZHNMZW5ndGggPSBxdW90ZVsnYmlkcyddLmxlbmd0aDtcbiAgICAgICAgbGV0IGJpZCA9IHF1b3RlWydiaWRzJ11bYmlkc0xlbmd0aCAtIDFdO1xuICAgICAgICBsZXQgYXNrID0gcXVvdGVbJ2Fza3MnXVswXTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgdGlja2VyID0gcmVzcG9uc2VbJ2RhdGEnXTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWycyNGhIaWdoJ10pLFxuICAgICAgICAgICAgJ2xvdyc6IHBhcnNlRmxvYXQgKHRpY2tlclsnMjRoTG93J10pLFxuICAgICAgICAgICAgJ2JpZCc6IGJpZFswXSxcbiAgICAgICAgICAgICdhc2snOiBhc2tbMF0sXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ0xhc3RQcmljZSddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJzI0aFZvbHVtZSddKSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wdWJsaWNHZXRUcmFuc2FjdGlvbnNEYXkgKHBhcmFtcyk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCBtZXRob2QgPSAncHJpdmF0ZVBvc3QnICsgdGhpcy5jYXBpdGFsaXplIChzaWRlKSArICdTeW1ib2xUeXBlJztcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpc1ttZXRob2RdICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ3N5bWJvbCc6IHBbJ3F1b3RlSWQnXS50b0xvd2VyQ2FzZSAoKSxcbiAgICAgICAgICAgICd0eXBlJzogdHlwZSxcbiAgICAgICAgICAgICdnbGQnOiBhbW91bnQsXG4gICAgICAgICAgICAncHJpY2UnOiBwcmljZSB8fCAxLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnZGF0YSddWydPcmRlcl9JRCddLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0Q2FuY2VsSWQgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnaWQnOiBpZCxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ10gKyAnLyc7XG4gICAgICAgIGlmIChhcGkgPT0gJ3B1YmxpYycpIHtcbiAgICAgICAgICAgIHVybCArPSBwYXRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG5vbmNlID0gdGhpcy5ub25jZSAoKTtcbiAgICAgICAgICAgIHVybCArPSB0aGlzLnZlcnNpb24gKyAnLycgKyB0aGlzLmltcGxvZGVQYXJhbXMgKHBhdGgsIHBhcmFtcyk7XG4gICAgICAgICAgICBsZXQgcXVlcnkgPSB0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgICAgICdub25jZSc6IG5vbmNlLFxuICAgICAgICAgICAgICAgICdhcGlrZXknOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgIH0sIHRoaXMub21pdCAocGFyYW1zLCB0aGlzLmV4dHJhY3RQYXJhbXMgKHBhdGgpKSk7XG4gICAgICAgICAgICB1cmwgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHF1ZXJ5KTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAnWC1TaWduYXR1cmUnOiB0aGlzLmhtYWMgKHRoaXMuZW5jb2RlICh1cmwpLCB0aGlzLmVuY29kZSAodGhpcy5zZWNyZXQpKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIHZidGMgPSBleHRlbmQgKGJsaW5rdHJhZGUsIHtcbiAgICAnaWQnOiAndmJ0YycsXG4gICAgJ25hbWUnOiAnVkJUQycsXG4gICAgJ2NvdW50cmllcyc6ICdWTicsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc5OTE0ODEtMWY1M2QxZDgtNjQ4MS0xMWU3LTg4NGUtMjFkMTdlNzkzOWRiLmpwZycsXG4gICAgICAgICdhcGknOiB7XG4gICAgICAgICAgICAncHVibGljJzogJ2h0dHBzOi8vYXBpLmJsaW5rdHJhZGUuY29tL2FwaScsXG4gICAgICAgICAgICAncHJpdmF0ZSc6ICdodHRwczovL2FwaS5ibGlua3RyYWRlLmNvbS90YXBpJyxcbiAgICAgICAgfSxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3ZidGMuZXhjaGFuZ2UnLFxuICAgICAgICAnZG9jJzogJ2h0dHBzOi8vYmxpbmt0cmFkZS5jb20vZG9jcycsXG4gICAgfSxcbiAgICAnY29tbWVudCc6ICdCbGlua3RyYWRlIEFQSScsXG4gICAgJ21hcmtldHMnOiB7XG4gICAgICAgICdCVEMvVk5EJzogeyAnaWQnOiAnQlRDVk5EJywgJ3N5bWJvbCc6ICdCVEMvVk5EJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ1ZORCcsICdicm9rZXJJZCc6IDMsICdicm9rZXInOiAnVkJUQycgfSxcbiAgICB9LFxufSlcblxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciB2aXJ3b3ggPSB7XG5cbiAgICAnaWQnOiAndmlyd294JyxcbiAgICAnbmFtZSc6ICdWaXJXb1gnLFxuICAgICdjb3VudHJpZXMnOiAnQVQnLFxuICAgICdyYXRlTGltaXQnOiAxMDAwLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2ODk0LTZkYTlkMzYwLTVlZWEtMTFlNy05MGFhLTQxZjI3MTFiNzQwNS5qcGcnLFxuICAgICAgICAnYXBpJzoge1xuICAgICAgICAgICAgJ3B1YmxpYyc6ICdodHRwOi8vYXBpLnZpcndveC5jb20vYXBpL2pzb24ucGhwJyxcbiAgICAgICAgICAgICdwcml2YXRlJzogJ2h0dHBzOi8vd3d3LnZpcndveC5jb20vYXBpL3RyYWRpbmcucGhwJyxcbiAgICAgICAgfSxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy52aXJ3b3guY29tJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL3d3dy52aXJ3b3guY29tL2RldmVsb3BlcnMucGhwJyxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdnZXRJbnN0cnVtZW50cycsXG4gICAgICAgICAgICAgICAgJ2dldEJlc3RQcmljZXMnLFxuICAgICAgICAgICAgICAgICdnZXRNYXJrZXREZXB0aCcsXG4gICAgICAgICAgICAgICAgJ2VzdGltYXRlTWFya2V0T3JkZXInLFxuICAgICAgICAgICAgICAgICdnZXRUcmFkZWRQcmljZVZvbHVtZScsXG4gICAgICAgICAgICAgICAgJ2dldFJhd1RyYWRlRGF0YScsXG4gICAgICAgICAgICAgICAgJ2dldFN0YXRpc3RpY3MnLFxuICAgICAgICAgICAgICAgICdnZXRUZXJtaW5hbExpc3QnLFxuICAgICAgICAgICAgICAgICdnZXRHcmlkTGlzdCcsXG4gICAgICAgICAgICAgICAgJ2dldEdyaWRTdGF0aXN0aWNzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnZ2V0SW5zdHJ1bWVudHMnLFxuICAgICAgICAgICAgICAgICdnZXRCZXN0UHJpY2VzJyxcbiAgICAgICAgICAgICAgICAnZ2V0TWFya2V0RGVwdGgnLFxuICAgICAgICAgICAgICAgICdlc3RpbWF0ZU1hcmtldE9yZGVyJyxcbiAgICAgICAgICAgICAgICAnZ2V0VHJhZGVkUHJpY2VWb2x1bWUnLFxuICAgICAgICAgICAgICAgICdnZXRSYXdUcmFkZURhdGEnLFxuICAgICAgICAgICAgICAgICdnZXRTdGF0aXN0aWNzJyxcbiAgICAgICAgICAgICAgICAnZ2V0VGVybWluYWxMaXN0JyxcbiAgICAgICAgICAgICAgICAnZ2V0R3JpZExpc3QnLFxuICAgICAgICAgICAgICAgICdnZXRHcmlkU3RhdGlzdGljcycsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAncHJpdmF0ZSc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ2NhbmNlbE9yZGVyJyxcbiAgICAgICAgICAgICAgICAnZ2V0QmFsYW5jZXMnLFxuICAgICAgICAgICAgICAgICdnZXRDb21taXNzaW9uRGlzY291bnQnLFxuICAgICAgICAgICAgICAgICdnZXRPcmRlcnMnLFxuICAgICAgICAgICAgICAgICdnZXRUcmFuc2FjdGlvbnMnLFxuICAgICAgICAgICAgICAgICdwbGFjZU9yZGVyJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnY2FuY2VsT3JkZXInLFxuICAgICAgICAgICAgICAgICdnZXRCYWxhbmNlcycsXG4gICAgICAgICAgICAgICAgJ2dldENvbW1pc3Npb25EaXNjb3VudCcsXG4gICAgICAgICAgICAgICAgJ2dldE9yZGVycycsXG4gICAgICAgICAgICAgICAgJ2dldFRyYW5zYWN0aW9ucycsXG4gICAgICAgICAgICAgICAgJ3BsYWNlT3JkZXInLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hNYXJrZXRzICgpIHtcbiAgICAgICAgbGV0IG1hcmtldHMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldEluc3RydW1lbnRzICgpO1xuICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzIChtYXJrZXRzWydyZXN1bHQnXSk7XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgcCA9IDA7IHAgPCBrZXlzLmxlbmd0aDsgcCsrKSB7XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gbWFya2V0c1sncmVzdWx0J11ba2V5c1twXV07XG4gICAgICAgICAgICBsZXQgaWQgPSBtYXJrZXRbJ2luc3RydW1lbnRJRCddO1xuICAgICAgICAgICAgbGV0IHN5bWJvbCA9IG1hcmtldFsnc3ltYm9sJ107XG4gICAgICAgICAgICBsZXQgYmFzZSA9IG1hcmtldFsnbG9uZ0N1cnJlbmN5J107XG4gICAgICAgICAgICBsZXQgcXVvdGUgPSBtYXJrZXRbJ3Nob3J0Q3VycmVuY3knXTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoICh7XG4gICAgICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgICAgICAgICAgJ3N5bWJvbCc6IHN5bWJvbCxcbiAgICAgICAgICAgICAgICAnYmFzZSc6IGJhc2UsXG4gICAgICAgICAgICAgICAgJ3F1b3RlJzogcXVvdGUsXG4gICAgICAgICAgICAgICAgJ2luZm8nOiBtYXJrZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0R2V0QmFsYW5jZXMgKCk7XG4gICAgICAgIGxldCBiYWxhbmNlcyA9IHJlc3BvbnNlWydyZXN1bHQnXVsnYWNjb3VudExpc3QnXTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiBiYWxhbmNlcyB9O1xuICAgICAgICBmb3IgKGxldCBiID0gMDsgYiA8IGJhbGFuY2VzLmxlbmd0aDsgYisrKSB7XG4gICAgICAgICAgICBsZXQgYmFsYW5jZSA9IGJhbGFuY2VzW2JdO1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gYmFsYW5jZVsnY3VycmVuY3knXTtcbiAgICAgICAgICAgIGxldCB0b3RhbCA9IGJhbGFuY2VbJ2JhbGFuY2UnXTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogdG90YWwsXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogdG90YWwsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCZXN0UHJpY2VzIChtYXJrZXQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljUG9zdEdldEJlc3RQcmljZXMgKHtcbiAgICAgICAgICAgICdzeW1ib2xzJzogWyB0aGlzLnN5bWJvbCAobWFya2V0KSBdLFxuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNQb3N0R2V0TWFya2V0RGVwdGggKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnc3ltYm9scyc6IFsgdGhpcy5zeW1ib2wgKG1hcmtldCkgXSxcbiAgICAgICAgICAgICdidXlEZXB0aCc6IDEwMCxcbiAgICAgICAgICAgICdzZWxsRGVwdGgnOiAxMDAsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgb3JkZXJib29rID0gcmVzcG9uc2VbJ3Jlc3VsdCddWzBdO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IFtdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaWRlcyA9IHsgJ2JpZHMnOiAnYnV5JywgJ2Fza3MnOiAnc2VsbCcgfTtcbiAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyAoc2lkZXMpO1xuICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGtleXMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgIGxldCBrZXkgPSBrZXlzW2tdO1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1trZXldO1xuICAgICAgICAgICAgbGV0IG9yZGVycyA9IG9yZGVyYm9va1tzaWRlXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9yZGVyID0gb3JkZXJzW2ldO1xuICAgICAgICAgICAgICAgIGxldCBwcmljZSA9IHBhcnNlRmxvYXQgKG9yZGVyWydwcmljZSddKTtcbiAgICAgICAgICAgICAgICBsZXQgYW1vdW50ID0gcGFyc2VGbG9hdCAob3JkZXJbJ3ZvbHVtZSddKTtcbiAgICAgICAgICAgICAgICByZXN1bHRba2V5XS5wdXNoIChbIHByaWNlLCBhbW91bnQgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgZW5kID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCBzdGFydCA9IGVuZCAtIDg2NDAwMDAwO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFRyYWRlZFByaWNlVm9sdW1lICh7XG4gICAgICAgICAgICAnaW5zdHJ1bWVudCc6IHRoaXMuc3ltYm9sIChtYXJrZXQpLFxuICAgICAgICAgICAgJ2VuZERhdGUnOiB0aGlzLnl5eXltbWRkaGhtbXNzIChlbmQpLFxuICAgICAgICAgICAgJ3N0YXJ0RGF0ZSc6IHRoaXMueXl5eW1tZGRoaG1tc3MgKHN0YXJ0KSxcbiAgICAgICAgICAgICdITE9DJzogMSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aWNrZXJzID0gcmVzcG9uc2VbJ3Jlc3VsdCddWydwcmljZVZvbHVtZUxpc3QnXTtcbiAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyAodGlja2Vycyk7XG4gICAgICAgIGxldCBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgbGV0IGxhc3RLZXkgPSBrZXlzW2xlbmd0aCAtIDFdO1xuICAgICAgICBsZXQgdGlja2VyID0gdGlja2Vyc1tsYXN0S2V5XTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydoaWdoJ10pLFxuICAgICAgICAgICAgJ2xvdyc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbG93J10pLFxuICAgICAgICAgICAgJ2JpZCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhc2snOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogcGFyc2VGbG9hdCAodGlja2VyWydvcGVuJ10pLFxuICAgICAgICAgICAgJ2Nsb3NlJzogcGFyc2VGbG9hdCAodGlja2VyWydjbG9zZSddKSxcbiAgICAgICAgICAgICdmaXJzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsYXN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbG9uZ1ZvbHVtZSddKSxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsnc2hvcnRWb2x1bWUnXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0UmF3VHJhZGVEYXRhKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnaW5zdHJ1bWVudCc6IHRoaXMuc3ltYm9sIChtYXJrZXQpLFxuICAgICAgICAgICAgJ3RpbWVzcGFuJzogMzYwMCxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdpbnN0cnVtZW50JzogdGhpcy5zeW1ib2wgKG1hcmtldCksXG4gICAgICAgICAgICAnb3JkZXJUeXBlJzogc2lkZS50b1VwcGVyQ2FzZSAoKSxcbiAgICAgICAgICAgICdhbW91bnQnOiBhbW91bnQsXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlID09ICdsaW1pdCcpXG4gICAgICAgICAgICBvcmRlclsncHJpY2UnXSA9IHByaWNlO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0UGxhY2VPcmRlciAodGhpcy5leHRlbmQgKG9yZGVyLCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnb3JkZXJJRCddLnRvU3RyaW5nICgpLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0Q2FuY2VsT3JkZXIgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnb3JkZXJJRCc6IGlkLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXVthcGldO1xuICAgICAgICBsZXQgYXV0aCA9IHt9O1xuICAgICAgICBpZiAoYXBpID09ICdwcml2YXRlJykge1xuICAgICAgICAgICAgYXV0aFsna2V5J10gPSB0aGlzLmFwaUtleTtcbiAgICAgICAgICAgIGF1dGhbJ3VzZXInXSA9IHRoaXMubG9naW47XG4gICAgICAgICAgICBhdXRoWydwYXNzJ10gPSB0aGlzLnBhc3N3b3JkO1xuICAgICAgICB9XG4gICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCk7XG4gICAgICAgIGlmIChtZXRob2QgPT0gJ0dFVCcpIHtcbiAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICAgICAnbWV0aG9kJzogcGF0aCxcbiAgICAgICAgICAgICAgICAnaWQnOiBub25jZSxcbiAgICAgICAgICAgIH0sIGF1dGgsIHBhcmFtcykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaGVhZGVycyA9IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9O1xuICAgICAgICAgICAgYm9keSA9IHRoaXMuanNvbiAoe1xuICAgICAgICAgICAgICAgICdtZXRob2QnOiBwYXRoLFxuICAgICAgICAgICAgICAgICdwYXJhbXMnOiB0aGlzLmV4dGVuZCAoYXV0aCwgcGFyYW1zKSxcbiAgICAgICAgICAgICAgICAnaWQnOiBub25jZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdlcnJvcicgaW4gcmVzcG9uc2UpXG4gICAgICAgICAgICBpZiAocmVzcG9uc2VbJ2Vycm9yJ10pXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciB4YnRjZSA9IHtcblxuICAgICdpZCc6ICd4YnRjZScsXG4gICAgJ25hbWUnOiAneEJUQ2UnLFxuICAgICdjb3VudHJpZXMnOiAnUlUnLFxuICAgICdyYXRlTGltaXQnOiAyMDAwLCAvLyByZXNwb25zZXMgYXJlIGNhY2hlZCBldmVyeSAyIHNlY29uZHNcbiAgICAndmVyc2lvbic6ICd2MScsXG4gICAgJ2hhc0ZldGNoVGlja2Vycyc6IHRydWUsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjgwNTk0MTQtZTIzNTk3MGMtNjYyYy0xMWU3LThjM2EtMDhlMzFmNzg2ODRiLmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly9jcnlwdG90dGxpdmV3ZWJhcGkueGJ0Y2UubmV0Ojg0NDMvYXBpJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy54YnRjZS5jb20nLFxuICAgICAgICAnZG9jJzogW1xuICAgICAgICAgICAgJ2h0dHBzOi8vd3d3LnhidGNlLmNvbS90cmFkZWFwaScsXG4gICAgICAgICAgICAnaHR0cHM6Ly9zdXBwb3J0LnhidGNlLmluZm8vS25vd2xlZGdlYmFzZS9BcnRpY2xlL1ZpZXcvNTIvMjUveGJ0Y2UtZXhjaGFuZ2UtYXBpJyxcbiAgICAgICAgXSxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdjdXJyZW5jeScsXG4gICAgICAgICAgICAgICAgJ2N1cnJlbmN5L3tmaWx0ZXJ9JyxcbiAgICAgICAgICAgICAgICAnbGV2ZWwyJyxcbiAgICAgICAgICAgICAgICAnbGV2ZWwyL3tmaWx0ZXJ9JyxcbiAgICAgICAgICAgICAgICAncXVvdGVoaXN0b3J5L3tzeW1ib2x9L3twZXJpb2RpY2l0eX0vYmFycy9hc2snLFxuICAgICAgICAgICAgICAgICdxdW90ZWhpc3Rvcnkve3N5bWJvbH0ve3BlcmlvZGljaXR5fS9iYXJzL2JpZCcsXG4gICAgICAgICAgICAgICAgJ3F1b3RlaGlzdG9yeS97c3ltYm9sfS9sZXZlbDInLFxuICAgICAgICAgICAgICAgICdxdW90ZWhpc3Rvcnkve3N5bWJvbH0vdGlja3MnLFxuICAgICAgICAgICAgICAgICdzeW1ib2wnLFxuICAgICAgICAgICAgICAgICdzeW1ib2wve2ZpbHRlcn0nLFxuICAgICAgICAgICAgICAgICd0aWNrJyxcbiAgICAgICAgICAgICAgICAndGljay97ZmlsdGVyfScsXG4gICAgICAgICAgICAgICAgJ3RpY2tlcicsXG4gICAgICAgICAgICAgICAgJ3RpY2tlci97ZmlsdGVyfScsXG4gICAgICAgICAgICAgICAgJ3RyYWRlc2Vzc2lvbicsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAncHJpdmF0ZSc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ3RyYWRlc2VydmVyaW5mbycsXG4gICAgICAgICAgICAgICAgJ3RyYWRlc2Vzc2lvbicsXG4gICAgICAgICAgICAgICAgJ2N1cnJlbmN5JyxcbiAgICAgICAgICAgICAgICAnY3VycmVuY3kve2ZpbHRlcn0nLFxuICAgICAgICAgICAgICAgICdsZXZlbDInLFxuICAgICAgICAgICAgICAgICdsZXZlbDIve2ZpbHRlcn0nLFxuICAgICAgICAgICAgICAgICdzeW1ib2wnLFxuICAgICAgICAgICAgICAgICdzeW1ib2wve2ZpbHRlcn0nLFxuICAgICAgICAgICAgICAgICd0aWNrJyxcbiAgICAgICAgICAgICAgICAndGljay97ZmlsdGVyfScsXG4gICAgICAgICAgICAgICAgJ2FjY291bnQnLFxuICAgICAgICAgICAgICAgICdhc3NldCcsXG4gICAgICAgICAgICAgICAgJ2Fzc2V0L3tpZH0nLFxuICAgICAgICAgICAgICAgICdwb3NpdGlvbicsXG4gICAgICAgICAgICAgICAgJ3Bvc2l0aW9uL3tpZH0nLFxuICAgICAgICAgICAgICAgICd0cmFkZScsXG4gICAgICAgICAgICAgICAgJ3RyYWRlL3tpZH0nLFxuICAgICAgICAgICAgICAgICdxdW90ZWhpc3Rvcnkve3N5bWJvbH0ve3BlcmlvZGljaXR5fS9iYXJzL2FzaycsXG4gICAgICAgICAgICAgICAgJ3F1b3RlaGlzdG9yeS97c3ltYm9sfS97cGVyaW9kaWNpdHl9L2JhcnMvYXNrL2luZm8nLFxuICAgICAgICAgICAgICAgICdxdW90ZWhpc3Rvcnkve3N5bWJvbH0ve3BlcmlvZGljaXR5fS9iYXJzL2JpZCcsXG4gICAgICAgICAgICAgICAgJ3F1b3RlaGlzdG9yeS97c3ltYm9sfS97cGVyaW9kaWNpdHl9L2JhcnMvYmlkL2luZm8nLFxuICAgICAgICAgICAgICAgICdxdW90ZWhpc3Rvcnkve3N5bWJvbH0vbGV2ZWwyJyxcbiAgICAgICAgICAgICAgICAncXVvdGVoaXN0b3J5L3tzeW1ib2x9L2xldmVsMi9pbmZvJyxcbiAgICAgICAgICAgICAgICAncXVvdGVoaXN0b3J5L3tzeW1ib2x9L3BlcmlvZGljaXRpZXMnLFxuICAgICAgICAgICAgICAgICdxdW90ZWhpc3Rvcnkve3N5bWJvbH0vdGlja3MnLFxuICAgICAgICAgICAgICAgICdxdW90ZWhpc3Rvcnkve3N5bWJvbH0vdGlja3MvaW5mbycsXG4gICAgICAgICAgICAgICAgJ3F1b3RlaGlzdG9yeS9jYWNoZS97c3ltYm9sfS97cGVyaW9kaWNpdHl9L2JhcnMvYXNrJyxcbiAgICAgICAgICAgICAgICAncXVvdGVoaXN0b3J5L2NhY2hlL3tzeW1ib2x9L3twZXJpb2RpY2l0eX0vYmFycy9iaWQnLFxuICAgICAgICAgICAgICAgICdxdW90ZWhpc3RvcnkvY2FjaGUve3N5bWJvbH0vbGV2ZWwyJyxcbiAgICAgICAgICAgICAgICAncXVvdGVoaXN0b3J5L2NhY2hlL3tzeW1ib2x9L3RpY2tzJyxcbiAgICAgICAgICAgICAgICAncXVvdGVoaXN0b3J5L3N5bWJvbHMnLFxuICAgICAgICAgICAgICAgICdxdW90ZWhpc3RvcnkvdmVyc2lvbicsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ3RyYWRlJyxcbiAgICAgICAgICAgICAgICAndHJhZGVoaXN0b3J5JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAncHV0JzogW1xuICAgICAgICAgICAgICAgICd0cmFkZScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ2RlbGV0ZSc6IFtcbiAgICAgICAgICAgICAgICAndHJhZGUnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hNYXJrZXRzICgpIHtcbiAgICAgICAgbGV0IG1hcmtldHMgPSBhd2FpdCB0aGlzLnByaXZhdGVHZXRTeW1ib2wgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgcCA9IDA7IHAgPCBtYXJrZXRzLmxlbmd0aDsgcCsrKSB7XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gbWFya2V0c1twXTtcbiAgICAgICAgICAgIGxldCBpZCA9IG1hcmtldFsnU3ltYm9sJ107XG4gICAgICAgICAgICBsZXQgYmFzZSA9IG1hcmtldFsnTWFyZ2luQ3VycmVuY3knXTtcbiAgICAgICAgICAgIGxldCBxdW90ZSA9IG1hcmtldFsnUHJvZml0Q3VycmVuY3knXTtcbiAgICAgICAgICAgIGlmIChiYXNlID09ICdEU0gnKVxuICAgICAgICAgICAgICAgIGJhc2UgPSAnREFTSCc7XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gYmFzZSArICcvJyArIHF1b3RlO1xuICAgICAgICAgICAgc3ltYm9sID0gbWFya2V0WydJc1RyYWRlQWxsb3dlZCddID8gc3ltYm9sIDogaWQ7XG4gICAgICAgICAgICByZXN1bHQucHVzaCAoe1xuICAgICAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICAgICAgICAgICdzeW1ib2wnOiBzeW1ib2wsXG4gICAgICAgICAgICAgICAgJ2Jhc2UnOiBiYXNlLFxuICAgICAgICAgICAgICAgICdxdW90ZSc6IHF1b3RlLFxuICAgICAgICAgICAgICAgICdpbmZvJzogbWFya2V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gYXdhaXQgdGhpcy5wcml2YXRlR2V0QXNzZXQgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogYmFsYW5jZXMgfTtcbiAgICAgICAgZm9yIChsZXQgYiA9IDA7IGIgPCBiYWxhbmNlcy5sZW5ndGg7IGIrKykge1xuICAgICAgICAgICAgbGV0IGJhbGFuY2UgPSBiYWxhbmNlc1tiXTtcbiAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IGJhbGFuY2VbJ0N1cnJlbmN5J107XG4gICAgICAgICAgICBsZXQgdXBwZXJjYXNlID0gY3VycmVuY3kudG9VcHBlckNhc2UgKCk7XG4gICAgICAgICAgICAvLyB4YnRjZSBuYW1lcyBEQVNIIGluY29ycmVjdGx5IGFzIERTSFxuICAgICAgICAgICAgaWYgKHVwcGVyY2FzZSA9PSAnRFNIJylcbiAgICAgICAgICAgICAgICB1cHBlcmNhc2UgPSAnREFTSCc7XG4gICAgICAgICAgICBsZXQgdG90YWwgPSBiYWxhbmNlWydiYWxhbmNlJ107XG4gICAgICAgICAgICBsZXQgYWNjb3VudCA9IHtcbiAgICAgICAgICAgICAgICAnZnJlZSc6IGJhbGFuY2VbJ0ZyZWVBbW91bnQnXSxcbiAgICAgICAgICAgICAgICAndXNlZCc6IGJhbGFuY2VbJ0xvY2tlZEFtb3VudCddLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IGJhbGFuY2VbJ0Ftb3VudCddLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlc3VsdFt1cHBlcmNhc2VdID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgdGhpcy5wcml2YXRlR2V0TGV2ZWwyRmlsdGVyICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2ZpbHRlcic6IHBbJ2lkJ10sXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBvcmRlcmJvb2sgPSBvcmRlcmJvb2tbMF07XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSBvcmRlcmJvb2tbJ1RpbWVzdGFtcCddO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICBsZXQgU2lkZSA9IHRoaXMuY2FwaXRhbGl6ZSAoc2lkZSk7XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW1NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAob3JkZXJbJ1ByaWNlJ10pO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBwYXJzZUZsb2F0IChvcmRlclsnVm9sdW1lJ10pO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtzaWRlXS5wdXNoIChbIHByaWNlLCBhbW91bnQgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgcGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KSB7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSAwO1xuICAgICAgICBsZXQgbGFzdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKCdMYXN0QnV5VGltZXN0YW1wJyBpbiB0aWNrZXIpXG4gICAgICAgICAgICBpZiAodGltZXN0YW1wIDwgdGlja2VyWydMYXN0QnV5VGltZXN0YW1wJ10pIHtcbiAgICAgICAgICAgICAgICB0aW1lc3RhbXAgPSB0aWNrZXJbJ0xhc3RCdXlUaW1lc3RhbXAnXTtcbiAgICAgICAgICAgICAgICBsYXN0ID0gdGlja2VyWydMYXN0QnV5UHJpY2UnXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgaWYgKCdMYXN0U2VsbFRpbWVzdGFtcCcgaW4gdGlja2VyKVxuICAgICAgICAgICAgaWYgKHRpbWVzdGFtcCA8IHRpY2tlclsnTGFzdFNlbGxUaW1lc3RhbXAnXSkge1xuICAgICAgICAgICAgICAgIHRpbWVzdGFtcCA9IHRpY2tlclsnTGFzdFNlbGxUaW1lc3RhbXAnXTtcbiAgICAgICAgICAgICAgICBsYXN0ID0gdGlja2VyWydMYXN0U2VsbFByaWNlJ107XG4gICAgICAgICAgICB9XG4gICAgICAgIGlmICghdGltZXN0YW1wKVxuICAgICAgICAgICAgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiB0aWNrZXJbJ0RhaWx5QmVzdEJ1eVByaWNlJ10sXG4gICAgICAgICAgICAnbG93JzogdGlja2VyWydEYWlseUJlc3RTZWxsUHJpY2UnXSxcbiAgICAgICAgICAgICdiaWQnOiB0aWNrZXJbJ0Jlc3RCaWQnXSxcbiAgICAgICAgICAgICdhc2snOiB0aWNrZXJbJ0Jlc3RBc2snXSxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IGxhc3QsXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogdGlja2VyWydEYWlseVRyYWRlZFRvdGFsVm9sdW1lJ10sXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXJzICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHRpY2tlcnMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFRpY2tlciAoKTtcbiAgICAgICAgdGlja2VycyA9IHRoaXMuaW5kZXhCeSAodGlja2VycywgJ1N5bWJvbCcpO1xuICAgICAgICBsZXQgaWRzID0gT2JqZWN0LmtleXMgKHRpY2tlcnMpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge307XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgaWQgPSBpZHNbaV07XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgbGV0IHN5bWJvbCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmIChpZCBpbiB0aGlzLm1hcmtldHNfYnlfaWQpIHtcbiAgICAgICAgICAgICAgICBtYXJrZXQgPSB0aGlzLm1hcmtldHNfYnlfaWRbaWRdO1xuICAgICAgICAgICAgICAgIHN5bWJvbCA9IG1hcmtldFsnc3ltYm9sJ107XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCBiYXNlID0gaWQuc2xpY2UgKDAsIDMpO1xuICAgICAgICAgICAgICAgIGxldCBxdW90ZSA9IGlkLnNsaWNlICgzLCA2KTtcbiAgICAgICAgICAgICAgICBpZiAoYmFzZSA9PSAnRFNIJylcbiAgICAgICAgICAgICAgICAgICAgYmFzZSA9ICdEQVNIJztcbiAgICAgICAgICAgICAgICBpZiAocXVvdGUgPT0gJ0RTSCcpXG4gICAgICAgICAgICAgICAgICAgIHF1b3RlID0gJ0RBU0gnO1xuICAgICAgICAgICAgICAgIHN5bWJvbCA9IGJhc2UgKyAnLycgKyBxdW90ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCB0aWNrZXIgPSB0aWNrZXJzW2lkXTtcbiAgICAgICAgICAgIHJlc3VsdFtzeW1ib2xdID0gdGhpcy5wYXJzZVRpY2tlciAodGlja2VyLCBtYXJrZXQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHRpY2tlcnMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFRpY2tlckZpbHRlciAoe1xuICAgICAgICAgICAgJ2ZpbHRlcic6IHBbJ2lkJ10sXG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgbGVuZ3RoID0gdGlja2Vycy5sZW5ndGg7XG4gICAgICAgIGlmIChsZW5ndGggPCAxKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnIGZldGNoVGlja2VyIHJldHVybmVkIGVtcHR5IHJlc3BvbnNlLCB4QlRDZSBwdWJsaWMgQVBJIGVycm9yJyk7XG4gICAgICAgIHRpY2tlcnMgPSB0aGlzLmluZGV4QnkgKHRpY2tlcnMsICdTeW1ib2wnKTtcbiAgICAgICAgbGV0IHRpY2tlciA9IHRpY2tlcnNbcFsnaWQnXV07XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIHApO1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICAvLyBubyBtZXRob2QgZm9yIHRyYWRlcz9cbiAgICAgICAgcmV0dXJuIHRoaXMucHJpdmF0ZUdldFRyYWRlIChwYXJhbXMpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBpZiAodHlwZSA9PSAnbWFya2V0JylcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyBhbGxvd3MgbGltaXQgb3JkZXJzIG9ubHknKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy50YXBpUG9zdFRyYWRlICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ3BhaXInOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICAgICAgJ3R5cGUnOiBzaWRlLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IGFtb3VudCxcbiAgICAgICAgICAgICdyYXRlJzogcHJpY2UsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXNwb25zZSxcbiAgICAgICAgICAgICdpZCc6IHJlc3BvbnNlWydJZCddLnRvU3RyaW5nICgpLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVEZWxldGVUcmFkZSAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdUeXBlJzogJ0NhbmNlbCcsXG4gICAgICAgICAgICAnSWQnOiBpZCxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIG5vbmNlICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgIH0sXG5cbiAgICByZXF1ZXN0IChwYXRoLCBhcGkgPSAnYXBpJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICghdGhpcy5hcGlLZXkpXG4gICAgICAgICAgICB0aHJvdyBuZXcgQXV0aGVudGljYXRpb25FcnJvciAodGhpcy5pZCArICcgcmVxdWlyZXMgYXBpS2V5IGZvciBhbGwgcmVxdWVzdHMsIHRoZWlyIHB1YmxpYyBBUEkgaXMgYWx3YXlzIGJ1c3knKTtcbiAgICAgICAgaWYgKCF0aGlzLnVpZClcbiAgICAgICAgICAgIHRocm93IG5ldyBBdXRoZW50aWNhdGlvbkVycm9yICh0aGlzLmlkICsgJyByZXF1aXJlcyB1aWQgcHJvcGVydHkgZm9yIGF1dGhlbnRpY2F0aW9uIGFuZCB0cmFkaW5nJyk7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgJy8nICsgdGhpcy52ZXJzaW9uO1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKVxuICAgICAgICAgICAgdXJsICs9ICcvJyArIGFwaTtcbiAgICAgICAgdXJsICs9ICcvJyArIHRoaXMuaW1wbG9kZVBhcmFtcyAocGF0aCwgcGFyYW1zKTtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5vbWl0IChwYXJhbXMsIHRoaXMuZXh0cmFjdFBhcmFtcyAocGF0aCkpO1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHF1ZXJ5KS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChxdWVyeSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBoZWFkZXJzID0geyAnQWNjZXB0LUVuY29kaW5nJzogJ2d6aXAsIGRlZmxhdGUnIH07XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpLnRvU3RyaW5nICgpO1xuICAgICAgICAgICAgaWYgKG1ldGhvZCA9PSAnUE9TVCcpIHtcbiAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHF1ZXJ5KS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSAnYXBwbGljYXRpb24vanNvbic7XG4gICAgICAgICAgICAgICAgICAgIGJvZHkgPSB0aGlzLmpzb24gKHF1ZXJ5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB1cmwgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHF1ZXJ5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBhdXRoID0gbm9uY2UgKyB0aGlzLnVpZCArIHRoaXMuYXBpS2V5ICsgbWV0aG9kICsgdXJsO1xuICAgICAgICAgICAgaWYgKGJvZHkpXG4gICAgICAgICAgICAgICAgYXV0aCArPSBib2R5O1xuICAgICAgICAgICAgbGV0IHNpZ25hdHVyZSA9IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKGF1dGgpLCB0aGlzLmVuY29kZSAodGhpcy5zZWNyZXQpLCAnc2hhMjU2JywgJ2Jhc2U2NCcpO1xuICAgICAgICAgICAgbGV0IGNyZWRlbnRpYWxzID0gdGhpcy51aWQgKyAnOicgKyB0aGlzLmFwaUtleSArICc6JyArIG5vbmNlICsgJzonICsgdGhpcy5iaW5hcnlUb1N0cmluZyAoc2lnbmF0dXJlKTtcbiAgICAgICAgICAgIGhlYWRlcnNbJ0F1dGhvcml6YXRpb24nXSA9ICdITUFDICcgKyBjcmVkZW50aWFscztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIHlvYml0ID0ge1xuXG4gICAgJ2lkJzogJ3lvYml0JyxcbiAgICAnbmFtZSc6ICdZb0JpdCcsXG4gICAgJ2NvdW50cmllcyc6ICdSVScsXG4gICAgJ3JhdGVMaW1pdCc6IDIwMDAsIC8vIHJlc3BvbnNlcyBhcmUgY2FjaGVkIGV2ZXJ5IDIgc2Vjb25kc1xuICAgICd2ZXJzaW9uJzogJzMnLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2OTEwLWNkY2JmZGFlLTVlZWEtMTFlNy05ODU5LTAzZmVhODczMjcyZC5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8veW9iaXQubmV0JyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy55b2JpdC5uZXQnLFxuICAgICAgICAnZG9jJzogJ2h0dHBzOi8vd3d3LnlvYml0Lm5ldC9lbi9hcGkvJyxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdhcGknOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdkZXB0aC97cGFpcnN9JyxcbiAgICAgICAgICAgICAgICAnaW5mbycsXG4gICAgICAgICAgICAgICAgJ3RpY2tlci97cGFpcnN9JyxcbiAgICAgICAgICAgICAgICAndHJhZGVzL3twYWlyc30nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3RhcGknOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnQWN0aXZlT3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnQ2FuY2VsT3JkZXInLFxuICAgICAgICAgICAgICAgICdHZXREZXBvc2l0QWRkcmVzcycsXG4gICAgICAgICAgICAgICAgJ2dldEluZm8nLFxuICAgICAgICAgICAgICAgICdPcmRlckluZm8nLFxuICAgICAgICAgICAgICAgICdUcmFkZScsXG4gICAgICAgICAgICAgICAgJ1RyYWRlSGlzdG9yeScsXG4gICAgICAgICAgICAgICAgJ1dpdGhkcmF3Q29pbnNUb0FkZHJlc3MnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hNYXJrZXRzICgpIHtcbiAgICAgICAgbGV0IG1hcmtldHMgPSBhd2FpdCB0aGlzLmFwaUdldEluZm8gKCk7XG4gICAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMgKG1hcmtldHNbJ3BhaXJzJ10pO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwga2V5cy5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgbGV0IGlkID0ga2V5c1twXTtcbiAgICAgICAgICAgIGxldCBtYXJrZXQgPSBtYXJrZXRzWydwYWlycyddW2lkXTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBpZC50b1VwcGVyQ2FzZSAoKS5yZXBsYWNlICgnXycsICcvJyk7XG4gICAgICAgICAgICBsZXQgWyBiYXNlLCBxdW90ZSBdID0gc3ltYm9sLnNwbGl0ICgnLycpO1xuICAgICAgICAgICAgYmFzZSA9IHRoaXMuY29tbW9uQ3VycmVuY3lDb2RlIChiYXNlKTtcbiAgICAgICAgICAgIHF1b3RlID0gdGhpcy5jb21tb25DdXJyZW5jeUNvZGUgKHF1b3RlKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoICh7XG4gICAgICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgICAgICAgICAgJ3N5bWJvbCc6IHN5bWJvbCxcbiAgICAgICAgICAgICAgICAnYmFzZSc6IGJhc2UsXG4gICAgICAgICAgICAgICAgJ3F1b3RlJzogcXVvdGUsXG4gICAgICAgICAgICAgICAgJ2luZm8nOiBtYXJrZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnRhcGlQb3N0R2V0SW5mbyAoKTtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gcmVzcG9uc2VbJ3JldHVybiddO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGJhbGFuY2VzIH07XG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgdGhpcy5jdXJyZW5jaWVzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSB0aGlzLmN1cnJlbmNpZXNbY107XG4gICAgICAgICAgICBsZXQgbG93ZXJjYXNlID0gY3VycmVuY3kudG9Mb3dlckNhc2UgKCk7XG4gICAgICAgICAgICBsZXQgYWNjb3VudCA9IHtcbiAgICAgICAgICAgICAgICAnZnJlZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAndXNlZCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAndG90YWwnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKCdmdW5kcycgaW4gYmFsYW5jZXMpXG4gICAgICAgICAgICAgICAgaWYgKGxvd2VyY2FzZSBpbiBiYWxhbmNlc1snZnVuZHMnXSlcbiAgICAgICAgICAgICAgICAgICAgYWNjb3VudFsnZnJlZSddID0gYmFsYW5jZXNbJ2Z1bmRzJ11bbG93ZXJjYXNlXTtcbiAgICAgICAgICAgIGlmICgnZnVuZHNfaW5jbF9vcmRlcnMnIGluIGJhbGFuY2VzKVxuICAgICAgICAgICAgICAgIGlmIChsb3dlcmNhc2UgaW4gYmFsYW5jZXNbJ2Z1bmRzX2luY2xfb3JkZXJzJ10pXG4gICAgICAgICAgICAgICAgICAgIGFjY291bnRbJ3RvdGFsJ10gPSBiYWxhbmNlc1snZnVuZHNfaW5jbF9vcmRlcnMnXVtsb3dlcmNhc2VdO1xuICAgICAgICAgICAgaWYgKGFjY291bnRbJ3RvdGFsJ10gJiYgYWNjb3VudFsnZnJlZSddKVxuICAgICAgICAgICAgICAgIGFjY291bnRbJ3VzZWQnXSA9IGFjY291bnRbJ3RvdGFsJ10gLSBhY2NvdW50WydmcmVlJ107XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmFwaUdldERlcHRoUGFpcnMgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAncGFpcnMnOiBwWydpZCddLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IHJlc3BvbnNlW3BbJ2lkJ11dO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCBiaWRzID0gKCdiaWRzJyBpbiBvcmRlcmJvb2spID8gb3JkZXJib29rWydiaWRzJ10gOiBbXTtcbiAgICAgICAgbGV0IGFza3MgPSAoJ2Fza3MnIGluIG9yZGVyYm9vaykgPyBvcmRlcmJvb2tbJ2Fza3MnXSA6IFtdO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBiaWRzLFxuICAgICAgICAgICAgJ2Fza3MnOiBhc2tzLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgdGlja2VycyA9IGF3YWl0IHRoaXMuYXBpR2V0VGlja2VyUGFpcnMgKHtcbiAgICAgICAgICAgICdwYWlycyc6IHBbJ2lkJ10sXG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgdGlja2VyID0gdGlja2Vyc1twWydpZCddXTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRpY2tlclsndXBkYXRlZCddICogMTAwMDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2J1eSddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3NlbGwnXSksXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xhc3QnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYXZnJ10pLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbF9jdXInXSksXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbCddKSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5hcGlHZXRUcmFkZXNQYWlycyAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdwYWlycyc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBpZiAodHlwZSA9PSAnbWFya2V0JylcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyBhbGxvd3MgbGltaXQgb3JkZXJzIG9ubHknKTtcbiAgICAgICAgbGV0IHJhdGUgPSBwcmljZS50b1N0cmluZyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy50YXBpUG9zdFRyYWRlICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ3BhaXInOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICAgICAgJ3R5cGUnOiBzaWRlLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IGFtb3VudCxcbiAgICAgICAgICAgICdyYXRlJzogJyUuOGYnLnNwcmludGYgKHByaWNlKSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ2lkJzogcmVzcG9uc2VbJ3JldHVybiddWydvcmRlcl9pZCddLnRvU3RyaW5nICgpLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnRhcGlQb3N0Q2FuY2VsT3JkZXIgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnb3JkZXJfaWQnOiBpZCxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdhcGknLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ10gKyAnLycgKyBhcGk7XG4gICAgICAgIGlmIChhcGkgPT0gJ2FwaScpIHtcbiAgICAgICAgICAgIHVybCArPSAnLycgKyB0aGlzLnZlcnNpb24gKyAnLycgKyB0aGlzLmltcGxvZGVQYXJhbXMgKHBhdGgsIHBhcmFtcyk7XG4gICAgICAgICAgICBsZXQgcXVlcnkgPSB0aGlzLm9taXQgKHBhcmFtcywgdGhpcy5leHRyYWN0UGFyYW1zIChwYXRoKSk7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHF1ZXJ5KS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChxdWVyeSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpO1xuICAgICAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5leHRlbmQgKHsgJ21ldGhvZCc6IHBhdGgsICdub25jZSc6IG5vbmNlIH0sIHBhcmFtcyk7XG4gICAgICAgICAgICBib2R5ID0gdGhpcy51cmxlbmNvZGUgKHF1ZXJ5KTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgICAgICAgICdrZXknOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgICAgICAnc2lnbic6IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKGJvZHkpLCB0aGlzLmVuY29kZSAodGhpcy5zZWNyZXQpLCAnc2hhNTEyJyksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdlcnJvcicgaW4gcmVzcG9uc2UpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgJyArIHRoaXMuanNvbiAocmVzcG9uc2UpKTtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIHl1bmJpID0ge1xuXG4gICAgJ2lkJzogJ3l1bmJpJyxcbiAgICAnbmFtZSc6ICdZVU5CSScsXG4gICAgJ2NvdW50cmllcyc6ICdDTicsXG4gICAgJ3JhdGVMaW1pdCc6IDEwMDAsXG4gICAgJ3ZlcnNpb24nOiAndjInLFxuICAgICdoYXNGZXRjaFRpY2tlcnMnOiB0cnVlLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI4NTcwNTQ4LTRkNjQ2YzQwLTcxNDctMTFlNy05Y2Y2LTgzOWI5M2U2ZDYyMi5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8veXVuYmkuY29tJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3l1bmJpLmNvbScsXG4gICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAnaHR0cHM6Ly95dW5iaS5jb20vZG9jdW1lbnRzL2FwaS9ndWlkZScsXG4gICAgICAgICAgICAnaHR0cHM6Ly95dW5iaS5jb20vc3dhZ2dlci8nLFxuICAgICAgICBdLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ3RpY2tlcnMnLFxuICAgICAgICAgICAgICAgICd0aWNrZXJzL3ttYXJrZXR9JyxcbiAgICAgICAgICAgICAgICAnbWFya2V0cycsXG4gICAgICAgICAgICAgICAgJ29yZGVyX2Jvb2snLFxuICAgICAgICAgICAgICAgICdrJyxcbiAgICAgICAgICAgICAgICAnZGVwdGgnLFxuICAgICAgICAgICAgICAgICd0cmFkZXMnLFxuICAgICAgICAgICAgICAgICdrX3dpdGhfcGVuZGluZ190cmFkZXMnLFxuICAgICAgICAgICAgICAgICd0aW1lc3RhbXAnLFxuICAgICAgICAgICAgICAgICdhZGRyZXNzZXMve2FkZHJlc3N9JyxcbiAgICAgICAgICAgICAgICAncGFydG5lcnMvb3JkZXJzL3tpZH0vdHJhZGVzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnZGVwb3NpdHMnLFxuICAgICAgICAgICAgICAgICdtZW1iZXJzL21lJyxcbiAgICAgICAgICAgICAgICAnZGVwb3NpdCcsXG4gICAgICAgICAgICAgICAgJ2RlcG9zaXRfYWRkcmVzcycsXG4gICAgICAgICAgICAgICAgJ29yZGVyJyxcbiAgICAgICAgICAgICAgICAnb3JkZXJzJyxcbiAgICAgICAgICAgICAgICAndHJhZGVzL215JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnb3JkZXIvZGVsZXRlJyxcbiAgICAgICAgICAgICAgICAnb3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnb3JkZXJzL211bHRpJyxcbiAgICAgICAgICAgICAgICAnb3JkZXJzL2NsZWFyJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoTWFya2V0cyAoKSB7XG4gICAgICAgIGxldCBtYXJrZXRzID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgbWFya2V0cy5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IG1hcmtldHNbcF07XG4gICAgICAgICAgICBsZXQgaWQgPSBtYXJrZXRbJ2lkJ107XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gbWFya2V0WyduYW1lJ107XG4gICAgICAgICAgICBsZXQgWyBiYXNlLCBxdW90ZSBdID0gc3ltYm9sLnNwbGl0ICgnLycpO1xuICAgICAgICAgICAgYmFzZSA9IHRoaXMuY29tbW9uQ3VycmVuY3lDb2RlIChiYXNlKTtcbiAgICAgICAgICAgIHF1b3RlID0gdGhpcy5jb21tb25DdXJyZW5jeUNvZGUgKHF1b3RlKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoICh7XG4gICAgICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgICAgICAgICAgJ3N5bWJvbCc6IHN5bWJvbCxcbiAgICAgICAgICAgICAgICAnYmFzZSc6IGJhc2UsXG4gICAgICAgICAgICAgICAgJ3F1b3RlJzogcXVvdGUsXG4gICAgICAgICAgICAgICAgJ2luZm8nOiBtYXJrZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVHZXRNZW1iZXJzTWUgKCk7XG4gICAgICAgIGxldCBiYWxhbmNlcyA9IHJlc3BvbnNlWydhY2NvdW50cyddO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGJhbGFuY2VzIH07XG4gICAgICAgIGZvciAobGV0IGIgPSAwOyBiIDwgYmFsYW5jZXMubGVuZ3RoOyBiKyspIHtcbiAgICAgICAgICAgIGxldCBiYWxhbmNlID0gYmFsYW5jZXNbYl07XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBiYWxhbmNlWydjdXJyZW5jeSddO1xuICAgICAgICAgICAgbGV0IHVwcGVyY2FzZSA9IGN1cnJlbmN5LnRvVXBwZXJDYXNlICgpO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiBwYXJzZUZsb2F0IChiYWxhbmNlWydiYWxhbmNlJ10pLFxuICAgICAgICAgICAgICAgICd1c2VkJzogcGFyc2VGbG9hdCAoYmFsYW5jZVsnbG9ja2VkJ10pLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhY2NvdW50Wyd0b3RhbCddID0gdGhpcy5zdW0gKGFjY291bnRbJ2ZyZWUnXSwgYWNjb3VudFsndXNlZCddKTtcbiAgICAgICAgICAgIHJlc3VsdFt1cHBlcmNhc2VdID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgdGhpcy5wdWJsaWNHZXREZXB0aCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdtYXJrZXQnOiBwWydpZCddLFxuICAgICAgICAgICAgJ2xpbWl0JzogMzAwLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IG9yZGVyYm9va1sndGltZXN0YW1wJ10gKiAxMDAwO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAob3JkZXJbMF0pO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBwYXJzZUZsb2F0IChvcmRlclsxXSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3NpZGVdLnB1c2ggKFsgcHJpY2UsIGFtb3VudCBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXN1bHRbJ2JpZHMnXSA9IHRoaXMuc29ydEJ5IChyZXN1bHRbJ2JpZHMnXSwgMCwgdHJ1ZSk7XG4gICAgICAgIHJlc3VsdFsnYXNrcyddID0gdGhpcy5zb3J0QnkgKHJlc3VsdFsnYXNrcyddLCAwKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgcGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KSB7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aWNrZXJbJ2F0J10gKiAxMDAwO1xuICAgICAgICB0aWNrZXIgPSB0aWNrZXJbJ3RpY2tlciddO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydoaWdoJ10pLFxuICAgICAgICAgICAgJ2xvdyc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbG93J10pLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYnV5J10pLFxuICAgICAgICAgICAgJ2Fzayc6IHBhcnNlRmxvYXQgKHRpY2tlclsnc2VsbCddKSxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdCddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbCddKSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlcnMgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgdGlja2VycyA9IGF3YWl0IHRoaXMucHVibGljR2V0VGlja2VycyAoKTtcbiAgICAgICAgbGV0IGlkcyA9IE9iamVjdC5rZXlzICh0aWNrZXJzKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHt9O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IGlkID0gaWRzW2ldO1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBpZDtcbiAgICAgICAgICAgIGlmIChpZCBpbiB0aGlzLm1hcmtldHNfYnlfaWQpIHtcbiAgICAgICAgICAgICAgICBtYXJrZXQgPSB0aGlzLm1hcmtldHNfYnlfaWRbaWRdO1xuICAgICAgICAgICAgICAgIHN5bWJvbCA9IG1hcmtldFsnc3ltYm9sJ107XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCBiYXNlID0gaWQuc2xpY2UgKDAsIDMpO1xuICAgICAgICAgICAgICAgIGxldCBxdW90ZSA9IGlkLnNsaWNlICgzLCA2KTtcbiAgICAgICAgICAgICAgICBiYXNlID0gYmFzZS50b1VwcGVyQ2FzZSAoKTtcbiAgICAgICAgICAgICAgICBxdW90ZSA9IHF1b3RlLnRvVXBwZXJDYXNlICgpO1xuICAgICAgICAgICAgICAgIGJhc2UgPSB0aGlzLmNvbW1vbkN1cnJlbmN5Q29kZSAoYmFzZSk7XG4gICAgICAgICAgICAgICAgcXVvdGUgPSB0aGlzLmNvbW1vbkN1cnJlbmN5Q29kZSAocXVvdGUpO1xuICAgICAgICAgICAgICAgIGxldCBzeW1ib2wgPSBiYXNlICsgJy8nICsgcXVvdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgdGlja2VyID0gdGlja2Vyc1tpZF07XG4gICAgICAgICAgICByZXN1bHRbc3ltYm9sXSA9IHRoaXMucGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0VGlja2Vyc01hcmtldCAoe1xuICAgICAgICAgICAgJ21hcmtldCc6IHBbJ2lkJ10sXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVRpY2tlciAocmVzcG9uc2UsIHApO1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgbSA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICByZXR1cm4gdGhpcy5wdWJsaWNHZXRUcmFkZXMgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnbWFya2V0JzogbVsnaWQnXSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdtYXJrZXQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICAgICAgJ3NpZGUnOiBzaWRlLFxuICAgICAgICAgICAgJ3ZvbHVtZSc6IGFtb3VudC50b1N0cmluZyAoKSxcbiAgICAgICAgICAgICdvcmRfdHlwZSc6IHR5cGUsXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlID09ICdsaW1pdCcpIHtcbiAgICAgICAgICAgIG9yZGVyWydwcmljZSddID0gcHJpY2UudG9TdHJpbmcgKCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdE9yZGVycyAodGhpcy5leHRlbmQgKG9yZGVyLCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnaWQnXS50b1N0cmluZyAoKSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0T3JkZXJEZWxldGUgKHsgJ2lkJzogaWQgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHJlcXVlc3QgPSAnL2FwaS8nICsgdGhpcy52ZXJzaW9uICsgJy8nICsgdGhpcy5pbXBsb2RlUGFyYW1zIChwYXRoLCBwYXJhbXMpICsgJy5qc29uJztcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5vbWl0IChwYXJhbXMsIHRoaXMuZXh0cmFjdFBhcmFtcyAocGF0aCkpO1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArIHJlcXVlc3Q7XG4gICAgICAgIGlmIChhcGkgPT0gJ3B1YmxpYycpIHtcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyAocXVlcnkpLmxlbmd0aClcbiAgICAgICAgICAgICAgICB1cmwgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHF1ZXJ5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCkudG9TdHJpbmcgKCk7XG4gICAgICAgICAgICBsZXQgcXVlcnkgPSB0aGlzLnVybGVuY29kZSAodGhpcy5rZXlzb3J0ICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgICAgICdhY2Nlc3Nfa2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ3RvbmNlJzogbm9uY2UsXG4gICAgICAgICAgICB9LCBwYXJhbXMpKSk7XG4gICAgICAgICAgICBsZXQgYXV0aCA9IG1ldGhvZCArICd8JyArIHJlcXVlc3QgKyAnfCcgKyBxdWVyeTtcbiAgICAgICAgICAgIGxldCBzaWduYXR1cmUgPSB0aGlzLmhtYWMgKHRoaXMuZW5jb2RlIChhdXRoKSwgdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSk7XG4gICAgICAgICAgICBsZXQgc3VmZml4ID0gcXVlcnkgKyAnJnNpZ25hdHVyZT0nICsgc2lnbmF0dXJlO1xuICAgICAgICAgICAgaWYgKG1ldGhvZCA9PSAnR0VUJykge1xuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyBzdWZmaXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGJvZHkgPSBzdWZmaXg7XG4gICAgICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1MZW5ndGgnOiBib2R5Lmxlbmd0aCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdlcnJvcicgaW4gcmVzcG9uc2UpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgJyArIHRoaXMuanNvbiAocmVzcG9uc2UpKTtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIHphaWYgPSB7XG5cbiAgICAnaWQnOiAnemFpZicsXG4gICAgJ25hbWUnOiAnWmFpZicsXG4gICAgJ2NvdW50cmllcyc6ICdKUCcsXG4gICAgJ3JhdGVMaW1pdCc6IDIwMDAsXG4gICAgJ3ZlcnNpb24nOiAnMScsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc3NjY5MjctMzljYTJhZGEtNWVlYi0xMWU3LTk3MmYtMWI0MTk5NTE4Y2E2LmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly9hcGkuemFpZi5qcCcsXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly96YWlmLmpwJyxcbiAgICAgICAgJ2RvYyc6IFtcbiAgICAgICAgICAgICdodHRwOi8vdGVjaGJ1cmVhdS1hcGktZG9jdW1lbnQucmVhZHRoZWRvY3MuaW8vamEvbGF0ZXN0L2luZGV4Lmh0bWwnLFxuICAgICAgICAgICAgJ2h0dHBzOi8vY29ycC56YWlmLmpwL2FwaS1kb2NzJyxcbiAgICAgICAgICAgICdodHRwczovL2NvcnAuemFpZi5qcC9hcGktZG9jcy9hcGlfbGlua3MnLFxuICAgICAgICAgICAgJ2h0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL3phaWYuanAnLFxuICAgICAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS95b3UyMTk3OS9ub2RlLXphaWYnLFxuICAgICAgICBdLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ2FwaSc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ2RlcHRoL3twYWlyfScsXG4gICAgICAgICAgICAgICAgJ2N1cnJlbmNpZXMve3BhaXJ9JyxcbiAgICAgICAgICAgICAgICAnY3VycmVuY2llcy9hbGwnLFxuICAgICAgICAgICAgICAgICdjdXJyZW5jeV9wYWlycy97cGFpcn0nLFxuICAgICAgICAgICAgICAgICdjdXJyZW5jeV9wYWlycy9hbGwnLFxuICAgICAgICAgICAgICAgICdsYXN0X3ByaWNlL3twYWlyfScsXG4gICAgICAgICAgICAgICAgJ3RpY2tlci97cGFpcn0nLFxuICAgICAgICAgICAgICAgICd0cmFkZXMve3BhaXJ9JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICd0YXBpJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2FjdGl2ZV9vcmRlcnMnLFxuICAgICAgICAgICAgICAgICdjYW5jZWxfb3JkZXInLFxuICAgICAgICAgICAgICAgICdkZXBvc2l0X2hpc3RvcnknLFxuICAgICAgICAgICAgICAgICdnZXRfaWRfaW5mbycsXG4gICAgICAgICAgICAgICAgJ2dldF9pbmZvJyxcbiAgICAgICAgICAgICAgICAnZ2V0X2luZm8yJyxcbiAgICAgICAgICAgICAgICAnZ2V0X3BlcnNvbmFsX2luZm8nLFxuICAgICAgICAgICAgICAgICd0cmFkZScsXG4gICAgICAgICAgICAgICAgJ3RyYWRlX2hpc3RvcnknLFxuICAgICAgICAgICAgICAgICd3aXRoZHJhdycsXG4gICAgICAgICAgICAgICAgJ3dpdGhkcmF3X2hpc3RvcnknLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ2VjYXBpJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2NyZWF0ZUludm9pY2UnLFxuICAgICAgICAgICAgICAgICdnZXRJbnZvaWNlJyxcbiAgICAgICAgICAgICAgICAnZ2V0SW52b2ljZUlkc0J5T3JkZXJOdW1iZXInLFxuICAgICAgICAgICAgICAgICdjYW5jZWxJbnZvaWNlJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoTWFya2V0cyAoKSB7XG4gICAgICAgIGxldCBtYXJrZXRzID0gYXdhaXQgdGhpcy5hcGlHZXRDdXJyZW5jeVBhaXJzQWxsICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgbWFya2V0cy5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IG1hcmtldHNbcF07XG4gICAgICAgICAgICBsZXQgaWQgPSBtYXJrZXRbJ2N1cnJlbmN5X3BhaXInXTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBtYXJrZXRbJ25hbWUnXTtcbiAgICAgICAgICAgIGxldCBbIGJhc2UsIHF1b3RlIF0gPSBzeW1ib2wuc3BsaXQgKCcvJyk7XG4gICAgICAgICAgICByZXN1bHQucHVzaCAoe1xuICAgICAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICAgICAgICAgICdzeW1ib2wnOiBzeW1ib2wsXG4gICAgICAgICAgICAgICAgJ2Jhc2UnOiBiYXNlLFxuICAgICAgICAgICAgICAgICdxdW90ZSc6IHF1b3RlLFxuICAgICAgICAgICAgICAgICdpbmZvJzogbWFya2V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy50YXBpUG9zdEdldEluZm8gKCk7XG4gICAgICAgIGxldCBiYWxhbmNlcyA9IHJlc3BvbnNlWydyZXR1cm4nXTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiBiYWxhbmNlcyB9O1xuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IHRoaXMuY3VycmVuY2llcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gdGhpcy5jdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IGxvd2VyY2FzZSA9IGN1cnJlbmN5LnRvTG93ZXJDYXNlICgpO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmICgnZnVuZHMnIGluIGJhbGFuY2VzKVxuICAgICAgICAgICAgICAgIGlmIChsb3dlcmNhc2UgaW4gYmFsYW5jZXNbJ2Z1bmRzJ10pXG4gICAgICAgICAgICAgICAgICAgIGFjY291bnRbJ2ZyZWUnXSA9IGJhbGFuY2VzWydmdW5kcyddW2xvd2VyY2FzZV07XG4gICAgICAgICAgICBpZiAoJ2Z1bmRzX2luY2xfb3JkZXJzJyBpbiBiYWxhbmNlcylcbiAgICAgICAgICAgICAgICBpZiAobG93ZXJjYXNlIGluIGJhbGFuY2VzWydmdW5kc19pbmNsX29yZGVycyddKVxuICAgICAgICAgICAgICAgICAgICBhY2NvdW50Wyd0b3RhbCddID0gYmFsYW5jZXNbJ2Z1bmRzX2luY2xfb3JkZXJzJ11bbG93ZXJjYXNlXTtcbiAgICAgICAgICAgIGlmIChhY2NvdW50Wyd0b3RhbCddICYmIGFjY291bnRbJ2ZyZWUnXSlcbiAgICAgICAgICAgICAgICBhY2NvdW50Wyd1c2VkJ10gPSBhY2NvdW50Wyd0b3RhbCddIC0gYWNjb3VudFsnZnJlZSddO1xuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IGF3YWl0IHRoaXMuYXBpR2V0RGVwdGhQYWlyICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ3BhaXInOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBvcmRlcmJvb2tbJ2JpZHMnXSxcbiAgICAgICAgICAgICdhc2tzJzogb3JkZXJib29rWydhc2tzJ10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCB0aWNrZXIgPSBhd2FpdCB0aGlzLmFwaUdldFRpY2tlclBhaXIgKHtcbiAgICAgICAgICAgICdwYWlyJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHRpY2tlclsnaGlnaCddLFxuICAgICAgICAgICAgJ2xvdyc6IHRpY2tlclsnbG93J10sXG4gICAgICAgICAgICAnYmlkJzogdGlja2VyWydiaWQnXSxcbiAgICAgICAgICAgICdhc2snOiB0aWNrZXJbJ2FzayddLFxuICAgICAgICAgICAgJ3Z3YXAnOiB0aWNrZXJbJ3Z3YXAnXSxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiB0aWNrZXJbJ2xhc3QnXSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiB0aWNrZXJbJ3ZvbHVtZSddLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaUdldFRyYWRlc1BhaXIgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAncGFpcic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBpZiAodHlwZSA9PSAnbWFya2V0JylcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyBhbGxvd3MgbGltaXQgb3JkZXJzIG9ubHknKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy50YXBpUG9zdFRyYWRlICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2N1cnJlbmN5X3BhaXInOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICAgICAgJ2FjdGlvbic6IChzaWRlID09ICdidXknKSA/ICdiaWQnIDogJ2FzaycsXG4gICAgICAgICAgICAnYW1vdW50JzogYW1vdW50LFxuICAgICAgICAgICAgJ3ByaWNlJzogcHJpY2UsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXNwb25zZSxcbiAgICAgICAgICAgICdpZCc6IHJlc3BvbnNlWydyZXR1cm4nXVsnb3JkZXJfaWQnXS50b1N0cmluZyAoKSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy50YXBpUG9zdENhbmNlbE9yZGVyICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ29yZGVyX2lkJzogaWQsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAnYXBpJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgJy8nICsgYXBpO1xuICAgICAgICBpZiAoYXBpID09ICdhcGknKSB7XG4gICAgICAgICAgICB1cmwgKz0gJy8nICsgdGhpcy52ZXJzaW9uICsgJy8nICsgdGhpcy5pbXBsb2RlUGFyYW1zIChwYXRoLCBwYXJhbXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG5vbmNlID0gdGhpcy5ub25jZSAoKTtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLnVybGVuY29kZSAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICAgICAnbWV0aG9kJzogcGF0aCxcbiAgICAgICAgICAgICAgICAnbm9uY2UnOiBub25jZSxcbiAgICAgICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtTGVuZ3RoJzogYm9keS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgJ0tleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgICAgICdTaWduJzogdGhpcy5obWFjICh0aGlzLmVuY29kZSAoYm9keSksIHRoaXMuZW5jb2RlICh0aGlzLnNlY3JldCksICdzaGE1MTInKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgICAgICBpZiAoJ2Vycm9yJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgcmVzcG9uc2VbJ2Vycm9yJ10pO1xuICAgICAgICBpZiAoJ3N1Y2Nlc3MnIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgaWYgKCFyZXNwb25zZVsnc3VjY2VzcyddKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSxcbn1cblxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG52YXIgZXhjaGFuZ2VzID0ge1xuXG4gICAgJ18xYnJva2VyJzogICAgICBfMWJyb2tlcixcbiAgICAnXzFidGN4ZSc6ICAgICAgIF8xYnRjeGUsXG4gICAgJ2FueHBybyc6ICAgICAgICBhbnhwcm8sXG4gICAgJ2JpbmFuY2UnOiAgICAgICBiaW5hbmNlLFxuICAgICdiaXQyYyc6ICAgICAgICAgYml0MmMsXG4gICAgJ2JpdGJheSc6ICAgICAgICBiaXRiYXksXG4gICAgJ2JpdGJheXMnOiAgICAgICBiaXRiYXlzLFxuICAgICdiaXRjb2luY29pZCc6ICAgYml0Y29pbmNvaWQsXG4gICAgJ2JpdGZpbmV4JzogICAgICBiaXRmaW5leCxcbiAgICAnYml0Zmx5ZXInOiAgICAgIGJpdGZseWVyLFxuICAgICdiaXRsaXNoJzogICAgICAgYml0bGlzaCxcbiAgICAnYml0bWFya2V0JzogICAgIGJpdG1hcmtldCxcbiAgICAnYml0bWV4JzogICAgICAgIGJpdG1leCxcbiAgICAnYml0c28nOiAgICAgICAgIGJpdHNvLFxuICAgICdiaXRzdGFtcCc6ICAgICAgYml0c3RhbXAsXG4gICAgJ2JpdHRyZXgnOiAgICAgICBiaXR0cmV4LFxuICAgICdibDNwJzogICAgICAgICAgYmwzcCxcbiAgICAnYnRjY2hpbmEnOiAgICAgIGJ0Y2NoaW5hLFxuICAgICdidGNlJzogICAgICAgICAgYnRjZSxcbiAgICAnYnRjZXhjaGFuZ2UnOiAgIGJ0Y2V4Y2hhbmdlLFxuICAgICdidGNtYXJrZXRzJzogICAgYnRjbWFya2V0cyxcbiAgICAnYnRjdHJhZGV1YSc6ICAgIGJ0Y3RyYWRldWEsXG4gICAgJ2J0Y3R1cmsnOiAgICAgICBidGN0dXJrLFxuICAgICdidGN4JzogICAgICAgICAgYnRjeCxcbiAgICAnYnRlcic6ICAgICAgICAgIGJ0ZXIsXG4gICAgJ2J4aW50aCc6ICAgICAgICBieGludGgsXG4gICAgJ2NjZXgnOiAgICAgICAgICBjY2V4LFxuICAgICdjZXgnOiAgICAgICAgICAgY2V4LFxuICAgICdjaGJ0Yyc6ICAgICAgICAgY2hidGMsXG4gICAgJ2NoaWxlYml0JzogICAgICBjaGlsZWJpdCxcbiAgICAnY29pbmNoZWNrJzogICAgIGNvaW5jaGVjayxcbiAgICAnY29pbmZsb29yJzogICAgIGNvaW5mbG9vcixcbiAgICAnY29pbmdpJzogICAgICAgIGNvaW5naSxcbiAgICAnY29pbm1hcmtldGNhcCc6IGNvaW5tYXJrZXRjYXAsXG4gICAgJ2NvaW5tYXRlJzogICAgICBjb2lubWF0ZSxcbiAgICAnY29pbnNlY3VyZSc6ICAgIGNvaW5zZWN1cmUsXG4gICAgJ2NvaW5zcG90JzogICAgICBjb2luc3BvdCxcbiAgICAnY3J5cHRvcGlhJzogICAgIGNyeXB0b3BpYSxcbiAgICAnZHN4JzogICAgICAgICAgIGRzeCxcbiAgICAnZXhtbyc6ICAgICAgICAgIGV4bW8sXG4gICAgJ2Zsb3didGMnOiAgICAgICBmbG93YnRjLFxuICAgICdmb3hiaXQnOiAgICAgICAgZm94Yml0LFxuICAgICdmeWJzZSc6ICAgICAgICAgZnlic2UsXG4gICAgJ2Z5YnNnJzogICAgICAgICBmeWJzZyxcbiAgICAnZ2F0ZWNvaW4nOiAgICAgIGdhdGVjb2luLFxuICAgICdnZGF4JzogICAgICAgICAgZ2RheCxcbiAgICAnZ2VtaW5pJzogICAgICAgIGdlbWluaSxcbiAgICAnaGl0YnRjJzogICAgICAgIGhpdGJ0YyxcbiAgICAnaHVvYmknOiAgICAgICAgIGh1b2JpLFxuICAgICdpdGJpdCc6ICAgICAgICAgaXRiaXQsXG4gICAgJ2p1YmknOiAgICAgICAgICBqdWJpLFxuICAgICdrcmFrZW4nOiAgICAgICAga3Jha2VuLFxuICAgICdsYWtlYnRjJzogICAgICAgbGFrZWJ0YyxcbiAgICAnbGl2ZWNvaW4nOiAgICAgIGxpdmVjb2luLFxuICAgICdsaXF1aSc6ICAgICAgICAgbGlxdWksXG4gICAgJ2x1bm8nOiAgICAgICAgICBsdW5vLFxuICAgICdtZXJjYWRvJzogICAgICAgbWVyY2FkbyxcbiAgICAnb2tjb2luY255JzogICAgIG9rY29pbmNueSxcbiAgICAnb2tjb2ludXNkJzogICAgIG9rY29pbnVzZCxcbiAgICAnb2tleCc6ICAgICAgICAgIG9rZXgsXG4gICAgJ3BheW1pdW0nOiAgICAgICBwYXltaXVtLFxuICAgICdwb2xvbmlleCc6ICAgICAgcG9sb25pZXgsXG4gICAgJ3F1YWRyaWdhY3gnOiAgICBxdWFkcmlnYWN4LFxuICAgICdxdW9pbmUnOiAgICAgICAgcXVvaW5lLFxuICAgICdzb3V0aHhjaGFuZ2UnOiAgc291dGh4Y2hhbmdlLFxuICAgICdzdXJiaXRjb2luJzogICAgc3VyYml0Y29pbixcbiAgICAndGhlcm9jayc6ICAgICAgIHRoZXJvY2ssXG4gICAgJ3VyZHViaXQnOiAgICAgICB1cmR1Yml0LFxuICAgICd2YXVsdG9ybyc6ICAgICAgdmF1bHRvcm8sXG4gICAgJ3ZidGMnOiAgICAgICAgICB2YnRjLFxuICAgICd2aXJ3b3gnOiAgICAgICAgdmlyd294LFxuICAgICd4YnRjZSc6ICAgICAgICAgeGJ0Y2UsXG4gICAgJ3lvYml0JzogICAgICAgICB5b2JpdCxcbiAgICAneXVuYmknOiAgICAgICAgIHl1bmJpLFxuICAgICd6YWlmJzogICAgICAgICAgemFpZixcbn1cblxubGV0IGRlZmluZUFsbEV4Y2hhbmdlcyA9IGZ1bmN0aW9uIChleGNoYW5nZXMpIHtcbiAgICBsZXQgcmVzdWx0ID0ge31cbiAgICBmb3IgKGxldCBpZCBpbiBleGNoYW5nZXMpXG4gICAgICAgIHJlc3VsdFtpZF0gPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEV4Y2hhbmdlIChleHRlbmQgKGV4Y2hhbmdlc1tpZF0sIHBhcmFtcykpXG4gICAgICAgIH1cbiAgICByZXN1bHQuZXhjaGFuZ2VzID0gT2JqZWN0LmtleXMgKGV4Y2hhbmdlcylcbiAgICByZXR1cm4gcmVzdWx0XG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuY29uc3QgY2N4dCA9IE9iamVjdC5hc3NpZ24gKGRlZmluZUFsbEV4Y2hhbmdlcyAoZXhjaGFuZ2VzKSwge1xuXG4gICAgdmVyc2lvbixcblxuICAgIC8vIGV4Y2VwdGlvbnNcblxuICAgIENDWFRFcnJvcixcbiAgICBFeGNoYW5nZUVycm9yLFxuICAgIE5vdFN1cHBvcnRlZCxcbiAgICBBdXRoZW50aWNhdGlvbkVycm9yLFxuICAgIEluc3VmZmljaWVudEZ1bmRzLFxuICAgIE5ldHdvcmtFcnJvcixcbiAgICBERG9TUHJvdGVjdGlvbixcbiAgICBSZXF1ZXN0VGltZW91dCxcbiAgICBFeGNoYW5nZU5vdEF2YWlsYWJsZSxcblxuICAgIC8vIGNvbW1vbiB1dGlsaXR5IGZ1bmN0aW9uc1xuXG4gICAgc2xlZXAsXG4gICAgdGltZW91dCxcbiAgICBjYXBpdGFsaXplLFxuICAgIGtleXNvcnQsXG4gICAgZXh0ZW5kLFxuICAgIG9taXQsXG4gICAgaW5kZXhCeSxcbiAgICBzb3J0QnksXG4gICAgZmxhdHRlbixcbiAgICB1bmlxdWUsXG4gICAgcGx1Y2ssXG4gICAgdXJsZW5jb2RlLFxuICAgIHN1bSxcbiAgICBkZWNpbWFsLFxuXG4gICAgLy8gdW5kZXJzY29yZSBhbGlhc2VzXG5cbiAgICBpbmRleF9ieTogaW5kZXhCeSxcbiAgICBzb3J0X2J5OiBzb3J0QnksXG5cbiAgICAvLyBjcnlwdG8gZnVuY3Rpb25zXG5cbiAgICBiaW5hcnlDb25jYXQsXG4gICAgc3RyaW5nVG9CaW5hcnksXG4gICAgYmluYXJ5VG9TdHJpbmcsXG4gICAgc3RyaW5nVG9CYXNlNjQsXG4gICAgdXRmMTZUb0Jhc2U2NCxcbiAgICBiYXNlNjRUb0JpbmFyeSxcbiAgICBiYXNlNjRUb1N0cmluZyxcbiAgICB1cmxlbmNvZGVCYXNlNjQsXG4gICAgaGFzaCxcbiAgICBobWFjLFxuICAgIGp3dCxcblxufSlcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5pZiAoaXNDb21tb25KUykge1xuXG4gICAgbW9kdWxlLmV4cG9ydHMgPSBjY3h0XG5cbn0gZWxzZSB7XG5cbiAgICB3aW5kb3cuY2N4dCA9IGNjeHRcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG59KSAoKSAvLyBlbmQgb2YgbmFtZXNwYWNlXG4iLCIvKiAgQSBlbnRyeSBwb2ludCBmb3IgdGhlIGJyb3dzZXIgYnVuZGxlIHZlcnNpb24uIFRoaXMgZ2V0cyBjb21waWxlZCBieTpcbiAgICAgICAgXG4gICAgICAgIGJyb3dzZXJpZnkgLS1kZWJ1ZyAuL2NjeHQuYnJvd3Nlci5qcyA+IC4vYnVpbGQvY2N4dC5icm93c2VyLmpzXG4gKi9cblxud2luZG93LmNjeHQgPSByZXF1aXJlICgnLi9idWlsZC9jY3h0LmVzNScpIiwiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSwgdW5kZWYpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIiksIHJlcXVpcmUoXCIuL2VuYy1iYXNlNjRcIiksIHJlcXVpcmUoXCIuL21kNVwiKSwgcmVxdWlyZShcIi4vZXZwa2RmXCIpLCByZXF1aXJlKFwiLi9jaXBoZXItY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi9lbmMtYmFzZTY0XCIsIFwiLi9tZDVcIiwgXCIuL2V2cGtkZlwiLCBcIi4vY2lwaGVyLWNvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdChmdW5jdGlvbiAoKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBCbG9ja0NpcGhlciA9IENfbGliLkJsb2NrQ2lwaGVyO1xuXHQgICAgdmFyIENfYWxnbyA9IEMuYWxnbztcblxuXHQgICAgLy8gTG9va3VwIHRhYmxlc1xuXHQgICAgdmFyIFNCT1ggPSBbXTtcblx0ICAgIHZhciBJTlZfU0JPWCA9IFtdO1xuXHQgICAgdmFyIFNVQl9NSVhfMCA9IFtdO1xuXHQgICAgdmFyIFNVQl9NSVhfMSA9IFtdO1xuXHQgICAgdmFyIFNVQl9NSVhfMiA9IFtdO1xuXHQgICAgdmFyIFNVQl9NSVhfMyA9IFtdO1xuXHQgICAgdmFyIElOVl9TVUJfTUlYXzAgPSBbXTtcblx0ICAgIHZhciBJTlZfU1VCX01JWF8xID0gW107XG5cdCAgICB2YXIgSU5WX1NVQl9NSVhfMiA9IFtdO1xuXHQgICAgdmFyIElOVl9TVUJfTUlYXzMgPSBbXTtcblxuXHQgICAgLy8gQ29tcHV0ZSBsb29rdXAgdGFibGVzXG5cdCAgICAoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIC8vIENvbXB1dGUgZG91YmxlIHRhYmxlXG5cdCAgICAgICAgdmFyIGQgPSBbXTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDI1NjsgaSsrKSB7XG5cdCAgICAgICAgICAgIGlmIChpIDwgMTI4KSB7XG5cdCAgICAgICAgICAgICAgICBkW2ldID0gaSA8PCAxO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgZFtpXSA9IChpIDw8IDEpIF4gMHgxMWI7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cblx0ICAgICAgICAvLyBXYWxrIEdGKDJeOClcblx0ICAgICAgICB2YXIgeCA9IDA7XG5cdCAgICAgICAgdmFyIHhpID0gMDtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDI1NjsgaSsrKSB7XG5cdCAgICAgICAgICAgIC8vIENvbXB1dGUgc2JveFxuXHQgICAgICAgICAgICB2YXIgc3ggPSB4aSBeICh4aSA8PCAxKSBeICh4aSA8PCAyKSBeICh4aSA8PCAzKSBeICh4aSA8PCA0KTtcblx0ICAgICAgICAgICAgc3ggPSAoc3ggPj4+IDgpIF4gKHN4ICYgMHhmZikgXiAweDYzO1xuXHQgICAgICAgICAgICBTQk9YW3hdID0gc3g7XG5cdCAgICAgICAgICAgIElOVl9TQk9YW3N4XSA9IHg7XG5cblx0ICAgICAgICAgICAgLy8gQ29tcHV0ZSBtdWx0aXBsaWNhdGlvblxuXHQgICAgICAgICAgICB2YXIgeDIgPSBkW3hdO1xuXHQgICAgICAgICAgICB2YXIgeDQgPSBkW3gyXTtcblx0ICAgICAgICAgICAgdmFyIHg4ID0gZFt4NF07XG5cblx0ICAgICAgICAgICAgLy8gQ29tcHV0ZSBzdWIgYnl0ZXMsIG1peCBjb2x1bW5zIHRhYmxlc1xuXHQgICAgICAgICAgICB2YXIgdCA9IChkW3N4XSAqIDB4MTAxKSBeIChzeCAqIDB4MTAxMDEwMCk7XG5cdCAgICAgICAgICAgIFNVQl9NSVhfMFt4XSA9ICh0IDw8IDI0KSB8ICh0ID4+PiA4KTtcblx0ICAgICAgICAgICAgU1VCX01JWF8xW3hdID0gKHQgPDwgMTYpIHwgKHQgPj4+IDE2KTtcblx0ICAgICAgICAgICAgU1VCX01JWF8yW3hdID0gKHQgPDwgOCkgIHwgKHQgPj4+IDI0KTtcblx0ICAgICAgICAgICAgU1VCX01JWF8zW3hdID0gdDtcblxuXHQgICAgICAgICAgICAvLyBDb21wdXRlIGludiBzdWIgYnl0ZXMsIGludiBtaXggY29sdW1ucyB0YWJsZXNcblx0ICAgICAgICAgICAgdmFyIHQgPSAoeDggKiAweDEwMTAxMDEpIF4gKHg0ICogMHgxMDAwMSkgXiAoeDIgKiAweDEwMSkgXiAoeCAqIDB4MTAxMDEwMCk7XG5cdCAgICAgICAgICAgIElOVl9TVUJfTUlYXzBbc3hdID0gKHQgPDwgMjQpIHwgKHQgPj4+IDgpO1xuXHQgICAgICAgICAgICBJTlZfU1VCX01JWF8xW3N4XSA9ICh0IDw8IDE2KSB8ICh0ID4+PiAxNik7XG5cdCAgICAgICAgICAgIElOVl9TVUJfTUlYXzJbc3hdID0gKHQgPDwgOCkgIHwgKHQgPj4+IDI0KTtcblx0ICAgICAgICAgICAgSU5WX1NVQl9NSVhfM1tzeF0gPSB0O1xuXG5cdCAgICAgICAgICAgIC8vIENvbXB1dGUgbmV4dCBjb3VudGVyXG5cdCAgICAgICAgICAgIGlmICgheCkge1xuXHQgICAgICAgICAgICAgICAgeCA9IHhpID0gMTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHggPSB4MiBeIGRbZFtkW3g4IF4geDJdXV07XG5cdCAgICAgICAgICAgICAgICB4aSBePSBkW2RbeGldXTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0oKSk7XG5cblx0ICAgIC8vIFByZWNvbXB1dGVkIFJjb24gbG9va3VwXG5cdCAgICB2YXIgUkNPTiA9IFsweDAwLCAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDFiLCAweDM2XTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBBRVMgYmxvY2sgY2lwaGVyIGFsZ29yaXRobS5cblx0ICAgICAqL1xuXHQgICAgdmFyIEFFUyA9IENfYWxnby5BRVMgPSBCbG9ja0NpcGhlci5leHRlbmQoe1xuXHQgICAgICAgIF9kb1Jlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vIFNraXAgcmVzZXQgb2YgblJvdW5kcyBoYXMgYmVlbiBzZXQgYmVmb3JlIGFuZCBrZXkgZGlkIG5vdCBjaGFuZ2Vcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX25Sb3VuZHMgJiYgdGhpcy5fa2V5UHJpb3JSZXNldCA9PT0gdGhpcy5fa2V5KSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm47XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGtleSA9IHRoaXMuX2tleVByaW9yUmVzZXQgPSB0aGlzLl9rZXk7XG5cdCAgICAgICAgICAgIHZhciBrZXlXb3JkcyA9IGtleS53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIGtleVNpemUgPSBrZXkuc2lnQnl0ZXMgLyA0O1xuXG5cdCAgICAgICAgICAgIC8vIENvbXB1dGUgbnVtYmVyIG9mIHJvdW5kc1xuXHQgICAgICAgICAgICB2YXIgblJvdW5kcyA9IHRoaXMuX25Sb3VuZHMgPSBrZXlTaXplICsgNjtcblxuXHQgICAgICAgICAgICAvLyBDb21wdXRlIG51bWJlciBvZiBrZXkgc2NoZWR1bGUgcm93c1xuXHQgICAgICAgICAgICB2YXIga3NSb3dzID0gKG5Sb3VuZHMgKyAxKSAqIDQ7XG5cblx0ICAgICAgICAgICAgLy8gQ29tcHV0ZSBrZXkgc2NoZWR1bGVcblx0ICAgICAgICAgICAgdmFyIGtleVNjaGVkdWxlID0gdGhpcy5fa2V5U2NoZWR1bGUgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIga3NSb3cgPSAwOyBrc1JvdyA8IGtzUm93czsga3NSb3crKykge1xuXHQgICAgICAgICAgICAgICAgaWYgKGtzUm93IDwga2V5U2l6ZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIGtleVNjaGVkdWxlW2tzUm93XSA9IGtleVdvcmRzW2tzUm93XTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIHQgPSBrZXlTY2hlZHVsZVtrc1JvdyAtIDFdO1xuXG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKCEoa3NSb3cgJSBrZXlTaXplKSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAvLyBSb3Qgd29yZFxuXHQgICAgICAgICAgICAgICAgICAgICAgICB0ID0gKHQgPDwgOCkgfCAodCA+Pj4gMjQpO1xuXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN1YiB3b3JkXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHQgPSAoU0JPWFt0ID4+PiAyNF0gPDwgMjQpIHwgKFNCT1hbKHQgPj4+IDE2KSAmIDB4ZmZdIDw8IDE2KSB8IChTQk9YWyh0ID4+PiA4KSAmIDB4ZmZdIDw8IDgpIHwgU0JPWFt0ICYgMHhmZl07XG5cblx0ICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWl4IFJjb25cblx0ICAgICAgICAgICAgICAgICAgICAgICAgdCBePSBSQ09OWyhrc1JvdyAvIGtleVNpemUpIHwgMF0gPDwgMjQ7XG5cdCAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChrZXlTaXplID4gNiAmJiBrc1JvdyAlIGtleVNpemUgPT0gNCkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdWIgd29yZFxuXHQgICAgICAgICAgICAgICAgICAgICAgICB0ID0gKFNCT1hbdCA+Pj4gMjRdIDw8IDI0KSB8IChTQk9YWyh0ID4+PiAxNikgJiAweGZmXSA8PCAxNikgfCAoU0JPWFsodCA+Pj4gOCkgJiAweGZmXSA8PCA4KSB8IFNCT1hbdCAmIDB4ZmZdO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAgICAgICAgIGtleVNjaGVkdWxlW2tzUm93XSA9IGtleVNjaGVkdWxlW2tzUm93IC0ga2V5U2l6ZV0gXiB0O1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gQ29tcHV0ZSBpbnYga2V5IHNjaGVkdWxlXG5cdCAgICAgICAgICAgIHZhciBpbnZLZXlTY2hlZHVsZSA9IHRoaXMuX2ludktleVNjaGVkdWxlID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGludktzUm93ID0gMDsgaW52S3NSb3cgPCBrc1Jvd3M7IGludktzUm93KyspIHtcblx0ICAgICAgICAgICAgICAgIHZhciBrc1JvdyA9IGtzUm93cyAtIGludktzUm93O1xuXG5cdCAgICAgICAgICAgICAgICBpZiAoaW52S3NSb3cgJSA0KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIHQgPSBrZXlTY2hlZHVsZVtrc1Jvd107XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciB0ID0ga2V5U2NoZWR1bGVba3NSb3cgLSA0XTtcblx0ICAgICAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAgICAgaWYgKGludktzUm93IDwgNCB8fCBrc1JvdyA8PSA0KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgaW52S2V5U2NoZWR1bGVbaW52S3NSb3ddID0gdDtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgaW52S2V5U2NoZWR1bGVbaW52S3NSb3ddID0gSU5WX1NVQl9NSVhfMFtTQk9YW3QgPj4+IDI0XV0gXiBJTlZfU1VCX01JWF8xW1NCT1hbKHQgPj4+IDE2KSAmIDB4ZmZdXSBeXG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5WX1NVQl9NSVhfMltTQk9YWyh0ID4+PiA4KSAmIDB4ZmZdXSBeIElOVl9TVUJfTUlYXzNbU0JPWFt0ICYgMHhmZl1dO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGVuY3J5cHRCbG9jazogZnVuY3Rpb24gKE0sIG9mZnNldCkge1xuXHQgICAgICAgICAgICB0aGlzLl9kb0NyeXB0QmxvY2soTSwgb2Zmc2V0LCB0aGlzLl9rZXlTY2hlZHVsZSwgU1VCX01JWF8wLCBTVUJfTUlYXzEsIFNVQl9NSVhfMiwgU1VCX01JWF8zLCBTQk9YKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgZGVjcnlwdEJsb2NrOiBmdW5jdGlvbiAoTSwgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIC8vIFN3YXAgMm5kIGFuZCA0dGggcm93c1xuXHQgICAgICAgICAgICB2YXIgdCA9IE1bb2Zmc2V0ICsgMV07XG5cdCAgICAgICAgICAgIE1bb2Zmc2V0ICsgMV0gPSBNW29mZnNldCArIDNdO1xuXHQgICAgICAgICAgICBNW29mZnNldCArIDNdID0gdDtcblxuXHQgICAgICAgICAgICB0aGlzLl9kb0NyeXB0QmxvY2soTSwgb2Zmc2V0LCB0aGlzLl9pbnZLZXlTY2hlZHVsZSwgSU5WX1NVQl9NSVhfMCwgSU5WX1NVQl9NSVhfMSwgSU5WX1NVQl9NSVhfMiwgSU5WX1NVQl9NSVhfMywgSU5WX1NCT1gpO1xuXG5cdCAgICAgICAgICAgIC8vIEludiBzd2FwIDJuZCBhbmQgNHRoIHJvd3Ncblx0ICAgICAgICAgICAgdmFyIHQgPSBNW29mZnNldCArIDFdO1xuXHQgICAgICAgICAgICBNW29mZnNldCArIDFdID0gTVtvZmZzZXQgKyAzXTtcblx0ICAgICAgICAgICAgTVtvZmZzZXQgKyAzXSA9IHQ7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb0NyeXB0QmxvY2s6IGZ1bmN0aW9uIChNLCBvZmZzZXQsIGtleVNjaGVkdWxlLCBTVUJfTUlYXzAsIFNVQl9NSVhfMSwgU1VCX01JWF8yLCBTVUJfTUlYXzMsIFNCT1gpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgdmFyIG5Sb3VuZHMgPSB0aGlzLl9uUm91bmRzO1xuXG5cdCAgICAgICAgICAgIC8vIEdldCBpbnB1dCwgYWRkIHJvdW5kIGtleVxuXHQgICAgICAgICAgICB2YXIgczAgPSBNW29mZnNldF0gICAgIF4ga2V5U2NoZWR1bGVbMF07XG5cdCAgICAgICAgICAgIHZhciBzMSA9IE1bb2Zmc2V0ICsgMV0gXiBrZXlTY2hlZHVsZVsxXTtcblx0ICAgICAgICAgICAgdmFyIHMyID0gTVtvZmZzZXQgKyAyXSBeIGtleVNjaGVkdWxlWzJdO1xuXHQgICAgICAgICAgICB2YXIgczMgPSBNW29mZnNldCArIDNdIF4ga2V5U2NoZWR1bGVbM107XG5cblx0ICAgICAgICAgICAgLy8gS2V5IHNjaGVkdWxlIHJvdyBjb3VudGVyXG5cdCAgICAgICAgICAgIHZhciBrc1JvdyA9IDQ7XG5cblx0ICAgICAgICAgICAgLy8gUm91bmRzXG5cdCAgICAgICAgICAgIGZvciAodmFyIHJvdW5kID0gMTsgcm91bmQgPCBuUm91bmRzOyByb3VuZCsrKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBTaGlmdCByb3dzLCBzdWIgYnl0ZXMsIG1peCBjb2x1bW5zLCBhZGQgcm91bmQga2V5XG5cdCAgICAgICAgICAgICAgICB2YXIgdDAgPSBTVUJfTUlYXzBbczAgPj4+IDI0XSBeIFNVQl9NSVhfMVsoczEgPj4+IDE2KSAmIDB4ZmZdIF4gU1VCX01JWF8yWyhzMiA+Pj4gOCkgJiAweGZmXSBeIFNVQl9NSVhfM1tzMyAmIDB4ZmZdIF4ga2V5U2NoZWR1bGVba3NSb3crK107XG5cdCAgICAgICAgICAgICAgICB2YXIgdDEgPSBTVUJfTUlYXzBbczEgPj4+IDI0XSBeIFNVQl9NSVhfMVsoczIgPj4+IDE2KSAmIDB4ZmZdIF4gU1VCX01JWF8yWyhzMyA+Pj4gOCkgJiAweGZmXSBeIFNVQl9NSVhfM1tzMCAmIDB4ZmZdIF4ga2V5U2NoZWR1bGVba3NSb3crK107XG5cdCAgICAgICAgICAgICAgICB2YXIgdDIgPSBTVUJfTUlYXzBbczIgPj4+IDI0XSBeIFNVQl9NSVhfMVsoczMgPj4+IDE2KSAmIDB4ZmZdIF4gU1VCX01JWF8yWyhzMCA+Pj4gOCkgJiAweGZmXSBeIFNVQl9NSVhfM1tzMSAmIDB4ZmZdIF4ga2V5U2NoZWR1bGVba3NSb3crK107XG5cdCAgICAgICAgICAgICAgICB2YXIgdDMgPSBTVUJfTUlYXzBbczMgPj4+IDI0XSBeIFNVQl9NSVhfMVsoczAgPj4+IDE2KSAmIDB4ZmZdIF4gU1VCX01JWF8yWyhzMSA+Pj4gOCkgJiAweGZmXSBeIFNVQl9NSVhfM1tzMiAmIDB4ZmZdIF4ga2V5U2NoZWR1bGVba3NSb3crK107XG5cblx0ICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBzdGF0ZVxuXHQgICAgICAgICAgICAgICAgczAgPSB0MDtcblx0ICAgICAgICAgICAgICAgIHMxID0gdDE7XG5cdCAgICAgICAgICAgICAgICBzMiA9IHQyO1xuXHQgICAgICAgICAgICAgICAgczMgPSB0Mztcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIFNoaWZ0IHJvd3MsIHN1YiBieXRlcywgYWRkIHJvdW5kIGtleVxuXHQgICAgICAgICAgICB2YXIgdDAgPSAoKFNCT1hbczAgPj4+IDI0XSA8PCAyNCkgfCAoU0JPWFsoczEgPj4+IDE2KSAmIDB4ZmZdIDw8IDE2KSB8IChTQk9YWyhzMiA+Pj4gOCkgJiAweGZmXSA8PCA4KSB8IFNCT1hbczMgJiAweGZmXSkgXiBrZXlTY2hlZHVsZVtrc1JvdysrXTtcblx0ICAgICAgICAgICAgdmFyIHQxID0gKChTQk9YW3MxID4+PiAyNF0gPDwgMjQpIHwgKFNCT1hbKHMyID4+PiAxNikgJiAweGZmXSA8PCAxNikgfCAoU0JPWFsoczMgPj4+IDgpICYgMHhmZl0gPDwgOCkgfCBTQk9YW3MwICYgMHhmZl0pIF4ga2V5U2NoZWR1bGVba3NSb3crK107XG5cdCAgICAgICAgICAgIHZhciB0MiA9ICgoU0JPWFtzMiA+Pj4gMjRdIDw8IDI0KSB8IChTQk9YWyhzMyA+Pj4gMTYpICYgMHhmZl0gPDwgMTYpIHwgKFNCT1hbKHMwID4+PiA4KSAmIDB4ZmZdIDw8IDgpIHwgU0JPWFtzMSAmIDB4ZmZdKSBeIGtleVNjaGVkdWxlW2tzUm93KytdO1xuXHQgICAgICAgICAgICB2YXIgdDMgPSAoKFNCT1hbczMgPj4+IDI0XSA8PCAyNCkgfCAoU0JPWFsoczAgPj4+IDE2KSAmIDB4ZmZdIDw8IDE2KSB8IChTQk9YWyhzMSA+Pj4gOCkgJiAweGZmXSA8PCA4KSB8IFNCT1hbczIgJiAweGZmXSkgXiBrZXlTY2hlZHVsZVtrc1JvdysrXTtcblxuXHQgICAgICAgICAgICAvLyBTZXQgb3V0cHV0XG5cdCAgICAgICAgICAgIE1bb2Zmc2V0XSAgICAgPSB0MDtcblx0ICAgICAgICAgICAgTVtvZmZzZXQgKyAxXSA9IHQxO1xuXHQgICAgICAgICAgICBNW29mZnNldCArIDJdID0gdDI7XG5cdCAgICAgICAgICAgIE1bb2Zmc2V0ICsgM10gPSB0Mztcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAga2V5U2l6ZTogMjU2LzMyXG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbnMgdG8gdGhlIGNpcGhlcidzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQGV4YW1wbGVcblx0ICAgICAqXG5cdCAgICAgKiAgICAgdmFyIGNpcGhlcnRleHQgPSBDcnlwdG9KUy5BRVMuZW5jcnlwdChtZXNzYWdlLCBrZXksIGNmZyk7XG5cdCAgICAgKiAgICAgdmFyIHBsYWludGV4dCAgPSBDcnlwdG9KUy5BRVMuZGVjcnlwdChjaXBoZXJ0ZXh0LCBrZXksIGNmZyk7XG5cdCAgICAgKi9cblx0ICAgIEMuQUVTID0gQmxvY2tDaXBoZXIuX2NyZWF0ZUhlbHBlcihBRVMpO1xuXHR9KCkpO1xuXG5cblx0cmV0dXJuIENyeXB0b0pTLkFFUztcblxufSkpOyIsIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnksIHVuZGVmKSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpLCByZXF1aXJlKFwiLi9ldnBrZGZcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiLCBcIi4vZXZwa2RmXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQvKipcblx0ICogQ2lwaGVyIGNvcmUgY29tcG9uZW50cy5cblx0ICovXG5cdENyeXB0b0pTLmxpYi5DaXBoZXIgfHwgKGZ1bmN0aW9uICh1bmRlZmluZWQpIHtcblx0ICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgdmFyIEMgPSBDcnlwdG9KUztcblx0ICAgIHZhciBDX2xpYiA9IEMubGliO1xuXHQgICAgdmFyIEJhc2UgPSBDX2xpYi5CYXNlO1xuXHQgICAgdmFyIFdvcmRBcnJheSA9IENfbGliLldvcmRBcnJheTtcblx0ICAgIHZhciBCdWZmZXJlZEJsb2NrQWxnb3JpdGhtID0gQ19saWIuQnVmZmVyZWRCbG9ja0FsZ29yaXRobTtcblx0ICAgIHZhciBDX2VuYyA9IEMuZW5jO1xuXHQgICAgdmFyIFV0ZjggPSBDX2VuYy5VdGY4O1xuXHQgICAgdmFyIEJhc2U2NCA9IENfZW5jLkJhc2U2NDtcblx0ICAgIHZhciBDX2FsZ28gPSBDLmFsZ287XG5cdCAgICB2YXIgRXZwS0RGID0gQ19hbGdvLkV2cEtERjtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBBYnN0cmFjdCBiYXNlIGNpcGhlciB0ZW1wbGF0ZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcHJvcGVydHkge251bWJlcn0ga2V5U2l6ZSBUaGlzIGNpcGhlcidzIGtleSBzaXplLiBEZWZhdWx0OiA0ICgxMjggYml0cylcblx0ICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBpdlNpemUgVGhpcyBjaXBoZXIncyBJViBzaXplLiBEZWZhdWx0OiA0ICgxMjggYml0cylcblx0ICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBfRU5DX1hGT1JNX01PREUgQSBjb25zdGFudCByZXByZXNlbnRpbmcgZW5jcnlwdGlvbiBtb2RlLlxuXHQgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IF9ERUNfWEZPUk1fTU9ERSBBIGNvbnN0YW50IHJlcHJlc2VudGluZyBkZWNyeXB0aW9uIG1vZGUuXG5cdCAgICAgKi9cblx0ICAgIHZhciBDaXBoZXIgPSBDX2xpYi5DaXBoZXIgPSBCdWZmZXJlZEJsb2NrQWxnb3JpdGhtLmV4dGVuZCh7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29uZmlndXJhdGlvbiBvcHRpb25zLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHByb3BlcnR5IHtXb3JkQXJyYXl9IGl2IFRoZSBJViB0byB1c2UgZm9yIHRoaXMgb3BlcmF0aW9uLlxuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGNmZzogQmFzZS5leHRlbmQoKSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENyZWF0ZXMgdGhpcyBjaXBoZXIgaW4gZW5jcnlwdGlvbiBtb2RlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl9IGtleSBUaGUga2V5LlxuXHQgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjZmcgKE9wdGlvbmFsKSBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHVzZSBmb3IgdGhpcyBvcGVyYXRpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtDaXBoZXJ9IEEgY2lwaGVyIGluc3RhbmNlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgY2lwaGVyID0gQ3J5cHRvSlMuYWxnby5BRVMuY3JlYXRlRW5jcnlwdG9yKGtleVdvcmRBcnJheSwgeyBpdjogaXZXb3JkQXJyYXkgfSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY3JlYXRlRW5jcnlwdG9yOiBmdW5jdGlvbiAoa2V5LCBjZmcpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlKHRoaXMuX0VOQ19YRk9STV9NT0RFLCBrZXksIGNmZyk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENyZWF0ZXMgdGhpcyBjaXBoZXIgaW4gZGVjcnlwdGlvbiBtb2RlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl9IGtleSBUaGUga2V5LlxuXHQgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjZmcgKE9wdGlvbmFsKSBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHVzZSBmb3IgdGhpcyBvcGVyYXRpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtDaXBoZXJ9IEEgY2lwaGVyIGluc3RhbmNlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgY2lwaGVyID0gQ3J5cHRvSlMuYWxnby5BRVMuY3JlYXRlRGVjcnlwdG9yKGtleVdvcmRBcnJheSwgeyBpdjogaXZXb3JkQXJyYXkgfSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY3JlYXRlRGVjcnlwdG9yOiBmdW5jdGlvbiAoa2V5LCBjZmcpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlKHRoaXMuX0RFQ19YRk9STV9NT0RFLCBrZXksIGNmZyk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEluaXRpYWxpemVzIGEgbmV3bHkgY3JlYXRlZCBjaXBoZXIuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0geGZvcm1Nb2RlIEVpdGhlciB0aGUgZW5jcnlwdGlvbiBvciBkZWNyeXB0aW9uIHRyYW5zb3JtYXRpb24gbW9kZSBjb25zdGFudC5cblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheX0ga2V5IFRoZSBrZXkuXG5cdCAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNmZyAoT3B0aW9uYWwpIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gdXNlIGZvciB0aGlzIG9wZXJhdGlvbi5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGNpcGhlciA9IENyeXB0b0pTLmFsZ28uQUVTLmNyZWF0ZShDcnlwdG9KUy5hbGdvLkFFUy5fRU5DX1hGT1JNX01PREUsIGtleVdvcmRBcnJheSwgeyBpdjogaXZXb3JkQXJyYXkgfSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgaW5pdDogZnVuY3Rpb24gKHhmb3JtTW9kZSwga2V5LCBjZmcpIHtcblx0ICAgICAgICAgICAgLy8gQXBwbHkgY29uZmlnIGRlZmF1bHRzXG5cdCAgICAgICAgICAgIHRoaXMuY2ZnID0gdGhpcy5jZmcuZXh0ZW5kKGNmZyk7XG5cblx0ICAgICAgICAgICAgLy8gU3RvcmUgdHJhbnNmb3JtIG1vZGUgYW5kIGtleVxuXHQgICAgICAgICAgICB0aGlzLl94Zm9ybU1vZGUgPSB4Zm9ybU1vZGU7XG5cdCAgICAgICAgICAgIHRoaXMuX2tleSA9IGtleTtcblxuXHQgICAgICAgICAgICAvLyBTZXQgaW5pdGlhbCB2YWx1ZXNcblx0ICAgICAgICAgICAgdGhpcy5yZXNldCgpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBSZXNldHMgdGhpcyBjaXBoZXIgdG8gaXRzIGluaXRpYWwgc3RhdGUuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIGNpcGhlci5yZXNldCgpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHJlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vIFJlc2V0IGRhdGEgYnVmZmVyXG5cdCAgICAgICAgICAgIEJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0ucmVzZXQuY2FsbCh0aGlzKTtcblxuXHQgICAgICAgICAgICAvLyBQZXJmb3JtIGNvbmNyZXRlLWNpcGhlciBsb2dpY1xuXHQgICAgICAgICAgICB0aGlzLl9kb1Jlc2V0KCk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEFkZHMgZGF0YSB0byBiZSBlbmNyeXB0ZWQgb3IgZGVjcnlwdGVkLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBkYXRhVXBkYXRlIFRoZSBkYXRhIHRvIGVuY3J5cHQgb3IgZGVjcnlwdC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIGRhdGEgYWZ0ZXIgcHJvY2Vzc2luZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGVuY3J5cHRlZCA9IGNpcGhlci5wcm9jZXNzKCdkYXRhJyk7XG5cdCAgICAgICAgICogICAgIHZhciBlbmNyeXB0ZWQgPSBjaXBoZXIucHJvY2Vzcyh3b3JkQXJyYXkpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHByb2Nlc3M6IGZ1bmN0aW9uIChkYXRhVXBkYXRlKSB7XG5cdCAgICAgICAgICAgIC8vIEFwcGVuZFxuXHQgICAgICAgICAgICB0aGlzLl9hcHBlbmQoZGF0YVVwZGF0ZSk7XG5cblx0ICAgICAgICAgICAgLy8gUHJvY2VzcyBhdmFpbGFibGUgYmxvY2tzXG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wcm9jZXNzKCk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEZpbmFsaXplcyB0aGUgZW5jcnlwdGlvbiBvciBkZWNyeXB0aW9uIHByb2Nlc3MuXG5cdCAgICAgICAgICogTm90ZSB0aGF0IHRoZSBmaW5hbGl6ZSBvcGVyYXRpb24gaXMgZWZmZWN0aXZlbHkgYSBkZXN0cnVjdGl2ZSwgcmVhZC1vbmNlIG9wZXJhdGlvbi5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gZGF0YVVwZGF0ZSBUaGUgZmluYWwgZGF0YSB0byBlbmNyeXB0IG9yIGRlY3J5cHQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBkYXRhIGFmdGVyIGZpbmFsIHByb2Nlc3NpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBlbmNyeXB0ZWQgPSBjaXBoZXIuZmluYWxpemUoKTtcblx0ICAgICAgICAgKiAgICAgdmFyIGVuY3J5cHRlZCA9IGNpcGhlci5maW5hbGl6ZSgnZGF0YScpO1xuXHQgICAgICAgICAqICAgICB2YXIgZW5jcnlwdGVkID0gY2lwaGVyLmZpbmFsaXplKHdvcmRBcnJheSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgZmluYWxpemU6IGZ1bmN0aW9uIChkYXRhVXBkYXRlKSB7XG5cdCAgICAgICAgICAgIC8vIEZpbmFsIGRhdGEgdXBkYXRlXG5cdCAgICAgICAgICAgIGlmIChkYXRhVXBkYXRlKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9hcHBlbmQoZGF0YVVwZGF0ZSk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBQZXJmb3JtIGNvbmNyZXRlLWNpcGhlciBsb2dpY1xuXHQgICAgICAgICAgICB2YXIgZmluYWxQcm9jZXNzZWREYXRhID0gdGhpcy5fZG9GaW5hbGl6ZSgpO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBmaW5hbFByb2Nlc3NlZERhdGE7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGtleVNpemU6IDEyOC8zMixcblxuXHQgICAgICAgIGl2U2l6ZTogMTI4LzMyLFxuXG5cdCAgICAgICAgX0VOQ19YRk9STV9NT0RFOiAxLFxuXG5cdCAgICAgICAgX0RFQ19YRk9STV9NT0RFOiAyLFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ3JlYXRlcyBzaG9ydGN1dCBmdW5jdGlvbnMgdG8gYSBjaXBoZXIncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtDaXBoZXJ9IGNpcGhlciBUaGUgY2lwaGVyIHRvIGNyZWF0ZSBhIGhlbHBlciBmb3IuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtPYmplY3R9IEFuIG9iamVjdCB3aXRoIGVuY3J5cHQgYW5kIGRlY3J5cHQgc2hvcnRjdXQgZnVuY3Rpb25zLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgQUVTID0gQ3J5cHRvSlMubGliLkNpcGhlci5fY3JlYXRlSGVscGVyKENyeXB0b0pTLmFsZ28uQUVTKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBfY3JlYXRlSGVscGVyOiAoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBmdW5jdGlvbiBzZWxlY3RDaXBoZXJTdHJhdGVneShrZXkpIHtcblx0ICAgICAgICAgICAgICAgIGlmICh0eXBlb2Yga2V5ID09ICdzdHJpbmcnKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBhc3N3b3JkQmFzZWRDaXBoZXI7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiBTZXJpYWxpemFibGVDaXBoZXI7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGNpcGhlcikge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHtcblx0ICAgICAgICAgICAgICAgICAgICBlbmNyeXB0OiBmdW5jdGlvbiAobWVzc2FnZSwga2V5LCBjZmcpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGVjdENpcGhlclN0cmF0ZWd5KGtleSkuZW5jcnlwdChjaXBoZXIsIG1lc3NhZ2UsIGtleSwgY2ZnKTtcblx0ICAgICAgICAgICAgICAgICAgICB9LFxuXG5cdCAgICAgICAgICAgICAgICAgICAgZGVjcnlwdDogZnVuY3Rpb24gKGNpcGhlcnRleHQsIGtleSwgY2ZnKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxlY3RDaXBoZXJTdHJhdGVneShrZXkpLmRlY3J5cHQoY2lwaGVyLCBjaXBoZXJ0ZXh0LCBrZXksIGNmZyk7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfTtcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9KCkpXG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBBYnN0cmFjdCBiYXNlIHN0cmVhbSBjaXBoZXIgdGVtcGxhdGUuXG5cdCAgICAgKlxuXHQgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IGJsb2NrU2l6ZSBUaGUgbnVtYmVyIG9mIDMyLWJpdCB3b3JkcyB0aGlzIGNpcGhlciBvcGVyYXRlcyBvbi4gRGVmYXVsdDogMSAoMzIgYml0cylcblx0ICAgICAqL1xuXHQgICAgdmFyIFN0cmVhbUNpcGhlciA9IENfbGliLlN0cmVhbUNpcGhlciA9IENpcGhlci5leHRlbmQoe1xuXHQgICAgICAgIF9kb0ZpbmFsaXplOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vIFByb2Nlc3MgcGFydGlhbCBibG9ja3Ncblx0ICAgICAgICAgICAgdmFyIGZpbmFsUHJvY2Vzc2VkQmxvY2tzID0gdGhpcy5fcHJvY2VzcyghISdmbHVzaCcpO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBmaW5hbFByb2Nlc3NlZEJsb2Nrcztcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgYmxvY2tTaXplOiAxXG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBNb2RlIG5hbWVzcGFjZS5cblx0ICAgICAqL1xuXHQgICAgdmFyIENfbW9kZSA9IEMubW9kZSA9IHt9O1xuXG5cdCAgICAvKipcblx0ICAgICAqIEFic3RyYWN0IGJhc2UgYmxvY2sgY2lwaGVyIG1vZGUgdGVtcGxhdGUuXG5cdCAgICAgKi9cblx0ICAgIHZhciBCbG9ja0NpcGhlck1vZGUgPSBDX2xpYi5CbG9ja0NpcGhlck1vZGUgPSBCYXNlLmV4dGVuZCh7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ3JlYXRlcyB0aGlzIG1vZGUgZm9yIGVuY3J5cHRpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge0NpcGhlcn0gY2lwaGVyIEEgYmxvY2sgY2lwaGVyIGluc3RhbmNlLlxuXHQgICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IGl2IFRoZSBJViB3b3Jkcy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIG1vZGUgPSBDcnlwdG9KUy5tb2RlLkNCQy5jcmVhdGVFbmNyeXB0b3IoY2lwaGVyLCBpdi53b3Jkcyk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY3JlYXRlRW5jcnlwdG9yOiBmdW5jdGlvbiAoY2lwaGVyLCBpdikge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5FbmNyeXB0b3IuY3JlYXRlKGNpcGhlciwgaXYpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDcmVhdGVzIHRoaXMgbW9kZSBmb3IgZGVjcnlwdGlvbi5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7Q2lwaGVyfSBjaXBoZXIgQSBibG9jayBjaXBoZXIgaW5zdGFuY2UuXG5cdCAgICAgICAgICogQHBhcmFtIHtBcnJheX0gaXYgVGhlIElWIHdvcmRzLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgbW9kZSA9IENyeXB0b0pTLm1vZGUuQ0JDLmNyZWF0ZURlY3J5cHRvcihjaXBoZXIsIGl2LndvcmRzKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjcmVhdGVEZWNyeXB0b3I6IGZ1bmN0aW9uIChjaXBoZXIsIGl2KSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLkRlY3J5cHRvci5jcmVhdGUoY2lwaGVyLCBpdik7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEluaXRpYWxpemVzIGEgbmV3bHkgY3JlYXRlZCBtb2RlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtDaXBoZXJ9IGNpcGhlciBBIGJsb2NrIGNpcGhlciBpbnN0YW5jZS5cblx0ICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBpdiBUaGUgSVYgd29yZHMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBtb2RlID0gQ3J5cHRvSlMubW9kZS5DQkMuRW5jcnlwdG9yLmNyZWF0ZShjaXBoZXIsIGl2LndvcmRzKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBpbml0OiBmdW5jdGlvbiAoY2lwaGVyLCBpdikge1xuXHQgICAgICAgICAgICB0aGlzLl9jaXBoZXIgPSBjaXBoZXI7XG5cdCAgICAgICAgICAgIHRoaXMuX2l2ID0gaXY7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogQ2lwaGVyIEJsb2NrIENoYWluaW5nIG1vZGUuXG5cdCAgICAgKi9cblx0ICAgIHZhciBDQkMgPSBDX21vZGUuQ0JDID0gKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBBYnN0cmFjdCBiYXNlIENCQyBtb2RlLlxuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHZhciBDQkMgPSBCbG9ja0NpcGhlck1vZGUuZXh0ZW5kKCk7XG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDQkMgZW5jcnlwdG9yLlxuXHQgICAgICAgICAqL1xuXHQgICAgICAgIENCQy5FbmNyeXB0b3IgPSBDQkMuZXh0ZW5kKHtcblx0ICAgICAgICAgICAgLyoqXG5cdCAgICAgICAgICAgICAqIFByb2Nlc3NlcyB0aGUgZGF0YSBibG9jayBhdCBvZmZzZXQuXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IHdvcmRzIFRoZSBkYXRhIHdvcmRzIHRvIG9wZXJhdGUgb24uXG5cdCAgICAgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXQgVGhlIG9mZnNldCB3aGVyZSB0aGUgYmxvY2sgc3RhcnRzLlxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiAgICAgbW9kZS5wcm9jZXNzQmxvY2soZGF0YS53b3Jkcywgb2Zmc2V0KTtcblx0ICAgICAgICAgICAgICovXG5cdCAgICAgICAgICAgIHByb2Nlc3NCbG9jazogZnVuY3Rpb24gKHdvcmRzLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICAgICAgdmFyIGNpcGhlciA9IHRoaXMuX2NpcGhlcjtcblx0ICAgICAgICAgICAgICAgIHZhciBibG9ja1NpemUgPSBjaXBoZXIuYmxvY2tTaXplO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBYT1IgYW5kIGVuY3J5cHRcblx0ICAgICAgICAgICAgICAgIHhvckJsb2NrLmNhbGwodGhpcywgd29yZHMsIG9mZnNldCwgYmxvY2tTaXplKTtcblx0ICAgICAgICAgICAgICAgIGNpcGhlci5lbmNyeXB0QmxvY2sod29yZHMsIG9mZnNldCk7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFJlbWVtYmVyIHRoaXMgYmxvY2sgdG8gdXNlIHdpdGggbmV4dCBibG9ja1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fcHJldkJsb2NrID0gd29yZHMuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBibG9ja1NpemUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSk7XG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDQkMgZGVjcnlwdG9yLlxuXHQgICAgICAgICAqL1xuXHQgICAgICAgIENCQy5EZWNyeXB0b3IgPSBDQkMuZXh0ZW5kKHtcblx0ICAgICAgICAgICAgLyoqXG5cdCAgICAgICAgICAgICAqIFByb2Nlc3NlcyB0aGUgZGF0YSBibG9jayBhdCBvZmZzZXQuXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IHdvcmRzIFRoZSBkYXRhIHdvcmRzIHRvIG9wZXJhdGUgb24uXG5cdCAgICAgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXQgVGhlIG9mZnNldCB3aGVyZSB0aGUgYmxvY2sgc3RhcnRzLlxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiAgICAgbW9kZS5wcm9jZXNzQmxvY2soZGF0YS53b3Jkcywgb2Zmc2V0KTtcblx0ICAgICAgICAgICAgICovXG5cdCAgICAgICAgICAgIHByb2Nlc3NCbG9jazogZnVuY3Rpb24gKHdvcmRzLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICAgICAgdmFyIGNpcGhlciA9IHRoaXMuX2NpcGhlcjtcblx0ICAgICAgICAgICAgICAgIHZhciBibG9ja1NpemUgPSBjaXBoZXIuYmxvY2tTaXplO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBSZW1lbWJlciB0aGlzIGJsb2NrIHRvIHVzZSB3aXRoIG5leHQgYmxvY2tcblx0ICAgICAgICAgICAgICAgIHZhciB0aGlzQmxvY2sgPSB3b3Jkcy5zbGljZShvZmZzZXQsIG9mZnNldCArIGJsb2NrU2l6ZSk7XG5cblx0ICAgICAgICAgICAgICAgIC8vIERlY3J5cHQgYW5kIFhPUlxuXHQgICAgICAgICAgICAgICAgY2lwaGVyLmRlY3J5cHRCbG9jayh3b3Jkcywgb2Zmc2V0KTtcblx0ICAgICAgICAgICAgICAgIHhvckJsb2NrLmNhbGwodGhpcywgd29yZHMsIG9mZnNldCwgYmxvY2tTaXplKTtcblxuXHQgICAgICAgICAgICAgICAgLy8gVGhpcyBibG9jayBiZWNvbWVzIHRoZSBwcmV2aW91cyBibG9ja1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fcHJldkJsb2NrID0gdGhpc0Jsb2NrO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSk7XG5cblx0ICAgICAgICBmdW5jdGlvbiB4b3JCbG9jayh3b3Jkcywgb2Zmc2V0LCBibG9ja1NpemUpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgdmFyIGl2ID0gdGhpcy5faXY7XG5cblx0ICAgICAgICAgICAgLy8gQ2hvb3NlIG1peGluZyBibG9ja1xuXHQgICAgICAgICAgICBpZiAoaXYpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBibG9jayA9IGl2O1xuXG5cdCAgICAgICAgICAgICAgICAvLyBSZW1vdmUgSVYgZm9yIHN1YnNlcXVlbnQgYmxvY2tzXG5cdCAgICAgICAgICAgICAgICB0aGlzLl9pdiA9IHVuZGVmaW5lZDtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHZhciBibG9jayA9IHRoaXMuX3ByZXZCbG9jaztcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIFhPUiBibG9ja3Ncblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBibG9ja1NpemU7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgd29yZHNbb2Zmc2V0ICsgaV0gXj0gYmxvY2tbaV07XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cblx0ICAgICAgICByZXR1cm4gQ0JDO1xuXHQgICAgfSgpKTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBQYWRkaW5nIG5hbWVzcGFjZS5cblx0ICAgICAqL1xuXHQgICAgdmFyIENfcGFkID0gQy5wYWQgPSB7fTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBQS0NTICM1LzcgcGFkZGluZyBzdHJhdGVneS5cblx0ICAgICAqL1xuXHQgICAgdmFyIFBrY3M3ID0gQ19wYWQuUGtjczcgPSB7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogUGFkcyBkYXRhIHVzaW5nIHRoZSBhbGdvcml0aG0gZGVmaW5lZCBpbiBQS0NTICM1LzcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheX0gZGF0YSBUaGUgZGF0YSB0byBwYWQuXG5cdCAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IGJsb2NrU2l6ZSBUaGUgbXVsdGlwbGUgdGhhdCB0aGUgZGF0YSBzaG91bGQgYmUgcGFkZGVkIHRvLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICBDcnlwdG9KUy5wYWQuUGtjczcucGFkKHdvcmRBcnJheSwgNCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgcGFkOiBmdW5jdGlvbiAoZGF0YSwgYmxvY2tTaXplKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgIHZhciBibG9ja1NpemVCeXRlcyA9IGJsb2NrU2l6ZSAqIDQ7XG5cblx0ICAgICAgICAgICAgLy8gQ291bnQgcGFkZGluZyBieXRlc1xuXHQgICAgICAgICAgICB2YXIgblBhZGRpbmdCeXRlcyA9IGJsb2NrU2l6ZUJ5dGVzIC0gZGF0YS5zaWdCeXRlcyAlIGJsb2NrU2l6ZUJ5dGVzO1xuXG5cdCAgICAgICAgICAgIC8vIENyZWF0ZSBwYWRkaW5nIHdvcmRcblx0ICAgICAgICAgICAgdmFyIHBhZGRpbmdXb3JkID0gKG5QYWRkaW5nQnl0ZXMgPDwgMjQpIHwgKG5QYWRkaW5nQnl0ZXMgPDwgMTYpIHwgKG5QYWRkaW5nQnl0ZXMgPDwgOCkgfCBuUGFkZGluZ0J5dGVzO1xuXG5cdCAgICAgICAgICAgIC8vIENyZWF0ZSBwYWRkaW5nXG5cdCAgICAgICAgICAgIHZhciBwYWRkaW5nV29yZHMgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuUGFkZGluZ0J5dGVzOyBpICs9IDQpIHtcblx0ICAgICAgICAgICAgICAgIHBhZGRpbmdXb3Jkcy5wdXNoKHBhZGRpbmdXb3JkKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB2YXIgcGFkZGluZyA9IFdvcmRBcnJheS5jcmVhdGUocGFkZGluZ1dvcmRzLCBuUGFkZGluZ0J5dGVzKTtcblxuXHQgICAgICAgICAgICAvLyBBZGQgcGFkZGluZ1xuXHQgICAgICAgICAgICBkYXRhLmNvbmNhdChwYWRkaW5nKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogVW5wYWRzIGRhdGEgdGhhdCBoYWQgYmVlbiBwYWRkZWQgdXNpbmcgdGhlIGFsZ29yaXRobSBkZWZpbmVkIGluIFBLQ1MgIzUvNy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fSBkYXRhIFRoZSBkYXRhIHRvIHVucGFkLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICBDcnlwdG9KUy5wYWQuUGtjczcudW5wYWQod29yZEFycmF5KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICB1bnBhZDogZnVuY3Rpb24gKGRhdGEpIHtcblx0ICAgICAgICAgICAgLy8gR2V0IG51bWJlciBvZiBwYWRkaW5nIGJ5dGVzIGZyb20gbGFzdCBieXRlXG5cdCAgICAgICAgICAgIHZhciBuUGFkZGluZ0J5dGVzID0gZGF0YS53b3Jkc1soZGF0YS5zaWdCeXRlcyAtIDEpID4+PiAyXSAmIDB4ZmY7XG5cblx0ICAgICAgICAgICAgLy8gUmVtb3ZlIHBhZGRpbmdcblx0ICAgICAgICAgICAgZGF0YS5zaWdCeXRlcyAtPSBuUGFkZGluZ0J5dGVzO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cblx0ICAgIC8qKlxuXHQgICAgICogQWJzdHJhY3QgYmFzZSBibG9jayBjaXBoZXIgdGVtcGxhdGUuXG5cdCAgICAgKlxuXHQgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IGJsb2NrU2l6ZSBUaGUgbnVtYmVyIG9mIDMyLWJpdCB3b3JkcyB0aGlzIGNpcGhlciBvcGVyYXRlcyBvbi4gRGVmYXVsdDogNCAoMTI4IGJpdHMpXG5cdCAgICAgKi9cblx0ICAgIHZhciBCbG9ja0NpcGhlciA9IENfbGliLkJsb2NrQ2lwaGVyID0gQ2lwaGVyLmV4dGVuZCh7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29uZmlndXJhdGlvbiBvcHRpb25zLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHByb3BlcnR5IHtNb2RlfSBtb2RlIFRoZSBibG9jayBtb2RlIHRvIHVzZS4gRGVmYXVsdDogQ0JDXG5cdCAgICAgICAgICogQHByb3BlcnR5IHtQYWRkaW5nfSBwYWRkaW5nIFRoZSBwYWRkaW5nIHN0cmF0ZWd5IHRvIHVzZS4gRGVmYXVsdDogUGtjczdcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjZmc6IENpcGhlci5jZmcuZXh0ZW5kKHtcblx0ICAgICAgICAgICAgbW9kZTogQ0JDLFxuXHQgICAgICAgICAgICBwYWRkaW5nOiBQa2NzN1xuXHQgICAgICAgIH0pLFxuXG5cdCAgICAgICAgcmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gUmVzZXQgY2lwaGVyXG5cdCAgICAgICAgICAgIENpcGhlci5yZXNldC5jYWxsKHRoaXMpO1xuXG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgY2ZnID0gdGhpcy5jZmc7XG5cdCAgICAgICAgICAgIHZhciBpdiA9IGNmZy5pdjtcblx0ICAgICAgICAgICAgdmFyIG1vZGUgPSBjZmcubW9kZTtcblxuXHQgICAgICAgICAgICAvLyBSZXNldCBibG9jayBtb2RlXG5cdCAgICAgICAgICAgIGlmICh0aGlzLl94Zm9ybU1vZGUgPT0gdGhpcy5fRU5DX1hGT1JNX01PREUpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBtb2RlQ3JlYXRvciA9IG1vZGUuY3JlYXRlRW5jcnlwdG9yO1xuXHQgICAgICAgICAgICB9IGVsc2UgLyogaWYgKHRoaXMuX3hmb3JtTW9kZSA9PSB0aGlzLl9ERUNfWEZPUk1fTU9ERSkgKi8ge1xuXHQgICAgICAgICAgICAgICAgdmFyIG1vZGVDcmVhdG9yID0gbW9kZS5jcmVhdGVEZWNyeXB0b3I7XG5cdCAgICAgICAgICAgICAgICAvLyBLZWVwIGF0IGxlYXN0IG9uZSBibG9jayBpbiB0aGUgYnVmZmVyIGZvciB1bnBhZGRpbmdcblx0ICAgICAgICAgICAgICAgIHRoaXMuX21pbkJ1ZmZlclNpemUgPSAxO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgaWYgKHRoaXMuX21vZGUgJiYgdGhpcy5fbW9kZS5fX2NyZWF0b3IgPT0gbW9kZUNyZWF0b3IpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX21vZGUuaW5pdCh0aGlzLCBpdiAmJiBpdi53b3Jkcyk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9tb2RlID0gbW9kZUNyZWF0b3IuY2FsbChtb2RlLCB0aGlzLCBpdiAmJiBpdi53b3Jkcyk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9tb2RlLl9fY3JlYXRvciA9IG1vZGVDcmVhdG9yO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb1Byb2Nlc3NCbG9jazogZnVuY3Rpb24gKHdvcmRzLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbW9kZS5wcm9jZXNzQmxvY2sod29yZHMsIG9mZnNldCk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb0ZpbmFsaXplOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgIHZhciBwYWRkaW5nID0gdGhpcy5jZmcucGFkZGluZztcblxuXHQgICAgICAgICAgICAvLyBGaW5hbGl6ZVxuXHQgICAgICAgICAgICBpZiAodGhpcy5feGZvcm1Nb2RlID09IHRoaXMuX0VOQ19YRk9STV9NT0RFKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBQYWQgZGF0YVxuXHQgICAgICAgICAgICAgICAgcGFkZGluZy5wYWQodGhpcy5fZGF0YSwgdGhpcy5ibG9ja1NpemUpO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBQcm9jZXNzIGZpbmFsIGJsb2Nrc1xuXHQgICAgICAgICAgICAgICAgdmFyIGZpbmFsUHJvY2Vzc2VkQmxvY2tzID0gdGhpcy5fcHJvY2VzcyghISdmbHVzaCcpO1xuXHQgICAgICAgICAgICB9IGVsc2UgLyogaWYgKHRoaXMuX3hmb3JtTW9kZSA9PSB0aGlzLl9ERUNfWEZPUk1fTU9ERSkgKi8ge1xuXHQgICAgICAgICAgICAgICAgLy8gUHJvY2VzcyBmaW5hbCBibG9ja3Ncblx0ICAgICAgICAgICAgICAgIHZhciBmaW5hbFByb2Nlc3NlZEJsb2NrcyA9IHRoaXMuX3Byb2Nlc3MoISEnZmx1c2gnKTtcblxuXHQgICAgICAgICAgICAgICAgLy8gVW5wYWQgZGF0YVxuXHQgICAgICAgICAgICAgICAgcGFkZGluZy51bnBhZChmaW5hbFByb2Nlc3NlZEJsb2Nrcyk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gZmluYWxQcm9jZXNzZWRCbG9ja3M7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGJsb2NrU2l6ZTogMTI4LzMyXG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBBIGNvbGxlY3Rpb24gb2YgY2lwaGVyIHBhcmFtZXRlcnMuXG5cdCAgICAgKlxuXHQgICAgICogQHByb3BlcnR5IHtXb3JkQXJyYXl9IGNpcGhlcnRleHQgVGhlIHJhdyBjaXBoZXJ0ZXh0LlxuXHQgICAgICogQHByb3BlcnR5IHtXb3JkQXJyYXl9IGtleSBUaGUga2V5IHRvIHRoaXMgY2lwaGVydGV4dC5cblx0ICAgICAqIEBwcm9wZXJ0eSB7V29yZEFycmF5fSBpdiBUaGUgSVYgdXNlZCBpbiB0aGUgY2lwaGVyaW5nIG9wZXJhdGlvbi5cblx0ICAgICAqIEBwcm9wZXJ0eSB7V29yZEFycmF5fSBzYWx0IFRoZSBzYWx0IHVzZWQgd2l0aCBhIGtleSBkZXJpdmF0aW9uIGZ1bmN0aW9uLlxuXHQgICAgICogQHByb3BlcnR5IHtDaXBoZXJ9IGFsZ29yaXRobSBUaGUgY2lwaGVyIGFsZ29yaXRobS5cblx0ICAgICAqIEBwcm9wZXJ0eSB7TW9kZX0gbW9kZSBUaGUgYmxvY2sgbW9kZSB1c2VkIGluIHRoZSBjaXBoZXJpbmcgb3BlcmF0aW9uLlxuXHQgICAgICogQHByb3BlcnR5IHtQYWRkaW5nfSBwYWRkaW5nIFRoZSBwYWRkaW5nIHNjaGVtZSB1c2VkIGluIHRoZSBjaXBoZXJpbmcgb3BlcmF0aW9uLlxuXHQgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IGJsb2NrU2l6ZSBUaGUgYmxvY2sgc2l6ZSBvZiB0aGUgY2lwaGVyLlxuXHQgICAgICogQHByb3BlcnR5IHtGb3JtYXR9IGZvcm1hdHRlciBUaGUgZGVmYXVsdCBmb3JtYXR0aW5nIHN0cmF0ZWd5IHRvIGNvbnZlcnQgdGhpcyBjaXBoZXIgcGFyYW1zIG9iamVjdCB0byBhIHN0cmluZy5cblx0ICAgICAqL1xuXHQgICAgdmFyIENpcGhlclBhcmFtcyA9IENfbGliLkNpcGhlclBhcmFtcyA9IEJhc2UuZXh0ZW5kKHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBJbml0aWFsaXplcyBhIG5ld2x5IGNyZWF0ZWQgY2lwaGVyIHBhcmFtcyBvYmplY3QuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY2lwaGVyUGFyYW1zIEFuIG9iamVjdCB3aXRoIGFueSBvZiB0aGUgcG9zc2libGUgY2lwaGVyIHBhcmFtZXRlcnMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBjaXBoZXJQYXJhbXMgPSBDcnlwdG9KUy5saWIuQ2lwaGVyUGFyYW1zLmNyZWF0ZSh7XG5cdCAgICAgICAgICogICAgICAgICBjaXBoZXJ0ZXh0OiBjaXBoZXJ0ZXh0V29yZEFycmF5LFxuXHQgICAgICAgICAqICAgICAgICAga2V5OiBrZXlXb3JkQXJyYXksXG5cdCAgICAgICAgICogICAgICAgICBpdjogaXZXb3JkQXJyYXksXG5cdCAgICAgICAgICogICAgICAgICBzYWx0OiBzYWx0V29yZEFycmF5LFxuXHQgICAgICAgICAqICAgICAgICAgYWxnb3JpdGhtOiBDcnlwdG9KUy5hbGdvLkFFUyxcblx0ICAgICAgICAgKiAgICAgICAgIG1vZGU6IENyeXB0b0pTLm1vZGUuQ0JDLFxuXHQgICAgICAgICAqICAgICAgICAgcGFkZGluZzogQ3J5cHRvSlMucGFkLlBLQ1M3LFxuXHQgICAgICAgICAqICAgICAgICAgYmxvY2tTaXplOiA0LFxuXHQgICAgICAgICAqICAgICAgICAgZm9ybWF0dGVyOiBDcnlwdG9KUy5mb3JtYXQuT3BlblNTTFxuXHQgICAgICAgICAqICAgICB9KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBpbml0OiBmdW5jdGlvbiAoY2lwaGVyUGFyYW1zKSB7XG5cdCAgICAgICAgICAgIHRoaXMubWl4SW4oY2lwaGVyUGFyYW1zKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgdGhpcyBjaXBoZXIgcGFyYW1zIG9iamVjdCB0byBhIHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7Rm9ybWF0fSBmb3JtYXR0ZXIgKE9wdGlvbmFsKSBUaGUgZm9ybWF0dGluZyBzdHJhdGVneSB0byB1c2UuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBzdHJpbmdpZmllZCBjaXBoZXIgcGFyYW1zLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHRocm93cyBFcnJvciBJZiBuZWl0aGVyIHRoZSBmb3JtYXR0ZXIgbm9yIHRoZSBkZWZhdWx0IGZvcm1hdHRlciBpcyBzZXQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBzdHJpbmcgPSBjaXBoZXJQYXJhbXMgKyAnJztcblx0ICAgICAgICAgKiAgICAgdmFyIHN0cmluZyA9IGNpcGhlclBhcmFtcy50b1N0cmluZygpO1xuXHQgICAgICAgICAqICAgICB2YXIgc3RyaW5nID0gY2lwaGVyUGFyYW1zLnRvU3RyaW5nKENyeXB0b0pTLmZvcm1hdC5PcGVuU1NMKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICB0b1N0cmluZzogZnVuY3Rpb24gKGZvcm1hdHRlcikge1xuXHQgICAgICAgICAgICByZXR1cm4gKGZvcm1hdHRlciB8fCB0aGlzLmZvcm1hdHRlcikuc3RyaW5naWZ5KHRoaXMpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIEZvcm1hdCBuYW1lc3BhY2UuXG5cdCAgICAgKi9cblx0ICAgIHZhciBDX2Zvcm1hdCA9IEMuZm9ybWF0ID0ge307XG5cblx0ICAgIC8qKlxuXHQgICAgICogT3BlblNTTCBmb3JtYXR0aW5nIHN0cmF0ZWd5LlxuXHQgICAgICovXG5cdCAgICB2YXIgT3BlblNTTEZvcm1hdHRlciA9IENfZm9ybWF0Lk9wZW5TU0wgPSB7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSBjaXBoZXIgcGFyYW1zIG9iamVjdCB0byBhbiBPcGVuU1NMLWNvbXBhdGlibGUgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtDaXBoZXJQYXJhbXN9IGNpcGhlclBhcmFtcyBUaGUgY2lwaGVyIHBhcmFtcyBvYmplY3QuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBPcGVuU1NMLWNvbXBhdGlibGUgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgb3BlblNTTFN0cmluZyA9IENyeXB0b0pTLmZvcm1hdC5PcGVuU1NMLnN0cmluZ2lmeShjaXBoZXJQYXJhbXMpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHN0cmluZ2lmeTogZnVuY3Rpb24gKGNpcGhlclBhcmFtcykge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGNpcGhlcnRleHQgPSBjaXBoZXJQYXJhbXMuY2lwaGVydGV4dDtcblx0ICAgICAgICAgICAgdmFyIHNhbHQgPSBjaXBoZXJQYXJhbXMuc2FsdDtcblxuXHQgICAgICAgICAgICAvLyBGb3JtYXRcblx0ICAgICAgICAgICAgaWYgKHNhbHQpIHtcblx0ICAgICAgICAgICAgICAgIHZhciB3b3JkQXJyYXkgPSBXb3JkQXJyYXkuY3JlYXRlKFsweDUzNjE2Yzc0LCAweDY1NjQ1ZjVmXSkuY29uY2F0KHNhbHQpLmNvbmNhdChjaXBoZXJ0ZXh0KTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHZhciB3b3JkQXJyYXkgPSBjaXBoZXJ0ZXh0O1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIHdvcmRBcnJheS50b1N0cmluZyhCYXNlNjQpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyBhbiBPcGVuU1NMLWNvbXBhdGlibGUgc3RyaW5nIHRvIGEgY2lwaGVyIHBhcmFtcyBvYmplY3QuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gb3BlblNTTFN0ciBUaGUgT3BlblNTTC1jb21wYXRpYmxlIHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge0NpcGhlclBhcmFtc30gVGhlIGNpcGhlciBwYXJhbXMgb2JqZWN0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgY2lwaGVyUGFyYW1zID0gQ3J5cHRvSlMuZm9ybWF0Lk9wZW5TU0wucGFyc2Uob3BlblNTTFN0cmluZyk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgcGFyc2U6IGZ1bmN0aW9uIChvcGVuU1NMU3RyKSB7XG5cdCAgICAgICAgICAgIC8vIFBhcnNlIGJhc2U2NFxuXHQgICAgICAgICAgICB2YXIgY2lwaGVydGV4dCA9IEJhc2U2NC5wYXJzZShvcGVuU1NMU3RyKTtcblxuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgY2lwaGVydGV4dFdvcmRzID0gY2lwaGVydGV4dC53b3JkcztcblxuXHQgICAgICAgICAgICAvLyBUZXN0IGZvciBzYWx0XG5cdCAgICAgICAgICAgIGlmIChjaXBoZXJ0ZXh0V29yZHNbMF0gPT0gMHg1MzYxNmM3NCAmJiBjaXBoZXJ0ZXh0V29yZHNbMV0gPT0gMHg2NTY0NWY1Zikge1xuXHQgICAgICAgICAgICAgICAgLy8gRXh0cmFjdCBzYWx0XG5cdCAgICAgICAgICAgICAgICB2YXIgc2FsdCA9IFdvcmRBcnJheS5jcmVhdGUoY2lwaGVydGV4dFdvcmRzLnNsaWNlKDIsIDQpKTtcblxuXHQgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHNhbHQgZnJvbSBjaXBoZXJ0ZXh0XG5cdCAgICAgICAgICAgICAgICBjaXBoZXJ0ZXh0V29yZHMuc3BsaWNlKDAsIDQpO1xuXHQgICAgICAgICAgICAgICAgY2lwaGVydGV4dC5zaWdCeXRlcyAtPSAxNjtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIHJldHVybiBDaXBoZXJQYXJhbXMuY3JlYXRlKHsgY2lwaGVydGV4dDogY2lwaGVydGV4dCwgc2FsdDogc2FsdCB9KTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXG5cdCAgICAvKipcblx0ICAgICAqIEEgY2lwaGVyIHdyYXBwZXIgdGhhdCByZXR1cm5zIGNpcGhlcnRleHQgYXMgYSBzZXJpYWxpemFibGUgY2lwaGVyIHBhcmFtcyBvYmplY3QuXG5cdCAgICAgKi9cblx0ICAgIHZhciBTZXJpYWxpemFibGVDaXBoZXIgPSBDX2xpYi5TZXJpYWxpemFibGVDaXBoZXIgPSBCYXNlLmV4dGVuZCh7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29uZmlndXJhdGlvbiBvcHRpb25zLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHByb3BlcnR5IHtGb3JtYXR0ZXJ9IGZvcm1hdCBUaGUgZm9ybWF0dGluZyBzdHJhdGVneSB0byBjb252ZXJ0IGNpcGhlciBwYXJhbSBvYmplY3RzIHRvIGFuZCBmcm9tIGEgc3RyaW5nLiBEZWZhdWx0OiBPcGVuU1NMXG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY2ZnOiBCYXNlLmV4dGVuZCh7XG5cdCAgICAgICAgICAgIGZvcm1hdDogT3BlblNTTEZvcm1hdHRlclxuXHQgICAgICAgIH0pLFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogRW5jcnlwdHMgYSBtZXNzYWdlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtDaXBoZXJ9IGNpcGhlciBUaGUgY2lwaGVyIGFsZ29yaXRobSB0byB1c2UuXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGVuY3J5cHQuXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl9IGtleSBUaGUga2V5LlxuXHQgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjZmcgKE9wdGlvbmFsKSBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHVzZSBmb3IgdGhpcyBvcGVyYXRpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtDaXBoZXJQYXJhbXN9IEEgY2lwaGVyIHBhcmFtcyBvYmplY3QuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBjaXBoZXJ0ZXh0UGFyYW1zID0gQ3J5cHRvSlMubGliLlNlcmlhbGl6YWJsZUNpcGhlci5lbmNyeXB0KENyeXB0b0pTLmFsZ28uQUVTLCBtZXNzYWdlLCBrZXkpO1xuXHQgICAgICAgICAqICAgICB2YXIgY2lwaGVydGV4dFBhcmFtcyA9IENyeXB0b0pTLmxpYi5TZXJpYWxpemFibGVDaXBoZXIuZW5jcnlwdChDcnlwdG9KUy5hbGdvLkFFUywgbWVzc2FnZSwga2V5LCB7IGl2OiBpdiB9KTtcblx0ICAgICAgICAgKiAgICAgdmFyIGNpcGhlcnRleHRQYXJhbXMgPSBDcnlwdG9KUy5saWIuU2VyaWFsaXphYmxlQ2lwaGVyLmVuY3J5cHQoQ3J5cHRvSlMuYWxnby5BRVMsIG1lc3NhZ2UsIGtleSwgeyBpdjogaXYsIGZvcm1hdDogQ3J5cHRvSlMuZm9ybWF0Lk9wZW5TU0wgfSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgZW5jcnlwdDogZnVuY3Rpb24gKGNpcGhlciwgbWVzc2FnZSwga2V5LCBjZmcpIHtcblx0ICAgICAgICAgICAgLy8gQXBwbHkgY29uZmlnIGRlZmF1bHRzXG5cdCAgICAgICAgICAgIGNmZyA9IHRoaXMuY2ZnLmV4dGVuZChjZmcpO1xuXG5cdCAgICAgICAgICAgIC8vIEVuY3J5cHRcblx0ICAgICAgICAgICAgdmFyIGVuY3J5cHRvciA9IGNpcGhlci5jcmVhdGVFbmNyeXB0b3Ioa2V5LCBjZmcpO1xuXHQgICAgICAgICAgICB2YXIgY2lwaGVydGV4dCA9IGVuY3J5cHRvci5maW5hbGl6ZShtZXNzYWdlKTtcblxuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgY2lwaGVyQ2ZnID0gZW5jcnlwdG9yLmNmZztcblxuXHQgICAgICAgICAgICAvLyBDcmVhdGUgYW5kIHJldHVybiBzZXJpYWxpemFibGUgY2lwaGVyIHBhcmFtc1xuXHQgICAgICAgICAgICByZXR1cm4gQ2lwaGVyUGFyYW1zLmNyZWF0ZSh7XG5cdCAgICAgICAgICAgICAgICBjaXBoZXJ0ZXh0OiBjaXBoZXJ0ZXh0LFxuXHQgICAgICAgICAgICAgICAga2V5OiBrZXksXG5cdCAgICAgICAgICAgICAgICBpdjogY2lwaGVyQ2ZnLml2LFxuXHQgICAgICAgICAgICAgICAgYWxnb3JpdGhtOiBjaXBoZXIsXG5cdCAgICAgICAgICAgICAgICBtb2RlOiBjaXBoZXJDZmcubW9kZSxcblx0ICAgICAgICAgICAgICAgIHBhZGRpbmc6IGNpcGhlckNmZy5wYWRkaW5nLFxuXHQgICAgICAgICAgICAgICAgYmxvY2tTaXplOiBjaXBoZXIuYmxvY2tTaXplLFxuXHQgICAgICAgICAgICAgICAgZm9ybWF0dGVyOiBjZmcuZm9ybWF0XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBEZWNyeXB0cyBzZXJpYWxpemVkIGNpcGhlcnRleHQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge0NpcGhlcn0gY2lwaGVyIFRoZSBjaXBoZXIgYWxnb3JpdGhtIHRvIHVzZS5cblx0ICAgICAgICAgKiBAcGFyYW0ge0NpcGhlclBhcmFtc3xzdHJpbmd9IGNpcGhlcnRleHQgVGhlIGNpcGhlcnRleHQgdG8gZGVjcnlwdC5cblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheX0ga2V5IFRoZSBrZXkuXG5cdCAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNmZyAoT3B0aW9uYWwpIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gdXNlIGZvciB0aGlzIG9wZXJhdGlvbi5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIHBsYWludGV4dC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHBsYWludGV4dCA9IENyeXB0b0pTLmxpYi5TZXJpYWxpemFibGVDaXBoZXIuZGVjcnlwdChDcnlwdG9KUy5hbGdvLkFFUywgZm9ybWF0dGVkQ2lwaGVydGV4dCwga2V5LCB7IGl2OiBpdiwgZm9ybWF0OiBDcnlwdG9KUy5mb3JtYXQuT3BlblNTTCB9KTtcblx0ICAgICAgICAgKiAgICAgdmFyIHBsYWludGV4dCA9IENyeXB0b0pTLmxpYi5TZXJpYWxpemFibGVDaXBoZXIuZGVjcnlwdChDcnlwdG9KUy5hbGdvLkFFUywgY2lwaGVydGV4dFBhcmFtcywga2V5LCB7IGl2OiBpdiwgZm9ybWF0OiBDcnlwdG9KUy5mb3JtYXQuT3BlblNTTCB9KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBkZWNyeXB0OiBmdW5jdGlvbiAoY2lwaGVyLCBjaXBoZXJ0ZXh0LCBrZXksIGNmZykge1xuXHQgICAgICAgICAgICAvLyBBcHBseSBjb25maWcgZGVmYXVsdHNcblx0ICAgICAgICAgICAgY2ZnID0gdGhpcy5jZmcuZXh0ZW5kKGNmZyk7XG5cblx0ICAgICAgICAgICAgLy8gQ29udmVydCBzdHJpbmcgdG8gQ2lwaGVyUGFyYW1zXG5cdCAgICAgICAgICAgIGNpcGhlcnRleHQgPSB0aGlzLl9wYXJzZShjaXBoZXJ0ZXh0LCBjZmcuZm9ybWF0KTtcblxuXHQgICAgICAgICAgICAvLyBEZWNyeXB0XG5cdCAgICAgICAgICAgIHZhciBwbGFpbnRleHQgPSBjaXBoZXIuY3JlYXRlRGVjcnlwdG9yKGtleSwgY2ZnKS5maW5hbGl6ZShjaXBoZXJ0ZXh0LmNpcGhlcnRleHQpO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBwbGFpbnRleHQ7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbnZlcnRzIHNlcmlhbGl6ZWQgY2lwaGVydGV4dCB0byBDaXBoZXJQYXJhbXMsXG5cdCAgICAgICAgICogZWxzZSBhc3N1bWVkIENpcGhlclBhcmFtcyBhbHJlYWR5IGFuZCByZXR1cm5zIGNpcGhlcnRleHQgdW5jaGFuZ2VkLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtDaXBoZXJQYXJhbXN8c3RyaW5nfSBjaXBoZXJ0ZXh0IFRoZSBjaXBoZXJ0ZXh0LlxuXHQgICAgICAgICAqIEBwYXJhbSB7Rm9ybWF0dGVyfSBmb3JtYXQgVGhlIGZvcm1hdHRpbmcgc3RyYXRlZ3kgdG8gdXNlIHRvIHBhcnNlIHNlcmlhbGl6ZWQgY2lwaGVydGV4dC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge0NpcGhlclBhcmFtc30gVGhlIHVuc2VyaWFsaXplZCBjaXBoZXJ0ZXh0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgY2lwaGVydGV4dFBhcmFtcyA9IENyeXB0b0pTLmxpYi5TZXJpYWxpemFibGVDaXBoZXIuX3BhcnNlKGNpcGhlcnRleHRTdHJpbmdPclBhcmFtcywgZm9ybWF0KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBfcGFyc2U6IGZ1bmN0aW9uIChjaXBoZXJ0ZXh0LCBmb3JtYXQpIHtcblx0ICAgICAgICAgICAgaWYgKHR5cGVvZiBjaXBoZXJ0ZXh0ID09ICdzdHJpbmcnKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gZm9ybWF0LnBhcnNlKGNpcGhlcnRleHQsIHRoaXMpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGNpcGhlcnRleHQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBLZXkgZGVyaXZhdGlvbiBmdW5jdGlvbiBuYW1lc3BhY2UuXG5cdCAgICAgKi9cblx0ICAgIHZhciBDX2tkZiA9IEMua2RmID0ge307XG5cblx0ICAgIC8qKlxuXHQgICAgICogT3BlblNTTCBrZXkgZGVyaXZhdGlvbiBmdW5jdGlvbi5cblx0ICAgICAqL1xuXHQgICAgdmFyIE9wZW5TU0xLZGYgPSBDX2tkZi5PcGVuU1NMID0ge1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIERlcml2ZXMgYSBrZXkgYW5kIElWIGZyb20gYSBwYXNzd29yZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwYXNzd29yZCBUaGUgcGFzc3dvcmQgdG8gZGVyaXZlIGZyb20uXG5cdCAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IGtleVNpemUgVGhlIHNpemUgaW4gd29yZHMgb2YgdGhlIGtleSB0byBnZW5lcmF0ZS5cblx0ICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gaXZTaXplIFRoZSBzaXplIGluIHdvcmRzIG9mIHRoZSBJViB0byBnZW5lcmF0ZS5cblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IHNhbHQgKE9wdGlvbmFsKSBBIDY0LWJpdCBzYWx0IHRvIHVzZS4gSWYgb21pdHRlZCwgYSBzYWx0IHdpbGwgYmUgZ2VuZXJhdGVkIHJhbmRvbWx5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7Q2lwaGVyUGFyYW1zfSBBIGNpcGhlciBwYXJhbXMgb2JqZWN0IHdpdGggdGhlIGtleSwgSVYsIGFuZCBzYWx0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgZGVyaXZlZFBhcmFtcyA9IENyeXB0b0pTLmtkZi5PcGVuU1NMLmV4ZWN1dGUoJ1Bhc3N3b3JkJywgMjU2LzMyLCAxMjgvMzIpO1xuXHQgICAgICAgICAqICAgICB2YXIgZGVyaXZlZFBhcmFtcyA9IENyeXB0b0pTLmtkZi5PcGVuU1NMLmV4ZWN1dGUoJ1Bhc3N3b3JkJywgMjU2LzMyLCAxMjgvMzIsICdzYWx0c2FsdCcpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGV4ZWN1dGU6IGZ1bmN0aW9uIChwYXNzd29yZCwga2V5U2l6ZSwgaXZTaXplLCBzYWx0KSB7XG5cdCAgICAgICAgICAgIC8vIEdlbmVyYXRlIHJhbmRvbSBzYWx0XG5cdCAgICAgICAgICAgIGlmICghc2FsdCkge1xuXHQgICAgICAgICAgICAgICAgc2FsdCA9IFdvcmRBcnJheS5yYW5kb20oNjQvOCk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBEZXJpdmUga2V5IGFuZCBJVlxuXHQgICAgICAgICAgICB2YXIga2V5ID0gRXZwS0RGLmNyZWF0ZSh7IGtleVNpemU6IGtleVNpemUgKyBpdlNpemUgfSkuY29tcHV0ZShwYXNzd29yZCwgc2FsdCk7XG5cblx0ICAgICAgICAgICAgLy8gU2VwYXJhdGUga2V5IGFuZCBJVlxuXHQgICAgICAgICAgICB2YXIgaXYgPSBXb3JkQXJyYXkuY3JlYXRlKGtleS53b3Jkcy5zbGljZShrZXlTaXplKSwgaXZTaXplICogNCk7XG5cdCAgICAgICAgICAgIGtleS5zaWdCeXRlcyA9IGtleVNpemUgKiA0O1xuXG5cdCAgICAgICAgICAgIC8vIFJldHVybiBwYXJhbXNcblx0ICAgICAgICAgICAgcmV0dXJuIENpcGhlclBhcmFtcy5jcmVhdGUoeyBrZXk6IGtleSwgaXY6IGl2LCBzYWx0OiBzYWx0IH0pO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cblx0ICAgIC8qKlxuXHQgICAgICogQSBzZXJpYWxpemFibGUgY2lwaGVyIHdyYXBwZXIgdGhhdCBkZXJpdmVzIHRoZSBrZXkgZnJvbSBhIHBhc3N3b3JkLFxuXHQgICAgICogYW5kIHJldHVybnMgY2lwaGVydGV4dCBhcyBhIHNlcmlhbGl6YWJsZSBjaXBoZXIgcGFyYW1zIG9iamVjdC5cblx0ICAgICAqL1xuXHQgICAgdmFyIFBhc3N3b3JkQmFzZWRDaXBoZXIgPSBDX2xpYi5QYXNzd29yZEJhc2VkQ2lwaGVyID0gU2VyaWFsaXphYmxlQ2lwaGVyLmV4dGVuZCh7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29uZmlndXJhdGlvbiBvcHRpb25zLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHByb3BlcnR5IHtLREZ9IGtkZiBUaGUga2V5IGRlcml2YXRpb24gZnVuY3Rpb24gdG8gdXNlIHRvIGdlbmVyYXRlIGEga2V5IGFuZCBJViBmcm9tIGEgcGFzc3dvcmQuIERlZmF1bHQ6IE9wZW5TU0xcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjZmc6IFNlcmlhbGl6YWJsZUNpcGhlci5jZmcuZXh0ZW5kKHtcblx0ICAgICAgICAgICAga2RmOiBPcGVuU1NMS2RmXG5cdCAgICAgICAgfSksXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBFbmNyeXB0cyBhIG1lc3NhZ2UgdXNpbmcgYSBwYXNzd29yZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7Q2lwaGVyfSBjaXBoZXIgVGhlIGNpcGhlciBhbGdvcml0aG0gdG8gdXNlLlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBlbmNyeXB0LlxuXHQgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwYXNzd29yZCBUaGUgcGFzc3dvcmQuXG5cdCAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNmZyAoT3B0aW9uYWwpIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gdXNlIGZvciB0aGlzIG9wZXJhdGlvbi5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge0NpcGhlclBhcmFtc30gQSBjaXBoZXIgcGFyYW1zIG9iamVjdC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGNpcGhlcnRleHRQYXJhbXMgPSBDcnlwdG9KUy5saWIuUGFzc3dvcmRCYXNlZENpcGhlci5lbmNyeXB0KENyeXB0b0pTLmFsZ28uQUVTLCBtZXNzYWdlLCAncGFzc3dvcmQnKTtcblx0ICAgICAgICAgKiAgICAgdmFyIGNpcGhlcnRleHRQYXJhbXMgPSBDcnlwdG9KUy5saWIuUGFzc3dvcmRCYXNlZENpcGhlci5lbmNyeXB0KENyeXB0b0pTLmFsZ28uQUVTLCBtZXNzYWdlLCAncGFzc3dvcmQnLCB7IGZvcm1hdDogQ3J5cHRvSlMuZm9ybWF0Lk9wZW5TU0wgfSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgZW5jcnlwdDogZnVuY3Rpb24gKGNpcGhlciwgbWVzc2FnZSwgcGFzc3dvcmQsIGNmZykge1xuXHQgICAgICAgICAgICAvLyBBcHBseSBjb25maWcgZGVmYXVsdHNcblx0ICAgICAgICAgICAgY2ZnID0gdGhpcy5jZmcuZXh0ZW5kKGNmZyk7XG5cblx0ICAgICAgICAgICAgLy8gRGVyaXZlIGtleSBhbmQgb3RoZXIgcGFyYW1zXG5cdCAgICAgICAgICAgIHZhciBkZXJpdmVkUGFyYW1zID0gY2ZnLmtkZi5leGVjdXRlKHBhc3N3b3JkLCBjaXBoZXIua2V5U2l6ZSwgY2lwaGVyLml2U2l6ZSk7XG5cblx0ICAgICAgICAgICAgLy8gQWRkIElWIHRvIGNvbmZpZ1xuXHQgICAgICAgICAgICBjZmcuaXYgPSBkZXJpdmVkUGFyYW1zLml2O1xuXG5cdCAgICAgICAgICAgIC8vIEVuY3J5cHRcblx0ICAgICAgICAgICAgdmFyIGNpcGhlcnRleHQgPSBTZXJpYWxpemFibGVDaXBoZXIuZW5jcnlwdC5jYWxsKHRoaXMsIGNpcGhlciwgbWVzc2FnZSwgZGVyaXZlZFBhcmFtcy5rZXksIGNmZyk7XG5cblx0ICAgICAgICAgICAgLy8gTWl4IGluIGRlcml2ZWQgcGFyYW1zXG5cdCAgICAgICAgICAgIGNpcGhlcnRleHQubWl4SW4oZGVyaXZlZFBhcmFtcyk7XG5cblx0ICAgICAgICAgICAgcmV0dXJuIGNpcGhlcnRleHQ7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIERlY3J5cHRzIHNlcmlhbGl6ZWQgY2lwaGVydGV4dCB1c2luZyBhIHBhc3N3b3JkLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtDaXBoZXJ9IGNpcGhlciBUaGUgY2lwaGVyIGFsZ29yaXRobSB0byB1c2UuXG5cdCAgICAgICAgICogQHBhcmFtIHtDaXBoZXJQYXJhbXN8c3RyaW5nfSBjaXBoZXJ0ZXh0IFRoZSBjaXBoZXJ0ZXh0IHRvIGRlY3J5cHQuXG5cdCAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHBhc3N3b3JkIFRoZSBwYXNzd29yZC5cblx0ICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY2ZnIChPcHRpb25hbCkgVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byB1c2UgZm9yIHRoaXMgb3BlcmF0aW9uLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgcGxhaW50ZXh0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgcGxhaW50ZXh0ID0gQ3J5cHRvSlMubGliLlBhc3N3b3JkQmFzZWRDaXBoZXIuZGVjcnlwdChDcnlwdG9KUy5hbGdvLkFFUywgZm9ybWF0dGVkQ2lwaGVydGV4dCwgJ3Bhc3N3b3JkJywgeyBmb3JtYXQ6IENyeXB0b0pTLmZvcm1hdC5PcGVuU1NMIH0pO1xuXHQgICAgICAgICAqICAgICB2YXIgcGxhaW50ZXh0ID0gQ3J5cHRvSlMubGliLlBhc3N3b3JkQmFzZWRDaXBoZXIuZGVjcnlwdChDcnlwdG9KUy5hbGdvLkFFUywgY2lwaGVydGV4dFBhcmFtcywgJ3Bhc3N3b3JkJywgeyBmb3JtYXQ6IENyeXB0b0pTLmZvcm1hdC5PcGVuU1NMIH0pO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGRlY3J5cHQ6IGZ1bmN0aW9uIChjaXBoZXIsIGNpcGhlcnRleHQsIHBhc3N3b3JkLCBjZmcpIHtcblx0ICAgICAgICAgICAgLy8gQXBwbHkgY29uZmlnIGRlZmF1bHRzXG5cdCAgICAgICAgICAgIGNmZyA9IHRoaXMuY2ZnLmV4dGVuZChjZmcpO1xuXG5cdCAgICAgICAgICAgIC8vIENvbnZlcnQgc3RyaW5nIHRvIENpcGhlclBhcmFtc1xuXHQgICAgICAgICAgICBjaXBoZXJ0ZXh0ID0gdGhpcy5fcGFyc2UoY2lwaGVydGV4dCwgY2ZnLmZvcm1hdCk7XG5cblx0ICAgICAgICAgICAgLy8gRGVyaXZlIGtleSBhbmQgb3RoZXIgcGFyYW1zXG5cdCAgICAgICAgICAgIHZhciBkZXJpdmVkUGFyYW1zID0gY2ZnLmtkZi5leGVjdXRlKHBhc3N3b3JkLCBjaXBoZXIua2V5U2l6ZSwgY2lwaGVyLml2U2l6ZSwgY2lwaGVydGV4dC5zYWx0KTtcblxuXHQgICAgICAgICAgICAvLyBBZGQgSVYgdG8gY29uZmlnXG5cdCAgICAgICAgICAgIGNmZy5pdiA9IGRlcml2ZWRQYXJhbXMuaXY7XG5cblx0ICAgICAgICAgICAgLy8gRGVjcnlwdFxuXHQgICAgICAgICAgICB2YXIgcGxhaW50ZXh0ID0gU2VyaWFsaXphYmxlQ2lwaGVyLmRlY3J5cHQuY2FsbCh0aGlzLCBjaXBoZXIsIGNpcGhlcnRleHQsIGRlcml2ZWRQYXJhbXMua2V5LCBjZmcpO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBwbGFpbnRleHQ7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdH0oKSk7XG5cblxufSkpOyIsIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW10sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRyb290LkNyeXB0b0pTID0gZmFjdG9yeSgpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uICgpIHtcblxuXHQvKipcblx0ICogQ3J5cHRvSlMgY29yZSBjb21wb25lbnRzLlxuXHQgKi9cblx0dmFyIENyeXB0b0pTID0gQ3J5cHRvSlMgfHwgKGZ1bmN0aW9uIChNYXRoLCB1bmRlZmluZWQpIHtcblx0ICAgIC8qXG5cdCAgICAgKiBMb2NhbCBwb2x5ZmlsIG9mIE9iamVjdC5jcmVhdGVcblx0ICAgICAqL1xuXHQgICAgdmFyIGNyZWF0ZSA9IE9iamVjdC5jcmVhdGUgfHwgKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBmdW5jdGlvbiBGKCkge307XG5cblx0ICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaikge1xuXHQgICAgICAgICAgICB2YXIgc3VidHlwZTtcblxuXHQgICAgICAgICAgICBGLnByb3RvdHlwZSA9IG9iajtcblxuXHQgICAgICAgICAgICBzdWJ0eXBlID0gbmV3IEYoKTtcblxuXHQgICAgICAgICAgICBGLnByb3RvdHlwZSA9IG51bGw7XG5cblx0ICAgICAgICAgICAgcmV0dXJuIHN1YnR5cGU7XG5cdCAgICAgICAgfTtcblx0ICAgIH0oKSlcblxuXHQgICAgLyoqXG5cdCAgICAgKiBDcnlwdG9KUyBuYW1lc3BhY2UuXG5cdCAgICAgKi9cblx0ICAgIHZhciBDID0ge307XG5cblx0ICAgIC8qKlxuXHQgICAgICogTGlicmFyeSBuYW1lc3BhY2UuXG5cdCAgICAgKi9cblx0ICAgIHZhciBDX2xpYiA9IEMubGliID0ge307XG5cblx0ICAgIC8qKlxuXHQgICAgICogQmFzZSBvYmplY3QgZm9yIHByb3RvdHlwYWwgaW5oZXJpdGFuY2UuXG5cdCAgICAgKi9cblx0ICAgIHZhciBCYXNlID0gQ19saWIuQmFzZSA9IChmdW5jdGlvbiAoKSB7XG5cblxuXHQgICAgICAgIHJldHVybiB7XG5cdCAgICAgICAgICAgIC8qKlxuXHQgICAgICAgICAgICAgKiBDcmVhdGVzIGEgbmV3IG9iamVjdCB0aGF0IGluaGVyaXRzIGZyb20gdGhpcyBvYmplY3QuXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvdmVycmlkZXMgUHJvcGVydGllcyB0byBjb3B5IGludG8gdGhlIG5ldyBvYmplY3QuXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEByZXR1cm4ge09iamVjdH0gVGhlIG5ldyBvYmplY3QuXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogICAgIHZhciBNeVR5cGUgPSBDcnlwdG9KUy5saWIuQmFzZS5leHRlbmQoe1xuXHQgICAgICAgICAgICAgKiAgICAgICAgIGZpZWxkOiAndmFsdWUnLFxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiAgICAgICAgIG1ldGhvZDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgKiAgICAgICAgIH1cblx0ICAgICAgICAgICAgICogICAgIH0pO1xuXHQgICAgICAgICAgICAgKi9cblx0ICAgICAgICAgICAgZXh0ZW5kOiBmdW5jdGlvbiAob3ZlcnJpZGVzKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBTcGF3blxuXHQgICAgICAgICAgICAgICAgdmFyIHN1YnR5cGUgPSBjcmVhdGUodGhpcyk7XG5cblx0ICAgICAgICAgICAgICAgIC8vIEF1Z21lbnRcblx0ICAgICAgICAgICAgICAgIGlmIChvdmVycmlkZXMpIHtcblx0ICAgICAgICAgICAgICAgICAgICBzdWJ0eXBlLm1peEluKG92ZXJyaWRlcyk7XG5cdCAgICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBkZWZhdWx0IGluaXRpYWxpemVyXG5cdCAgICAgICAgICAgICAgICBpZiAoIXN1YnR5cGUuaGFzT3duUHJvcGVydHkoJ2luaXQnKSB8fCB0aGlzLmluaXQgPT09IHN1YnR5cGUuaW5pdCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHN1YnR5cGUuaW5pdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgc3VidHlwZS4kc3VwZXIuaW5pdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHQgICAgICAgICAgICAgICAgICAgIH07XG5cdCAgICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICAgIC8vIEluaXRpYWxpemVyJ3MgcHJvdG90eXBlIGlzIHRoZSBzdWJ0eXBlIG9iamVjdFxuXHQgICAgICAgICAgICAgICAgc3VidHlwZS5pbml0LnByb3RvdHlwZSA9IHN1YnR5cGU7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFJlZmVyZW5jZSBzdXBlcnR5cGVcblx0ICAgICAgICAgICAgICAgIHN1YnR5cGUuJHN1cGVyID0gdGhpcztcblxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHN1YnR5cGU7XG5cdCAgICAgICAgICAgIH0sXG5cblx0ICAgICAgICAgICAgLyoqXG5cdCAgICAgICAgICAgICAqIEV4dGVuZHMgdGhpcyBvYmplY3QgYW5kIHJ1bnMgdGhlIGluaXQgbWV0aG9kLlxuXHQgICAgICAgICAgICAgKiBBcmd1bWVudHMgdG8gY3JlYXRlKCkgd2lsbCBiZSBwYXNzZWQgdG8gaW5pdCgpLlxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAcmV0dXJuIHtPYmplY3R9IFRoZSBuZXcgb2JqZWN0LlxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqICAgICB2YXIgaW5zdGFuY2UgPSBNeVR5cGUuY3JlYXRlKCk7XG5cdCAgICAgICAgICAgICAqL1xuXHQgICAgICAgICAgICBjcmVhdGU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBpbnN0YW5jZSA9IHRoaXMuZXh0ZW5kKCk7XG5cdCAgICAgICAgICAgICAgICBpbnN0YW5jZS5pbml0LmFwcGx5KGluc3RhbmNlLCBhcmd1bWVudHMpO1xuXG5cdCAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG5cdCAgICAgICAgICAgIH0sXG5cblx0ICAgICAgICAgICAgLyoqXG5cdCAgICAgICAgICAgICAqIEluaXRpYWxpemVzIGEgbmV3bHkgY3JlYXRlZCBvYmplY3QuXG5cdCAgICAgICAgICAgICAqIE92ZXJyaWRlIHRoaXMgbWV0aG9kIHRvIGFkZCBzb21lIGxvZ2ljIHdoZW4geW91ciBvYmplY3RzIGFyZSBjcmVhdGVkLlxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiAgICAgdmFyIE15VHlwZSA9IENyeXB0b0pTLmxpYi5CYXNlLmV4dGVuZCh7XG5cdCAgICAgICAgICAgICAqICAgICAgICAgaW5pdDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgKiAgICAgICAgICAgICAvLyAuLi5cblx0ICAgICAgICAgICAgICogICAgICAgICB9XG5cdCAgICAgICAgICAgICAqICAgICB9KTtcblx0ICAgICAgICAgICAgICovXG5cdCAgICAgICAgICAgIGluaXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgfSxcblxuXHQgICAgICAgICAgICAvKipcblx0ICAgICAgICAgICAgICogQ29waWVzIHByb3BlcnRpZXMgaW50byB0aGlzIG9iamVjdC5cblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BlcnRpZXMgVGhlIHByb3BlcnRpZXMgdG8gbWl4IGluLlxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiAgICAgTXlUeXBlLm1peEluKHtcblx0ICAgICAgICAgICAgICogICAgICAgICBmaWVsZDogJ3ZhbHVlJ1xuXHQgICAgICAgICAgICAgKiAgICAgfSk7XG5cdCAgICAgICAgICAgICAqL1xuXHQgICAgICAgICAgICBtaXhJbjogZnVuY3Rpb24gKHByb3BlcnRpZXMpIHtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5TmFtZSBpbiBwcm9wZXJ0aWVzKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkocHJvcGVydHlOYW1lKSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW3Byb3BlcnR5TmFtZV0gPSBwcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV07XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICAvLyBJRSB3b24ndCBjb3B5IHRvU3RyaW5nIHVzaW5nIHRoZSBsb29wIGFib3ZlXG5cdCAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eSgndG9TdHJpbmcnKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMudG9TdHJpbmcgPSBwcm9wZXJ0aWVzLnRvU3RyaW5nO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9LFxuXG5cdCAgICAgICAgICAgIC8qKlxuXHQgICAgICAgICAgICAgKiBDcmVhdGVzIGEgY29weSBvZiB0aGlzIG9iamVjdC5cblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogQHJldHVybiB7T2JqZWN0fSBUaGUgY2xvbmUuXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqICAgICB2YXIgY2xvbmUgPSBpbnN0YW5jZS5jbG9uZSgpO1xuXHQgICAgICAgICAgICAgKi9cblx0ICAgICAgICAgICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmluaXQucHJvdG90eXBlLmV4dGVuZCh0aGlzKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH07XG5cdCAgICB9KCkpO1xuXG5cdCAgICAvKipcblx0ICAgICAqIEFuIGFycmF5IG9mIDMyLWJpdCB3b3Jkcy5cblx0ICAgICAqXG5cdCAgICAgKiBAcHJvcGVydHkge0FycmF5fSB3b3JkcyBUaGUgYXJyYXkgb2YgMzItYml0IHdvcmRzLlxuXHQgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IHNpZ0J5dGVzIFRoZSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgYnl0ZXMgaW4gdGhpcyB3b3JkIGFycmF5LlxuXHQgICAgICovXG5cdCAgICB2YXIgV29yZEFycmF5ID0gQ19saWIuV29yZEFycmF5ID0gQmFzZS5leHRlbmQoe1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEluaXRpYWxpemVzIGEgbmV3bHkgY3JlYXRlZCB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtBcnJheX0gd29yZHMgKE9wdGlvbmFsKSBBbiBhcnJheSBvZiAzMi1iaXQgd29yZHMuXG5cdCAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IHNpZ0J5dGVzIChPcHRpb25hbCkgVGhlIG51bWJlciBvZiBzaWduaWZpY2FudCBieXRlcyBpbiB0aGUgd29yZHMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB3b3JkQXJyYXkgPSBDcnlwdG9KUy5saWIuV29yZEFycmF5LmNyZWF0ZSgpO1xuXHQgICAgICAgICAqICAgICB2YXIgd29yZEFycmF5ID0gQ3J5cHRvSlMubGliLldvcmRBcnJheS5jcmVhdGUoWzB4MDAwMTAyMDMsIDB4MDQwNTA2MDddKTtcblx0ICAgICAgICAgKiAgICAgdmFyIHdvcmRBcnJheSA9IENyeXB0b0pTLmxpYi5Xb3JkQXJyYXkuY3JlYXRlKFsweDAwMDEwMjAzLCAweDA0MDUwNjA3XSwgNik7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgaW5pdDogZnVuY3Rpb24gKHdvcmRzLCBzaWdCeXRlcykge1xuXHQgICAgICAgICAgICB3b3JkcyA9IHRoaXMud29yZHMgPSB3b3JkcyB8fCBbXTtcblxuXHQgICAgICAgICAgICBpZiAoc2lnQnl0ZXMgIT0gdW5kZWZpbmVkKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLnNpZ0J5dGVzID0gc2lnQnl0ZXM7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLnNpZ0J5dGVzID0gd29yZHMubGVuZ3RoICogNDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyB0aGlzIHdvcmQgYXJyYXkgdG8gYSBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge0VuY29kZXJ9IGVuY29kZXIgKE9wdGlvbmFsKSBUaGUgZW5jb2Rpbmcgc3RyYXRlZ3kgdG8gdXNlLiBEZWZhdWx0OiBDcnlwdG9KUy5lbmMuSGV4XG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBzdHJpbmdpZmllZCB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgc3RyaW5nID0gd29yZEFycmF5ICsgJyc7XG5cdCAgICAgICAgICogICAgIHZhciBzdHJpbmcgPSB3b3JkQXJyYXkudG9TdHJpbmcoKTtcblx0ICAgICAgICAgKiAgICAgdmFyIHN0cmluZyA9IHdvcmRBcnJheS50b1N0cmluZyhDcnlwdG9KUy5lbmMuVXRmOCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uIChlbmNvZGVyKSB7XG5cdCAgICAgICAgICAgIHJldHVybiAoZW5jb2RlciB8fCBIZXgpLnN0cmluZ2lmeSh0aGlzKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29uY2F0ZW5hdGVzIGEgd29yZCBhcnJheSB0byB0aGlzIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheX0gd29yZEFycmF5IFRoZSB3b3JkIGFycmF5IHRvIGFwcGVuZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhpcyB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB3b3JkQXJyYXkxLmNvbmNhdCh3b3JkQXJyYXkyKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjb25jYXQ6IGZ1bmN0aW9uICh3b3JkQXJyYXkpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciB0aGlzV29yZHMgPSB0aGlzLndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgdGhhdFdvcmRzID0gd29yZEFycmF5LndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgdGhpc1NpZ0J5dGVzID0gdGhpcy5zaWdCeXRlcztcblx0ICAgICAgICAgICAgdmFyIHRoYXRTaWdCeXRlcyA9IHdvcmRBcnJheS5zaWdCeXRlcztcblxuXHQgICAgICAgICAgICAvLyBDbGFtcCBleGNlc3MgYml0c1xuXHQgICAgICAgICAgICB0aGlzLmNsYW1wKCk7XG5cblx0ICAgICAgICAgICAgLy8gQ29uY2F0XG5cdCAgICAgICAgICAgIGlmICh0aGlzU2lnQnl0ZXMgJSA0KSB7XG5cdCAgICAgICAgICAgICAgICAvLyBDb3B5IG9uZSBieXRlIGF0IGEgdGltZVxuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGF0U2lnQnl0ZXM7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciB0aGF0Qnl0ZSA9ICh0aGF0V29yZHNbaSA+Pj4gMl0gPj4+ICgyNCAtIChpICUgNCkgKiA4KSkgJiAweGZmO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXNXb3Jkc1sodGhpc1NpZ0J5dGVzICsgaSkgPj4+IDJdIHw9IHRoYXRCeXRlIDw8ICgyNCAtICgodGhpc1NpZ0J5dGVzICsgaSkgJSA0KSAqIDgpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgLy8gQ29weSBvbmUgd29yZCBhdCBhIHRpbWVcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhhdFNpZ0J5dGVzOyBpICs9IDQpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzV29yZHNbKHRoaXNTaWdCeXRlcyArIGkpID4+PiAyXSA9IHRoYXRXb3Jkc1tpID4+PiAyXTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLnNpZ0J5dGVzICs9IHRoYXRTaWdCeXRlcztcblxuXHQgICAgICAgICAgICAvLyBDaGFpbmFibGVcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIFJlbW92ZXMgaW5zaWduaWZpY2FudCBiaXRzLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB3b3JkQXJyYXkuY2xhbXAoKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjbGFtcDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIHdvcmRzID0gdGhpcy53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIHNpZ0J5dGVzID0gdGhpcy5zaWdCeXRlcztcblxuXHQgICAgICAgICAgICAvLyBDbGFtcFxuXHQgICAgICAgICAgICB3b3Jkc1tzaWdCeXRlcyA+Pj4gMl0gJj0gMHhmZmZmZmZmZiA8PCAoMzIgLSAoc2lnQnl0ZXMgJSA0KSAqIDgpO1xuXHQgICAgICAgICAgICB3b3Jkcy5sZW5ndGggPSBNYXRoLmNlaWwoc2lnQnl0ZXMgLyA0KTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ3JlYXRlcyBhIGNvcHkgb2YgdGhpcyB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgY2xvbmUuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBjbG9uZSA9IHdvcmRBcnJheS5jbG9uZSgpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBjbG9uZSA9IEJhc2UuY2xvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAgICAgY2xvbmUud29yZHMgPSB0aGlzLndvcmRzLnNsaWNlKDApO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBjbG9uZTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ3JlYXRlcyBhIHdvcmQgYXJyYXkgZmlsbGVkIHdpdGggcmFuZG9tIGJ5dGVzLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IG5CeXRlcyBUaGUgbnVtYmVyIG9mIHJhbmRvbSBieXRlcyB0byBnZW5lcmF0ZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIHJhbmRvbSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgd29yZEFycmF5ID0gQ3J5cHRvSlMubGliLldvcmRBcnJheS5yYW5kb20oMTYpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHJhbmRvbTogZnVuY3Rpb24gKG5CeXRlcykge1xuXHQgICAgICAgICAgICB2YXIgd29yZHMgPSBbXTtcblxuXHQgICAgICAgICAgICB2YXIgciA9IChmdW5jdGlvbiAobV93KSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgbV93ID0gbV93O1xuXHQgICAgICAgICAgICAgICAgdmFyIG1feiA9IDB4M2FkZTY4YjE7XG5cdCAgICAgICAgICAgICAgICB2YXIgbWFzayA9IDB4ZmZmZmZmZmY7XG5cblx0ICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgbV96ID0gKDB4OTA2OSAqIChtX3ogJiAweEZGRkYpICsgKG1feiA+PiAweDEwKSkgJiBtYXNrO1xuXHQgICAgICAgICAgICAgICAgICAgIG1fdyA9ICgweDQ2NTAgKiAobV93ICYgMHhGRkZGKSArIChtX3cgPj4gMHgxMCkpICYgbWFzaztcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gKChtX3ogPDwgMHgxMCkgKyBtX3cpICYgbWFzaztcblx0ICAgICAgICAgICAgICAgICAgICByZXN1bHQgLz0gMHgxMDAwMDAwMDA7XG5cdCAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IDAuNTtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICogKE1hdGgucmFuZG9tKCkgPiAuNSA/IDEgOiAtMSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0pO1xuXG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCByY2FjaGU7IGkgPCBuQnl0ZXM7IGkgKz0gNCkge1xuXHQgICAgICAgICAgICAgICAgdmFyIF9yID0gcigocmNhY2hlIHx8IE1hdGgucmFuZG9tKCkpICogMHgxMDAwMDAwMDApO1xuXG5cdCAgICAgICAgICAgICAgICByY2FjaGUgPSBfcigpICogMHgzYWRlNjdiNztcblx0ICAgICAgICAgICAgICAgIHdvcmRzLnB1c2goKF9yKCkgKiAweDEwMDAwMDAwMCkgfCAwKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgV29yZEFycmF5LmluaXQod29yZHMsIG5CeXRlcyk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogRW5jb2RlciBuYW1lc3BhY2UuXG5cdCAgICAgKi9cblx0ICAgIHZhciBDX2VuYyA9IEMuZW5jID0ge307XG5cblx0ICAgIC8qKlxuXHQgICAgICogSGV4IGVuY29kaW5nIHN0cmF0ZWd5LlxuXHQgICAgICovXG5cdCAgICB2YXIgSGV4ID0gQ19lbmMuSGV4ID0ge1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbnZlcnRzIGEgd29yZCBhcnJheSB0byBhIGhleCBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheX0gd29yZEFycmF5IFRoZSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgaGV4IHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGhleFN0cmluZyA9IENyeXB0b0pTLmVuYy5IZXguc3RyaW5naWZ5KHdvcmRBcnJheSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgc3RyaW5naWZ5OiBmdW5jdGlvbiAod29yZEFycmF5KSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgd29yZHMgPSB3b3JkQXJyYXkud29yZHM7XG5cdCAgICAgICAgICAgIHZhciBzaWdCeXRlcyA9IHdvcmRBcnJheS5zaWdCeXRlcztcblxuXHQgICAgICAgICAgICAvLyBDb252ZXJ0XG5cdCAgICAgICAgICAgIHZhciBoZXhDaGFycyA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpZ0J5dGVzOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHZhciBiaXRlID0gKHdvcmRzW2kgPj4+IDJdID4+PiAoMjQgLSAoaSAlIDQpICogOCkpICYgMHhmZjtcblx0ICAgICAgICAgICAgICAgIGhleENoYXJzLnB1c2goKGJpdGUgPj4+IDQpLnRvU3RyaW5nKDE2KSk7XG5cdCAgICAgICAgICAgICAgICBoZXhDaGFycy5wdXNoKChiaXRlICYgMHgwZikudG9TdHJpbmcoMTYpKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIHJldHVybiBoZXhDaGFycy5qb2luKCcnKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSBoZXggc3RyaW5nIHRvIGEgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBoZXhTdHIgVGhlIGhleCBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgd29yZEFycmF5ID0gQ3J5cHRvSlMuZW5jLkhleC5wYXJzZShoZXhTdHJpbmcpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHBhcnNlOiBmdW5jdGlvbiAoaGV4U3RyKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgIHZhciBoZXhTdHJMZW5ndGggPSBoZXhTdHIubGVuZ3RoO1xuXG5cdCAgICAgICAgICAgIC8vIENvbnZlcnRcblx0ICAgICAgICAgICAgdmFyIHdvcmRzID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGV4U3RyTGVuZ3RoOyBpICs9IDIpIHtcblx0ICAgICAgICAgICAgICAgIHdvcmRzW2kgPj4+IDNdIHw9IHBhcnNlSW50KGhleFN0ci5zdWJzdHIoaSwgMiksIDE2KSA8PCAoMjQgLSAoaSAlIDgpICogNCk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFdvcmRBcnJheS5pbml0KHdvcmRzLCBoZXhTdHJMZW5ndGggLyAyKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXG5cdCAgICAvKipcblx0ICAgICAqIExhdGluMSBlbmNvZGluZyBzdHJhdGVneS5cblx0ICAgICAqL1xuXHQgICAgdmFyIExhdGluMSA9IENfZW5jLkxhdGluMSA9IHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyBhIHdvcmQgYXJyYXkgdG8gYSBMYXRpbjEgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl9IHdvcmRBcnJheSBUaGUgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIExhdGluMSBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBsYXRpbjFTdHJpbmcgPSBDcnlwdG9KUy5lbmMuTGF0aW4xLnN0cmluZ2lmeSh3b3JkQXJyYXkpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHN0cmluZ2lmeTogZnVuY3Rpb24gKHdvcmRBcnJheSkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIHdvcmRzID0gd29yZEFycmF5LndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgc2lnQnl0ZXMgPSB3b3JkQXJyYXkuc2lnQnl0ZXM7XG5cblx0ICAgICAgICAgICAgLy8gQ29udmVydFxuXHQgICAgICAgICAgICB2YXIgbGF0aW4xQ2hhcnMgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaWdCeXRlczsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgYml0ZSA9ICh3b3Jkc1tpID4+PiAyXSA+Pj4gKDI0IC0gKGkgJSA0KSAqIDgpKSAmIDB4ZmY7XG5cdCAgICAgICAgICAgICAgICBsYXRpbjFDaGFycy5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoYml0ZSkpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIGxhdGluMUNoYXJzLmpvaW4oJycpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyBhIExhdGluMSBzdHJpbmcgdG8gYSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGxhdGluMVN0ciBUaGUgTGF0aW4xIHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB3b3JkQXJyYXkgPSBDcnlwdG9KUy5lbmMuTGF0aW4xLnBhcnNlKGxhdGluMVN0cmluZyk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgcGFyc2U6IGZ1bmN0aW9uIChsYXRpbjFTdHIpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgdmFyIGxhdGluMVN0ckxlbmd0aCA9IGxhdGluMVN0ci5sZW5ndGg7XG5cblx0ICAgICAgICAgICAgLy8gQ29udmVydFxuXHQgICAgICAgICAgICB2YXIgd29yZHMgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXRpbjFTdHJMZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgd29yZHNbaSA+Pj4gMl0gfD0gKGxhdGluMVN0ci5jaGFyQ29kZUF0KGkpICYgMHhmZikgPDwgKDI0IC0gKGkgJSA0KSAqIDgpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBXb3JkQXJyYXkuaW5pdCh3b3JkcywgbGF0aW4xU3RyTGVuZ3RoKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXG5cdCAgICAvKipcblx0ICAgICAqIFVURi04IGVuY29kaW5nIHN0cmF0ZWd5LlxuXHQgICAgICovXG5cdCAgICB2YXIgVXRmOCA9IENfZW5jLlV0ZjggPSB7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSB3b3JkIGFycmF5IHRvIGEgVVRGLTggc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl9IHdvcmRBcnJheSBUaGUgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIFVURi04IHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHV0ZjhTdHJpbmcgPSBDcnlwdG9KUy5lbmMuVXRmOC5zdHJpbmdpZnkod29yZEFycmF5KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBzdHJpbmdpZnk6IGZ1bmN0aW9uICh3b3JkQXJyYXkpIHtcblx0ICAgICAgICAgICAgdHJ5IHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKExhdGluMS5zdHJpbmdpZnkod29yZEFycmF5KSkpO1xuXHQgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG5cdCAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01hbGZvcm1lZCBVVEYtOCBkYXRhJyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSBVVEYtOCBzdHJpbmcgdG8gYSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHV0ZjhTdHIgVGhlIFVURi04IHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB3b3JkQXJyYXkgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZSh1dGY4U3RyaW5nKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBwYXJzZTogZnVuY3Rpb24gKHV0ZjhTdHIpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIExhdGluMS5wYXJzZSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQodXRmOFN0cikpKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXG5cdCAgICAvKipcblx0ICAgICAqIEFic3RyYWN0IGJ1ZmZlcmVkIGJsb2NrIGFsZ29yaXRobSB0ZW1wbGF0ZS5cblx0ICAgICAqXG5cdCAgICAgKiBUaGUgcHJvcGVydHkgYmxvY2tTaXplIG11c3QgYmUgaW1wbGVtZW50ZWQgaW4gYSBjb25jcmV0ZSBzdWJ0eXBlLlxuXHQgICAgICpcblx0ICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBfbWluQnVmZmVyU2l6ZSBUaGUgbnVtYmVyIG9mIGJsb2NrcyB0aGF0IHNob3VsZCBiZSBrZXB0IHVucHJvY2Vzc2VkIGluIHRoZSBidWZmZXIuIERlZmF1bHQ6IDBcblx0ICAgICAqL1xuXHQgICAgdmFyIEJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0gPSBDX2xpYi5CdWZmZXJlZEJsb2NrQWxnb3JpdGhtID0gQmFzZS5leHRlbmQoe1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIFJlc2V0cyB0aGlzIGJsb2NrIGFsZ29yaXRobSdzIGRhdGEgYnVmZmVyIHRvIGl0cyBpbml0aWFsIHN0YXRlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICBidWZmZXJlZEJsb2NrQWxnb3JpdGhtLnJlc2V0KCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgcmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gSW5pdGlhbCB2YWx1ZXNcblx0ICAgICAgICAgICAgdGhpcy5fZGF0YSA9IG5ldyBXb3JkQXJyYXkuaW5pdCgpO1xuXHQgICAgICAgICAgICB0aGlzLl9uRGF0YUJ5dGVzID0gMDtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQWRkcyBuZXcgZGF0YSB0byB0aGlzIGJsb2NrIGFsZ29yaXRobSdzIGJ1ZmZlci5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gZGF0YSBUaGUgZGF0YSB0byBhcHBlbmQuIFN0cmluZ3MgYXJlIGNvbnZlcnRlZCB0byBhIFdvcmRBcnJheSB1c2luZyBVVEYtOC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgYnVmZmVyZWRCbG9ja0FsZ29yaXRobS5fYXBwZW5kKCdkYXRhJyk7XG5cdCAgICAgICAgICogICAgIGJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0uX2FwcGVuZCh3b3JkQXJyYXkpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIF9hcHBlbmQ6IGZ1bmN0aW9uIChkYXRhKSB7XG5cdCAgICAgICAgICAgIC8vIENvbnZlcnQgc3RyaW5nIHRvIFdvcmRBcnJheSwgZWxzZSBhc3N1bWUgV29yZEFycmF5IGFscmVhZHlcblx0ICAgICAgICAgICAgaWYgKHR5cGVvZiBkYXRhID09ICdzdHJpbmcnKSB7XG5cdCAgICAgICAgICAgICAgICBkYXRhID0gVXRmOC5wYXJzZShkYXRhKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIEFwcGVuZFxuXHQgICAgICAgICAgICB0aGlzLl9kYXRhLmNvbmNhdChkYXRhKTtcblx0ICAgICAgICAgICAgdGhpcy5fbkRhdGFCeXRlcyArPSBkYXRhLnNpZ0J5dGVzO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBQcm9jZXNzZXMgYXZhaWxhYmxlIGRhdGEgYmxvY2tzLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogVGhpcyBtZXRob2QgaW52b2tlcyBfZG9Qcm9jZXNzQmxvY2sob2Zmc2V0KSwgd2hpY2ggbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBhIGNvbmNyZXRlIHN1YnR5cGUuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGRvRmx1c2ggV2hldGhlciBhbGwgYmxvY2tzIGFuZCBwYXJ0aWFsIGJsb2NrcyBzaG91bGQgYmUgcHJvY2Vzc2VkLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgcHJvY2Vzc2VkIGRhdGEuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBwcm9jZXNzZWREYXRhID0gYnVmZmVyZWRCbG9ja0FsZ29yaXRobS5fcHJvY2VzcygpO1xuXHQgICAgICAgICAqICAgICB2YXIgcHJvY2Vzc2VkRGF0YSA9IGJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0uX3Byb2Nlc3MoISEnZmx1c2gnKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBfcHJvY2VzczogZnVuY3Rpb24gKGRvRmx1c2gpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5fZGF0YTtcblx0ICAgICAgICAgICAgdmFyIGRhdGFXb3JkcyA9IGRhdGEud29yZHM7XG5cdCAgICAgICAgICAgIHZhciBkYXRhU2lnQnl0ZXMgPSBkYXRhLnNpZ0J5dGVzO1xuXHQgICAgICAgICAgICB2YXIgYmxvY2tTaXplID0gdGhpcy5ibG9ja1NpemU7XG5cdCAgICAgICAgICAgIHZhciBibG9ja1NpemVCeXRlcyA9IGJsb2NrU2l6ZSAqIDQ7XG5cblx0ICAgICAgICAgICAgLy8gQ291bnQgYmxvY2tzIHJlYWR5XG5cdCAgICAgICAgICAgIHZhciBuQmxvY2tzUmVhZHkgPSBkYXRhU2lnQnl0ZXMgLyBibG9ja1NpemVCeXRlcztcblx0ICAgICAgICAgICAgaWYgKGRvRmx1c2gpIHtcblx0ICAgICAgICAgICAgICAgIC8vIFJvdW5kIHVwIHRvIGluY2x1ZGUgcGFydGlhbCBibG9ja3Ncblx0ICAgICAgICAgICAgICAgIG5CbG9ja3NSZWFkeSA9IE1hdGguY2VpbChuQmxvY2tzUmVhZHkpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgLy8gUm91bmQgZG93biB0byBpbmNsdWRlIG9ubHkgZnVsbCBibG9ja3MsXG5cdCAgICAgICAgICAgICAgICAvLyBsZXNzIHRoZSBudW1iZXIgb2YgYmxvY2tzIHRoYXQgbXVzdCByZW1haW4gaW4gdGhlIGJ1ZmZlclxuXHQgICAgICAgICAgICAgICAgbkJsb2Nrc1JlYWR5ID0gTWF0aC5tYXgoKG5CbG9ja3NSZWFkeSB8IDApIC0gdGhpcy5fbWluQnVmZmVyU2l6ZSwgMCk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBDb3VudCB3b3JkcyByZWFkeVxuXHQgICAgICAgICAgICB2YXIgbldvcmRzUmVhZHkgPSBuQmxvY2tzUmVhZHkgKiBibG9ja1NpemU7XG5cblx0ICAgICAgICAgICAgLy8gQ291bnQgYnl0ZXMgcmVhZHlcblx0ICAgICAgICAgICAgdmFyIG5CeXRlc1JlYWR5ID0gTWF0aC5taW4obldvcmRzUmVhZHkgKiA0LCBkYXRhU2lnQnl0ZXMpO1xuXG5cdCAgICAgICAgICAgIC8vIFByb2Nlc3MgYmxvY2tzXG5cdCAgICAgICAgICAgIGlmIChuV29yZHNSZWFkeSkge1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgbldvcmRzUmVhZHk7IG9mZnNldCArPSBibG9ja1NpemUpIHtcblx0ICAgICAgICAgICAgICAgICAgICAvLyBQZXJmb3JtIGNvbmNyZXRlLWFsZ29yaXRobSBsb2dpY1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RvUHJvY2Vzc0Jsb2NrKGRhdGFXb3Jkcywgb2Zmc2V0KTtcblx0ICAgICAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHByb2Nlc3NlZCB3b3Jkc1xuXHQgICAgICAgICAgICAgICAgdmFyIHByb2Nlc3NlZFdvcmRzID0gZGF0YVdvcmRzLnNwbGljZSgwLCBuV29yZHNSZWFkeSk7XG5cdCAgICAgICAgICAgICAgICBkYXRhLnNpZ0J5dGVzIC09IG5CeXRlc1JlYWR5O1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gUmV0dXJuIHByb2Nlc3NlZCB3b3Jkc1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFdvcmRBcnJheS5pbml0KHByb2Nlc3NlZFdvcmRzLCBuQnl0ZXNSZWFkeSk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENyZWF0ZXMgYSBjb3B5IG9mIHRoaXMgb2JqZWN0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7T2JqZWN0fSBUaGUgY2xvbmUuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBjbG9uZSA9IGJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0uY2xvbmUoKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgY2xvbmUgPSBCYXNlLmNsb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgICAgIGNsb25lLl9kYXRhID0gdGhpcy5fZGF0YS5jbG9uZSgpO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBjbG9uZTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX21pbkJ1ZmZlclNpemU6IDBcblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIEFic3RyYWN0IGhhc2hlciB0ZW1wbGF0ZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcHJvcGVydHkge251bWJlcn0gYmxvY2tTaXplIFRoZSBudW1iZXIgb2YgMzItYml0IHdvcmRzIHRoaXMgaGFzaGVyIG9wZXJhdGVzIG9uLiBEZWZhdWx0OiAxNiAoNTEyIGJpdHMpXG5cdCAgICAgKi9cblx0ICAgIHZhciBIYXNoZXIgPSBDX2xpYi5IYXNoZXIgPSBCdWZmZXJlZEJsb2NrQWxnb3JpdGhtLmV4dGVuZCh7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29uZmlndXJhdGlvbiBvcHRpb25zLlxuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGNmZzogQmFzZS5leHRlbmQoKSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEluaXRpYWxpemVzIGEgbmV3bHkgY3JlYXRlZCBoYXNoZXIuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY2ZnIChPcHRpb25hbCkgVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byB1c2UgZm9yIHRoaXMgaGFzaCBjb21wdXRhdGlvbi5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGhhc2hlciA9IENyeXB0b0pTLmFsZ28uU0hBMjU2LmNyZWF0ZSgpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGluaXQ6IGZ1bmN0aW9uIChjZmcpIHtcblx0ICAgICAgICAgICAgLy8gQXBwbHkgY29uZmlnIGRlZmF1bHRzXG5cdCAgICAgICAgICAgIHRoaXMuY2ZnID0gdGhpcy5jZmcuZXh0ZW5kKGNmZyk7XG5cblx0ICAgICAgICAgICAgLy8gU2V0IGluaXRpYWwgdmFsdWVzXG5cdCAgICAgICAgICAgIHRoaXMucmVzZXQoKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogUmVzZXRzIHRoaXMgaGFzaGVyIHRvIGl0cyBpbml0aWFsIHN0YXRlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICBoYXNoZXIucmVzZXQoKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICByZXNldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLyBSZXNldCBkYXRhIGJ1ZmZlclxuXHQgICAgICAgICAgICBCdWZmZXJlZEJsb2NrQWxnb3JpdGhtLnJlc2V0LmNhbGwodGhpcyk7XG5cblx0ICAgICAgICAgICAgLy8gUGVyZm9ybSBjb25jcmV0ZS1oYXNoZXIgbG9naWNcblx0ICAgICAgICAgICAgdGhpcy5fZG9SZXNldCgpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBVcGRhdGVzIHRoaXMgaGFzaGVyIHdpdGggYSBtZXNzYWdlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlVXBkYXRlIFRoZSBtZXNzYWdlIHRvIGFwcGVuZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge0hhc2hlcn0gVGhpcyBoYXNoZXIuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIGhhc2hlci51cGRhdGUoJ21lc3NhZ2UnKTtcblx0ICAgICAgICAgKiAgICAgaGFzaGVyLnVwZGF0ZSh3b3JkQXJyYXkpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHVwZGF0ZTogZnVuY3Rpb24gKG1lc3NhZ2VVcGRhdGUpIHtcblx0ICAgICAgICAgICAgLy8gQXBwZW5kXG5cdCAgICAgICAgICAgIHRoaXMuX2FwcGVuZChtZXNzYWdlVXBkYXRlKTtcblxuXHQgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIGhhc2hcblx0ICAgICAgICAgICAgdGhpcy5fcHJvY2VzcygpO1xuXG5cdCAgICAgICAgICAgIC8vIENoYWluYWJsZVxuXHQgICAgICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogRmluYWxpemVzIHRoZSBoYXNoIGNvbXB1dGF0aW9uLlxuXHQgICAgICAgICAqIE5vdGUgdGhhdCB0aGUgZmluYWxpemUgb3BlcmF0aW9uIGlzIGVmZmVjdGl2ZWx5IGEgZGVzdHJ1Y3RpdmUsIHJlYWQtb25jZSBvcGVyYXRpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2VVcGRhdGUgKE9wdGlvbmFsKSBBIGZpbmFsIG1lc3NhZ2UgdXBkYXRlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgaGFzaC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGhhc2ggPSBoYXNoZXIuZmluYWxpemUoKTtcblx0ICAgICAgICAgKiAgICAgdmFyIGhhc2ggPSBoYXNoZXIuZmluYWxpemUoJ21lc3NhZ2UnKTtcblx0ICAgICAgICAgKiAgICAgdmFyIGhhc2ggPSBoYXNoZXIuZmluYWxpemUod29yZEFycmF5KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBmaW5hbGl6ZTogZnVuY3Rpb24gKG1lc3NhZ2VVcGRhdGUpIHtcblx0ICAgICAgICAgICAgLy8gRmluYWwgbWVzc2FnZSB1cGRhdGVcblx0ICAgICAgICAgICAgaWYgKG1lc3NhZ2VVcGRhdGUpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2FwcGVuZChtZXNzYWdlVXBkYXRlKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIFBlcmZvcm0gY29uY3JldGUtaGFzaGVyIGxvZ2ljXG5cdCAgICAgICAgICAgIHZhciBoYXNoID0gdGhpcy5fZG9GaW5hbGl6ZSgpO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBoYXNoO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBibG9ja1NpemU6IDUxMi8zMixcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENyZWF0ZXMgYSBzaG9ydGN1dCBmdW5jdGlvbiB0byBhIGhhc2hlcidzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge0hhc2hlcn0gaGFzaGVyIFRoZSBoYXNoZXIgdG8gY3JlYXRlIGEgaGVscGVyIGZvci5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge0Z1bmN0aW9ufSBUaGUgc2hvcnRjdXQgZnVuY3Rpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBTSEEyNTYgPSBDcnlwdG9KUy5saWIuSGFzaGVyLl9jcmVhdGVIZWxwZXIoQ3J5cHRvSlMuYWxnby5TSEEyNTYpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIF9jcmVhdGVIZWxwZXI6IGZ1bmN0aW9uIChoYXNoZXIpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChtZXNzYWdlLCBjZmcpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBuZXcgaGFzaGVyLmluaXQoY2ZnKS5maW5hbGl6ZShtZXNzYWdlKTtcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ3JlYXRlcyBhIHNob3J0Y3V0IGZ1bmN0aW9uIHRvIHRoZSBITUFDJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7SGFzaGVyfSBoYXNoZXIgVGhlIGhhc2hlciB0byB1c2UgaW4gdGhpcyBITUFDIGhlbHBlci5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge0Z1bmN0aW9ufSBUaGUgc2hvcnRjdXQgZnVuY3Rpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBIbWFjU0hBMjU2ID0gQ3J5cHRvSlMubGliLkhhc2hlci5fY3JlYXRlSG1hY0hlbHBlcihDcnlwdG9KUy5hbGdvLlNIQTI1Nik7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgX2NyZWF0ZUhtYWNIZWxwZXI6IGZ1bmN0aW9uIChoYXNoZXIpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChtZXNzYWdlLCBrZXkpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ19hbGdvLkhNQUMuaW5pdChoYXNoZXIsIGtleSkuZmluYWxpemUobWVzc2FnZSk7XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogQWxnb3JpdGhtIG5hbWVzcGFjZS5cblx0ICAgICAqL1xuXHQgICAgdmFyIENfYWxnbyA9IEMuYWxnbyA9IHt9O1xuXG5cdCAgICByZXR1cm4gQztcblx0fShNYXRoKSk7XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlM7XG5cbn0pKTsiLCI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXCIuL2NvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdChmdW5jdGlvbiAoKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBXb3JkQXJyYXkgPSBDX2xpYi5Xb3JkQXJyYXk7XG5cdCAgICB2YXIgQ19lbmMgPSBDLmVuYztcblxuXHQgICAgLyoqXG5cdCAgICAgKiBCYXNlNjQgZW5jb2Rpbmcgc3RyYXRlZ3kuXG5cdCAgICAgKi9cblx0ICAgIHZhciBCYXNlNjQgPSBDX2VuYy5CYXNlNjQgPSB7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSB3b3JkIGFycmF5IHRvIGEgQmFzZTY0IHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fSB3b3JkQXJyYXkgVGhlIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBCYXNlNjQgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgYmFzZTY0U3RyaW5nID0gQ3J5cHRvSlMuZW5jLkJhc2U2NC5zdHJpbmdpZnkod29yZEFycmF5KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBzdHJpbmdpZnk6IGZ1bmN0aW9uICh3b3JkQXJyYXkpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciB3b3JkcyA9IHdvcmRBcnJheS53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIHNpZ0J5dGVzID0gd29yZEFycmF5LnNpZ0J5dGVzO1xuXHQgICAgICAgICAgICB2YXIgbWFwID0gdGhpcy5fbWFwO1xuXG5cdCAgICAgICAgICAgIC8vIENsYW1wIGV4Y2VzcyBiaXRzXG5cdCAgICAgICAgICAgIHdvcmRBcnJheS5jbGFtcCgpO1xuXG5cdCAgICAgICAgICAgIC8vIENvbnZlcnRcblx0ICAgICAgICAgICAgdmFyIGJhc2U2NENoYXJzID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2lnQnl0ZXM7IGkgKz0gMykge1xuXHQgICAgICAgICAgICAgICAgdmFyIGJ5dGUxID0gKHdvcmRzW2kgPj4+IDJdICAgICAgID4+PiAoMjQgLSAoaSAlIDQpICogOCkpICAgICAgICYgMHhmZjtcblx0ICAgICAgICAgICAgICAgIHZhciBieXRlMiA9ICh3b3Jkc1soaSArIDEpID4+PiAyXSA+Pj4gKDI0IC0gKChpICsgMSkgJSA0KSAqIDgpKSAmIDB4ZmY7XG5cdCAgICAgICAgICAgICAgICB2YXIgYnl0ZTMgPSAod29yZHNbKGkgKyAyKSA+Pj4gMl0gPj4+ICgyNCAtICgoaSArIDIpICUgNCkgKiA4KSkgJiAweGZmO1xuXG5cdCAgICAgICAgICAgICAgICB2YXIgdHJpcGxldCA9IChieXRlMSA8PCAxNikgfCAoYnl0ZTIgPDwgOCkgfCBieXRlMztcblxuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IChqIDwgNCkgJiYgKGkgKyBqICogMC43NSA8IHNpZ0J5dGVzKTsgaisrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgYmFzZTY0Q2hhcnMucHVzaChtYXAuY2hhckF0KCh0cmlwbGV0ID4+PiAoNiAqICgzIC0gaikpKSAmIDB4M2YpKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIEFkZCBwYWRkaW5nXG5cdCAgICAgICAgICAgIHZhciBwYWRkaW5nQ2hhciA9IG1hcC5jaGFyQXQoNjQpO1xuXHQgICAgICAgICAgICBpZiAocGFkZGluZ0NoYXIpIHtcblx0ICAgICAgICAgICAgICAgIHdoaWxlIChiYXNlNjRDaGFycy5sZW5ndGggJSA0KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgYmFzZTY0Q2hhcnMucHVzaChwYWRkaW5nQ2hhcik7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gYmFzZTY0Q2hhcnMuam9pbignJyk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbnZlcnRzIGEgQmFzZTY0IHN0cmluZyB0byBhIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gYmFzZTY0U3RyIFRoZSBCYXNlNjQgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHdvcmRBcnJheSA9IENyeXB0b0pTLmVuYy5CYXNlNjQucGFyc2UoYmFzZTY0U3RyaW5nKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBwYXJzZTogZnVuY3Rpb24gKGJhc2U2NFN0cikge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGJhc2U2NFN0ckxlbmd0aCA9IGJhc2U2NFN0ci5sZW5ndGg7XG5cdCAgICAgICAgICAgIHZhciBtYXAgPSB0aGlzLl9tYXA7XG5cdCAgICAgICAgICAgIHZhciByZXZlcnNlTWFwID0gdGhpcy5fcmV2ZXJzZU1hcDtcblxuXHQgICAgICAgICAgICBpZiAoIXJldmVyc2VNYXApIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXZlcnNlTWFwID0gdGhpcy5fcmV2ZXJzZU1hcCA9IFtdO1xuXHQgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbWFwLmxlbmd0aDsgaisrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHJldmVyc2VNYXBbbWFwLmNoYXJDb2RlQXQoaildID0gajtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBJZ25vcmUgcGFkZGluZ1xuXHQgICAgICAgICAgICB2YXIgcGFkZGluZ0NoYXIgPSBtYXAuY2hhckF0KDY0KTtcblx0ICAgICAgICAgICAgaWYgKHBhZGRpbmdDaGFyKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgcGFkZGluZ0luZGV4ID0gYmFzZTY0U3RyLmluZGV4T2YocGFkZGluZ0NoYXIpO1xuXHQgICAgICAgICAgICAgICAgaWYgKHBhZGRpbmdJbmRleCAhPT0gLTEpIHtcblx0ICAgICAgICAgICAgICAgICAgICBiYXNlNjRTdHJMZW5ndGggPSBwYWRkaW5nSW5kZXg7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBDb252ZXJ0XG5cdCAgICAgICAgICAgIHJldHVybiBwYXJzZUxvb3AoYmFzZTY0U3RyLCBiYXNlNjRTdHJMZW5ndGgsIHJldmVyc2VNYXApO1xuXG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9tYXA6ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSdcblx0ICAgIH07XG5cblx0ICAgIGZ1bmN0aW9uIHBhcnNlTG9vcChiYXNlNjRTdHIsIGJhc2U2NFN0ckxlbmd0aCwgcmV2ZXJzZU1hcCkge1xuXHQgICAgICB2YXIgd29yZHMgPSBbXTtcblx0ICAgICAgdmFyIG5CeXRlcyA9IDA7XG5cdCAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmFzZTY0U3RyTGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgIGlmIChpICUgNCkge1xuXHQgICAgICAgICAgICAgIHZhciBiaXRzMSA9IHJldmVyc2VNYXBbYmFzZTY0U3RyLmNoYXJDb2RlQXQoaSAtIDEpXSA8PCAoKGkgJSA0KSAqIDIpO1xuXHQgICAgICAgICAgICAgIHZhciBiaXRzMiA9IHJldmVyc2VNYXBbYmFzZTY0U3RyLmNoYXJDb2RlQXQoaSldID4+PiAoNiAtIChpICUgNCkgKiAyKTtcblx0ICAgICAgICAgICAgICB3b3Jkc1tuQnl0ZXMgPj4+IDJdIHw9IChiaXRzMSB8IGJpdHMyKSA8PCAoMjQgLSAobkJ5dGVzICUgNCkgKiA4KTtcblx0ICAgICAgICAgICAgICBuQnl0ZXMrKztcblx0ICAgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgICByZXR1cm4gV29yZEFycmF5LmNyZWF0ZSh3b3JkcywgbkJ5dGVzKTtcblx0ICAgIH1cblx0fSgpKTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5lbmMuQmFzZTY0O1xuXG59KSk7IiwiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQoZnVuY3Rpb24gKCkge1xuXHQgICAgLy8gU2hvcnRjdXRzXG5cdCAgICB2YXIgQyA9IENyeXB0b0pTO1xuXHQgICAgdmFyIENfbGliID0gQy5saWI7XG5cdCAgICB2YXIgV29yZEFycmF5ID0gQ19saWIuV29yZEFycmF5O1xuXHQgICAgdmFyIENfZW5jID0gQy5lbmM7XG5cblx0ICAgIC8qKlxuXHQgICAgICogVVRGLTE2IEJFIGVuY29kaW5nIHN0cmF0ZWd5LlxuXHQgICAgICovXG5cdCAgICB2YXIgVXRmMTZCRSA9IENfZW5jLlV0ZjE2ID0gQ19lbmMuVXRmMTZCRSA9IHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyBhIHdvcmQgYXJyYXkgdG8gYSBVVEYtMTYgQkUgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl9IHdvcmRBcnJheSBUaGUgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIFVURi0xNiBCRSBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB1dGYxNlN0cmluZyA9IENyeXB0b0pTLmVuYy5VdGYxNi5zdHJpbmdpZnkod29yZEFycmF5KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBzdHJpbmdpZnk6IGZ1bmN0aW9uICh3b3JkQXJyYXkpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciB3b3JkcyA9IHdvcmRBcnJheS53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIHNpZ0J5dGVzID0gd29yZEFycmF5LnNpZ0J5dGVzO1xuXG5cdCAgICAgICAgICAgIC8vIENvbnZlcnRcblx0ICAgICAgICAgICAgdmFyIHV0ZjE2Q2hhcnMgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaWdCeXRlczsgaSArPSAyKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgY29kZVBvaW50ID0gKHdvcmRzW2kgPj4+IDJdID4+PiAoMTYgLSAoaSAlIDQpICogOCkpICYgMHhmZmZmO1xuXHQgICAgICAgICAgICAgICAgdXRmMTZDaGFycy5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZVBvaW50KSk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gdXRmMTZDaGFycy5qb2luKCcnKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSBVVEYtMTYgQkUgc3RyaW5nIHRvIGEgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1dGYxNlN0ciBUaGUgVVRGLTE2IEJFIHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB3b3JkQXJyYXkgPSBDcnlwdG9KUy5lbmMuVXRmMTYucGFyc2UodXRmMTZTdHJpbmcpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHBhcnNlOiBmdW5jdGlvbiAodXRmMTZTdHIpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgdmFyIHV0ZjE2U3RyTGVuZ3RoID0gdXRmMTZTdHIubGVuZ3RoO1xuXG5cdCAgICAgICAgICAgIC8vIENvbnZlcnRcblx0ICAgICAgICAgICAgdmFyIHdvcmRzID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdXRmMTZTdHJMZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgd29yZHNbaSA+Pj4gMV0gfD0gdXRmMTZTdHIuY2hhckNvZGVBdChpKSA8PCAoMTYgLSAoaSAlIDIpICogMTYpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIFdvcmRBcnJheS5jcmVhdGUod29yZHMsIHV0ZjE2U3RyTGVuZ3RoICogMik7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBVVEYtMTYgTEUgZW5jb2Rpbmcgc3RyYXRlZ3kuXG5cdCAgICAgKi9cblx0ICAgIENfZW5jLlV0ZjE2TEUgPSB7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSB3b3JkIGFycmF5IHRvIGEgVVRGLTE2IExFIHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fSB3b3JkQXJyYXkgVGhlIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBVVEYtMTYgTEUgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgdXRmMTZTdHIgPSBDcnlwdG9KUy5lbmMuVXRmMTZMRS5zdHJpbmdpZnkod29yZEFycmF5KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBzdHJpbmdpZnk6IGZ1bmN0aW9uICh3b3JkQXJyYXkpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciB3b3JkcyA9IHdvcmRBcnJheS53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIHNpZ0J5dGVzID0gd29yZEFycmF5LnNpZ0J5dGVzO1xuXG5cdCAgICAgICAgICAgIC8vIENvbnZlcnRcblx0ICAgICAgICAgICAgdmFyIHV0ZjE2Q2hhcnMgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaWdCeXRlczsgaSArPSAyKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgY29kZVBvaW50ID0gc3dhcEVuZGlhbigod29yZHNbaSA+Pj4gMl0gPj4+ICgxNiAtIChpICUgNCkgKiA4KSkgJiAweGZmZmYpO1xuXHQgICAgICAgICAgICAgICAgdXRmMTZDaGFycy5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZVBvaW50KSk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gdXRmMTZDaGFycy5qb2luKCcnKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSBVVEYtMTYgTEUgc3RyaW5nIHRvIGEgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1dGYxNlN0ciBUaGUgVVRGLTE2IExFIHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB3b3JkQXJyYXkgPSBDcnlwdG9KUy5lbmMuVXRmMTZMRS5wYXJzZSh1dGYxNlN0cik7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgcGFyc2U6IGZ1bmN0aW9uICh1dGYxNlN0cikge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgdXRmMTZTdHJMZW5ndGggPSB1dGYxNlN0ci5sZW5ndGg7XG5cblx0ICAgICAgICAgICAgLy8gQ29udmVydFxuXHQgICAgICAgICAgICB2YXIgd29yZHMgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1dGYxNlN0ckxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB3b3Jkc1tpID4+PiAxXSB8PSBzd2FwRW5kaWFuKHV0ZjE2U3RyLmNoYXJDb2RlQXQoaSkgPDwgKDE2IC0gKGkgJSAyKSAqIDE2KSk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gV29yZEFycmF5LmNyZWF0ZSh3b3JkcywgdXRmMTZTdHJMZW5ndGggKiAyKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXG5cdCAgICBmdW5jdGlvbiBzd2FwRW5kaWFuKHdvcmQpIHtcblx0ICAgICAgICByZXR1cm4gKCh3b3JkIDw8IDgpICYgMHhmZjAwZmYwMCkgfCAoKHdvcmQgPj4+IDgpICYgMHgwMGZmMDBmZik7XG5cdCAgICB9XG5cdH0oKSk7XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMuZW5jLlV0ZjE2O1xuXG59KSk7IiwiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSwgdW5kZWYpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIiksIHJlcXVpcmUoXCIuL3NoYTFcIiksIHJlcXVpcmUoXCIuL2htYWNcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiLCBcIi4vc2hhMVwiLCBcIi4vaG1hY1wiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0KGZ1bmN0aW9uICgpIHtcblx0ICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgdmFyIEMgPSBDcnlwdG9KUztcblx0ICAgIHZhciBDX2xpYiA9IEMubGliO1xuXHQgICAgdmFyIEJhc2UgPSBDX2xpYi5CYXNlO1xuXHQgICAgdmFyIFdvcmRBcnJheSA9IENfbGliLldvcmRBcnJheTtcblx0ICAgIHZhciBDX2FsZ28gPSBDLmFsZ287XG5cdCAgICB2YXIgTUQ1ID0gQ19hbGdvLk1ENTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBUaGlzIGtleSBkZXJpdmF0aW9uIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGNvbmZvcm0gd2l0aCBFVlBfQnl0ZXNUb0tleS5cblx0ICAgICAqIHd3dy5vcGVuc3NsLm9yZy9kb2NzL2NyeXB0by9FVlBfQnl0ZXNUb0tleS5odG1sXG5cdCAgICAgKi9cblx0ICAgIHZhciBFdnBLREYgPSBDX2FsZ28uRXZwS0RGID0gQmFzZS5leHRlbmQoe1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBrZXlTaXplIFRoZSBrZXkgc2l6ZSBpbiB3b3JkcyB0byBnZW5lcmF0ZS4gRGVmYXVsdDogNCAoMTI4IGJpdHMpXG5cdCAgICAgICAgICogQHByb3BlcnR5IHtIYXNoZXJ9IGhhc2hlciBUaGUgaGFzaCBhbGdvcml0aG0gdG8gdXNlLiBEZWZhdWx0OiBNRDVcblx0ICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcn0gaXRlcmF0aW9ucyBUaGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgdG8gcGVyZm9ybS4gRGVmYXVsdDogMVxuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGNmZzogQmFzZS5leHRlbmQoe1xuXHQgICAgICAgICAgICBrZXlTaXplOiAxMjgvMzIsXG5cdCAgICAgICAgICAgIGhhc2hlcjogTUQ1LFxuXHQgICAgICAgICAgICBpdGVyYXRpb25zOiAxXG5cdCAgICAgICAgfSksXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBJbml0aWFsaXplcyBhIG5ld2x5IGNyZWF0ZWQga2V5IGRlcml2YXRpb24gZnVuY3Rpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY2ZnIChPcHRpb25hbCkgVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byB1c2UgZm9yIHRoZSBkZXJpdmF0aW9uLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIga2RmID0gQ3J5cHRvSlMuYWxnby5FdnBLREYuY3JlYXRlKCk7XG5cdCAgICAgICAgICogICAgIHZhciBrZGYgPSBDcnlwdG9KUy5hbGdvLkV2cEtERi5jcmVhdGUoeyBrZXlTaXplOiA4IH0pO1xuXHQgICAgICAgICAqICAgICB2YXIga2RmID0gQ3J5cHRvSlMuYWxnby5FdnBLREYuY3JlYXRlKHsga2V5U2l6ZTogOCwgaXRlcmF0aW9uczogMTAwMCB9KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBpbml0OiBmdW5jdGlvbiAoY2ZnKSB7XG5cdCAgICAgICAgICAgIHRoaXMuY2ZnID0gdGhpcy5jZmcuZXh0ZW5kKGNmZyk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIERlcml2ZXMgYSBrZXkgZnJvbSBhIHBhc3N3b3JkLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBwYXNzd29yZCBUaGUgcGFzc3dvcmQuXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBzYWx0IEEgc2FsdC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIGRlcml2ZWQga2V5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIga2V5ID0ga2RmLmNvbXB1dGUocGFzc3dvcmQsIHNhbHQpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGNvbXB1dGU6IGZ1bmN0aW9uIChwYXNzd29yZCwgc2FsdCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgY2ZnID0gdGhpcy5jZmc7XG5cblx0ICAgICAgICAgICAgLy8gSW5pdCBoYXNoZXJcblx0ICAgICAgICAgICAgdmFyIGhhc2hlciA9IGNmZy5oYXNoZXIuY3JlYXRlKCk7XG5cblx0ICAgICAgICAgICAgLy8gSW5pdGlhbCB2YWx1ZXNcblx0ICAgICAgICAgICAgdmFyIGRlcml2ZWRLZXkgPSBXb3JkQXJyYXkuY3JlYXRlKCk7XG5cblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBkZXJpdmVkS2V5V29yZHMgPSBkZXJpdmVkS2V5LndvcmRzO1xuXHQgICAgICAgICAgICB2YXIga2V5U2l6ZSA9IGNmZy5rZXlTaXplO1xuXHQgICAgICAgICAgICB2YXIgaXRlcmF0aW9ucyA9IGNmZy5pdGVyYXRpb25zO1xuXG5cdCAgICAgICAgICAgIC8vIEdlbmVyYXRlIGtleVxuXHQgICAgICAgICAgICB3aGlsZSAoZGVyaXZlZEtleVdvcmRzLmxlbmd0aCA8IGtleVNpemUpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChibG9jaykge1xuXHQgICAgICAgICAgICAgICAgICAgIGhhc2hlci51cGRhdGUoYmxvY2spO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgdmFyIGJsb2NrID0gaGFzaGVyLnVwZGF0ZShwYXNzd29yZCkuZmluYWxpemUoc2FsdCk7XG5cdCAgICAgICAgICAgICAgICBoYXNoZXIucmVzZXQoKTtcblxuXHQgICAgICAgICAgICAgICAgLy8gSXRlcmF0aW9uc1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBpdGVyYXRpb25zOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICBibG9jayA9IGhhc2hlci5maW5hbGl6ZShibG9jayk7XG5cdCAgICAgICAgICAgICAgICAgICAgaGFzaGVyLnJlc2V0KCk7XG5cdCAgICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICAgIGRlcml2ZWRLZXkuY29uY2F0KGJsb2NrKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBkZXJpdmVkS2V5LnNpZ0J5dGVzID0ga2V5U2l6ZSAqIDQ7XG5cblx0ICAgICAgICAgICAgcmV0dXJuIGRlcml2ZWRLZXk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogRGVyaXZlcyBhIGtleSBmcm9tIGEgcGFzc3dvcmQuXG5cdCAgICAgKlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBwYXNzd29yZCBUaGUgcGFzc3dvcmQuXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IHNhbHQgQSBzYWx0LlxuXHQgICAgICogQHBhcmFtIHtPYmplY3R9IGNmZyAoT3B0aW9uYWwpIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gdXNlIGZvciB0aGlzIGNvbXB1dGF0aW9uLlxuXHQgICAgICpcblx0ICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIGRlcml2ZWQga2V5LlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIga2V5ID0gQ3J5cHRvSlMuRXZwS0RGKHBhc3N3b3JkLCBzYWx0KTtcblx0ICAgICAqICAgICB2YXIga2V5ID0gQ3J5cHRvSlMuRXZwS0RGKHBhc3N3b3JkLCBzYWx0LCB7IGtleVNpemU6IDggfSk7XG5cdCAgICAgKiAgICAgdmFyIGtleSA9IENyeXB0b0pTLkV2cEtERihwYXNzd29yZCwgc2FsdCwgeyBrZXlTaXplOiA4LCBpdGVyYXRpb25zOiAxMDAwIH0pO1xuXHQgICAgICovXG5cdCAgICBDLkV2cEtERiA9IGZ1bmN0aW9uIChwYXNzd29yZCwgc2FsdCwgY2ZnKSB7XG5cdCAgICAgICAgcmV0dXJuIEV2cEtERi5jcmVhdGUoY2ZnKS5jb21wdXRlKHBhc3N3b3JkLCBzYWx0KTtcblx0ICAgIH07XG5cdH0oKSk7XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMuRXZwS0RGO1xuXG59KSk7IiwiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSwgdW5kZWYpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIiksIHJlcXVpcmUoXCIuL2NpcGhlci1jb3JlXCIpKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXCIuL2NvcmVcIiwgXCIuL2NpcGhlci1jb3JlXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQoZnVuY3Rpb24gKHVuZGVmaW5lZCkge1xuXHQgICAgLy8gU2hvcnRjdXRzXG5cdCAgICB2YXIgQyA9IENyeXB0b0pTO1xuXHQgICAgdmFyIENfbGliID0gQy5saWI7XG5cdCAgICB2YXIgQ2lwaGVyUGFyYW1zID0gQ19saWIuQ2lwaGVyUGFyYW1zO1xuXHQgICAgdmFyIENfZW5jID0gQy5lbmM7XG5cdCAgICB2YXIgSGV4ID0gQ19lbmMuSGV4O1xuXHQgICAgdmFyIENfZm9ybWF0ID0gQy5mb3JtYXQ7XG5cblx0ICAgIHZhciBIZXhGb3JtYXR0ZXIgPSBDX2Zvcm1hdC5IZXggPSB7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgdGhlIGNpcGhlcnRleHQgb2YgYSBjaXBoZXIgcGFyYW1zIG9iamVjdCB0byBhIGhleGFkZWNpbWFsbHkgZW5jb2RlZCBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge0NpcGhlclBhcmFtc30gY2lwaGVyUGFyYW1zIFRoZSBjaXBoZXIgcGFyYW1zIG9iamVjdC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGhleGFkZWNpbWFsbHkgZW5jb2RlZCBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBoZXhTdHJpbmcgPSBDcnlwdG9KUy5mb3JtYXQuSGV4LnN0cmluZ2lmeShjaXBoZXJQYXJhbXMpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHN0cmluZ2lmeTogZnVuY3Rpb24gKGNpcGhlclBhcmFtcykge1xuXHQgICAgICAgICAgICByZXR1cm4gY2lwaGVyUGFyYW1zLmNpcGhlcnRleHQudG9TdHJpbmcoSGV4KTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSBoZXhhZGVjaW1hbGx5IGVuY29kZWQgY2lwaGVydGV4dCBzdHJpbmcgdG8gYSBjaXBoZXIgcGFyYW1zIG9iamVjdC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dCBUaGUgaGV4YWRlY2ltYWxseSBlbmNvZGVkIHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge0NpcGhlclBhcmFtc30gVGhlIGNpcGhlciBwYXJhbXMgb2JqZWN0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgY2lwaGVyUGFyYW1zID0gQ3J5cHRvSlMuZm9ybWF0LkhleC5wYXJzZShoZXhTdHJpbmcpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHBhcnNlOiBmdW5jdGlvbiAoaW5wdXQpIHtcblx0ICAgICAgICAgICAgdmFyIGNpcGhlcnRleHQgPSBIZXgucGFyc2UoaW5wdXQpO1xuXHQgICAgICAgICAgICByZXR1cm4gQ2lwaGVyUGFyYW1zLmNyZWF0ZSh7IGNpcGhlcnRleHQ6IGNpcGhlcnRleHQgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0fSgpKTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5mb3JtYXQuSGV4O1xuXG59KSk7IiwiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQoZnVuY3Rpb24gKCkge1xuXHQgICAgLy8gU2hvcnRjdXRzXG5cdCAgICB2YXIgQyA9IENyeXB0b0pTO1xuXHQgICAgdmFyIENfbGliID0gQy5saWI7XG5cdCAgICB2YXIgQmFzZSA9IENfbGliLkJhc2U7XG5cdCAgICB2YXIgQ19lbmMgPSBDLmVuYztcblx0ICAgIHZhciBVdGY4ID0gQ19lbmMuVXRmODtcblx0ICAgIHZhciBDX2FsZ28gPSBDLmFsZ287XG5cblx0ICAgIC8qKlxuXHQgICAgICogSE1BQyBhbGdvcml0aG0uXG5cdCAgICAgKi9cblx0ICAgIHZhciBITUFDID0gQ19hbGdvLkhNQUMgPSBCYXNlLmV4dGVuZCh7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogSW5pdGlhbGl6ZXMgYSBuZXdseSBjcmVhdGVkIEhNQUMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge0hhc2hlcn0gaGFzaGVyIFRoZSBoYXNoIGFsZ29yaXRobSB0byB1c2UuXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBrZXkgVGhlIHNlY3JldCBrZXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBobWFjSGFzaGVyID0gQ3J5cHRvSlMuYWxnby5ITUFDLmNyZWF0ZShDcnlwdG9KUy5hbGdvLlNIQTI1Niwga2V5KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBpbml0OiBmdW5jdGlvbiAoaGFzaGVyLCBrZXkpIHtcblx0ICAgICAgICAgICAgLy8gSW5pdCBoYXNoZXJcblx0ICAgICAgICAgICAgaGFzaGVyID0gdGhpcy5faGFzaGVyID0gbmV3IGhhc2hlci5pbml0KCk7XG5cblx0ICAgICAgICAgICAgLy8gQ29udmVydCBzdHJpbmcgdG8gV29yZEFycmF5LCBlbHNlIGFzc3VtZSBXb3JkQXJyYXkgYWxyZWFkeVxuXHQgICAgICAgICAgICBpZiAodHlwZW9mIGtleSA9PSAnc3RyaW5nJykge1xuXHQgICAgICAgICAgICAgICAga2V5ID0gVXRmOC5wYXJzZShrZXkpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBoYXNoZXJCbG9ja1NpemUgPSBoYXNoZXIuYmxvY2tTaXplO1xuXHQgICAgICAgICAgICB2YXIgaGFzaGVyQmxvY2tTaXplQnl0ZXMgPSBoYXNoZXJCbG9ja1NpemUgKiA0O1xuXG5cdCAgICAgICAgICAgIC8vIEFsbG93IGFyYml0cmFyeSBsZW5ndGgga2V5c1xuXHQgICAgICAgICAgICBpZiAoa2V5LnNpZ0J5dGVzID4gaGFzaGVyQmxvY2tTaXplQnl0ZXMpIHtcblx0ICAgICAgICAgICAgICAgIGtleSA9IGhhc2hlci5maW5hbGl6ZShrZXkpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gQ2xhbXAgZXhjZXNzIGJpdHNcblx0ICAgICAgICAgICAga2V5LmNsYW1wKCk7XG5cblx0ICAgICAgICAgICAgLy8gQ2xvbmUga2V5IGZvciBpbm5lciBhbmQgb3V0ZXIgcGFkc1xuXHQgICAgICAgICAgICB2YXIgb0tleSA9IHRoaXMuX29LZXkgPSBrZXkuY2xvbmUoKTtcblx0ICAgICAgICAgICAgdmFyIGlLZXkgPSB0aGlzLl9pS2V5ID0ga2V5LmNsb25lKCk7XG5cblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBvS2V5V29yZHMgPSBvS2V5LndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgaUtleVdvcmRzID0gaUtleS53b3JkcztcblxuXHQgICAgICAgICAgICAvLyBYT1Iga2V5cyB3aXRoIHBhZCBjb25zdGFudHNcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoYXNoZXJCbG9ja1NpemU7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgb0tleVdvcmRzW2ldIF49IDB4NWM1YzVjNWM7XG5cdCAgICAgICAgICAgICAgICBpS2V5V29yZHNbaV0gXj0gMHgzNjM2MzYzNjtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBvS2V5LnNpZ0J5dGVzID0gaUtleS5zaWdCeXRlcyA9IGhhc2hlckJsb2NrU2l6ZUJ5dGVzO1xuXG5cdCAgICAgICAgICAgIC8vIFNldCBpbml0aWFsIHZhbHVlc1xuXHQgICAgICAgICAgICB0aGlzLnJlc2V0KCk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIFJlc2V0cyB0aGlzIEhNQUMgdG8gaXRzIGluaXRpYWwgc3RhdGUuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIGhtYWNIYXNoZXIucmVzZXQoKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICByZXNldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgaGFzaGVyID0gdGhpcy5faGFzaGVyO1xuXG5cdCAgICAgICAgICAgIC8vIFJlc2V0XG5cdCAgICAgICAgICAgIGhhc2hlci5yZXNldCgpO1xuXHQgICAgICAgICAgICBoYXNoZXIudXBkYXRlKHRoaXMuX2lLZXkpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBVcGRhdGVzIHRoaXMgSE1BQyB3aXRoIGEgbWVzc2FnZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZVVwZGF0ZSBUaGUgbWVzc2FnZSB0byBhcHBlbmQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtITUFDfSBUaGlzIEhNQUMgaW5zdGFuY2UuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIGhtYWNIYXNoZXIudXBkYXRlKCdtZXNzYWdlJyk7XG5cdCAgICAgICAgICogICAgIGhtYWNIYXNoZXIudXBkYXRlKHdvcmRBcnJheSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgdXBkYXRlOiBmdW5jdGlvbiAobWVzc2FnZVVwZGF0ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9oYXNoZXIudXBkYXRlKG1lc3NhZ2VVcGRhdGUpO1xuXG5cdCAgICAgICAgICAgIC8vIENoYWluYWJsZVxuXHQgICAgICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogRmluYWxpemVzIHRoZSBITUFDIGNvbXB1dGF0aW9uLlxuXHQgICAgICAgICAqIE5vdGUgdGhhdCB0aGUgZmluYWxpemUgb3BlcmF0aW9uIGlzIGVmZmVjdGl2ZWx5IGEgZGVzdHJ1Y3RpdmUsIHJlYWQtb25jZSBvcGVyYXRpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2VVcGRhdGUgKE9wdGlvbmFsKSBBIGZpbmFsIG1lc3NhZ2UgdXBkYXRlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgSE1BQy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGhtYWMgPSBobWFjSGFzaGVyLmZpbmFsaXplKCk7XG5cdCAgICAgICAgICogICAgIHZhciBobWFjID0gaG1hY0hhc2hlci5maW5hbGl6ZSgnbWVzc2FnZScpO1xuXHQgICAgICAgICAqICAgICB2YXIgaG1hYyA9IGhtYWNIYXNoZXIuZmluYWxpemUod29yZEFycmF5KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBmaW5hbGl6ZTogZnVuY3Rpb24gKG1lc3NhZ2VVcGRhdGUpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgdmFyIGhhc2hlciA9IHRoaXMuX2hhc2hlcjtcblxuXHQgICAgICAgICAgICAvLyBDb21wdXRlIEhNQUNcblx0ICAgICAgICAgICAgdmFyIGlubmVySGFzaCA9IGhhc2hlci5maW5hbGl6ZShtZXNzYWdlVXBkYXRlKTtcblx0ICAgICAgICAgICAgaGFzaGVyLnJlc2V0KCk7XG5cdCAgICAgICAgICAgIHZhciBobWFjID0gaGFzaGVyLmZpbmFsaXplKHRoaXMuX29LZXkuY2xvbmUoKS5jb25jYXQoaW5uZXJIYXNoKSk7XG5cblx0ICAgICAgICAgICAgcmV0dXJuIGhtYWM7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdH0oKSk7XG5cblxufSkpOyIsIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnksIHVuZGVmKSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpLCByZXF1aXJlKFwiLi94NjQtY29yZVwiKSwgcmVxdWlyZShcIi4vbGliLXR5cGVkYXJyYXlzXCIpLCByZXF1aXJlKFwiLi9lbmMtdXRmMTZcIiksIHJlcXVpcmUoXCIuL2VuYy1iYXNlNjRcIiksIHJlcXVpcmUoXCIuL21kNVwiKSwgcmVxdWlyZShcIi4vc2hhMVwiKSwgcmVxdWlyZShcIi4vc2hhMjU2XCIpLCByZXF1aXJlKFwiLi9zaGEyMjRcIiksIHJlcXVpcmUoXCIuL3NoYTUxMlwiKSwgcmVxdWlyZShcIi4vc2hhMzg0XCIpLCByZXF1aXJlKFwiLi9zaGEzXCIpLCByZXF1aXJlKFwiLi9yaXBlbWQxNjBcIiksIHJlcXVpcmUoXCIuL2htYWNcIiksIHJlcXVpcmUoXCIuL3Bia2RmMlwiKSwgcmVxdWlyZShcIi4vZXZwa2RmXCIpLCByZXF1aXJlKFwiLi9jaXBoZXItY29yZVwiKSwgcmVxdWlyZShcIi4vbW9kZS1jZmJcIiksIHJlcXVpcmUoXCIuL21vZGUtY3RyXCIpLCByZXF1aXJlKFwiLi9tb2RlLWN0ci1nbGFkbWFuXCIpLCByZXF1aXJlKFwiLi9tb2RlLW9mYlwiKSwgcmVxdWlyZShcIi4vbW9kZS1lY2JcIiksIHJlcXVpcmUoXCIuL3BhZC1hbnNpeDkyM1wiKSwgcmVxdWlyZShcIi4vcGFkLWlzbzEwMTI2XCIpLCByZXF1aXJlKFwiLi9wYWQtaXNvOTc5NzFcIiksIHJlcXVpcmUoXCIuL3BhZC16ZXJvcGFkZGluZ1wiKSwgcmVxdWlyZShcIi4vcGFkLW5vcGFkZGluZ1wiKSwgcmVxdWlyZShcIi4vZm9ybWF0LWhleFwiKSwgcmVxdWlyZShcIi4vYWVzXCIpLCByZXF1aXJlKFwiLi90cmlwbGVkZXNcIiksIHJlcXVpcmUoXCIuL3JjNFwiKSwgcmVxdWlyZShcIi4vcmFiYml0XCIpLCByZXF1aXJlKFwiLi9yYWJiaXQtbGVnYWN5XCIpKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXCIuL2NvcmVcIiwgXCIuL3g2NC1jb3JlXCIsIFwiLi9saWItdHlwZWRhcnJheXNcIiwgXCIuL2VuYy11dGYxNlwiLCBcIi4vZW5jLWJhc2U2NFwiLCBcIi4vbWQ1XCIsIFwiLi9zaGExXCIsIFwiLi9zaGEyNTZcIiwgXCIuL3NoYTIyNFwiLCBcIi4vc2hhNTEyXCIsIFwiLi9zaGEzODRcIiwgXCIuL3NoYTNcIiwgXCIuL3JpcGVtZDE2MFwiLCBcIi4vaG1hY1wiLCBcIi4vcGJrZGYyXCIsIFwiLi9ldnBrZGZcIiwgXCIuL2NpcGhlci1jb3JlXCIsIFwiLi9tb2RlLWNmYlwiLCBcIi4vbW9kZS1jdHJcIiwgXCIuL21vZGUtY3RyLWdsYWRtYW5cIiwgXCIuL21vZGUtb2ZiXCIsIFwiLi9tb2RlLWVjYlwiLCBcIi4vcGFkLWFuc2l4OTIzXCIsIFwiLi9wYWQtaXNvMTAxMjZcIiwgXCIuL3BhZC1pc285Nzk3MVwiLCBcIi4vcGFkLXplcm9wYWRkaW5nXCIsIFwiLi9wYWQtbm9wYWRkaW5nXCIsIFwiLi9mb3JtYXQtaGV4XCIsIFwiLi9hZXNcIiwgXCIuL3RyaXBsZWRlc1wiLCBcIi4vcmM0XCIsIFwiLi9yYWJiaXRcIiwgXCIuL3JhYmJpdC1sZWdhY3lcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRyb290LkNyeXB0b0pTID0gZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHRyZXR1cm4gQ3J5cHRvSlM7XG5cbn0pKTsiLCI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXCIuL2NvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdChmdW5jdGlvbiAoKSB7XG5cdCAgICAvLyBDaGVjayBpZiB0eXBlZCBhcnJheXMgYXJlIHN1cHBvcnRlZFxuXHQgICAgaWYgKHR5cGVvZiBBcnJheUJ1ZmZlciAhPSAnZnVuY3Rpb24nKSB7XG5cdCAgICAgICAgcmV0dXJuO1xuXHQgICAgfVxuXG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBXb3JkQXJyYXkgPSBDX2xpYi5Xb3JkQXJyYXk7XG5cblx0ICAgIC8vIFJlZmVyZW5jZSBvcmlnaW5hbCBpbml0XG5cdCAgICB2YXIgc3VwZXJJbml0ID0gV29yZEFycmF5LmluaXQ7XG5cblx0ICAgIC8vIEF1Z21lbnQgV29yZEFycmF5LmluaXQgdG8gaGFuZGxlIHR5cGVkIGFycmF5c1xuXHQgICAgdmFyIHN1YkluaXQgPSBXb3JkQXJyYXkuaW5pdCA9IGZ1bmN0aW9uICh0eXBlZEFycmF5KSB7XG5cdCAgICAgICAgLy8gQ29udmVydCBidWZmZXJzIHRvIHVpbnQ4XG5cdCAgICAgICAgaWYgKHR5cGVkQXJyYXkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuXHQgICAgICAgICAgICB0eXBlZEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkodHlwZWRBcnJheSk7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgLy8gQ29udmVydCBvdGhlciBhcnJheSB2aWV3cyB0byB1aW50OFxuXHQgICAgICAgIGlmIChcblx0ICAgICAgICAgICAgdHlwZWRBcnJheSBpbnN0YW5jZW9mIEludDhBcnJheSB8fFxuXHQgICAgICAgICAgICAodHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVkQXJyYXkgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheSkgfHxcblx0ICAgICAgICAgICAgdHlwZWRBcnJheSBpbnN0YW5jZW9mIEludDE2QXJyYXkgfHxcblx0ICAgICAgICAgICAgdHlwZWRBcnJheSBpbnN0YW5jZW9mIFVpbnQxNkFycmF5IHx8XG5cdCAgICAgICAgICAgIHR5cGVkQXJyYXkgaW5zdGFuY2VvZiBJbnQzMkFycmF5IHx8XG5cdCAgICAgICAgICAgIHR5cGVkQXJyYXkgaW5zdGFuY2VvZiBVaW50MzJBcnJheSB8fFxuXHQgICAgICAgICAgICB0eXBlZEFycmF5IGluc3RhbmNlb2YgRmxvYXQzMkFycmF5IHx8XG5cdCAgICAgICAgICAgIHR5cGVkQXJyYXkgaW5zdGFuY2VvZiBGbG9hdDY0QXJyYXlcblx0ICAgICAgICApIHtcblx0ICAgICAgICAgICAgdHlwZWRBcnJheSA9IG5ldyBVaW50OEFycmF5KHR5cGVkQXJyYXkuYnVmZmVyLCB0eXBlZEFycmF5LmJ5dGVPZmZzZXQsIHR5cGVkQXJyYXkuYnl0ZUxlbmd0aCk7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgLy8gSGFuZGxlIFVpbnQ4QXJyYXlcblx0ICAgICAgICBpZiAodHlwZWRBcnJheSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgdmFyIHR5cGVkQXJyYXlCeXRlTGVuZ3RoID0gdHlwZWRBcnJheS5ieXRlTGVuZ3RoO1xuXG5cdCAgICAgICAgICAgIC8vIEV4dHJhY3QgYnl0ZXNcblx0ICAgICAgICAgICAgdmFyIHdvcmRzID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHlwZWRBcnJheUJ5dGVMZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgd29yZHNbaSA+Pj4gMl0gfD0gdHlwZWRBcnJheVtpXSA8PCAoMjQgLSAoaSAlIDQpICogOCk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBJbml0aWFsaXplIHRoaXMgd29yZCBhcnJheVxuXHQgICAgICAgICAgICBzdXBlckluaXQuY2FsbCh0aGlzLCB3b3JkcywgdHlwZWRBcnJheUJ5dGVMZW5ndGgpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIC8vIEVsc2UgY2FsbCBub3JtYWwgaW5pdFxuXHQgICAgICAgICAgICBzdXBlckluaXQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXG5cdCAgICBzdWJJbml0LnByb3RvdHlwZSA9IFdvcmRBcnJheTtcblx0fSgpKTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5saWIuV29yZEFycmF5O1xuXG59KSk7IiwiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQoZnVuY3Rpb24gKE1hdGgpIHtcblx0ICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgdmFyIEMgPSBDcnlwdG9KUztcblx0ICAgIHZhciBDX2xpYiA9IEMubGliO1xuXHQgICAgdmFyIFdvcmRBcnJheSA9IENfbGliLldvcmRBcnJheTtcblx0ICAgIHZhciBIYXNoZXIgPSBDX2xpYi5IYXNoZXI7XG5cdCAgICB2YXIgQ19hbGdvID0gQy5hbGdvO1xuXG5cdCAgICAvLyBDb25zdGFudHMgdGFibGVcblx0ICAgIHZhciBUID0gW107XG5cblx0ICAgIC8vIENvbXB1dGUgY29uc3RhbnRzXG5cdCAgICAoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNjQ7IGkrKykge1xuXHQgICAgICAgICAgICBUW2ldID0gKE1hdGguYWJzKE1hdGguc2luKGkgKyAxKSkgKiAweDEwMDAwMDAwMCkgfCAwO1xuXHQgICAgICAgIH1cblx0ICAgIH0oKSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogTUQ1IGhhc2ggYWxnb3JpdGhtLlxuXHQgICAgICovXG5cdCAgICB2YXIgTUQ1ID0gQ19hbGdvLk1ENSA9IEhhc2hlci5leHRlbmQoe1xuXHQgICAgICAgIF9kb1Jlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2hhc2ggPSBuZXcgV29yZEFycmF5LmluaXQoW1xuXHQgICAgICAgICAgICAgICAgMHg2NzQ1MjMwMSwgMHhlZmNkYWI4OSxcblx0ICAgICAgICAgICAgICAgIDB4OThiYWRjZmUsIDB4MTAzMjU0NzZcblx0ICAgICAgICAgICAgXSk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb1Byb2Nlc3NCbG9jazogZnVuY3Rpb24gKE0sIG9mZnNldCkge1xuXHQgICAgICAgICAgICAvLyBTd2FwIGVuZGlhblxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICAgICAgdmFyIG9mZnNldF9pID0gb2Zmc2V0ICsgaTtcblx0ICAgICAgICAgICAgICAgIHZhciBNX29mZnNldF9pID0gTVtvZmZzZXRfaV07XG5cblx0ICAgICAgICAgICAgICAgIE1bb2Zmc2V0X2ldID0gKFxuXHQgICAgICAgICAgICAgICAgICAgICgoKE1fb2Zmc2V0X2kgPDwgOCkgIHwgKE1fb2Zmc2V0X2kgPj4+IDI0KSkgJiAweDAwZmYwMGZmKSB8XG5cdCAgICAgICAgICAgICAgICAgICAgKCgoTV9vZmZzZXRfaSA8PCAyNCkgfCAoTV9vZmZzZXRfaSA+Pj4gOCkpICAmIDB4ZmYwMGZmMDApXG5cdCAgICAgICAgICAgICAgICApO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBIID0gdGhpcy5faGFzaC53b3JkcztcblxuXHQgICAgICAgICAgICB2YXIgTV9vZmZzZXRfMCAgPSBNW29mZnNldCArIDBdO1xuXHQgICAgICAgICAgICB2YXIgTV9vZmZzZXRfMSAgPSBNW29mZnNldCArIDFdO1xuXHQgICAgICAgICAgICB2YXIgTV9vZmZzZXRfMiAgPSBNW29mZnNldCArIDJdO1xuXHQgICAgICAgICAgICB2YXIgTV9vZmZzZXRfMyAgPSBNW29mZnNldCArIDNdO1xuXHQgICAgICAgICAgICB2YXIgTV9vZmZzZXRfNCAgPSBNW29mZnNldCArIDRdO1xuXHQgICAgICAgICAgICB2YXIgTV9vZmZzZXRfNSAgPSBNW29mZnNldCArIDVdO1xuXHQgICAgICAgICAgICB2YXIgTV9vZmZzZXRfNiAgPSBNW29mZnNldCArIDZdO1xuXHQgICAgICAgICAgICB2YXIgTV9vZmZzZXRfNyAgPSBNW29mZnNldCArIDddO1xuXHQgICAgICAgICAgICB2YXIgTV9vZmZzZXRfOCAgPSBNW29mZnNldCArIDhdO1xuXHQgICAgICAgICAgICB2YXIgTV9vZmZzZXRfOSAgPSBNW29mZnNldCArIDldO1xuXHQgICAgICAgICAgICB2YXIgTV9vZmZzZXRfMTAgPSBNW29mZnNldCArIDEwXTtcblx0ICAgICAgICAgICAgdmFyIE1fb2Zmc2V0XzExID0gTVtvZmZzZXQgKyAxMV07XG5cdCAgICAgICAgICAgIHZhciBNX29mZnNldF8xMiA9IE1bb2Zmc2V0ICsgMTJdO1xuXHQgICAgICAgICAgICB2YXIgTV9vZmZzZXRfMTMgPSBNW29mZnNldCArIDEzXTtcblx0ICAgICAgICAgICAgdmFyIE1fb2Zmc2V0XzE0ID0gTVtvZmZzZXQgKyAxNF07XG5cdCAgICAgICAgICAgIHZhciBNX29mZnNldF8xNSA9IE1bb2Zmc2V0ICsgMTVdO1xuXG5cdCAgICAgICAgICAgIC8vIFdvcmtpbmcgdmFyaWFsYmVzXG5cdCAgICAgICAgICAgIHZhciBhID0gSFswXTtcblx0ICAgICAgICAgICAgdmFyIGIgPSBIWzFdO1xuXHQgICAgICAgICAgICB2YXIgYyA9IEhbMl07XG5cdCAgICAgICAgICAgIHZhciBkID0gSFszXTtcblxuXHQgICAgICAgICAgICAvLyBDb21wdXRhdGlvblxuXHQgICAgICAgICAgICBhID0gRkYoYSwgYiwgYywgZCwgTV9vZmZzZXRfMCwgIDcsICBUWzBdKTtcblx0ICAgICAgICAgICAgZCA9IEZGKGQsIGEsIGIsIGMsIE1fb2Zmc2V0XzEsICAxMiwgVFsxXSk7XG5cdCAgICAgICAgICAgIGMgPSBGRihjLCBkLCBhLCBiLCBNX29mZnNldF8yLCAgMTcsIFRbMl0pO1xuXHQgICAgICAgICAgICBiID0gRkYoYiwgYywgZCwgYSwgTV9vZmZzZXRfMywgIDIyLCBUWzNdKTtcblx0ICAgICAgICAgICAgYSA9IEZGKGEsIGIsIGMsIGQsIE1fb2Zmc2V0XzQsICA3LCAgVFs0XSk7XG5cdCAgICAgICAgICAgIGQgPSBGRihkLCBhLCBiLCBjLCBNX29mZnNldF81LCAgMTIsIFRbNV0pO1xuXHQgICAgICAgICAgICBjID0gRkYoYywgZCwgYSwgYiwgTV9vZmZzZXRfNiwgIDE3LCBUWzZdKTtcblx0ICAgICAgICAgICAgYiA9IEZGKGIsIGMsIGQsIGEsIE1fb2Zmc2V0XzcsICAyMiwgVFs3XSk7XG5cdCAgICAgICAgICAgIGEgPSBGRihhLCBiLCBjLCBkLCBNX29mZnNldF84LCAgNywgIFRbOF0pO1xuXHQgICAgICAgICAgICBkID0gRkYoZCwgYSwgYiwgYywgTV9vZmZzZXRfOSwgIDEyLCBUWzldKTtcblx0ICAgICAgICAgICAgYyA9IEZGKGMsIGQsIGEsIGIsIE1fb2Zmc2V0XzEwLCAxNywgVFsxMF0pO1xuXHQgICAgICAgICAgICBiID0gRkYoYiwgYywgZCwgYSwgTV9vZmZzZXRfMTEsIDIyLCBUWzExXSk7XG5cdCAgICAgICAgICAgIGEgPSBGRihhLCBiLCBjLCBkLCBNX29mZnNldF8xMiwgNywgIFRbMTJdKTtcblx0ICAgICAgICAgICAgZCA9IEZGKGQsIGEsIGIsIGMsIE1fb2Zmc2V0XzEzLCAxMiwgVFsxM10pO1xuXHQgICAgICAgICAgICBjID0gRkYoYywgZCwgYSwgYiwgTV9vZmZzZXRfMTQsIDE3LCBUWzE0XSk7XG5cdCAgICAgICAgICAgIGIgPSBGRihiLCBjLCBkLCBhLCBNX29mZnNldF8xNSwgMjIsIFRbMTVdKTtcblxuXHQgICAgICAgICAgICBhID0gR0coYSwgYiwgYywgZCwgTV9vZmZzZXRfMSwgIDUsICBUWzE2XSk7XG5cdCAgICAgICAgICAgIGQgPSBHRyhkLCBhLCBiLCBjLCBNX29mZnNldF82LCAgOSwgIFRbMTddKTtcblx0ICAgICAgICAgICAgYyA9IEdHKGMsIGQsIGEsIGIsIE1fb2Zmc2V0XzExLCAxNCwgVFsxOF0pO1xuXHQgICAgICAgICAgICBiID0gR0coYiwgYywgZCwgYSwgTV9vZmZzZXRfMCwgIDIwLCBUWzE5XSk7XG5cdCAgICAgICAgICAgIGEgPSBHRyhhLCBiLCBjLCBkLCBNX29mZnNldF81LCAgNSwgIFRbMjBdKTtcblx0ICAgICAgICAgICAgZCA9IEdHKGQsIGEsIGIsIGMsIE1fb2Zmc2V0XzEwLCA5LCAgVFsyMV0pO1xuXHQgICAgICAgICAgICBjID0gR0coYywgZCwgYSwgYiwgTV9vZmZzZXRfMTUsIDE0LCBUWzIyXSk7XG5cdCAgICAgICAgICAgIGIgPSBHRyhiLCBjLCBkLCBhLCBNX29mZnNldF80LCAgMjAsIFRbMjNdKTtcblx0ICAgICAgICAgICAgYSA9IEdHKGEsIGIsIGMsIGQsIE1fb2Zmc2V0XzksICA1LCAgVFsyNF0pO1xuXHQgICAgICAgICAgICBkID0gR0coZCwgYSwgYiwgYywgTV9vZmZzZXRfMTQsIDksICBUWzI1XSk7XG5cdCAgICAgICAgICAgIGMgPSBHRyhjLCBkLCBhLCBiLCBNX29mZnNldF8zLCAgMTQsIFRbMjZdKTtcblx0ICAgICAgICAgICAgYiA9IEdHKGIsIGMsIGQsIGEsIE1fb2Zmc2V0XzgsICAyMCwgVFsyN10pO1xuXHQgICAgICAgICAgICBhID0gR0coYSwgYiwgYywgZCwgTV9vZmZzZXRfMTMsIDUsICBUWzI4XSk7XG5cdCAgICAgICAgICAgIGQgPSBHRyhkLCBhLCBiLCBjLCBNX29mZnNldF8yLCAgOSwgIFRbMjldKTtcblx0ICAgICAgICAgICAgYyA9IEdHKGMsIGQsIGEsIGIsIE1fb2Zmc2V0XzcsICAxNCwgVFszMF0pO1xuXHQgICAgICAgICAgICBiID0gR0coYiwgYywgZCwgYSwgTV9vZmZzZXRfMTIsIDIwLCBUWzMxXSk7XG5cblx0ICAgICAgICAgICAgYSA9IEhIKGEsIGIsIGMsIGQsIE1fb2Zmc2V0XzUsICA0LCAgVFszMl0pO1xuXHQgICAgICAgICAgICBkID0gSEgoZCwgYSwgYiwgYywgTV9vZmZzZXRfOCwgIDExLCBUWzMzXSk7XG5cdCAgICAgICAgICAgIGMgPSBISChjLCBkLCBhLCBiLCBNX29mZnNldF8xMSwgMTYsIFRbMzRdKTtcblx0ICAgICAgICAgICAgYiA9IEhIKGIsIGMsIGQsIGEsIE1fb2Zmc2V0XzE0LCAyMywgVFszNV0pO1xuXHQgICAgICAgICAgICBhID0gSEgoYSwgYiwgYywgZCwgTV9vZmZzZXRfMSwgIDQsICBUWzM2XSk7XG5cdCAgICAgICAgICAgIGQgPSBISChkLCBhLCBiLCBjLCBNX29mZnNldF80LCAgMTEsIFRbMzddKTtcblx0ICAgICAgICAgICAgYyA9IEhIKGMsIGQsIGEsIGIsIE1fb2Zmc2V0XzcsICAxNiwgVFszOF0pO1xuXHQgICAgICAgICAgICBiID0gSEgoYiwgYywgZCwgYSwgTV9vZmZzZXRfMTAsIDIzLCBUWzM5XSk7XG5cdCAgICAgICAgICAgIGEgPSBISChhLCBiLCBjLCBkLCBNX29mZnNldF8xMywgNCwgIFRbNDBdKTtcblx0ICAgICAgICAgICAgZCA9IEhIKGQsIGEsIGIsIGMsIE1fb2Zmc2V0XzAsICAxMSwgVFs0MV0pO1xuXHQgICAgICAgICAgICBjID0gSEgoYywgZCwgYSwgYiwgTV9vZmZzZXRfMywgIDE2LCBUWzQyXSk7XG5cdCAgICAgICAgICAgIGIgPSBISChiLCBjLCBkLCBhLCBNX29mZnNldF82LCAgMjMsIFRbNDNdKTtcblx0ICAgICAgICAgICAgYSA9IEhIKGEsIGIsIGMsIGQsIE1fb2Zmc2V0XzksICA0LCAgVFs0NF0pO1xuXHQgICAgICAgICAgICBkID0gSEgoZCwgYSwgYiwgYywgTV9vZmZzZXRfMTIsIDExLCBUWzQ1XSk7XG5cdCAgICAgICAgICAgIGMgPSBISChjLCBkLCBhLCBiLCBNX29mZnNldF8xNSwgMTYsIFRbNDZdKTtcblx0ICAgICAgICAgICAgYiA9IEhIKGIsIGMsIGQsIGEsIE1fb2Zmc2V0XzIsICAyMywgVFs0N10pO1xuXG5cdCAgICAgICAgICAgIGEgPSBJSShhLCBiLCBjLCBkLCBNX29mZnNldF8wLCAgNiwgIFRbNDhdKTtcblx0ICAgICAgICAgICAgZCA9IElJKGQsIGEsIGIsIGMsIE1fb2Zmc2V0XzcsICAxMCwgVFs0OV0pO1xuXHQgICAgICAgICAgICBjID0gSUkoYywgZCwgYSwgYiwgTV9vZmZzZXRfMTQsIDE1LCBUWzUwXSk7XG5cdCAgICAgICAgICAgIGIgPSBJSShiLCBjLCBkLCBhLCBNX29mZnNldF81LCAgMjEsIFRbNTFdKTtcblx0ICAgICAgICAgICAgYSA9IElJKGEsIGIsIGMsIGQsIE1fb2Zmc2V0XzEyLCA2LCAgVFs1Ml0pO1xuXHQgICAgICAgICAgICBkID0gSUkoZCwgYSwgYiwgYywgTV9vZmZzZXRfMywgIDEwLCBUWzUzXSk7XG5cdCAgICAgICAgICAgIGMgPSBJSShjLCBkLCBhLCBiLCBNX29mZnNldF8xMCwgMTUsIFRbNTRdKTtcblx0ICAgICAgICAgICAgYiA9IElJKGIsIGMsIGQsIGEsIE1fb2Zmc2V0XzEsICAyMSwgVFs1NV0pO1xuXHQgICAgICAgICAgICBhID0gSUkoYSwgYiwgYywgZCwgTV9vZmZzZXRfOCwgIDYsICBUWzU2XSk7XG5cdCAgICAgICAgICAgIGQgPSBJSShkLCBhLCBiLCBjLCBNX29mZnNldF8xNSwgMTAsIFRbNTddKTtcblx0ICAgICAgICAgICAgYyA9IElJKGMsIGQsIGEsIGIsIE1fb2Zmc2V0XzYsICAxNSwgVFs1OF0pO1xuXHQgICAgICAgICAgICBiID0gSUkoYiwgYywgZCwgYSwgTV9vZmZzZXRfMTMsIDIxLCBUWzU5XSk7XG5cdCAgICAgICAgICAgIGEgPSBJSShhLCBiLCBjLCBkLCBNX29mZnNldF80LCAgNiwgIFRbNjBdKTtcblx0ICAgICAgICAgICAgZCA9IElJKGQsIGEsIGIsIGMsIE1fb2Zmc2V0XzExLCAxMCwgVFs2MV0pO1xuXHQgICAgICAgICAgICBjID0gSUkoYywgZCwgYSwgYiwgTV9vZmZzZXRfMiwgIDE1LCBUWzYyXSk7XG5cdCAgICAgICAgICAgIGIgPSBJSShiLCBjLCBkLCBhLCBNX29mZnNldF85LCAgMjEsIFRbNjNdKTtcblxuXHQgICAgICAgICAgICAvLyBJbnRlcm1lZGlhdGUgaGFzaCB2YWx1ZVxuXHQgICAgICAgICAgICBIWzBdID0gKEhbMF0gKyBhKSB8IDA7XG5cdCAgICAgICAgICAgIEhbMV0gPSAoSFsxXSArIGIpIHwgMDtcblx0ICAgICAgICAgICAgSFsyXSA9IChIWzJdICsgYykgfCAwO1xuXHQgICAgICAgICAgICBIWzNdID0gKEhbM10gKyBkKSB8IDA7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb0ZpbmFsaXplOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuX2RhdGE7XG5cdCAgICAgICAgICAgIHZhciBkYXRhV29yZHMgPSBkYXRhLndvcmRzO1xuXG5cdCAgICAgICAgICAgIHZhciBuQml0c1RvdGFsID0gdGhpcy5fbkRhdGFCeXRlcyAqIDg7XG5cdCAgICAgICAgICAgIHZhciBuQml0c0xlZnQgPSBkYXRhLnNpZ0J5dGVzICogODtcblxuXHQgICAgICAgICAgICAvLyBBZGQgcGFkZGluZ1xuXHQgICAgICAgICAgICBkYXRhV29yZHNbbkJpdHNMZWZ0ID4+PiA1XSB8PSAweDgwIDw8ICgyNCAtIG5CaXRzTGVmdCAlIDMyKTtcblxuXHQgICAgICAgICAgICB2YXIgbkJpdHNUb3RhbEggPSBNYXRoLmZsb29yKG5CaXRzVG90YWwgLyAweDEwMDAwMDAwMCk7XG5cdCAgICAgICAgICAgIHZhciBuQml0c1RvdGFsTCA9IG5CaXRzVG90YWw7XG5cdCAgICAgICAgICAgIGRhdGFXb3Jkc1soKChuQml0c0xlZnQgKyA2NCkgPj4+IDkpIDw8IDQpICsgMTVdID0gKFxuXHQgICAgICAgICAgICAgICAgKCgobkJpdHNUb3RhbEggPDwgOCkgIHwgKG5CaXRzVG90YWxIID4+PiAyNCkpICYgMHgwMGZmMDBmZikgfFxuXHQgICAgICAgICAgICAgICAgKCgobkJpdHNUb3RhbEggPDwgMjQpIHwgKG5CaXRzVG90YWxIID4+PiA4KSkgICYgMHhmZjAwZmYwMClcblx0ICAgICAgICAgICAgKTtcblx0ICAgICAgICAgICAgZGF0YVdvcmRzWygoKG5CaXRzTGVmdCArIDY0KSA+Pj4gOSkgPDwgNCkgKyAxNF0gPSAoXG5cdCAgICAgICAgICAgICAgICAoKChuQml0c1RvdGFsTCA8PCA4KSAgfCAobkJpdHNUb3RhbEwgPj4+IDI0KSkgJiAweDAwZmYwMGZmKSB8XG5cdCAgICAgICAgICAgICAgICAoKChuQml0c1RvdGFsTCA8PCAyNCkgfCAobkJpdHNUb3RhbEwgPj4+IDgpKSAgJiAweGZmMDBmZjAwKVxuXHQgICAgICAgICAgICApO1xuXG5cdCAgICAgICAgICAgIGRhdGEuc2lnQnl0ZXMgPSAoZGF0YVdvcmRzLmxlbmd0aCArIDEpICogNDtcblxuXHQgICAgICAgICAgICAvLyBIYXNoIGZpbmFsIGJsb2Nrc1xuXHQgICAgICAgICAgICB0aGlzLl9wcm9jZXNzKCk7XG5cblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBoYXNoID0gdGhpcy5faGFzaDtcblx0ICAgICAgICAgICAgdmFyIEggPSBoYXNoLndvcmRzO1xuXG5cdCAgICAgICAgICAgIC8vIFN3YXAgZW5kaWFuXG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICAgICAgdmFyIEhfaSA9IEhbaV07XG5cblx0ICAgICAgICAgICAgICAgIEhbaV0gPSAoKChIX2kgPDwgOCkgIHwgKEhfaSA+Pj4gMjQpKSAmIDB4MDBmZjAwZmYpIHxcblx0ICAgICAgICAgICAgICAgICAgICAgICAoKChIX2kgPDwgMjQpIHwgKEhfaSA+Pj4gOCkpICAmIDB4ZmYwMGZmMDApO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gUmV0dXJuIGZpbmFsIGNvbXB1dGVkIGhhc2hcblx0ICAgICAgICAgICAgcmV0dXJuIGhhc2g7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBjbG9uZSA9IEhhc2hlci5jbG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgICAgICBjbG9uZS5faGFzaCA9IHRoaXMuX2hhc2guY2xvbmUoKTtcblxuXHQgICAgICAgICAgICByZXR1cm4gY2xvbmU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIGZ1bmN0aW9uIEZGKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcblx0ICAgICAgICB2YXIgbiA9IGEgKyAoKGIgJiBjKSB8ICh+YiAmIGQpKSArIHggKyB0O1xuXHQgICAgICAgIHJldHVybiAoKG4gPDwgcykgfCAobiA+Pj4gKDMyIC0gcykpKSArIGI7XG5cdCAgICB9XG5cblx0ICAgIGZ1bmN0aW9uIEdHKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcblx0ICAgICAgICB2YXIgbiA9IGEgKyAoKGIgJiBkKSB8IChjICYgfmQpKSArIHggKyB0O1xuXHQgICAgICAgIHJldHVybiAoKG4gPDwgcykgfCAobiA+Pj4gKDMyIC0gcykpKSArIGI7XG5cdCAgICB9XG5cblx0ICAgIGZ1bmN0aW9uIEhIKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcblx0ICAgICAgICB2YXIgbiA9IGEgKyAoYiBeIGMgXiBkKSArIHggKyB0O1xuXHQgICAgICAgIHJldHVybiAoKG4gPDwgcykgfCAobiA+Pj4gKDMyIC0gcykpKSArIGI7XG5cdCAgICB9XG5cblx0ICAgIGZ1bmN0aW9uIElJKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcblx0ICAgICAgICB2YXIgbiA9IGEgKyAoYyBeIChiIHwgfmQpKSArIHggKyB0O1xuXHQgICAgICAgIHJldHVybiAoKG4gPDwgcykgfCAobiA+Pj4gKDMyIC0gcykpKSArIGI7XG5cdCAgICB9XG5cblx0ICAgIC8qKlxuXHQgICAgICogU2hvcnRjdXQgZnVuY3Rpb24gdG8gdGhlIGhhc2hlcidzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGhhc2guXG5cdCAgICAgKlxuXHQgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgaGFzaC5cblx0ICAgICAqXG5cdCAgICAgKiBAc3RhdGljXG5cdCAgICAgKlxuXHQgICAgICogQGV4YW1wbGVcblx0ICAgICAqXG5cdCAgICAgKiAgICAgdmFyIGhhc2ggPSBDcnlwdG9KUy5NRDUoJ21lc3NhZ2UnKTtcblx0ICAgICAqICAgICB2YXIgaGFzaCA9IENyeXB0b0pTLk1ENSh3b3JkQXJyYXkpO1xuXHQgICAgICovXG5cdCAgICBDLk1ENSA9IEhhc2hlci5fY3JlYXRlSGVscGVyKE1ENSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogU2hvcnRjdXQgZnVuY3Rpb24gdG8gdGhlIEhNQUMncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBoYXNoLlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBrZXkgVGhlIHNlY3JldCBrZXkuXG5cdCAgICAgKlxuXHQgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgSE1BQy5cblx0ICAgICAqXG5cdCAgICAgKiBAc3RhdGljXG5cdCAgICAgKlxuXHQgICAgICogQGV4YW1wbGVcblx0ICAgICAqXG5cdCAgICAgKiAgICAgdmFyIGhtYWMgPSBDcnlwdG9KUy5IbWFjTUQ1KG1lc3NhZ2UsIGtleSk7XG5cdCAgICAgKi9cblx0ICAgIEMuSG1hY01ENSA9IEhhc2hlci5fY3JlYXRlSG1hY0hlbHBlcihNRDUpO1xuXHR9KE1hdGgpKTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5NRDU7XG5cbn0pKTsiLCI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5LCB1bmRlZikge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSwgcmVxdWlyZShcIi4vY2lwaGVyLWNvcmVcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiLCBcIi4vY2lwaGVyLWNvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdC8qKlxuXHQgKiBDaXBoZXIgRmVlZGJhY2sgYmxvY2sgbW9kZS5cblx0ICovXG5cdENyeXB0b0pTLm1vZGUuQ0ZCID0gKGZ1bmN0aW9uICgpIHtcblx0ICAgIHZhciBDRkIgPSBDcnlwdG9KUy5saWIuQmxvY2tDaXBoZXJNb2RlLmV4dGVuZCgpO1xuXG5cdCAgICBDRkIuRW5jcnlwdG9yID0gQ0ZCLmV4dGVuZCh7XG5cdCAgICAgICAgcHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiAod29yZHMsIG9mZnNldCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGNpcGhlciA9IHRoaXMuX2NpcGhlcjtcblx0ICAgICAgICAgICAgdmFyIGJsb2NrU2l6ZSA9IGNpcGhlci5ibG9ja1NpemU7XG5cblx0ICAgICAgICAgICAgZ2VuZXJhdGVLZXlzdHJlYW1BbmRFbmNyeXB0LmNhbGwodGhpcywgd29yZHMsIG9mZnNldCwgYmxvY2tTaXplLCBjaXBoZXIpO1xuXG5cdCAgICAgICAgICAgIC8vIFJlbWVtYmVyIHRoaXMgYmxvY2sgdG8gdXNlIHdpdGggbmV4dCBibG9ja1xuXHQgICAgICAgICAgICB0aGlzLl9wcmV2QmxvY2sgPSB3b3Jkcy5zbGljZShvZmZzZXQsIG9mZnNldCArIGJsb2NrU2l6ZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIENGQi5EZWNyeXB0b3IgPSBDRkIuZXh0ZW5kKHtcblx0ICAgICAgICBwcm9jZXNzQmxvY2s6IGZ1bmN0aW9uICh3b3Jkcywgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgY2lwaGVyID0gdGhpcy5fY2lwaGVyO1xuXHQgICAgICAgICAgICB2YXIgYmxvY2tTaXplID0gY2lwaGVyLmJsb2NrU2l6ZTtcblxuXHQgICAgICAgICAgICAvLyBSZW1lbWJlciB0aGlzIGJsb2NrIHRvIHVzZSB3aXRoIG5leHQgYmxvY2tcblx0ICAgICAgICAgICAgdmFyIHRoaXNCbG9jayA9IHdvcmRzLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgYmxvY2tTaXplKTtcblxuXHQgICAgICAgICAgICBnZW5lcmF0ZUtleXN0cmVhbUFuZEVuY3J5cHQuY2FsbCh0aGlzLCB3b3Jkcywgb2Zmc2V0LCBibG9ja1NpemUsIGNpcGhlcik7XG5cblx0ICAgICAgICAgICAgLy8gVGhpcyBibG9jayBiZWNvbWVzIHRoZSBwcmV2aW91cyBibG9ja1xuXHQgICAgICAgICAgICB0aGlzLl9wcmV2QmxvY2sgPSB0aGlzQmxvY2s7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIGZ1bmN0aW9uIGdlbmVyYXRlS2V5c3RyZWFtQW5kRW5jcnlwdCh3b3Jkcywgb2Zmc2V0LCBibG9ja1NpemUsIGNpcGhlcikge1xuXHQgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgdmFyIGl2ID0gdGhpcy5faXY7XG5cblx0ICAgICAgICAvLyBHZW5lcmF0ZSBrZXlzdHJlYW1cblx0ICAgICAgICBpZiAoaXYpIHtcblx0ICAgICAgICAgICAgdmFyIGtleXN0cmVhbSA9IGl2LnNsaWNlKDApO1xuXG5cdCAgICAgICAgICAgIC8vIFJlbW92ZSBJViBmb3Igc3Vic2VxdWVudCBibG9ja3Ncblx0ICAgICAgICAgICAgdGhpcy5faXYgPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdmFyIGtleXN0cmVhbSA9IHRoaXMuX3ByZXZCbG9jaztcblx0ICAgICAgICB9XG5cdCAgICAgICAgY2lwaGVyLmVuY3J5cHRCbG9jayhrZXlzdHJlYW0sIDApO1xuXG5cdCAgICAgICAgLy8gRW5jcnlwdFxuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmxvY2tTaXplOyBpKyspIHtcblx0ICAgICAgICAgICAgd29yZHNbb2Zmc2V0ICsgaV0gXj0ga2V5c3RyZWFtW2ldO1xuXHQgICAgICAgIH1cblx0ICAgIH1cblxuXHQgICAgcmV0dXJuIENGQjtcblx0fSgpKTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5tb2RlLkNGQjtcblxufSkpOyIsIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnksIHVuZGVmKSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpLCByZXF1aXJlKFwiLi9jaXBoZXItY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi9jaXBoZXItY29yZVwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0LyoqIEBwcmVzZXJ2ZVxuXHQgKiBDb3VudGVyIGJsb2NrIG1vZGUgY29tcGF0aWJsZSB3aXRoICBEciBCcmlhbiBHbGFkbWFuIGZpbGVlbmMuY1xuXHQgKiBkZXJpdmVkIGZyb20gQ3J5cHRvSlMubW9kZS5DVFJcblx0ICogSmFuIEhydWJ5IGpocnVieS53ZWJAZ21haWwuY29tXG5cdCAqL1xuXHRDcnlwdG9KUy5tb2RlLkNUUkdsYWRtYW4gPSAoZnVuY3Rpb24gKCkge1xuXHQgICAgdmFyIENUUkdsYWRtYW4gPSBDcnlwdG9KUy5saWIuQmxvY2tDaXBoZXJNb2RlLmV4dGVuZCgpO1xuXG5cdFx0ZnVuY3Rpb24gaW5jV29yZCh3b3JkKVxuXHRcdHtcblx0XHRcdGlmICgoKHdvcmQgPj4gMjQpICYgMHhmZikgPT09IDB4ZmYpIHsgLy9vdmVyZmxvd1xuXHRcdFx0dmFyIGIxID0gKHdvcmQgPj4gMTYpJjB4ZmY7XG5cdFx0XHR2YXIgYjIgPSAod29yZCA+PiA4KSYweGZmO1xuXHRcdFx0dmFyIGIzID0gd29yZCAmIDB4ZmY7XG5cblx0XHRcdGlmIChiMSA9PT0gMHhmZikgLy8gb3ZlcmZsb3cgYjFcblx0XHRcdHtcblx0XHRcdGIxID0gMDtcblx0XHRcdGlmIChiMiA9PT0gMHhmZilcblx0XHRcdHtcblx0XHRcdFx0YjIgPSAwO1xuXHRcdFx0XHRpZiAoYjMgPT09IDB4ZmYpXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRiMyA9IDA7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0KytiMztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZWxzZVxuXHRcdFx0e1xuXHRcdFx0XHQrK2IyO1xuXHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZWxzZVxuXHRcdFx0e1xuXHRcdFx0KytiMTtcblx0XHRcdH1cblxuXHRcdFx0d29yZCA9IDA7XG5cdFx0XHR3b3JkICs9IChiMSA8PCAxNik7XG5cdFx0XHR3b3JkICs9IChiMiA8PCA4KTtcblx0XHRcdHdvcmQgKz0gYjM7XG5cdFx0XHR9XG5cdFx0XHRlbHNlXG5cdFx0XHR7XG5cdFx0XHR3b3JkICs9ICgweDAxIDw8IDI0KTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB3b3JkO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGluY0NvdW50ZXIoY291bnRlcilcblx0XHR7XG5cdFx0XHRpZiAoKGNvdW50ZXJbMF0gPSBpbmNXb3JkKGNvdW50ZXJbMF0pKSA9PT0gMClcblx0XHRcdHtcblx0XHRcdFx0Ly8gZW5jcl9kYXRhIGluIGZpbGVlbmMuYyBmcm9tICBEciBCcmlhbiBHbGFkbWFuJ3MgY291bnRzIG9ubHkgd2l0aCBEV09SRCBqIDwgOFxuXHRcdFx0XHRjb3VudGVyWzFdID0gaW5jV29yZChjb3VudGVyWzFdKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBjb3VudGVyO1xuXHRcdH1cblxuXHQgICAgdmFyIEVuY3J5cHRvciA9IENUUkdsYWRtYW4uRW5jcnlwdG9yID0gQ1RSR2xhZG1hbi5leHRlbmQoe1xuXHQgICAgICAgIHByb2Nlc3NCbG9jazogZnVuY3Rpb24gKHdvcmRzLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBjaXBoZXIgPSB0aGlzLl9jaXBoZXJcblx0ICAgICAgICAgICAgdmFyIGJsb2NrU2l6ZSA9IGNpcGhlci5ibG9ja1NpemU7XG5cdCAgICAgICAgICAgIHZhciBpdiA9IHRoaXMuX2l2O1xuXHQgICAgICAgICAgICB2YXIgY291bnRlciA9IHRoaXMuX2NvdW50ZXI7XG5cblx0ICAgICAgICAgICAgLy8gR2VuZXJhdGUga2V5c3RyZWFtXG5cdCAgICAgICAgICAgIGlmIChpdikge1xuXHQgICAgICAgICAgICAgICAgY291bnRlciA9IHRoaXMuX2NvdW50ZXIgPSBpdi5zbGljZSgwKTtcblxuXHQgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIElWIGZvciBzdWJzZXF1ZW50IGJsb2Nrc1xuXHQgICAgICAgICAgICAgICAgdGhpcy5faXYgPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgICAgIH1cblxuXHRcdFx0XHRpbmNDb3VudGVyKGNvdW50ZXIpO1xuXG5cdFx0XHRcdHZhciBrZXlzdHJlYW0gPSBjb3VudGVyLnNsaWNlKDApO1xuXHQgICAgICAgICAgICBjaXBoZXIuZW5jcnlwdEJsb2NrKGtleXN0cmVhbSwgMCk7XG5cblx0ICAgICAgICAgICAgLy8gRW5jcnlwdFxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJsb2NrU2l6ZTsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB3b3Jkc1tvZmZzZXQgKyBpXSBePSBrZXlzdHJlYW1baV07XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblxuXHQgICAgQ1RSR2xhZG1hbi5EZWNyeXB0b3IgPSBFbmNyeXB0b3I7XG5cblx0ICAgIHJldHVybiBDVFJHbGFkbWFuO1xuXHR9KCkpO1xuXG5cblxuXG5cdHJldHVybiBDcnlwdG9KUy5tb2RlLkNUUkdsYWRtYW47XG5cbn0pKTsiLCI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5LCB1bmRlZikge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSwgcmVxdWlyZShcIi4vY2lwaGVyLWNvcmVcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiLCBcIi4vY2lwaGVyLWNvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdC8qKlxuXHQgKiBDb3VudGVyIGJsb2NrIG1vZGUuXG5cdCAqL1xuXHRDcnlwdG9KUy5tb2RlLkNUUiA9IChmdW5jdGlvbiAoKSB7XG5cdCAgICB2YXIgQ1RSID0gQ3J5cHRvSlMubGliLkJsb2NrQ2lwaGVyTW9kZS5leHRlbmQoKTtcblxuXHQgICAgdmFyIEVuY3J5cHRvciA9IENUUi5FbmNyeXB0b3IgPSBDVFIuZXh0ZW5kKHtcblx0ICAgICAgICBwcm9jZXNzQmxvY2s6IGZ1bmN0aW9uICh3b3Jkcywgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgY2lwaGVyID0gdGhpcy5fY2lwaGVyXG5cdCAgICAgICAgICAgIHZhciBibG9ja1NpemUgPSBjaXBoZXIuYmxvY2tTaXplO1xuXHQgICAgICAgICAgICB2YXIgaXYgPSB0aGlzLl9pdjtcblx0ICAgICAgICAgICAgdmFyIGNvdW50ZXIgPSB0aGlzLl9jb3VudGVyO1xuXG5cdCAgICAgICAgICAgIC8vIEdlbmVyYXRlIGtleXN0cmVhbVxuXHQgICAgICAgICAgICBpZiAoaXYpIHtcblx0ICAgICAgICAgICAgICAgIGNvdW50ZXIgPSB0aGlzLl9jb3VudGVyID0gaXYuc2xpY2UoMCk7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBJViBmb3Igc3Vic2VxdWVudCBibG9ja3Ncblx0ICAgICAgICAgICAgICAgIHRoaXMuX2l2ID0gdW5kZWZpbmVkO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHZhciBrZXlzdHJlYW0gPSBjb3VudGVyLnNsaWNlKDApO1xuXHQgICAgICAgICAgICBjaXBoZXIuZW5jcnlwdEJsb2NrKGtleXN0cmVhbSwgMCk7XG5cblx0ICAgICAgICAgICAgLy8gSW5jcmVtZW50IGNvdW50ZXJcblx0ICAgICAgICAgICAgY291bnRlcltibG9ja1NpemUgLSAxXSA9IChjb3VudGVyW2Jsb2NrU2l6ZSAtIDFdICsgMSkgfCAwXG5cblx0ICAgICAgICAgICAgLy8gRW5jcnlwdFxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJsb2NrU2l6ZTsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB3b3Jkc1tvZmZzZXQgKyBpXSBePSBrZXlzdHJlYW1baV07XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblxuXHQgICAgQ1RSLkRlY3J5cHRvciA9IEVuY3J5cHRvcjtcblxuXHQgICAgcmV0dXJuIENUUjtcblx0fSgpKTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5tb2RlLkNUUjtcblxufSkpOyIsIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnksIHVuZGVmKSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpLCByZXF1aXJlKFwiLi9jaXBoZXItY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi9jaXBoZXItY29yZVwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0LyoqXG5cdCAqIEVsZWN0cm9uaWMgQ29kZWJvb2sgYmxvY2sgbW9kZS5cblx0ICovXG5cdENyeXB0b0pTLm1vZGUuRUNCID0gKGZ1bmN0aW9uICgpIHtcblx0ICAgIHZhciBFQ0IgPSBDcnlwdG9KUy5saWIuQmxvY2tDaXBoZXJNb2RlLmV4dGVuZCgpO1xuXG5cdCAgICBFQ0IuRW5jcnlwdG9yID0gRUNCLmV4dGVuZCh7XG5cdCAgICAgICAgcHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiAod29yZHMsIG9mZnNldCkge1xuXHQgICAgICAgICAgICB0aGlzLl9jaXBoZXIuZW5jcnlwdEJsb2NrKHdvcmRzLCBvZmZzZXQpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICBFQ0IuRGVjcnlwdG9yID0gRUNCLmV4dGVuZCh7XG5cdCAgICAgICAgcHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiAod29yZHMsIG9mZnNldCkge1xuXHQgICAgICAgICAgICB0aGlzLl9jaXBoZXIuZGVjcnlwdEJsb2NrKHdvcmRzLCBvZmZzZXQpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICByZXR1cm4gRUNCO1xuXHR9KCkpO1xuXG5cblx0cmV0dXJuIENyeXB0b0pTLm1vZGUuRUNCO1xuXG59KSk7IiwiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSwgdW5kZWYpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIiksIHJlcXVpcmUoXCIuL2NpcGhlci1jb3JlXCIpKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXCIuL2NvcmVcIiwgXCIuL2NpcGhlci1jb3JlXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQvKipcblx0ICogT3V0cHV0IEZlZWRiYWNrIGJsb2NrIG1vZGUuXG5cdCAqL1xuXHRDcnlwdG9KUy5tb2RlLk9GQiA9IChmdW5jdGlvbiAoKSB7XG5cdCAgICB2YXIgT0ZCID0gQ3J5cHRvSlMubGliLkJsb2NrQ2lwaGVyTW9kZS5leHRlbmQoKTtcblxuXHQgICAgdmFyIEVuY3J5cHRvciA9IE9GQi5FbmNyeXB0b3IgPSBPRkIuZXh0ZW5kKHtcblx0ICAgICAgICBwcm9jZXNzQmxvY2s6IGZ1bmN0aW9uICh3b3Jkcywgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgY2lwaGVyID0gdGhpcy5fY2lwaGVyXG5cdCAgICAgICAgICAgIHZhciBibG9ja1NpemUgPSBjaXBoZXIuYmxvY2tTaXplO1xuXHQgICAgICAgICAgICB2YXIgaXYgPSB0aGlzLl9pdjtcblx0ICAgICAgICAgICAgdmFyIGtleXN0cmVhbSA9IHRoaXMuX2tleXN0cmVhbTtcblxuXHQgICAgICAgICAgICAvLyBHZW5lcmF0ZSBrZXlzdHJlYW1cblx0ICAgICAgICAgICAgaWYgKGl2KSB7XG5cdCAgICAgICAgICAgICAgICBrZXlzdHJlYW0gPSB0aGlzLl9rZXlzdHJlYW0gPSBpdi5zbGljZSgwKTtcblxuXHQgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIElWIGZvciBzdWJzZXF1ZW50IGJsb2Nrc1xuXHQgICAgICAgICAgICAgICAgdGhpcy5faXYgPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgY2lwaGVyLmVuY3J5cHRCbG9jayhrZXlzdHJlYW0sIDApO1xuXG5cdCAgICAgICAgICAgIC8vIEVuY3J5cHRcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBibG9ja1NpemU7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgd29yZHNbb2Zmc2V0ICsgaV0gXj0ga2V5c3RyZWFtW2ldO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIE9GQi5EZWNyeXB0b3IgPSBFbmNyeXB0b3I7XG5cblx0ICAgIHJldHVybiBPRkI7XG5cdH0oKSk7XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMubW9kZS5PRkI7XG5cbn0pKTsiLCI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5LCB1bmRlZikge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSwgcmVxdWlyZShcIi4vY2lwaGVyLWNvcmVcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiLCBcIi4vY2lwaGVyLWNvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdC8qKlxuXHQgKiBBTlNJIFguOTIzIHBhZGRpbmcgc3RyYXRlZ3kuXG5cdCAqL1xuXHRDcnlwdG9KUy5wYWQuQW5zaVg5MjMgPSB7XG5cdCAgICBwYWQ6IGZ1bmN0aW9uIChkYXRhLCBibG9ja1NpemUpIHtcblx0ICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICB2YXIgZGF0YVNpZ0J5dGVzID0gZGF0YS5zaWdCeXRlcztcblx0ICAgICAgICB2YXIgYmxvY2tTaXplQnl0ZXMgPSBibG9ja1NpemUgKiA0O1xuXG5cdCAgICAgICAgLy8gQ291bnQgcGFkZGluZyBieXRlc1xuXHQgICAgICAgIHZhciBuUGFkZGluZ0J5dGVzID0gYmxvY2tTaXplQnl0ZXMgLSBkYXRhU2lnQnl0ZXMgJSBibG9ja1NpemVCeXRlcztcblxuXHQgICAgICAgIC8vIENvbXB1dGUgbGFzdCBieXRlIHBvc2l0aW9uXG5cdCAgICAgICAgdmFyIGxhc3RCeXRlUG9zID0gZGF0YVNpZ0J5dGVzICsgblBhZGRpbmdCeXRlcyAtIDE7XG5cblx0ICAgICAgICAvLyBQYWRcblx0ICAgICAgICBkYXRhLmNsYW1wKCk7XG5cdCAgICAgICAgZGF0YS53b3Jkc1tsYXN0Qnl0ZVBvcyA+Pj4gMl0gfD0gblBhZGRpbmdCeXRlcyA8PCAoMjQgLSAobGFzdEJ5dGVQb3MgJSA0KSAqIDgpO1xuXHQgICAgICAgIGRhdGEuc2lnQnl0ZXMgKz0gblBhZGRpbmdCeXRlcztcblx0ICAgIH0sXG5cblx0ICAgIHVucGFkOiBmdW5jdGlvbiAoZGF0YSkge1xuXHQgICAgICAgIC8vIEdldCBudW1iZXIgb2YgcGFkZGluZyBieXRlcyBmcm9tIGxhc3QgYnl0ZVxuXHQgICAgICAgIHZhciBuUGFkZGluZ0J5dGVzID0gZGF0YS53b3Jkc1soZGF0YS5zaWdCeXRlcyAtIDEpID4+PiAyXSAmIDB4ZmY7XG5cblx0ICAgICAgICAvLyBSZW1vdmUgcGFkZGluZ1xuXHQgICAgICAgIGRhdGEuc2lnQnl0ZXMgLT0gblBhZGRpbmdCeXRlcztcblx0ICAgIH1cblx0fTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5wYWQuQW5zaXg5MjM7XG5cbn0pKTsiLCI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5LCB1bmRlZikge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSwgcmVxdWlyZShcIi4vY2lwaGVyLWNvcmVcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiLCBcIi4vY2lwaGVyLWNvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdC8qKlxuXHQgKiBJU08gMTAxMjYgcGFkZGluZyBzdHJhdGVneS5cblx0ICovXG5cdENyeXB0b0pTLnBhZC5Jc28xMDEyNiA9IHtcblx0ICAgIHBhZDogZnVuY3Rpb24gKGRhdGEsIGJsb2NrU2l6ZSkge1xuXHQgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgdmFyIGJsb2NrU2l6ZUJ5dGVzID0gYmxvY2tTaXplICogNDtcblxuXHQgICAgICAgIC8vIENvdW50IHBhZGRpbmcgYnl0ZXNcblx0ICAgICAgICB2YXIgblBhZGRpbmdCeXRlcyA9IGJsb2NrU2l6ZUJ5dGVzIC0gZGF0YS5zaWdCeXRlcyAlIGJsb2NrU2l6ZUJ5dGVzO1xuXG5cdCAgICAgICAgLy8gUGFkXG5cdCAgICAgICAgZGF0YS5jb25jYXQoQ3J5cHRvSlMubGliLldvcmRBcnJheS5yYW5kb20oblBhZGRpbmdCeXRlcyAtIDEpKS5cblx0ICAgICAgICAgICAgIGNvbmNhdChDcnlwdG9KUy5saWIuV29yZEFycmF5LmNyZWF0ZShbblBhZGRpbmdCeXRlcyA8PCAyNF0sIDEpKTtcblx0ICAgIH0sXG5cblx0ICAgIHVucGFkOiBmdW5jdGlvbiAoZGF0YSkge1xuXHQgICAgICAgIC8vIEdldCBudW1iZXIgb2YgcGFkZGluZyBieXRlcyBmcm9tIGxhc3QgYnl0ZVxuXHQgICAgICAgIHZhciBuUGFkZGluZ0J5dGVzID0gZGF0YS53b3Jkc1soZGF0YS5zaWdCeXRlcyAtIDEpID4+PiAyXSAmIDB4ZmY7XG5cblx0ICAgICAgICAvLyBSZW1vdmUgcGFkZGluZ1xuXHQgICAgICAgIGRhdGEuc2lnQnl0ZXMgLT0gblBhZGRpbmdCeXRlcztcblx0ICAgIH1cblx0fTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5wYWQuSXNvMTAxMjY7XG5cbn0pKTsiLCI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5LCB1bmRlZikge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSwgcmVxdWlyZShcIi4vY2lwaGVyLWNvcmVcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiLCBcIi4vY2lwaGVyLWNvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdC8qKlxuXHQgKiBJU08vSUVDIDk3OTctMSBQYWRkaW5nIE1ldGhvZCAyLlxuXHQgKi9cblx0Q3J5cHRvSlMucGFkLklzbzk3OTcxID0ge1xuXHQgICAgcGFkOiBmdW5jdGlvbiAoZGF0YSwgYmxvY2tTaXplKSB7XG5cdCAgICAgICAgLy8gQWRkIDB4ODAgYnl0ZVxuXHQgICAgICAgIGRhdGEuY29uY2F0KENyeXB0b0pTLmxpYi5Xb3JkQXJyYXkuY3JlYXRlKFsweDgwMDAwMDAwXSwgMSkpO1xuXG5cdCAgICAgICAgLy8gWmVybyBwYWQgdGhlIHJlc3Rcblx0ICAgICAgICBDcnlwdG9KUy5wYWQuWmVyb1BhZGRpbmcucGFkKGRhdGEsIGJsb2NrU2l6ZSk7XG5cdCAgICB9LFxuXG5cdCAgICB1bnBhZDogZnVuY3Rpb24gKGRhdGEpIHtcblx0ICAgICAgICAvLyBSZW1vdmUgemVybyBwYWRkaW5nXG5cdCAgICAgICAgQ3J5cHRvSlMucGFkLlplcm9QYWRkaW5nLnVucGFkKGRhdGEpO1xuXG5cdCAgICAgICAgLy8gUmVtb3ZlIG9uZSBtb3JlIGJ5dGUgLS0gdGhlIDB4ODAgYnl0ZVxuXHQgICAgICAgIGRhdGEuc2lnQnl0ZXMtLTtcblx0ICAgIH1cblx0fTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5wYWQuSXNvOTc5NzE7XG5cbn0pKTsiLCI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5LCB1bmRlZikge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSwgcmVxdWlyZShcIi4vY2lwaGVyLWNvcmVcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiLCBcIi4vY2lwaGVyLWNvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdC8qKlxuXHQgKiBBIG5vb3AgcGFkZGluZyBzdHJhdGVneS5cblx0ICovXG5cdENyeXB0b0pTLnBhZC5Ob1BhZGRpbmcgPSB7XG5cdCAgICBwYWQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgIH0sXG5cblx0ICAgIHVucGFkOiBmdW5jdGlvbiAoKSB7XG5cdCAgICB9XG5cdH07XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMucGFkLk5vUGFkZGluZztcblxufSkpOyIsIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnksIHVuZGVmKSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpLCByZXF1aXJlKFwiLi9jaXBoZXItY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi9jaXBoZXItY29yZVwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0LyoqXG5cdCAqIFplcm8gcGFkZGluZyBzdHJhdGVneS5cblx0ICovXG5cdENyeXB0b0pTLnBhZC5aZXJvUGFkZGluZyA9IHtcblx0ICAgIHBhZDogZnVuY3Rpb24gKGRhdGEsIGJsb2NrU2l6ZSkge1xuXHQgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgdmFyIGJsb2NrU2l6ZUJ5dGVzID0gYmxvY2tTaXplICogNDtcblxuXHQgICAgICAgIC8vIFBhZFxuXHQgICAgICAgIGRhdGEuY2xhbXAoKTtcblx0ICAgICAgICBkYXRhLnNpZ0J5dGVzICs9IGJsb2NrU2l6ZUJ5dGVzIC0gKChkYXRhLnNpZ0J5dGVzICUgYmxvY2tTaXplQnl0ZXMpIHx8IGJsb2NrU2l6ZUJ5dGVzKTtcblx0ICAgIH0sXG5cblx0ICAgIHVucGFkOiBmdW5jdGlvbiAoZGF0YSkge1xuXHQgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgdmFyIGRhdGFXb3JkcyA9IGRhdGEud29yZHM7XG5cblx0ICAgICAgICAvLyBVbnBhZFxuXHQgICAgICAgIHZhciBpID0gZGF0YS5zaWdCeXRlcyAtIDE7XG5cdCAgICAgICAgd2hpbGUgKCEoKGRhdGFXb3Jkc1tpID4+PiAyXSA+Pj4gKDI0IC0gKGkgJSA0KSAqIDgpKSAmIDB4ZmYpKSB7XG5cdCAgICAgICAgICAgIGktLTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZGF0YS5zaWdCeXRlcyA9IGkgKyAxO1xuXHQgICAgfVxuXHR9O1xuXG5cblx0cmV0dXJuIENyeXB0b0pTLnBhZC5aZXJvUGFkZGluZztcblxufSkpOyIsIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnksIHVuZGVmKSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpLCByZXF1aXJlKFwiLi9zaGExXCIpLCByZXF1aXJlKFwiLi9obWFjXCIpKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXCIuL2NvcmVcIiwgXCIuL3NoYTFcIiwgXCIuL2htYWNcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdChmdW5jdGlvbiAoKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBCYXNlID0gQ19saWIuQmFzZTtcblx0ICAgIHZhciBXb3JkQXJyYXkgPSBDX2xpYi5Xb3JkQXJyYXk7XG5cdCAgICB2YXIgQ19hbGdvID0gQy5hbGdvO1xuXHQgICAgdmFyIFNIQTEgPSBDX2FsZ28uU0hBMTtcblx0ICAgIHZhciBITUFDID0gQ19hbGdvLkhNQUM7XG5cblx0ICAgIC8qKlxuXHQgICAgICogUGFzc3dvcmQtQmFzZWQgS2V5IERlcml2YXRpb24gRnVuY3Rpb24gMiBhbGdvcml0aG0uXG5cdCAgICAgKi9cblx0ICAgIHZhciBQQktERjIgPSBDX2FsZ28uUEJLREYyID0gQmFzZS5leHRlbmQoe1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBrZXlTaXplIFRoZSBrZXkgc2l6ZSBpbiB3b3JkcyB0byBnZW5lcmF0ZS4gRGVmYXVsdDogNCAoMTI4IGJpdHMpXG5cdCAgICAgICAgICogQHByb3BlcnR5IHtIYXNoZXJ9IGhhc2hlciBUaGUgaGFzaGVyIHRvIHVzZS4gRGVmYXVsdDogU0hBMVxuXHQgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBpdGVyYXRpb25zIFRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyB0byBwZXJmb3JtLiBEZWZhdWx0OiAxXG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY2ZnOiBCYXNlLmV4dGVuZCh7XG5cdCAgICAgICAgICAgIGtleVNpemU6IDEyOC8zMixcblx0ICAgICAgICAgICAgaGFzaGVyOiBTSEExLFxuXHQgICAgICAgICAgICBpdGVyYXRpb25zOiAxXG5cdCAgICAgICAgfSksXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBJbml0aWFsaXplcyBhIG5ld2x5IGNyZWF0ZWQga2V5IGRlcml2YXRpb24gZnVuY3Rpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY2ZnIChPcHRpb25hbCkgVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byB1c2UgZm9yIHRoZSBkZXJpdmF0aW9uLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIga2RmID0gQ3J5cHRvSlMuYWxnby5QQktERjIuY3JlYXRlKCk7XG5cdCAgICAgICAgICogICAgIHZhciBrZGYgPSBDcnlwdG9KUy5hbGdvLlBCS0RGMi5jcmVhdGUoeyBrZXlTaXplOiA4IH0pO1xuXHQgICAgICAgICAqICAgICB2YXIga2RmID0gQ3J5cHRvSlMuYWxnby5QQktERjIuY3JlYXRlKHsga2V5U2l6ZTogOCwgaXRlcmF0aW9uczogMTAwMCB9KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBpbml0OiBmdW5jdGlvbiAoY2ZnKSB7XG5cdCAgICAgICAgICAgIHRoaXMuY2ZnID0gdGhpcy5jZmcuZXh0ZW5kKGNmZyk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbXB1dGVzIHRoZSBQYXNzd29yZC1CYXNlZCBLZXkgRGVyaXZhdGlvbiBGdW5jdGlvbiAyLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBwYXNzd29yZCBUaGUgcGFzc3dvcmQuXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBzYWx0IEEgc2FsdC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIGRlcml2ZWQga2V5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIga2V5ID0ga2RmLmNvbXB1dGUocGFzc3dvcmQsIHNhbHQpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGNvbXB1dGU6IGZ1bmN0aW9uIChwYXNzd29yZCwgc2FsdCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgY2ZnID0gdGhpcy5jZmc7XG5cblx0ICAgICAgICAgICAgLy8gSW5pdCBITUFDXG5cdCAgICAgICAgICAgIHZhciBobWFjID0gSE1BQy5jcmVhdGUoY2ZnLmhhc2hlciwgcGFzc3dvcmQpO1xuXG5cdCAgICAgICAgICAgIC8vIEluaXRpYWwgdmFsdWVzXG5cdCAgICAgICAgICAgIHZhciBkZXJpdmVkS2V5ID0gV29yZEFycmF5LmNyZWF0ZSgpO1xuXHQgICAgICAgICAgICB2YXIgYmxvY2tJbmRleCA9IFdvcmRBcnJheS5jcmVhdGUoWzB4MDAwMDAwMDFdKTtcblxuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGRlcml2ZWRLZXlXb3JkcyA9IGRlcml2ZWRLZXkud29yZHM7XG5cdCAgICAgICAgICAgIHZhciBibG9ja0luZGV4V29yZHMgPSBibG9ja0luZGV4LndvcmRzO1xuXHQgICAgICAgICAgICB2YXIga2V5U2l6ZSA9IGNmZy5rZXlTaXplO1xuXHQgICAgICAgICAgICB2YXIgaXRlcmF0aW9ucyA9IGNmZy5pdGVyYXRpb25zO1xuXG5cdCAgICAgICAgICAgIC8vIEdlbmVyYXRlIGtleVxuXHQgICAgICAgICAgICB3aGlsZSAoZGVyaXZlZEtleVdvcmRzLmxlbmd0aCA8IGtleVNpemUpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBibG9jayA9IGhtYWMudXBkYXRlKHNhbHQpLmZpbmFsaXplKGJsb2NrSW5kZXgpO1xuXHQgICAgICAgICAgICAgICAgaG1hYy5yZXNldCgpO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgICAgIHZhciBibG9ja1dvcmRzID0gYmxvY2sud29yZHM7XG5cdCAgICAgICAgICAgICAgICB2YXIgYmxvY2tXb3Jkc0xlbmd0aCA9IGJsb2NrV29yZHMubGVuZ3RoO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBJdGVyYXRpb25zXG5cdCAgICAgICAgICAgICAgICB2YXIgaW50ZXJtZWRpYXRlID0gYmxvY2s7XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGl0ZXJhdGlvbnM7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIGludGVybWVkaWF0ZSA9IGhtYWMuZmluYWxpemUoaW50ZXJtZWRpYXRlKTtcblx0ICAgICAgICAgICAgICAgICAgICBobWFjLnJlc2V0KCk7XG5cblx0ICAgICAgICAgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICAgICAgICAgIHZhciBpbnRlcm1lZGlhdGVXb3JkcyA9IGludGVybWVkaWF0ZS53b3JkcztcblxuXHQgICAgICAgICAgICAgICAgICAgIC8vIFhPUiBpbnRlcm1lZGlhdGUgd2l0aCBibG9ja1xuXHQgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgYmxvY2tXb3Jkc0xlbmd0aDsgaisrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrV29yZHNbal0gXj0gaW50ZXJtZWRpYXRlV29yZHNbal07XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICBkZXJpdmVkS2V5LmNvbmNhdChibG9jayk7XG5cdCAgICAgICAgICAgICAgICBibG9ja0luZGV4V29yZHNbMF0rKztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBkZXJpdmVkS2V5LnNpZ0J5dGVzID0ga2V5U2l6ZSAqIDQ7XG5cblx0ICAgICAgICAgICAgcmV0dXJuIGRlcml2ZWRLZXk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogQ29tcHV0ZXMgdGhlIFBhc3N3b3JkLUJhc2VkIEtleSBEZXJpdmF0aW9uIEZ1bmN0aW9uIDIuXG5cdCAgICAgKlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBwYXNzd29yZCBUaGUgcGFzc3dvcmQuXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IHNhbHQgQSBzYWx0LlxuXHQgICAgICogQHBhcmFtIHtPYmplY3R9IGNmZyAoT3B0aW9uYWwpIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gdXNlIGZvciB0aGlzIGNvbXB1dGF0aW9uLlxuXHQgICAgICpcblx0ICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIGRlcml2ZWQga2V5LlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIga2V5ID0gQ3J5cHRvSlMuUEJLREYyKHBhc3N3b3JkLCBzYWx0KTtcblx0ICAgICAqICAgICB2YXIga2V5ID0gQ3J5cHRvSlMuUEJLREYyKHBhc3N3b3JkLCBzYWx0LCB7IGtleVNpemU6IDggfSk7XG5cdCAgICAgKiAgICAgdmFyIGtleSA9IENyeXB0b0pTLlBCS0RGMihwYXNzd29yZCwgc2FsdCwgeyBrZXlTaXplOiA4LCBpdGVyYXRpb25zOiAxMDAwIH0pO1xuXHQgICAgICovXG5cdCAgICBDLlBCS0RGMiA9IGZ1bmN0aW9uIChwYXNzd29yZCwgc2FsdCwgY2ZnKSB7XG5cdCAgICAgICAgcmV0dXJuIFBCS0RGMi5jcmVhdGUoY2ZnKS5jb21wdXRlKHBhc3N3b3JkLCBzYWx0KTtcblx0ICAgIH07XG5cdH0oKSk7XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMuUEJLREYyO1xuXG59KSk7IiwiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSwgdW5kZWYpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIiksIHJlcXVpcmUoXCIuL2VuYy1iYXNlNjRcIiksIHJlcXVpcmUoXCIuL21kNVwiKSwgcmVxdWlyZShcIi4vZXZwa2RmXCIpLCByZXF1aXJlKFwiLi9jaXBoZXItY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi9lbmMtYmFzZTY0XCIsIFwiLi9tZDVcIiwgXCIuL2V2cGtkZlwiLCBcIi4vY2lwaGVyLWNvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdChmdW5jdGlvbiAoKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBTdHJlYW1DaXBoZXIgPSBDX2xpYi5TdHJlYW1DaXBoZXI7XG5cdCAgICB2YXIgQ19hbGdvID0gQy5hbGdvO1xuXG5cdCAgICAvLyBSZXVzYWJsZSBvYmplY3RzXG5cdCAgICB2YXIgUyAgPSBbXTtcblx0ICAgIHZhciBDXyA9IFtdO1xuXHQgICAgdmFyIEcgID0gW107XG5cblx0ICAgIC8qKlxuXHQgICAgICogUmFiYml0IHN0cmVhbSBjaXBoZXIgYWxnb3JpdGhtLlxuXHQgICAgICpcblx0ICAgICAqIFRoaXMgaXMgYSBsZWdhY3kgdmVyc2lvbiB0aGF0IG5lZ2xlY3RlZCB0byBjb252ZXJ0IHRoZSBrZXkgdG8gbGl0dGxlLWVuZGlhbi5cblx0ICAgICAqIFRoaXMgZXJyb3IgZG9lc24ndCBhZmZlY3QgdGhlIGNpcGhlcidzIHNlY3VyaXR5LFxuXHQgICAgICogYnV0IGl0IGRvZXMgYWZmZWN0IGl0cyBjb21wYXRpYmlsaXR5IHdpdGggb3RoZXIgaW1wbGVtZW50YXRpb25zLlxuXHQgICAgICovXG5cdCAgICB2YXIgUmFiYml0TGVnYWN5ID0gQ19hbGdvLlJhYmJpdExlZ2FjeSA9IFN0cmVhbUNpcGhlci5leHRlbmQoe1xuXHQgICAgICAgIF9kb1Jlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgSyA9IHRoaXMuX2tleS53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIGl2ID0gdGhpcy5jZmcuaXY7XG5cblx0ICAgICAgICAgICAgLy8gR2VuZXJhdGUgaW5pdGlhbCBzdGF0ZSB2YWx1ZXNcblx0ICAgICAgICAgICAgdmFyIFggPSB0aGlzLl9YID0gW1xuXHQgICAgICAgICAgICAgICAgS1swXSwgKEtbM10gPDwgMTYpIHwgKEtbMl0gPj4+IDE2KSxcblx0ICAgICAgICAgICAgICAgIEtbMV0sIChLWzBdIDw8IDE2KSB8IChLWzNdID4+PiAxNiksXG5cdCAgICAgICAgICAgICAgICBLWzJdLCAoS1sxXSA8PCAxNikgfCAoS1swXSA+Pj4gMTYpLFxuXHQgICAgICAgICAgICAgICAgS1szXSwgKEtbMl0gPDwgMTYpIHwgKEtbMV0gPj4+IDE2KVxuXHQgICAgICAgICAgICBdO1xuXG5cdCAgICAgICAgICAgIC8vIEdlbmVyYXRlIGluaXRpYWwgY291bnRlciB2YWx1ZXNcblx0ICAgICAgICAgICAgdmFyIEMgPSB0aGlzLl9DID0gW1xuXHQgICAgICAgICAgICAgICAgKEtbMl0gPDwgMTYpIHwgKEtbMl0gPj4+IDE2KSwgKEtbMF0gJiAweGZmZmYwMDAwKSB8IChLWzFdICYgMHgwMDAwZmZmZiksXG5cdCAgICAgICAgICAgICAgICAoS1szXSA8PCAxNikgfCAoS1szXSA+Pj4gMTYpLCAoS1sxXSAmIDB4ZmZmZjAwMDApIHwgKEtbMl0gJiAweDAwMDBmZmZmKSxcblx0ICAgICAgICAgICAgICAgIChLWzBdIDw8IDE2KSB8IChLWzBdID4+PiAxNiksIChLWzJdICYgMHhmZmZmMDAwMCkgfCAoS1szXSAmIDB4MDAwMGZmZmYpLFxuXHQgICAgICAgICAgICAgICAgKEtbMV0gPDwgMTYpIHwgKEtbMV0gPj4+IDE2KSwgKEtbM10gJiAweGZmZmYwMDAwKSB8IChLWzBdICYgMHgwMDAwZmZmZilcblx0ICAgICAgICAgICAgXTtcblxuXHQgICAgICAgICAgICAvLyBDYXJyeSBiaXRcblx0ICAgICAgICAgICAgdGhpcy5fYiA9IDA7XG5cblx0ICAgICAgICAgICAgLy8gSXRlcmF0ZSB0aGUgc3lzdGVtIGZvdXIgdGltZXNcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA0OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIG5leHRTdGF0ZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gTW9kaWZ5IHRoZSBjb3VudGVyc1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgQ1tpXSBePSBYWyhpICsgNCkgJiA3XTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIElWIHNldHVwXG5cdCAgICAgICAgICAgIGlmIChpdikge1xuXHQgICAgICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgICAgICB2YXIgSVYgPSBpdi53b3Jkcztcblx0ICAgICAgICAgICAgICAgIHZhciBJVl8wID0gSVZbMF07XG5cdCAgICAgICAgICAgICAgICB2YXIgSVZfMSA9IElWWzFdO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBHZW5lcmF0ZSBmb3VyIHN1YnZlY3RvcnNcblx0ICAgICAgICAgICAgICAgIHZhciBpMCA9ICgoKElWXzAgPDwgOCkgfCAoSVZfMCA+Pj4gMjQpKSAmIDB4MDBmZjAwZmYpIHwgKCgoSVZfMCA8PCAyNCkgfCAoSVZfMCA+Pj4gOCkpICYgMHhmZjAwZmYwMCk7XG5cdCAgICAgICAgICAgICAgICB2YXIgaTIgPSAoKChJVl8xIDw8IDgpIHwgKElWXzEgPj4+IDI0KSkgJiAweDAwZmYwMGZmKSB8ICgoKElWXzEgPDwgMjQpIHwgKElWXzEgPj4+IDgpKSAmIDB4ZmYwMGZmMDApO1xuXHQgICAgICAgICAgICAgICAgdmFyIGkxID0gKGkwID4+PiAxNikgfCAoaTIgJiAweGZmZmYwMDAwKTtcblx0ICAgICAgICAgICAgICAgIHZhciBpMyA9IChpMiA8PCAxNikgIHwgKGkwICYgMHgwMDAwZmZmZik7XG5cblx0ICAgICAgICAgICAgICAgIC8vIE1vZGlmeSBjb3VudGVyIHZhbHVlc1xuXHQgICAgICAgICAgICAgICAgQ1swXSBePSBpMDtcblx0ICAgICAgICAgICAgICAgIENbMV0gXj0gaTE7XG5cdCAgICAgICAgICAgICAgICBDWzJdIF49IGkyO1xuXHQgICAgICAgICAgICAgICAgQ1szXSBePSBpMztcblx0ICAgICAgICAgICAgICAgIENbNF0gXj0gaTA7XG5cdCAgICAgICAgICAgICAgICBDWzVdIF49IGkxO1xuXHQgICAgICAgICAgICAgICAgQ1s2XSBePSBpMjtcblx0ICAgICAgICAgICAgICAgIENbN10gXj0gaTM7XG5cblx0ICAgICAgICAgICAgICAgIC8vIEl0ZXJhdGUgdGhlIHN5c3RlbSBmb3VyIHRpbWVzXG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIG5leHRTdGF0ZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb1Byb2Nlc3NCbG9jazogZnVuY3Rpb24gKE0sIG9mZnNldCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgWCA9IHRoaXMuX1g7XG5cblx0ICAgICAgICAgICAgLy8gSXRlcmF0ZSB0aGUgc3lzdGVtXG5cdCAgICAgICAgICAgIG5leHRTdGF0ZS5jYWxsKHRoaXMpO1xuXG5cdCAgICAgICAgICAgIC8vIEdlbmVyYXRlIGZvdXIga2V5c3RyZWFtIHdvcmRzXG5cdCAgICAgICAgICAgIFNbMF0gPSBYWzBdIF4gKFhbNV0gPj4+IDE2KSBeIChYWzNdIDw8IDE2KTtcblx0ICAgICAgICAgICAgU1sxXSA9IFhbMl0gXiAoWFs3XSA+Pj4gMTYpIF4gKFhbNV0gPDwgMTYpO1xuXHQgICAgICAgICAgICBTWzJdID0gWFs0XSBeIChYWzFdID4+PiAxNikgXiAoWFs3XSA8PCAxNik7XG5cdCAgICAgICAgICAgIFNbM10gPSBYWzZdIF4gKFhbM10gPj4+IDE2KSBeIChYWzFdIDw8IDE2KTtcblxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgLy8gU3dhcCBlbmRpYW5cblx0ICAgICAgICAgICAgICAgIFNbaV0gPSAoKChTW2ldIDw8IDgpICB8IChTW2ldID4+PiAyNCkpICYgMHgwMGZmMDBmZikgfFxuXHQgICAgICAgICAgICAgICAgICAgICAgICgoKFNbaV0gPDwgMjQpIHwgKFNbaV0gPj4+IDgpKSAgJiAweGZmMDBmZjAwKTtcblxuXHQgICAgICAgICAgICAgICAgLy8gRW5jcnlwdFxuXHQgICAgICAgICAgICAgICAgTVtvZmZzZXQgKyBpXSBePSBTW2ldO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGJsb2NrU2l6ZTogMTI4LzMyLFxuXG5cdCAgICAgICAgaXZTaXplOiA2NC8zMlxuXHQgICAgfSk7XG5cblx0ICAgIGZ1bmN0aW9uIG5leHRTdGF0ZSgpIHtcblx0ICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICB2YXIgWCA9IHRoaXMuX1g7XG5cdCAgICAgICAgdmFyIEMgPSB0aGlzLl9DO1xuXG5cdCAgICAgICAgLy8gU2F2ZSBvbGQgY291bnRlciB2YWx1ZXNcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykge1xuXHQgICAgICAgICAgICBDX1tpXSA9IENbaV07XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgLy8gQ2FsY3VsYXRlIG5ldyBjb3VudGVyIHZhbHVlc1xuXHQgICAgICAgIENbMF0gPSAoQ1swXSArIDB4NGQzNGQzNGQgKyB0aGlzLl9iKSB8IDA7XG5cdCAgICAgICAgQ1sxXSA9IChDWzFdICsgMHhkMzRkMzRkMyArICgoQ1swXSA+Pj4gMCkgPCAoQ19bMF0gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgQ1syXSA9IChDWzJdICsgMHgzNGQzNGQzNCArICgoQ1sxXSA+Pj4gMCkgPCAoQ19bMV0gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgQ1szXSA9IChDWzNdICsgMHg0ZDM0ZDM0ZCArICgoQ1syXSA+Pj4gMCkgPCAoQ19bMl0gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgQ1s0XSA9IChDWzRdICsgMHhkMzRkMzRkMyArICgoQ1szXSA+Pj4gMCkgPCAoQ19bM10gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgQ1s1XSA9IChDWzVdICsgMHgzNGQzNGQzNCArICgoQ1s0XSA+Pj4gMCkgPCAoQ19bNF0gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgQ1s2XSA9IChDWzZdICsgMHg0ZDM0ZDM0ZCArICgoQ1s1XSA+Pj4gMCkgPCAoQ19bNV0gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgQ1s3XSA9IChDWzddICsgMHhkMzRkMzRkMyArICgoQ1s2XSA+Pj4gMCkgPCAoQ19bNl0gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgdGhpcy5fYiA9IChDWzddID4+PiAwKSA8IChDX1s3XSA+Pj4gMCkgPyAxIDogMDtcblxuXHQgICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgZy12YWx1ZXNcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgZ3ggPSBYW2ldICsgQ1tpXTtcblxuXHQgICAgICAgICAgICAvLyBDb25zdHJ1Y3QgaGlnaCBhbmQgbG93IGFyZ3VtZW50IGZvciBzcXVhcmluZ1xuXHQgICAgICAgICAgICB2YXIgZ2EgPSBneCAmIDB4ZmZmZjtcblx0ICAgICAgICAgICAgdmFyIGdiID0gZ3ggPj4+IDE2O1xuXG5cdCAgICAgICAgICAgIC8vIENhbGN1bGF0ZSBoaWdoIGFuZCBsb3cgcmVzdWx0IG9mIHNxdWFyaW5nXG5cdCAgICAgICAgICAgIHZhciBnaCA9ICgoKChnYSAqIGdhKSA+Pj4gMTcpICsgZ2EgKiBnYikgPj4+IDE1KSArIGdiICogZ2I7XG5cdCAgICAgICAgICAgIHZhciBnbCA9ICgoKGd4ICYgMHhmZmZmMDAwMCkgKiBneCkgfCAwKSArICgoKGd4ICYgMHgwMDAwZmZmZikgKiBneCkgfCAwKTtcblxuXHQgICAgICAgICAgICAvLyBIaWdoIFhPUiBsb3dcblx0ICAgICAgICAgICAgR1tpXSA9IGdoIF4gZ2w7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgLy8gQ2FsY3VsYXRlIG5ldyBzdGF0ZSB2YWx1ZXNcblx0ICAgICAgICBYWzBdID0gKEdbMF0gKyAoKEdbN10gPDwgMTYpIHwgKEdbN10gPj4+IDE2KSkgKyAoKEdbNl0gPDwgMTYpIHwgKEdbNl0gPj4+IDE2KSkpIHwgMDtcblx0ICAgICAgICBYWzFdID0gKEdbMV0gKyAoKEdbMF0gPDwgOCkgIHwgKEdbMF0gPj4+IDI0KSkgKyBHWzddKSB8IDA7XG5cdCAgICAgICAgWFsyXSA9IChHWzJdICsgKChHWzFdIDw8IDE2KSB8IChHWzFdID4+PiAxNikpICsgKChHWzBdIDw8IDE2KSB8IChHWzBdID4+PiAxNikpKSB8IDA7XG5cdCAgICAgICAgWFszXSA9IChHWzNdICsgKChHWzJdIDw8IDgpICB8IChHWzJdID4+PiAyNCkpICsgR1sxXSkgfCAwO1xuXHQgICAgICAgIFhbNF0gPSAoR1s0XSArICgoR1szXSA8PCAxNikgfCAoR1szXSA+Pj4gMTYpKSArICgoR1syXSA8PCAxNikgfCAoR1syXSA+Pj4gMTYpKSkgfCAwO1xuXHQgICAgICAgIFhbNV0gPSAoR1s1XSArICgoR1s0XSA8PCA4KSAgfCAoR1s0XSA+Pj4gMjQpKSArIEdbM10pIHwgMDtcblx0ICAgICAgICBYWzZdID0gKEdbNl0gKyAoKEdbNV0gPDwgMTYpIHwgKEdbNV0gPj4+IDE2KSkgKyAoKEdbNF0gPDwgMTYpIHwgKEdbNF0gPj4+IDE2KSkpIHwgMDtcblx0ICAgICAgICBYWzddID0gKEdbN10gKyAoKEdbNl0gPDwgOCkgIHwgKEdbNl0gPj4+IDI0KSkgKyBHWzVdKSB8IDA7XG5cdCAgICB9XG5cblx0ICAgIC8qKlxuXHQgICAgICogU2hvcnRjdXQgZnVuY3Rpb25zIHRvIHRoZSBjaXBoZXIncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBjaXBoZXJ0ZXh0ID0gQ3J5cHRvSlMuUmFiYml0TGVnYWN5LmVuY3J5cHQobWVzc2FnZSwga2V5LCBjZmcpO1xuXHQgICAgICogICAgIHZhciBwbGFpbnRleHQgID0gQ3J5cHRvSlMuUmFiYml0TGVnYWN5LmRlY3J5cHQoY2lwaGVydGV4dCwga2V5LCBjZmcpO1xuXHQgICAgICovXG5cdCAgICBDLlJhYmJpdExlZ2FjeSA9IFN0cmVhbUNpcGhlci5fY3JlYXRlSGVscGVyKFJhYmJpdExlZ2FjeSk7XG5cdH0oKSk7XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMuUmFiYml0TGVnYWN5O1xuXG59KSk7IiwiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSwgdW5kZWYpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIiksIHJlcXVpcmUoXCIuL2VuYy1iYXNlNjRcIiksIHJlcXVpcmUoXCIuL21kNVwiKSwgcmVxdWlyZShcIi4vZXZwa2RmXCIpLCByZXF1aXJlKFwiLi9jaXBoZXItY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi9lbmMtYmFzZTY0XCIsIFwiLi9tZDVcIiwgXCIuL2V2cGtkZlwiLCBcIi4vY2lwaGVyLWNvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdChmdW5jdGlvbiAoKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBTdHJlYW1DaXBoZXIgPSBDX2xpYi5TdHJlYW1DaXBoZXI7XG5cdCAgICB2YXIgQ19hbGdvID0gQy5hbGdvO1xuXG5cdCAgICAvLyBSZXVzYWJsZSBvYmplY3RzXG5cdCAgICB2YXIgUyAgPSBbXTtcblx0ICAgIHZhciBDXyA9IFtdO1xuXHQgICAgdmFyIEcgID0gW107XG5cblx0ICAgIC8qKlxuXHQgICAgICogUmFiYml0IHN0cmVhbSBjaXBoZXIgYWxnb3JpdGhtXG5cdCAgICAgKi9cblx0ICAgIHZhciBSYWJiaXQgPSBDX2FsZ28uUmFiYml0ID0gU3RyZWFtQ2lwaGVyLmV4dGVuZCh7XG5cdCAgICAgICAgX2RvUmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBLID0gdGhpcy5fa2V5LndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgaXYgPSB0aGlzLmNmZy5pdjtcblxuXHQgICAgICAgICAgICAvLyBTd2FwIGVuZGlhblxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgS1tpXSA9ICgoKEtbaV0gPDwgOCkgIHwgKEtbaV0gPj4+IDI0KSkgJiAweDAwZmYwMGZmKSB8XG5cdCAgICAgICAgICAgICAgICAgICAgICAgKCgoS1tpXSA8PCAyNCkgfCAoS1tpXSA+Pj4gOCkpICAmIDB4ZmYwMGZmMDApO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gR2VuZXJhdGUgaW5pdGlhbCBzdGF0ZSB2YWx1ZXNcblx0ICAgICAgICAgICAgdmFyIFggPSB0aGlzLl9YID0gW1xuXHQgICAgICAgICAgICAgICAgS1swXSwgKEtbM10gPDwgMTYpIHwgKEtbMl0gPj4+IDE2KSxcblx0ICAgICAgICAgICAgICAgIEtbMV0sIChLWzBdIDw8IDE2KSB8IChLWzNdID4+PiAxNiksXG5cdCAgICAgICAgICAgICAgICBLWzJdLCAoS1sxXSA8PCAxNikgfCAoS1swXSA+Pj4gMTYpLFxuXHQgICAgICAgICAgICAgICAgS1szXSwgKEtbMl0gPDwgMTYpIHwgKEtbMV0gPj4+IDE2KVxuXHQgICAgICAgICAgICBdO1xuXG5cdCAgICAgICAgICAgIC8vIEdlbmVyYXRlIGluaXRpYWwgY291bnRlciB2YWx1ZXNcblx0ICAgICAgICAgICAgdmFyIEMgPSB0aGlzLl9DID0gW1xuXHQgICAgICAgICAgICAgICAgKEtbMl0gPDwgMTYpIHwgKEtbMl0gPj4+IDE2KSwgKEtbMF0gJiAweGZmZmYwMDAwKSB8IChLWzFdICYgMHgwMDAwZmZmZiksXG5cdCAgICAgICAgICAgICAgICAoS1szXSA8PCAxNikgfCAoS1szXSA+Pj4gMTYpLCAoS1sxXSAmIDB4ZmZmZjAwMDApIHwgKEtbMl0gJiAweDAwMDBmZmZmKSxcblx0ICAgICAgICAgICAgICAgIChLWzBdIDw8IDE2KSB8IChLWzBdID4+PiAxNiksIChLWzJdICYgMHhmZmZmMDAwMCkgfCAoS1szXSAmIDB4MDAwMGZmZmYpLFxuXHQgICAgICAgICAgICAgICAgKEtbMV0gPDwgMTYpIHwgKEtbMV0gPj4+IDE2KSwgKEtbM10gJiAweGZmZmYwMDAwKSB8IChLWzBdICYgMHgwMDAwZmZmZilcblx0ICAgICAgICAgICAgXTtcblxuXHQgICAgICAgICAgICAvLyBDYXJyeSBiaXRcblx0ICAgICAgICAgICAgdGhpcy5fYiA9IDA7XG5cblx0ICAgICAgICAgICAgLy8gSXRlcmF0ZSB0aGUgc3lzdGVtIGZvdXIgdGltZXNcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA0OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIG5leHRTdGF0ZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gTW9kaWZ5IHRoZSBjb3VudGVyc1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgQ1tpXSBePSBYWyhpICsgNCkgJiA3XTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIElWIHNldHVwXG5cdCAgICAgICAgICAgIGlmIChpdikge1xuXHQgICAgICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgICAgICB2YXIgSVYgPSBpdi53b3Jkcztcblx0ICAgICAgICAgICAgICAgIHZhciBJVl8wID0gSVZbMF07XG5cdCAgICAgICAgICAgICAgICB2YXIgSVZfMSA9IElWWzFdO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBHZW5lcmF0ZSBmb3VyIHN1YnZlY3RvcnNcblx0ICAgICAgICAgICAgICAgIHZhciBpMCA9ICgoKElWXzAgPDwgOCkgfCAoSVZfMCA+Pj4gMjQpKSAmIDB4MDBmZjAwZmYpIHwgKCgoSVZfMCA8PCAyNCkgfCAoSVZfMCA+Pj4gOCkpICYgMHhmZjAwZmYwMCk7XG5cdCAgICAgICAgICAgICAgICB2YXIgaTIgPSAoKChJVl8xIDw8IDgpIHwgKElWXzEgPj4+IDI0KSkgJiAweDAwZmYwMGZmKSB8ICgoKElWXzEgPDwgMjQpIHwgKElWXzEgPj4+IDgpKSAmIDB4ZmYwMGZmMDApO1xuXHQgICAgICAgICAgICAgICAgdmFyIGkxID0gKGkwID4+PiAxNikgfCAoaTIgJiAweGZmZmYwMDAwKTtcblx0ICAgICAgICAgICAgICAgIHZhciBpMyA9IChpMiA8PCAxNikgIHwgKGkwICYgMHgwMDAwZmZmZik7XG5cblx0ICAgICAgICAgICAgICAgIC8vIE1vZGlmeSBjb3VudGVyIHZhbHVlc1xuXHQgICAgICAgICAgICAgICAgQ1swXSBePSBpMDtcblx0ICAgICAgICAgICAgICAgIENbMV0gXj0gaTE7XG5cdCAgICAgICAgICAgICAgICBDWzJdIF49IGkyO1xuXHQgICAgICAgICAgICAgICAgQ1szXSBePSBpMztcblx0ICAgICAgICAgICAgICAgIENbNF0gXj0gaTA7XG5cdCAgICAgICAgICAgICAgICBDWzVdIF49IGkxO1xuXHQgICAgICAgICAgICAgICAgQ1s2XSBePSBpMjtcblx0ICAgICAgICAgICAgICAgIENbN10gXj0gaTM7XG5cblx0ICAgICAgICAgICAgICAgIC8vIEl0ZXJhdGUgdGhlIHN5c3RlbSBmb3VyIHRpbWVzXG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIG5leHRTdGF0ZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb1Byb2Nlc3NCbG9jazogZnVuY3Rpb24gKE0sIG9mZnNldCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgWCA9IHRoaXMuX1g7XG5cblx0ICAgICAgICAgICAgLy8gSXRlcmF0ZSB0aGUgc3lzdGVtXG5cdCAgICAgICAgICAgIG5leHRTdGF0ZS5jYWxsKHRoaXMpO1xuXG5cdCAgICAgICAgICAgIC8vIEdlbmVyYXRlIGZvdXIga2V5c3RyZWFtIHdvcmRzXG5cdCAgICAgICAgICAgIFNbMF0gPSBYWzBdIF4gKFhbNV0gPj4+IDE2KSBeIChYWzNdIDw8IDE2KTtcblx0ICAgICAgICAgICAgU1sxXSA9IFhbMl0gXiAoWFs3XSA+Pj4gMTYpIF4gKFhbNV0gPDwgMTYpO1xuXHQgICAgICAgICAgICBTWzJdID0gWFs0XSBeIChYWzFdID4+PiAxNikgXiAoWFs3XSA8PCAxNik7XG5cdCAgICAgICAgICAgIFNbM10gPSBYWzZdIF4gKFhbM10gPj4+IDE2KSBeIChYWzFdIDw8IDE2KTtcblxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgLy8gU3dhcCBlbmRpYW5cblx0ICAgICAgICAgICAgICAgIFNbaV0gPSAoKChTW2ldIDw8IDgpICB8IChTW2ldID4+PiAyNCkpICYgMHgwMGZmMDBmZikgfFxuXHQgICAgICAgICAgICAgICAgICAgICAgICgoKFNbaV0gPDwgMjQpIHwgKFNbaV0gPj4+IDgpKSAgJiAweGZmMDBmZjAwKTtcblxuXHQgICAgICAgICAgICAgICAgLy8gRW5jcnlwdFxuXHQgICAgICAgICAgICAgICAgTVtvZmZzZXQgKyBpXSBePSBTW2ldO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGJsb2NrU2l6ZTogMTI4LzMyLFxuXG5cdCAgICAgICAgaXZTaXplOiA2NC8zMlxuXHQgICAgfSk7XG5cblx0ICAgIGZ1bmN0aW9uIG5leHRTdGF0ZSgpIHtcblx0ICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICB2YXIgWCA9IHRoaXMuX1g7XG5cdCAgICAgICAgdmFyIEMgPSB0aGlzLl9DO1xuXG5cdCAgICAgICAgLy8gU2F2ZSBvbGQgY291bnRlciB2YWx1ZXNcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykge1xuXHQgICAgICAgICAgICBDX1tpXSA9IENbaV07XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgLy8gQ2FsY3VsYXRlIG5ldyBjb3VudGVyIHZhbHVlc1xuXHQgICAgICAgIENbMF0gPSAoQ1swXSArIDB4NGQzNGQzNGQgKyB0aGlzLl9iKSB8IDA7XG5cdCAgICAgICAgQ1sxXSA9IChDWzFdICsgMHhkMzRkMzRkMyArICgoQ1swXSA+Pj4gMCkgPCAoQ19bMF0gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgQ1syXSA9IChDWzJdICsgMHgzNGQzNGQzNCArICgoQ1sxXSA+Pj4gMCkgPCAoQ19bMV0gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgQ1szXSA9IChDWzNdICsgMHg0ZDM0ZDM0ZCArICgoQ1syXSA+Pj4gMCkgPCAoQ19bMl0gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgQ1s0XSA9IChDWzRdICsgMHhkMzRkMzRkMyArICgoQ1szXSA+Pj4gMCkgPCAoQ19bM10gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgQ1s1XSA9IChDWzVdICsgMHgzNGQzNGQzNCArICgoQ1s0XSA+Pj4gMCkgPCAoQ19bNF0gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgQ1s2XSA9IChDWzZdICsgMHg0ZDM0ZDM0ZCArICgoQ1s1XSA+Pj4gMCkgPCAoQ19bNV0gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgQ1s3XSA9IChDWzddICsgMHhkMzRkMzRkMyArICgoQ1s2XSA+Pj4gMCkgPCAoQ19bNl0gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgdGhpcy5fYiA9IChDWzddID4+PiAwKSA8IChDX1s3XSA+Pj4gMCkgPyAxIDogMDtcblxuXHQgICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgZy12YWx1ZXNcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgZ3ggPSBYW2ldICsgQ1tpXTtcblxuXHQgICAgICAgICAgICAvLyBDb25zdHJ1Y3QgaGlnaCBhbmQgbG93IGFyZ3VtZW50IGZvciBzcXVhcmluZ1xuXHQgICAgICAgICAgICB2YXIgZ2EgPSBneCAmIDB4ZmZmZjtcblx0ICAgICAgICAgICAgdmFyIGdiID0gZ3ggPj4+IDE2O1xuXG5cdCAgICAgICAgICAgIC8vIENhbGN1bGF0ZSBoaWdoIGFuZCBsb3cgcmVzdWx0IG9mIHNxdWFyaW5nXG5cdCAgICAgICAgICAgIHZhciBnaCA9ICgoKChnYSAqIGdhKSA+Pj4gMTcpICsgZ2EgKiBnYikgPj4+IDE1KSArIGdiICogZ2I7XG5cdCAgICAgICAgICAgIHZhciBnbCA9ICgoKGd4ICYgMHhmZmZmMDAwMCkgKiBneCkgfCAwKSArICgoKGd4ICYgMHgwMDAwZmZmZikgKiBneCkgfCAwKTtcblxuXHQgICAgICAgICAgICAvLyBIaWdoIFhPUiBsb3dcblx0ICAgICAgICAgICAgR1tpXSA9IGdoIF4gZ2w7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgLy8gQ2FsY3VsYXRlIG5ldyBzdGF0ZSB2YWx1ZXNcblx0ICAgICAgICBYWzBdID0gKEdbMF0gKyAoKEdbN10gPDwgMTYpIHwgKEdbN10gPj4+IDE2KSkgKyAoKEdbNl0gPDwgMTYpIHwgKEdbNl0gPj4+IDE2KSkpIHwgMDtcblx0ICAgICAgICBYWzFdID0gKEdbMV0gKyAoKEdbMF0gPDwgOCkgIHwgKEdbMF0gPj4+IDI0KSkgKyBHWzddKSB8IDA7XG5cdCAgICAgICAgWFsyXSA9IChHWzJdICsgKChHWzFdIDw8IDE2KSB8IChHWzFdID4+PiAxNikpICsgKChHWzBdIDw8IDE2KSB8IChHWzBdID4+PiAxNikpKSB8IDA7XG5cdCAgICAgICAgWFszXSA9IChHWzNdICsgKChHWzJdIDw8IDgpICB8IChHWzJdID4+PiAyNCkpICsgR1sxXSkgfCAwO1xuXHQgICAgICAgIFhbNF0gPSAoR1s0XSArICgoR1szXSA8PCAxNikgfCAoR1szXSA+Pj4gMTYpKSArICgoR1syXSA8PCAxNikgfCAoR1syXSA+Pj4gMTYpKSkgfCAwO1xuXHQgICAgICAgIFhbNV0gPSAoR1s1XSArICgoR1s0XSA8PCA4KSAgfCAoR1s0XSA+Pj4gMjQpKSArIEdbM10pIHwgMDtcblx0ICAgICAgICBYWzZdID0gKEdbNl0gKyAoKEdbNV0gPDwgMTYpIHwgKEdbNV0gPj4+IDE2KSkgKyAoKEdbNF0gPDwgMTYpIHwgKEdbNF0gPj4+IDE2KSkpIHwgMDtcblx0ICAgICAgICBYWzddID0gKEdbN10gKyAoKEdbNl0gPDwgOCkgIHwgKEdbNl0gPj4+IDI0KSkgKyBHWzVdKSB8IDA7XG5cdCAgICB9XG5cblx0ICAgIC8qKlxuXHQgICAgICogU2hvcnRjdXQgZnVuY3Rpb25zIHRvIHRoZSBjaXBoZXIncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBjaXBoZXJ0ZXh0ID0gQ3J5cHRvSlMuUmFiYml0LmVuY3J5cHQobWVzc2FnZSwga2V5LCBjZmcpO1xuXHQgICAgICogICAgIHZhciBwbGFpbnRleHQgID0gQ3J5cHRvSlMuUmFiYml0LmRlY3J5cHQoY2lwaGVydGV4dCwga2V5LCBjZmcpO1xuXHQgICAgICovXG5cdCAgICBDLlJhYmJpdCA9IFN0cmVhbUNpcGhlci5fY3JlYXRlSGVscGVyKFJhYmJpdCk7XG5cdH0oKSk7XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMuUmFiYml0O1xuXG59KSk7IiwiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSwgdW5kZWYpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIiksIHJlcXVpcmUoXCIuL2VuYy1iYXNlNjRcIiksIHJlcXVpcmUoXCIuL21kNVwiKSwgcmVxdWlyZShcIi4vZXZwa2RmXCIpLCByZXF1aXJlKFwiLi9jaXBoZXItY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi9lbmMtYmFzZTY0XCIsIFwiLi9tZDVcIiwgXCIuL2V2cGtkZlwiLCBcIi4vY2lwaGVyLWNvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdChmdW5jdGlvbiAoKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBTdHJlYW1DaXBoZXIgPSBDX2xpYi5TdHJlYW1DaXBoZXI7XG5cdCAgICB2YXIgQ19hbGdvID0gQy5hbGdvO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFJDNCBzdHJlYW0gY2lwaGVyIGFsZ29yaXRobS5cblx0ICAgICAqL1xuXHQgICAgdmFyIFJDNCA9IENfYWxnby5SQzQgPSBTdHJlYW1DaXBoZXIuZXh0ZW5kKHtcblx0ICAgICAgICBfZG9SZXNldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGtleSA9IHRoaXMuX2tleTtcblx0ICAgICAgICAgICAgdmFyIGtleVdvcmRzID0ga2V5LndvcmRzO1xuXHQgICAgICAgICAgICB2YXIga2V5U2lnQnl0ZXMgPSBrZXkuc2lnQnl0ZXM7XG5cblx0ICAgICAgICAgICAgLy8gSW5pdCBzYm94XG5cdCAgICAgICAgICAgIHZhciBTID0gdGhpcy5fUyA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDI1NjsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICBTW2ldID0gaTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIEtleSBzZXR1cFxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaiA9IDA7IGkgPCAyNTY7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdmFyIGtleUJ5dGVJbmRleCA9IGkgJSBrZXlTaWdCeXRlcztcblx0ICAgICAgICAgICAgICAgIHZhciBrZXlCeXRlID0gKGtleVdvcmRzW2tleUJ5dGVJbmRleCA+Pj4gMl0gPj4+ICgyNCAtIChrZXlCeXRlSW5kZXggJSA0KSAqIDgpKSAmIDB4ZmY7XG5cblx0ICAgICAgICAgICAgICAgIGogPSAoaiArIFNbaV0gKyBrZXlCeXRlKSAlIDI1NjtcblxuXHQgICAgICAgICAgICAgICAgLy8gU3dhcFxuXHQgICAgICAgICAgICAgICAgdmFyIHQgPSBTW2ldO1xuXHQgICAgICAgICAgICAgICAgU1tpXSA9IFNbal07XG5cdCAgICAgICAgICAgICAgICBTW2pdID0gdDtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIENvdW50ZXJzXG5cdCAgICAgICAgICAgIHRoaXMuX2kgPSB0aGlzLl9qID0gMDtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX2RvUHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiAoTSwgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIE1bb2Zmc2V0XSBePSBnZW5lcmF0ZUtleXN0cmVhbVdvcmQuY2FsbCh0aGlzKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAga2V5U2l6ZTogMjU2LzMyLFxuXG5cdCAgICAgICAgaXZTaXplOiAwXG5cdCAgICB9KTtcblxuXHQgICAgZnVuY3Rpb24gZ2VuZXJhdGVLZXlzdHJlYW1Xb3JkKCkge1xuXHQgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgIHZhciBTID0gdGhpcy5fUztcblx0ICAgICAgICB2YXIgaSA9IHRoaXMuX2k7XG5cdCAgICAgICAgdmFyIGogPSB0aGlzLl9qO1xuXG5cdCAgICAgICAgLy8gR2VuZXJhdGUga2V5c3RyZWFtIHdvcmRcblx0ICAgICAgICB2YXIga2V5c3RyZWFtV29yZCA9IDA7XG5cdCAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCA0OyBuKyspIHtcblx0ICAgICAgICAgICAgaSA9IChpICsgMSkgJSAyNTY7XG5cdCAgICAgICAgICAgIGogPSAoaiArIFNbaV0pICUgMjU2O1xuXG5cdCAgICAgICAgICAgIC8vIFN3YXBcblx0ICAgICAgICAgICAgdmFyIHQgPSBTW2ldO1xuXHQgICAgICAgICAgICBTW2ldID0gU1tqXTtcblx0ICAgICAgICAgICAgU1tqXSA9IHQ7XG5cblx0ICAgICAgICAgICAga2V5c3RyZWFtV29yZCB8PSBTWyhTW2ldICsgU1tqXSkgJSAyNTZdIDw8ICgyNCAtIG4gKiA4KTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgICAvLyBVcGRhdGUgY291bnRlcnNcblx0ICAgICAgICB0aGlzLl9pID0gaTtcblx0ICAgICAgICB0aGlzLl9qID0gajtcblxuXHQgICAgICAgIHJldHVybiBrZXlzdHJlYW1Xb3JkO1xuXHQgICAgfVxuXG5cdCAgICAvKipcblx0ICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9ucyB0byB0aGUgY2lwaGVyJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgY2lwaGVydGV4dCA9IENyeXB0b0pTLlJDNC5lbmNyeXB0KG1lc3NhZ2UsIGtleSwgY2ZnKTtcblx0ICAgICAqICAgICB2YXIgcGxhaW50ZXh0ICA9IENyeXB0b0pTLlJDNC5kZWNyeXB0KGNpcGhlcnRleHQsIGtleSwgY2ZnKTtcblx0ICAgICAqL1xuXHQgICAgQy5SQzQgPSBTdHJlYW1DaXBoZXIuX2NyZWF0ZUhlbHBlcihSQzQpO1xuXG5cdCAgICAvKipcblx0ICAgICAqIE1vZGlmaWVkIFJDNCBzdHJlYW0gY2lwaGVyIGFsZ29yaXRobS5cblx0ICAgICAqL1xuXHQgICAgdmFyIFJDNERyb3AgPSBDX2FsZ28uUkM0RHJvcCA9IFJDNC5leHRlbmQoe1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBkcm9wIFRoZSBudW1iZXIgb2Yga2V5c3RyZWFtIHdvcmRzIHRvIGRyb3AuIERlZmF1bHQgMTkyXG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY2ZnOiBSQzQuY2ZnLmV4dGVuZCh7XG5cdCAgICAgICAgICAgIGRyb3A6IDE5MlxuXHQgICAgICAgIH0pLFxuXG5cdCAgICAgICAgX2RvUmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgUkM0Ll9kb1Jlc2V0LmNhbGwodGhpcyk7XG5cblx0ICAgICAgICAgICAgLy8gRHJvcFxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5jZmcuZHJvcDsgaSA+IDA7IGktLSkge1xuXHQgICAgICAgICAgICAgICAgZ2VuZXJhdGVLZXlzdHJlYW1Xb3JkLmNhbGwodGhpcyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbnMgdG8gdGhlIGNpcGhlcidzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQGV4YW1wbGVcblx0ICAgICAqXG5cdCAgICAgKiAgICAgdmFyIGNpcGhlcnRleHQgPSBDcnlwdG9KUy5SQzREcm9wLmVuY3J5cHQobWVzc2FnZSwga2V5LCBjZmcpO1xuXHQgICAgICogICAgIHZhciBwbGFpbnRleHQgID0gQ3J5cHRvSlMuUkM0RHJvcC5kZWNyeXB0KGNpcGhlcnRleHQsIGtleSwgY2ZnKTtcblx0ICAgICAqL1xuXHQgICAgQy5SQzREcm9wID0gU3RyZWFtQ2lwaGVyLl9jcmVhdGVIZWxwZXIoUkM0RHJvcCk7XG5cdH0oKSk7XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMuUkM0O1xuXG59KSk7IiwiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQvKiogQHByZXNlcnZlXG5cdChjKSAyMDEyIGJ5IEPDqWRyaWMgTWVzbmlsLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5cdFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuXHQgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cdCAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuXHRUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG5cdCovXG5cblx0KGZ1bmN0aW9uIChNYXRoKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBXb3JkQXJyYXkgPSBDX2xpYi5Xb3JkQXJyYXk7XG5cdCAgICB2YXIgSGFzaGVyID0gQ19saWIuSGFzaGVyO1xuXHQgICAgdmFyIENfYWxnbyA9IEMuYWxnbztcblxuXHQgICAgLy8gQ29uc3RhbnRzIHRhYmxlXG5cdCAgICB2YXIgX3psID0gV29yZEFycmF5LmNyZWF0ZShbXG5cdCAgICAgICAgMCwgIDEsICAyLCAgMywgIDQsICA1LCAgNiwgIDcsICA4LCAgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSxcblx0ICAgICAgICA3LCAgNCwgMTMsICAxLCAxMCwgIDYsIDE1LCAgMywgMTIsICAwLCAgOSwgIDUsICAyLCAxNCwgMTEsICA4LFxuXHQgICAgICAgIDMsIDEwLCAxNCwgIDQsICA5LCAxNSwgIDgsICAxLCAgMiwgIDcsICAwLCAgNiwgMTMsIDExLCAgNSwgMTIsXG5cdCAgICAgICAgMSwgIDksIDExLCAxMCwgIDAsICA4LCAxMiwgIDQsIDEzLCAgMywgIDcsIDE1LCAxNCwgIDUsICA2LCAgMixcblx0ICAgICAgICA0LCAgMCwgIDUsICA5LCAgNywgMTIsICAyLCAxMCwgMTQsICAxLCAgMywgIDgsIDExLCAgNiwgMTUsIDEzXSk7XG5cdCAgICB2YXIgX3pyID0gV29yZEFycmF5LmNyZWF0ZShbXG5cdCAgICAgICAgNSwgMTQsICA3LCAgMCwgIDksICAyLCAxMSwgIDQsIDEzLCAgNiwgMTUsICA4LCAgMSwgMTAsICAzLCAxMixcblx0ICAgICAgICA2LCAxMSwgIDMsICA3LCAgMCwgMTMsICA1LCAxMCwgMTQsIDE1LCAgOCwgMTIsICA0LCAgOSwgIDEsICAyLFxuXHQgICAgICAgIDE1LCAgNSwgIDEsICAzLCAgNywgMTQsICA2LCAgOSwgMTEsICA4LCAxMiwgIDIsIDEwLCAgMCwgIDQsIDEzLFxuXHQgICAgICAgIDgsICA2LCAgNCwgIDEsICAzLCAxMSwgMTUsICAwLCAgNSwgMTIsICAyLCAxMywgIDksICA3LCAxMCwgMTQsXG5cdCAgICAgICAgMTIsIDE1LCAxMCwgIDQsICAxLCAgNSwgIDgsICA3LCAgNiwgIDIsIDEzLCAxNCwgIDAsICAzLCAgOSwgMTFdKTtcblx0ICAgIHZhciBfc2wgPSBXb3JkQXJyYXkuY3JlYXRlKFtcblx0ICAgICAgICAgMTEsIDE0LCAxNSwgMTIsICA1LCAgOCwgIDcsICA5LCAxMSwgMTMsIDE0LCAxNSwgIDYsICA3LCAgOSwgIDgsXG5cdCAgICAgICAgNywgNiwgICA4LCAxMywgMTEsICA5LCAgNywgMTUsICA3LCAxMiwgMTUsICA5LCAxMSwgIDcsIDEzLCAxMixcblx0ICAgICAgICAxMSwgMTMsICA2LCAgNywgMTQsICA5LCAxMywgMTUsIDE0LCAgOCwgMTMsICA2LCAgNSwgMTIsICA3LCAgNSxcblx0ICAgICAgICAgIDExLCAxMiwgMTQsIDE1LCAxNCwgMTUsICA5LCAgOCwgIDksIDE0LCAgNSwgIDYsICA4LCAgNiwgIDUsIDEyLFxuXHQgICAgICAgIDksIDE1LCAgNSwgMTEsICA2LCAgOCwgMTMsIDEyLCAgNSwgMTIsIDEzLCAxNCwgMTEsICA4LCAgNSwgIDYgXSk7XG5cdCAgICB2YXIgX3NyID0gV29yZEFycmF5LmNyZWF0ZShbXG5cdCAgICAgICAgOCwgIDksICA5LCAxMSwgMTMsIDE1LCAxNSwgIDUsICA3LCAgNywgIDgsIDExLCAxNCwgMTQsIDEyLCAgNixcblx0ICAgICAgICA5LCAxMywgMTUsICA3LCAxMiwgIDgsICA5LCAxMSwgIDcsICA3LCAxMiwgIDcsICA2LCAxNSwgMTMsIDExLFxuXHQgICAgICAgIDksICA3LCAxNSwgMTEsICA4LCAgNiwgIDYsIDE0LCAxMiwgMTMsICA1LCAxNCwgMTMsIDEzLCAgNywgIDUsXG5cdCAgICAgICAgMTUsICA1LCAgOCwgMTEsIDE0LCAxNCwgIDYsIDE0LCAgNiwgIDksIDEyLCAgOSwgMTIsICA1LCAxNSwgIDgsXG5cdCAgICAgICAgOCwgIDUsIDEyLCAgOSwgMTIsICA1LCAxNCwgIDYsICA4LCAxMywgIDYsICA1LCAxNSwgMTMsIDExLCAxMSBdKTtcblxuXHQgICAgdmFyIF9obCA9ICBXb3JkQXJyYXkuY3JlYXRlKFsgMHgwMDAwMDAwMCwgMHg1QTgyNzk5OSwgMHg2RUQ5RUJBMSwgMHg4RjFCQkNEQywgMHhBOTUzRkQ0RV0pO1xuXHQgICAgdmFyIF9ociA9ICBXb3JkQXJyYXkuY3JlYXRlKFsgMHg1MEEyOEJFNiwgMHg1QzRERDEyNCwgMHg2RDcwM0VGMywgMHg3QTZENzZFOSwgMHgwMDAwMDAwMF0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFJJUEVNRDE2MCBoYXNoIGFsZ29yaXRobS5cblx0ICAgICAqL1xuXHQgICAgdmFyIFJJUEVNRDE2MCA9IENfYWxnby5SSVBFTUQxNjAgPSBIYXNoZXIuZXh0ZW5kKHtcblx0ICAgICAgICBfZG9SZXNldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB0aGlzLl9oYXNoICA9IFdvcmRBcnJheS5jcmVhdGUoWzB4Njc0NTIzMDEsIDB4RUZDREFCODksIDB4OThCQURDRkUsIDB4MTAzMjU0NzYsIDB4QzNEMkUxRjBdKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX2RvUHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiAoTSwgb2Zmc2V0KSB7XG5cblx0ICAgICAgICAgICAgLy8gU3dhcCBlbmRpYW5cblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxNjsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgICAgIHZhciBvZmZzZXRfaSA9IG9mZnNldCArIGk7XG5cdCAgICAgICAgICAgICAgICB2YXIgTV9vZmZzZXRfaSA9IE1bb2Zmc2V0X2ldO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBTd2FwXG5cdCAgICAgICAgICAgICAgICBNW29mZnNldF9pXSA9IChcblx0ICAgICAgICAgICAgICAgICAgICAoKChNX29mZnNldF9pIDw8IDgpICB8IChNX29mZnNldF9pID4+PiAyNCkpICYgMHgwMGZmMDBmZikgfFxuXHQgICAgICAgICAgICAgICAgICAgICgoKE1fb2Zmc2V0X2kgPDwgMjQpIHwgKE1fb2Zmc2V0X2kgPj4+IDgpKSAgJiAweGZmMDBmZjAwKVxuXHQgICAgICAgICAgICAgICAgKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgSCAgPSB0aGlzLl9oYXNoLndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgaGwgPSBfaGwud29yZHM7XG5cdCAgICAgICAgICAgIHZhciBociA9IF9oci53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIHpsID0gX3psLndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgenIgPSBfenIud29yZHM7XG5cdCAgICAgICAgICAgIHZhciBzbCA9IF9zbC53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIHNyID0gX3NyLndvcmRzO1xuXG5cdCAgICAgICAgICAgIC8vIFdvcmtpbmcgdmFyaWFibGVzXG5cdCAgICAgICAgICAgIHZhciBhbCwgYmwsIGNsLCBkbCwgZWw7XG5cdCAgICAgICAgICAgIHZhciBhciwgYnIsIGNyLCBkciwgZXI7XG5cblx0ICAgICAgICAgICAgYXIgPSBhbCA9IEhbMF07XG5cdCAgICAgICAgICAgIGJyID0gYmwgPSBIWzFdO1xuXHQgICAgICAgICAgICBjciA9IGNsID0gSFsyXTtcblx0ICAgICAgICAgICAgZHIgPSBkbCA9IEhbM107XG5cdCAgICAgICAgICAgIGVyID0gZWwgPSBIWzRdO1xuXHQgICAgICAgICAgICAvLyBDb21wdXRhdGlvblxuXHQgICAgICAgICAgICB2YXIgdDtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA4MDsgaSArPSAxKSB7XG5cdCAgICAgICAgICAgICAgICB0ID0gKGFsICsgIE1bb2Zmc2V0K3psW2ldXSl8MDtcblx0ICAgICAgICAgICAgICAgIGlmIChpPDE2KXtcblx0XHQgICAgICAgICAgICB0ICs9ICBmMShibCxjbCxkbCkgKyBobFswXTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaTwzMikge1xuXHRcdCAgICAgICAgICAgIHQgKz0gIGYyKGJsLGNsLGRsKSArIGhsWzFdO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpPDQ4KSB7XG5cdFx0ICAgICAgICAgICAgdCArPSAgZjMoYmwsY2wsZGwpICsgaGxbMl07XG5cdCAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGk8NjQpIHtcblx0XHQgICAgICAgICAgICB0ICs9ICBmNChibCxjbCxkbCkgKyBobFszXTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ly8gaWYgKGk8ODApIHtcblx0XHQgICAgICAgICAgICB0ICs9ICBmNShibCxjbCxkbCkgKyBobFs0XTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHQgPSB0fDA7XG5cdCAgICAgICAgICAgICAgICB0ID0gIHJvdGwodCxzbFtpXSk7XG5cdCAgICAgICAgICAgICAgICB0ID0gKHQrZWwpfDA7XG5cdCAgICAgICAgICAgICAgICBhbCA9IGVsO1xuXHQgICAgICAgICAgICAgICAgZWwgPSBkbDtcblx0ICAgICAgICAgICAgICAgIGRsID0gcm90bChjbCwgMTApO1xuXHQgICAgICAgICAgICAgICAgY2wgPSBibDtcblx0ICAgICAgICAgICAgICAgIGJsID0gdDtcblxuXHQgICAgICAgICAgICAgICAgdCA9IChhciArIE1bb2Zmc2V0K3pyW2ldXSl8MDtcblx0ICAgICAgICAgICAgICAgIGlmIChpPDE2KXtcblx0XHQgICAgICAgICAgICB0ICs9ICBmNShicixjcixkcikgKyBoclswXTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaTwzMikge1xuXHRcdCAgICAgICAgICAgIHQgKz0gIGY0KGJyLGNyLGRyKSArIGhyWzFdO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpPDQ4KSB7XG5cdFx0ICAgICAgICAgICAgdCArPSAgZjMoYnIsY3IsZHIpICsgaHJbMl07XG5cdCAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGk8NjQpIHtcblx0XHQgICAgICAgICAgICB0ICs9ICBmMihicixjcixkcikgKyBoclszXTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ly8gaWYgKGk8ODApIHtcblx0XHQgICAgICAgICAgICB0ICs9ICBmMShicixjcixkcikgKyBocls0XTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHQgPSB0fDA7XG5cdCAgICAgICAgICAgICAgICB0ID0gIHJvdGwodCxzcltpXSkgO1xuXHQgICAgICAgICAgICAgICAgdCA9ICh0K2VyKXwwO1xuXHQgICAgICAgICAgICAgICAgYXIgPSBlcjtcblx0ICAgICAgICAgICAgICAgIGVyID0gZHI7XG5cdCAgICAgICAgICAgICAgICBkciA9IHJvdGwoY3IsIDEwKTtcblx0ICAgICAgICAgICAgICAgIGNyID0gYnI7XG5cdCAgICAgICAgICAgICAgICBiciA9IHQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgLy8gSW50ZXJtZWRpYXRlIGhhc2ggdmFsdWVcblx0ICAgICAgICAgICAgdCAgICA9IChIWzFdICsgY2wgKyBkcil8MDtcblx0ICAgICAgICAgICAgSFsxXSA9IChIWzJdICsgZGwgKyBlcil8MDtcblx0ICAgICAgICAgICAgSFsyXSA9IChIWzNdICsgZWwgKyBhcil8MDtcblx0ICAgICAgICAgICAgSFszXSA9IChIWzRdICsgYWwgKyBicil8MDtcblx0ICAgICAgICAgICAgSFs0XSA9IChIWzBdICsgYmwgKyBjcil8MDtcblx0ICAgICAgICAgICAgSFswXSA9ICB0O1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBfZG9GaW5hbGl6ZTogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLl9kYXRhO1xuXHQgICAgICAgICAgICB2YXIgZGF0YVdvcmRzID0gZGF0YS53b3JkcztcblxuXHQgICAgICAgICAgICB2YXIgbkJpdHNUb3RhbCA9IHRoaXMuX25EYXRhQnl0ZXMgKiA4O1xuXHQgICAgICAgICAgICB2YXIgbkJpdHNMZWZ0ID0gZGF0YS5zaWdCeXRlcyAqIDg7XG5cblx0ICAgICAgICAgICAgLy8gQWRkIHBhZGRpbmdcblx0ICAgICAgICAgICAgZGF0YVdvcmRzW25CaXRzTGVmdCA+Pj4gNV0gfD0gMHg4MCA8PCAoMjQgLSBuQml0c0xlZnQgJSAzMik7XG5cdCAgICAgICAgICAgIGRhdGFXb3Jkc1soKChuQml0c0xlZnQgKyA2NCkgPj4+IDkpIDw8IDQpICsgMTRdID0gKFxuXHQgICAgICAgICAgICAgICAgKCgobkJpdHNUb3RhbCA8PCA4KSAgfCAobkJpdHNUb3RhbCA+Pj4gMjQpKSAmIDB4MDBmZjAwZmYpIHxcblx0ICAgICAgICAgICAgICAgICgoKG5CaXRzVG90YWwgPDwgMjQpIHwgKG5CaXRzVG90YWwgPj4+IDgpKSAgJiAweGZmMDBmZjAwKVxuXHQgICAgICAgICAgICApO1xuXHQgICAgICAgICAgICBkYXRhLnNpZ0J5dGVzID0gKGRhdGFXb3Jkcy5sZW5ndGggKyAxKSAqIDQ7XG5cblx0ICAgICAgICAgICAgLy8gSGFzaCBmaW5hbCBibG9ja3Ncblx0ICAgICAgICAgICAgdGhpcy5fcHJvY2VzcygpO1xuXG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgaGFzaCA9IHRoaXMuX2hhc2g7XG5cdCAgICAgICAgICAgIHZhciBIID0gaGFzaC53b3JkcztcblxuXHQgICAgICAgICAgICAvLyBTd2FwIGVuZGlhblxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDU7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgICAgIHZhciBIX2kgPSBIW2ldO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBTd2FwXG5cdCAgICAgICAgICAgICAgICBIW2ldID0gKCgoSF9pIDw8IDgpICB8IChIX2kgPj4+IDI0KSkgJiAweDAwZmYwMGZmKSB8XG5cdCAgICAgICAgICAgICAgICAgICAgICAgKCgoSF9pIDw8IDI0KSB8IChIX2kgPj4+IDgpKSAgJiAweGZmMDBmZjAwKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIFJldHVybiBmaW5hbCBjb21wdXRlZCBoYXNoXG5cdCAgICAgICAgICAgIHJldHVybiBoYXNoO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgY2xvbmUgPSBIYXNoZXIuY2xvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAgICAgY2xvbmUuX2hhc2ggPSB0aGlzLl9oYXNoLmNsb25lKCk7XG5cblx0ICAgICAgICAgICAgcmV0dXJuIGNsb25lO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cblx0ICAgIGZ1bmN0aW9uIGYxKHgsIHksIHopIHtcblx0ICAgICAgICByZXR1cm4gKCh4KSBeICh5KSBeICh6KSk7XG5cblx0ICAgIH1cblxuXHQgICAgZnVuY3Rpb24gZjIoeCwgeSwgeikge1xuXHQgICAgICAgIHJldHVybiAoKCh4KSYoeSkpIHwgKCh+eCkmKHopKSk7XG5cdCAgICB9XG5cblx0ICAgIGZ1bmN0aW9uIGYzKHgsIHksIHopIHtcblx0ICAgICAgICByZXR1cm4gKCgoeCkgfCAofih5KSkpIF4gKHopKTtcblx0ICAgIH1cblxuXHQgICAgZnVuY3Rpb24gZjQoeCwgeSwgeikge1xuXHQgICAgICAgIHJldHVybiAoKCh4KSAmICh6KSkgfCAoKHkpJih+KHopKSkpO1xuXHQgICAgfVxuXG5cdCAgICBmdW5jdGlvbiBmNSh4LCB5LCB6KSB7XG5cdCAgICAgICAgcmV0dXJuICgoeCkgXiAoKHkpIHwofih6KSkpKTtcblxuXHQgICAgfVxuXG5cdCAgICBmdW5jdGlvbiByb3RsKHgsbikge1xuXHQgICAgICAgIHJldHVybiAoeDw8bikgfCAoeD4+PigzMi1uKSk7XG5cdCAgICB9XG5cblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgaGFzaGVyJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gaGFzaC5cblx0ICAgICAqXG5cdCAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBoYXNoLlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgaGFzaCA9IENyeXB0b0pTLlJJUEVNRDE2MCgnbWVzc2FnZScpO1xuXHQgICAgICogICAgIHZhciBoYXNoID0gQ3J5cHRvSlMuUklQRU1EMTYwKHdvcmRBcnJheSk7XG5cdCAgICAgKi9cblx0ICAgIEMuUklQRU1EMTYwID0gSGFzaGVyLl9jcmVhdGVIZWxwZXIoUklQRU1EMTYwKTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgSE1BQydzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGhhc2guXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IGtleSBUaGUgc2VjcmV0IGtleS5cblx0ICAgICAqXG5cdCAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBITUFDLlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgaG1hYyA9IENyeXB0b0pTLkhtYWNSSVBFTUQxNjAobWVzc2FnZSwga2V5KTtcblx0ICAgICAqL1xuXHQgICAgQy5IbWFjUklQRU1EMTYwID0gSGFzaGVyLl9jcmVhdGVIbWFjSGVscGVyKFJJUEVNRDE2MCk7XG5cdH0oTWF0aCkpO1xuXG5cblx0cmV0dXJuIENyeXB0b0pTLlJJUEVNRDE2MDtcblxufSkpOyIsIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0KGZ1bmN0aW9uICgpIHtcblx0ICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgdmFyIEMgPSBDcnlwdG9KUztcblx0ICAgIHZhciBDX2xpYiA9IEMubGliO1xuXHQgICAgdmFyIFdvcmRBcnJheSA9IENfbGliLldvcmRBcnJheTtcblx0ICAgIHZhciBIYXNoZXIgPSBDX2xpYi5IYXNoZXI7XG5cdCAgICB2YXIgQ19hbGdvID0gQy5hbGdvO1xuXG5cdCAgICAvLyBSZXVzYWJsZSBvYmplY3Rcblx0ICAgIHZhciBXID0gW107XG5cblx0ICAgIC8qKlxuXHQgICAgICogU0hBLTEgaGFzaCBhbGdvcml0aG0uXG5cdCAgICAgKi9cblx0ICAgIHZhciBTSEExID0gQ19hbGdvLlNIQTEgPSBIYXNoZXIuZXh0ZW5kKHtcblx0ICAgICAgICBfZG9SZXNldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB0aGlzLl9oYXNoID0gbmV3IFdvcmRBcnJheS5pbml0KFtcblx0ICAgICAgICAgICAgICAgIDB4Njc0NTIzMDEsIDB4ZWZjZGFiODksXG5cdCAgICAgICAgICAgICAgICAweDk4YmFkY2ZlLCAweDEwMzI1NDc2LFxuXHQgICAgICAgICAgICAgICAgMHhjM2QyZTFmMFxuXHQgICAgICAgICAgICBdKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX2RvUHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiAoTSwgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgIHZhciBIID0gdGhpcy5faGFzaC53b3JkcztcblxuXHQgICAgICAgICAgICAvLyBXb3JraW5nIHZhcmlhYmxlc1xuXHQgICAgICAgICAgICB2YXIgYSA9IEhbMF07XG5cdCAgICAgICAgICAgIHZhciBiID0gSFsxXTtcblx0ICAgICAgICAgICAgdmFyIGMgPSBIWzJdO1xuXHQgICAgICAgICAgICB2YXIgZCA9IEhbM107XG5cdCAgICAgICAgICAgIHZhciBlID0gSFs0XTtcblxuXHQgICAgICAgICAgICAvLyBDb21wdXRhdGlvblxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDgwOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIGlmIChpIDwgMTYpIHtcblx0ICAgICAgICAgICAgICAgICAgICBXW2ldID0gTVtvZmZzZXQgKyBpXSB8IDA7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBuID0gV1tpIC0gM10gXiBXW2kgLSA4XSBeIFdbaSAtIDE0XSBeIFdbaSAtIDE2XTtcblx0ICAgICAgICAgICAgICAgICAgICBXW2ldID0gKG4gPDwgMSkgfCAobiA+Pj4gMzEpO1xuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICB2YXIgdCA9ICgoYSA8PCA1KSB8IChhID4+PiAyNykpICsgZSArIFdbaV07XG5cdCAgICAgICAgICAgICAgICBpZiAoaSA8IDIwKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdCArPSAoKGIgJiBjKSB8ICh+YiAmIGQpKSArIDB4NWE4Mjc5OTk7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGkgPCA0MCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHQgKz0gKGIgXiBjIF4gZCkgKyAweDZlZDllYmExO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpIDwgNjApIHtcblx0ICAgICAgICAgICAgICAgICAgICB0ICs9ICgoYiAmIGMpIHwgKGIgJiBkKSB8IChjICYgZCkpIC0gMHg3MGU0NDMyNDtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSAvKiBpZiAoaSA8IDgwKSAqLyB7XG5cdCAgICAgICAgICAgICAgICAgICAgdCArPSAoYiBeIGMgXiBkKSAtIDB4MzU5ZDNlMmE7XG5cdCAgICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICAgIGUgPSBkO1xuXHQgICAgICAgICAgICAgICAgZCA9IGM7XG5cdCAgICAgICAgICAgICAgICBjID0gKGIgPDwgMzApIHwgKGIgPj4+IDIpO1xuXHQgICAgICAgICAgICAgICAgYiA9IGE7XG5cdCAgICAgICAgICAgICAgICBhID0gdDtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIEludGVybWVkaWF0ZSBoYXNoIHZhbHVlXG5cdCAgICAgICAgICAgIEhbMF0gPSAoSFswXSArIGEpIHwgMDtcblx0ICAgICAgICAgICAgSFsxXSA9IChIWzFdICsgYikgfCAwO1xuXHQgICAgICAgICAgICBIWzJdID0gKEhbMl0gKyBjKSB8IDA7XG5cdCAgICAgICAgICAgIEhbM10gPSAoSFszXSArIGQpIHwgMDtcblx0ICAgICAgICAgICAgSFs0XSA9IChIWzRdICsgZSkgfCAwO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBfZG9GaW5hbGl6ZTogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLl9kYXRhO1xuXHQgICAgICAgICAgICB2YXIgZGF0YVdvcmRzID0gZGF0YS53b3JkcztcblxuXHQgICAgICAgICAgICB2YXIgbkJpdHNUb3RhbCA9IHRoaXMuX25EYXRhQnl0ZXMgKiA4O1xuXHQgICAgICAgICAgICB2YXIgbkJpdHNMZWZ0ID0gZGF0YS5zaWdCeXRlcyAqIDg7XG5cblx0ICAgICAgICAgICAgLy8gQWRkIHBhZGRpbmdcblx0ICAgICAgICAgICAgZGF0YVdvcmRzW25CaXRzTGVmdCA+Pj4gNV0gfD0gMHg4MCA8PCAoMjQgLSBuQml0c0xlZnQgJSAzMik7XG5cdCAgICAgICAgICAgIGRhdGFXb3Jkc1soKChuQml0c0xlZnQgKyA2NCkgPj4+IDkpIDw8IDQpICsgMTRdID0gTWF0aC5mbG9vcihuQml0c1RvdGFsIC8gMHgxMDAwMDAwMDApO1xuXHQgICAgICAgICAgICBkYXRhV29yZHNbKCgobkJpdHNMZWZ0ICsgNjQpID4+PiA5KSA8PCA0KSArIDE1XSA9IG5CaXRzVG90YWw7XG5cdCAgICAgICAgICAgIGRhdGEuc2lnQnl0ZXMgPSBkYXRhV29yZHMubGVuZ3RoICogNDtcblxuXHQgICAgICAgICAgICAvLyBIYXNoIGZpbmFsIGJsb2Nrc1xuXHQgICAgICAgICAgICB0aGlzLl9wcm9jZXNzKCk7XG5cblx0ICAgICAgICAgICAgLy8gUmV0dXJuIGZpbmFsIGNvbXB1dGVkIGhhc2hcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2hhc2g7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBjbG9uZSA9IEhhc2hlci5jbG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgICAgICBjbG9uZS5faGFzaCA9IHRoaXMuX2hhc2guY2xvbmUoKTtcblxuXHQgICAgICAgICAgICByZXR1cm4gY2xvbmU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogU2hvcnRjdXQgZnVuY3Rpb24gdG8gdGhlIGhhc2hlcidzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGhhc2guXG5cdCAgICAgKlxuXHQgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgaGFzaC5cblx0ICAgICAqXG5cdCAgICAgKiBAc3RhdGljXG5cdCAgICAgKlxuXHQgICAgICogQGV4YW1wbGVcblx0ICAgICAqXG5cdCAgICAgKiAgICAgdmFyIGhhc2ggPSBDcnlwdG9KUy5TSEExKCdtZXNzYWdlJyk7XG5cdCAgICAgKiAgICAgdmFyIGhhc2ggPSBDcnlwdG9KUy5TSEExKHdvcmRBcnJheSk7XG5cdCAgICAgKi9cblx0ICAgIEMuU0hBMSA9IEhhc2hlci5fY3JlYXRlSGVscGVyKFNIQTEpO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9uIHRvIHRoZSBITUFDJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gaGFzaC5cblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30ga2V5IFRoZSBzZWNyZXQga2V5LlxuXHQgICAgICpcblx0ICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIEhNQUMuXG5cdCAgICAgKlxuXHQgICAgICogQHN0YXRpY1xuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBobWFjID0gQ3J5cHRvSlMuSG1hY1NIQTEobWVzc2FnZSwga2V5KTtcblx0ICAgICAqL1xuXHQgICAgQy5IbWFjU0hBMSA9IEhhc2hlci5fY3JlYXRlSG1hY0hlbHBlcihTSEExKTtcblx0fSgpKTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5TSEExO1xuXG59KSk7IiwiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSwgdW5kZWYpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIiksIHJlcXVpcmUoXCIuL3NoYTI1NlwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi9zaGEyNTZcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdChmdW5jdGlvbiAoKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBXb3JkQXJyYXkgPSBDX2xpYi5Xb3JkQXJyYXk7XG5cdCAgICB2YXIgQ19hbGdvID0gQy5hbGdvO1xuXHQgICAgdmFyIFNIQTI1NiA9IENfYWxnby5TSEEyNTY7XG5cblx0ICAgIC8qKlxuXHQgICAgICogU0hBLTIyNCBoYXNoIGFsZ29yaXRobS5cblx0ICAgICAqL1xuXHQgICAgdmFyIFNIQTIyNCA9IENfYWxnby5TSEEyMjQgPSBTSEEyNTYuZXh0ZW5kKHtcblx0ICAgICAgICBfZG9SZXNldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB0aGlzLl9oYXNoID0gbmV3IFdvcmRBcnJheS5pbml0KFtcblx0ICAgICAgICAgICAgICAgIDB4YzEwNTllZDgsIDB4MzY3Y2Q1MDcsIDB4MzA3MGRkMTcsIDB4ZjcwZTU5MzksXG5cdCAgICAgICAgICAgICAgICAweGZmYzAwYjMxLCAweDY4NTgxNTExLCAweDY0Zjk4ZmE3LCAweGJlZmE0ZmE0XG5cdCAgICAgICAgICAgIF0pO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBfZG9GaW5hbGl6ZTogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgaGFzaCA9IFNIQTI1Ni5fZG9GaW5hbGl6ZS5jYWxsKHRoaXMpO1xuXG5cdCAgICAgICAgICAgIGhhc2guc2lnQnl0ZXMgLT0gNDtcblxuXHQgICAgICAgICAgICByZXR1cm4gaGFzaDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgaGFzaGVyJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gaGFzaC5cblx0ICAgICAqXG5cdCAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBoYXNoLlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgaGFzaCA9IENyeXB0b0pTLlNIQTIyNCgnbWVzc2FnZScpO1xuXHQgICAgICogICAgIHZhciBoYXNoID0gQ3J5cHRvSlMuU0hBMjI0KHdvcmRBcnJheSk7XG5cdCAgICAgKi9cblx0ICAgIEMuU0hBMjI0ID0gU0hBMjU2Ll9jcmVhdGVIZWxwZXIoU0hBMjI0KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgSE1BQydzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGhhc2guXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IGtleSBUaGUgc2VjcmV0IGtleS5cblx0ICAgICAqXG5cdCAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBITUFDLlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgaG1hYyA9IENyeXB0b0pTLkhtYWNTSEEyMjQobWVzc2FnZSwga2V5KTtcblx0ICAgICAqL1xuXHQgICAgQy5IbWFjU0hBMjI0ID0gU0hBMjU2Ll9jcmVhdGVIbWFjSGVscGVyKFNIQTIyNCk7XG5cdH0oKSk7XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMuU0hBMjI0O1xuXG59KSk7IiwiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQoZnVuY3Rpb24gKE1hdGgpIHtcblx0ICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgdmFyIEMgPSBDcnlwdG9KUztcblx0ICAgIHZhciBDX2xpYiA9IEMubGliO1xuXHQgICAgdmFyIFdvcmRBcnJheSA9IENfbGliLldvcmRBcnJheTtcblx0ICAgIHZhciBIYXNoZXIgPSBDX2xpYi5IYXNoZXI7XG5cdCAgICB2YXIgQ19hbGdvID0gQy5hbGdvO1xuXG5cdCAgICAvLyBJbml0aWFsaXphdGlvbiBhbmQgcm91bmQgY29uc3RhbnRzIHRhYmxlc1xuXHQgICAgdmFyIEggPSBbXTtcblx0ICAgIHZhciBLID0gW107XG5cblx0ICAgIC8vIENvbXB1dGUgY29uc3RhbnRzXG5cdCAgICAoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGZ1bmN0aW9uIGlzUHJpbWUobikge1xuXHQgICAgICAgICAgICB2YXIgc3FydE4gPSBNYXRoLnNxcnQobik7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGZhY3RvciA9IDI7IGZhY3RvciA8PSBzcXJ0TjsgZmFjdG9yKyspIHtcblx0ICAgICAgICAgICAgICAgIGlmICghKG4gJSBmYWN0b3IpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIHRydWU7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgZnVuY3Rpb24gZ2V0RnJhY3Rpb25hbEJpdHMobikge1xuXHQgICAgICAgICAgICByZXR1cm4gKChuIC0gKG4gfCAwKSkgKiAweDEwMDAwMDAwMCkgfCAwO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHZhciBuID0gMjtcblx0ICAgICAgICB2YXIgblByaW1lID0gMDtcblx0ICAgICAgICB3aGlsZSAoblByaW1lIDwgNjQpIHtcblx0ICAgICAgICAgICAgaWYgKGlzUHJpbWUobikpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChuUHJpbWUgPCA4KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgSFtuUHJpbWVdID0gZ2V0RnJhY3Rpb25hbEJpdHMoTWF0aC5wb3cobiwgMSAvIDIpKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIEtbblByaW1lXSA9IGdldEZyYWN0aW9uYWxCaXRzKE1hdGgucG93KG4sIDEgLyAzKSk7XG5cblx0ICAgICAgICAgICAgICAgIG5QcmltZSsrO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgbisrO1xuXHQgICAgICAgIH1cblx0ICAgIH0oKSk7XG5cblx0ICAgIC8vIFJldXNhYmxlIG9iamVjdFxuXHQgICAgdmFyIFcgPSBbXTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTSEEtMjU2IGhhc2ggYWxnb3JpdGhtLlxuXHQgICAgICovXG5cdCAgICB2YXIgU0hBMjU2ID0gQ19hbGdvLlNIQTI1NiA9IEhhc2hlci5leHRlbmQoe1xuXHQgICAgICAgIF9kb1Jlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2hhc2ggPSBuZXcgV29yZEFycmF5LmluaXQoSC5zbGljZSgwKSk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb1Byb2Nlc3NCbG9jazogZnVuY3Rpb24gKE0sIG9mZnNldCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgSCA9IHRoaXMuX2hhc2gud29yZHM7XG5cblx0ICAgICAgICAgICAgLy8gV29ya2luZyB2YXJpYWJsZXNcblx0ICAgICAgICAgICAgdmFyIGEgPSBIWzBdO1xuXHQgICAgICAgICAgICB2YXIgYiA9IEhbMV07XG5cdCAgICAgICAgICAgIHZhciBjID0gSFsyXTtcblx0ICAgICAgICAgICAgdmFyIGQgPSBIWzNdO1xuXHQgICAgICAgICAgICB2YXIgZSA9IEhbNF07XG5cdCAgICAgICAgICAgIHZhciBmID0gSFs1XTtcblx0ICAgICAgICAgICAgdmFyIGcgPSBIWzZdO1xuXHQgICAgICAgICAgICB2YXIgaCA9IEhbN107XG5cblx0ICAgICAgICAgICAgLy8gQ29tcHV0YXRpb25cblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA2NDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoaSA8IDE2KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgV1tpXSA9IE1bb2Zmc2V0ICsgaV0gfCAwO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgZ2FtbWEweCA9IFdbaSAtIDE1XTtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgZ2FtbWEwICA9ICgoZ2FtbWEweCA8PCAyNSkgfCAoZ2FtbWEweCA+Pj4gNykpICBeXG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGdhbW1hMHggPDwgMTQpIHwgKGdhbW1hMHggPj4+IDE4KSkgXlxuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnYW1tYTB4ID4+PiAzKTtcblxuXHQgICAgICAgICAgICAgICAgICAgIHZhciBnYW1tYTF4ID0gV1tpIC0gMl07XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGdhbW1hMSAgPSAoKGdhbW1hMXggPDwgMTUpIHwgKGdhbW1hMXggPj4+IDE3KSkgXlxuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChnYW1tYTF4IDw8IDEzKSB8IChnYW1tYTF4ID4+PiAxOSkpIF5cblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ2FtbWExeCA+Pj4gMTApO1xuXG5cdCAgICAgICAgICAgICAgICAgICAgV1tpXSA9IGdhbW1hMCArIFdbaSAtIDddICsgZ2FtbWExICsgV1tpIC0gMTZdO1xuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICB2YXIgY2ggID0gKGUgJiBmKSBeICh+ZSAmIGcpO1xuXHQgICAgICAgICAgICAgICAgdmFyIG1haiA9IChhICYgYikgXiAoYSAmIGMpIF4gKGIgJiBjKTtcblxuXHQgICAgICAgICAgICAgICAgdmFyIHNpZ21hMCA9ICgoYSA8PCAzMCkgfCAoYSA+Pj4gMikpIF4gKChhIDw8IDE5KSB8IChhID4+PiAxMykpIF4gKChhIDw8IDEwKSB8IChhID4+PiAyMikpO1xuXHQgICAgICAgICAgICAgICAgdmFyIHNpZ21hMSA9ICgoZSA8PCAyNikgfCAoZSA+Pj4gNikpIF4gKChlIDw8IDIxKSB8IChlID4+PiAxMSkpIF4gKChlIDw8IDcpICB8IChlID4+PiAyNSkpO1xuXG5cdCAgICAgICAgICAgICAgICB2YXIgdDEgPSBoICsgc2lnbWExICsgY2ggKyBLW2ldICsgV1tpXTtcblx0ICAgICAgICAgICAgICAgIHZhciB0MiA9IHNpZ21hMCArIG1hajtcblxuXHQgICAgICAgICAgICAgICAgaCA9IGc7XG5cdCAgICAgICAgICAgICAgICBnID0gZjtcblx0ICAgICAgICAgICAgICAgIGYgPSBlO1xuXHQgICAgICAgICAgICAgICAgZSA9IChkICsgdDEpIHwgMDtcblx0ICAgICAgICAgICAgICAgIGQgPSBjO1xuXHQgICAgICAgICAgICAgICAgYyA9IGI7XG5cdCAgICAgICAgICAgICAgICBiID0gYTtcblx0ICAgICAgICAgICAgICAgIGEgPSAodDEgKyB0MikgfCAwO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gSW50ZXJtZWRpYXRlIGhhc2ggdmFsdWVcblx0ICAgICAgICAgICAgSFswXSA9IChIWzBdICsgYSkgfCAwO1xuXHQgICAgICAgICAgICBIWzFdID0gKEhbMV0gKyBiKSB8IDA7XG5cdCAgICAgICAgICAgIEhbMl0gPSAoSFsyXSArIGMpIHwgMDtcblx0ICAgICAgICAgICAgSFszXSA9IChIWzNdICsgZCkgfCAwO1xuXHQgICAgICAgICAgICBIWzRdID0gKEhbNF0gKyBlKSB8IDA7XG5cdCAgICAgICAgICAgIEhbNV0gPSAoSFs1XSArIGYpIHwgMDtcblx0ICAgICAgICAgICAgSFs2XSA9IChIWzZdICsgZykgfCAwO1xuXHQgICAgICAgICAgICBIWzddID0gKEhbN10gKyBoKSB8IDA7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb0ZpbmFsaXplOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuX2RhdGE7XG5cdCAgICAgICAgICAgIHZhciBkYXRhV29yZHMgPSBkYXRhLndvcmRzO1xuXG5cdCAgICAgICAgICAgIHZhciBuQml0c1RvdGFsID0gdGhpcy5fbkRhdGFCeXRlcyAqIDg7XG5cdCAgICAgICAgICAgIHZhciBuQml0c0xlZnQgPSBkYXRhLnNpZ0J5dGVzICogODtcblxuXHQgICAgICAgICAgICAvLyBBZGQgcGFkZGluZ1xuXHQgICAgICAgICAgICBkYXRhV29yZHNbbkJpdHNMZWZ0ID4+PiA1XSB8PSAweDgwIDw8ICgyNCAtIG5CaXRzTGVmdCAlIDMyKTtcblx0ICAgICAgICAgICAgZGF0YVdvcmRzWygoKG5CaXRzTGVmdCArIDY0KSA+Pj4gOSkgPDwgNCkgKyAxNF0gPSBNYXRoLmZsb29yKG5CaXRzVG90YWwgLyAweDEwMDAwMDAwMCk7XG5cdCAgICAgICAgICAgIGRhdGFXb3Jkc1soKChuQml0c0xlZnQgKyA2NCkgPj4+IDkpIDw8IDQpICsgMTVdID0gbkJpdHNUb3RhbDtcblx0ICAgICAgICAgICAgZGF0YS5zaWdCeXRlcyA9IGRhdGFXb3Jkcy5sZW5ndGggKiA0O1xuXG5cdCAgICAgICAgICAgIC8vIEhhc2ggZmluYWwgYmxvY2tzXG5cdCAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3MoKTtcblxuXHQgICAgICAgICAgICAvLyBSZXR1cm4gZmluYWwgY29tcHV0ZWQgaGFzaFxuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5faGFzaDtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGNsb25lID0gSGFzaGVyLmNsb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgICAgIGNsb25lLl9oYXNoID0gdGhpcy5faGFzaC5jbG9uZSgpO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBjbG9uZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgaGFzaGVyJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gaGFzaC5cblx0ICAgICAqXG5cdCAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBoYXNoLlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgaGFzaCA9IENyeXB0b0pTLlNIQTI1NignbWVzc2FnZScpO1xuXHQgICAgICogICAgIHZhciBoYXNoID0gQ3J5cHRvSlMuU0hBMjU2KHdvcmRBcnJheSk7XG5cdCAgICAgKi9cblx0ICAgIEMuU0hBMjU2ID0gSGFzaGVyLl9jcmVhdGVIZWxwZXIoU0hBMjU2KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgSE1BQydzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGhhc2guXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IGtleSBUaGUgc2VjcmV0IGtleS5cblx0ICAgICAqXG5cdCAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBITUFDLlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgaG1hYyA9IENyeXB0b0pTLkhtYWNTSEEyNTYobWVzc2FnZSwga2V5KTtcblx0ICAgICAqL1xuXHQgICAgQy5IbWFjU0hBMjU2ID0gSGFzaGVyLl9jcmVhdGVIbWFjSGVscGVyKFNIQTI1Nik7XG5cdH0oTWF0aCkpO1xuXG5cblx0cmV0dXJuIENyeXB0b0pTLlNIQTI1NjtcblxufSkpOyIsIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnksIHVuZGVmKSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpLCByZXF1aXJlKFwiLi94NjQtY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi94NjQtY29yZVwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0KGZ1bmN0aW9uIChNYXRoKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBXb3JkQXJyYXkgPSBDX2xpYi5Xb3JkQXJyYXk7XG5cdCAgICB2YXIgSGFzaGVyID0gQ19saWIuSGFzaGVyO1xuXHQgICAgdmFyIENfeDY0ID0gQy54NjQ7XG5cdCAgICB2YXIgWDY0V29yZCA9IENfeDY0LldvcmQ7XG5cdCAgICB2YXIgQ19hbGdvID0gQy5hbGdvO1xuXG5cdCAgICAvLyBDb25zdGFudHMgdGFibGVzXG5cdCAgICB2YXIgUkhPX09GRlNFVFMgPSBbXTtcblx0ICAgIHZhciBQSV9JTkRFWEVTICA9IFtdO1xuXHQgICAgdmFyIFJPVU5EX0NPTlNUQU5UUyA9IFtdO1xuXG5cdCAgICAvLyBDb21wdXRlIENvbnN0YW50c1xuXHQgICAgKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAvLyBDb21wdXRlIHJobyBvZmZzZXQgY29uc3RhbnRzXG5cdCAgICAgICAgdmFyIHggPSAxLCB5ID0gMDtcblx0ICAgICAgICBmb3IgKHZhciB0ID0gMDsgdCA8IDI0OyB0KyspIHtcblx0ICAgICAgICAgICAgUkhPX09GRlNFVFNbeCArIDUgKiB5XSA9ICgodCArIDEpICogKHQgKyAyKSAvIDIpICUgNjQ7XG5cblx0ICAgICAgICAgICAgdmFyIG5ld1ggPSB5ICUgNTtcblx0ICAgICAgICAgICAgdmFyIG5ld1kgPSAoMiAqIHggKyAzICogeSkgJSA1O1xuXHQgICAgICAgICAgICB4ID0gbmV3WDtcblx0ICAgICAgICAgICAgeSA9IG5ld1k7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgLy8gQ29tcHV0ZSBwaSBpbmRleCBjb25zdGFudHNcblx0ICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8IDU7IHgrKykge1xuXHQgICAgICAgICAgICBmb3IgKHZhciB5ID0gMDsgeSA8IDU7IHkrKykge1xuXHQgICAgICAgICAgICAgICAgUElfSU5ERVhFU1t4ICsgNSAqIHldID0geSArICgoMiAqIHggKyAzICogeSkgJSA1KSAqIDU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cblx0ICAgICAgICAvLyBDb21wdXRlIHJvdW5kIGNvbnN0YW50c1xuXHQgICAgICAgIHZhciBMRlNSID0gMHgwMTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDI0OyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIHJvdW5kQ29uc3RhbnRNc3cgPSAwO1xuXHQgICAgICAgICAgICB2YXIgcm91bmRDb25zdGFudExzdyA9IDA7XG5cblx0ICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA3OyBqKyspIHtcblx0ICAgICAgICAgICAgICAgIGlmIChMRlNSICYgMHgwMSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBiaXRQb3NpdGlvbiA9ICgxIDw8IGopIC0gMTtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAoYml0UG9zaXRpb24gPCAzMikge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICByb3VuZENvbnN0YW50THN3IF49IDEgPDwgYml0UG9zaXRpb247XG5cdCAgICAgICAgICAgICAgICAgICAgfSBlbHNlIC8qIGlmIChiaXRQb3NpdGlvbiA+PSAzMikgKi8ge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICByb3VuZENvbnN0YW50TXN3IF49IDEgPDwgKGJpdFBvc2l0aW9uIC0gMzIpO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAgICAgLy8gQ29tcHV0ZSBuZXh0IExGU1Jcblx0ICAgICAgICAgICAgICAgIGlmIChMRlNSICYgMHg4MCkge1xuXHQgICAgICAgICAgICAgICAgICAgIC8vIFByaW1pdGl2ZSBwb2x5bm9taWFsIG92ZXIgR0YoMik6IHheOCArIHheNiArIHheNSArIHheNCArIDFcblx0ICAgICAgICAgICAgICAgICAgICBMRlNSID0gKExGU1IgPDwgMSkgXiAweDcxO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICBMRlNSIDw8PSAxO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgUk9VTkRfQ09OU1RBTlRTW2ldID0gWDY0V29yZC5jcmVhdGUocm91bmRDb25zdGFudE1zdywgcm91bmRDb25zdGFudExzdyk7XG5cdCAgICAgICAgfVxuXHQgICAgfSgpKTtcblxuXHQgICAgLy8gUmV1c2FibGUgb2JqZWN0cyBmb3IgdGVtcG9yYXJ5IHZhbHVlc1xuXHQgICAgdmFyIFQgPSBbXTtcblx0ICAgIChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTsgaSsrKSB7XG5cdCAgICAgICAgICAgIFRbaV0gPSBYNjRXb3JkLmNyZWF0ZSgpO1xuXHQgICAgICAgIH1cblx0ICAgIH0oKSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogU0hBLTMgaGFzaCBhbGdvcml0aG0uXG5cdCAgICAgKi9cblx0ICAgIHZhciBTSEEzID0gQ19hbGdvLlNIQTMgPSBIYXNoZXIuZXh0ZW5kKHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb25maWd1cmF0aW9uIG9wdGlvbnMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcn0gb3V0cHV0TGVuZ3RoXG5cdCAgICAgICAgICogICBUaGUgZGVzaXJlZCBudW1iZXIgb2YgYml0cyBpbiB0aGUgb3V0cHV0IGhhc2guXG5cdCAgICAgICAgICogICBPbmx5IHZhbHVlcyBwZXJtaXR0ZWQgYXJlOiAyMjQsIDI1NiwgMzg0LCA1MTIuXG5cdCAgICAgICAgICogICBEZWZhdWx0OiA1MTJcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjZmc6IEhhc2hlci5jZmcuZXh0ZW5kKHtcblx0ICAgICAgICAgICAgb3V0cHV0TGVuZ3RoOiA1MTJcblx0ICAgICAgICB9KSxcblxuXHQgICAgICAgIF9kb1Jlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBzdGF0ZSA9IHRoaXMuX3N0YXRlID0gW11cblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICBzdGF0ZVtpXSA9IG5ldyBYNjRXb3JkLmluaXQoKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIHRoaXMuYmxvY2tTaXplID0gKDE2MDAgLSAyICogdGhpcy5jZmcub3V0cHV0TGVuZ3RoKSAvIDMyO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBfZG9Qcm9jZXNzQmxvY2s6IGZ1bmN0aW9uIChNLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBzdGF0ZSA9IHRoaXMuX3N0YXRlO1xuXHQgICAgICAgICAgICB2YXIgbkJsb2NrU2l6ZUxhbmVzID0gdGhpcy5ibG9ja1NpemUgLyAyO1xuXG5cdCAgICAgICAgICAgIC8vIEFic29yYlxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5CbG9ja1NpemVMYW5lczsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgICAgIHZhciBNMmkgID0gTVtvZmZzZXQgKyAyICogaV07XG5cdCAgICAgICAgICAgICAgICB2YXIgTTJpMSA9IE1bb2Zmc2V0ICsgMiAqIGkgKyAxXTtcblxuXHQgICAgICAgICAgICAgICAgLy8gU3dhcCBlbmRpYW5cblx0ICAgICAgICAgICAgICAgIE0yaSA9IChcblx0ICAgICAgICAgICAgICAgICAgICAoKChNMmkgPDwgOCkgIHwgKE0yaSA+Pj4gMjQpKSAmIDB4MDBmZjAwZmYpIHxcblx0ICAgICAgICAgICAgICAgICAgICAoKChNMmkgPDwgMjQpIHwgKE0yaSA+Pj4gOCkpICAmIDB4ZmYwMGZmMDApXG5cdCAgICAgICAgICAgICAgICApO1xuXHQgICAgICAgICAgICAgICAgTTJpMSA9IChcblx0ICAgICAgICAgICAgICAgICAgICAoKChNMmkxIDw8IDgpICB8IChNMmkxID4+PiAyNCkpICYgMHgwMGZmMDBmZikgfFxuXHQgICAgICAgICAgICAgICAgICAgICgoKE0yaTEgPDwgMjQpIHwgKE0yaTEgPj4+IDgpKSAgJiAweGZmMDBmZjAwKVxuXHQgICAgICAgICAgICAgICAgKTtcblxuXHQgICAgICAgICAgICAgICAgLy8gQWJzb3JiIG1lc3NhZ2UgaW50byBzdGF0ZVxuXHQgICAgICAgICAgICAgICAgdmFyIGxhbmUgPSBzdGF0ZVtpXTtcblx0ICAgICAgICAgICAgICAgIGxhbmUuaGlnaCBePSBNMmkxO1xuXHQgICAgICAgICAgICAgICAgbGFuZS5sb3cgIF49IE0yaTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIFJvdW5kc1xuXHQgICAgICAgICAgICBmb3IgKHZhciByb3VuZCA9IDA7IHJvdW5kIDwgMjQ7IHJvdW5kKyspIHtcblx0ICAgICAgICAgICAgICAgIC8vIFRoZXRhXG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8IDU7IHgrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIC8vIE1peCBjb2x1bW4gbGFuZXNcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgdE1zdyA9IDAsIHRMc3cgPSAwO1xuXHQgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHkgPSAwOyB5IDwgNTsgeSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsYW5lID0gc3RhdGVbeCArIDUgKiB5XTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdE1zdyBePSBsYW5lLmhpZ2g7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHRMc3cgXj0gbGFuZS5sb3c7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICAgICAgLy8gVGVtcG9yYXJ5IHZhbHVlc1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBUeCA9IFRbeF07XG5cdCAgICAgICAgICAgICAgICAgICAgVHguaGlnaCA9IHRNc3c7XG5cdCAgICAgICAgICAgICAgICAgICAgVHgubG93ICA9IHRMc3c7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8IDU7IHgrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBUeDQgPSBUWyh4ICsgNCkgJSA1XTtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgVHgxID0gVFsoeCArIDEpICUgNV07XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIFR4MU1zdyA9IFR4MS5oaWdoO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBUeDFMc3cgPSBUeDEubG93O1xuXG5cdCAgICAgICAgICAgICAgICAgICAgLy8gTWl4IHN1cnJvdW5kaW5nIGNvbHVtbnNcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgdE1zdyA9IFR4NC5oaWdoIF4gKChUeDFNc3cgPDwgMSkgfCAoVHgxTHN3ID4+PiAzMSkpO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciB0THN3ID0gVHg0LmxvdyAgXiAoKFR4MUxzdyA8PCAxKSB8IChUeDFNc3cgPj4+IDMxKSk7XG5cdCAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgeSA9IDA7IHkgPCA1OyB5KyspIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxhbmUgPSBzdGF0ZVt4ICsgNSAqIHldO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBsYW5lLmhpZ2ggXj0gdE1zdztcblx0ICAgICAgICAgICAgICAgICAgICAgICAgbGFuZS5sb3cgIF49IHRMc3c7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICAvLyBSaG8gUGlcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGxhbmVJbmRleCA9IDE7IGxhbmVJbmRleCA8IDI1OyBsYW5lSW5kZXgrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBsYW5lID0gc3RhdGVbbGFuZUluZGV4XTtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgbGFuZU1zdyA9IGxhbmUuaGlnaDtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgbGFuZUxzdyA9IGxhbmUubG93O1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciByaG9PZmZzZXQgPSBSSE9fT0ZGU0VUU1tsYW5lSW5kZXhdO1xuXG5cdCAgICAgICAgICAgICAgICAgICAgLy8gUm90YXRlIGxhbmVzXG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKHJob09mZnNldCA8IDMyKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0TXN3ID0gKGxhbmVNc3cgPDwgcmhvT2Zmc2V0KSB8IChsYW5lTHN3ID4+PiAoMzIgLSByaG9PZmZzZXQpKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRMc3cgPSAobGFuZUxzdyA8PCByaG9PZmZzZXQpIHwgKGxhbmVNc3cgPj4+ICgzMiAtIHJob09mZnNldCkpO1xuXHQgICAgICAgICAgICAgICAgICAgIH0gZWxzZSAvKiBpZiAocmhvT2Zmc2V0ID49IDMyKSAqLyB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0TXN3ID0gKGxhbmVMc3cgPDwgKHJob09mZnNldCAtIDMyKSkgfCAobGFuZU1zdyA+Pj4gKDY0IC0gcmhvT2Zmc2V0KSk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0THN3ID0gKGxhbmVNc3cgPDwgKHJob09mZnNldCAtIDMyKSkgfCAobGFuZUxzdyA+Pj4gKDY0IC0gcmhvT2Zmc2V0KSk7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICAgICAgLy8gVHJhbnNwb3NlIGxhbmVzXG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIFRQaUxhbmUgPSBUW1BJX0lOREVYRVNbbGFuZUluZGV4XV07XG5cdCAgICAgICAgICAgICAgICAgICAgVFBpTGFuZS5oaWdoID0gdE1zdztcblx0ICAgICAgICAgICAgICAgICAgICBUUGlMYW5lLmxvdyAgPSB0THN3O1xuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICAvLyBSaG8gcGkgYXQgeCA9IHkgPSAwXG5cdCAgICAgICAgICAgICAgICB2YXIgVDAgPSBUWzBdO1xuXHQgICAgICAgICAgICAgICAgdmFyIHN0YXRlMCA9IHN0YXRlWzBdO1xuXHQgICAgICAgICAgICAgICAgVDAuaGlnaCA9IHN0YXRlMC5oaWdoO1xuXHQgICAgICAgICAgICAgICAgVDAubG93ICA9IHN0YXRlMC5sb3c7XG5cblx0ICAgICAgICAgICAgICAgIC8vIENoaVxuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgeCA9IDA7IHggPCA1OyB4KyspIHtcblx0ICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciB5ID0gMDsgeSA8IDU7IHkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxhbmVJbmRleCA9IHggKyA1ICogeTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxhbmUgPSBzdGF0ZVtsYW5lSW5kZXhdO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB2YXIgVExhbmUgPSBUW2xhbmVJbmRleF07XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHZhciBUeDFMYW5lID0gVFsoKHggKyAxKSAlIDUpICsgNSAqIHldO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB2YXIgVHgyTGFuZSA9IFRbKCh4ICsgMikgJSA1KSArIDUgKiB5XTtcblxuXHQgICAgICAgICAgICAgICAgICAgICAgICAvLyBNaXggcm93c1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBsYW5lLmhpZ2ggPSBUTGFuZS5oaWdoIF4gKH5UeDFMYW5lLmhpZ2ggJiBUeDJMYW5lLmhpZ2gpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBsYW5lLmxvdyAgPSBUTGFuZS5sb3cgIF4gKH5UeDFMYW5lLmxvdyAgJiBUeDJMYW5lLmxvdyk7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICAvLyBJb3RhXG5cdCAgICAgICAgICAgICAgICB2YXIgbGFuZSA9IHN0YXRlWzBdO1xuXHQgICAgICAgICAgICAgICAgdmFyIHJvdW5kQ29uc3RhbnQgPSBST1VORF9DT05TVEFOVFNbcm91bmRdO1xuXHQgICAgICAgICAgICAgICAgbGFuZS5oaWdoIF49IHJvdW5kQ29uc3RhbnQuaGlnaDtcblx0ICAgICAgICAgICAgICAgIGxhbmUubG93ICBePSByb3VuZENvbnN0YW50Lmxvdzs7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX2RvRmluYWxpemU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5fZGF0YTtcblx0ICAgICAgICAgICAgdmFyIGRhdGFXb3JkcyA9IGRhdGEud29yZHM7XG5cdCAgICAgICAgICAgIHZhciBuQml0c1RvdGFsID0gdGhpcy5fbkRhdGFCeXRlcyAqIDg7XG5cdCAgICAgICAgICAgIHZhciBuQml0c0xlZnQgPSBkYXRhLnNpZ0J5dGVzICogODtcblx0ICAgICAgICAgICAgdmFyIGJsb2NrU2l6ZUJpdHMgPSB0aGlzLmJsb2NrU2l6ZSAqIDMyO1xuXG5cdCAgICAgICAgICAgIC8vIEFkZCBwYWRkaW5nXG5cdCAgICAgICAgICAgIGRhdGFXb3Jkc1tuQml0c0xlZnQgPj4+IDVdIHw9IDB4MSA8PCAoMjQgLSBuQml0c0xlZnQgJSAzMik7XG5cdCAgICAgICAgICAgIGRhdGFXb3Jkc1soKE1hdGguY2VpbCgobkJpdHNMZWZ0ICsgMSkgLyBibG9ja1NpemVCaXRzKSAqIGJsb2NrU2l6ZUJpdHMpID4+PiA1KSAtIDFdIHw9IDB4ODA7XG5cdCAgICAgICAgICAgIGRhdGEuc2lnQnl0ZXMgPSBkYXRhV29yZHMubGVuZ3RoICogNDtcblxuXHQgICAgICAgICAgICAvLyBIYXNoIGZpbmFsIGJsb2Nrc1xuXHQgICAgICAgICAgICB0aGlzLl9wcm9jZXNzKCk7XG5cblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBzdGF0ZSA9IHRoaXMuX3N0YXRlO1xuXHQgICAgICAgICAgICB2YXIgb3V0cHV0TGVuZ3RoQnl0ZXMgPSB0aGlzLmNmZy5vdXRwdXRMZW5ndGggLyA4O1xuXHQgICAgICAgICAgICB2YXIgb3V0cHV0TGVuZ3RoTGFuZXMgPSBvdXRwdXRMZW5ndGhCeXRlcyAvIDg7XG5cblx0ICAgICAgICAgICAgLy8gU3F1ZWV6ZVxuXHQgICAgICAgICAgICB2YXIgaGFzaFdvcmRzID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3V0cHV0TGVuZ3RoTGFuZXM7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgICAgICB2YXIgbGFuZSA9IHN0YXRlW2ldO1xuXHQgICAgICAgICAgICAgICAgdmFyIGxhbmVNc3cgPSBsYW5lLmhpZ2g7XG5cdCAgICAgICAgICAgICAgICB2YXIgbGFuZUxzdyA9IGxhbmUubG93O1xuXG5cdCAgICAgICAgICAgICAgICAvLyBTd2FwIGVuZGlhblxuXHQgICAgICAgICAgICAgICAgbGFuZU1zdyA9IChcblx0ICAgICAgICAgICAgICAgICAgICAoKChsYW5lTXN3IDw8IDgpICB8IChsYW5lTXN3ID4+PiAyNCkpICYgMHgwMGZmMDBmZikgfFxuXHQgICAgICAgICAgICAgICAgICAgICgoKGxhbmVNc3cgPDwgMjQpIHwgKGxhbmVNc3cgPj4+IDgpKSAgJiAweGZmMDBmZjAwKVxuXHQgICAgICAgICAgICAgICAgKTtcblx0ICAgICAgICAgICAgICAgIGxhbmVMc3cgPSAoXG5cdCAgICAgICAgICAgICAgICAgICAgKCgobGFuZUxzdyA8PCA4KSAgfCAobGFuZUxzdyA+Pj4gMjQpKSAmIDB4MDBmZjAwZmYpIHxcblx0ICAgICAgICAgICAgICAgICAgICAoKChsYW5lTHN3IDw8IDI0KSB8IChsYW5lTHN3ID4+PiA4KSkgICYgMHhmZjAwZmYwMClcblx0ICAgICAgICAgICAgICAgICk7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFNxdWVlemUgc3RhdGUgdG8gcmV0cmlldmUgaGFzaFxuXHQgICAgICAgICAgICAgICAgaGFzaFdvcmRzLnB1c2gobGFuZUxzdyk7XG5cdCAgICAgICAgICAgICAgICBoYXNoV29yZHMucHVzaChsYW5lTXN3KTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIFJldHVybiBmaW5hbCBjb21wdXRlZCBoYXNoXG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgV29yZEFycmF5LmluaXQoaGFzaFdvcmRzLCBvdXRwdXRMZW5ndGhCeXRlcyk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBjbG9uZSA9IEhhc2hlci5jbG9uZS5jYWxsKHRoaXMpO1xuXG5cdCAgICAgICAgICAgIHZhciBzdGF0ZSA9IGNsb25lLl9zdGF0ZSA9IHRoaXMuX3N0YXRlLnNsaWNlKDApO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDI1OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHN0YXRlW2ldID0gc3RhdGVbaV0uY2xvbmUoKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIHJldHVybiBjbG9uZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgaGFzaGVyJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gaGFzaC5cblx0ICAgICAqXG5cdCAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBoYXNoLlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgaGFzaCA9IENyeXB0b0pTLlNIQTMoJ21lc3NhZ2UnKTtcblx0ICAgICAqICAgICB2YXIgaGFzaCA9IENyeXB0b0pTLlNIQTMod29yZEFycmF5KTtcblx0ICAgICAqL1xuXHQgICAgQy5TSEEzID0gSGFzaGVyLl9jcmVhdGVIZWxwZXIoU0hBMyk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogU2hvcnRjdXQgZnVuY3Rpb24gdG8gdGhlIEhNQUMncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBoYXNoLlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBrZXkgVGhlIHNlY3JldCBrZXkuXG5cdCAgICAgKlxuXHQgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgSE1BQy5cblx0ICAgICAqXG5cdCAgICAgKiBAc3RhdGljXG5cdCAgICAgKlxuXHQgICAgICogQGV4YW1wbGVcblx0ICAgICAqXG5cdCAgICAgKiAgICAgdmFyIGhtYWMgPSBDcnlwdG9KUy5IbWFjU0hBMyhtZXNzYWdlLCBrZXkpO1xuXHQgICAgICovXG5cdCAgICBDLkhtYWNTSEEzID0gSGFzaGVyLl9jcmVhdGVIbWFjSGVscGVyKFNIQTMpO1xuXHR9KE1hdGgpKTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5TSEEzO1xuXG59KSk7IiwiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSwgdW5kZWYpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIiksIHJlcXVpcmUoXCIuL3g2NC1jb3JlXCIpLCByZXF1aXJlKFwiLi9zaGE1MTJcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiLCBcIi4veDY0LWNvcmVcIiwgXCIuL3NoYTUxMlwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0KGZ1bmN0aW9uICgpIHtcblx0ICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgdmFyIEMgPSBDcnlwdG9KUztcblx0ICAgIHZhciBDX3g2NCA9IEMueDY0O1xuXHQgICAgdmFyIFg2NFdvcmQgPSBDX3g2NC5Xb3JkO1xuXHQgICAgdmFyIFg2NFdvcmRBcnJheSA9IENfeDY0LldvcmRBcnJheTtcblx0ICAgIHZhciBDX2FsZ28gPSBDLmFsZ287XG5cdCAgICB2YXIgU0hBNTEyID0gQ19hbGdvLlNIQTUxMjtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTSEEtMzg0IGhhc2ggYWxnb3JpdGhtLlxuXHQgICAgICovXG5cdCAgICB2YXIgU0hBMzg0ID0gQ19hbGdvLlNIQTM4NCA9IFNIQTUxMi5leHRlbmQoe1xuXHQgICAgICAgIF9kb1Jlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2hhc2ggPSBuZXcgWDY0V29yZEFycmF5LmluaXQoW1xuXHQgICAgICAgICAgICAgICAgbmV3IFg2NFdvcmQuaW5pdCgweGNiYmI5ZDVkLCAweGMxMDU5ZWQ4KSwgbmV3IFg2NFdvcmQuaW5pdCgweDYyOWEyOTJhLCAweDM2N2NkNTA3KSxcblx0ICAgICAgICAgICAgICAgIG5ldyBYNjRXb3JkLmluaXQoMHg5MTU5MDE1YSwgMHgzMDcwZGQxNyksIG5ldyBYNjRXb3JkLmluaXQoMHgxNTJmZWNkOCwgMHhmNzBlNTkzOSksXG5cdCAgICAgICAgICAgICAgICBuZXcgWDY0V29yZC5pbml0KDB4NjczMzI2NjcsIDB4ZmZjMDBiMzEpLCBuZXcgWDY0V29yZC5pbml0KDB4OGViNDRhODcsIDB4Njg1ODE1MTEpLFxuXHQgICAgICAgICAgICAgICAgbmV3IFg2NFdvcmQuaW5pdCgweGRiMGMyZTBkLCAweDY0Zjk4ZmE3KSwgbmV3IFg2NFdvcmQuaW5pdCgweDQ3YjU0ODFkLCAweGJlZmE0ZmE0KVxuXHQgICAgICAgICAgICBdKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX2RvRmluYWxpemU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGhhc2ggPSBTSEE1MTIuX2RvRmluYWxpemUuY2FsbCh0aGlzKTtcblxuXHQgICAgICAgICAgICBoYXNoLnNpZ0J5dGVzIC09IDE2O1xuXG5cdCAgICAgICAgICAgIHJldHVybiBoYXNoO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9uIHRvIHRoZSBoYXNoZXIncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBoYXNoLlxuXHQgICAgICpcblx0ICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIGhhc2guXG5cdCAgICAgKlxuXHQgICAgICogQHN0YXRpY1xuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBoYXNoID0gQ3J5cHRvSlMuU0hBMzg0KCdtZXNzYWdlJyk7XG5cdCAgICAgKiAgICAgdmFyIGhhc2ggPSBDcnlwdG9KUy5TSEEzODQod29yZEFycmF5KTtcblx0ICAgICAqL1xuXHQgICAgQy5TSEEzODQgPSBTSEE1MTIuX2NyZWF0ZUhlbHBlcihTSEEzODQpO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9uIHRvIHRoZSBITUFDJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gaGFzaC5cblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30ga2V5IFRoZSBzZWNyZXQga2V5LlxuXHQgICAgICpcblx0ICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIEhNQUMuXG5cdCAgICAgKlxuXHQgICAgICogQHN0YXRpY1xuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBobWFjID0gQ3J5cHRvSlMuSG1hY1NIQTM4NChtZXNzYWdlLCBrZXkpO1xuXHQgICAgICovXG5cdCAgICBDLkhtYWNTSEEzODQgPSBTSEE1MTIuX2NyZWF0ZUhtYWNIZWxwZXIoU0hBMzg0KTtcblx0fSgpKTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5TSEEzODQ7XG5cbn0pKTsiLCI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5LCB1bmRlZikge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSwgcmVxdWlyZShcIi4veDY0LWNvcmVcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiLCBcIi4veDY0LWNvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdChmdW5jdGlvbiAoKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBIYXNoZXIgPSBDX2xpYi5IYXNoZXI7XG5cdCAgICB2YXIgQ194NjQgPSBDLng2NDtcblx0ICAgIHZhciBYNjRXb3JkID0gQ194NjQuV29yZDtcblx0ICAgIHZhciBYNjRXb3JkQXJyYXkgPSBDX3g2NC5Xb3JkQXJyYXk7XG5cdCAgICB2YXIgQ19hbGdvID0gQy5hbGdvO1xuXG5cdCAgICBmdW5jdGlvbiBYNjRXb3JkX2NyZWF0ZSgpIHtcblx0ICAgICAgICByZXR1cm4gWDY0V29yZC5jcmVhdGUuYXBwbHkoWDY0V29yZCwgYXJndW1lbnRzKTtcblx0ICAgIH1cblxuXHQgICAgLy8gQ29uc3RhbnRzXG5cdCAgICB2YXIgSyA9IFtcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDQyOGEyZjk4LCAweGQ3MjhhZTIyKSwgWDY0V29yZF9jcmVhdGUoMHg3MTM3NDQ5MSwgMHgyM2VmNjVjZCksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHhiNWMwZmJjZiwgMHhlYzRkM2IyZiksIFg2NFdvcmRfY3JlYXRlKDB4ZTliNWRiYTUsIDB4ODE4OWRiYmMpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4Mzk1NmMyNWIsIDB4ZjM0OGI1MzgpLCBYNjRXb3JkX2NyZWF0ZSgweDU5ZjExMWYxLCAweGI2MDVkMDE5KSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDkyM2Y4MmE0LCAweGFmMTk0ZjliKSwgWDY0V29yZF9jcmVhdGUoMHhhYjFjNWVkNSwgMHhkYTZkODExOCksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHhkODA3YWE5OCwgMHhhMzAzMDI0MiksIFg2NFdvcmRfY3JlYXRlKDB4MTI4MzViMDEsIDB4NDU3MDZmYmUpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4MjQzMTg1YmUsIDB4NGVlNGIyOGMpLCBYNjRXb3JkX2NyZWF0ZSgweDU1MGM3ZGMzLCAweGQ1ZmZiNGUyKSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDcyYmU1ZDc0LCAweGYyN2I4OTZmKSwgWDY0V29yZF9jcmVhdGUoMHg4MGRlYjFmZSwgMHgzYjE2OTZiMSksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHg5YmRjMDZhNywgMHgyNWM3MTIzNSksIFg2NFdvcmRfY3JlYXRlKDB4YzE5YmYxNzQsIDB4Y2Y2OTI2OTQpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4ZTQ5YjY5YzEsIDB4OWVmMTRhZDIpLCBYNjRXb3JkX2NyZWF0ZSgweGVmYmU0Nzg2LCAweDM4NGYyNWUzKSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDBmYzE5ZGM2LCAweDhiOGNkNWI1KSwgWDY0V29yZF9jcmVhdGUoMHgyNDBjYTFjYywgMHg3N2FjOWM2NSksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHgyZGU5MmM2ZiwgMHg1OTJiMDI3NSksIFg2NFdvcmRfY3JlYXRlKDB4NGE3NDg0YWEsIDB4NmVhNmU0ODMpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4NWNiMGE5ZGMsIDB4YmQ0MWZiZDQpLCBYNjRXb3JkX2NyZWF0ZSgweDc2Zjk4OGRhLCAweDgzMTE1M2I1KSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDk4M2U1MTUyLCAweGVlNjZkZmFiKSwgWDY0V29yZF9jcmVhdGUoMHhhODMxYzY2ZCwgMHgyZGI0MzIxMCksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHhiMDAzMjdjOCwgMHg5OGZiMjEzZiksIFg2NFdvcmRfY3JlYXRlKDB4YmY1OTdmYzcsIDB4YmVlZjBlZTQpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4YzZlMDBiZjMsIDB4M2RhODhmYzIpLCBYNjRXb3JkX2NyZWF0ZSgweGQ1YTc5MTQ3LCAweDkzMGFhNzI1KSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDA2Y2E2MzUxLCAweGUwMDM4MjZmKSwgWDY0V29yZF9jcmVhdGUoMHgxNDI5Mjk2NywgMHgwYTBlNmU3MCksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHgyN2I3MGE4NSwgMHg0NmQyMmZmYyksIFg2NFdvcmRfY3JlYXRlKDB4MmUxYjIxMzgsIDB4NWMyNmM5MjYpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4NGQyYzZkZmMsIDB4NWFjNDJhZWQpLCBYNjRXb3JkX2NyZWF0ZSgweDUzMzgwZDEzLCAweDlkOTViM2RmKSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDY1MGE3MzU0LCAweDhiYWY2M2RlKSwgWDY0V29yZF9jcmVhdGUoMHg3NjZhMGFiYiwgMHgzYzc3YjJhOCksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHg4MWMyYzkyZSwgMHg0N2VkYWVlNiksIFg2NFdvcmRfY3JlYXRlKDB4OTI3MjJjODUsIDB4MTQ4MjM1M2IpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4YTJiZmU4YTEsIDB4NGNmMTAzNjQpLCBYNjRXb3JkX2NyZWF0ZSgweGE4MWE2NjRiLCAweGJjNDIzMDAxKSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweGMyNGI4YjcwLCAweGQwZjg5NzkxKSwgWDY0V29yZF9jcmVhdGUoMHhjNzZjNTFhMywgMHgwNjU0YmUzMCksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHhkMTkyZTgxOSwgMHhkNmVmNTIxOCksIFg2NFdvcmRfY3JlYXRlKDB4ZDY5OTA2MjQsIDB4NTU2NWE5MTApLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4ZjQwZTM1ODUsIDB4NTc3MTIwMmEpLCBYNjRXb3JkX2NyZWF0ZSgweDEwNmFhMDcwLCAweDMyYmJkMWI4KSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDE5YTRjMTE2LCAweGI4ZDJkMGM4KSwgWDY0V29yZF9jcmVhdGUoMHgxZTM3NmMwOCwgMHg1MTQxYWI1MyksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHgyNzQ4Nzc0YywgMHhkZjhlZWI5OSksIFg2NFdvcmRfY3JlYXRlKDB4MzRiMGJjYjUsIDB4ZTE5YjQ4YTgpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4MzkxYzBjYjMsIDB4YzVjOTVhNjMpLCBYNjRXb3JkX2NyZWF0ZSgweDRlZDhhYTRhLCAweGUzNDE4YWNiKSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDViOWNjYTRmLCAweDc3NjNlMzczKSwgWDY0V29yZF9jcmVhdGUoMHg2ODJlNmZmMywgMHhkNmIyYjhhMyksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHg3NDhmODJlZSwgMHg1ZGVmYjJmYyksIFg2NFdvcmRfY3JlYXRlKDB4NzhhNTYzNmYsIDB4NDMxNzJmNjApLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4ODRjODc4MTQsIDB4YTFmMGFiNzIpLCBYNjRXb3JkX2NyZWF0ZSgweDhjYzcwMjA4LCAweDFhNjQzOWVjKSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDkwYmVmZmZhLCAweDIzNjMxZTI4KSwgWDY0V29yZF9jcmVhdGUoMHhhNDUwNmNlYiwgMHhkZTgyYmRlOSksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHhiZWY5YTNmNywgMHhiMmM2NzkxNSksIFg2NFdvcmRfY3JlYXRlKDB4YzY3MTc4ZjIsIDB4ZTM3MjUzMmIpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4Y2EyNzNlY2UsIDB4ZWEyNjYxOWMpLCBYNjRXb3JkX2NyZWF0ZSgweGQxODZiOGM3LCAweDIxYzBjMjA3KSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweGVhZGE3ZGQ2LCAweGNkZTBlYjFlKSwgWDY0V29yZF9jcmVhdGUoMHhmNTdkNGY3ZiwgMHhlZTZlZDE3OCksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHgwNmYwNjdhYSwgMHg3MjE3NmZiYSksIFg2NFdvcmRfY3JlYXRlKDB4MGE2MzdkYzUsIDB4YTJjODk4YTYpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4MTEzZjk4MDQsIDB4YmVmOTBkYWUpLCBYNjRXb3JkX2NyZWF0ZSgweDFiNzEwYjM1LCAweDEzMWM0NzFiKSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDI4ZGI3N2Y1LCAweDIzMDQ3ZDg0KSwgWDY0V29yZF9jcmVhdGUoMHgzMmNhYWI3YiwgMHg0MGM3MjQ5MyksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHgzYzllYmUwYSwgMHgxNWM5YmViYyksIFg2NFdvcmRfY3JlYXRlKDB4NDMxZDY3YzQsIDB4OWMxMDBkNGMpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4NGNjNWQ0YmUsIDB4Y2IzZTQyYjYpLCBYNjRXb3JkX2NyZWF0ZSgweDU5N2YyOTljLCAweGZjNjU3ZTJhKSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDVmY2I2ZmFiLCAweDNhZDZmYWVjKSwgWDY0V29yZF9jcmVhdGUoMHg2YzQ0MTk4YywgMHg0YTQ3NTgxNylcblx0ICAgIF07XG5cblx0ICAgIC8vIFJldXNhYmxlIG9iamVjdHNcblx0ICAgIHZhciBXID0gW107XG5cdCAgICAoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODA7IGkrKykge1xuXHQgICAgICAgICAgICBXW2ldID0gWDY0V29yZF9jcmVhdGUoKTtcblx0ICAgICAgICB9XG5cdCAgICB9KCkpO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNIQS01MTIgaGFzaCBhbGdvcml0aG0uXG5cdCAgICAgKi9cblx0ICAgIHZhciBTSEE1MTIgPSBDX2FsZ28uU0hBNTEyID0gSGFzaGVyLmV4dGVuZCh7XG5cdCAgICAgICAgX2RvUmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdGhpcy5faGFzaCA9IG5ldyBYNjRXb3JkQXJyYXkuaW5pdChbXG5cdCAgICAgICAgICAgICAgICBuZXcgWDY0V29yZC5pbml0KDB4NmEwOWU2NjcsIDB4ZjNiY2M5MDgpLCBuZXcgWDY0V29yZC5pbml0KDB4YmI2N2FlODUsIDB4ODRjYWE3M2IpLFxuXHQgICAgICAgICAgICAgICAgbmV3IFg2NFdvcmQuaW5pdCgweDNjNmVmMzcyLCAweGZlOTRmODJiKSwgbmV3IFg2NFdvcmQuaW5pdCgweGE1NGZmNTNhLCAweDVmMWQzNmYxKSxcblx0ICAgICAgICAgICAgICAgIG5ldyBYNjRXb3JkLmluaXQoMHg1MTBlNTI3ZiwgMHhhZGU2ODJkMSksIG5ldyBYNjRXb3JkLmluaXQoMHg5YjA1Njg4YywgMHgyYjNlNmMxZiksXG5cdCAgICAgICAgICAgICAgICBuZXcgWDY0V29yZC5pbml0KDB4MWY4M2Q5YWIsIDB4ZmI0MWJkNmIpLCBuZXcgWDY0V29yZC5pbml0KDB4NWJlMGNkMTksIDB4MTM3ZTIxNzkpXG5cdCAgICAgICAgICAgIF0pO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBfZG9Qcm9jZXNzQmxvY2s6IGZ1bmN0aW9uIChNLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBIID0gdGhpcy5faGFzaC53b3JkcztcblxuXHQgICAgICAgICAgICB2YXIgSDAgPSBIWzBdO1xuXHQgICAgICAgICAgICB2YXIgSDEgPSBIWzFdO1xuXHQgICAgICAgICAgICB2YXIgSDIgPSBIWzJdO1xuXHQgICAgICAgICAgICB2YXIgSDMgPSBIWzNdO1xuXHQgICAgICAgICAgICB2YXIgSDQgPSBIWzRdO1xuXHQgICAgICAgICAgICB2YXIgSDUgPSBIWzVdO1xuXHQgICAgICAgICAgICB2YXIgSDYgPSBIWzZdO1xuXHQgICAgICAgICAgICB2YXIgSDcgPSBIWzddO1xuXG5cdCAgICAgICAgICAgIHZhciBIMGggPSBIMC5oaWdoO1xuXHQgICAgICAgICAgICB2YXIgSDBsID0gSDAubG93O1xuXHQgICAgICAgICAgICB2YXIgSDFoID0gSDEuaGlnaDtcblx0ICAgICAgICAgICAgdmFyIEgxbCA9IEgxLmxvdztcblx0ICAgICAgICAgICAgdmFyIEgyaCA9IEgyLmhpZ2g7XG5cdCAgICAgICAgICAgIHZhciBIMmwgPSBIMi5sb3c7XG5cdCAgICAgICAgICAgIHZhciBIM2ggPSBIMy5oaWdoO1xuXHQgICAgICAgICAgICB2YXIgSDNsID0gSDMubG93O1xuXHQgICAgICAgICAgICB2YXIgSDRoID0gSDQuaGlnaDtcblx0ICAgICAgICAgICAgdmFyIEg0bCA9IEg0Lmxvdztcblx0ICAgICAgICAgICAgdmFyIEg1aCA9IEg1LmhpZ2g7XG5cdCAgICAgICAgICAgIHZhciBINWwgPSBINS5sb3c7XG5cdCAgICAgICAgICAgIHZhciBINmggPSBINi5oaWdoO1xuXHQgICAgICAgICAgICB2YXIgSDZsID0gSDYubG93O1xuXHQgICAgICAgICAgICB2YXIgSDdoID0gSDcuaGlnaDtcblx0ICAgICAgICAgICAgdmFyIEg3bCA9IEg3LmxvdztcblxuXHQgICAgICAgICAgICAvLyBXb3JraW5nIHZhcmlhYmxlc1xuXHQgICAgICAgICAgICB2YXIgYWggPSBIMGg7XG5cdCAgICAgICAgICAgIHZhciBhbCA9IEgwbDtcblx0ICAgICAgICAgICAgdmFyIGJoID0gSDFoO1xuXHQgICAgICAgICAgICB2YXIgYmwgPSBIMWw7XG5cdCAgICAgICAgICAgIHZhciBjaCA9IEgyaDtcblx0ICAgICAgICAgICAgdmFyIGNsID0gSDJsO1xuXHQgICAgICAgICAgICB2YXIgZGggPSBIM2g7XG5cdCAgICAgICAgICAgIHZhciBkbCA9IEgzbDtcblx0ICAgICAgICAgICAgdmFyIGVoID0gSDRoO1xuXHQgICAgICAgICAgICB2YXIgZWwgPSBINGw7XG5cdCAgICAgICAgICAgIHZhciBmaCA9IEg1aDtcblx0ICAgICAgICAgICAgdmFyIGZsID0gSDVsO1xuXHQgICAgICAgICAgICB2YXIgZ2ggPSBINmg7XG5cdCAgICAgICAgICAgIHZhciBnbCA9IEg2bDtcblx0ICAgICAgICAgICAgdmFyIGhoID0gSDdoO1xuXHQgICAgICAgICAgICB2YXIgaGwgPSBIN2w7XG5cblx0ICAgICAgICAgICAgLy8gUm91bmRzXG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODA7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgICAgIHZhciBXaSA9IFdbaV07XG5cblx0ICAgICAgICAgICAgICAgIC8vIEV4dGVuZCBtZXNzYWdlXG5cdCAgICAgICAgICAgICAgICBpZiAoaSA8IDE2KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIFdpaCA9IFdpLmhpZ2ggPSBNW29mZnNldCArIGkgKiAyXSAgICAgfCAwO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBXaWwgPSBXaS5sb3cgID0gTVtvZmZzZXQgKyBpICogMiArIDFdIHwgMDtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgLy8gR2FtbWEwXG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGdhbW1hMHggID0gV1tpIC0gMTVdO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBnYW1tYTB4aCA9IGdhbW1hMHguaGlnaDtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgZ2FtbWEweGwgPSBnYW1tYTB4Lmxvdztcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgZ2FtbWEwaCAgPSAoKGdhbW1hMHhoID4+PiAxKSB8IChnYW1tYTB4bCA8PCAzMSkpIF4gKChnYW1tYTB4aCA+Pj4gOCkgfCAoZ2FtbWEweGwgPDwgMjQpKSBeIChnYW1tYTB4aCA+Pj4gNyk7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGdhbW1hMGwgID0gKChnYW1tYTB4bCA+Pj4gMSkgfCAoZ2FtbWEweGggPDwgMzEpKSBeICgoZ2FtbWEweGwgPj4+IDgpIHwgKGdhbW1hMHhoIDw8IDI0KSkgXiAoKGdhbW1hMHhsID4+PiA3KSB8IChnYW1tYTB4aCA8PCAyNSkpO1xuXG5cdCAgICAgICAgICAgICAgICAgICAgLy8gR2FtbWExXG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGdhbW1hMXggID0gV1tpIC0gMl07XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGdhbW1hMXhoID0gZ2FtbWExeC5oaWdoO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBnYW1tYTF4bCA9IGdhbW1hMXgubG93O1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBnYW1tYTFoICA9ICgoZ2FtbWExeGggPj4+IDE5KSB8IChnYW1tYTF4bCA8PCAxMykpIF4gKChnYW1tYTF4aCA8PCAzKSB8IChnYW1tYTF4bCA+Pj4gMjkpKSBeIChnYW1tYTF4aCA+Pj4gNik7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGdhbW1hMWwgID0gKChnYW1tYTF4bCA+Pj4gMTkpIHwgKGdhbW1hMXhoIDw8IDEzKSkgXiAoKGdhbW1hMXhsIDw8IDMpIHwgKGdhbW1hMXhoID4+PiAyOSkpIF4gKChnYW1tYTF4bCA+Pj4gNikgfCAoZ2FtbWExeGggPDwgMjYpKTtcblxuXHQgICAgICAgICAgICAgICAgICAgIC8vIFdbaV0gPSBnYW1tYTAgKyBXW2kgLSA3XSArIGdhbW1hMSArIFdbaSAtIDE2XVxuXHQgICAgICAgICAgICAgICAgICAgIHZhciBXaTcgID0gV1tpIC0gN107XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIFdpN2ggPSBXaTcuaGlnaDtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgV2k3bCA9IFdpNy5sb3c7XG5cblx0ICAgICAgICAgICAgICAgICAgICB2YXIgV2kxNiAgPSBXW2kgLSAxNl07XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIFdpMTZoID0gV2kxNi5oaWdoO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBXaTE2bCA9IFdpMTYubG93O1xuXG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIFdpbCA9IGdhbW1hMGwgKyBXaTdsO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBXaWggPSBnYW1tYTBoICsgV2k3aCArICgoV2lsID4+PiAwKSA8IChnYW1tYTBsID4+PiAwKSA/IDEgOiAwKTtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgV2lsID0gV2lsICsgZ2FtbWExbDtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgV2loID0gV2loICsgZ2FtbWExaCArICgoV2lsID4+PiAwKSA8IChnYW1tYTFsID4+PiAwKSA/IDEgOiAwKTtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgV2lsID0gV2lsICsgV2kxNmw7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIFdpaCA9IFdpaCArIFdpMTZoICsgKChXaWwgPj4+IDApIDwgKFdpMTZsID4+PiAwKSA/IDEgOiAwKTtcblxuXHQgICAgICAgICAgICAgICAgICAgIFdpLmhpZ2ggPSBXaWg7XG5cdCAgICAgICAgICAgICAgICAgICAgV2kubG93ICA9IFdpbDtcblx0ICAgICAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAgICAgdmFyIGNoaCAgPSAoZWggJiBmaCkgXiAofmVoICYgZ2gpO1xuXHQgICAgICAgICAgICAgICAgdmFyIGNobCAgPSAoZWwgJiBmbCkgXiAofmVsICYgZ2wpO1xuXHQgICAgICAgICAgICAgICAgdmFyIG1hamggPSAoYWggJiBiaCkgXiAoYWggJiBjaCkgXiAoYmggJiBjaCk7XG5cdCAgICAgICAgICAgICAgICB2YXIgbWFqbCA9IChhbCAmIGJsKSBeIChhbCAmIGNsKSBeIChibCAmIGNsKTtcblxuXHQgICAgICAgICAgICAgICAgdmFyIHNpZ21hMGggPSAoKGFoID4+PiAyOCkgfCAoYWwgPDwgNCkpICBeICgoYWggPDwgMzApICB8IChhbCA+Pj4gMikpIF4gKChhaCA8PCAyNSkgfCAoYWwgPj4+IDcpKTtcblx0ICAgICAgICAgICAgICAgIHZhciBzaWdtYTBsID0gKChhbCA+Pj4gMjgpIHwgKGFoIDw8IDQpKSAgXiAoKGFsIDw8IDMwKSAgfCAoYWggPj4+IDIpKSBeICgoYWwgPDwgMjUpIHwgKGFoID4+PiA3KSk7XG5cdCAgICAgICAgICAgICAgICB2YXIgc2lnbWExaCA9ICgoZWggPj4+IDE0KSB8IChlbCA8PCAxOCkpIF4gKChlaCA+Pj4gMTgpIHwgKGVsIDw8IDE0KSkgXiAoKGVoIDw8IDIzKSB8IChlbCA+Pj4gOSkpO1xuXHQgICAgICAgICAgICAgICAgdmFyIHNpZ21hMWwgPSAoKGVsID4+PiAxNCkgfCAoZWggPDwgMTgpKSBeICgoZWwgPj4+IDE4KSB8IChlaCA8PCAxNCkpIF4gKChlbCA8PCAyMykgfCAoZWggPj4+IDkpKTtcblxuXHQgICAgICAgICAgICAgICAgLy8gdDEgPSBoICsgc2lnbWExICsgY2ggKyBLW2ldICsgV1tpXVxuXHQgICAgICAgICAgICAgICAgdmFyIEtpICA9IEtbaV07XG5cdCAgICAgICAgICAgICAgICB2YXIgS2loID0gS2kuaGlnaDtcblx0ICAgICAgICAgICAgICAgIHZhciBLaWwgPSBLaS5sb3c7XG5cblx0ICAgICAgICAgICAgICAgIHZhciB0MWwgPSBobCArIHNpZ21hMWw7XG5cdCAgICAgICAgICAgICAgICB2YXIgdDFoID0gaGggKyBzaWdtYTFoICsgKCh0MWwgPj4+IDApIDwgKGhsID4+PiAwKSA/IDEgOiAwKTtcblx0ICAgICAgICAgICAgICAgIHZhciB0MWwgPSB0MWwgKyBjaGw7XG5cdCAgICAgICAgICAgICAgICB2YXIgdDFoID0gdDFoICsgY2hoICsgKCh0MWwgPj4+IDApIDwgKGNobCA+Pj4gMCkgPyAxIDogMCk7XG5cdCAgICAgICAgICAgICAgICB2YXIgdDFsID0gdDFsICsgS2lsO1xuXHQgICAgICAgICAgICAgICAgdmFyIHQxaCA9IHQxaCArIEtpaCArICgodDFsID4+PiAwKSA8IChLaWwgPj4+IDApID8gMSA6IDApO1xuXHQgICAgICAgICAgICAgICAgdmFyIHQxbCA9IHQxbCArIFdpbDtcblx0ICAgICAgICAgICAgICAgIHZhciB0MWggPSB0MWggKyBXaWggKyAoKHQxbCA+Pj4gMCkgPCAoV2lsID4+PiAwKSA/IDEgOiAwKTtcblxuXHQgICAgICAgICAgICAgICAgLy8gdDIgPSBzaWdtYTAgKyBtYWpcblx0ICAgICAgICAgICAgICAgIHZhciB0MmwgPSBzaWdtYTBsICsgbWFqbDtcblx0ICAgICAgICAgICAgICAgIHZhciB0MmggPSBzaWdtYTBoICsgbWFqaCArICgodDJsID4+PiAwKSA8IChzaWdtYTBsID4+PiAwKSA/IDEgOiAwKTtcblxuXHQgICAgICAgICAgICAgICAgLy8gVXBkYXRlIHdvcmtpbmcgdmFyaWFibGVzXG5cdCAgICAgICAgICAgICAgICBoaCA9IGdoO1xuXHQgICAgICAgICAgICAgICAgaGwgPSBnbDtcblx0ICAgICAgICAgICAgICAgIGdoID0gZmg7XG5cdCAgICAgICAgICAgICAgICBnbCA9IGZsO1xuXHQgICAgICAgICAgICAgICAgZmggPSBlaDtcblx0ICAgICAgICAgICAgICAgIGZsID0gZWw7XG5cdCAgICAgICAgICAgICAgICBlbCA9IChkbCArIHQxbCkgfCAwO1xuXHQgICAgICAgICAgICAgICAgZWggPSAoZGggKyB0MWggKyAoKGVsID4+PiAwKSA8IChkbCA+Pj4gMCkgPyAxIDogMCkpIHwgMDtcblx0ICAgICAgICAgICAgICAgIGRoID0gY2g7XG5cdCAgICAgICAgICAgICAgICBkbCA9IGNsO1xuXHQgICAgICAgICAgICAgICAgY2ggPSBiaDtcblx0ICAgICAgICAgICAgICAgIGNsID0gYmw7XG5cdCAgICAgICAgICAgICAgICBiaCA9IGFoO1xuXHQgICAgICAgICAgICAgICAgYmwgPSBhbDtcblx0ICAgICAgICAgICAgICAgIGFsID0gKHQxbCArIHQybCkgfCAwO1xuXHQgICAgICAgICAgICAgICAgYWggPSAodDFoICsgdDJoICsgKChhbCA+Pj4gMCkgPCAodDFsID4+PiAwKSA/IDEgOiAwKSkgfCAwO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gSW50ZXJtZWRpYXRlIGhhc2ggdmFsdWVcblx0ICAgICAgICAgICAgSDBsID0gSDAubG93ICA9IChIMGwgKyBhbCk7XG5cdCAgICAgICAgICAgIEgwLmhpZ2ggPSAoSDBoICsgYWggKyAoKEgwbCA+Pj4gMCkgPCAoYWwgPj4+IDApID8gMSA6IDApKTtcblx0ICAgICAgICAgICAgSDFsID0gSDEubG93ICA9IChIMWwgKyBibCk7XG5cdCAgICAgICAgICAgIEgxLmhpZ2ggPSAoSDFoICsgYmggKyAoKEgxbCA+Pj4gMCkgPCAoYmwgPj4+IDApID8gMSA6IDApKTtcblx0ICAgICAgICAgICAgSDJsID0gSDIubG93ICA9IChIMmwgKyBjbCk7XG5cdCAgICAgICAgICAgIEgyLmhpZ2ggPSAoSDJoICsgY2ggKyAoKEgybCA+Pj4gMCkgPCAoY2wgPj4+IDApID8gMSA6IDApKTtcblx0ICAgICAgICAgICAgSDNsID0gSDMubG93ICA9IChIM2wgKyBkbCk7XG5cdCAgICAgICAgICAgIEgzLmhpZ2ggPSAoSDNoICsgZGggKyAoKEgzbCA+Pj4gMCkgPCAoZGwgPj4+IDApID8gMSA6IDApKTtcblx0ICAgICAgICAgICAgSDRsID0gSDQubG93ICA9IChINGwgKyBlbCk7XG5cdCAgICAgICAgICAgIEg0LmhpZ2ggPSAoSDRoICsgZWggKyAoKEg0bCA+Pj4gMCkgPCAoZWwgPj4+IDApID8gMSA6IDApKTtcblx0ICAgICAgICAgICAgSDVsID0gSDUubG93ICA9IChINWwgKyBmbCk7XG5cdCAgICAgICAgICAgIEg1LmhpZ2ggPSAoSDVoICsgZmggKyAoKEg1bCA+Pj4gMCkgPCAoZmwgPj4+IDApID8gMSA6IDApKTtcblx0ICAgICAgICAgICAgSDZsID0gSDYubG93ICA9IChINmwgKyBnbCk7XG5cdCAgICAgICAgICAgIEg2LmhpZ2ggPSAoSDZoICsgZ2ggKyAoKEg2bCA+Pj4gMCkgPCAoZ2wgPj4+IDApID8gMSA6IDApKTtcblx0ICAgICAgICAgICAgSDdsID0gSDcubG93ICA9IChIN2wgKyBobCk7XG5cdCAgICAgICAgICAgIEg3LmhpZ2ggPSAoSDdoICsgaGggKyAoKEg3bCA+Pj4gMCkgPCAoaGwgPj4+IDApID8gMSA6IDApKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX2RvRmluYWxpemU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5fZGF0YTtcblx0ICAgICAgICAgICAgdmFyIGRhdGFXb3JkcyA9IGRhdGEud29yZHM7XG5cblx0ICAgICAgICAgICAgdmFyIG5CaXRzVG90YWwgPSB0aGlzLl9uRGF0YUJ5dGVzICogODtcblx0ICAgICAgICAgICAgdmFyIG5CaXRzTGVmdCA9IGRhdGEuc2lnQnl0ZXMgKiA4O1xuXG5cdCAgICAgICAgICAgIC8vIEFkZCBwYWRkaW5nXG5cdCAgICAgICAgICAgIGRhdGFXb3Jkc1tuQml0c0xlZnQgPj4+IDVdIHw9IDB4ODAgPDwgKDI0IC0gbkJpdHNMZWZ0ICUgMzIpO1xuXHQgICAgICAgICAgICBkYXRhV29yZHNbKCgobkJpdHNMZWZ0ICsgMTI4KSA+Pj4gMTApIDw8IDUpICsgMzBdID0gTWF0aC5mbG9vcihuQml0c1RvdGFsIC8gMHgxMDAwMDAwMDApO1xuXHQgICAgICAgICAgICBkYXRhV29yZHNbKCgobkJpdHNMZWZ0ICsgMTI4KSA+Pj4gMTApIDw8IDUpICsgMzFdID0gbkJpdHNUb3RhbDtcblx0ICAgICAgICAgICAgZGF0YS5zaWdCeXRlcyA9IGRhdGFXb3Jkcy5sZW5ndGggKiA0O1xuXG5cdCAgICAgICAgICAgIC8vIEhhc2ggZmluYWwgYmxvY2tzXG5cdCAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3MoKTtcblxuXHQgICAgICAgICAgICAvLyBDb252ZXJ0IGhhc2ggdG8gMzItYml0IHdvcmQgYXJyYXkgYmVmb3JlIHJldHVybmluZ1xuXHQgICAgICAgICAgICB2YXIgaGFzaCA9IHRoaXMuX2hhc2gudG9YMzIoKTtcblxuXHQgICAgICAgICAgICAvLyBSZXR1cm4gZmluYWwgY29tcHV0ZWQgaGFzaFxuXHQgICAgICAgICAgICByZXR1cm4gaGFzaDtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGNsb25lID0gSGFzaGVyLmNsb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgICAgIGNsb25lLl9oYXNoID0gdGhpcy5faGFzaC5jbG9uZSgpO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBjbG9uZTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgYmxvY2tTaXplOiAxMDI0LzMyXG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgaGFzaGVyJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gaGFzaC5cblx0ICAgICAqXG5cdCAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBoYXNoLlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgaGFzaCA9IENyeXB0b0pTLlNIQTUxMignbWVzc2FnZScpO1xuXHQgICAgICogICAgIHZhciBoYXNoID0gQ3J5cHRvSlMuU0hBNTEyKHdvcmRBcnJheSk7XG5cdCAgICAgKi9cblx0ICAgIEMuU0hBNTEyID0gSGFzaGVyLl9jcmVhdGVIZWxwZXIoU0hBNTEyKTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgSE1BQydzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGhhc2guXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IGtleSBUaGUgc2VjcmV0IGtleS5cblx0ICAgICAqXG5cdCAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBITUFDLlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgaG1hYyA9IENyeXB0b0pTLkhtYWNTSEE1MTIobWVzc2FnZSwga2V5KTtcblx0ICAgICAqL1xuXHQgICAgQy5IbWFjU0hBNTEyID0gSGFzaGVyLl9jcmVhdGVIbWFjSGVscGVyKFNIQTUxMik7XG5cdH0oKSk7XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMuU0hBNTEyO1xuXG59KSk7IiwiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSwgdW5kZWYpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIiksIHJlcXVpcmUoXCIuL2VuYy1iYXNlNjRcIiksIHJlcXVpcmUoXCIuL21kNVwiKSwgcmVxdWlyZShcIi4vZXZwa2RmXCIpLCByZXF1aXJlKFwiLi9jaXBoZXItY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi9lbmMtYmFzZTY0XCIsIFwiLi9tZDVcIiwgXCIuL2V2cGtkZlwiLCBcIi4vY2lwaGVyLWNvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdChmdW5jdGlvbiAoKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBXb3JkQXJyYXkgPSBDX2xpYi5Xb3JkQXJyYXk7XG5cdCAgICB2YXIgQmxvY2tDaXBoZXIgPSBDX2xpYi5CbG9ja0NpcGhlcjtcblx0ICAgIHZhciBDX2FsZ28gPSBDLmFsZ287XG5cblx0ICAgIC8vIFBlcm11dGVkIENob2ljZSAxIGNvbnN0YW50c1xuXHQgICAgdmFyIFBDMSA9IFtcblx0ICAgICAgICA1NywgNDksIDQxLCAzMywgMjUsIDE3LCA5LCAgMSxcblx0ICAgICAgICA1OCwgNTAsIDQyLCAzNCwgMjYsIDE4LCAxMCwgMixcblx0ICAgICAgICA1OSwgNTEsIDQzLCAzNSwgMjcsIDE5LCAxMSwgMyxcblx0ICAgICAgICA2MCwgNTIsIDQ0LCAzNiwgNjMsIDU1LCA0NywgMzksXG5cdCAgICAgICAgMzEsIDIzLCAxNSwgNywgIDYyLCA1NCwgNDYsIDM4LFxuXHQgICAgICAgIDMwLCAyMiwgMTQsIDYsICA2MSwgNTMsIDQ1LCAzNyxcblx0ICAgICAgICAyOSwgMjEsIDEzLCA1LCAgMjgsIDIwLCAxMiwgNFxuXHQgICAgXTtcblxuXHQgICAgLy8gUGVybXV0ZWQgQ2hvaWNlIDIgY29uc3RhbnRzXG5cdCAgICB2YXIgUEMyID0gW1xuXHQgICAgICAgIDE0LCAxNywgMTEsIDI0LCAxLCAgNSxcblx0ICAgICAgICAzLCAgMjgsIDE1LCA2LCAgMjEsIDEwLFxuXHQgICAgICAgIDIzLCAxOSwgMTIsIDQsICAyNiwgOCxcblx0ICAgICAgICAxNiwgNywgIDI3LCAyMCwgMTMsIDIsXG5cdCAgICAgICAgNDEsIDUyLCAzMSwgMzcsIDQ3LCA1NSxcblx0ICAgICAgICAzMCwgNDAsIDUxLCA0NSwgMzMsIDQ4LFxuXHQgICAgICAgIDQ0LCA0OSwgMzksIDU2LCAzNCwgNTMsXG5cdCAgICAgICAgNDYsIDQyLCA1MCwgMzYsIDI5LCAzMlxuXHQgICAgXTtcblxuXHQgICAgLy8gQ3VtdWxhdGl2ZSBiaXQgc2hpZnQgY29uc3RhbnRzXG5cdCAgICB2YXIgQklUX1NISUZUUyA9IFsxLCAgMiwgIDQsICA2LCAgOCwgIDEwLCAxMiwgMTQsIDE1LCAxNywgMTksIDIxLCAyMywgMjUsIDI3LCAyOF07XG5cblx0ICAgIC8vIFNCT1hlcyBhbmQgcm91bmQgcGVybXV0YXRpb24gY29uc3RhbnRzXG5cdCAgICB2YXIgU0JPWF9QID0gW1xuXHQgICAgICAgIHtcblx0ICAgICAgICAgICAgMHgwOiAweDgwODIwMCxcblx0ICAgICAgICAgICAgMHgxMDAwMDAwMDogMHg4MDAwLFxuXHQgICAgICAgICAgICAweDIwMDAwMDAwOiAweDgwODAwMixcblx0ICAgICAgICAgICAgMHgzMDAwMDAwMDogMHgyLFxuXHQgICAgICAgICAgICAweDQwMDAwMDAwOiAweDIwMCxcblx0ICAgICAgICAgICAgMHg1MDAwMDAwMDogMHg4MDgyMDIsXG5cdCAgICAgICAgICAgIDB4NjAwMDAwMDA6IDB4ODAwMjAyLFxuXHQgICAgICAgICAgICAweDcwMDAwMDAwOiAweDgwMDAwMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAwMDogMHgyMDIsXG5cdCAgICAgICAgICAgIDB4OTAwMDAwMDA6IDB4ODAwMjAwLFxuXHQgICAgICAgICAgICAweGEwMDAwMDAwOiAweDgyMDAsXG5cdCAgICAgICAgICAgIDB4YjAwMDAwMDA6IDB4ODA4MDAwLFxuXHQgICAgICAgICAgICAweGMwMDAwMDAwOiAweDgwMDIsXG5cdCAgICAgICAgICAgIDB4ZDAwMDAwMDA6IDB4ODAwMDAyLFxuXHQgICAgICAgICAgICAweGUwMDAwMDAwOiAweDAsXG5cdCAgICAgICAgICAgIDB4ZjAwMDAwMDA6IDB4ODIwMixcblx0ICAgICAgICAgICAgMHg4MDAwMDAwOiAweDAsXG5cdCAgICAgICAgICAgIDB4MTgwMDAwMDA6IDB4ODA4MjAyLFxuXHQgICAgICAgICAgICAweDI4MDAwMDAwOiAweDgyMDIsXG5cdCAgICAgICAgICAgIDB4MzgwMDAwMDA6IDB4ODAwMCxcblx0ICAgICAgICAgICAgMHg0ODAwMDAwMDogMHg4MDgyMDAsXG5cdCAgICAgICAgICAgIDB4NTgwMDAwMDA6IDB4MjAwLFxuXHQgICAgICAgICAgICAweDY4MDAwMDAwOiAweDgwODAwMixcblx0ICAgICAgICAgICAgMHg3ODAwMDAwMDogMHgyLFxuXHQgICAgICAgICAgICAweDg4MDAwMDAwOiAweDgwMDIwMCxcblx0ICAgICAgICAgICAgMHg5ODAwMDAwMDogMHg4MjAwLFxuXHQgICAgICAgICAgICAweGE4MDAwMDAwOiAweDgwODAwMCxcblx0ICAgICAgICAgICAgMHhiODAwMDAwMDogMHg4MDAyMDIsXG5cdCAgICAgICAgICAgIDB4YzgwMDAwMDA6IDB4ODAwMDAyLFxuXHQgICAgICAgICAgICAweGQ4MDAwMDAwOiAweDgwMDIsXG5cdCAgICAgICAgICAgIDB4ZTgwMDAwMDA6IDB4MjAyLFxuXHQgICAgICAgICAgICAweGY4MDAwMDAwOiAweDgwMDAwMCxcblx0ICAgICAgICAgICAgMHgxOiAweDgwMDAsXG5cdCAgICAgICAgICAgIDB4MTAwMDAwMDE6IDB4Mixcblx0ICAgICAgICAgICAgMHgyMDAwMDAwMTogMHg4MDgyMDAsXG5cdCAgICAgICAgICAgIDB4MzAwMDAwMDE6IDB4ODAwMDAwLFxuXHQgICAgICAgICAgICAweDQwMDAwMDAxOiAweDgwODAwMixcblx0ICAgICAgICAgICAgMHg1MDAwMDAwMTogMHg4MjAwLFxuXHQgICAgICAgICAgICAweDYwMDAwMDAxOiAweDIwMCxcblx0ICAgICAgICAgICAgMHg3MDAwMDAwMTogMHg4MDAyMDIsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMDE6IDB4ODA4MjAyLFxuXHQgICAgICAgICAgICAweDkwMDAwMDAxOiAweDgwODAwMCxcblx0ICAgICAgICAgICAgMHhhMDAwMDAwMTogMHg4MDAwMDIsXG5cdCAgICAgICAgICAgIDB4YjAwMDAwMDE6IDB4ODIwMixcblx0ICAgICAgICAgICAgMHhjMDAwMDAwMTogMHgyMDIsXG5cdCAgICAgICAgICAgIDB4ZDAwMDAwMDE6IDB4ODAwMjAwLFxuXHQgICAgICAgICAgICAweGUwMDAwMDAxOiAweDgwMDIsXG5cdCAgICAgICAgICAgIDB4ZjAwMDAwMDE6IDB4MCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxOiAweDgwODIwMixcblx0ICAgICAgICAgICAgMHgxODAwMDAwMTogMHg4MDgwMDAsXG5cdCAgICAgICAgICAgIDB4MjgwMDAwMDE6IDB4ODAwMDAwLFxuXHQgICAgICAgICAgICAweDM4MDAwMDAxOiAweDIwMCxcblx0ICAgICAgICAgICAgMHg0ODAwMDAwMTogMHg4MDAwLFxuXHQgICAgICAgICAgICAweDU4MDAwMDAxOiAweDgwMDAwMixcblx0ICAgICAgICAgICAgMHg2ODAwMDAwMTogMHgyLFxuXHQgICAgICAgICAgICAweDc4MDAwMDAxOiAweDgyMDIsXG5cdCAgICAgICAgICAgIDB4ODgwMDAwMDE6IDB4ODAwMixcblx0ICAgICAgICAgICAgMHg5ODAwMDAwMTogMHg4MDAyMDIsXG5cdCAgICAgICAgICAgIDB4YTgwMDAwMDE6IDB4MjAyLFxuXHQgICAgICAgICAgICAweGI4MDAwMDAxOiAweDgwODIwMCxcblx0ICAgICAgICAgICAgMHhjODAwMDAwMTogMHg4MDAyMDAsXG5cdCAgICAgICAgICAgIDB4ZDgwMDAwMDE6IDB4MCxcblx0ICAgICAgICAgICAgMHhlODAwMDAwMTogMHg4MjAwLFxuXHQgICAgICAgICAgICAweGY4MDAwMDAxOiAweDgwODAwMlxuXHQgICAgICAgIH0sXG5cdCAgICAgICAge1xuXHQgICAgICAgICAgICAweDA6IDB4NDAwODQwMTAsXG5cdCAgICAgICAgICAgIDB4MTAwMDAwMDogMHg0MDAwLFxuXHQgICAgICAgICAgICAweDIwMDAwMDA6IDB4ODAwMDAsXG5cdCAgICAgICAgICAgIDB4MzAwMDAwMDogMHg0MDA4MDAxMCxcblx0ICAgICAgICAgICAgMHg0MDAwMDAwOiAweDQwMDAwMDEwLFxuXHQgICAgICAgICAgICAweDUwMDAwMDA6IDB4NDAwODQwMDAsXG5cdCAgICAgICAgICAgIDB4NjAwMDAwMDogMHg0MDAwNDAwMCxcblx0ICAgICAgICAgICAgMHg3MDAwMDAwOiAweDEwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDA6IDB4ODQwMDAsXG5cdCAgICAgICAgICAgIDB4OTAwMDAwMDogMHg0MDAwNDAxMCxcblx0ICAgICAgICAgICAgMHhhMDAwMDAwOiAweDQwMDAwMDAwLFxuXHQgICAgICAgICAgICAweGIwMDAwMDA6IDB4ODQwMTAsXG5cdCAgICAgICAgICAgIDB4YzAwMDAwMDogMHg4MDAxMCxcblx0ICAgICAgICAgICAgMHhkMDAwMDAwOiAweDAsXG5cdCAgICAgICAgICAgIDB4ZTAwMDAwMDogMHg0MDEwLFxuXHQgICAgICAgICAgICAweGYwMDAwMDA6IDB4NDAwODAwMDAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwOiAweDQwMDA0MDAwLFxuXHQgICAgICAgICAgICAweDE4MDAwMDA6IDB4ODQwMTAsXG5cdCAgICAgICAgICAgIDB4MjgwMDAwMDogMHgxMCxcblx0ICAgICAgICAgICAgMHgzODAwMDAwOiAweDQwMDA0MDEwLFxuXHQgICAgICAgICAgICAweDQ4MDAwMDA6IDB4NDAwODQwMTAsXG5cdCAgICAgICAgICAgIDB4NTgwMDAwMDogMHg0MDAwMDAwMCxcblx0ICAgICAgICAgICAgMHg2ODAwMDAwOiAweDgwMDAwLFxuXHQgICAgICAgICAgICAweDc4MDAwMDA6IDB4NDAwODAwMTAsXG5cdCAgICAgICAgICAgIDB4ODgwMDAwMDogMHg4MDAxMCxcblx0ICAgICAgICAgICAgMHg5ODAwMDAwOiAweDAsXG5cdCAgICAgICAgICAgIDB4YTgwMDAwMDogMHg0MDAwLFxuXHQgICAgICAgICAgICAweGI4MDAwMDA6IDB4NDAwODAwMDAsXG5cdCAgICAgICAgICAgIDB4YzgwMDAwMDogMHg0MDAwMDAxMCxcblx0ICAgICAgICAgICAgMHhkODAwMDAwOiAweDg0MDAwLFxuXHQgICAgICAgICAgICAweGU4MDAwMDA6IDB4NDAwODQwMDAsXG5cdCAgICAgICAgICAgIDB4ZjgwMDAwMDogMHg0MDEwLFxuXHQgICAgICAgICAgICAweDEwMDAwMDAwOiAweDAsXG5cdCAgICAgICAgICAgIDB4MTEwMDAwMDA6IDB4NDAwODAwMTAsXG5cdCAgICAgICAgICAgIDB4MTIwMDAwMDA6IDB4NDAwMDQwMTAsXG5cdCAgICAgICAgICAgIDB4MTMwMDAwMDA6IDB4NDAwODQwMDAsXG5cdCAgICAgICAgICAgIDB4MTQwMDAwMDA6IDB4NDAwODAwMDAsXG5cdCAgICAgICAgICAgIDB4MTUwMDAwMDA6IDB4MTAsXG5cdCAgICAgICAgICAgIDB4MTYwMDAwMDA6IDB4ODQwMTAsXG5cdCAgICAgICAgICAgIDB4MTcwMDAwMDA6IDB4NDAwMCxcblx0ICAgICAgICAgICAgMHgxODAwMDAwMDogMHg0MDEwLFxuXHQgICAgICAgICAgICAweDE5MDAwMDAwOiAweDgwMDAwLFxuXHQgICAgICAgICAgICAweDFhMDAwMDAwOiAweDgwMDEwLFxuXHQgICAgICAgICAgICAweDFiMDAwMDAwOiAweDQwMDAwMDEwLFxuXHQgICAgICAgICAgICAweDFjMDAwMDAwOiAweDg0MDAwLFxuXHQgICAgICAgICAgICAweDFkMDAwMDAwOiAweDQwMDA0MDAwLFxuXHQgICAgICAgICAgICAweDFlMDAwMDAwOiAweDQwMDAwMDAwLFxuXHQgICAgICAgICAgICAweDFmMDAwMDAwOiAweDQwMDg0MDEwLFxuXHQgICAgICAgICAgICAweDEwODAwMDAwOiAweDg0MDEwLFxuXHQgICAgICAgICAgICAweDExODAwMDAwOiAweDgwMDAwLFxuXHQgICAgICAgICAgICAweDEyODAwMDAwOiAweDQwMDgwMDAwLFxuXHQgICAgICAgICAgICAweDEzODAwMDAwOiAweDQwMDAsXG5cdCAgICAgICAgICAgIDB4MTQ4MDAwMDA6IDB4NDAwMDQwMDAsXG5cdCAgICAgICAgICAgIDB4MTU4MDAwMDA6IDB4NDAwODQwMTAsXG5cdCAgICAgICAgICAgIDB4MTY4MDAwMDA6IDB4MTAsXG5cdCAgICAgICAgICAgIDB4MTc4MDAwMDA6IDB4NDAwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTg4MDAwMDA6IDB4NDAwODQwMDAsXG5cdCAgICAgICAgICAgIDB4MTk4MDAwMDA6IDB4NDAwMDAwMTAsXG5cdCAgICAgICAgICAgIDB4MWE4MDAwMDA6IDB4NDAwMDQwMTAsXG5cdCAgICAgICAgICAgIDB4MWI4MDAwMDA6IDB4ODAwMTAsXG5cdCAgICAgICAgICAgIDB4MWM4MDAwMDA6IDB4MCxcblx0ICAgICAgICAgICAgMHgxZDgwMDAwMDogMHg0MDEwLFxuXHQgICAgICAgICAgICAweDFlODAwMDAwOiAweDQwMDgwMDEwLFxuXHQgICAgICAgICAgICAweDFmODAwMDAwOiAweDg0MDAwXG5cdCAgICAgICAgfSxcblx0ICAgICAgICB7XG5cdCAgICAgICAgICAgIDB4MDogMHgxMDQsXG5cdCAgICAgICAgICAgIDB4MTAwMDAwOiAweDAsXG5cdCAgICAgICAgICAgIDB4MjAwMDAwOiAweDQwMDAxMDAsXG5cdCAgICAgICAgICAgIDB4MzAwMDAwOiAweDEwMTA0LFxuXHQgICAgICAgICAgICAweDQwMDAwMDogMHgxMDAwNCxcblx0ICAgICAgICAgICAgMHg1MDAwMDA6IDB4NDAwMDAwNCxcblx0ICAgICAgICAgICAgMHg2MDAwMDA6IDB4NDAxMDEwNCxcblx0ICAgICAgICAgICAgMHg3MDAwMDA6IDB4NDAxMDAwMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDA6IDB4NDAwMDAwMCxcblx0ICAgICAgICAgICAgMHg5MDAwMDA6IDB4NDAxMDEwMCxcblx0ICAgICAgICAgICAgMHhhMDAwMDA6IDB4MTAxMDAsXG5cdCAgICAgICAgICAgIDB4YjAwMDAwOiAweDQwMTAwMDQsXG5cdCAgICAgICAgICAgIDB4YzAwMDAwOiAweDQwMDAxMDQsXG5cdCAgICAgICAgICAgIDB4ZDAwMDAwOiAweDEwMDAwLFxuXHQgICAgICAgICAgICAweGUwMDAwMDogMHg0LFxuXHQgICAgICAgICAgICAweGYwMDAwMDogMHgxMDAsXG5cdCAgICAgICAgICAgIDB4ODAwMDA6IDB4NDAxMDEwMCxcblx0ICAgICAgICAgICAgMHgxODAwMDA6IDB4NDAxMDAwNCxcblx0ICAgICAgICAgICAgMHgyODAwMDA6IDB4MCxcblx0ICAgICAgICAgICAgMHgzODAwMDA6IDB4NDAwMDEwMCxcblx0ICAgICAgICAgICAgMHg0ODAwMDA6IDB4NDAwMDAwNCxcblx0ICAgICAgICAgICAgMHg1ODAwMDA6IDB4MTAwMDAsXG5cdCAgICAgICAgICAgIDB4NjgwMDAwOiAweDEwMDA0LFxuXHQgICAgICAgICAgICAweDc4MDAwMDogMHgxMDQsXG5cdCAgICAgICAgICAgIDB4ODgwMDAwOiAweDQsXG5cdCAgICAgICAgICAgIDB4OTgwMDAwOiAweDEwMCxcblx0ICAgICAgICAgICAgMHhhODAwMDA6IDB4NDAxMDAwMCxcblx0ICAgICAgICAgICAgMHhiODAwMDA6IDB4MTAxMDQsXG5cdCAgICAgICAgICAgIDB4YzgwMDAwOiAweDEwMTAwLFxuXHQgICAgICAgICAgICAweGQ4MDAwMDogMHg0MDAwMTA0LFxuXHQgICAgICAgICAgICAweGU4MDAwMDogMHg0MDEwMTA0LFxuXHQgICAgICAgICAgICAweGY4MDAwMDogMHg0MDAwMDAwLFxuXHQgICAgICAgICAgICAweDEwMDAwMDA6IDB4NDAxMDEwMCxcblx0ICAgICAgICAgICAgMHgxMTAwMDAwOiAweDEwMDA0LFxuXHQgICAgICAgICAgICAweDEyMDAwMDA6IDB4MTAwMDAsXG5cdCAgICAgICAgICAgIDB4MTMwMDAwMDogMHg0MDAwMTAwLFxuXHQgICAgICAgICAgICAweDE0MDAwMDA6IDB4MTAwLFxuXHQgICAgICAgICAgICAweDE1MDAwMDA6IDB4NDAxMDEwNCxcblx0ICAgICAgICAgICAgMHgxNjAwMDAwOiAweDQwMDAwMDQsXG5cdCAgICAgICAgICAgIDB4MTcwMDAwMDogMHgwLFxuXHQgICAgICAgICAgICAweDE4MDAwMDA6IDB4NDAwMDEwNCxcblx0ICAgICAgICAgICAgMHgxOTAwMDAwOiAweDQwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MWEwMDAwMDogMHg0LFxuXHQgICAgICAgICAgICAweDFiMDAwMDA6IDB4MTAxMDAsXG5cdCAgICAgICAgICAgIDB4MWMwMDAwMDogMHg0MDEwMDAwLFxuXHQgICAgICAgICAgICAweDFkMDAwMDA6IDB4MTA0LFxuXHQgICAgICAgICAgICAweDFlMDAwMDA6IDB4MTAxMDQsXG5cdCAgICAgICAgICAgIDB4MWYwMDAwMDogMHg0MDEwMDA0LFxuXHQgICAgICAgICAgICAweDEwODAwMDA6IDB4NDAwMDAwMCxcblx0ICAgICAgICAgICAgMHgxMTgwMDAwOiAweDEwNCxcblx0ICAgICAgICAgICAgMHgxMjgwMDAwOiAweDQwMTAxMDAsXG5cdCAgICAgICAgICAgIDB4MTM4MDAwMDogMHgwLFxuXHQgICAgICAgICAgICAweDE0ODAwMDA6IDB4MTAwMDQsXG5cdCAgICAgICAgICAgIDB4MTU4MDAwMDogMHg0MDAwMTAwLFxuXHQgICAgICAgICAgICAweDE2ODAwMDA6IDB4MTAwLFxuXHQgICAgICAgICAgICAweDE3ODAwMDA6IDB4NDAxMDAwNCxcblx0ICAgICAgICAgICAgMHgxODgwMDAwOiAweDEwMDAwLFxuXHQgICAgICAgICAgICAweDE5ODAwMDA6IDB4NDAxMDEwNCxcblx0ICAgICAgICAgICAgMHgxYTgwMDAwOiAweDEwMTA0LFxuXHQgICAgICAgICAgICAweDFiODAwMDA6IDB4NDAwMDAwNCxcblx0ICAgICAgICAgICAgMHgxYzgwMDAwOiAweDQwMDAxMDQsXG5cdCAgICAgICAgICAgIDB4MWQ4MDAwMDogMHg0MDEwMDAwLFxuXHQgICAgICAgICAgICAweDFlODAwMDA6IDB4NCxcblx0ICAgICAgICAgICAgMHgxZjgwMDAwOiAweDEwMTAwXG5cdCAgICAgICAgfSxcblx0ICAgICAgICB7XG5cdCAgICAgICAgICAgIDB4MDogMHg4MDQwMTAwMCxcblx0ICAgICAgICAgICAgMHgxMDAwMDogMHg4MDAwMTA0MCxcblx0ICAgICAgICAgICAgMHgyMDAwMDogMHg0MDEwNDAsXG5cdCAgICAgICAgICAgIDB4MzAwMDA6IDB4ODA0MDAwMDAsXG5cdCAgICAgICAgICAgIDB4NDAwMDA6IDB4MCxcblx0ICAgICAgICAgICAgMHg1MDAwMDogMHg0MDEwMDAsXG5cdCAgICAgICAgICAgIDB4NjAwMDA6IDB4ODAwMDAwNDAsXG5cdCAgICAgICAgICAgIDB4NzAwMDA6IDB4NDAwMDQwLFxuXHQgICAgICAgICAgICAweDgwMDAwOiAweDgwMDAwMDAwLFxuXHQgICAgICAgICAgICAweDkwMDAwOiAweDQwMDAwMCxcblx0ICAgICAgICAgICAgMHhhMDAwMDogMHg0MCxcblx0ICAgICAgICAgICAgMHhiMDAwMDogMHg4MDAwMTAwMCxcblx0ICAgICAgICAgICAgMHhjMDAwMDogMHg4MDQwMDA0MCxcblx0ICAgICAgICAgICAgMHhkMDAwMDogMHgxMDQwLFxuXHQgICAgICAgICAgICAweGUwMDAwOiAweDEwMDAsXG5cdCAgICAgICAgICAgIDB4ZjAwMDA6IDB4ODA0MDEwNDAsXG5cdCAgICAgICAgICAgIDB4ODAwMDogMHg4MDAwMTA0MCxcblx0ICAgICAgICAgICAgMHgxODAwMDogMHg0MCxcblx0ICAgICAgICAgICAgMHgyODAwMDogMHg4MDQwMDA0MCxcblx0ICAgICAgICAgICAgMHgzODAwMDogMHg4MDAwMTAwMCxcblx0ICAgICAgICAgICAgMHg0ODAwMDogMHg0MDEwMDAsXG5cdCAgICAgICAgICAgIDB4NTgwMDA6IDB4ODA0MDEwNDAsXG5cdCAgICAgICAgICAgIDB4NjgwMDA6IDB4MCxcblx0ICAgICAgICAgICAgMHg3ODAwMDogMHg4MDQwMDAwMCxcblx0ICAgICAgICAgICAgMHg4ODAwMDogMHgxMDAwLFxuXHQgICAgICAgICAgICAweDk4MDAwOiAweDgwNDAxMDAwLFxuXHQgICAgICAgICAgICAweGE4MDAwOiAweDQwMDAwMCxcblx0ICAgICAgICAgICAgMHhiODAwMDogMHgxMDQwLFxuXHQgICAgICAgICAgICAweGM4MDAwOiAweDgwMDAwMDAwLFxuXHQgICAgICAgICAgICAweGQ4MDAwOiAweDQwMDA0MCxcblx0ICAgICAgICAgICAgMHhlODAwMDogMHg0MDEwNDAsXG5cdCAgICAgICAgICAgIDB4ZjgwMDA6IDB4ODAwMDAwNDAsXG5cdCAgICAgICAgICAgIDB4MTAwMDAwOiAweDQwMDA0MCxcblx0ICAgICAgICAgICAgMHgxMTAwMDA6IDB4NDAxMDAwLFxuXHQgICAgICAgICAgICAweDEyMDAwMDogMHg4MDAwMDA0MCxcblx0ICAgICAgICAgICAgMHgxMzAwMDA6IDB4MCxcblx0ICAgICAgICAgICAgMHgxNDAwMDA6IDB4MTA0MCxcblx0ICAgICAgICAgICAgMHgxNTAwMDA6IDB4ODA0MDAwNDAsXG5cdCAgICAgICAgICAgIDB4MTYwMDAwOiAweDgwNDAxMDAwLFxuXHQgICAgICAgICAgICAweDE3MDAwMDogMHg4MDAwMTA0MCxcblx0ICAgICAgICAgICAgMHgxODAwMDA6IDB4ODA0MDEwNDAsXG5cdCAgICAgICAgICAgIDB4MTkwMDAwOiAweDgwMDAwMDAwLFxuXHQgICAgICAgICAgICAweDFhMDAwMDogMHg4MDQwMDAwMCxcblx0ICAgICAgICAgICAgMHgxYjAwMDA6IDB4NDAxMDQwLFxuXHQgICAgICAgICAgICAweDFjMDAwMDogMHg4MDAwMTAwMCxcblx0ICAgICAgICAgICAgMHgxZDAwMDA6IDB4NDAwMDAwLFxuXHQgICAgICAgICAgICAweDFlMDAwMDogMHg0MCxcblx0ICAgICAgICAgICAgMHgxZjAwMDA6IDB4MTAwMCxcblx0ICAgICAgICAgICAgMHgxMDgwMDA6IDB4ODA0MDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTE4MDAwOiAweDgwNDAxMDQwLFxuXHQgICAgICAgICAgICAweDEyODAwMDogMHgwLFxuXHQgICAgICAgICAgICAweDEzODAwMDogMHg0MDEwMDAsXG5cdCAgICAgICAgICAgIDB4MTQ4MDAwOiAweDQwMDA0MCxcblx0ICAgICAgICAgICAgMHgxNTgwMDA6IDB4ODAwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTY4MDAwOiAweDgwMDAxMDQwLFxuXHQgICAgICAgICAgICAweDE3ODAwMDogMHg0MCxcblx0ICAgICAgICAgICAgMHgxODgwMDA6IDB4ODAwMDAwNDAsXG5cdCAgICAgICAgICAgIDB4MTk4MDAwOiAweDEwMDAsXG5cdCAgICAgICAgICAgIDB4MWE4MDAwOiAweDgwMDAxMDAwLFxuXHQgICAgICAgICAgICAweDFiODAwMDogMHg4MDQwMDA0MCxcblx0ICAgICAgICAgICAgMHgxYzgwMDA6IDB4MTA0MCxcblx0ICAgICAgICAgICAgMHgxZDgwMDA6IDB4ODA0MDEwMDAsXG5cdCAgICAgICAgICAgIDB4MWU4MDAwOiAweDQwMDAwMCxcblx0ICAgICAgICAgICAgMHgxZjgwMDA6IDB4NDAxMDQwXG5cdCAgICAgICAgfSxcblx0ICAgICAgICB7XG5cdCAgICAgICAgICAgIDB4MDogMHg4MCxcblx0ICAgICAgICAgICAgMHgxMDAwOiAweDEwNDAwMDAsXG5cdCAgICAgICAgICAgIDB4MjAwMDogMHg0MDAwMCxcblx0ICAgICAgICAgICAgMHgzMDAwOiAweDIwMDAwMDAwLFxuXHQgICAgICAgICAgICAweDQwMDA6IDB4MjAwNDAwODAsXG5cdCAgICAgICAgICAgIDB4NTAwMDogMHgxMDAwMDgwLFxuXHQgICAgICAgICAgICAweDYwMDA6IDB4MjEwMDAwODAsXG5cdCAgICAgICAgICAgIDB4NzAwMDogMHg0MDA4MCxcblx0ICAgICAgICAgICAgMHg4MDAwOiAweDEwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4OTAwMDogMHgyMDA0MDAwMCxcblx0ICAgICAgICAgICAgMHhhMDAwOiAweDIwMDAwMDgwLFxuXHQgICAgICAgICAgICAweGIwMDA6IDB4MjEwNDAwODAsXG5cdCAgICAgICAgICAgIDB4YzAwMDogMHgyMTA0MDAwMCxcblx0ICAgICAgICAgICAgMHhkMDAwOiAweDAsXG5cdCAgICAgICAgICAgIDB4ZTAwMDogMHgxMDQwMDgwLFxuXHQgICAgICAgICAgICAweGYwMDA6IDB4MjEwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4ODAwOiAweDEwNDAwODAsXG5cdCAgICAgICAgICAgIDB4MTgwMDogMHgyMTAwMDA4MCxcblx0ICAgICAgICAgICAgMHgyODAwOiAweDgwLFxuXHQgICAgICAgICAgICAweDM4MDA6IDB4MTA0MDAwMCxcblx0ICAgICAgICAgICAgMHg0ODAwOiAweDQwMDAwLFxuXHQgICAgICAgICAgICAweDU4MDA6IDB4MjAwNDAwODAsXG5cdCAgICAgICAgICAgIDB4NjgwMDogMHgyMTA0MDAwMCxcblx0ICAgICAgICAgICAgMHg3ODAwOiAweDIwMDAwMDAwLFxuXHQgICAgICAgICAgICAweDg4MDA6IDB4MjAwNDAwMDAsXG5cdCAgICAgICAgICAgIDB4OTgwMDogMHgwLFxuXHQgICAgICAgICAgICAweGE4MDA6IDB4MjEwNDAwODAsXG5cdCAgICAgICAgICAgIDB4YjgwMDogMHgxMDAwMDgwLFxuXHQgICAgICAgICAgICAweGM4MDA6IDB4MjAwMDAwODAsXG5cdCAgICAgICAgICAgIDB4ZDgwMDogMHgyMTAwMDAwMCxcblx0ICAgICAgICAgICAgMHhlODAwOiAweDEwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4ZjgwMDogMHg0MDA4MCxcblx0ICAgICAgICAgICAgMHgxMDAwMDogMHg0MDAwMCxcblx0ICAgICAgICAgICAgMHgxMTAwMDogMHg4MCxcblx0ICAgICAgICAgICAgMHgxMjAwMDogMHgyMDAwMDAwMCxcblx0ICAgICAgICAgICAgMHgxMzAwMDogMHgyMTAwMDA4MCxcblx0ICAgICAgICAgICAgMHgxNDAwMDogMHgxMDAwMDgwLFxuXHQgICAgICAgICAgICAweDE1MDAwOiAweDIxMDQwMDAwLFxuXHQgICAgICAgICAgICAweDE2MDAwOiAweDIwMDQwMDgwLFxuXHQgICAgICAgICAgICAweDE3MDAwOiAweDEwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTgwMDA6IDB4MjEwNDAwODAsXG5cdCAgICAgICAgICAgIDB4MTkwMDA6IDB4MjEwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MWEwMDA6IDB4MTA0MDAwMCxcblx0ICAgICAgICAgICAgMHgxYjAwMDogMHgyMDA0MDAwMCxcblx0ICAgICAgICAgICAgMHgxYzAwMDogMHg0MDA4MCxcblx0ICAgICAgICAgICAgMHgxZDAwMDogMHgyMDAwMDA4MCxcblx0ICAgICAgICAgICAgMHgxZTAwMDogMHgwLFxuXHQgICAgICAgICAgICAweDFmMDAwOiAweDEwNDAwODAsXG5cdCAgICAgICAgICAgIDB4MTA4MDA6IDB4MjEwMDAwODAsXG5cdCAgICAgICAgICAgIDB4MTE4MDA6IDB4MTAwMDAwMCxcblx0ICAgICAgICAgICAgMHgxMjgwMDogMHgxMDQwMDAwLFxuXHQgICAgICAgICAgICAweDEzODAwOiAweDIwMDQwMDgwLFxuXHQgICAgICAgICAgICAweDE0ODAwOiAweDIwMDAwMDAwLFxuXHQgICAgICAgICAgICAweDE1ODAwOiAweDEwNDAwODAsXG5cdCAgICAgICAgICAgIDB4MTY4MDA6IDB4ODAsXG5cdCAgICAgICAgICAgIDB4MTc4MDA6IDB4MjEwNDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTg4MDA6IDB4NDAwODAsXG5cdCAgICAgICAgICAgIDB4MTk4MDA6IDB4MjEwNDAwODAsXG5cdCAgICAgICAgICAgIDB4MWE4MDA6IDB4MCxcblx0ICAgICAgICAgICAgMHgxYjgwMDogMHgyMTAwMDAwMCxcblx0ICAgICAgICAgICAgMHgxYzgwMDogMHgxMDAwMDgwLFxuXHQgICAgICAgICAgICAweDFkODAwOiAweDQwMDAwLFxuXHQgICAgICAgICAgICAweDFlODAwOiAweDIwMDQwMDAwLFxuXHQgICAgICAgICAgICAweDFmODAwOiAweDIwMDAwMDgwXG5cdCAgICAgICAgfSxcblx0ICAgICAgICB7XG5cdCAgICAgICAgICAgIDB4MDogMHgxMDAwMDAwOCxcblx0ICAgICAgICAgICAgMHgxMDA6IDB4MjAwMCxcblx0ICAgICAgICAgICAgMHgyMDA6IDB4MTAyMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MzAwOiAweDEwMjAyMDA4LFxuXHQgICAgICAgICAgICAweDQwMDogMHgxMDAwMjAwMCxcblx0ICAgICAgICAgICAgMHg1MDA6IDB4MjAwMDAwLFxuXHQgICAgICAgICAgICAweDYwMDogMHgyMDAwMDgsXG5cdCAgICAgICAgICAgIDB4NzAwOiAweDEwMDAwMDAwLFxuXHQgICAgICAgICAgICAweDgwMDogMHgwLFxuXHQgICAgICAgICAgICAweDkwMDogMHgxMDAwMjAwOCxcblx0ICAgICAgICAgICAgMHhhMDA6IDB4MjAyMDAwLFxuXHQgICAgICAgICAgICAweGIwMDogMHg4LFxuXHQgICAgICAgICAgICAweGMwMDogMHgxMDIwMDAwOCxcblx0ICAgICAgICAgICAgMHhkMDA6IDB4MjAyMDA4LFxuXHQgICAgICAgICAgICAweGUwMDogMHgyMDA4LFxuXHQgICAgICAgICAgICAweGYwMDogMHgxMDIwMjAwMCxcblx0ICAgICAgICAgICAgMHg4MDogMHgxMDIwMDAwMCxcblx0ICAgICAgICAgICAgMHgxODA6IDB4MTAyMDIwMDgsXG5cdCAgICAgICAgICAgIDB4MjgwOiAweDgsXG5cdCAgICAgICAgICAgIDB4MzgwOiAweDIwMDAwMCxcblx0ICAgICAgICAgICAgMHg0ODA6IDB4MjAyMDA4LFxuXHQgICAgICAgICAgICAweDU4MDogMHgxMDAwMDAwOCxcblx0ICAgICAgICAgICAgMHg2ODA6IDB4MTAwMDIwMDAsXG5cdCAgICAgICAgICAgIDB4NzgwOiAweDIwMDgsXG5cdCAgICAgICAgICAgIDB4ODgwOiAweDIwMDAwOCxcblx0ICAgICAgICAgICAgMHg5ODA6IDB4MjAwMCxcblx0ICAgICAgICAgICAgMHhhODA6IDB4MTAwMDIwMDgsXG5cdCAgICAgICAgICAgIDB4YjgwOiAweDEwMjAwMDA4LFxuXHQgICAgICAgICAgICAweGM4MDogMHgwLFxuXHQgICAgICAgICAgICAweGQ4MDogMHgxMDIwMjAwMCxcblx0ICAgICAgICAgICAgMHhlODA6IDB4MjAyMDAwLFxuXHQgICAgICAgICAgICAweGY4MDogMHgxMDAwMDAwMCxcblx0ICAgICAgICAgICAgMHgxMDAwOiAweDEwMDAyMDAwLFxuXHQgICAgICAgICAgICAweDExMDA6IDB4MTAyMDAwMDgsXG5cdCAgICAgICAgICAgIDB4MTIwMDogMHgxMDIwMjAwOCxcblx0ICAgICAgICAgICAgMHgxMzAwOiAweDIwMDgsXG5cdCAgICAgICAgICAgIDB4MTQwMDogMHgyMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTUwMDogMHgxMDAwMDAwMCxcblx0ICAgICAgICAgICAgMHgxNjAwOiAweDEwMDAwMDA4LFxuXHQgICAgICAgICAgICAweDE3MDA6IDB4MjAyMDAwLFxuXHQgICAgICAgICAgICAweDE4MDA6IDB4MjAyMDA4LFxuXHQgICAgICAgICAgICAweDE5MDA6IDB4MCxcblx0ICAgICAgICAgICAgMHgxYTAwOiAweDgsXG5cdCAgICAgICAgICAgIDB4MWIwMDogMHgxMDIwMDAwMCxcblx0ICAgICAgICAgICAgMHgxYzAwOiAweDIwMDAsXG5cdCAgICAgICAgICAgIDB4MWQwMDogMHgxMDAwMjAwOCxcblx0ICAgICAgICAgICAgMHgxZTAwOiAweDEwMjAyMDAwLFxuXHQgICAgICAgICAgICAweDFmMDA6IDB4MjAwMDA4LFxuXHQgICAgICAgICAgICAweDEwODA6IDB4OCxcblx0ICAgICAgICAgICAgMHgxMTgwOiAweDIwMjAwMCxcblx0ICAgICAgICAgICAgMHgxMjgwOiAweDIwMDAwMCxcblx0ICAgICAgICAgICAgMHgxMzgwOiAweDEwMDAwMDA4LFxuXHQgICAgICAgICAgICAweDE0ODA6IDB4MTAwMDIwMDAsXG5cdCAgICAgICAgICAgIDB4MTU4MDogMHgyMDA4LFxuXHQgICAgICAgICAgICAweDE2ODA6IDB4MTAyMDIwMDgsXG5cdCAgICAgICAgICAgIDB4MTc4MDogMHgxMDIwMDAwMCxcblx0ICAgICAgICAgICAgMHgxODgwOiAweDEwMjAyMDAwLFxuXHQgICAgICAgICAgICAweDE5ODA6IDB4MTAyMDAwMDgsXG5cdCAgICAgICAgICAgIDB4MWE4MDogMHgyMDAwLFxuXHQgICAgICAgICAgICAweDFiODA6IDB4MjAyMDA4LFxuXHQgICAgICAgICAgICAweDFjODA6IDB4MjAwMDA4LFxuXHQgICAgICAgICAgICAweDFkODA6IDB4MCxcblx0ICAgICAgICAgICAgMHgxZTgwOiAweDEwMDAwMDAwLFxuXHQgICAgICAgICAgICAweDFmODA6IDB4MTAwMDIwMDhcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHtcblx0ICAgICAgICAgICAgMHgwOiAweDEwMDAwMCxcblx0ICAgICAgICAgICAgMHgxMDogMHgyMDAwNDAxLFxuXHQgICAgICAgICAgICAweDIwOiAweDQwMCxcblx0ICAgICAgICAgICAgMHgzMDogMHgxMDA0MDEsXG5cdCAgICAgICAgICAgIDB4NDA6IDB4MjEwMDQwMSxcblx0ICAgICAgICAgICAgMHg1MDogMHgwLFxuXHQgICAgICAgICAgICAweDYwOiAweDEsXG5cdCAgICAgICAgICAgIDB4NzA6IDB4MjEwMDAwMSxcblx0ICAgICAgICAgICAgMHg4MDogMHgyMDAwNDAwLFxuXHQgICAgICAgICAgICAweDkwOiAweDEwMDAwMSxcblx0ICAgICAgICAgICAgMHhhMDogMHgyMDAwMDAxLFxuXHQgICAgICAgICAgICAweGIwOiAweDIxMDA0MDAsXG5cdCAgICAgICAgICAgIDB4YzA6IDB4MjEwMDAwMCxcblx0ICAgICAgICAgICAgMHhkMDogMHg0MDEsXG5cdCAgICAgICAgICAgIDB4ZTA6IDB4MTAwNDAwLFxuXHQgICAgICAgICAgICAweGYwOiAweDIwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4ODogMHgyMTAwMDAxLFxuXHQgICAgICAgICAgICAweDE4OiAweDAsXG5cdCAgICAgICAgICAgIDB4Mjg6IDB4MjAwMDQwMSxcblx0ICAgICAgICAgICAgMHgzODogMHgyMTAwNDAwLFxuXHQgICAgICAgICAgICAweDQ4OiAweDEwMDAwMCxcblx0ICAgICAgICAgICAgMHg1ODogMHgyMDAwMDAxLFxuXHQgICAgICAgICAgICAweDY4OiAweDIwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4Nzg6IDB4NDAxLFxuXHQgICAgICAgICAgICAweDg4OiAweDEwMDQwMSxcblx0ICAgICAgICAgICAgMHg5ODogMHgyMDAwNDAwLFxuXHQgICAgICAgICAgICAweGE4OiAweDIxMDAwMDAsXG5cdCAgICAgICAgICAgIDB4Yjg6IDB4MTAwMDAxLFxuXHQgICAgICAgICAgICAweGM4OiAweDQwMCxcblx0ICAgICAgICAgICAgMHhkODogMHgyMTAwNDAxLFxuXHQgICAgICAgICAgICAweGU4OiAweDEsXG5cdCAgICAgICAgICAgIDB4Zjg6IDB4MTAwNDAwLFxuXHQgICAgICAgICAgICAweDEwMDogMHgyMDAwMDAwLFxuXHQgICAgICAgICAgICAweDExMDogMHgxMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTIwOiAweDIwMDA0MDEsXG5cdCAgICAgICAgICAgIDB4MTMwOiAweDIxMDAwMDEsXG5cdCAgICAgICAgICAgIDB4MTQwOiAweDEwMDAwMSxcblx0ICAgICAgICAgICAgMHgxNTA6IDB4MjAwMDQwMCxcblx0ICAgICAgICAgICAgMHgxNjA6IDB4MjEwMDQwMCxcblx0ICAgICAgICAgICAgMHgxNzA6IDB4MTAwNDAxLFxuXHQgICAgICAgICAgICAweDE4MDogMHg0MDEsXG5cdCAgICAgICAgICAgIDB4MTkwOiAweDIxMDA0MDEsXG5cdCAgICAgICAgICAgIDB4MWEwOiAweDEwMDQwMCxcblx0ICAgICAgICAgICAgMHgxYjA6IDB4MSxcblx0ICAgICAgICAgICAgMHgxYzA6IDB4MCxcblx0ICAgICAgICAgICAgMHgxZDA6IDB4MjEwMDAwMCxcblx0ICAgICAgICAgICAgMHgxZTA6IDB4MjAwMDAwMSxcblx0ICAgICAgICAgICAgMHgxZjA6IDB4NDAwLFxuXHQgICAgICAgICAgICAweDEwODogMHgxMDA0MDAsXG5cdCAgICAgICAgICAgIDB4MTE4OiAweDIwMDA0MDEsXG5cdCAgICAgICAgICAgIDB4MTI4OiAweDIxMDAwMDEsXG5cdCAgICAgICAgICAgIDB4MTM4OiAweDEsXG5cdCAgICAgICAgICAgIDB4MTQ4OiAweDIwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTU4OiAweDEwMDAwMCxcblx0ICAgICAgICAgICAgMHgxNjg6IDB4NDAxLFxuXHQgICAgICAgICAgICAweDE3ODogMHgyMTAwNDAwLFxuXHQgICAgICAgICAgICAweDE4ODogMHgyMDAwMDAxLFxuXHQgICAgICAgICAgICAweDE5ODogMHgyMTAwMDAwLFxuXHQgICAgICAgICAgICAweDFhODogMHgwLFxuXHQgICAgICAgICAgICAweDFiODogMHgyMTAwNDAxLFxuXHQgICAgICAgICAgICAweDFjODogMHgxMDA0MDEsXG5cdCAgICAgICAgICAgIDB4MWQ4OiAweDQwMCxcblx0ICAgICAgICAgICAgMHgxZTg6IDB4MjAwMDQwMCxcblx0ICAgICAgICAgICAgMHgxZjg6IDB4MTAwMDAxXG5cdCAgICAgICAgfSxcblx0ICAgICAgICB7XG5cdCAgICAgICAgICAgIDB4MDogMHg4MDAwODIwLFxuXHQgICAgICAgICAgICAweDE6IDB4MjAwMDAsXG5cdCAgICAgICAgICAgIDB4MjogMHg4MDAwMDAwLFxuXHQgICAgICAgICAgICAweDM6IDB4MjAsXG5cdCAgICAgICAgICAgIDB4NDogMHgyMDAyMCxcblx0ICAgICAgICAgICAgMHg1OiAweDgwMjA4MjAsXG5cdCAgICAgICAgICAgIDB4NjogMHg4MDIwODAwLFxuXHQgICAgICAgICAgICAweDc6IDB4ODAwLFxuXHQgICAgICAgICAgICAweDg6IDB4ODAyMDAwMCxcblx0ICAgICAgICAgICAgMHg5OiAweDgwMDA4MDAsXG5cdCAgICAgICAgICAgIDB4YTogMHgyMDgwMCxcblx0ICAgICAgICAgICAgMHhiOiAweDgwMjAwMjAsXG5cdCAgICAgICAgICAgIDB4YzogMHg4MjAsXG5cdCAgICAgICAgICAgIDB4ZDogMHgwLFxuXHQgICAgICAgICAgICAweGU6IDB4ODAwMDAyMCxcblx0ICAgICAgICAgICAgMHhmOiAweDIwODIwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDAwOiAweDgwMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAwMTogMHg4MDIwODIwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDAyOiAweDgwMDA4MjAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMDM6IDB4ODAwMDAwMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAwNDogMHg4MDIwMDAwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDA1OiAweDIwODAwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDA2OiAweDIwODIwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDA3OiAweDIwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDA4OiAweDgwMDAwMjAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMDk6IDB4ODIwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDBhOiAweDIwMDIwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDBiOiAweDgwMjA4MDAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMGM6IDB4MCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAwZDogMHg4MDIwMDIwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDBlOiAweDgwMDA4MDAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMGY6IDB4MjAwMDAsXG5cdCAgICAgICAgICAgIDB4MTA6IDB4MjA4MjAsXG5cdCAgICAgICAgICAgIDB4MTE6IDB4ODAyMDgwMCxcblx0ICAgICAgICAgICAgMHgxMjogMHgyMCxcblx0ICAgICAgICAgICAgMHgxMzogMHg4MDAsXG5cdCAgICAgICAgICAgIDB4MTQ6IDB4ODAwMDgwMCxcblx0ICAgICAgICAgICAgMHgxNTogMHg4MDAwMDIwLFxuXHQgICAgICAgICAgICAweDE2OiAweDgwMjAwMjAsXG5cdCAgICAgICAgICAgIDB4MTc6IDB4MjAwMDAsXG5cdCAgICAgICAgICAgIDB4MTg6IDB4MCxcblx0ICAgICAgICAgICAgMHgxOTogMHgyMDAyMCxcblx0ICAgICAgICAgICAgMHgxYTogMHg4MDIwMDAwLFxuXHQgICAgICAgICAgICAweDFiOiAweDgwMDA4MjAsXG5cdCAgICAgICAgICAgIDB4MWM6IDB4ODAyMDgyMCxcblx0ICAgICAgICAgICAgMHgxZDogMHgyMDgwMCxcblx0ICAgICAgICAgICAgMHgxZTogMHg4MjAsXG5cdCAgICAgICAgICAgIDB4MWY6IDB4ODAwMDAwMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxMDogMHgyMDAwMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxMTogMHg4MDAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMTI6IDB4ODAyMDAyMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxMzogMHgyMDgyMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxNDogMHgyMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxNTogMHg4MDIwMDAwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDE2OiAweDgwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMTc6IDB4ODAwMDgyMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxODogMHg4MDIwODIwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDE5OiAweDgwMDAwMjAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMWE6IDB4ODAwMDgwMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxYjogMHgwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDFjOiAweDIwODAwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDFkOiAweDgyMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxZTogMHgyMDAyMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxZjogMHg4MDIwODAwXG5cdCAgICAgICAgfVxuXHQgICAgXTtcblxuXHQgICAgLy8gTWFza3MgdGhhdCBzZWxlY3QgdGhlIFNCT1ggaW5wdXRcblx0ICAgIHZhciBTQk9YX01BU0sgPSBbXG5cdCAgICAgICAgMHhmODAwMDAwMSwgMHgxZjgwMDAwMCwgMHgwMWY4MDAwMCwgMHgwMDFmODAwMCxcblx0ICAgICAgICAweDAwMDFmODAwLCAweDAwMDAxZjgwLCAweDAwMDAwMWY4LCAweDgwMDAwMDFmXG5cdCAgICBdO1xuXG5cdCAgICAvKipcblx0ICAgICAqIERFUyBibG9jayBjaXBoZXIgYWxnb3JpdGhtLlxuXHQgICAgICovXG5cdCAgICB2YXIgREVTID0gQ19hbGdvLkRFUyA9IEJsb2NrQ2lwaGVyLmV4dGVuZCh7XG5cdCAgICAgICAgX2RvUmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBrZXkgPSB0aGlzLl9rZXk7XG5cdCAgICAgICAgICAgIHZhciBrZXlXb3JkcyA9IGtleS53b3JkcztcblxuXHQgICAgICAgICAgICAvLyBTZWxlY3QgNTYgYml0cyBhY2NvcmRpbmcgdG8gUEMxXG5cdCAgICAgICAgICAgIHZhciBrZXlCaXRzID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNTY7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdmFyIGtleUJpdFBvcyA9IFBDMVtpXSAtIDE7XG5cdCAgICAgICAgICAgICAgICBrZXlCaXRzW2ldID0gKGtleVdvcmRzW2tleUJpdFBvcyA+Pj4gNV0gPj4+ICgzMSAtIGtleUJpdFBvcyAlIDMyKSkgJiAxO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gQXNzZW1ibGUgMTYgc3Via2V5c1xuXHQgICAgICAgICAgICB2YXIgc3ViS2V5cyA9IHRoaXMuX3N1YktleXMgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgblN1YktleSA9IDA7IG5TdWJLZXkgPCAxNjsgblN1YktleSsrKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBDcmVhdGUgc3Via2V5XG5cdCAgICAgICAgICAgICAgICB2YXIgc3ViS2V5ID0gc3ViS2V5c1tuU3ViS2V5XSA9IFtdO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICAgICAgdmFyIGJpdFNoaWZ0ID0gQklUX1NISUZUU1tuU3ViS2V5XTtcblxuXHQgICAgICAgICAgICAgICAgLy8gU2VsZWN0IDQ4IGJpdHMgYWNjb3JkaW5nIHRvIFBDMlxuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgLy8gU2VsZWN0IGZyb20gdGhlIGxlZnQgMjgga2V5IGJpdHNcblx0ICAgICAgICAgICAgICAgICAgICBzdWJLZXlbKGkgLyA2KSB8IDBdIHw9IGtleUJpdHNbKChQQzJbaV0gLSAxKSArIGJpdFNoaWZ0KSAlIDI4XSA8PCAoMzEgLSBpICUgNik7XG5cblx0ICAgICAgICAgICAgICAgICAgICAvLyBTZWxlY3QgZnJvbSB0aGUgcmlnaHQgMjgga2V5IGJpdHNcblx0ICAgICAgICAgICAgICAgICAgICBzdWJLZXlbNCArICgoaSAvIDYpIHwgMCldIHw9IGtleUJpdHNbMjggKyAoKChQQzJbaSArIDI0XSAtIDEpICsgYml0U2hpZnQpICUgMjgpXSA8PCAoMzEgLSBpICUgNik7XG5cdCAgICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICAgIC8vIFNpbmNlIGVhY2ggc3Via2V5IGlzIGFwcGxpZWQgdG8gYW4gZXhwYW5kZWQgMzItYml0IGlucHV0LFxuXHQgICAgICAgICAgICAgICAgLy8gdGhlIHN1YmtleSBjYW4gYmUgYnJva2VuIGludG8gOCB2YWx1ZXMgc2NhbGVkIHRvIDMyLWJpdHMsXG5cdCAgICAgICAgICAgICAgICAvLyB3aGljaCBhbGxvd3MgdGhlIGtleSB0byBiZSB1c2VkIHdpdGhvdXQgZXhwYW5zaW9uXG5cdCAgICAgICAgICAgICAgICBzdWJLZXlbMF0gPSAoc3ViS2V5WzBdIDw8IDEpIHwgKHN1YktleVswXSA+Pj4gMzEpO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCA3OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICBzdWJLZXlbaV0gPSBzdWJLZXlbaV0gPj4+ICgoaSAtIDEpICogNCArIDMpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgc3ViS2V5WzddID0gKHN1YktleVs3XSA8PCA1KSB8IChzdWJLZXlbN10gPj4+IDI3KTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIENvbXB1dGUgaW52ZXJzZSBzdWJrZXlzXG5cdCAgICAgICAgICAgIHZhciBpbnZTdWJLZXlzID0gdGhpcy5faW52U3ViS2V5cyA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIGludlN1YktleXNbaV0gPSBzdWJLZXlzWzE1IC0gaV07XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgZW5jcnlwdEJsb2NrOiBmdW5jdGlvbiAoTSwgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2RvQ3J5cHRCbG9jayhNLCBvZmZzZXQsIHRoaXMuX3N1YktleXMpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBkZWNyeXB0QmxvY2s6IGZ1bmN0aW9uIChNLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZG9DcnlwdEJsb2NrKE0sIG9mZnNldCwgdGhpcy5faW52U3ViS2V5cyk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb0NyeXB0QmxvY2s6IGZ1bmN0aW9uIChNLCBvZmZzZXQsIHN1YktleXMpIHtcblx0ICAgICAgICAgICAgLy8gR2V0IGlucHV0XG5cdCAgICAgICAgICAgIHRoaXMuX2xCbG9jayA9IE1bb2Zmc2V0XTtcblx0ICAgICAgICAgICAgdGhpcy5fckJsb2NrID0gTVtvZmZzZXQgKyAxXTtcblxuXHQgICAgICAgICAgICAvLyBJbml0aWFsIHBlcm11dGF0aW9uXG5cdCAgICAgICAgICAgIGV4Y2hhbmdlTFIuY2FsbCh0aGlzLCA0LCAgMHgwZjBmMGYwZik7XG5cdCAgICAgICAgICAgIGV4Y2hhbmdlTFIuY2FsbCh0aGlzLCAxNiwgMHgwMDAwZmZmZik7XG5cdCAgICAgICAgICAgIGV4Y2hhbmdlUkwuY2FsbCh0aGlzLCAyLCAgMHgzMzMzMzMzMyk7XG5cdCAgICAgICAgICAgIGV4Y2hhbmdlUkwuY2FsbCh0aGlzLCA4LCAgMHgwMGZmMDBmZik7XG5cdCAgICAgICAgICAgIGV4Y2hhbmdlTFIuY2FsbCh0aGlzLCAxLCAgMHg1NTU1NTU1NSk7XG5cblx0ICAgICAgICAgICAgLy8gUm91bmRzXG5cdCAgICAgICAgICAgIGZvciAodmFyIHJvdW5kID0gMDsgcm91bmQgPCAxNjsgcm91bmQrKykge1xuXHQgICAgICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgICAgICB2YXIgc3ViS2V5ID0gc3ViS2V5c1tyb3VuZF07XG5cdCAgICAgICAgICAgICAgICB2YXIgbEJsb2NrID0gdGhpcy5fbEJsb2NrO1xuXHQgICAgICAgICAgICAgICAgdmFyIHJCbG9jayA9IHRoaXMuX3JCbG9jaztcblxuXHQgICAgICAgICAgICAgICAgLy8gRmVpc3RlbCBmdW5jdGlvblxuXHQgICAgICAgICAgICAgICAgdmFyIGYgPSAwO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA4OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICBmIHw9IFNCT1hfUFtpXVsoKHJCbG9jayBeIHN1YktleVtpXSkgJiBTQk9YX01BU0tbaV0pID4+PiAwXTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHRoaXMuX2xCbG9jayA9IHJCbG9jaztcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3JCbG9jayA9IGxCbG9jayBeIGY7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBVbmRvIHN3YXAgZnJvbSBsYXN0IHJvdW5kXG5cdCAgICAgICAgICAgIHZhciB0ID0gdGhpcy5fbEJsb2NrO1xuXHQgICAgICAgICAgICB0aGlzLl9sQmxvY2sgPSB0aGlzLl9yQmxvY2s7XG5cdCAgICAgICAgICAgIHRoaXMuX3JCbG9jayA9IHQ7XG5cblx0ICAgICAgICAgICAgLy8gRmluYWwgcGVybXV0YXRpb25cblx0ICAgICAgICAgICAgZXhjaGFuZ2VMUi5jYWxsKHRoaXMsIDEsICAweDU1NTU1NTU1KTtcblx0ICAgICAgICAgICAgZXhjaGFuZ2VSTC5jYWxsKHRoaXMsIDgsICAweDAwZmYwMGZmKTtcblx0ICAgICAgICAgICAgZXhjaGFuZ2VSTC5jYWxsKHRoaXMsIDIsICAweDMzMzMzMzMzKTtcblx0ICAgICAgICAgICAgZXhjaGFuZ2VMUi5jYWxsKHRoaXMsIDE2LCAweDAwMDBmZmZmKTtcblx0ICAgICAgICAgICAgZXhjaGFuZ2VMUi5jYWxsKHRoaXMsIDQsICAweDBmMGYwZjBmKTtcblxuXHQgICAgICAgICAgICAvLyBTZXQgb3V0cHV0XG5cdCAgICAgICAgICAgIE1bb2Zmc2V0XSA9IHRoaXMuX2xCbG9jaztcblx0ICAgICAgICAgICAgTVtvZmZzZXQgKyAxXSA9IHRoaXMuX3JCbG9jaztcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAga2V5U2l6ZTogNjQvMzIsXG5cblx0ICAgICAgICBpdlNpemU6IDY0LzMyLFxuXG5cdCAgICAgICAgYmxvY2tTaXplOiA2NC8zMlxuXHQgICAgfSk7XG5cblx0ICAgIC8vIFN3YXAgYml0cyBhY3Jvc3MgdGhlIGxlZnQgYW5kIHJpZ2h0IHdvcmRzXG5cdCAgICBmdW5jdGlvbiBleGNoYW5nZUxSKG9mZnNldCwgbWFzaykge1xuXHQgICAgICAgIHZhciB0ID0gKCh0aGlzLl9sQmxvY2sgPj4+IG9mZnNldCkgXiB0aGlzLl9yQmxvY2spICYgbWFzaztcblx0ICAgICAgICB0aGlzLl9yQmxvY2sgXj0gdDtcblx0ICAgICAgICB0aGlzLl9sQmxvY2sgXj0gdCA8PCBvZmZzZXQ7XG5cdCAgICB9XG5cblx0ICAgIGZ1bmN0aW9uIGV4Y2hhbmdlUkwob2Zmc2V0LCBtYXNrKSB7XG5cdCAgICAgICAgdmFyIHQgPSAoKHRoaXMuX3JCbG9jayA+Pj4gb2Zmc2V0KSBeIHRoaXMuX2xCbG9jaykgJiBtYXNrO1xuXHQgICAgICAgIHRoaXMuX2xCbG9jayBePSB0O1xuXHQgICAgICAgIHRoaXMuX3JCbG9jayBePSB0IDw8IG9mZnNldDtcblx0ICAgIH1cblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbnMgdG8gdGhlIGNpcGhlcidzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQGV4YW1wbGVcblx0ICAgICAqXG5cdCAgICAgKiAgICAgdmFyIGNpcGhlcnRleHQgPSBDcnlwdG9KUy5ERVMuZW5jcnlwdChtZXNzYWdlLCBrZXksIGNmZyk7XG5cdCAgICAgKiAgICAgdmFyIHBsYWludGV4dCAgPSBDcnlwdG9KUy5ERVMuZGVjcnlwdChjaXBoZXJ0ZXh0LCBrZXksIGNmZyk7XG5cdCAgICAgKi9cblx0ICAgIEMuREVTID0gQmxvY2tDaXBoZXIuX2NyZWF0ZUhlbHBlcihERVMpO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFRyaXBsZS1ERVMgYmxvY2sgY2lwaGVyIGFsZ29yaXRobS5cblx0ICAgICAqL1xuXHQgICAgdmFyIFRyaXBsZURFUyA9IENfYWxnby5UcmlwbGVERVMgPSBCbG9ja0NpcGhlci5leHRlbmQoe1xuXHQgICAgICAgIF9kb1Jlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIga2V5ID0gdGhpcy5fa2V5O1xuXHQgICAgICAgICAgICB2YXIga2V5V29yZHMgPSBrZXkud29yZHM7XG5cblx0ICAgICAgICAgICAgLy8gQ3JlYXRlIERFUyBpbnN0YW5jZXNcblx0ICAgICAgICAgICAgdGhpcy5fZGVzMSA9IERFUy5jcmVhdGVFbmNyeXB0b3IoV29yZEFycmF5LmNyZWF0ZShrZXlXb3Jkcy5zbGljZSgwLCAyKSkpO1xuXHQgICAgICAgICAgICB0aGlzLl9kZXMyID0gREVTLmNyZWF0ZUVuY3J5cHRvcihXb3JkQXJyYXkuY3JlYXRlKGtleVdvcmRzLnNsaWNlKDIsIDQpKSk7XG5cdCAgICAgICAgICAgIHRoaXMuX2RlczMgPSBERVMuY3JlYXRlRW5jcnlwdG9yKFdvcmRBcnJheS5jcmVhdGUoa2V5V29yZHMuc2xpY2UoNCwgNikpKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgZW5jcnlwdEJsb2NrOiBmdW5jdGlvbiAoTSwgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2RlczEuZW5jcnlwdEJsb2NrKE0sIG9mZnNldCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2RlczIuZGVjcnlwdEJsb2NrKE0sIG9mZnNldCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2RlczMuZW5jcnlwdEJsb2NrKE0sIG9mZnNldCk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGRlY3J5cHRCbG9jazogZnVuY3Rpb24gKE0sIG9mZnNldCkge1xuXHQgICAgICAgICAgICB0aGlzLl9kZXMzLmRlY3J5cHRCbG9jayhNLCBvZmZzZXQpO1xuXHQgICAgICAgICAgICB0aGlzLl9kZXMyLmVuY3J5cHRCbG9jayhNLCBvZmZzZXQpO1xuXHQgICAgICAgICAgICB0aGlzLl9kZXMxLmRlY3J5cHRCbG9jayhNLCBvZmZzZXQpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBrZXlTaXplOiAxOTIvMzIsXG5cblx0ICAgICAgICBpdlNpemU6IDY0LzMyLFxuXG5cdCAgICAgICAgYmxvY2tTaXplOiA2NC8zMlxuXHQgICAgfSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogU2hvcnRjdXQgZnVuY3Rpb25zIHRvIHRoZSBjaXBoZXIncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBjaXBoZXJ0ZXh0ID0gQ3J5cHRvSlMuVHJpcGxlREVTLmVuY3J5cHQobWVzc2FnZSwga2V5LCBjZmcpO1xuXHQgICAgICogICAgIHZhciBwbGFpbnRleHQgID0gQ3J5cHRvSlMuVHJpcGxlREVTLmRlY3J5cHQoY2lwaGVydGV4dCwga2V5LCBjZmcpO1xuXHQgICAgICovXG5cdCAgICBDLlRyaXBsZURFUyA9IEJsb2NrQ2lwaGVyLl9jcmVhdGVIZWxwZXIoVHJpcGxlREVTKTtcblx0fSgpKTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5UcmlwbGVERVM7XG5cbn0pKTsiLCI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXCIuL2NvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdChmdW5jdGlvbiAodW5kZWZpbmVkKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBCYXNlID0gQ19saWIuQmFzZTtcblx0ICAgIHZhciBYMzJXb3JkQXJyYXkgPSBDX2xpYi5Xb3JkQXJyYXk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogeDY0IG5hbWVzcGFjZS5cblx0ICAgICAqL1xuXHQgICAgdmFyIENfeDY0ID0gQy54NjQgPSB7fTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBBIDY0LWJpdCB3b3JkLlxuXHQgICAgICovXG5cdCAgICB2YXIgWDY0V29yZCA9IENfeDY0LldvcmQgPSBCYXNlLmV4dGVuZCh7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogSW5pdGlhbGl6ZXMgYSBuZXdseSBjcmVhdGVkIDY0LWJpdCB3b3JkLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IGhpZ2ggVGhlIGhpZ2ggMzIgYml0cy5cblx0ICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gbG93IFRoZSBsb3cgMzIgYml0cy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHg2NFdvcmQgPSBDcnlwdG9KUy54NjQuV29yZC5jcmVhdGUoMHgwMDAxMDIwMywgMHgwNDA1MDYwNyk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgaW5pdDogZnVuY3Rpb24gKGhpZ2gsIGxvdykge1xuXHQgICAgICAgICAgICB0aGlzLmhpZ2ggPSBoaWdoO1xuXHQgICAgICAgICAgICB0aGlzLmxvdyA9IGxvdztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBCaXR3aXNlIE5PVHMgdGhpcyB3b3JkLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7WDY0V29yZH0gQSBuZXcgeDY0LVdvcmQgb2JqZWN0IGFmdGVyIG5lZ2F0aW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgbmVnYXRlZCA9IHg2NFdvcmQubm90KCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgLy8gbm90OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vIHZhciBoaWdoID0gfnRoaXMuaGlnaDtcblx0ICAgICAgICAgICAgLy8gdmFyIGxvdyA9IH50aGlzLmxvdztcblxuXHQgICAgICAgICAgICAvLyByZXR1cm4gWDY0V29yZC5jcmVhdGUoaGlnaCwgbG93KTtcblx0ICAgICAgICAvLyB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQml0d2lzZSBBTkRzIHRoaXMgd29yZCB3aXRoIHRoZSBwYXNzZWQgd29yZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7WDY0V29yZH0gd29yZCBUaGUgeDY0LVdvcmQgdG8gQU5EIHdpdGggdGhpcyB3b3JkLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7WDY0V29yZH0gQSBuZXcgeDY0LVdvcmQgb2JqZWN0IGFmdGVyIEFORGluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGFuZGVkID0geDY0V29yZC5hbmQoYW5vdGhlclg2NFdvcmQpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIC8vIGFuZDogZnVuY3Rpb24gKHdvcmQpIHtcblx0ICAgICAgICAgICAgLy8gdmFyIGhpZ2ggPSB0aGlzLmhpZ2ggJiB3b3JkLmhpZ2g7XG5cdCAgICAgICAgICAgIC8vIHZhciBsb3cgPSB0aGlzLmxvdyAmIHdvcmQubG93O1xuXG5cdCAgICAgICAgICAgIC8vIHJldHVybiBYNjRXb3JkLmNyZWF0ZShoaWdoLCBsb3cpO1xuXHQgICAgICAgIC8vIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBCaXR3aXNlIE9ScyB0aGlzIHdvcmQgd2l0aCB0aGUgcGFzc2VkIHdvcmQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1g2NFdvcmR9IHdvcmQgVGhlIHg2NC1Xb3JkIHRvIE9SIHdpdGggdGhpcyB3b3JkLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7WDY0V29yZH0gQSBuZXcgeDY0LVdvcmQgb2JqZWN0IGFmdGVyIE9SaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgb3JlZCA9IHg2NFdvcmQub3IoYW5vdGhlclg2NFdvcmQpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIC8vIG9yOiBmdW5jdGlvbiAod29yZCkge1xuXHQgICAgICAgICAgICAvLyB2YXIgaGlnaCA9IHRoaXMuaGlnaCB8IHdvcmQuaGlnaDtcblx0ICAgICAgICAgICAgLy8gdmFyIGxvdyA9IHRoaXMubG93IHwgd29yZC5sb3c7XG5cblx0ICAgICAgICAgICAgLy8gcmV0dXJuIFg2NFdvcmQuY3JlYXRlKGhpZ2gsIGxvdyk7XG5cdCAgICAgICAgLy8gfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEJpdHdpc2UgWE9ScyB0aGlzIHdvcmQgd2l0aCB0aGUgcGFzc2VkIHdvcmQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1g2NFdvcmR9IHdvcmQgVGhlIHg2NC1Xb3JkIHRvIFhPUiB3aXRoIHRoaXMgd29yZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1g2NFdvcmR9IEEgbmV3IHg2NC1Xb3JkIG9iamVjdCBhZnRlciBYT1JpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB4b3JlZCA9IHg2NFdvcmQueG9yKGFub3RoZXJYNjRXb3JkKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICAvLyB4b3I6IGZ1bmN0aW9uICh3b3JkKSB7XG5cdCAgICAgICAgICAgIC8vIHZhciBoaWdoID0gdGhpcy5oaWdoIF4gd29yZC5oaWdoO1xuXHQgICAgICAgICAgICAvLyB2YXIgbG93ID0gdGhpcy5sb3cgXiB3b3JkLmxvdztcblxuXHQgICAgICAgICAgICAvLyByZXR1cm4gWDY0V29yZC5jcmVhdGUoaGlnaCwgbG93KTtcblx0ICAgICAgICAvLyB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogU2hpZnRzIHRoaXMgd29yZCBuIGJpdHMgdG8gdGhlIGxlZnQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIGJpdHMgdG8gc2hpZnQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtYNjRXb3JkfSBBIG5ldyB4NjQtV29yZCBvYmplY3QgYWZ0ZXIgc2hpZnRpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBzaGlmdGVkID0geDY0V29yZC5zaGlmdEwoMjUpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIC8vIHNoaWZ0TDogZnVuY3Rpb24gKG4pIHtcblx0ICAgICAgICAgICAgLy8gaWYgKG4gPCAzMikge1xuXHQgICAgICAgICAgICAgICAgLy8gdmFyIGhpZ2ggPSAodGhpcy5oaWdoIDw8IG4pIHwgKHRoaXMubG93ID4+PiAoMzIgLSBuKSk7XG5cdCAgICAgICAgICAgICAgICAvLyB2YXIgbG93ID0gdGhpcy5sb3cgPDwgbjtcblx0ICAgICAgICAgICAgLy8gfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIC8vIHZhciBoaWdoID0gdGhpcy5sb3cgPDwgKG4gLSAzMik7XG5cdCAgICAgICAgICAgICAgICAvLyB2YXIgbG93ID0gMDtcblx0ICAgICAgICAgICAgLy8gfVxuXG5cdCAgICAgICAgICAgIC8vIHJldHVybiBYNjRXb3JkLmNyZWF0ZShoaWdoLCBsb3cpO1xuXHQgICAgICAgIC8vIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBTaGlmdHMgdGhpcyB3b3JkIG4gYml0cyB0byB0aGUgcmlnaHQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIGJpdHMgdG8gc2hpZnQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtYNjRXb3JkfSBBIG5ldyB4NjQtV29yZCBvYmplY3QgYWZ0ZXIgc2hpZnRpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBzaGlmdGVkID0geDY0V29yZC5zaGlmdFIoNyk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgLy8gc2hpZnRSOiBmdW5jdGlvbiAobikge1xuXHQgICAgICAgICAgICAvLyBpZiAobiA8IDMyKSB7XG5cdCAgICAgICAgICAgICAgICAvLyB2YXIgbG93ID0gKHRoaXMubG93ID4+PiBuKSB8ICh0aGlzLmhpZ2ggPDwgKDMyIC0gbikpO1xuXHQgICAgICAgICAgICAgICAgLy8gdmFyIGhpZ2ggPSB0aGlzLmhpZ2ggPj4+IG47XG5cdCAgICAgICAgICAgIC8vIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAvLyB2YXIgbG93ID0gdGhpcy5oaWdoID4+PiAobiAtIDMyKTtcblx0ICAgICAgICAgICAgICAgIC8vIHZhciBoaWdoID0gMDtcblx0ICAgICAgICAgICAgLy8gfVxuXG5cdCAgICAgICAgICAgIC8vIHJldHVybiBYNjRXb3JkLmNyZWF0ZShoaWdoLCBsb3cpO1xuXHQgICAgICAgIC8vIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBSb3RhdGVzIHRoaXMgd29yZCBuIGJpdHMgdG8gdGhlIGxlZnQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIGJpdHMgdG8gcm90YXRlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7WDY0V29yZH0gQSBuZXcgeDY0LVdvcmQgb2JqZWN0IGFmdGVyIHJvdGF0aW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgcm90YXRlZCA9IHg2NFdvcmQucm90TCgyNSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgLy8gcm90TDogZnVuY3Rpb24gKG4pIHtcblx0ICAgICAgICAgICAgLy8gcmV0dXJuIHRoaXMuc2hpZnRMKG4pLm9yKHRoaXMuc2hpZnRSKDY0IC0gbikpO1xuXHQgICAgICAgIC8vIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBSb3RhdGVzIHRoaXMgd29yZCBuIGJpdHMgdG8gdGhlIHJpZ2h0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiBiaXRzIHRvIHJvdGF0ZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1g2NFdvcmR9IEEgbmV3IHg2NC1Xb3JkIG9iamVjdCBhZnRlciByb3RhdGluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHJvdGF0ZWQgPSB4NjRXb3JkLnJvdFIoNyk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgLy8gcm90UjogZnVuY3Rpb24gKG4pIHtcblx0ICAgICAgICAgICAgLy8gcmV0dXJuIHRoaXMuc2hpZnRSKG4pLm9yKHRoaXMuc2hpZnRMKDY0IC0gbikpO1xuXHQgICAgICAgIC8vIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBBZGRzIHRoaXMgd29yZCB3aXRoIHRoZSBwYXNzZWQgd29yZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7WDY0V29yZH0gd29yZCBUaGUgeDY0LVdvcmQgdG8gYWRkIHdpdGggdGhpcyB3b3JkLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7WDY0V29yZH0gQSBuZXcgeDY0LVdvcmQgb2JqZWN0IGFmdGVyIGFkZGluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGFkZGVkID0geDY0V29yZC5hZGQoYW5vdGhlclg2NFdvcmQpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIC8vIGFkZDogZnVuY3Rpb24gKHdvcmQpIHtcblx0ICAgICAgICAgICAgLy8gdmFyIGxvdyA9ICh0aGlzLmxvdyArIHdvcmQubG93KSB8IDA7XG5cdCAgICAgICAgICAgIC8vIHZhciBjYXJyeSA9IChsb3cgPj4+IDApIDwgKHRoaXMubG93ID4+PiAwKSA/IDEgOiAwO1xuXHQgICAgICAgICAgICAvLyB2YXIgaGlnaCA9ICh0aGlzLmhpZ2ggKyB3b3JkLmhpZ2ggKyBjYXJyeSkgfCAwO1xuXG5cdCAgICAgICAgICAgIC8vIHJldHVybiBYNjRXb3JkLmNyZWF0ZShoaWdoLCBsb3cpO1xuXHQgICAgICAgIC8vIH1cblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIEFuIGFycmF5IG9mIDY0LWJpdCB3b3Jkcy5cblx0ICAgICAqXG5cdCAgICAgKiBAcHJvcGVydHkge0FycmF5fSB3b3JkcyBUaGUgYXJyYXkgb2YgQ3J5cHRvSlMueDY0LldvcmQgb2JqZWN0cy5cblx0ICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBzaWdCeXRlcyBUaGUgbnVtYmVyIG9mIHNpZ25pZmljYW50IGJ5dGVzIGluIHRoaXMgd29yZCBhcnJheS5cblx0ICAgICAqL1xuXHQgICAgdmFyIFg2NFdvcmRBcnJheSA9IENfeDY0LldvcmRBcnJheSA9IEJhc2UuZXh0ZW5kKHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBJbml0aWFsaXplcyBhIG5ld2x5IGNyZWF0ZWQgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IHdvcmRzIChPcHRpb25hbCkgQW4gYXJyYXkgb2YgQ3J5cHRvSlMueDY0LldvcmQgb2JqZWN0cy5cblx0ICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gc2lnQnl0ZXMgKE9wdGlvbmFsKSBUaGUgbnVtYmVyIG9mIHNpZ25pZmljYW50IGJ5dGVzIGluIHRoZSB3b3Jkcy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHdvcmRBcnJheSA9IENyeXB0b0pTLng2NC5Xb3JkQXJyYXkuY3JlYXRlKCk7XG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHdvcmRBcnJheSA9IENyeXB0b0pTLng2NC5Xb3JkQXJyYXkuY3JlYXRlKFtcblx0ICAgICAgICAgKiAgICAgICAgIENyeXB0b0pTLng2NC5Xb3JkLmNyZWF0ZSgweDAwMDEwMjAzLCAweDA0MDUwNjA3KSxcblx0ICAgICAgICAgKiAgICAgICAgIENyeXB0b0pTLng2NC5Xb3JkLmNyZWF0ZSgweDE4MTkxYTFiLCAweDFjMWQxZTFmKVxuXHQgICAgICAgICAqICAgICBdKTtcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgd29yZEFycmF5ID0gQ3J5cHRvSlMueDY0LldvcmRBcnJheS5jcmVhdGUoW1xuXHQgICAgICAgICAqICAgICAgICAgQ3J5cHRvSlMueDY0LldvcmQuY3JlYXRlKDB4MDAwMTAyMDMsIDB4MDQwNTA2MDcpLFxuXHQgICAgICAgICAqICAgICAgICAgQ3J5cHRvSlMueDY0LldvcmQuY3JlYXRlKDB4MTgxOTFhMWIsIDB4MWMxZDFlMWYpXG5cdCAgICAgICAgICogICAgIF0sIDEwKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBpbml0OiBmdW5jdGlvbiAod29yZHMsIHNpZ0J5dGVzKSB7XG5cdCAgICAgICAgICAgIHdvcmRzID0gdGhpcy53b3JkcyA9IHdvcmRzIHx8IFtdO1xuXG5cdCAgICAgICAgICAgIGlmIChzaWdCeXRlcyAhPSB1bmRlZmluZWQpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuc2lnQnl0ZXMgPSBzaWdCeXRlcztcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuc2lnQnl0ZXMgPSB3b3Jkcy5sZW5ndGggKiA4O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbnZlcnRzIHRoaXMgNjQtYml0IHdvcmQgYXJyYXkgdG8gYSAzMi1iaXQgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge0NyeXB0b0pTLmxpYi5Xb3JkQXJyYXl9IFRoaXMgd29yZCBhcnJheSdzIGRhdGEgYXMgYSAzMi1iaXQgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHgzMldvcmRBcnJheSA9IHg2NFdvcmRBcnJheS50b1gzMigpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHRvWDMyOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgeDY0V29yZHMgPSB0aGlzLndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgeDY0V29yZHNMZW5ndGggPSB4NjRXb3Jkcy5sZW5ndGg7XG5cblx0ICAgICAgICAgICAgLy8gQ29udmVydFxuXHQgICAgICAgICAgICB2YXIgeDMyV29yZHMgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB4NjRXb3Jkc0xlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgeDY0V29yZCA9IHg2NFdvcmRzW2ldO1xuXHQgICAgICAgICAgICAgICAgeDMyV29yZHMucHVzaCh4NjRXb3JkLmhpZ2gpO1xuXHQgICAgICAgICAgICAgICAgeDMyV29yZHMucHVzaCh4NjRXb3JkLmxvdyk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gWDMyV29yZEFycmF5LmNyZWF0ZSh4MzJXb3JkcywgdGhpcy5zaWdCeXRlcyk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENyZWF0ZXMgYSBjb3B5IG9mIHRoaXMgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1g2NFdvcmRBcnJheX0gVGhlIGNsb25lLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgY2xvbmUgPSB4NjRXb3JkQXJyYXkuY2xvbmUoKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgY2xvbmUgPSBCYXNlLmNsb25lLmNhbGwodGhpcyk7XG5cblx0ICAgICAgICAgICAgLy8gQ2xvbmUgXCJ3b3Jkc1wiIGFycmF5XG5cdCAgICAgICAgICAgIHZhciB3b3JkcyA9IGNsb25lLndvcmRzID0gdGhpcy53b3Jkcy5zbGljZSgwKTtcblxuXHQgICAgICAgICAgICAvLyBDbG9uZSBlYWNoIFg2NFdvcmQgb2JqZWN0XG5cdCAgICAgICAgICAgIHZhciB3b3Jkc0xlbmd0aCA9IHdvcmRzLmxlbmd0aDtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3b3Jkc0xlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB3b3Jkc1tpXSA9IHdvcmRzW2ldLmNsb25lKCk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gY2xvbmU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdH0oKSk7XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlM7XG5cbn0pKTsiLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcblxuLy8gY2FjaGVkIGZyb20gd2hhdGV2ZXIgZ2xvYmFsIGlzIHByZXNlbnQgc28gdGhhdCB0ZXN0IHJ1bm5lcnMgdGhhdCBzdHViIGl0XG4vLyBkb24ndCBicmVhayB0aGluZ3MuICBCdXQgd2UgbmVlZCB0byB3cmFwIGl0IGluIGEgdHJ5IGNhdGNoIGluIGNhc2UgaXQgaXNcbi8vIHdyYXBwZWQgaW4gc3RyaWN0IG1vZGUgY29kZSB3aGljaCBkb2Vzbid0IGRlZmluZSBhbnkgZ2xvYmFscy4gIEl0J3MgaW5zaWRlIGFcbi8vIGZ1bmN0aW9uIGJlY2F1c2UgdHJ5L2NhdGNoZXMgZGVvcHRpbWl6ZSBpbiBjZXJ0YWluIGVuZ2luZXMuXG5cbnZhciBjYWNoZWRTZXRUaW1lb3V0O1xudmFyIGNhY2hlZENsZWFyVGltZW91dDtcblxuZnVuY3Rpb24gZGVmYXVsdFNldFRpbW91dCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRDbGVhclRpbWVvdXQgKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG4oZnVuY3Rpb24gKCkge1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0VGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2xlYXJUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgIH1cbn0gKCkpXG5mdW5jdGlvbiBydW5UaW1lb3V0KGZ1bikge1xuICAgIGlmIChjYWNoZWRTZXRUaW1lb3V0ID09PSBzZXRUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICAvLyBpZiBzZXRUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkU2V0VGltZW91dCA9PT0gZGVmYXVsdFNldFRpbW91dCB8fCAhY2FjaGVkU2V0VGltZW91dCkgJiYgc2V0VGltZW91dCkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dChmdW4sIDApO1xuICAgIH0gY2F0Y2goZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwobnVsbCwgZnVuLCAwKTtcbiAgICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKHRoaXMsIGZ1biwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxufVxuZnVuY3Rpb24gcnVuQ2xlYXJUaW1lb3V0KG1hcmtlcikge1xuICAgIGlmIChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGNsZWFyVGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICAvLyBpZiBjbGVhclRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGRlZmF1bHRDbGVhclRpbWVvdXQgfHwgIWNhY2hlZENsZWFyVGltZW91dCkgJiYgY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCAgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbChudWxsLCBtYXJrZXIpO1xuICAgICAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yLlxuICAgICAgICAgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBJLkUuIGhhdmUgZGlmZmVyZW50IHJ1bGVzIGZvciBjbGVhclRpbWVvdXQgdnMgc2V0VGltZW91dFxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKHRoaXMsIG1hcmtlcik7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG59XG52YXIgcXVldWUgPSBbXTtcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xudmFyIGN1cnJlbnRRdWV1ZTtcbnZhciBxdWV1ZUluZGV4ID0gLTE7XG5cbmZ1bmN0aW9uIGNsZWFuVXBOZXh0VGljaygpIHtcbiAgICBpZiAoIWRyYWluaW5nIHx8ICFjdXJyZW50UXVldWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHF1ZXVlID0gY3VycmVudFF1ZXVlLmNvbmNhdChxdWV1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgIH1cbiAgICBpZiAocXVldWUubGVuZ3RoKSB7XG4gICAgICAgIGRyYWluUXVldWUoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYWluUXVldWUoKSB7XG4gICAgaWYgKGRyYWluaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHRpbWVvdXQgPSBydW5UaW1lb3V0KGNsZWFuVXBOZXh0VGljayk7XG4gICAgZHJhaW5pbmcgPSB0cnVlO1xuXG4gICAgdmFyIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZShsZW4pIHtcbiAgICAgICAgY3VycmVudFF1ZXVlID0gcXVldWU7XG4gICAgICAgIHF1ZXVlID0gW107XG4gICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UXVldWUpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UXVldWVbcXVldWVJbmRleF0ucnVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgfVxuICAgIGN1cnJlbnRRdWV1ZSA9IG51bGw7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBydW5DbGVhclRpbWVvdXQodGltZW91dCk7XG59XG5cbnByb2Nlc3MubmV4dFRpY2sgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcXVldWUucHVzaChuZXcgSXRlbShmdW4sIGFyZ3MpKTtcbiAgICBpZiAocXVldWUubGVuZ3RoID09PSAxICYmICFkcmFpbmluZykge1xuICAgICAgICBydW5UaW1lb3V0KGRyYWluUXVldWUpO1xuICAgIH1cbn07XG5cbi8vIHY4IGxpa2VzIHByZWRpY3RpYmxlIG9iamVjdHNcbmZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xuICAgIHRoaXMuZnVuID0gZnVuO1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbn1cbkl0ZW0ucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmZ1bi5hcHBseShudWxsLCB0aGlzLmFycmF5KTtcbn07XG5wcm9jZXNzLnRpdGxlID0gJ2Jyb3dzZXInO1xucHJvY2Vzcy5icm93c2VyID0gdHJ1ZTtcbnByb2Nlc3MuZW52ID0ge307XG5wcm9jZXNzLmFyZ3YgPSBbXTtcbnByb2Nlc3MudmVyc2lvbiA9ICcnOyAvLyBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgcmVnZXhwIGlzc3Vlc1xucHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBub29wKCkge31cblxucHJvY2Vzcy5vbiA9IG5vb3A7XG5wcm9jZXNzLmFkZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3Mub25jZSA9IG5vb3A7XG5wcm9jZXNzLm9mZiA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUxpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcbnByb2Nlc3MuZW1pdCA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRPbmNlTGlzdGVuZXIgPSBub29wO1xuXG5wcm9jZXNzLmxpc3RlbmVycyA9IGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiBbXSB9XG5cbnByb2Nlc3MuYmluZGluZyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcblxucHJvY2Vzcy5jd2QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnLycgfTtcbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5wcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgcmVwbGFjZSA9IFN0cmluZy5wcm90b3R5cGUucmVwbGFjZTtcbnZhciBwZXJjZW50VHdlbnRpZXMgPSAvJTIwL2c7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgICdkZWZhdWx0JzogJ1JGQzM5ODYnLFxuICAgIGZvcm1hdHRlcnM6IHtcbiAgICAgICAgUkZDMTczODogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVwbGFjZS5jYWxsKHZhbHVlLCBwZXJjZW50VHdlbnRpZXMsICcrJyk7XG4gICAgICAgIH0sXG4gICAgICAgIFJGQzM5ODY6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBSRkMxNzM4OiAnUkZDMTczOCcsXG4gICAgUkZDMzk4NjogJ1JGQzM5ODYnXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgc3RyaW5naWZ5ID0gcmVxdWlyZSgnLi9zdHJpbmdpZnknKTtcbnZhciBwYXJzZSA9IHJlcXVpcmUoJy4vcGFyc2UnKTtcbnZhciBmb3JtYXRzID0gcmVxdWlyZSgnLi9mb3JtYXRzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIGZvcm1hdHM6IGZvcm1hdHMsXG4gICAgcGFyc2U6IHBhcnNlLFxuICAgIHN0cmluZ2lmeTogc3RyaW5naWZ5XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG5cbnZhciBoYXMgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG52YXIgZGVmYXVsdHMgPSB7XG4gICAgYWxsb3dEb3RzOiBmYWxzZSxcbiAgICBhbGxvd1Byb3RvdHlwZXM6IGZhbHNlLFxuICAgIGFycmF5TGltaXQ6IDIwLFxuICAgIGRlY29kZXI6IHV0aWxzLmRlY29kZSxcbiAgICBkZWxpbWl0ZXI6ICcmJyxcbiAgICBkZXB0aDogNSxcbiAgICBwYXJhbWV0ZXJMaW1pdDogMTAwMCxcbiAgICBwbGFpbk9iamVjdHM6IGZhbHNlLFxuICAgIHN0cmljdE51bGxIYW5kbGluZzogZmFsc2Vcbn07XG5cbnZhciBwYXJzZVZhbHVlcyA9IGZ1bmN0aW9uIHBhcnNlUXVlcnlTdHJpbmdWYWx1ZXMoc3RyLCBvcHRpb25zKSB7XG4gICAgdmFyIG9iaiA9IHt9O1xuICAgIHZhciBjbGVhblN0ciA9IG9wdGlvbnMuaWdub3JlUXVlcnlQcmVmaXggPyBzdHIucmVwbGFjZSgvXlxcPy8sICcnKSA6IHN0cjtcbiAgICB2YXIgbGltaXQgPSBvcHRpb25zLnBhcmFtZXRlckxpbWl0ID09PSBJbmZpbml0eSA/IHVuZGVmaW5lZCA6IG9wdGlvbnMucGFyYW1ldGVyTGltaXQ7XG4gICAgdmFyIHBhcnRzID0gY2xlYW5TdHIuc3BsaXQob3B0aW9ucy5kZWxpbWl0ZXIsIGxpbWl0KTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIHBhcnQgPSBwYXJ0c1tpXTtcblxuICAgICAgICB2YXIgYnJhY2tldEVxdWFsc1BvcyA9IHBhcnQuaW5kZXhPZignXT0nKTtcbiAgICAgICAgdmFyIHBvcyA9IGJyYWNrZXRFcXVhbHNQb3MgPT09IC0xID8gcGFydC5pbmRleE9mKCc9JykgOiBicmFja2V0RXF1YWxzUG9zICsgMTtcblxuICAgICAgICB2YXIga2V5LCB2YWw7XG4gICAgICAgIGlmIChwb3MgPT09IC0xKSB7XG4gICAgICAgICAgICBrZXkgPSBvcHRpb25zLmRlY29kZXIocGFydCwgZGVmYXVsdHMuZGVjb2Rlcik7XG4gICAgICAgICAgICB2YWwgPSBvcHRpb25zLnN0cmljdE51bGxIYW5kbGluZyA/IG51bGwgOiAnJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGtleSA9IG9wdGlvbnMuZGVjb2RlcihwYXJ0LnNsaWNlKDAsIHBvcyksIGRlZmF1bHRzLmRlY29kZXIpO1xuICAgICAgICAgICAgdmFsID0gb3B0aW9ucy5kZWNvZGVyKHBhcnQuc2xpY2UocG9zICsgMSksIGRlZmF1bHRzLmRlY29kZXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChoYXMuY2FsbChvYmosIGtleSkpIHtcbiAgICAgICAgICAgIG9ialtrZXldID0gW10uY29uY2F0KG9ialtrZXldKS5jb25jYXQodmFsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9ialtrZXldID0gdmFsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG9iajtcbn07XG5cbnZhciBwYXJzZU9iamVjdCA9IGZ1bmN0aW9uIHBhcnNlT2JqZWN0UmVjdXJzaXZlKGNoYWluLCB2YWwsIG9wdGlvbnMpIHtcbiAgICBpZiAoIWNoYWluLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH1cblxuICAgIHZhciByb290ID0gY2hhaW4uc2hpZnQoKTtcblxuICAgIHZhciBvYmo7XG4gICAgaWYgKHJvb3QgPT09ICdbXScpIHtcbiAgICAgICAgb2JqID0gW107XG4gICAgICAgIG9iaiA9IG9iai5jb25jYXQocGFyc2VPYmplY3QoY2hhaW4sIHZhbCwgb3B0aW9ucykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIG9iaiA9IG9wdGlvbnMucGxhaW5PYmplY3RzID8gT2JqZWN0LmNyZWF0ZShudWxsKSA6IHt9O1xuICAgICAgICB2YXIgY2xlYW5Sb290ID0gcm9vdC5jaGFyQXQoMCkgPT09ICdbJyAmJiByb290LmNoYXJBdChyb290Lmxlbmd0aCAtIDEpID09PSAnXScgPyByb290LnNsaWNlKDEsIC0xKSA6IHJvb3Q7XG4gICAgICAgIHZhciBpbmRleCA9IHBhcnNlSW50KGNsZWFuUm9vdCwgMTApO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhaXNOYU4oaW5kZXgpXG4gICAgICAgICAgICAmJiByb290ICE9PSBjbGVhblJvb3RcbiAgICAgICAgICAgICYmIFN0cmluZyhpbmRleCkgPT09IGNsZWFuUm9vdFxuICAgICAgICAgICAgJiYgaW5kZXggPj0gMFxuICAgICAgICAgICAgJiYgKG9wdGlvbnMucGFyc2VBcnJheXMgJiYgaW5kZXggPD0gb3B0aW9ucy5hcnJheUxpbWl0KVxuICAgICAgICApIHtcbiAgICAgICAgICAgIG9iaiA9IFtdO1xuICAgICAgICAgICAgb2JqW2luZGV4XSA9IHBhcnNlT2JqZWN0KGNoYWluLCB2YWwsIG9wdGlvbnMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb2JqW2NsZWFuUm9vdF0gPSBwYXJzZU9iamVjdChjaGFpbiwgdmFsLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBvYmo7XG59O1xuXG52YXIgcGFyc2VLZXlzID0gZnVuY3Rpb24gcGFyc2VRdWVyeVN0cmluZ0tleXMoZ2l2ZW5LZXksIHZhbCwgb3B0aW9ucykge1xuICAgIGlmICghZ2l2ZW5LZXkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFRyYW5zZm9ybSBkb3Qgbm90YXRpb24gdG8gYnJhY2tldCBub3RhdGlvblxuICAgIHZhciBrZXkgPSBvcHRpb25zLmFsbG93RG90cyA/IGdpdmVuS2V5LnJlcGxhY2UoL1xcLihbXi5bXSspL2csICdbJDFdJykgOiBnaXZlbktleTtcblxuICAgIC8vIFRoZSByZWdleCBjaHVua3NcblxuICAgIHZhciBicmFja2V0cyA9IC8oXFxbW15bXFxdXSpdKS87XG4gICAgdmFyIGNoaWxkID0gLyhcXFtbXltcXF1dKl0pL2c7XG5cbiAgICAvLyBHZXQgdGhlIHBhcmVudFxuXG4gICAgdmFyIHNlZ21lbnQgPSBicmFja2V0cy5leGVjKGtleSk7XG4gICAgdmFyIHBhcmVudCA9IHNlZ21lbnQgPyBrZXkuc2xpY2UoMCwgc2VnbWVudC5pbmRleCkgOiBrZXk7XG5cbiAgICAvLyBTdGFzaCB0aGUgcGFyZW50IGlmIGl0IGV4aXN0c1xuXG4gICAgdmFyIGtleXMgPSBbXTtcbiAgICBpZiAocGFyZW50KSB7XG4gICAgICAgIC8vIElmIHdlIGFyZW4ndCB1c2luZyBwbGFpbiBvYmplY3RzLCBvcHRpb25hbGx5IHByZWZpeCBrZXlzXG4gICAgICAgIC8vIHRoYXQgd291bGQgb3ZlcndyaXRlIG9iamVjdCBwcm90b3R5cGUgcHJvcGVydGllc1xuICAgICAgICBpZiAoIW9wdGlvbnMucGxhaW5PYmplY3RzICYmIGhhcy5jYWxsKE9iamVjdC5wcm90b3R5cGUsIHBhcmVudCkpIHtcbiAgICAgICAgICAgIGlmICghb3B0aW9ucy5hbGxvd1Byb3RvdHlwZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBrZXlzLnB1c2gocGFyZW50KTtcbiAgICB9XG5cbiAgICAvLyBMb29wIHRocm91Z2ggY2hpbGRyZW4gYXBwZW5kaW5nIHRvIHRoZSBhcnJheSB1bnRpbCB3ZSBoaXQgZGVwdGhcblxuICAgIHZhciBpID0gMDtcbiAgICB3aGlsZSAoKHNlZ21lbnQgPSBjaGlsZC5leGVjKGtleSkpICE9PSBudWxsICYmIGkgPCBvcHRpb25zLmRlcHRoKSB7XG4gICAgICAgIGkgKz0gMTtcbiAgICAgICAgaWYgKCFvcHRpb25zLnBsYWluT2JqZWN0cyAmJiBoYXMuY2FsbChPYmplY3QucHJvdG90eXBlLCBzZWdtZW50WzFdLnNsaWNlKDEsIC0xKSkpIHtcbiAgICAgICAgICAgIGlmICghb3B0aW9ucy5hbGxvd1Byb3RvdHlwZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAga2V5cy5wdXNoKHNlZ21lbnRbMV0pO1xuICAgIH1cblxuICAgIC8vIElmIHRoZXJlJ3MgYSByZW1haW5kZXIsIGp1c3QgYWRkIHdoYXRldmVyIGlzIGxlZnRcblxuICAgIGlmIChzZWdtZW50KSB7XG4gICAgICAgIGtleXMucHVzaCgnWycgKyBrZXkuc2xpY2Uoc2VnbWVudC5pbmRleCkgKyAnXScpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZU9iamVjdChrZXlzLCB2YWwsIG9wdGlvbnMpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc3RyLCBvcHRzKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBvcHRzID8gdXRpbHMuYXNzaWduKHt9LCBvcHRzKSA6IHt9O1xuXG4gICAgaWYgKG9wdGlvbnMuZGVjb2RlciAhPT0gbnVsbCAmJiBvcHRpb25zLmRlY29kZXIgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb3B0aW9ucy5kZWNvZGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0RlY29kZXIgaGFzIHRvIGJlIGEgZnVuY3Rpb24uJyk7XG4gICAgfVxuXG4gICAgb3B0aW9ucy5pZ25vcmVRdWVyeVByZWZpeCA9IG9wdGlvbnMuaWdub3JlUXVlcnlQcmVmaXggPT09IHRydWU7XG4gICAgb3B0aW9ucy5kZWxpbWl0ZXIgPSB0eXBlb2Ygb3B0aW9ucy5kZWxpbWl0ZXIgPT09ICdzdHJpbmcnIHx8IHV0aWxzLmlzUmVnRXhwKG9wdGlvbnMuZGVsaW1pdGVyKSA/IG9wdGlvbnMuZGVsaW1pdGVyIDogZGVmYXVsdHMuZGVsaW1pdGVyO1xuICAgIG9wdGlvbnMuZGVwdGggPSB0eXBlb2Ygb3B0aW9ucy5kZXB0aCA9PT0gJ251bWJlcicgPyBvcHRpb25zLmRlcHRoIDogZGVmYXVsdHMuZGVwdGg7XG4gICAgb3B0aW9ucy5hcnJheUxpbWl0ID0gdHlwZW9mIG9wdGlvbnMuYXJyYXlMaW1pdCA9PT0gJ251bWJlcicgPyBvcHRpb25zLmFycmF5TGltaXQgOiBkZWZhdWx0cy5hcnJheUxpbWl0O1xuICAgIG9wdGlvbnMucGFyc2VBcnJheXMgPSBvcHRpb25zLnBhcnNlQXJyYXlzICE9PSBmYWxzZTtcbiAgICBvcHRpb25zLmRlY29kZXIgPSB0eXBlb2Ygb3B0aW9ucy5kZWNvZGVyID09PSAnZnVuY3Rpb24nID8gb3B0aW9ucy5kZWNvZGVyIDogZGVmYXVsdHMuZGVjb2RlcjtcbiAgICBvcHRpb25zLmFsbG93RG90cyA9IHR5cGVvZiBvcHRpb25zLmFsbG93RG90cyA9PT0gJ2Jvb2xlYW4nID8gb3B0aW9ucy5hbGxvd0RvdHMgOiBkZWZhdWx0cy5hbGxvd0RvdHM7XG4gICAgb3B0aW9ucy5wbGFpbk9iamVjdHMgPSB0eXBlb2Ygb3B0aW9ucy5wbGFpbk9iamVjdHMgPT09ICdib29sZWFuJyA/IG9wdGlvbnMucGxhaW5PYmplY3RzIDogZGVmYXVsdHMucGxhaW5PYmplY3RzO1xuICAgIG9wdGlvbnMuYWxsb3dQcm90b3R5cGVzID0gdHlwZW9mIG9wdGlvbnMuYWxsb3dQcm90b3R5cGVzID09PSAnYm9vbGVhbicgPyBvcHRpb25zLmFsbG93UHJvdG90eXBlcyA6IGRlZmF1bHRzLmFsbG93UHJvdG90eXBlcztcbiAgICBvcHRpb25zLnBhcmFtZXRlckxpbWl0ID0gdHlwZW9mIG9wdGlvbnMucGFyYW1ldGVyTGltaXQgPT09ICdudW1iZXInID8gb3B0aW9ucy5wYXJhbWV0ZXJMaW1pdCA6IGRlZmF1bHRzLnBhcmFtZXRlckxpbWl0O1xuICAgIG9wdGlvbnMuc3RyaWN0TnVsbEhhbmRsaW5nID0gdHlwZW9mIG9wdGlvbnMuc3RyaWN0TnVsbEhhbmRsaW5nID09PSAnYm9vbGVhbicgPyBvcHRpb25zLnN0cmljdE51bGxIYW5kbGluZyA6IGRlZmF1bHRzLnN0cmljdE51bGxIYW5kbGluZztcblxuICAgIGlmIChzdHIgPT09ICcnIHx8IHN0ciA9PT0gbnVsbCB8fCB0eXBlb2Ygc3RyID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gb3B0aW9ucy5wbGFpbk9iamVjdHMgPyBPYmplY3QuY3JlYXRlKG51bGwpIDoge307XG4gICAgfVxuXG4gICAgdmFyIHRlbXBPYmogPSB0eXBlb2Ygc3RyID09PSAnc3RyaW5nJyA/IHBhcnNlVmFsdWVzKHN0ciwgb3B0aW9ucykgOiBzdHI7XG4gICAgdmFyIG9iaiA9IG9wdGlvbnMucGxhaW5PYmplY3RzID8gT2JqZWN0LmNyZWF0ZShudWxsKSA6IHt9O1xuXG4gICAgLy8gSXRlcmF0ZSBvdmVyIHRoZSBrZXlzIGFuZCBzZXR1cCB0aGUgbmV3IG9iamVjdFxuXG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh0ZW1wT2JqKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICAgIHZhciBuZXdPYmogPSBwYXJzZUtleXMoa2V5LCB0ZW1wT2JqW2tleV0sIG9wdGlvbnMpO1xuICAgICAgICBvYmogPSB1dGlscy5tZXJnZShvYmosIG5ld09iaiwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHV0aWxzLmNvbXBhY3Qob2JqKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcbnZhciBmb3JtYXRzID0gcmVxdWlyZSgnLi9mb3JtYXRzJyk7XG5cbnZhciBhcnJheVByZWZpeEdlbmVyYXRvcnMgPSB7XG4gICAgYnJhY2tldHM6IGZ1bmN0aW9uIGJyYWNrZXRzKHByZWZpeCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGZ1bmMtbmFtZS1tYXRjaGluZ1xuICAgICAgICByZXR1cm4gcHJlZml4ICsgJ1tdJztcbiAgICB9LFxuICAgIGluZGljZXM6IGZ1bmN0aW9uIGluZGljZXMocHJlZml4LCBrZXkpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBmdW5jLW5hbWUtbWF0Y2hpbmdcbiAgICAgICAgcmV0dXJuIHByZWZpeCArICdbJyArIGtleSArICddJztcbiAgICB9LFxuICAgIHJlcGVhdDogZnVuY3Rpb24gcmVwZWF0KHByZWZpeCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGZ1bmMtbmFtZS1tYXRjaGluZ1xuICAgICAgICByZXR1cm4gcHJlZml4O1xuICAgIH1cbn07XG5cbnZhciB0b0lTTyA9IERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nO1xuXG52YXIgZGVmYXVsdHMgPSB7XG4gICAgZGVsaW1pdGVyOiAnJicsXG4gICAgZW5jb2RlOiB0cnVlLFxuICAgIGVuY29kZXI6IHV0aWxzLmVuY29kZSxcbiAgICBlbmNvZGVWYWx1ZXNPbmx5OiBmYWxzZSxcbiAgICBzZXJpYWxpemVEYXRlOiBmdW5jdGlvbiBzZXJpYWxpemVEYXRlKGRhdGUpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBmdW5jLW5hbWUtbWF0Y2hpbmdcbiAgICAgICAgcmV0dXJuIHRvSVNPLmNhbGwoZGF0ZSk7XG4gICAgfSxcbiAgICBza2lwTnVsbHM6IGZhbHNlLFxuICAgIHN0cmljdE51bGxIYW5kbGluZzogZmFsc2Vcbn07XG5cbnZhciBzdHJpbmdpZnkgPSBmdW5jdGlvbiBzdHJpbmdpZnkoIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZnVuYy1uYW1lLW1hdGNoaW5nXG4gICAgb2JqZWN0LFxuICAgIHByZWZpeCxcbiAgICBnZW5lcmF0ZUFycmF5UHJlZml4LFxuICAgIHN0cmljdE51bGxIYW5kbGluZyxcbiAgICBza2lwTnVsbHMsXG4gICAgZW5jb2RlcixcbiAgICBmaWx0ZXIsXG4gICAgc29ydCxcbiAgICBhbGxvd0RvdHMsXG4gICAgc2VyaWFsaXplRGF0ZSxcbiAgICBmb3JtYXR0ZXIsXG4gICAgZW5jb2RlVmFsdWVzT25seVxuKSB7XG4gICAgdmFyIG9iaiA9IG9iamVjdDtcbiAgICBpZiAodHlwZW9mIGZpbHRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBvYmogPSBmaWx0ZXIocHJlZml4LCBvYmopO1xuICAgIH0gZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICBvYmogPSBzZXJpYWxpemVEYXRlKG9iaik7XG4gICAgfSBlbHNlIGlmIChvYmogPT09IG51bGwpIHtcbiAgICAgICAgaWYgKHN0cmljdE51bGxIYW5kbGluZykge1xuICAgICAgICAgICAgcmV0dXJuIGVuY29kZXIgJiYgIWVuY29kZVZhbHVlc09ubHkgPyBlbmNvZGVyKHByZWZpeCwgZGVmYXVsdHMuZW5jb2RlcikgOiBwcmVmaXg7XG4gICAgICAgIH1cblxuICAgICAgICBvYmogPSAnJztcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG9iaiA9PT0gJ251bWJlcicgfHwgdHlwZW9mIG9iaiA9PT0gJ2Jvb2xlYW4nIHx8IHV0aWxzLmlzQnVmZmVyKG9iaikpIHtcbiAgICAgICAgaWYgKGVuY29kZXIpIHtcbiAgICAgICAgICAgIHZhciBrZXlWYWx1ZSA9IGVuY29kZVZhbHVlc09ubHkgPyBwcmVmaXggOiBlbmNvZGVyKHByZWZpeCwgZGVmYXVsdHMuZW5jb2Rlcik7XG4gICAgICAgICAgICByZXR1cm4gW2Zvcm1hdHRlcihrZXlWYWx1ZSkgKyAnPScgKyBmb3JtYXR0ZXIoZW5jb2RlcihvYmosIGRlZmF1bHRzLmVuY29kZXIpKV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtmb3JtYXR0ZXIocHJlZml4KSArICc9JyArIGZvcm1hdHRlcihTdHJpbmcob2JqKSldO1xuICAgIH1cblxuICAgIHZhciB2YWx1ZXMgPSBbXTtcblxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gdmFsdWVzO1xuICAgIH1cblxuICAgIHZhciBvYmpLZXlzO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGZpbHRlcikpIHtcbiAgICAgICAgb2JqS2V5cyA9IGZpbHRlcjtcbiAgICB9IGVsc2Uge1xuICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG4gICAgICAgIG9iaktleXMgPSBzb3J0ID8ga2V5cy5zb3J0KHNvcnQpIDoga2V5cztcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iaktleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIGtleSA9IG9iaktleXNbaV07XG5cbiAgICAgICAgaWYgKHNraXBOdWxscyAmJiBvYmpba2V5XSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgICAgICAgICB2YWx1ZXMgPSB2YWx1ZXMuY29uY2F0KHN0cmluZ2lmeShcbiAgICAgICAgICAgICAgICBvYmpba2V5XSxcbiAgICAgICAgICAgICAgICBnZW5lcmF0ZUFycmF5UHJlZml4KHByZWZpeCwga2V5KSxcbiAgICAgICAgICAgICAgICBnZW5lcmF0ZUFycmF5UHJlZml4LFxuICAgICAgICAgICAgICAgIHN0cmljdE51bGxIYW5kbGluZyxcbiAgICAgICAgICAgICAgICBza2lwTnVsbHMsXG4gICAgICAgICAgICAgICAgZW5jb2RlcixcbiAgICAgICAgICAgICAgICBmaWx0ZXIsXG4gICAgICAgICAgICAgICAgc29ydCxcbiAgICAgICAgICAgICAgICBhbGxvd0RvdHMsXG4gICAgICAgICAgICAgICAgc2VyaWFsaXplRGF0ZSxcbiAgICAgICAgICAgICAgICBmb3JtYXR0ZXIsXG4gICAgICAgICAgICAgICAgZW5jb2RlVmFsdWVzT25seVxuICAgICAgICAgICAgKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWx1ZXMgPSB2YWx1ZXMuY29uY2F0KHN0cmluZ2lmeShcbiAgICAgICAgICAgICAgICBvYmpba2V5XSxcbiAgICAgICAgICAgICAgICBwcmVmaXggKyAoYWxsb3dEb3RzID8gJy4nICsga2V5IDogJ1snICsga2V5ICsgJ10nKSxcbiAgICAgICAgICAgICAgICBnZW5lcmF0ZUFycmF5UHJlZml4LFxuICAgICAgICAgICAgICAgIHN0cmljdE51bGxIYW5kbGluZyxcbiAgICAgICAgICAgICAgICBza2lwTnVsbHMsXG4gICAgICAgICAgICAgICAgZW5jb2RlcixcbiAgICAgICAgICAgICAgICBmaWx0ZXIsXG4gICAgICAgICAgICAgICAgc29ydCxcbiAgICAgICAgICAgICAgICBhbGxvd0RvdHMsXG4gICAgICAgICAgICAgICAgc2VyaWFsaXplRGF0ZSxcbiAgICAgICAgICAgICAgICBmb3JtYXR0ZXIsXG4gICAgICAgICAgICAgICAgZW5jb2RlVmFsdWVzT25seVxuICAgICAgICAgICAgKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWVzO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBvcHRzKSB7XG4gICAgdmFyIG9iaiA9IG9iamVjdDtcbiAgICB2YXIgb3B0aW9ucyA9IG9wdHMgPyB1dGlscy5hc3NpZ24oe30sIG9wdHMpIDoge307XG5cbiAgICBpZiAob3B0aW9ucy5lbmNvZGVyICE9PSBudWxsICYmIG9wdGlvbnMuZW5jb2RlciAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvcHRpb25zLmVuY29kZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRW5jb2RlciBoYXMgdG8gYmUgYSBmdW5jdGlvbi4nKTtcbiAgICB9XG5cbiAgICB2YXIgZGVsaW1pdGVyID0gdHlwZW9mIG9wdGlvbnMuZGVsaW1pdGVyID09PSAndW5kZWZpbmVkJyA/IGRlZmF1bHRzLmRlbGltaXRlciA6IG9wdGlvbnMuZGVsaW1pdGVyO1xuICAgIHZhciBzdHJpY3ROdWxsSGFuZGxpbmcgPSB0eXBlb2Ygb3B0aW9ucy5zdHJpY3ROdWxsSGFuZGxpbmcgPT09ICdib29sZWFuJyA/IG9wdGlvbnMuc3RyaWN0TnVsbEhhbmRsaW5nIDogZGVmYXVsdHMuc3RyaWN0TnVsbEhhbmRsaW5nO1xuICAgIHZhciBza2lwTnVsbHMgPSB0eXBlb2Ygb3B0aW9ucy5za2lwTnVsbHMgPT09ICdib29sZWFuJyA/IG9wdGlvbnMuc2tpcE51bGxzIDogZGVmYXVsdHMuc2tpcE51bGxzO1xuICAgIHZhciBlbmNvZGUgPSB0eXBlb2Ygb3B0aW9ucy5lbmNvZGUgPT09ICdib29sZWFuJyA/IG9wdGlvbnMuZW5jb2RlIDogZGVmYXVsdHMuZW5jb2RlO1xuICAgIHZhciBlbmNvZGVyID0gdHlwZW9mIG9wdGlvbnMuZW5jb2RlciA9PT0gJ2Z1bmN0aW9uJyA/IG9wdGlvbnMuZW5jb2RlciA6IGRlZmF1bHRzLmVuY29kZXI7XG4gICAgdmFyIHNvcnQgPSB0eXBlb2Ygb3B0aW9ucy5zb3J0ID09PSAnZnVuY3Rpb24nID8gb3B0aW9ucy5zb3J0IDogbnVsbDtcbiAgICB2YXIgYWxsb3dEb3RzID0gdHlwZW9mIG9wdGlvbnMuYWxsb3dEb3RzID09PSAndW5kZWZpbmVkJyA/IGZhbHNlIDogb3B0aW9ucy5hbGxvd0RvdHM7XG4gICAgdmFyIHNlcmlhbGl6ZURhdGUgPSB0eXBlb2Ygb3B0aW9ucy5zZXJpYWxpemVEYXRlID09PSAnZnVuY3Rpb24nID8gb3B0aW9ucy5zZXJpYWxpemVEYXRlIDogZGVmYXVsdHMuc2VyaWFsaXplRGF0ZTtcbiAgICB2YXIgZW5jb2RlVmFsdWVzT25seSA9IHR5cGVvZiBvcHRpb25zLmVuY29kZVZhbHVlc09ubHkgPT09ICdib29sZWFuJyA/IG9wdGlvbnMuZW5jb2RlVmFsdWVzT25seSA6IGRlZmF1bHRzLmVuY29kZVZhbHVlc09ubHk7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmZvcm1hdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgb3B0aW9ucy5mb3JtYXQgPSBmb3JtYXRzLmRlZmF1bHQ7XG4gICAgfSBlbHNlIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGZvcm1hdHMuZm9ybWF0dGVycywgb3B0aW9ucy5mb3JtYXQpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZm9ybWF0IG9wdGlvbiBwcm92aWRlZC4nKTtcbiAgICB9XG4gICAgdmFyIGZvcm1hdHRlciA9IGZvcm1hdHMuZm9ybWF0dGVyc1tvcHRpb25zLmZvcm1hdF07XG4gICAgdmFyIG9iaktleXM7XG4gICAgdmFyIGZpbHRlcjtcblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5maWx0ZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZmlsdGVyID0gb3B0aW9ucy5maWx0ZXI7XG4gICAgICAgIG9iaiA9IGZpbHRlcignJywgb2JqKTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucy5maWx0ZXIpKSB7XG4gICAgICAgIGZpbHRlciA9IG9wdGlvbnMuZmlsdGVyO1xuICAgICAgICBvYmpLZXlzID0gZmlsdGVyO1xuICAgIH1cblxuICAgIHZhciBrZXlzID0gW107XG5cbiAgICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgb2JqID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICB2YXIgYXJyYXlGb3JtYXQ7XG4gICAgaWYgKG9wdGlvbnMuYXJyYXlGb3JtYXQgaW4gYXJyYXlQcmVmaXhHZW5lcmF0b3JzKSB7XG4gICAgICAgIGFycmF5Rm9ybWF0ID0gb3B0aW9ucy5hcnJheUZvcm1hdDtcbiAgICB9IGVsc2UgaWYgKCdpbmRpY2VzJyBpbiBvcHRpb25zKSB7XG4gICAgICAgIGFycmF5Rm9ybWF0ID0gb3B0aW9ucy5pbmRpY2VzID8gJ2luZGljZXMnIDogJ3JlcGVhdCc7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgYXJyYXlGb3JtYXQgPSAnaW5kaWNlcyc7XG4gICAgfVxuXG4gICAgdmFyIGdlbmVyYXRlQXJyYXlQcmVmaXggPSBhcnJheVByZWZpeEdlbmVyYXRvcnNbYXJyYXlGb3JtYXRdO1xuXG4gICAgaWYgKCFvYmpLZXlzKSB7XG4gICAgICAgIG9iaktleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICAgIH1cblxuICAgIGlmIChzb3J0KSB7XG4gICAgICAgIG9iaktleXMuc29ydChzb3J0KTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iaktleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIGtleSA9IG9iaktleXNbaV07XG5cbiAgICAgICAgaWYgKHNraXBOdWxscyAmJiBvYmpba2V5XSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBrZXlzID0ga2V5cy5jb25jYXQoc3RyaW5naWZ5KFxuICAgICAgICAgICAgb2JqW2tleV0sXG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICBnZW5lcmF0ZUFycmF5UHJlZml4LFxuICAgICAgICAgICAgc3RyaWN0TnVsbEhhbmRsaW5nLFxuICAgICAgICAgICAgc2tpcE51bGxzLFxuICAgICAgICAgICAgZW5jb2RlID8gZW5jb2RlciA6IG51bGwsXG4gICAgICAgICAgICBmaWx0ZXIsXG4gICAgICAgICAgICBzb3J0LFxuICAgICAgICAgICAgYWxsb3dEb3RzLFxuICAgICAgICAgICAgc2VyaWFsaXplRGF0ZSxcbiAgICAgICAgICAgIGZvcm1hdHRlcixcbiAgICAgICAgICAgIGVuY29kZVZhbHVlc09ubHlcbiAgICAgICAgKSk7XG4gICAgfVxuXG4gICAgdmFyIGpvaW5lZCA9IGtleXMuam9pbihkZWxpbWl0ZXIpO1xuICAgIHZhciBwcmVmaXggPSBvcHRpb25zLmFkZFF1ZXJ5UHJlZml4ID09PSB0cnVlID8gJz8nIDogJyc7XG5cbiAgICByZXR1cm4gam9pbmVkLmxlbmd0aCA+IDAgPyBwcmVmaXggKyBqb2luZWQgOiAnJztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBoYXMgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG52YXIgaGV4VGFibGUgPSAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBhcnJheSA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyArK2kpIHtcbiAgICAgICAgYXJyYXkucHVzaCgnJScgKyAoKGkgPCAxNiA/ICcwJyA6ICcnKSArIGkudG9TdHJpbmcoMTYpKS50b1VwcGVyQ2FzZSgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJyYXk7XG59KCkpO1xuXG5leHBvcnRzLmFycmF5VG9PYmplY3QgPSBmdW5jdGlvbiAoc291cmNlLCBvcHRpb25zKSB7XG4gICAgdmFyIG9iaiA9IG9wdGlvbnMgJiYgb3B0aW9ucy5wbGFpbk9iamVjdHMgPyBPYmplY3QuY3JlYXRlKG51bGwpIDoge307XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzb3VyY2UubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzb3VyY2VbaV0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBvYmpbaV0gPSBzb3VyY2VbaV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gb2JqO1xufTtcblxuZXhwb3J0cy5tZXJnZSA9IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSwgb3B0aW9ucykge1xuICAgIGlmICghc291cmNlKSB7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBzb3VyY2UgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRhcmdldCkpIHtcbiAgICAgICAgICAgIHRhcmdldC5wdXNoKHNvdXJjZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRhcmdldCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnBsYWluT2JqZWN0cyB8fCBvcHRpb25zLmFsbG93UHJvdG90eXBlcyB8fCAhaGFzLmNhbGwoT2JqZWN0LnByb3RvdHlwZSwgc291cmNlKSkge1xuICAgICAgICAgICAgICAgIHRhcmdldFtzb3VyY2VdID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBbdGFyZ2V0LCBzb3VyY2VdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHRhcmdldCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIFt0YXJnZXRdLmNvbmNhdChzb3VyY2UpO1xuICAgIH1cblxuICAgIHZhciBtZXJnZVRhcmdldCA9IHRhcmdldDtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0YXJnZXQpICYmICFBcnJheS5pc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgICAgbWVyZ2VUYXJnZXQgPSBleHBvcnRzLmFycmF5VG9PYmplY3QodGFyZ2V0LCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0YXJnZXQpICYmIEFycmF5LmlzQXJyYXkoc291cmNlKSkge1xuICAgICAgICBzb3VyY2UuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSwgaSkge1xuICAgICAgICAgICAgaWYgKGhhcy5jYWxsKHRhcmdldCwgaSkpIHtcbiAgICAgICAgICAgICAgICBpZiAodGFyZ2V0W2ldICYmIHR5cGVvZiB0YXJnZXRbaV0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldFtpXSA9IGV4cG9ydHMubWVyZ2UodGFyZ2V0W2ldLCBpdGVtLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXQucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRhcmdldFtpXSA9IGl0ZW07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH1cblxuICAgIHJldHVybiBPYmplY3Qua2V5cyhzb3VyY2UpLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBrZXkpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gc291cmNlW2tleV07XG5cbiAgICAgICAgaWYgKGhhcy5jYWxsKGFjYywga2V5KSkge1xuICAgICAgICAgICAgYWNjW2tleV0gPSBleHBvcnRzLm1lcmdlKGFjY1trZXldLCB2YWx1ZSwgb3B0aW9ucyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhY2Nba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgbWVyZ2VUYXJnZXQpO1xufTtcblxuZXhwb3J0cy5hc3NpZ24gPSBmdW5jdGlvbiBhc3NpZ25TaW5nbGVTb3VyY2UodGFyZ2V0LCBzb3VyY2UpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoc291cmNlKS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywga2V5KSB7XG4gICAgICAgIGFjY1trZXldID0gc291cmNlW2tleV07XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgdGFyZ2V0KTtcbn07XG5cbmV4cG9ydHMuZGVjb2RlID0gZnVuY3Rpb24gKHN0cikge1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoc3RyLnJlcGxhY2UoL1xcKy9nLCAnICcpKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgfVxufTtcblxuZXhwb3J0cy5lbmNvZGUgPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgLy8gVGhpcyBjb2RlIHdhcyBvcmlnaW5hbGx5IHdyaXR0ZW4gYnkgQnJpYW4gV2hpdGUgKG1zY2RleCkgZm9yIHRoZSBpby5qcyBjb3JlIHF1ZXJ5c3RyaW5nIGxpYnJhcnkuXG4gICAgLy8gSXQgaGFzIGJlZW4gYWRhcHRlZCBoZXJlIGZvciBzdHJpY3RlciBhZGhlcmVuY2UgdG8gUkZDIDM5ODZcbiAgICBpZiAoc3RyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gc3RyO1xuICAgIH1cblxuICAgIHZhciBzdHJpbmcgPSB0eXBlb2Ygc3RyID09PSAnc3RyaW5nJyA/IHN0ciA6IFN0cmluZyhzdHIpO1xuXG4gICAgdmFyIG91dCA9ICcnO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBjID0gc3RyaW5nLmNoYXJDb2RlQXQoaSk7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgYyA9PT0gMHgyRCAgICAvLyAtXG4gICAgICAgICAgICB8fCBjID09PSAweDJFIC8vIC5cbiAgICAgICAgICAgIHx8IGMgPT09IDB4NUYgLy8gX1xuICAgICAgICAgICAgfHwgYyA9PT0gMHg3RSAvLyB+XG4gICAgICAgICAgICB8fCAoYyA+PSAweDMwICYmIGMgPD0gMHgzOSkgLy8gMC05XG4gICAgICAgICAgICB8fCAoYyA+PSAweDQxICYmIGMgPD0gMHg1QSkgLy8gYS16XG4gICAgICAgICAgICB8fCAoYyA+PSAweDYxICYmIGMgPD0gMHg3QSkgLy8gQS1aXG4gICAgICAgICkge1xuICAgICAgICAgICAgb3V0ICs9IHN0cmluZy5jaGFyQXQoaSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjIDwgMHg4MCkge1xuICAgICAgICAgICAgb3V0ID0gb3V0ICsgaGV4VGFibGVbY107XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjIDwgMHg4MDApIHtcbiAgICAgICAgICAgIG91dCA9IG91dCArIChoZXhUYWJsZVsweEMwIHwgKGMgPj4gNildICsgaGV4VGFibGVbMHg4MCB8IChjICYgMHgzRildKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGMgPCAweEQ4MDAgfHwgYyA+PSAweEUwMDApIHtcbiAgICAgICAgICAgIG91dCA9IG91dCArIChoZXhUYWJsZVsweEUwIHwgKGMgPj4gMTIpXSArIGhleFRhYmxlWzB4ODAgfCAoKGMgPj4gNikgJiAweDNGKV0gKyBoZXhUYWJsZVsweDgwIHwgKGMgJiAweDNGKV0pO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpICs9IDE7XG4gICAgICAgIGMgPSAweDEwMDAwICsgKCgoYyAmIDB4M0ZGKSA8PCAxMCkgfCAoc3RyaW5nLmNoYXJDb2RlQXQoaSkgJiAweDNGRikpO1xuICAgICAgICBvdXQgKz0gaGV4VGFibGVbMHhGMCB8IChjID4+IDE4KV1cbiAgICAgICAgICAgICsgaGV4VGFibGVbMHg4MCB8ICgoYyA+PiAxMikgJiAweDNGKV1cbiAgICAgICAgICAgICsgaGV4VGFibGVbMHg4MCB8ICgoYyA+PiA2KSAmIDB4M0YpXVxuICAgICAgICAgICAgKyBoZXhUYWJsZVsweDgwIHwgKGMgJiAweDNGKV07XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dDtcbn07XG5cbmV4cG9ydHMuY29tcGFjdCA9IGZ1bmN0aW9uIChvYmosIHJlZmVyZW5jZXMpIHtcbiAgICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgb2JqID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuXG4gICAgdmFyIHJlZnMgPSByZWZlcmVuY2VzIHx8IFtdO1xuICAgIHZhciBsb29rdXAgPSByZWZzLmluZGV4T2Yob2JqKTtcbiAgICBpZiAobG9va3VwICE9PSAtMSkge1xuICAgICAgICByZXR1cm4gcmVmc1tsb29rdXBdO1xuICAgIH1cblxuICAgIHJlZnMucHVzaChvYmopO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgICB2YXIgY29tcGFjdGVkID0gW107XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmoubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIGlmIChvYmpbaV0gJiYgdHlwZW9mIG9ialtpXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICBjb21wYWN0ZWQucHVzaChleHBvcnRzLmNvbXBhY3Qob2JqW2ldLCByZWZzKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBvYmpbaV0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgY29tcGFjdGVkLnB1c2gob2JqW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb21wYWN0ZWQ7XG4gICAgfVxuXG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICAgIGtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIG9ialtrZXldID0gZXhwb3J0cy5jb21wYWN0KG9ialtrZXldLCByZWZzKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBvYmo7XG59O1xuXG5leHBvcnRzLmlzUmVnRXhwID0gZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgUmVnRXhwXSc7XG59O1xuXG5leHBvcnRzLmlzQnVmZmVyID0gZnVuY3Rpb24gKG9iaikge1xuICAgIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiAhIShvYmouY29uc3RydWN0b3IgJiYgb2JqLmNvbnN0cnVjdG9yLmlzQnVmZmVyICYmIG9iai5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihvYmopKTtcbn07XG4iXX0= +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJidWlsZC9jY3h0LmpzIiwiY2N4dC5icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2NyeXB0by1qcy9hZXMuanMiLCJub2RlX21vZHVsZXMvY3J5cHRvLWpzL2NpcGhlci1jb3JlLmpzIiwibm9kZV9tb2R1bGVzL2NyeXB0by1qcy9jb3JlLmpzIiwibm9kZV9tb2R1bGVzL2NyeXB0by1qcy9lbmMtYmFzZTY0LmpzIiwibm9kZV9tb2R1bGVzL2NyeXB0by1qcy9lbmMtdXRmMTYuanMiLCJub2RlX21vZHVsZXMvY3J5cHRvLWpzL2V2cGtkZi5qcyIsIm5vZGVfbW9kdWxlcy9jcnlwdG8tanMvZm9ybWF0LWhleC5qcyIsIm5vZGVfbW9kdWxlcy9jcnlwdG8tanMvaG1hYy5qcyIsIm5vZGVfbW9kdWxlcy9jcnlwdG8tanMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY3J5cHRvLWpzL2xpYi10eXBlZGFycmF5cy5qcyIsIm5vZGVfbW9kdWxlcy9jcnlwdG8tanMvbWQ1LmpzIiwibm9kZV9tb2R1bGVzL2NyeXB0by1qcy9tb2RlLWNmYi5qcyIsIm5vZGVfbW9kdWxlcy9jcnlwdG8tanMvbW9kZS1jdHItZ2xhZG1hbi5qcyIsIm5vZGVfbW9kdWxlcy9jcnlwdG8tanMvbW9kZS1jdHIuanMiLCJub2RlX21vZHVsZXMvY3J5cHRvLWpzL21vZGUtZWNiLmpzIiwibm9kZV9tb2R1bGVzL2NyeXB0by1qcy9tb2RlLW9mYi5qcyIsIm5vZGVfbW9kdWxlcy9jcnlwdG8tanMvcGFkLWFuc2l4OTIzLmpzIiwibm9kZV9tb2R1bGVzL2NyeXB0by1qcy9wYWQtaXNvMTAxMjYuanMiLCJub2RlX21vZHVsZXMvY3J5cHRvLWpzL3BhZC1pc285Nzk3MS5qcyIsIm5vZGVfbW9kdWxlcy9jcnlwdG8tanMvcGFkLW5vcGFkZGluZy5qcyIsIm5vZGVfbW9kdWxlcy9jcnlwdG8tanMvcGFkLXplcm9wYWRkaW5nLmpzIiwibm9kZV9tb2R1bGVzL2NyeXB0by1qcy9wYmtkZjIuanMiLCJub2RlX21vZHVsZXMvY3J5cHRvLWpzL3JhYmJpdC1sZWdhY3kuanMiLCJub2RlX21vZHVsZXMvY3J5cHRvLWpzL3JhYmJpdC5qcyIsIm5vZGVfbW9kdWxlcy9jcnlwdG8tanMvcmM0LmpzIiwibm9kZV9tb2R1bGVzL2NyeXB0by1qcy9yaXBlbWQxNjAuanMiLCJub2RlX21vZHVsZXMvY3J5cHRvLWpzL3NoYTEuanMiLCJub2RlX21vZHVsZXMvY3J5cHRvLWpzL3NoYTIyNC5qcyIsIm5vZGVfbW9kdWxlcy9jcnlwdG8tanMvc2hhMjU2LmpzIiwibm9kZV9tb2R1bGVzL2NyeXB0by1qcy9zaGEzLmpzIiwibm9kZV9tb2R1bGVzL2NyeXB0by1qcy9zaGEzODQuanMiLCJub2RlX21vZHVsZXMvY3J5cHRvLWpzL3NoYTUxMi5qcyIsIm5vZGVfbW9kdWxlcy9jcnlwdG8tanMvdHJpcGxlZGVzLmpzIiwibm9kZV9tb2R1bGVzL2NyeXB0by1qcy94NjQtY29yZS5qcyIsIm5vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvcXMvbGliL2Zvcm1hdHMuanMiLCJub2RlX21vZHVsZXMvcXMvbGliL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3FzL2xpYi9wYXJzZS5qcyIsIm5vZGVfbW9kdWxlcy9xcy9saWIvc3RyaW5naWZ5LmpzIiwibm9kZV9tb2R1bGVzL3FzL2xpYi91dGlscy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUNBQTs7QUFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBMEJBLENBQUMsWUFBWTs7QUFFYjtBQUNBOztBQUVBLFFBQU0sV0FBVyxRQUFTLFdBQVQsQ0FBakI7QUFBQSxRQUNNLEtBQVcsUUFBUyxJQUFULENBRGpCLENBTGEsQ0FNbUI7QUFDNUI7O0FBRUo7QUFDQTs7QUFFQSxRQUFNLFVBQVUsUUFBaEI7O0FBRUE7QUFDQTs7QUFFQSxR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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2T0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDLzJCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2dkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25JQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0TUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqd0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9TQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt2YXIgZj1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK28rXCInXCIpO3Rocm93IGYuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixmfXZhciBsPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSkiLCJcInVzZSBzdHJpY3RcIjtcblxuLypcblxuTUlUIExpY2Vuc2VcblxuQ29weXJpZ2h0IChjKSAyMDE3IElnb3IgS3JvaXRvclxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG5vZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG5pbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG50byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG5jb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG5GSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG5PVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuU09GVFdBUkUuXG5cbiovXG5cbihmdW5jdGlvbiAoKSB7XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIGRlcGVuZGVuY2llc1xuXG5jb25zdCBDcnlwdG9KUyA9IHJlcXVpcmUgKCdjcnlwdG8tanMnKVxuICAgICwgcXMgICAgICAgPSByZXF1aXJlICgncXMnKSAvLyBxdWVyeXN0cmluZ1xuICAgIC8vICwgd3MgICAgICAgPSByZXF1aXJlICgnd3MnKSAvLyB3ZWJzb2NrZXRcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gdGhpcyBpcyB1cGRhdGVkIGJ5IHZzcy5qcyB3aGVuIGJ1aWxkaW5nXG5cbmNvbnN0IHZlcnNpb24gPSAnMS40Ljk3J1xuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBwbGF0Zm9ybSBkZXRlY3Rpb25cblxuY29uc3QgaXNOb2RlICAgICA9ICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJylcbiAgICAsIGlzQ29tbW9uSlMgPSAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcpICYmICh0eXBlb2YgcmVxdWlyZSAhPT0gJ3VuZGVmaW5lZCcpXG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuY2xhc3MgQ0NYVEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgICAgIHN1cGVyIChtZXNzYWdlKVxuICAgICAgICAvLyBhIHdvcmthcm91bmQgdG8gbWFrZSBgaW5zdGFuY2VvZiBDQ1hURXJyb3JgIHdvcmsgaW4gRVM1XG4gICAgICAgIHRoaXMuY29uc3RydWN0b3IgPSBDQ1hURXJyb3JcbiAgICAgICAgdGhpcy5fX3Byb3RvX18gICA9IENDWFRFcnJvci5wcm90b3R5cGVcbiAgICAgICAgdGhpcy5tZXNzYWdlICAgICA9IG1lc3NhZ2VcbiAgICB9XG59XG5cbmNsYXNzIEV4Y2hhbmdlRXJyb3IgZXh0ZW5kcyBDQ1hURXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgICAgIHN1cGVyIChtZXNzYWdlKVxuICAgICAgICB0aGlzLmNvbnN0cnVjdG9yID0gRXhjaGFuZ2VFcnJvclxuICAgICAgICB0aGlzLl9fcHJvdG9fXyAgID0gRXhjaGFuZ2VFcnJvci5wcm90b3R5cGVcbiAgICAgICAgdGhpcy5tZXNzYWdlICAgICA9IG1lc3NhZ2VcbiAgICB9XG59XG5cbmNsYXNzIE5vdFN1cHBvcnRlZCBleHRlbmRzIEV4Y2hhbmdlRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgICAgIHN1cGVyIChtZXNzYWdlKVxuICAgICAgICB0aGlzLmNvbnN0cnVjdG9yID0gTm90U3VwcG9ydGVkXG4gICAgICAgIHRoaXMuX19wcm90b19fICAgPSBOb3RTdXBwb3J0ZWQucHJvdG90eXBlXG4gICAgICAgIHRoaXMubWVzc2FnZSAgICAgPSBtZXNzYWdlXG4gICAgfVxufVxuXG5jbGFzcyBBdXRoZW50aWNhdGlvbkVycm9yIGV4dGVuZHMgRXhjaGFuZ2VFcnJvciB7XG4gICAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICAgICAgc3VwZXIgKG1lc3NhZ2UpXG4gICAgICAgIHRoaXMuY29uc3RydWN0b3IgPSBBdXRoZW50aWNhdGlvbkVycm9yXG4gICAgICAgIHRoaXMuX19wcm90b19fICAgPSBBdXRoZW50aWNhdGlvbkVycm9yLnByb3RvdHlwZVxuICAgICAgICB0aGlzLm1lc3NhZ2UgICAgID0gbWVzc2FnZVxuICAgIH1cbn1cblxuY2xhc3MgSW5zdWZmaWNpZW50RnVuZHMgZXh0ZW5kcyBFeGNoYW5nZUVycm9yIHtcbiAgICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgICAgICBzdXBlciAobWVzc2FnZSlcbiAgICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IEluc3VmZmljaWVudEZ1bmRzXG4gICAgICAgIHRoaXMuX19wcm90b19fICAgPSBJbnN1ZmZpY2llbnRGdW5kcy5wcm90b3R5cGVcbiAgICAgICAgdGhpcy5tZXNzYWdlICAgICA9IG1lc3NhZ2VcbiAgICB9ICAgXG59XG5cbmNsYXNzIE5ldHdvcmtFcnJvciBleHRlbmRzIENDWFRFcnJvciB7XG4gICAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICAgICAgc3VwZXIgKG1lc3NhZ2UpXG4gICAgICAgIHRoaXMuY29uc3RydWN0b3IgPSBOZXR3b3JrRXJyb3JcbiAgICAgICAgdGhpcy5fX3Byb3RvX18gICA9IE5ldHdvcmtFcnJvci5wcm90b3R5cGVcbiAgICAgICAgdGhpcy5tZXNzYWdlICAgICA9IG1lc3NhZ2VcbiAgICB9XG59XG5cbmNsYXNzIEREb1NQcm90ZWN0aW9uIGV4dGVuZHMgTmV0d29ya0Vycm9yIHtcbiAgICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgICAgICBzdXBlciAobWVzc2FnZSlcbiAgICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IEREb1NQcm90ZWN0aW9uXG4gICAgICAgIHRoaXMuX19wcm90b19fICAgPSBERG9TUHJvdGVjdGlvbi5wcm90b3R5cGVcbiAgICAgICAgdGhpcy5tZXNzYWdlICAgICA9IG1lc3NhZ2VcbiAgICB9XG59XG5cbmNsYXNzIFJlcXVlc3RUaW1lb3V0IGV4dGVuZHMgTmV0d29ya0Vycm9yIHtcbiAgICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgICAgICBzdXBlciAobWVzc2FnZSlcbiAgICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IFJlcXVlc3RUaW1lb3V0XG4gICAgICAgIHRoaXMuX19wcm90b19fICAgPSBSZXF1ZXN0VGltZW91dC5wcm90b3R5cGVcbiAgICAgICAgdGhpcy5tZXNzYWdlICAgICA9IG1lc3NhZ2VcbiAgICB9XG59XG5cbmNsYXNzIEV4Y2hhbmdlTm90QXZhaWxhYmxlIGV4dGVuZHMgTmV0d29ya0Vycm9yIHtcbiAgICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgICAgICBzdXBlciAobWVzc2FnZSlcbiAgICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IEV4Y2hhbmdlTm90QXZhaWxhYmxlXG4gICAgICAgIHRoaXMuX19wcm90b19fICAgPSBFeGNoYW5nZU5vdEF2YWlsYWJsZS5wcm90b3R5cGVcbiAgICAgICAgdGhpcy5tZXNzYWdlICAgICA9IG1lc3NhZ2VcbiAgICB9XG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIHV0aWxpdHkgaGVscGVyc1xuXG5jb25zdCBzbGVlcCA9IG1zID0+IG5ldyBQcm9taXNlIChyZXNvbHZlID0+IHNldFRpbWVvdXQgKHJlc29sdmUsIG1zKSk7XG5cbmNvbnN0IGRlY2ltYWwgPSBmbG9hdCA9PiBwYXJzZUZsb2F0IChmbG9hdCkudG9TdHJpbmcgKClcblxuY29uc3QgdGltZW91dCA9IChtcywgcHJvbWlzZSkgPT5cbiAgICAgICAgUHJvbWlzZS5yYWNlIChbXG4gICAgICAgICAgICBwcm9taXNlLFxuICAgICAgICAgICAgc2xlZXAgKG1zKS50aGVuICgoKSA9PiB7IHRocm93IG5ldyBSZXF1ZXN0VGltZW91dCAoJ3JlcXVlc3QgdGltZWQgb3V0JykgfSlcbiAgICAgICAgXSlcblxuY29uc3QgY2FwaXRhbGl6ZSA9IHN0cmluZyA9PiBzdHJpbmcubGVuZ3RoID8gKHN0cmluZy5jaGFyQXQgKDApLnRvVXBwZXJDYXNlICgpICsgc3RyaW5nLnNsaWNlICgxKSkgOiBzdHJpbmdcblxuY29uc3Qga2V5c29ydCA9IG9iamVjdCA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0ge31cbiAgICBPYmplY3Qua2V5cyAob2JqZWN0KS5zb3J0ICgpLmZvckVhY2ggKGtleSA9PiByZXN1bHRba2V5XSA9IG9iamVjdFtrZXldKVxuICAgIHJldHVybiByZXN1bHRcbn1cblxuY29uc3QgZXh0ZW5kID0gKC4uLmFyZ3MpID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSB7fVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKylcbiAgICAgICAgaWYgKHR5cGVvZiBhcmdzW2ldID09PSAnb2JqZWN0JylcbiAgICAgICAgICAgIE9iamVjdC5rZXlzIChhcmdzW2ldKS5mb3JFYWNoIChrZXkgPT5cbiAgICAgICAgICAgICAgICAocmVzdWx0W2tleV0gPSBhcmdzW2ldW2tleV0pKVxuICAgIHJldHVybiByZXN1bHRcbn1cblxuY29uc3Qgb21pdCA9IGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgICBjb25zdCByZXN1bHQgPSBleHRlbmQgKG9iamVjdClcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKylcbiAgICAgICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbaV0gPT09ICdzdHJpbmcnKVxuICAgICAgICAgICAgZGVsZXRlIHJlc3VsdFthcmd1bWVudHNbaV1dXG4gICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkgKGFyZ3VtZW50c1tpXSkpXG4gICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IGFyZ3VtZW50c1tpXS5sZW5ndGg7IGsrKylcbiAgICAgICAgICAgICAgICBkZWxldGUgcmVzdWx0W2FyZ3VtZW50c1tpXVtrXV1cbiAgICByZXR1cm4gcmVzdWx0XG59XG5cbmNvbnN0IGluZGV4QnkgPSAoYXJyYXksIGtleSkgPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQgZWxlbWVudCA9IGFycmF5W2ldXG4gICAgICAgIGlmICh0eXBlb2YgZWxlbWVudFtrZXldICE9ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXN1bHRbZWxlbWVudFtrZXldXSA9IGVsZW1lbnRcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0XG59XG5cbmNvbnN0IHNvcnRCeSA9IChhcnJheSwga2V5LCBkZXNjZW5kaW5nID0gZmFsc2UpID0+IHtcbiAgICBkZXNjZW5kaW5nID0gZGVzY2VuZGluZyA/IC0xIDogMVxuICAgIHJldHVybiBhcnJheS5zb3J0ICgoYSwgYikgPT4gKChhW2tleV0gPCBiW2tleV0pID8gLWRlc2NlbmRpbmcgOiAoKGFba2V5XSA+IGJba2V5XSkgPyBkZXNjZW5kaW5nIDogMCkpKVxufVxuXG5jb25zdCBmbGF0dGVuID0gKGFycmF5LCByZXN1bHQgPSBbXSkgPT4ge1xuICAgIGZvciAobGV0IGkgPSAwLCBsZW5ndGggPSBhcnJheS5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGFycmF5W2ldXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5ICh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGZsYXR0ZW4gKHZhbHVlLCByZXN1bHQpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCAodmFsdWUpXG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdFxufVxuXG5jb25zdCB1bmlxdWUgPSBhcnJheSA9PiBhcnJheS5maWx0ZXIgKCh2YWx1ZSwgaW5kZXgsIHNlbGYpID0+IChzZWxmLmluZGV4T2YgKHZhbHVlKSA9PSBpbmRleCkpXG5cbmNvbnN0IHBsdWNrID0gKGFycmF5LCBrZXkpID0+IGFycmF5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIgKGVsZW1lbnQgPT4gKHR5cGVvZiBlbGVtZW50W2tleV0gIT0gJ3VuZGVmaW5lZCcpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwIChlbGVtZW50ID0+IGVsZW1lbnRba2V5XSlcblxuY29uc3QgdXJsZW5jb2RlID0gb2JqZWN0ID0+IHFzLnN0cmluZ2lmeSAob2JqZWN0KVxuXG5jb25zdCBzdW0gPSAoLi4uYXJncykgPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGFyZ3MuZmlsdGVyIChhcmcgPT4gdHlwZW9mIGFyZyAhPSAndW5kZWZpbmVkJylcbiAgICByZXR1cm4gKHJlc3VsdC5sZW5ndGggPiAwKSA/XG4gICAgICAgIHJlc3VsdC5yZWR1Y2UgKChzdW0sIHZhbHVlKSA9PiBzdW0gKyB2YWx1ZSwgMCkgOiB1bmRlZmluZWRcbn1cblxuY29uc3Qgb3JkZXJlZCA9IHggPT4geCAvLyBhIHN0dWIgdG8ga2VlcCBhc3NvYyBrZXlzIGluIG9yZGVyLCBpbiBKUyBpdCBkb2VzIG5vdGhpbmcsIGl0J3MgbW9zdGx5IGZvciBQeXRob25cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gYSBjcm9zcy1wbGF0Zm9ybSBGZXRjaCBBUElcblxuY29uc3Qgbm9kZUZldGNoICAgPSBpc05vZGUgJiYgbW9kdWxlLnJlcXVpcmUgKCdub2RlLWZldGNoJykgICAgICAgICAvLyB1c2luZyBtb2R1bGUucmVxdWlyZSB0byBwcmV2ZW50IFdlYnBhY2sgLyBSZWFjdCBOYXRpdmUgZnJvbSB0cnlpbmcgdG8gaW5jbHVkZSBpdFxuICAgICwgd2luZG93RmV0Y2ggPSAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmZldGNoKSAvLyBuYXRpdmUgRmV0Y2ggQVBJIChpbiBuZXdlciBicm93c2VycylcbiAgICAsIHhockZldGNoICAgID0gKHVybCwgb3B0aW9ucywgdmVyYm9zZSA9IGZhbHNlKSA9PiAgICAgICAgICAgICAgLy8gYSBxdWljayBhZC1ob2MgcG9seWZpbGwgKGZvciBvbGRlciBicm93c2VycylcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBQcm9taXNlICgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cgKHVybCwgb3B0aW9ucylcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCAoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1ldGhvZCA9IG9wdGlvbnMubWV0aG9kIHx8ICdHRVQnXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHIub3BlbiAobWV0aG9kLCB1cmwsIHRydWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4aHIuc3RhdHVzID09IDIwMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlICh4aHIucmVzcG9uc2VUZXh0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7IC8vIFs0MDMsIDQwNCwgLi4uXS5pbmRleE9mICh4aHIuc3RhdHVzKSA+PSAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yIChtZXRob2QsIHVybCwgeGhyLnN0YXR1cywgeGhyLnJlc3BvbnNlVGV4dClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5oZWFkZXJzICE9ICd1bmRlZmluZWQnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBoZWFkZXIgaW4gb3B0aW9ucy5oZWFkZXJzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIgKGhlYWRlciwgb3B0aW9ucy5oZWFkZXJzW2hlYWRlcl0pXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHIuc2VuZCAob3B0aW9ucy5ib2R5KVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcblxuY29uc3QgZmV0Y2ggPSBub2RlRmV0Y2ggfHwgd2luZG93RmV0Y2ggfHwgeGhyRmV0Y2hcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gc3RyaW5nIOKGkOKGkiBiaW5hcnkg4oaQ4oaSIGJhc2U2NCBjb252ZXJzaW9uIHJvdXRpbmVzXG5cbmNvbnN0IHN0cmluZ1RvQmluYXJ5ID0gc3RyID0+IHtcbiAgICBjb25zdCBhcnIgPSBuZXcgVWludDhBcnJheSAoc3RyLmxlbmd0aClcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykgeyBhcnJbaV0gPSBzdHIuY2hhckNvZGVBdChpKTsgfVxuICAgIHJldHVybiBDcnlwdG9KUy5saWIuV29yZEFycmF5LmNyZWF0ZSAoYXJyKVxufVxuXG5jb25zdCBzdHJpbmdUb0Jhc2U2NCA9IHN0cmluZyA9PiBDcnlwdG9KUy5lbmMuTGF0aW4xLnBhcnNlIChzdHJpbmcpLnRvU3RyaW5nIChDcnlwdG9KUy5lbmMuQmFzZTY0KVxuICAgICwgdXRmMTZUb0Jhc2U2NCAgPSBzdHJpbmcgPT4gQ3J5cHRvSlMuZW5jLlV0ZjE2IC5wYXJzZSAoc3RyaW5nKS50b1N0cmluZyAoQ3J5cHRvSlMuZW5jLkJhc2U2NClcbiAgICAsIGJhc2U2NFRvQmluYXJ5ID0gc3RyaW5nID0+IENyeXB0b0pTLmVuYy5CYXNlNjQucGFyc2UgKHN0cmluZylcbiAgICAsIGJhc2U2NFRvU3RyaW5nID0gc3RyaW5nID0+IENyeXB0b0pTLmVuYy5CYXNlNjQucGFyc2UgKHN0cmluZykudG9TdHJpbmcgKENyeXB0b0pTLmVuYy5VdGY4KVxuICAgICwgYmluYXJ5VG9TdHJpbmcgPSBzdHJpbmcgPT4gc3RyaW5nXG5cbmNvbnN0IGJpbmFyeUNvbmNhdCA9ICguLi5hcmdzKSA9PiBhcmdzLnJlZHVjZSAoKGEsIGIpID0+IGEuY29uY2F0IChiKSlcblxuLy8gdXJsLXNhZmUtYmFzZTY0IHdpdGhvdXQgZXF1YWxzIHNpZ25zLCB3aXRoICsgcmVwbGFjZWQgYnkgLSBhbmQgc2xhc2hlcyByZXBsYWNlZCBieSB1bmRlcnNjb3Jlc1xuY29uc3QgdXJsZW5jb2RlQmFzZTY0ID0gYmFzZTY0c3RyaW5nID0+IGJhc2U2NHN0cmluZy5yZXBsYWNlICgvWz1dKyQvLCAnJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSAoL1xcKy9nLCAnLScpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UgKC9cXC8vZywgJ18nKVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBjcnlwdG9ncmFwaHlcblxuY29uc3QgaGFzaCA9IChyZXF1ZXN0LCBoYXNoID0gJ21kNScsIGRpZ2VzdCA9ICdoZXgnKSA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gQ3J5cHRvSlNbaGFzaC50b1VwcGVyQ2FzZSAoKV0gKHJlcXVlc3QpXG4gICAgcmV0dXJuIChkaWdlc3QgPT0gJ2JpbmFyeScpID8gcmVzdWx0IDogcmVzdWx0LnRvU3RyaW5nIChDcnlwdG9KUy5lbmNbY2FwaXRhbGl6ZSAoZGlnZXN0KV0pXG59XG5cbmNvbnN0IGhtYWMgPSAocmVxdWVzdCwgc2VjcmV0LCBoYXNoID0gJ3NoYTI1NicsIGRpZ2VzdCA9ICdoZXgnKSA9PiB7XG4gICAgY29uc3QgZW5jb2RpbmcgPSAoZGlnZXN0ID09ICdiaW5hcnknKSA/ICdMYXRpbjEnIDogY2FwaXRhbGl6ZSAoZGlnZXN0KVxuICAgIHJldHVybiBDcnlwdG9KU1snSG1hYycgKyBoYXNoLnRvVXBwZXJDYXNlICgpXSAocmVxdWVzdCwgc2VjcmV0KS50b1N0cmluZyAoQ3J5cHRvSlMuZW5jW2NhcGl0YWxpemUgKGVuY29kaW5nKV0pXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIGEgSlNPTiBXZWIgVG9rZW4gYXV0aGVudGljYXRpb24gbWV0aG9kXG5cbmNvbnN0IGp3dCA9IChyZXF1ZXN0LCBzZWNyZXQsIGFsZyA9ICdIUzI1NicsIGhhc2ggPSAnc2hhMjU2JykgPT4ge1xuICAgIGNvbnN0IGVuY29kZWRIZWFkZXIgPSB1cmxlbmNvZGVCYXNlNjQgKHN0cmluZ1RvQmFzZTY0IChKU09OLnN0cmluZ2lmeSAoeyAnYWxnJzogYWxnLCAndHlwJzogJ0pXVCcgfSkpKVxuICAgICAgICAsIGVuY29kZWREYXRhID0gdXJsZW5jb2RlQmFzZTY0IChzdHJpbmdUb0Jhc2U2NCAoSlNPTi5zdHJpbmdpZnkgKHJlcXVlc3QpKSlcbiAgICAgICAgLCB0b2tlbiA9IFsgZW5jb2RlZEhlYWRlciwgZW5jb2RlZERhdGEgXS5qb2luICgnLicpXG4gICAgICAgICwgc2lnbmF0dXJlID0gdXJsZW5jb2RlQmFzZTY0ICh1dGYxNlRvQmFzZTY0IChobWFjICh0b2tlbiwgc2VjcmV0LCBoYXNoLCAndXRmMTYnKSkpXG4gICAgcmV0dXJuIFsgdG9rZW4sIHNpZ25hdHVyZSBdLmpvaW4gKCcuJylcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gY29uc3QgV2ViU29ja2V0ID0gcmVxdWlyZSgnd3MnKVxuLy8gY29uc3Qgd3MgPSBuZXcgV2ViU29ja2V0ICh0aGlzLnVybHNbJ3dlYnNvY2tldCddKVxuLy8gd3Mub24gKCdvcGVuJywgZnVuY3Rpb24gb3BlbiAoKSB7XG4vLyAgICAgY29uc29sZS5sb2cgKCdjb25uZWN0ZWQnKVxuLy8gICAgIC8vIHdzLnNlbmQgKERhdGUubm93ICgpKVxuLy8gfSlcbi8vIHdzLm9uICgnY2xvc2UnLCBmdW5jdGlvbiBjbG9zZSAoKSB7XG4vLyAgICAgY29uc29sZS5sb2cgKCdkaXNjb25uZWN0ZWQnKVxuLy8gfSk7XG4vLyB3cy5vbiAoJ21lc3NhZ2UnLCBmdW5jdGlvbiBpbmNvbWluZyAoZGF0YSkge1xuLy8gICAgIC8vIGNvbnNvbGUubG9nIChgUm91bmR0cmlwIHRpbWU6ICR7RGF0ZS5ub3coKSAtIGRhdGF9IG1zYCk7XG4vLyAgICAgc2V0VGltZW91dCAoZnVuY3Rpb24gdGltZW91dCAoKSB7XG4vLyAgICAgICAgIHdzLnNlbmQgKERhdGUubm93ICgpKVxuLy8gICAgIH0sIDUwMClcbi8vIH0pXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIHRoZSBiYXNlIGNsYXNzXG5cbmNvbnN0IEV4Y2hhbmdlID0gZnVuY3Rpb24gKGNvbmZpZykge1xuXG4gICAgdGhpcy5oYXNoID0gaGFzaFxuICAgIHRoaXMuaG1hYyA9IGhtYWNcbiAgICB0aGlzLmp3dCA9IGp3dCAvLyBKU09OIFdlYiBUb2tlblxuICAgIHRoaXMuYmluYXJ5Q29uY2F0ID0gYmluYXJ5Q29uY2F0XG4gICAgdGhpcy5zdHJpbmdUb0JpbmFyeSA9IHN0cmluZ1RvQmluYXJ5XG4gICAgdGhpcy5zdHJpbmdUb0Jhc2U2NCA9IHN0cmluZ1RvQmFzZTY0XG4gICAgdGhpcy5iYXNlNjRUb0JpbmFyeSA9IGJhc2U2NFRvQmluYXJ5XG4gICAgdGhpcy5iYXNlNjRUb1N0cmluZyA9IGJhc2U2NFRvU3RyaW5nXG4gICAgdGhpcy5iaW5hcnlUb1N0cmluZyA9IGJpbmFyeVRvU3RyaW5nXG4gICAgdGhpcy51dGYxNlRvQmFzZTY0ID0gdXRmMTZUb0Jhc2U2NFxuICAgIHRoaXMudXJsZW5jb2RlID0gdXJsZW5jb2RlXG4gICAgdGhpcy5lbmNvZGVVUklDb21wb25lbnQgPSBlbmNvZGVVUklDb21wb25lbnRcbiAgICB0aGlzLm9taXQgPSBvbWl0XG4gICAgdGhpcy5wbHVjayA9IHBsdWNrXG4gICAgdGhpcy51bmlxdWUgPSB1bmlxdWVcbiAgICB0aGlzLmV4dGVuZCA9IGV4dGVuZFxuICAgIHRoaXMuZmxhdHRlbiA9IGZsYXR0ZW5cbiAgICB0aGlzLmluZGV4QnkgPSBpbmRleEJ5XG4gICAgdGhpcy5zb3J0QnkgPSBzb3J0QnlcbiAgICB0aGlzLmtleXNvcnQgPSBrZXlzb3J0XG4gICAgdGhpcy5kZWNpbWFsID0gZGVjaW1hbFxuICAgIHRoaXMuY2FwaXRhbGl6ZSA9IGNhcGl0YWxpemVcbiAgICB0aGlzLmpzb24gPSBKU09OLnN0cmluZ2lmeVxuICAgIHRoaXMuc3VtID0gc3VtXG4gICAgdGhpcy5vcmRlcmVkID0gb3JkZXJlZFxuXG4gICAgdGhpcy5lbmNvZGUgPSBzdHJpbmcgPT4gc3RyaW5nXG4gICAgdGhpcy5kZWNvZGUgPSBzdHJpbmcgPT4gc3RyaW5nXG5cbiAgICBpZiAoaXNOb2RlKVxuICAgICAgICB0aGlzLm5vZGVWZXJzaW9uID0gcHJvY2Vzcy52ZXJzaW9uLm1hdGNoICgvXFxkK1xcLlxcZCsuXFxkKy8pIFswXVxuXG4gICAgdGhpcy5pbml0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLm9yZGVycyA9IHt9XG4gICAgICAgIHRoaXMudHJhZGVzID0ge31cbiAgICAgICAgaWYgKHRoaXMuYXBpKVxuICAgICAgICAgICAgdGhpcy5kZWZpbmVSRVNUQVBJICh0aGlzLmFwaSwgJ3JlcXVlc3QnKTtcbiAgICAgICAgaWYgKHRoaXMubWFya2V0cylcbiAgICAgICAgICAgIHRoaXMuc2V0TWFya2V0cyAodGhpcy5tYXJrZXRzKTtcbiAgICB9XG5cbiAgICB0aGlzLmRlZmluZVJFU1RBUEkgPSBmdW5jdGlvbiAoYXBpLCBtZXRob2ROYW1lLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgT2JqZWN0LmtleXMgKGFwaSkuZm9yRWFjaCAodHlwZSA9PiB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyAoYXBpW3R5cGVdKS5mb3JFYWNoIChodHRwTWV0aG9kID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgdXJscyA9IGFwaVt0eXBlXVtodHRwTWV0aG9kXVxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdXJscy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgdXJsID0gdXJsc1tpXS50cmltICgpXG4gICAgICAgICAgICAgICAgICAgIGxldCBzcGxpdFBhdGggPSB1cmwuc3BsaXQgKC9bXmEtekEtWjAtOV0vKVxuXG4gICAgICAgICAgICAgICAgICAgIGxldCB1cHBlcmNhc2VNZXRob2QgID0gaHR0cE1ldGhvZC50b1VwcGVyQ2FzZSAoKVxuICAgICAgICAgICAgICAgICAgICBsZXQgbG93ZXJjYXNlTWV0aG9kICA9IGh0dHBNZXRob2QudG9Mb3dlckNhc2UgKClcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNhbWVsY2FzZU1ldGhvZCAgPSBjYXBpdGFsaXplIChsb3dlcmNhc2VNZXRob2QpXG4gICAgICAgICAgICAgICAgICAgIGxldCBjYW1lbGNhc2VTdWZmaXggID0gc3BsaXRQYXRoLm1hcCAoY2FwaXRhbGl6ZSkuam9pbiAoJycpXG4gICAgICAgICAgICAgICAgICAgIGxldCB1bmRlcnNjb3JlU3VmZml4ID0gc3BsaXRQYXRoLm1hcCAoeCA9PiB4LnRyaW0gKCkudG9Mb3dlckNhc2UgKCkpLmZpbHRlciAoeCA9PiB4Lmxlbmd0aCA+IDApLmpvaW4gKCdfJylcblxuICAgICAgICAgICAgICAgICAgICBpZiAoY2FtZWxjYXNlU3VmZml4LmluZGV4T2YgKGNhbWVsY2FzZU1ldGhvZCkgPT09IDApXG4gICAgICAgICAgICAgICAgICAgICAgICBjYW1lbGNhc2VTdWZmaXggPSBjYW1lbGNhc2VTdWZmaXguc2xpY2UgKGNhbWVsY2FzZU1ldGhvZC5sZW5ndGgpXG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHVuZGVyc2NvcmVTdWZmaXguaW5kZXhPZiAobG93ZXJjYXNlTWV0aG9kKSA9PT0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVyc2NvcmVTdWZmaXggPSB1bmRlcnNjb3JlU3VmZml4LnNsaWNlIChsb3dlcmNhc2VNZXRob2QubGVuZ3RoKVxuXG4gICAgICAgICAgICAgICAgICAgIGxldCBjYW1lbGNhc2UgID0gdHlwZSArIGNhbWVsY2FzZU1ldGhvZCArIGNhcGl0YWxpemUgKGNhbWVsY2FzZVN1ZmZpeClcbiAgICAgICAgICAgICAgICAgICAgbGV0IHVuZGVyc2NvcmUgPSB0eXBlICsgJ18nICsgbG93ZXJjYXNlTWV0aG9kICsgJ18nICsgdW5kZXJzY29yZVN1ZmZpeFxuXG4gICAgICAgICAgICAgICAgICAgIGlmICgnc3VmZml4ZXMnIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgnY2FtZWxjYXNlJyBpbiBvcHRpb25zWydzdWZmaXhlcyddKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbWVsY2FzZSArPSBvcHRpb25zWydzdWZmaXhlcyddWydjYW1lbGNhc2UnXVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCd1bmRlcnNjb3JlJyBpbiBvcHRpb25zLnN1ZmZpeGVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVyc2NvcmUgKz0gb3B0aW9uc1snc3VmZml4ZXMnXVsndW5kZXJzY29yZSddXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoJ3VuZGVyc2NvcmVfc3VmZml4JyBpbiBvcHRpb25zKVxuICAgICAgICAgICAgICAgICAgICAgICAgdW5kZXJzY29yZSArPSBvcHRpb25zLnVuZGVyc2NvcmVTdWZmaXg7XG4gICAgICAgICAgICAgICAgICAgIGlmICgnY2FtZWxjYXNlX3N1ZmZpeCcgaW4gb3B0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbWVsY2FzZSArPSBvcHRpb25zLmNhbWVsY2FzZVN1ZmZpeDtcblxuICAgICAgICAgICAgICAgICAgICBsZXQgcGFydGlhbCA9IHBhcmFtcyA9PiB0aGlzW21ldGhvZE5hbWVdICh1cmwsIHR5cGUsIHVwcGVyY2FzZU1ldGhvZCwgcGFyYW1zKVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXNbY2FtZWxjYXNlXSAgPSBwYXJ0aWFsXG4gICAgICAgICAgICAgICAgICAgIHRoaXNbdW5kZXJzY29yZV0gPSBwYXJ0aWFsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICB9LFxuXG4gICAgLy8gdGhpcy5pbml0aWFsaXplU3RyZWFtaW5nQVBJID0gZnVuY3Rpb24gKCkge1xuICAgIC8vICAgICB0aGlzLndzID0gbmV3IFdlYlNvY2tldCAodGhpcy51cmxzWyd3ZWJzb2NrZXQnXSlcbiAgICAvLyAgICAgd3Mub24gKCdvcGVuJywgZnVuY3Rpb24gb3BlbiAoKSB7XG4gICAgLy8gICAgICAgICBjb25zb2xlLmxvZyAoJ2Nvbm5lY3RlZCcpXG4gICAgLy8gICAgICAgICAvLyB3cy5zZW5kIChEYXRlLm5vdyAoKSlcbiAgICAvLyAgICAgfSlcbiAgICAvLyAgICAgd3Mub24gKCdjbG9zZScsIGZ1bmN0aW9uIGNsb3NlICgpIHtcbiAgICAvLyAgICAgICAgIGNvbnNvbGUubG9nICgnZGlzY29ubmVjdGVkJylcbiAgICAvLyAgICAgfSlcbiAgICAvLyAgICAgd3Mub24gKCdtZXNzYWdlJywgZnVuY3Rpb24gaW5jb21pbmcgKGRhdGEpIHtcbiAgICAvLyAgICAgICAgIC8vIGNvbnNvbGUubG9nIChgUm91bmR0cmlwIHRpbWU6ICR7RGF0ZS5ub3coKSAtIGRhdGF9IG1zYCk7XG4gICAgLy8gICAgICAgICBzZXRUaW1lb3V0IChmdW5jdGlvbiB0aW1lb3V0ICgpIHtcbiAgICAvLyAgICAgICAgICAgICB3cy5zZW5kIChEYXRlLm5vdyAoKSlcbiAgICAvLyAgICAgICAgIH0sIDUwMClcbiAgICAvLyAgICAgfSlcbiAgICAvLyB9LFxuXG4gICAgdGhpcy5mZXRjaCA9IGZ1bmN0aW9uICh1cmwsIG1ldGhvZCA9ICdHRVQnLCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG5cbiAgICAgICAgaWYgKGlzTm9kZSAmJiB0aGlzLnVzZXJBZ2VudClcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy51c2VyQWdlbnQgPT0gJ3N0cmluZycpXG4gICAgICAgICAgICAgICAgaGVhZGVycyA9IGV4dGVuZCAoeyAnVXNlci1BZ2VudCc6IHRoaXMudXNlckFnZW50IH0sIGhlYWRlcnMpXG4gICAgICAgICAgICBlbHNlIGlmICgodHlwZW9mIHRoaXMudXNlckFnZW50ID09ICdvYmplY3QnKSAmJiAoJ1VzZXItQWdlbnQnIGluIHRoaXMudXNlckFnZW50KSlcbiAgICAgICAgICAgICAgICBoZWFkZXJzID0gZXh0ZW5kICh0aGlzLnVzZXJBZ2VudCwgaGVhZGVycylcblxuICAgICAgICBpZiAodGhpcy5wcm94eS5sZW5ndGgpXG4gICAgICAgICAgICBoZWFkZXJzID0gZXh0ZW5kICh7ICdPcmlnaW4nOiAnKicgfSwgaGVhZGVycylcblxuICAgICAgICBsZXQgb3B0aW9ucyA9IHsgJ21ldGhvZCc6IG1ldGhvZCwgJ2hlYWRlcnMnOiBoZWFkZXJzLCAnYm9keSc6IGJvZHkgfVxuXG4gICAgICAgIHVybCA9IHRoaXMucHJveHkgKyB1cmxcblxuICAgICAgICBpZiAodGhpcy52ZXJib3NlKVxuICAgICAgICAgICAgY29uc29sZS5sb2cgKHRoaXMuaWQsIG1ldGhvZCwgdXJsLCBcIlxcblJlcXVlc3Q6XFxuXCIsIG9wdGlvbnMpXG5cbiAgICAgICAgcmV0dXJuIHRpbWVvdXQgKHRoaXMudGltZW91dCwgZmV0Y2ggKHVybCwgb3B0aW9ucylcbiAgICAgICAgICAgIC5jYXRjaCAoZSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGlzTm9kZSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VOb3RBdmFpbGFibGUgKFsgdGhpcy5pZCwgbWV0aG9kLCB1cmwsIGUudHlwZSwgZS5tZXNzYWdlIF0uam9pbiAoJyAnKSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgZSAvLyByZXRocm93IGFsbCB1bmtub3duIGVycm9yc1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuIChyZXNwb25zZSA9PiB7XG5cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJlc3BvbnNlID09ICdzdHJpbmcnKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2VcblxuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZS50ZXh0ICgpLnRoZW4gKHRleHQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy52ZXJib3NlKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cgKHRoaXMuaWQsIG1ldGhvZCwgdXJsLCB0ZXh0ID8gKFwiXFxuUmVzcG9uc2U6XFxuXCIgKyB0ZXh0KSA6ICcnKVxuICAgICAgICAgICAgICAgICAgICBpZiAoKHJlc3BvbnNlLnN0YXR1cyA+PSAyMDApICYmIChyZXNwb25zZS5zdGF0dXMgPD0gMzAwKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0XG4gICAgICAgICAgICAgICAgICAgIGxldCBlcnJvciA9IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICBsZXQgZGV0YWlscyA9IHRleHRcbiAgICAgICAgICAgICAgICAgICAgaWYgKFsgNDI5IF0uaW5kZXhPZiAocmVzcG9uc2Uuc3RhdHVzKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IEREb1NQcm90ZWN0aW9uXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoWyA0MDQsIDQwOSwgNTAwLCA1MDEsIDUwMiwgNTIxLCA1MjIsIDUyNSBdLmluZGV4T2YgKHJlc3BvbnNlLnN0YXR1cykgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBFeGNoYW5nZU5vdEF2YWlsYWJsZVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFsgNDAwLCA0MDMsIDQwNSwgNTAzIF0uaW5kZXhPZiAocmVzcG9uc2Uuc3RhdHVzKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGRvc1Byb3RlY3Rpb24gPSB0ZXh0Lm1hdGNoICgvY2xvdWRmbGFyZXxpbmNhcHN1bGEvaSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZG9zUHJvdGVjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gRERvU1Byb3RlY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBFeGNoYW5nZU5vdEF2YWlsYWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbHMgPSB0ZXh0ICsgJyAocG9zc2libGUgcmVhc29uczogJyArIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ludmFsaWQgQVBJIGtleXMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFkIG9yIG9sZCBub25jZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleGNoYW5nZSBpcyBkb3duIG9yIG9mZmxpbmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb24gbWFpbnRlbmFuY2UnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRERvUyBwcm90ZWN0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JhdGUtbGltaXRpbmcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0uam9pbiAoJywgJykgKyAnKSdcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChbIDQwOCwgNTA0IF0uaW5kZXhPZiAocmVzcG9uc2Uuc3RhdHVzKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IFJlcXVlc3RUaW1lb3V0XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoWyA0MDEsIDQyMiwgNTExIF0uaW5kZXhPZiAocmVzcG9uc2Uuc3RhdHVzKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IEF1dGhlbnRpY2F0aW9uRXJyb3JcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gRXJyb3JcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3IgKFsgdGhpcy5pZCwgbWV0aG9kLCB1cmwsIHJlc3BvbnNlLnN0YXR1cywgcmVzcG9uc2Uuc3RhdHVzVGV4dCwgZGV0YWlscyBdLmpvaW4gKCcgJykpXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pLnRoZW4gKHJlc3BvbnNlID0+IHRoaXMuaGFuZGxlUmVzcG9uc2UgKHVybCwgbWV0aG9kLCBoZWFkZXJzLCByZXNwb25zZSkpKVxuICAgIH1cblxuICAgIHRoaXMuaGFuZGxlUmVzcG9uc2UgPSBmdW5jdGlvbiAodXJsLCBtZXRob2QgPSAnR0VUJywgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuXG4gICAgICAgIHRyeSB7XG5cbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlIChib2R5KVxuXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcblxuICAgICAgICAgICAgbGV0IG1haW50ZW5hbmNlID0gYm9keS5tYXRjaCAoL29mZmxpbmV8YnVzeXxyZXRyeXx3YWl0fHVuYXZhaWxhYmxlfG1haW50YWlufG1haW50ZW5hbmNlfG1haW50ZW5hbmNpbmcvaSlcbiAgICAgICAgICAgIGxldCBkZG9zUHJvdGVjdGlvbiA9IGJvZHkubWF0Y2ggKC9jbG91ZGZsYXJlfGluY2Fwc3VsYXxvdmVybG9hZC9pKVxuXG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgZXJyb3IgPSBFeGNoYW5nZU5vdEF2YWlsYWJsZVxuICAgICAgICAgICAgICAgIGxldCBkZXRhaWxzID0gJ25vdCBhY2Nlc3NpYmxlIGZyb20gdGhpcyBsb2NhdGlvbiBhdCB0aGUgbW9tZW50J1xuICAgICAgICAgICAgICAgIGlmIChtYWludGVuYW5jZSlcbiAgICAgICAgICAgICAgICAgICAgZGV0YWlscyA9ICdvZmZsaW5lLCBvbiBtYWludGVuYW5jZSBvciB1bnJlYWNoYWJsZSBmcm9tIHRoaXMgbG9jYXRpb24gYXQgdGhlIG1vbWVudCdcbiAgICAgICAgICAgICAgICBpZiAoZGRvc1Byb3RlY3Rpb24pXG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0gRERvU1Byb3RlY3Rpb25cbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3IgKFsgdGhpcy5pZCwgbWV0aG9kLCB1cmwsIGRldGFpbHMgXS5qb2luICgnICcpKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy52ZXJib3NlKVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nICh0aGlzLmlkLCBtZXRob2QsIHVybCwgJ2Vycm9yJywgZSwgXCJyZXNwb25zZSBib2R5OlxcbidcIiArIGJvZHkgKyBcIidcIilcblxuICAgICAgICAgICAgdGhyb3cgZVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zZXRfbWFya2V0cyA9XG4gICAgdGhpcy5zZXRNYXJrZXRzID0gZnVuY3Rpb24gKG1hcmtldHMpIHtcbiAgICAgICAgbGV0IHZhbHVlcyA9IE9iamVjdC52YWx1ZXMgKG1hcmtldHMpXG4gICAgICAgIHRoaXMubWFya2V0cyA9IGluZGV4QnkgKHZhbHVlcywgJ3N5bWJvbCcpXG4gICAgICAgIHRoaXMubWFya2V0c0J5SWQgPSBpbmRleEJ5IChtYXJrZXRzLCAnaWQnKVxuICAgICAgICB0aGlzLm1hcmtldHNfYnlfaWQgPSB0aGlzLm1hcmtldHNCeUlkXG4gICAgICAgIHRoaXMuc3ltYm9scyA9IE9iamVjdC5rZXlzICh0aGlzLm1hcmtldHMpXG4gICAgICAgIGxldCBiYXNlID0gdGhpcy5wbHVjayAodmFsdWVzLmZpbHRlciAobWFya2V0ID0+ICdiYXNlJyBpbiBtYXJrZXQpLCAnYmFzZScpXG4gICAgICAgIGxldCBxdW90ZSA9IHRoaXMucGx1Y2sgKHZhbHVlcy5maWx0ZXIgKG1hcmtldCA9PiAncXVvdGUnIGluIG1hcmtldCksICdxdW90ZScpXG4gICAgICAgIHRoaXMuY3VycmVuY2llcyA9IHRoaXMudW5pcXVlIChiYXNlLmNvbmNhdCAocXVvdGUpKVxuICAgICAgICByZXR1cm4gdGhpcy5tYXJrZXRzXG4gICAgfVxuXG4gICAgdGhpcy5sb2FkX21hcmtldHMgPVxuICAgIHRoaXMubG9hZE1hcmtldHMgPSBmdW5jdGlvbiAocmVsb2FkID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKCFyZWxvYWQgJiYgdGhpcy5tYXJrZXRzKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMubWFya2V0c0J5SWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UgKChyZXNvbHZlLCByZWplY3QpID0+IHJlc29sdmUgKHRoaXMuc2V0TWFya2V0cyAodGhpcy5tYXJrZXRzKSkpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UgKChyZXNvbHZlLCByZWplY3QpID0+IHJlc29sdmUgKHRoaXMubWFya2V0cykpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZmV0Y2hNYXJrZXRzICgpLnRoZW4gKG1hcmtldHMgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0TWFya2V0cyAobWFya2V0cylcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICB0aGlzLmZldGNoX3RpY2tlcnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZldGNoVGlja2VycyAoKVxuICAgIH1cblxuICAgIHRoaXMuZmV0Y2hUaWNrZXJzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkICh0aGlzLmlkICsgJyBBUEkgZG9lcyBub3QgYWxsb3cgdG8gZmV0Y2ggYWxsIHRpY2tlcnMgYXQgb25jZSB3aXRoIGEgc2luZ2xlIGNhbGwgdG8gZmV0Y2hfdGlja2VycyAoKSBmb3Igbm93JylcbiAgICB9XG5cbiAgICB0aGlzLmZldGNoX21hcmtldHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZldGNoTWFya2V0cyAoKVxuICAgIH1cblxuICAgIHRoaXMuZmV0Y2hNYXJrZXRzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UgKChyZXNvbHZlLCByZWplY3QpID0+IHJlc29sdmUgKHRoaXMubWFya2V0cykpXG4gICAgfVxuXG4gICAgdGhpcy5jb21tb25DdXJyZW5jeUNvZGUgPSBmdW5jdGlvbiAoY3VycmVuY3kpIHtcbiAgICAgICAgaWYgKCF0aGlzLnN1YnN0aXR1dGVDb21tb25DdXJyZW5jeUNvZGVzKVxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbmN5XG4gICAgICAgIGlmIChjdXJyZW5jeSA9PSAnWEJUJylcbiAgICAgICAgICAgIHJldHVybiAnQlRDJ1xuICAgICAgICBpZiAoY3VycmVuY3kgPT0gJ0JDQycpXG4gICAgICAgICAgICByZXR1cm4gJ0JDSCdcbiAgICAgICAgaWYgKGN1cnJlbmN5ID09ICdEUksnKVxuICAgICAgICAgICAgcmV0dXJuICdEQVNIJ1xuICAgICAgICByZXR1cm4gY3VycmVuY3lcbiAgICB9XG5cbiAgICB0aGlzLm1hcmtldCA9IGZ1bmN0aW9uIChtYXJrZXQpIHtcbiAgICAgICAgcmV0dXJuICgoKHR5cGVvZiBtYXJrZXQgPT09ICdzdHJpbmcnKSAmJlxuICAgICAgICAgICAgKHR5cGVvZiB0aGlzLm1hcmtldHMgIT0gJ3VuZGVmaW5lZCcpICYmXG4gICAgICAgICAgICAodHlwZW9mIHRoaXMubWFya2V0c1ttYXJrZXRdICE9ICd1bmRlZmluZWQnKSkgP1xuICAgICAgICAgICAgICAgIHRoaXMubWFya2V0c1ttYXJrZXRdIDpcbiAgICAgICAgICAgICAgICBtYXJrZXQpXG4gICAgfVxuXG4gICAgdGhpcy5tYXJrZXRfaWQgPVxuICAgIHRoaXMubWFya2V0SWQgPSBmdW5jdGlvbiAobWFya2V0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcmtldCAobWFya2V0KS5pZCB8fCBtYXJrZXRcbiAgICB9XG5cbiAgICB0aGlzLnN5bWJvbCA9IGZ1bmN0aW9uIChtYXJrZXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFya2V0IChtYXJrZXQpLnN5bWJvbCB8fCBtYXJrZXRcbiAgICB9XG5cbiAgICB0aGlzLmV4dHJhY3RfcGFyYW1zID1cbiAgICB0aGlzLmV4dHJhY3RQYXJhbXMgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgIHZhciByZSA9IC97KFthLXpBLVowLTlfXSs/KX0vZ1xuICAgICAgICB2YXIgbWF0Y2hlcyA9IFtdXG4gICAgICAgIGxldCBtYXRjaFxuICAgICAgICB3aGlsZSAobWF0Y2ggPSByZS5leGVjIChzdHJpbmcpKVxuICAgICAgICAgICAgbWF0Y2hlcy5wdXNoIChtYXRjaFsxXSlcbiAgICAgICAgcmV0dXJuIG1hdGNoZXNcbiAgICB9XG5cbiAgICB0aGlzLmltcGxvZGVfcGFyYW1zID1cbiAgICB0aGlzLmltcGxvZGVQYXJhbXMgPSBmdW5jdGlvbiAoc3RyaW5nLCBwYXJhbXMpIHtcbiAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gcGFyYW1zKVxuICAgICAgICAgICAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UgKCd7JyArIHByb3BlcnR5ICsgJ30nLCBwYXJhbXNbcHJvcGVydHldKVxuICAgICAgICByZXR1cm4gc3RyaW5nXG4gICAgfVxuXG4gICAgdGhpcy51cmwgPSBmdW5jdGlvbiAocGF0aCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHRoaXMuaW1wbG9kZVBhcmFtcyAocGF0aCwgcGFyYW1zKTtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5vbWl0IChwYXJhbXMsIHRoaXMuZXh0cmFjdFBhcmFtcyAocGF0aCkpXG4gICAgICAgIGlmIChPYmplY3Qua2V5cyAocXVlcnkpLmxlbmd0aClcbiAgICAgICAgICAgIHJlc3VsdCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocXVlcnkpXG4gICAgICAgIHJldHVybiByZXN1bHRcbiAgICB9XG5cbiAgICB0aGlzLnBhcnNlX3RyYWRlcyA9XG4gICAgdGhpcy5wYXJzZVRyYWRlcyA9IGZ1bmN0aW9uICh0cmFkZXMsIG1hcmtldCA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gW11cbiAgICAgICAgZm9yIChsZXQgdCA9IDA7IHQgPCB0cmFkZXMubGVuZ3RoOyB0KyspIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoICh0aGlzLnBhcnNlVHJhZGUgKHRyYWRlc1t0XSwgbWFya2V0KSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgfVxuXG4gICAgdGhpcy5wYXJzZV9vcmRlcnMgPVxuICAgIHRoaXMucGFyc2VPcmRlcnMgPSBmdW5jdGlvbiAob3JkZXIsIG1hcmtldCA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gW11cbiAgICAgICAgZm9yIChsZXQgdCA9IDA7IHQgPCBvcmRlci5sZW5ndGg7IHQrKykge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2ggKHRoaXMucGFyc2VPcmRlciAob3JkZXJbdF0sIG1hcmtldCkpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH1cblxuICAgIHRoaXMucGFyc2Vfb2hsY3YgPVxuICAgIHRoaXMucGFyc2VPSExDViA9IGZ1bmN0aW9uIChvaGxjdiwgbWFya2V0ID0gdW5kZWZpbmVkLCB0aW1lZnJhbWUgPSA2MCwgc2luY2UgPSB1bmRlZmluZWQsIGxpbWl0ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBvaGxjdlxuICAgIH1cblxuICAgIHRoaXMucGFyc2Vfb2hsY3ZzID1cbiAgICB0aGlzLnBhcnNlT0hMQ1ZzID0gZnVuY3Rpb24gKG9obGN2cywgbWFya2V0ID0gdW5kZWZpbmVkLCB0aW1lZnJhbWUgPSA2MCwgc2luY2UgPSB1bmRlZmluZWQsIGxpbWl0ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSBbXVxuICAgICAgICBmb3IgKGxldCB0ID0gMDsgdCA8IG9obGN2cy5sZW5ndGg7IHQrKykge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2ggKHRoaXMucGFyc2VPSExDViAob2hsY3ZzW3RdLCBtYXJrZXQsIHRpbWVmcmFtZSwgc2luY2UsIGxpbWl0KSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgfVxuXG4gICAgdGhpcy5jcmVhdGVfbGltaXRfYnV5X29yZGVyID1cbiAgICB0aGlzLmNyZWF0ZUxpbWl0QnV5T3JkZXIgPSBmdW5jdGlvbiAobWFya2V0LCBhbW91bnQsIHByaWNlLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVPcmRlciAgKG1hcmtldCwgJ2xpbWl0JywgJ2J1eScsIGFtb3VudCwgcHJpY2UsIHBhcmFtcylcbiAgICB9XG5cbiAgICB0aGlzLmNyZWF0ZV9saW1pdF9zZWxsX29yZGVyID1cbiAgICB0aGlzLmNyZWF0ZUxpbWl0U2VsbE9yZGVyID0gZnVuY3Rpb24gKG1hcmtldCwgYW1vdW50LCBwcmljZSwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlT3JkZXIgKG1hcmtldCwgJ2xpbWl0JywgJ3NlbGwnLCBhbW91bnQsIHByaWNlLCBwYXJhbXMpXG4gICAgfVxuXG4gICAgdGhpcy5jcmVhdGVfbWFya2V0X2J1eV9vcmRlciA9XG4gICAgdGhpcy5jcmVhdGVNYXJrZXRCdXlPcmRlciA9IGZ1bmN0aW9uIChtYXJrZXQsIGFtb3VudCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlT3JkZXIgKG1hcmtldCwgJ21hcmtldCcsICdidXknLCBhbW91bnQsIHVuZGVmaW5lZCwgcGFyYW1zKVxuICAgIH1cblxuICAgIHRoaXMuY3JlYXRlX21hcmtldF9zZWxsX29yZGVyID1cbiAgICB0aGlzLmNyZWF0ZU1hcmtldFNlbGxPcmRlciA9IGZ1bmN0aW9uIChtYXJrZXQsIGFtb3VudCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlT3JkZXIgKG1hcmtldCwgJ21hcmtldCcsICdzZWxsJywgYW1vdW50LCB1bmRlZmluZWQsIHBhcmFtcylcbiAgICB9XG5cbiAgICB0aGlzLmlzbzg2MDEgICAgICAgID0gdGltZXN0YW1wID0+IG5ldyBEYXRlICh0aW1lc3RhbXApLnRvSVNPU3RyaW5nICgpXG4gICAgdGhpcy5wYXJzZTg2MDEgICAgICA9IERhdGUucGFyc2VcbiAgICB0aGlzLnNlY29uZHMgICAgICAgID0gKCkgPT4gTWF0aC5mbG9vciAodGhpcy5taWxsaXNlY29uZHMgKCkgLyAxMDAwKVxuICAgIHRoaXMubWljcm9zZWNvbmRzICAgPSAoKSA9PiBNYXRoLmZsb29yICh0aGlzLm1pbGxpc2Vjb25kcyAoKSAqIDEwMDApXG4gICAgdGhpcy5taWxsaXNlY29uZHMgICA9IERhdGUubm93XG4gICAgdGhpcy5ub25jZSAgICAgICAgICA9IHRoaXMuc2Vjb25kc1xuICAgIHRoaXMuaWQgICAgICAgICAgICAgPSB1bmRlZmluZWRcbiAgICB0aGlzLnJhdGVMaW1pdCAgICAgID0gMjAwMCAgLy8gbWlsbGlzZWNvbmRzID0gc2Vjb25kcyAqIDEwMDBcbiAgICB0aGlzLnRpbWVvdXQgICAgICAgID0gMTAwMDAgLy8gbWlsbGlzZWNvbmRzID0gc2Vjb25kcyAqIDEwMDBcbiAgICB0aGlzLnZlcmJvc2UgICAgICAgID0gZmFsc2VcbiAgICB0aGlzLnVzZXJBZ2VudCAgICAgID0gZmFsc2VcbiAgICB0aGlzLnR3b2ZhICAgICAgICAgID0gZmFsc2UgLy8gdHdvLWZhY3RvciBhdXRoZW50aWNhdGlvblxuICAgIHRoaXMuc3Vic3RpdHV0ZUNvbW1vbkN1cnJlbmN5Q29kZXMgPSB0cnVlXG4gICAgdGhpcy55eXl5bW1kZGhobW1zcyA9IHRpbWVzdGFtcCA9PiB7XG4gICAgICAgIGxldCBkYXRlID0gbmV3IERhdGUgKHRpbWVzdGFtcClcbiAgICAgICAgbGV0IHl5eXkgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyICgpXG4gICAgICAgIGxldCBNTSA9IGRhdGUuZ2V0VVRDTW9udGggKClcbiAgICAgICAgbGV0IGRkID0gZGF0ZS5nZXRVVENEYXkgKClcbiAgICAgICAgbGV0IGhoID0gZGF0ZS5nZXRVVENIb3VycyAoKVxuICAgICAgICBsZXQgbW0gPSBkYXRlLmdldFVUQ01pbnV0ZXMgKClcbiAgICAgICAgbGV0IHNzID0gZGF0ZS5nZXRVVENTZWNvbmRzICgpXG4gICAgICAgIE1NID0gTU0gPCAxMCA/ICgnMCcgKyBNTSkgOiBNTVxuICAgICAgICBkZCA9IGRkIDwgMTAgPyAoJzAnICsgZGQpIDogZGRcbiAgICAgICAgaGggPSBoaCA8IDEwID8gKCcwJyArIGhoKSA6IGhoXG4gICAgICAgIG1tID0gbW0gPCAxMCA/ICgnMCcgKyBtbSkgOiBtbVxuICAgICAgICBzcyA9IHNzIDwgMTAgPyAoJzAnICsgc3MpIDogc3NcbiAgICAgICAgcmV0dXJuIHl5eXkgKyAnLScgKyBNTSArICctJyArIGRkICsgJyAnICsgaGggKyAnOicgKyBtbSArICc6JyArIHNzXG4gICAgfVxuXG4gICAgaWYgKGlzTm9kZSlcbiAgICAgICAgdGhpcy51c2VyQWdlbnQgPSB7XG4gICAgICAgICAgICAnVXNlci1BZ2VudCc6ICdjY3h0LycgKyB2ZXJzaW9uICtcbiAgICAgICAgICAgICAgICAnICgraHR0cHM6Ly9naXRodWIuY29tL2tyb2l0b3IvY2N4dCknICtcbiAgICAgICAgICAgICAgICAnIE5vZGUuanMvJyArIHRoaXMubm9kZVZlcnNpb24gKyAnIChKYXZhU2NyaXB0KSdcbiAgICAgICAgfVxuXG4gICAgLy8gcHJlcGVuZGVkIHRvIFVSTCwgbGlrZSBodHRwczovL3Byb3h5LmNvbS9odHRwczovL2V4Y2hhbmdlLmNvbS9hcGkuLi5cbiAgICB0aGlzLnByb3h5ID0gJydcblxuICAgIHRoaXMuaGFzRmV0Y2hUaWNrZXJzID0gZmFsc2VcblxuICAgIGZvciAodmFyIHByb3BlcnR5IGluIGNvbmZpZylcbiAgICAgICAgdGhpc1twcm9wZXJ0eV0gPSBjb25maWdbcHJvcGVydHldXG5cbiAgICB0aGlzLmZldGNoX2JhbGFuY2UgICAgPSB0aGlzLmZldGNoQmFsYW5jZVxuICAgIHRoaXMuZmV0Y2hfb3JkZXJfYm9vayA9IHRoaXMuZmV0Y2hPcmRlckJvb2tcbiAgICB0aGlzLmZldGNoX3RpY2tlciAgICAgPSB0aGlzLmZldGNoVGlja2VyXG4gICAgdGhpcy5mZXRjaF90cmFkZXMgICAgID0gdGhpcy5mZXRjaFRyYWRlc1xuXG4gICAgdGhpcy5pbml0ICgpXG59XG5cbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxudmFyIF8xYnJva2VyID0ge1xuXG4gICAgJ2lkJzogJ18xYnJva2VyJyxcbiAgICAnbmFtZSc6ICcxQnJva2VyJyxcbiAgICAnY291bnRyaWVzJzogJ1VTJyxcbiAgICAncmF0ZUxpbWl0JzogMTUwMCxcbiAgICAndmVyc2lvbic6ICd2MicsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc3NjYwMjEtNDIwYmQ5ZmMtNWVjYi0xMWU3LThlZDYtNTZkMDA4MWVmZWQyLmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly8xYnJva2VyLmNvbS9hcGknLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vMWJyb2tlci5jb20nLFxuICAgICAgICAnZG9jJzogJ2h0dHBzOi8vMWJyb2tlci5jb20vP2M9ZW4vY29udGVudC9hcGktZG9jdW1lbnRhdGlvbicsXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHJpdmF0ZSc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ21hcmtldC9iYXJzJyxcbiAgICAgICAgICAgICAgICAnbWFya2V0L2NhdGVnb3JpZXMnLFxuICAgICAgICAgICAgICAgICdtYXJrZXQvZGV0YWlscycsXG4gICAgICAgICAgICAgICAgJ21hcmtldC9saXN0JyxcbiAgICAgICAgICAgICAgICAnbWFya2V0L3F1b3RlcycsXG4gICAgICAgICAgICAgICAgJ21hcmtldC90aWNrcycsXG4gICAgICAgICAgICAgICAgJ29yZGVyL2NhbmNlbCcsXG4gICAgICAgICAgICAgICAgJ29yZGVyL2NyZWF0ZScsXG4gICAgICAgICAgICAgICAgJ29yZGVyL29wZW4nLFxuICAgICAgICAgICAgICAgICdwb3NpdGlvbi9jbG9zZScsXG4gICAgICAgICAgICAgICAgJ3Bvc2l0aW9uL2Nsb3NlX2NhbmNlbCcsXG4gICAgICAgICAgICAgICAgJ3Bvc2l0aW9uL2VkaXQnLFxuICAgICAgICAgICAgICAgICdwb3NpdGlvbi9oaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAncG9zaXRpb24vb3BlbicsXG4gICAgICAgICAgICAgICAgJ3Bvc2l0aW9uL3NoYXJlZC9nZXQnLFxuICAgICAgICAgICAgICAgICdzb2NpYWwvcHJvZmlsZV9zdGF0aXN0aWNzJyxcbiAgICAgICAgICAgICAgICAnc29jaWFsL3Byb2ZpbGVfdHJhZGVzJyxcbiAgICAgICAgICAgICAgICAndXNlci9iaXRjb2luX2RlcG9zaXRfYWRkcmVzcycsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZGV0YWlscycsXG4gICAgICAgICAgICAgICAgJ3VzZXIvb3ZlcnZpZXcnLFxuICAgICAgICAgICAgICAgICd1c2VyL3F1b3RhX3N0YXR1cycsXG4gICAgICAgICAgICAgICAgJ3VzZXIvdHJhbnNhY3Rpb25fbG9nJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQ2F0ZWdvcmllcyAoKSB7XG4gICAgICAgIGxldCBjYXRlZ29yaWVzID0gYXdhaXQgdGhpcy5wcml2YXRlR2V0TWFya2V0Q2F0ZWdvcmllcyAoKTtcbiAgICAgICAgcmV0dXJuIGNhdGVnb3JpZXNbJ3Jlc3BvbnNlJ107XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoTWFya2V0cyAoKSB7XG4gICAgICAgIGxldCB0aGlzXyA9IHRoaXM7IC8vIHdvcmthcm91bmQgZm9yIEJhYmVsIGJ1ZyAobm90IHBhc3NpbmcgYHRoaXNgIHRvIF9yZWN1cnNpdmUoKSBjYWxsKVxuICAgICAgICBsZXQgY2F0ZWdvcmllcyA9IGF3YWl0IHRoaXMuZmV0Y2hDYXRlZ29yaWVzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgY2F0ZWdvcmllcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgbGV0IGNhdGVnb3J5ID0gY2F0ZWdvcmllc1tjXTtcbiAgICAgICAgICAgIGxldCBtYXJrZXRzID0gYXdhaXQgdGhpc18ucHJpdmF0ZUdldE1hcmtldExpc3QgKHtcbiAgICAgICAgICAgICAgICAnY2F0ZWdvcnknOiBjYXRlZ29yeS50b0xvd2VyQ2FzZSAoKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZm9yIChsZXQgcCA9IDA7IHAgPCBtYXJrZXRzWydyZXNwb25zZSddLmxlbmd0aDsgcCsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IG1hcmtldCA9IG1hcmtldHNbJ3Jlc3BvbnNlJ11bcF07XG4gICAgICAgICAgICAgICAgbGV0IGlkID0gbWFya2V0WydzeW1ib2wnXTtcbiAgICAgICAgICAgICAgICBsZXQgc3ltYm9sID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGxldCBiYXNlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGxldCBxdW90ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBpZiAoKGNhdGVnb3J5ID09ICdGT1JFWCcpIHx8IChjYXRlZ29yeSA9PSAnQ1JZUFRPJykpIHtcbiAgICAgICAgICAgICAgICAgICAgc3ltYm9sID0gbWFya2V0WyduYW1lJ107XG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXJ0cyA9IHN5bWJvbC5zcGxpdCAoJy8nKTtcbiAgICAgICAgICAgICAgICAgICAgYmFzZSA9IHBhcnRzWzBdO1xuICAgICAgICAgICAgICAgICAgICBxdW90ZSA9IHBhcnRzWzFdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGJhc2UgPSBpZDtcbiAgICAgICAgICAgICAgICAgICAgcXVvdGUgPSAnVVNEJztcbiAgICAgICAgICAgICAgICAgICAgc3ltYm9sID0gYmFzZSArICcvJyArIHF1b3RlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBiYXNlID0gdGhpc18uY29tbW9uQ3VycmVuY3lDb2RlIChiYXNlKTtcbiAgICAgICAgICAgICAgICBxdW90ZSA9IHRoaXNfLmNvbW1vbkN1cnJlbmN5Q29kZSAocXVvdGUpO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoICh7XG4gICAgICAgICAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICAgICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgICAgICAgICAnYmFzZSc6IGJhc2UsXG4gICAgICAgICAgICAgICAgICAgICdxdW90ZSc6IHF1b3RlLFxuICAgICAgICAgICAgICAgICAgICAnaW5mbyc6IG1hcmtldCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgYmFsYW5jZSA9IGF3YWl0IHRoaXMucHJpdmF0ZUdldFVzZXJPdmVydmlldyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYmFsYW5jZVsncmVzcG9uc2UnXTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgIH07XG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgdGhpcy5jdXJyZW5jaWVzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSB0aGlzLmN1cnJlbmNpZXNbY107XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd1c2VkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0WydCVEMnXVsnZnJlZSddID0gcGFyc2VGbG9hdCAocmVzcG9uc2VbJ2JhbGFuY2UnXSk7XG4gICAgICAgIHJlc3VsdFsnQlRDJ11bJ3RvdGFsJ10gPSByZXN1bHRbJ0JUQyddWydmcmVlJ107XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZUdldE1hcmtldFF1b3RlcyAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdzeW1ib2xzJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSByZXNwb25zZVsncmVzcG9uc2UnXVswXTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMucGFyc2U4NjAxIChvcmRlcmJvb2tbJ3VwZGF0ZWQnXSk7XG4gICAgICAgIGxldCBiaWRQcmljZSA9IHBhcnNlRmxvYXQgKG9yZGVyYm9va1snYmlkJ10pO1xuICAgICAgICBsZXQgYXNrUHJpY2UgPSBwYXJzZUZsb2F0IChvcmRlcmJvb2tbJ2FzayddKTtcbiAgICAgICAgbGV0IGJpZCA9IFsgYmlkUHJpY2UsIHVuZGVmaW5lZCBdO1xuICAgICAgICBsZXQgYXNrID0gWyBhc2tQcmljZSwgdW5kZWZpbmVkIF07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2JpZHMnOiBbIGJpZCBdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbIGFzayBdLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0KSB7XG4gICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyBmZXRjaFRyYWRlcyAoKSBtZXRob2Qgbm90IGltcGxlbWVudGVkIHlldCcpO1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCB0aGlzLnByaXZhdGVHZXRNYXJrZXRCYXJzICh7XG4gICAgICAgICAgICAnc3ltYm9sJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICdyZXNvbHV0aW9uJzogNjAsXG4gICAgICAgICAgICAnbGltaXQnOiAxLFxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IGF3YWl0IHRoaXMuZmV0Y2hPcmRlckJvb2sgKG1hcmtldCk7XG4gICAgICAgIGxldCB0aWNrZXIgPSByZXN1bHRbJ3Jlc3BvbnNlJ11bMF07XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLnBhcnNlODYwMSAodGlja2VyWydkYXRlJ10pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydoJ10pLFxuICAgICAgICAgICAgJ2xvdyc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbCddKSxcbiAgICAgICAgICAgICdiaWQnOiBvcmRlcmJvb2tbJ2JpZHMnXVswXVswXSxcbiAgICAgICAgICAgICdhc2snOiBvcmRlcmJvb2tbJ2Fza3MnXVswXVswXSxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ28nXSksXG4gICAgICAgICAgICAnY2xvc2UnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2MnXSksXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdzeW1ib2wnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICAgICAgJ21hcmdpbic6IGFtb3VudCxcbiAgICAgICAgICAgICdkaXJlY3Rpb24nOiAoc2lkZSA9PSAnc2VsbCcpID8gJ3Nob3J0JyA6ICdsb25nJyxcbiAgICAgICAgICAgICdsZXZlcmFnZSc6IDEsXG4gICAgICAgICAgICAndHlwZSc6IHNpZGUsXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlID09ICdsaW1pdCcpXG4gICAgICAgICAgICBvcmRlclsncHJpY2UnXSA9IHByaWNlO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBvcmRlclsndHlwZSddICs9ICdfbWFya2V0JztcbiAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMucHJpdmF0ZUdldE9yZGVyQ3JlYXRlICh0aGlzLmV4dGVuZCAob3JkZXIsIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXN1bHQsXG4gICAgICAgICAgICAnaWQnOiByZXN1bHRbJ3Jlc3BvbnNlJ11bJ29yZGVyX2lkJ10sXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdE9yZGVyQ2FuY2VsICh7ICdvcmRlcl9pZCc6IGlkIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICghdGhpcy5hcGlLZXkpXG4gICAgICAgICAgICB0aHJvdyBuZXcgQXV0aGVudGljYXRpb25FcnJvciAodGhpcy5pZCArICcgcmVxdWlyZXMgYXBpS2V5IGZvciBhbGwgcmVxdWVzdHMnKTtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ10gKyAnLycgKyB0aGlzLnZlcnNpb24gKyAnLycgKyBwYXRoICsgJy5waHAnO1xuICAgICAgICBsZXQgcXVlcnkgPSB0aGlzLmV4dGVuZCAoeyAndG9rZW4nOiB0aGlzLmFwaUtleSB9LCBwYXJhbXMpO1xuICAgICAgICB1cmwgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHF1ZXJ5KTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCAodXJsLCBtZXRob2QpO1xuICAgICAgICBpZiAoJ3dhcm5pbmcnIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlWyd3YXJuaW5nJ10pXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnIFdhcm5pbmc6ICcgKyByZXNwb25zZVsnd2FybmluZ19tZXNzYWdlJ10pO1xuICAgICAgICBpZiAoJ2Vycm9yJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIGlmIChyZXNwb25zZVsnZXJyb3InXSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgRXJyb3I6ICcgKyByZXNwb25zZVsnZXJyb3JfY29kZSddICsgcmVzcG9uc2VbJ2Vycm9yX21lc3NhZ2UnXSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBjcnlwdG9jYXBpdGFsID0ge1xuXG4gICAgJ2lkJzogJ2NyeXB0b2NhcGl0YWwnLFxuICAgICduYW1lJzogJ0NyeXB0byBDYXBpdGFsJyxcbiAgICAnY29tbWVudCc6ICdDcnlwdG8gQ2FwaXRhbCBBUEknLFxuICAgICdjb3VudHJpZXMnOiAnUEEnLCAvLyBQYW5hbWFcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yNzk5MzE1OC03YTEzZjE0MC02NGFjLTExZTctODljYy1hM2I0NDFmMGIwZjguanBnJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL2NyeXB0b2NhcGl0YWwuY28nLFxuICAgICAgICAnZG9jJzogJ2h0dHBzOi8vZ2l0aHViLmNvbS9jcnlwdG9jYXAnLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ3N0YXRzJyxcbiAgICAgICAgICAgICAgICAnaGlzdG9yaWNhbC1wcmljZXMnLFxuICAgICAgICAgICAgICAgICdvcmRlci1ib29rJyxcbiAgICAgICAgICAgICAgICAndHJhbnNhY3Rpb25zJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2JhbGFuY2VzLWFuZC1pbmZvJyxcbiAgICAgICAgICAgICAgICAnb3Blbi1vcmRlcnMnLFxuICAgICAgICAgICAgICAgICd1c2VyLXRyYW5zYWN0aW9ucycsXG4gICAgICAgICAgICAgICAgJ2J0Yy1kZXBvc2l0LWFkZHJlc3MvZ2V0JyxcbiAgICAgICAgICAgICAgICAnYnRjLWRlcG9zaXQtYWRkcmVzcy9uZXcnLFxuICAgICAgICAgICAgICAgICdkZXBvc2l0cy9nZXQnLFxuICAgICAgICAgICAgICAgICd3aXRoZHJhd2Fscy9nZXQnLFxuICAgICAgICAgICAgICAgICdvcmRlcnMvbmV3JyxcbiAgICAgICAgICAgICAgICAnb3JkZXJzL2VkaXQnLFxuICAgICAgICAgICAgICAgICdvcmRlcnMvY2FuY2VsJyxcbiAgICAgICAgICAgICAgICAnb3JkZXJzL3N0YXR1cycsXG4gICAgICAgICAgICAgICAgJ3dpdGhkcmF3YWxzL25ldycsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0QmFsYW5jZXNBbmRJbmZvICgpO1xuICAgICAgICBsZXQgYmFsYW5jZSA9IHJlc3BvbnNlWydiYWxhbmNlcy1hbmQtaW5mbyddO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGJhbGFuY2UgfTtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCB0aGlzLmN1cnJlbmNpZXMubGVuZ3RoOyBjKyspIHtcbiAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IHRoaXMuY3VycmVuY2llc1tjXTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd1c2VkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoY3VycmVuY3kgaW4gYmFsYW5jZVsnYXZhaWxhYmxlJ10pXG4gICAgICAgICAgICAgICAgYWNjb3VudFsnZnJlZSddID0gcGFyc2VGbG9hdCAoYmFsYW5jZVsnYXZhaWxhYmxlJ11bY3VycmVuY3ldKTtcbiAgICAgICAgICAgIGlmIChjdXJyZW5jeSBpbiBiYWxhbmNlWydvbl9ob2xkJ10pXG4gICAgICAgICAgICAgICAgYWNjb3VudFsndXNlZCddID0gcGFyc2VGbG9hdCAoYmFsYW5jZVsnb25faG9sZCddW2N1cnJlbmN5XSk7XG4gICAgICAgICAgICBhY2NvdW50Wyd0b3RhbCddID0gdGhpcy5zdW0gKGFjY291bnRbJ2ZyZWUnXSwgYWNjb3VudFsndXNlZCddKTtcbiAgICAgICAgICAgIHJlc3VsdFtjdXJyZW5jeV0gPSBhY2NvdW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0T3JkZXJCb29rICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2N1cnJlbmN5JzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSByZXNwb25zZVsnb3JkZXItYm9vayddO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IFtdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaWRlcyA9IHsgJ2JpZHMnOiAnYmlkJywgJ2Fza3MnOiAnYXNrJyB9O1xuICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzIChzaWRlcyk7XG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwga2V5cy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgbGV0IGtleSA9IGtleXNba107XG4gICAgICAgICAgICBsZXQgc2lkZSA9IHNpZGVzW2tleV07XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHBhcnNlSW50IChvcmRlclsndGltZXN0YW1wJ10pICogMTAwMDtcbiAgICAgICAgICAgICAgICBsZXQgcHJpY2UgPSBwYXJzZUZsb2F0IChvcmRlclsncHJpY2UnXSk7XG4gICAgICAgICAgICAgICAgbGV0IGFtb3VudCA9IHBhcnNlRmxvYXQgKG9yZGVyWydvcmRlcl9hbW91bnQnXSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W2tleV0ucHVzaCAoWyBwcmljZSwgYW1vdW50LCB0aW1lc3RhbXAgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFN0YXRzICh7XG4gICAgICAgICAgICAnY3VycmVuY3knOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IHRpY2tlciA9IHJlc3BvbnNlWydzdGF0cyddO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ21heCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ21pbiddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2JpZCddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2FzayddKSxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ29wZW4nXSksXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdF9wcmljZSddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2RhaWx5X2NoYW5nZSddKSxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndG90YWxfYnRjX3RyYWRlZCddKSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0VHJhbnNhY3Rpb25zICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2N1cnJlbmN5JzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdzaWRlJzogc2lkZSxcbiAgICAgICAgICAgICd0eXBlJzogdHlwZSxcbiAgICAgICAgICAgICdjdXJyZW5jeSc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgICAgICAnYW1vdW50JzogYW1vdW50LFxuICAgICAgICB9O1xuICAgICAgICBpZiAodHlwZSA9PSAnbGltaXQnKVxuICAgICAgICAgICAgb3JkZXJbJ2xpbWl0X3ByaWNlJ10gPSBwcmljZTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RPcmRlcnNOZXcgKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3VsdCxcbiAgICAgICAgICAgICdpZCc6IHJlc3VsdCxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0T3JkZXJzQ2FuY2VsICh7ICdpZCc6IGlkIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0aGlzLmlkID09ICdjcnlwdG9jYXBpdGFsJylcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyBpcyBhbiBhYnN0cmFjdCBiYXNlIEFQSSBmb3IgXzFidGN4ZScpO1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArICcvJyArIHBhdGg7XG4gICAgICAgIGlmIChhcGkgPT0gJ3B1YmxpYycpIHtcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyAocGFyYW1zKS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChwYXJhbXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICAgICAnYXBpX2tleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgICAgICdub25jZSc6IHRoaXMubm9uY2UgKCksXG4gICAgICAgICAgICB9LCBwYXJhbXMpO1xuICAgICAgICAgICAgbGV0IHJlcXVlc3QgPSB0aGlzLmpzb24gKHF1ZXJ5KTtcbiAgICAgICAgICAgIHF1ZXJ5WydzaWduYXR1cmUnXSA9IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKHJlcXVlc3QpLCB0aGlzLmVuY29kZSAodGhpcy5zZWNyZXQpKTtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLmpzb24gKHF1ZXJ5KTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgICAgIGlmICgnZXJyb3JzJyBpbiByZXNwb25zZSkge1xuICAgICAgICAgICAgbGV0IGVycm9ycyA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgZSA9IDA7IGUgPCByZXNwb25zZVsnZXJyb3JzJ10ubGVuZ3RoOyBlKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgZXJyb3IgPSByZXNwb25zZVsnZXJyb3JzJ11bZV07XG4gICAgICAgICAgICAgICAgZXJyb3JzLnB1c2ggKGVycm9yWydjb2RlJ10gKyAnOiAnICsgZXJyb3JbJ21lc3NhZ2UnXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlcnJvcnMgPSBlcnJvcnMuam9pbiAoJyAnKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgZXJyb3JzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIF8xYnRjeGUgPSBleHRlbmQgKGNyeXB0b2NhcGl0YWwsIHtcblxuICAgICdpZCc6ICdfMWJ0Y3hlJyxcbiAgICAnbmFtZSc6ICcxQlRDWEUnLFxuICAgICdjb3VudHJpZXMnOiAnUEEnLCAvLyBQYW5hbWFcbiAgICAnY29tbWVudCc6ICdDcnlwdG8gQ2FwaXRhbCBBUEknLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2MDQ5LTJiMjk0NDA4LTVlY2MtMTFlNy04NWNjLWFkYWZmMDEzZGMxYS5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vMWJ0Y3hlLmNvbS9hcGknLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vMWJ0Y3hlLmNvbScsXG4gICAgICAgICdkb2MnOiAnaHR0cHM6Ly8xYnRjeGUuY29tL2FwaS1kb2NzLnBocCcsXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9VU0QnOiB7ICdpZCc6ICdVU0QnLCAnc3ltYm9sJzogJ0JUQy9VU0QnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnVVNEJyB9LFxuICAgICAgICAnQlRDL0VVUic6IHsgJ2lkJzogJ0VVUicsICdzeW1ib2wnOiAnQlRDL0VVUicsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdFVVInIH0sXG4gICAgICAgICdCVEMvQ05ZJzogeyAnaWQnOiAnQ05ZJywgJ3N5bWJvbCc6ICdCVEMvQ05ZJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ0NOWScgfSxcbiAgICAgICAgJ0JUQy9SVUInOiB7ICdpZCc6ICdSVUInLCAnc3ltYm9sJzogJ0JUQy9SVUInLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnUlVCJyB9LFxuICAgICAgICAnQlRDL0NIRic6IHsgJ2lkJzogJ0NIRicsICdzeW1ib2wnOiAnQlRDL0NIRicsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdDSEYnIH0sXG4gICAgICAgICdCVEMvSlBZJzogeyAnaWQnOiAnSlBZJywgJ3N5bWJvbCc6ICdCVEMvSlBZJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ0pQWScgfSxcbiAgICAgICAgJ0JUQy9HQlAnOiB7ICdpZCc6ICdHQlAnLCAnc3ltYm9sJzogJ0JUQy9HQlAnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnR0JQJyB9LFxuICAgICAgICAnQlRDL0NBRCc6IHsgJ2lkJzogJ0NBRCcsICdzeW1ib2wnOiAnQlRDL0NBRCcsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdDQUQnIH0sXG4gICAgICAgICdCVEMvQVVEJzogeyAnaWQnOiAnQVVEJywgJ3N5bWJvbCc6ICdCVEMvQVVEJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ0FVRCcgfSxcbiAgICAgICAgJ0JUQy9BRUQnOiB7ICdpZCc6ICdBRUQnLCAnc3ltYm9sJzogJ0JUQy9BRUQnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnQUVEJyB9LFxuICAgICAgICAnQlRDL0JHTic6IHsgJ2lkJzogJ0JHTicsICdzeW1ib2wnOiAnQlRDL0JHTicsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdCR04nIH0sXG4gICAgICAgICdCVEMvQ1pLJzogeyAnaWQnOiAnQ1pLJywgJ3N5bWJvbCc6ICdCVEMvQ1pLJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ0NaSycgfSxcbiAgICAgICAgJ0JUQy9ES0snOiB7ICdpZCc6ICdES0snLCAnc3ltYm9sJzogJ0JUQy9ES0snLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnREtLJyB9LFxuICAgICAgICAnQlRDL0hLRCc6IHsgJ2lkJzogJ0hLRCcsICdzeW1ib2wnOiAnQlRDL0hLRCcsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdIS0QnIH0sXG4gICAgICAgICdCVEMvSFJLJzogeyAnaWQnOiAnSFJLJywgJ3N5bWJvbCc6ICdCVEMvSFJLJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ0hSSycgfSxcbiAgICAgICAgJ0JUQy9IVUYnOiB7ICdpZCc6ICdIVUYnLCAnc3ltYm9sJzogJ0JUQy9IVUYnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnSFVGJyB9LFxuICAgICAgICAnQlRDL0lMUyc6IHsgJ2lkJzogJ0lMUycsICdzeW1ib2wnOiAnQlRDL0lMUycsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdJTFMnIH0sXG4gICAgICAgICdCVEMvSU5SJzogeyAnaWQnOiAnSU5SJywgJ3N5bWJvbCc6ICdCVEMvSU5SJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ0lOUicgfSxcbiAgICAgICAgJ0JUQy9NVVInOiB7ICdpZCc6ICdNVVInLCAnc3ltYm9sJzogJ0JUQy9NVVInLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnTVVSJyB9LFxuICAgICAgICAnQlRDL01YTic6IHsgJ2lkJzogJ01YTicsICdzeW1ib2wnOiAnQlRDL01YTicsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdNWE4nIH0sXG4gICAgICAgICdCVEMvTk9LJzogeyAnaWQnOiAnTk9LJywgJ3N5bWJvbCc6ICdCVEMvTk9LJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ05PSycgfSxcbiAgICAgICAgJ0JUQy9OWkQnOiB7ICdpZCc6ICdOWkQnLCAnc3ltYm9sJzogJ0JUQy9OWkQnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnTlpEJyB9LFxuICAgICAgICAnQlRDL1BMTic6IHsgJ2lkJzogJ1BMTicsICdzeW1ib2wnOiAnQlRDL1BMTicsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdQTE4nIH0sXG4gICAgICAgICdCVEMvUk9OJzogeyAnaWQnOiAnUk9OJywgJ3N5bWJvbCc6ICdCVEMvUk9OJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ1JPTicgfSxcbiAgICAgICAgJ0JUQy9TRUsnOiB7ICdpZCc6ICdTRUsnLCAnc3ltYm9sJzogJ0JUQy9TRUsnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnU0VLJyB9LFxuICAgICAgICAnQlRDL1NHRCc6IHsgJ2lkJzogJ1NHRCcsICdzeW1ib2wnOiAnQlRDL1NHRCcsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdTR0QnIH0sXG4gICAgICAgICdCVEMvVEhCJzogeyAnaWQnOiAnVEhCJywgJ3N5bWJvbCc6ICdCVEMvVEhCJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ1RIQicgfSxcbiAgICAgICAgJ0JUQy9UUlknOiB7ICdpZCc6ICdUUlknLCAnc3ltYm9sJzogJ0JUQy9UUlknLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnVFJZJyB9LFxuICAgICAgICAnQlRDL1pBUic6IHsgJ2lkJzogJ1pBUicsICdzeW1ib2wnOiAnQlRDL1pBUicsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdaQVInIH0sXG4gICAgfSxcbn0pXG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGFueHBybyA9IHtcblxuICAgICdpZCc6ICdhbnhwcm8nLFxuICAgICduYW1lJzogJ0FOWFBybycsXG4gICAgJ2NvdW50cmllcyc6IFsgJ0pQJywgJ1NHJywgJ0hLJywgJ05aJyBdLFxuICAgICd2ZXJzaW9uJzogJzInLFxuICAgICdyYXRlTGltaXQnOiAxNTAwLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY1OTgzLWZkODU5NWRhLTVlYzktMTFlNy04MmUzLWFkYjNhYjhjMjYxMi5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vYW54cHJvLmNvbS9hcGknLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vYW54cHJvLmNvbScsXG4gICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAnaHR0cDovL2RvY3MuYW54djIuYXBpYXJ5LmlvJyxcbiAgICAgICAgICAgICdodHRwczovL2FueHByby5jb20vcGFnZXMvYXBpJyxcbiAgICAgICAgXSxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICd7Y3VycmVuY3lfcGFpcn0vbW9uZXkvdGlja2VyJyxcbiAgICAgICAgICAgICAgICAne2N1cnJlbmN5X3BhaXJ9L21vbmV5L2RlcHRoL2Z1bGwnLFxuICAgICAgICAgICAgICAgICd7Y3VycmVuY3lfcGFpcn0vbW9uZXkvdHJhZGUvZmV0Y2gnLCAvLyBkaXNhYmxlZCBieSBBTlhQcm9cbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ3tjdXJyZW5jeV9wYWlyfS9tb25leS9vcmRlci9hZGQnLFxuICAgICAgICAgICAgICAgICd7Y3VycmVuY3lfcGFpcn0vbW9uZXkvb3JkZXIvY2FuY2VsJyxcbiAgICAgICAgICAgICAgICAne2N1cnJlbmN5X3BhaXJ9L21vbmV5L29yZGVyL3F1b3RlJyxcbiAgICAgICAgICAgICAgICAne2N1cnJlbmN5X3BhaXJ9L21vbmV5L29yZGVyL3Jlc3VsdCcsXG4gICAgICAgICAgICAgICAgJ3tjdXJyZW5jeV9wYWlyfS9tb25leS9vcmRlcnMnLFxuICAgICAgICAgICAgICAgICdtb25leS97Y3VycmVuY3l9L2FkZHJlc3MnLFxuICAgICAgICAgICAgICAgICdtb25leS97Y3VycmVuY3l9L3NlbmRfc2ltcGxlJyxcbiAgICAgICAgICAgICAgICAnbW9uZXkvaW5mbycsXG4gICAgICAgICAgICAgICAgJ21vbmV5L3RyYWRlL2xpc3QnLFxuICAgICAgICAgICAgICAgICdtb25leS93YWxsZXQvaGlzdG9yeScsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgJ21hcmtldHMnOiB7XG4gICAgICAgICdCVEMvVVNEJzogeyAnaWQnOiAnQlRDVVNEJywgJ3N5bWJvbCc6ICdCVEMvVVNEJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ1VTRCcgfSxcbiAgICAgICAgJ0JUQy9IS0QnOiB7ICdpZCc6ICdCVENIS0QnLCAnc3ltYm9sJzogJ0JUQy9IS0QnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnSEtEJyB9LFxuICAgICAgICAnQlRDL0VVUic6IHsgJ2lkJzogJ0JUQ0VVUicsICdzeW1ib2wnOiAnQlRDL0VVUicsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdFVVInIH0sXG4gICAgICAgICdCVEMvQ0FEJzogeyAnaWQnOiAnQlRDQ0FEJywgJ3N5bWJvbCc6ICdCVEMvQ0FEJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ0NBRCcgfSxcbiAgICAgICAgJ0JUQy9BVUQnOiB7ICdpZCc6ICdCVENBVUQnLCAnc3ltYm9sJzogJ0JUQy9BVUQnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnQVVEJyB9LFxuICAgICAgICAnQlRDL1NHRCc6IHsgJ2lkJzogJ0JUQ1NHRCcsICdzeW1ib2wnOiAnQlRDL1NHRCcsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdTR0QnIH0sXG4gICAgICAgICdCVEMvSlBZJzogeyAnaWQnOiAnQlRDSlBZJywgJ3N5bWJvbCc6ICdCVEMvSlBZJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ0pQWScgfSxcbiAgICAgICAgJ0JUQy9HQlAnOiB7ICdpZCc6ICdCVENHQlAnLCAnc3ltYm9sJzogJ0JUQy9HQlAnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnR0JQJyB9LFxuICAgICAgICAnQlRDL05aRCc6IHsgJ2lkJzogJ0JUQ05aRCcsICdzeW1ib2wnOiAnQlRDL05aRCcsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdOWkQnIH0sXG4gICAgICAgICdMVEMvQlRDJzogeyAnaWQnOiAnTFRDQlRDJywgJ3N5bWJvbCc6ICdMVEMvQlRDJywgJ2Jhc2UnOiAnTFRDJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ0RPR0UvQlRDJzogeyAnaWQnOiAnRE9HRUJUQycsICdzeW1ib2wnOiAnRE9HRS9CVEMnLCAnYmFzZSc6ICdET0dFJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ1NUUi9CVEMnOiB7ICdpZCc6ICdTVFJCVEMnLCAnc3ltYm9sJzogJ1NUUi9CVEMnLCAnYmFzZSc6ICdTVFInLCAncXVvdGUnOiAnQlRDJyB9LFxuICAgICAgICAnWFJQL0JUQyc6IHsgJ2lkJzogJ1hSUEJUQycsICdzeW1ib2wnOiAnWFJQL0JUQycsICdiYXNlJzogJ1hSUCcsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RNb25leUluZm8gKCk7XG4gICAgICAgIGxldCBiYWxhbmNlID0gcmVzcG9uc2VbJ2RhdGEnXTtcbiAgICAgICAgbGV0IGN1cnJlbmNpZXMgPSBPYmplY3Qua2V5cyAoYmFsYW5jZVsnV2FsbGV0cyddKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiBiYWxhbmNlIH07XG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgY3VycmVuY2llcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gY3VycmVuY2llc1tjXTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd1c2VkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoY3VycmVuY3kgaW4gYmFsYW5jZVsnV2FsbGV0cyddKSB7XG4gICAgICAgICAgICAgICAgbGV0IHdhbGxldCA9IGJhbGFuY2VbJ1dhbGxldHMnXVtjdXJyZW5jeV07XG4gICAgICAgICAgICAgICAgYWNjb3VudFsnZnJlZSddID0gcGFyc2VGbG9hdCAod2FsbGV0WydBdmFpbGFibGVfQmFsYW5jZSddWyd2YWx1ZSddKTtcbiAgICAgICAgICAgICAgICBhY2NvdW50Wyd0b3RhbCddID0gcGFyc2VGbG9hdCAod2FsbGV0WydCYWxhbmNlJ11bJ3ZhbHVlJ10pO1xuICAgICAgICAgICAgICAgIGFjY291bnRbJ3VzZWQnXSA9IGFjY291bnRbJ3RvdGFsJ10gLSBhY2NvdW50WydmcmVlJ107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldEN1cnJlbmN5UGFpck1vbmV5RGVwdGhGdWxsICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2N1cnJlbmN5X3BhaXInOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IHJlc3BvbnNlWydkYXRhJ107XG4gICAgICAgIGxldCB0ID0gcGFyc2VJbnQgKG9yZGVyYm9va1snZGF0YVVwZGF0ZVRpbWUnXSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSBwYXJzZUludCAodCAvIDEwMDApO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAob3JkZXJbJ3ByaWNlJ10pO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBwYXJzZUZsb2F0IChvcmRlclsnYW1vdW50J10pO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtzaWRlXS5wdXNoIChbIHByaWNlLCBhbW91bnQgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldEN1cnJlbmN5UGFpck1vbmV5VGlja2VyICh7XG4gICAgICAgICAgICAnY3VycmVuY3lfcGFpcic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgdGlja2VyID0gcmVzcG9uc2VbJ2RhdGEnXTtcbiAgICAgICAgbGV0IHQgPSBwYXJzZUludCAodGlja2VyWydkYXRhVXBkYXRlVGltZSddKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHBhcnNlSW50ICh0IC8gMTAwMCk7XG4gICAgICAgIGxldCBiaWQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGxldCBhc2sgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmICh0aWNrZXJbJ2J1eSddWyd2YWx1ZSddKVxuICAgICAgICAgICAgYmlkID0gcGFyc2VGbG9hdCAodGlja2VyWydidXknXVsndmFsdWUnXSk7XG4gICAgICAgIGlmICh0aWNrZXJbJ3NlbGwnXVsndmFsdWUnXSlcbiAgICAgICAgICAgIGFzayA9IHBhcnNlRmxvYXQgKHRpY2tlclsnc2VsbCddWyd2YWx1ZSddKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddWyd2YWx1ZSddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddWyd2YWx1ZSddKSxcbiAgICAgICAgICAgICdiaWQnOiBiaWQsXG4gICAgICAgICAgICAnYXNrJzogYXNrLFxuICAgICAgICAgICAgJ3Z3YXAnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3Z3YXAnXVsndmFsdWUnXSksXG4gICAgICAgICAgICAnb3Blbic6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjbG9zZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdmaXJzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsYXN0JzogcGFyc2VGbG9hdCAodGlja2VyWydsYXN0J11bJ3ZhbHVlJ10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2F2ZyddWyd2YWx1ZSddKSxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWyd2b2wnXVsndmFsdWUnXSksXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBlcnJvciA9IHRoaXMuaWQgKyAnIHN3aXRjaGVkIG9mZiB0aGUgdHJhZGVzIGVuZHBvaW50LCBzZWUgdGhlaXIgZG9jcyBhdCBodHRwOi8vZG9jcy5hbnh2Mi5hcGlhcnkuaW8vcmVmZXJlbmNlL21hcmtldC1kYXRhL2N1cnJlbmN5cGFpcm1vbmV5dHJhZGVmZXRjaC1kaXNhYmxlZCc7XG4gICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yIChlcnJvcik7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldEN1cnJlbmN5UGFpck1vbmV5VHJhZGVGZXRjaCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdjdXJyZW5jeV9wYWlyJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdjdXJyZW5jeV9wYWlyJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICdhbW91bnRfaW50JzogYW1vdW50LFxuICAgICAgICAgICAgJ3R5cGUnOiBzaWRlLFxuICAgICAgICB9O1xuICAgICAgICBpZiAodHlwZSA9PSAnbGltaXQnKVxuICAgICAgICAgICAgb3JkZXJbJ3ByaWNlX2ludCddID0gcHJpY2U7XG4gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0Q3VycmVuY3lQYWlyT3JkZXJBZGQgKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3VsdCxcbiAgICAgICAgICAgICdpZCc6IHJlc3VsdFsnZGF0YSddXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdEN1cnJlbmN5UGFpck9yZGVyQ2FuY2VsICh7ICdvaWQnOiBpZCB9KTtcbiAgICB9LFxuXG4gICAgbm9uY2UgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHJlcXVlc3QgPSB0aGlzLmltcGxvZGVQYXJhbXMgKHBhdGgsIHBhcmFtcyk7XG4gICAgICAgIGxldCBxdWVyeSA9IHRoaXMub21pdCAocGFyYW1zLCB0aGlzLmV4dHJhY3RQYXJhbXMgKHBhdGgpKTtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ10gKyAnLycgKyB0aGlzLnZlcnNpb24gKyAnLycgKyByZXF1ZXN0O1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHF1ZXJ5KS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChxdWVyeSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpO1xuICAgICAgICAgICAgYm9keSA9IHRoaXMudXJsZW5jb2RlICh0aGlzLmV4dGVuZCAoeyAnbm9uY2UnOiBub25jZSB9LCBxdWVyeSkpO1xuICAgICAgICAgICAgbGV0IHNlY3JldCA9IHRoaXMuYmFzZTY0VG9CaW5hcnkgKHRoaXMuc2VjcmV0KTtcbiAgICAgICAgICAgIGxldCBhdXRoID0gcmVxdWVzdCArIFwiXFwwXCIgKyBib2R5O1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgICAgICAgJ1Jlc3QtS2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ1Jlc3QtU2lnbic6IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKGF1dGgpLCBzZWNyZXQsICdzaGE1MTInLCAnYmFzZTY0JyksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdyZXN1bHQnIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlWydyZXN1bHQnXSA9PSAnc3VjY2VzcycpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgJyArIHRoaXMuanNvbiAocmVzcG9uc2UpKTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBiaW5hbmNlID0ge1xuXG4gICAgJ2lkJzogJ2JpbmFuY2UnLFxuICAgICduYW1lJzogJ0JpbmFuY2UnLFxuICAgICdjb3VudHJpZXMnOiAnQ04nLCAvLyBDaGluYVxuICAgICdyYXRlTGltaXQnOiAxMDAwLFxuICAgICd2ZXJzaW9uJzogJ3YxJyxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yOTYwNDAyMC1kNTQ4M2NkYy04N2VlLTExZTctOTRjNy1kMWE4ZDkxNjkyOTMuanBnJyxcbiAgICAgICAgJ2FwaSc6ICdodHRwczovL3d3dy5iaW5hbmNlLmNvbS9hcGknLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vd3d3LmJpbmFuY2UuY29tJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL3d3dy5iaW5hbmNlLmNvbS9yZXN0YXBpcHViLmh0bWwnLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ3BpbmcnLFxuICAgICAgICAgICAgICAgICd0aW1lJyxcbiAgICAgICAgICAgICAgICAnZGVwdGgnLFxuICAgICAgICAgICAgICAgICdhZ2dUcmFkZXMnLFxuICAgICAgICAgICAgICAgICdrbGluZXMnLFxuICAgICAgICAgICAgICAgICd0aWNrZXIvMjRocicsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAncHJpdmF0ZSc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ29yZGVyJyxcbiAgICAgICAgICAgICAgICAnb3Blbk9yZGVycycsXG4gICAgICAgICAgICAgICAgJ2FsbE9yZGVycycsXG4gICAgICAgICAgICAgICAgJ2FjY291bnQnLFxuICAgICAgICAgICAgICAgICdteVRyYWRlcycsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ29yZGVyJyxcbiAgICAgICAgICAgICAgICAnb3JkZXIvdGVzdCcsXG4gICAgICAgICAgICAgICAgJ3VzZXJEYXRhU3RyZWFtJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAncHV0JzogW1xuICAgICAgICAgICAgICAgICd1c2VyRGF0YVN0cmVhbSdcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAnZGVsZXRlJzogW1xuICAgICAgICAgICAgICAgICdvcmRlcicsXG4gICAgICAgICAgICAgICAgJ3VzZXJEYXRhU3RyZWFtJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JOQi9CVEMnOiB7ICdpZCc6ICdCTkJCVEMnLCAnc3ltYm9sJzogJ0JOQi9CVEMnLCAnYmFzZSc6ICdCTkInLCAncXVvdGUnOiAnQlRDJyB9LFxuICAgICAgICAnTkVPL0JUQyc6IHsgJ2lkJzogJ05FT0JUQycsICdzeW1ib2wnOiAnTkVPL0JUQycsICdiYXNlJzogJ05FTycsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdFVEgvQlRDJzogeyAnaWQnOiAnRVRIQlRDJywgJ3N5bWJvbCc6ICdFVEgvQlRDJywgJ2Jhc2UnOiAnRVRIJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ0hTUi9CVEMnOiB7ICdpZCc6ICdIU1JCVEMnLCAnc3ltYm9sJzogJ0hTUi9CVEMnLCAnYmFzZSc6ICdIU1InLCAncXVvdGUnOiAnQlRDJyB9LFxuICAgICAgICAnTFRDL0JUQyc6IHsgJ2lkJzogJ0xUQ0JUQycsICdzeW1ib2wnOiAnTFRDL0JUQycsICdiYXNlJzogJ0xUQycsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdHQVMvQlRDJzogeyAnaWQnOiAnR0FTQlRDJywgJ3N5bWJvbCc6ICdHQVMvQlRDJywgJ2Jhc2UnOiAnR0FTJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ0hDQy9CVEMnOiB7ICdpZCc6ICdIQ0NCVEMnLCAnc3ltYm9sJzogJ0hDQy9CVEMnLCAnYmFzZSc6ICdIQ0MnLCAncXVvdGUnOiAnQlRDJyB9LFxuICAgICAgICAnQkNIL0JUQyc6IHsgJ2lkJzogJ0JDQ0JUQycsICdzeW1ib2wnOiAnQkNIL0JUQycsICdiYXNlJzogJ0JDSCcsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdCTkIvRVRIJzogeyAnaWQnOiAnQk5CRVRIJywgJ3N5bWJvbCc6ICdCTkIvRVRIJywgJ2Jhc2UnOiAnQk5CJywgJ3F1b3RlJzogJ0VUSCcgfSxcbiAgICAgICAgJ0ROVC9FVEgnOiB7ICdpZCc6ICdETlRFVEgnLCAnc3ltYm9sJzogJ0ROVC9FVEgnLCAnYmFzZSc6ICdETlQnLCAncXVvdGUnOiAnRVRIJyB9LFxuICAgICAgICAnT0FYL0VUSCc6IHsgJ2lkJzogJ09BWEVUSCcsICdzeW1ib2wnOiAnT0FYL0VUSCcsICdiYXNlJzogJ09BWCcsICdxdW90ZSc6ICdFVEgnIH0sXG4gICAgICAgICdNQ08vRVRIJzogeyAnaWQnOiAnTUNPRVRIJywgJ3N5bWJvbCc6ICdNQ08vRVRIJywgJ2Jhc2UnOiAnTUNPJywgJ3F1b3RlJzogJ0VUSCcgfSxcbiAgICAgICAgJ0JUTS9FVEgnOiB7ICdpZCc6ICdCVE1FVEgnLCAnc3ltYm9sJzogJ0JUTS9FVEgnLCAnYmFzZSc6ICdCVE0nLCAncXVvdGUnOiAnRVRIJyB9LFxuICAgICAgICAnU05UL0VUSCc6IHsgJ2lkJzogJ1NOVEVUSCcsICdzeW1ib2wnOiAnU05UL0VUSCcsICdiYXNlJzogJ1NOVCcsICdxdW90ZSc6ICdFVEgnIH0sXG4gICAgICAgICdFT1MvRVRIJzogeyAnaWQnOiAnRU9TRVRIJywgJ3N5bWJvbCc6ICdFT1MvRVRIJywgJ2Jhc2UnOiAnRU9TJywgJ3F1b3RlJzogJ0VUSCcgfSxcbiAgICAgICAgJ0JOVC9FVEgnOiB7ICdpZCc6ICdCTlRFVEgnLCAnc3ltYm9sJzogJ0JOVC9FVEgnLCAnYmFzZSc6ICdCTlQnLCAncXVvdGUnOiAnRVRIJyB9LFxuICAgICAgICAnSUNOL0VUSCc6IHsgJ2lkJzogJ0lDTkVUSCcsICdzeW1ib2wnOiAnSUNOL0VUSCcsICdiYXNlJzogJ0lDTicsICdxdW90ZSc6ICdFVEgnIH0sXG4gICAgICAgICdCVEMvVVNEVCc6IHsgJ2lkJzogJ0JUQ1VTRFQnLCAnc3ltYm9sJzogJ0JUQy9VU0RUJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ1VTRFQnIH0sXG4gICAgICAgICdFVEgvVVNEVCc6IHsgJ2lkJzogJ0VUSFVTRFQnLCAnc3ltYm9sJzogJ0VUSC9VU0RUJywgJ2Jhc2UnOiAnRVRIJywgJ3F1b3RlJzogJ1VTRFQnIH0sXG4gICAgICAgICdRVFVNL0VUSCc6IHsgJ2lkJzogJ1FUVU1FVEgnLCAnc3ltYm9sJzogJ1FUVU0vRVRIJywgJ2Jhc2UnOiAnUVRVTScsICdxdW90ZSc6ICdFVEgnIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZUdldEFjY291bnQgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogcmVzcG9uc2UgfTtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gcmVzcG9uc2VbJ2JhbGFuY2VzJ107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmFsYW5jZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCBiYWxhbmNlID0gYmFsYW5jZXNbaV07XG4gICAgICAgICAgICBsZXQgYXNzZXQgPSBiYWxhbmNlWydhc3NldCddO1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gdGhpcy5jb21tb25DdXJyZW5jeUNvZGUgKGFzc2V0KTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogcGFyc2VGbG9hdCAoYmFsYW5jZVsnZnJlZSddKSxcbiAgICAgICAgICAgICAgICAndXNlZCc6IHBhcnNlRmxvYXQgKGJhbGFuY2VbJ2xvY2tlZCddKSxcbiAgICAgICAgICAgICAgICAndG90YWwnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYWNjb3VudFsndG90YWwnXSA9IHRoaXMuc3VtIChhY2NvdW50WydmcmVlJ10sIGFjY291bnRbJ3VzZWQnXSk7XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgbSA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgdGhpcy5wdWJsaWNHZXREZXB0aCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiBtWydpZCddLFxuICAgICAgICAgICAgJ2xpbWl0JzogMTAwLCAvLyBkZWZhdWx0ID0gbWF4aW11bSA9IDEwMFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAob3JkZXJbMF0pO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBwYXJzZUZsb2F0IChvcmRlclsxXSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3NpZGVdLnB1c2ggKFsgcHJpY2UsIGFtb3VudCBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBwYXJzZVRpY2tlciAodGlja2VyLCBtYXJrZXQpIHtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRpY2tlclsnY2xvc2VUaW1lJ107XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2hpZ2hQcmljZSddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvd1ByaWNlJ10pLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYmlkUHJpY2UnXSksXG4gICAgICAgICAgICAnYXNrJzogcGFyc2VGbG9hdCAodGlja2VyWydhc2tQcmljZSddKSxcbiAgICAgICAgICAgICd2d2FwJzogcGFyc2VGbG9hdCAodGlja2VyWyd3ZWlnaHRlZEF2Z1ByaWNlJ10pLFxuICAgICAgICAgICAgJ29wZW4nOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ29wZW5QcmljZSddKSxcbiAgICAgICAgICAgICdjbG9zZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsncHJldkNsb3NlUHJpY2UnXSksXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdFByaWNlJ10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsncHJpY2VDaGFuZ2VQZXJjZW50J10pLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWyd2b2x1bWUnXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBsZXQgbSA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFRpY2tlcjI0aHIgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiBtWydpZCddLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VUaWNrZXIgKHJlc3BvbnNlLCBtKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPSExDViAobWFya2V0LCB0aW1lZnJhbWUgPSA2MCwgc2luY2UgPSB1bmRlZmluZWQsIGxpbWl0ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIEtsaW5lL2NhbmRsZXN0aWNrIGJhcnMgZm9yIGEgc3ltYm9sLiBLbGluZXMgYXJlIHVuaXF1ZWx5IGlkZW50aWZpZWQgYnkgdGhlaXIgb3BlbiB0aW1lLlxuICAgICAgICAvLyBQYXJhbWV0ZXJzOlxuICAgICAgICAvLyBOYW1lICAgIFR5cGUgICAgTWFuZGF0b3J5ICAgRGVzY3JpcHRpb25cbiAgICAgICAgLy8gc3ltYm9sICBTVFJJTkcgIFlFU1xuICAgICAgICAvLyBpbnRlcnZhbCAgICBFTlVNICAgIFlFU1xuICAgICAgICAvLyBsaW1pdCAgIElOVCBOTyAgRGVmYXVsdCA1MDA7IG1heCA1MDAuXG4gICAgICAgIC8vIHN0YXJ0VGltZSAgIExPTkcgICAgTk9cbiAgICAgICAgLy8gZW5kVGltZSBMT05HICAgIE5PXG4gICAgICAgIC8vIElmIHN0YXJ0VGltZSBhbmQgZW5kVGltZSBhcmUgbm90IHNlbnQsIHRoZSBtb3N0IHJlY2VudCBrbGluZXMgYXJlIHJldHVybmVkLlxuICAgICAgICAvLyBSZXNwb25zZTpcbiAgICAgICAgLy8gW1xuICAgICAgICAvLyAgIFtcbiAgICAgICAgLy8gICAgIDE0OTkwNDAwMDAwMDAsICAgICAgLy8gT3BlbiB0aW1lXG4gICAgICAgIC8vICAgICBcIjAuMDE2MzQ3OTBcIiwgICAgICAgLy8gT3BlblxuICAgICAgICAvLyAgICAgXCIwLjgwMDAwMDAwXCIsICAgICAgIC8vIEhpZ2hcbiAgICAgICAgLy8gICAgIFwiMC4wMTU3NTgwMFwiLCAgICAgICAvLyBMb3dcbiAgICAgICAgLy8gICAgIFwiMC4wMTU3NzEwMFwiLCAgICAgICAvLyBDbG9zZVxuICAgICAgICAvLyAgICAgXCIxNDg5NzYuMTE0Mjc4MTVcIiwgIC8vIFZvbHVtZVxuICAgICAgICAvLyAgICAgMTQ5OTY0NDc5OTk5OSwgICAgICAvLyBDbG9zZSB0aW1lXG4gICAgICAgIC8vICAgICBcIjI0MzQuMTkwNTUzMzRcIiwgICAgLy8gUXVvdGUgYXNzZXQgdm9sdW1lXG4gICAgICAgIC8vICAgICAzMDgsICAgICAgICAgICAgICAgIC8vIE51bWJlciBvZiB0cmFkZXNcbiAgICAgICAgLy8gICAgIFwiMTc1Ni44NzQwMjM5N1wiLCAgICAvLyBUYWtlciBidXkgYmFzZSBhc3NldCB2b2x1bWVcbiAgICAgICAgLy8gICAgIFwiMjguNDY2OTQzNjhcIiwgICAgICAvLyBUYWtlciBidXkgcXVvdGUgYXNzZXQgdm9sdW1lXG4gICAgICAgIC8vICAgICBcIjE3OTI4ODk5LjYyNDg0MzM5XCIgLy8gQ2FuIGJlIGlnbm9yZWRcbiAgICAgICAgLy8gICBdXG4gICAgICAgIC8vIF1cbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkICh0aGlzLmlkICsgJyBmZXRjaE9ITENWIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQnKTtcbiAgICB9LFxuXG4gICAgcGFyc2VUcmFkZSAodHJhZGUsIG1hcmtldCA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdGltZXN0YW1wRmllbGQgPSAoJ1QnIGluIHRyYWRlKSA/ICdUJyA6ICd0aW1lJztcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRyYWRlW3RpbWVzdGFtcEZpZWxkXTtcbiAgICAgICAgbGV0IHByaWNlRmllbGQgPSAoJ3AnIGluIHRyYWRlKSA/ICdwJyA6ICdwcmljZSc7XG4gICAgICAgIGxldCBwcmljZSA9IHBhcnNlRmxvYXQgKHRyYWRlW3ByaWNlRmllbGRdKTtcbiAgICAgICAgbGV0IGFtb3VudEZpZWxkID0gKCdxJyBpbiB0cmFkZSkgPyAncScgOiAncXR5JztcbiAgICAgICAgbGV0IGFtb3VudCA9IHBhcnNlRmxvYXQgKHRyYWRlW2Ftb3VudEZpZWxkXSk7XG4gICAgICAgIGxldCBpZEZpZWxkID0gKCdhJyBpbiB0cmFkZSkgPyAnYScgOiAnaWQnO1xuICAgICAgICBsZXQgaWQgPSB0cmFkZVtpZEZpZWxkXS50b1N0cmluZyAoKTtcbiAgICAgICAgbGV0IHNpZGUgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmICgnbScgaW4gdHJhZGUpIHtcbiAgICAgICAgICAgIHNpZGUgPSAnc2VsbCc7XG4gICAgICAgICAgICBpZiAodHJhZGVbJ20nXSlcbiAgICAgICAgICAgICAgICBzaWRlID0gJ2J1eSc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgaXNCdXllciA9IHRyYWRlWydpc0J1eWVyJ107XG4gICAgICAgICAgICBsZXQgaXNNYWtlciA9IHRyYWRlWydpc01ha2VyJ107XG4gICAgICAgICAgICBpZiAoaXNCdXllcikge1xuICAgICAgICAgICAgICAgIHNpZGUgPSBpc01ha2VyID8gJ3NlbGwnIDogJ2J1eSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNpZGUgPSBpc01ha2VyID8gJ2J1eScgOiAnc2VsbCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogdHJhZGUsXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ3N5bWJvbCc6IG1hcmtldFsnc3ltYm9sJ10sXG4gICAgICAgICAgICAnaWQnOiBpZCxcbiAgICAgICAgICAgICd0eXBlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3NpZGUnOiBzaWRlLFxuICAgICAgICAgICAgJ3ByaWNlJzogcHJpY2UsXG4gICAgICAgICAgICAnYW1vdW50JzogYW1vdW50LFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgbSA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldEFnZ1RyYWRlcyAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiBtWydpZCddLFxuICAgICAgICAgICAgLy8gJ2Zyb21JZCc6IDEyMywgICAgLy8gSUQgdG8gZ2V0IGFnZ3JlZ2F0ZSB0cmFkZXMgZnJvbSBJTkNMVVNJVkUuXG4gICAgICAgICAgICAvLyAnc3RhcnRUaW1lJzogNDU2LCAvLyBUaW1lc3RhbXAgaW4gbXMgdG8gZ2V0IGFnZ3JlZ2F0ZSB0cmFkZXMgZnJvbSBJTkNMVVNJVkUuXG4gICAgICAgICAgICAvLyAnZW5kVGltZSc6IDc4OSwgICAvLyBUaW1lc3RhbXAgaW4gbXMgdG8gZ2V0IGFnZ3JlZ2F0ZSB0cmFkZXMgdW50aWwgSU5DTFVTSVZFLlxuICAgICAgICAgICAgJ2xpbWl0JzogNTAwLCAgICAgICAgLy8gZGVmYXVsdCA9IG1heGltdW0gPSA1MDBcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlVHJhZGVzIChyZXNwb25zZSwgbSk7XG4gICAgfSxcblxuICAgIHBhcnNlT3JkZXIgKG9yZGVyKSB7XG4gICAgICAgIC8vIHtcbiAgICAgICAgLy8gICBcInN5bWJvbFwiOiBcIkxUQ0JUQ1wiLFxuICAgICAgICAvLyAgIFwib3JkZXJJZFwiOiAxLFxuICAgICAgICAvLyAgIFwiY2xpZW50T3JkZXJJZFwiOiBcIm15T3JkZXIxXCIsXG4gICAgICAgIC8vICAgXCJwcmljZVwiOiBcIjAuMVwiLFxuICAgICAgICAvLyAgIFwib3JpZ1F0eVwiOiBcIjEuMFwiLFxuICAgICAgICAvLyAgIFwiZXhlY3V0ZWRRdHlcIjogXCIwLjBcIixcbiAgICAgICAgLy8gICBcInN0YXR1c1wiOiBcIk5FV1wiLFxuICAgICAgICAvLyAgIFwidGltZUluRm9yY2VcIjogXCJHVENcIixcbiAgICAgICAgLy8gICBcInR5cGVcIjogXCJMSU1JVFwiLFxuICAgICAgICAvLyAgIFwic2lkZVwiOiBcIkJVWVwiLFxuICAgICAgICAvLyAgIFwic3RvcFByaWNlXCI6IFwiMC4wXCIsXG4gICAgICAgIC8vICAgXCJpY2ViZXJnUXR5XCI6IFwiMC4wXCIsXG4gICAgICAgIC8vICAgXCJ0aW1lXCI6IDE0OTk4MjczMTk1NTlcbiAgICAgICAgLy8gfVxuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWQgKHRoaXMuaWQgKyAnIHBhcnNlT3JkZXIgaXMgbm90IGltcGxlbWVudGVkIHlldCcpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAnc3ltYm9sJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICdxdWFudGl0eSc6ICclZicuc3ByaW50ZiAoYW1vdW50KSxcbiAgICAgICAgICAgICdwcmljZSc6ICclZicuc3ByaW50ZiAocHJpY2UpLFxuICAgICAgICAgICAgJ3R5cGUnOiB0eXBlLnRvVXBwZXJDYXNlICgpLFxuICAgICAgICAgICAgJ3NpZGUnOiBzaWRlLnRvVXBwZXJDYXNlICgpLFxuICAgICAgICAgICAgJ3RpbWVJbkZvcmNlJzogJ0dUQycsIC8vIEdvb2QgVG8gQ2FuY2VsXG4gICAgICAgICAgICAvLyAndGltZUluRm9yY2UnOiAnSU9DJywgLy8gSW1tZWRpYXRlIE9yIENhbmNlbFxuICAgICAgICB9O1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0T3JkZXIgKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ2lkJzogcmVzcG9uc2VbJ29yZGVySWQnXS50b1N0cmluZyAoKSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlciAoaWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBzeW1ib2wgPSAoJ3N5bWJvbCcgaW4gcGFyYW1zKTtcbiAgICAgICAgaWYgKCFzeW1ib2wpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgZmV0Y2hPcmRlciByZXF1aXJlcyBhIHN5bWJvbCBwYXJhbScpO1xuICAgICAgICBsZXQgbSA9IHRoaXMubWFya2V0IChzeW1ib2wpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVHZXRPcmRlciAodGhpcy5leHRlbmQgKHBhcmFtcywge1xuICAgICAgICAgICAgJ3N5bWJvbCc6IG1bJ2lkJ10sXG4gICAgICAgICAgICAnb3JkZXJJZCc6IGlkLnRvU3RyaW5nICgpLFxuICAgICAgICB9KSk7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlT3JkZXIgKHJlc3BvbnNlKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlcnMgKCkge1xuICAgICAgICAvLyBzeW1ib2wgIFNUUklORyAgWUVTXG4gICAgICAgIC8vIG9yZGVySWQgTE9ORyAgICBOT1xuICAgICAgICAvLyBsaW1pdCAgIElOVCBOTyAgRGVmYXVsdCA1MDA7IG1heCA1MDAuXG4gICAgICAgIC8vIHJlY3ZXaW5kb3cgIExPTkcgICAgTk9cbiAgICAgICAgLy8gdGltZXN0YW1wICAgTE9ORyAgICBZRVNcbiAgICAgICAgLy8gSWYgb3JkZXJJZCBpcyBzZXQsIGl0IHdpbGwgZ2V0IG9yZGVycyA+PSB0aGF0IG9yZGVySWQuIE90aGVyd2lzZSBtb3N0IHJlY2VudCBvcmRlcnMgYXJlIHJldHVybmVkLlxuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWQgKHRoaXMuaWQgKyAnIGZldGNoT3JkZXJzIG5vdCBpbXBsZW1lbnRlZCB5ZXQnKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hNeU9wZW5PcmRlcnMgKG1hcmtldCA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgaWYgKCFtYXJrZXQpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgZmV0Y2hNeU9wZW5PcmRlcnMgcmVxdWlyZXMgYSBzeW1ib2wnKTtcbiAgICAgICAgbGV0IG0gPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlR2V0T3Blbk9yZGVycyAoe1xuICAgICAgICAgICAgJ3N5bWJvbCc6IG1bJ2lkJ10sXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZU9yZGVycyAocmVzcG9uc2UsIG0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0T3JkZXJDYW5jZWwgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnb3JkZXJJZCc6IHBhcnNlSW50IChpZCksXG4gICAgICAgICAgICAvLyAnb3JpZ0NsaWVudE9yZGVySWQnOiBpZCxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIG5vbmNlICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgJy8nICsgdGhpcy52ZXJzaW9uICsgJy8nICsgcGF0aDtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChwYXJhbXMpLmxlbmd0aClcbiAgICAgICAgICAgICAgICB1cmwgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHBhcmFtcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpO1xuICAgICAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy51cmxlbmNvZGUgKHRoaXMuZXh0ZW5kICh7ICd0aW1lc3RhbXAnOiBub25jZSB9LCBwYXJhbXMpKTtcbiAgICAgICAgICAgIGxldCBhdXRoID0gdGhpcy5zZWNyZXQgKyAnfCcgKyBxdWVyeTtcbiAgICAgICAgICAgIGxldCBzaWduYXR1cmUgPSB0aGlzLmhhc2ggKHRoaXMuZW5jb2RlIChhdXRoKSwgJ3NoYTI1NicpO1xuICAgICAgICAgICAgcXVlcnkgKz0gJyYnICsgJ3NpZ25hdHVyZT0nICsgc2lnbmF0dXJlO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnWC1NQlgtQVBJS0VZJzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKG1ldGhvZCA9PSAnR0VUJykge1xuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyBxdWVyeTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYm9keSA9IHF1ZXJ5O1xuICAgICAgICAgICAgICAgIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgICAgICBpZiAoJ2NvZGUnIGluIHJlc3BvbnNlKSB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2VbJ2NvZGUnXSA8IDApXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGJpdDJjID0ge1xuXG4gICAgJ2lkJzogJ2JpdDJjJyxcbiAgICAnbmFtZSc6ICdCaXQyQycsXG4gICAgJ2NvdW50cmllcyc6ICdJTCcsIC8vIElzcmFlbFxuICAgICdyYXRlTGltaXQnOiAzMDAwLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2MTE5LTM1OTMyMjBlLTVlY2UtMTFlNy04YjNhLTVhMDQxZjZiY2MzZi5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vd3d3LmJpdDJjLmNvLmlsJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy5iaXQyYy5jby5pbCcsXG4gICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAnaHR0cHM6Ly93d3cuYml0MmMuY28uaWwvaG9tZS9hcGknLFxuICAgICAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS9PZmVyRS9iaXQyYycsXG4gICAgICAgIF0sXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnRXhjaGFuZ2VzL3twYWlyfS9UaWNrZXInLFxuICAgICAgICAgICAgICAgICdFeGNoYW5nZXMve3BhaXJ9L29yZGVyYm9vaycsXG4gICAgICAgICAgICAgICAgJ0V4Y2hhbmdlcy97cGFpcn0vdHJhZGVzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvQmFsYW5jZScsXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvQmFsYW5jZS92MicsXG4gICAgICAgICAgICAgICAgJ01lcmNoYW50L0NyZWF0ZUNoZWNrb3V0JyxcbiAgICAgICAgICAgICAgICAnT3JkZXIvQWNjb3VudEhpc3RvcnknLFxuICAgICAgICAgICAgICAgICdPcmRlci9BZGRDb2luRnVuZHNSZXF1ZXN0JyxcbiAgICAgICAgICAgICAgICAnT3JkZXIvQWRkRnVuZCcsXG4gICAgICAgICAgICAgICAgJ09yZGVyL0FkZE9yZGVyJyxcbiAgICAgICAgICAgICAgICAnT3JkZXIvQWRkT3JkZXJNYXJrZXRQcmljZUJ1eScsXG4gICAgICAgICAgICAgICAgJ09yZGVyL0FkZE9yZGVyTWFya2V0UHJpY2VTZWxsJyxcbiAgICAgICAgICAgICAgICAnT3JkZXIvQ2FuY2VsT3JkZXInLFxuICAgICAgICAgICAgICAgICdPcmRlci9NeU9yZGVycycsXG4gICAgICAgICAgICAgICAgJ1BheW1lbnQvR2V0TXlJZCcsXG4gICAgICAgICAgICAgICAgJ1BheW1lbnQvU2VuZCcsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgJ21hcmtldHMnOiB7XG4gICAgICAgICdCVEMvTklTJzogeyAnaWQnOiAnQnRjTmlzJywgJ3N5bWJvbCc6ICdCVEMvTklTJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ05JUycgfSxcbiAgICAgICAgJ0xUQy9CVEMnOiB7ICdpZCc6ICdMdGNCdGMnLCAnc3ltYm9sJzogJ0xUQy9CVEMnLCAnYmFzZSc6ICdMVEMnLCAncXVvdGUnOiAnQlRDJyB9LFxuICAgICAgICAnTFRDL05JUyc6IHsgJ2lkJzogJ0x0Y05pcycsICdzeW1ib2wnOiAnTFRDL05JUycsICdiYXNlJzogJ0xUQycsICdxdW90ZSc6ICdOSVMnIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGxldCBiYWxhbmNlID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdEFjY291bnRCYWxhbmNlVjIgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogYmFsYW5jZSB9O1xuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IHRoaXMuY3VycmVuY2llcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gdGhpcy5jdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChjdXJyZW5jeSBpbiBiYWxhbmNlKSB7XG4gICAgICAgICAgICAgICAgbGV0IGF2YWlsYWJsZSA9ICdBVkFJTEFCTEVfJyArIGN1cnJlbmN5O1xuICAgICAgICAgICAgICAgIGFjY291bnRbJ2ZyZWUnXSA9IGJhbGFuY2VbYXZhaWxhYmxlXTtcbiAgICAgICAgICAgICAgICBhY2NvdW50Wyd0b3RhbCddID0gYmFsYW5jZVtjdXJyZW5jeV07XG4gICAgICAgICAgICAgICAgYWNjb3VudFsndXNlZCddID0gYWNjb3VudFsndG90YWwnXSAtIGFjY291bnRbJ2ZyZWUnXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdFtjdXJyZW5jeV0gPSBhY2NvdW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSBhd2FpdCB0aGlzLnB1YmxpY0dldEV4Y2hhbmdlc1BhaXJPcmRlcmJvb2sgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAncGFpcic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IFtdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaWRlcyA9IFsgJ2JpZHMnLCAnYXNrcycgXTtcbiAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBzaWRlcy5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1tzXTtcbiAgICAgICAgICAgIGxldCBvcmRlcnMgPSBvcmRlcmJvb2tbc2lkZV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBvcmRlciA9IG9yZGVyc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgcHJpY2UgPSBvcmRlclswXTtcbiAgICAgICAgICAgICAgICBsZXQgYW1vdW50ID0gb3JkZXJbMV07XG4gICAgICAgICAgICAgICAgbGV0IHRpbWVzdGFtcCA9IG9yZGVyWzJdICogMTAwMDtcbiAgICAgICAgICAgICAgICByZXN1bHRbc2lkZV0ucHVzaCAoWyBwcmljZSwgYW1vdW50LCB0aW1lc3RhbXAgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBsZXQgdGlja2VyID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRFeGNoYW5nZXNQYWlyVGlja2VyICh7XG4gICAgICAgICAgICAncGFpcic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2gnXSksXG4gICAgICAgICAgICAnbG93JzogcGFyc2VGbG9hdCAodGlja2VyWydsJ10pLFxuICAgICAgICAgICAgJ2JpZCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhc2snOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xsJ10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2F2J10pLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2EnXSksXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldEV4Y2hhbmdlc1BhaXJUcmFkZXMgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAncGFpcic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgbWV0aG9kID0gJ3ByaXZhdGVQb3N0T3JkZXJBZGRPcmRlcic7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdBbW91bnQnOiBhbW91bnQsXG4gICAgICAgICAgICAnUGFpcic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlID09ICdtYXJrZXQnKSB7XG4gICAgICAgICAgICBtZXRob2QgKz0gJ01hcmtldFByaWNlJyArIHRoaXMuY2FwaXRhbGl6ZSAoc2lkZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvcmRlclsnUHJpY2UnXSA9IHByaWNlO1xuICAgICAgICAgICAgb3JkZXJbJ1RvdGFsJ10gPSBhbW91bnQgKiBwcmljZTtcbiAgICAgICAgICAgIG9yZGVyWydJc0JpZCddID0gKHNpZGUgPT0gJ2J1eScpO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCB0aGlzW21ldGhvZF0gKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3VsdCxcbiAgICAgICAgICAgICdpZCc6IHJlc3VsdFsnTmV3T3JkZXInXVsnaWQnXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0T3JkZXJDYW5jZWxPcmRlciAoeyAnaWQnOiBpZCB9KTtcbiAgICB9LFxuXG4gICAgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArICcvJyArIHRoaXMuaW1wbG9kZVBhcmFtcyAocGF0aCwgcGFyYW1zKTtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgdXJsICs9ICcuanNvbic7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpO1xuICAgICAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5leHRlbmQgKHsgJ25vbmNlJzogbm9uY2UgfSwgcGFyYW1zKTtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtTGVuZ3RoJzogYm9keS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgJ2tleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgICAgICdzaWduJzogdGhpcy5obWFjICh0aGlzLmVuY29kZSAoYm9keSksIHRoaXMuZW5jb2RlICh0aGlzLnNlY3JldCksICdzaGE1MTInLCAnYmFzZTY0JyksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgYml0YmF5ID0ge1xuXG4gICAgJ2lkJzogJ2JpdGJheScsXG4gICAgJ25hbWUnOiAnQml0QmF5JyxcbiAgICAnY291bnRyaWVzJzogWyAnUEwnLCAnRVUnIF0sIC8vIFBvbGFuZFxuICAgICdyYXRlTGltaXQnOiAxMDAwLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2MTMyLTk3OGE3YmQ4LTVlY2UtMTFlNy05NTQwLWJjOTZkMWU5YmJiOC5qcGcnLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vYml0YmF5Lm5ldCcsXG4gICAgICAgICdhcGknOiB7XG4gICAgICAgICAgICAncHVibGljJzogJ2h0dHBzOi8vYml0YmF5Lm5ldC9BUEkvUHVibGljJyxcbiAgICAgICAgICAgICdwcml2YXRlJzogJ2h0dHBzOi8vYml0YmF5Lm5ldC9BUEkvVHJhZGluZy90cmFkaW5nQXBpLnBocCcsXG4gICAgICAgIH0sXG4gICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAnaHR0cHM6Ly9iaXRiYXkubmV0L3B1YmxpYy1hcGknLFxuICAgICAgICAgICAgJ2h0dHBzOi8vYml0YmF5Lm5ldC9hY2NvdW50L3RhYi1hcGknLFxuICAgICAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS9CaXRCYXlOZXQvQVBJJyxcbiAgICAgICAgXSxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICd7aWR9L2FsbCcsXG4gICAgICAgICAgICAgICAgJ3tpZH0vbWFya2V0JyxcbiAgICAgICAgICAgICAgICAne2lkfS9vcmRlcmJvb2snLFxuICAgICAgICAgICAgICAgICd7aWR9L3RpY2tlcicsXG4gICAgICAgICAgICAgICAgJ3tpZH0vdHJhZGVzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2luZm8nLFxuICAgICAgICAgICAgICAgICd0cmFkZScsXG4gICAgICAgICAgICAgICAgJ2NhbmNlbCcsXG4gICAgICAgICAgICAgICAgJ29yZGVyYm9vaycsXG4gICAgICAgICAgICAgICAgJ29yZGVycycsXG4gICAgICAgICAgICAgICAgJ3RyYW5zZmVyJyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXcnLFxuICAgICAgICAgICAgICAgICdoaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAndHJhbnNhY3Rpb25zJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9VU0QnOiB7ICdpZCc6ICdCVENVU0QnLCAnc3ltYm9sJzogJ0JUQy9VU0QnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnVVNEJyB9LFxuICAgICAgICAnQlRDL0VVUic6IHsgJ2lkJzogJ0JUQ0VVUicsICdzeW1ib2wnOiAnQlRDL0VVUicsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdFVVInIH0sXG4gICAgICAgICdCVEMvUExOJzogeyAnaWQnOiAnQlRDUExOJywgJ3N5bWJvbCc6ICdCVEMvUExOJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ1BMTicgfSxcbiAgICAgICAgJ0xUQy9VU0QnOiB7ICdpZCc6ICdMVENVU0QnLCAnc3ltYm9sJzogJ0xUQy9VU0QnLCAnYmFzZSc6ICdMVEMnLCAncXVvdGUnOiAnVVNEJyB9LFxuICAgICAgICAnTFRDL0VVUic6IHsgJ2lkJzogJ0xUQ0VVUicsICdzeW1ib2wnOiAnTFRDL0VVUicsICdiYXNlJzogJ0xUQycsICdxdW90ZSc6ICdFVVInIH0sXG4gICAgICAgICdMVEMvUExOJzogeyAnaWQnOiAnTFRDUExOJywgJ3N5bWJvbCc6ICdMVEMvUExOJywgJ2Jhc2UnOiAnTFRDJywgJ3F1b3RlJzogJ1BMTicgfSxcbiAgICAgICAgJ0xUQy9CVEMnOiB7ICdpZCc6ICdMVENCVEMnLCAnc3ltYm9sJzogJ0xUQy9CVEMnLCAnYmFzZSc6ICdMVEMnLCAncXVvdGUnOiAnQlRDJyB9LFxuICAgICAgICAnRVRIL1VTRCc6IHsgJ2lkJzogJ0VUSFVTRCcsICdzeW1ib2wnOiAnRVRIL1VTRCcsICdiYXNlJzogJ0VUSCcsICdxdW90ZSc6ICdVU0QnIH0sXG4gICAgICAgICdFVEgvRVVSJzogeyAnaWQnOiAnRVRIRVVSJywgJ3N5bWJvbCc6ICdFVEgvRVVSJywgJ2Jhc2UnOiAnRVRIJywgJ3F1b3RlJzogJ0VVUicgfSxcbiAgICAgICAgJ0VUSC9QTE4nOiB7ICdpZCc6ICdFVEhQTE4nLCAnc3ltYm9sJzogJ0VUSC9QTE4nLCAnYmFzZSc6ICdFVEgnLCAncXVvdGUnOiAnUExOJyB9LFxuICAgICAgICAnRVRIL0JUQyc6IHsgJ2lkJzogJ0VUSEJUQycsICdzeW1ib2wnOiAnRVRIL0JUQycsICdiYXNlJzogJ0VUSCcsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdMU0svVVNEJzogeyAnaWQnOiAnTFNLVVNEJywgJ3N5bWJvbCc6ICdMU0svVVNEJywgJ2Jhc2UnOiAnTFNLJywgJ3F1b3RlJzogJ1VTRCcgfSxcbiAgICAgICAgJ0xTSy9FVVInOiB7ICdpZCc6ICdMU0tFVVInLCAnc3ltYm9sJzogJ0xTSy9FVVInLCAnYmFzZSc6ICdMU0snLCAncXVvdGUnOiAnRVVSJyB9LFxuICAgICAgICAnTFNLL1BMTic6IHsgJ2lkJzogJ0xTS1BMTicsICdzeW1ib2wnOiAnTFNLL1BMTicsICdiYXNlJzogJ0xTSycsICdxdW90ZSc6ICdQTE4nIH0sXG4gICAgICAgICdMU0svQlRDJzogeyAnaWQnOiAnTFNLQlRDJywgJ3N5bWJvbCc6ICdMU0svQlRDJywgJ2Jhc2UnOiAnTFNLJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdEluZm8gKCk7XG4gICAgICAgIGxldCBiYWxhbmNlID0gcmVzcG9uc2VbJ2JhbGFuY2VzJ107XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogYmFsYW5jZSB9O1xuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IHRoaXMuY3VycmVuY2llcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gdGhpcy5jdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChjdXJyZW5jeSBpbiBiYWxhbmNlKSB7XG4gICAgICAgICAgICAgICAgYWNjb3VudFsnZnJlZSddID0gcGFyc2VGbG9hdCAoYmFsYW5jZVtjdXJyZW5jeV1bJ2F2YWlsYWJsZSddKTtcbiAgICAgICAgICAgICAgICBhY2NvdW50Wyd1c2VkJ10gPSBwYXJzZUZsb2F0IChiYWxhbmNlW2N1cnJlbmN5XVsnbG9ja2VkJ10pO1xuICAgICAgICAgICAgICAgIGFjY291bnRbJ3RvdGFsJ10gPSB0aGlzLnN1bSAoYWNjb3VudFsnZnJlZSddLCBhY2NvdW50Wyd1c2VkJ10pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IGF3YWl0IHRoaXMucHVibGljR2V0SWRPcmRlcmJvb2sgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnaWQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBvcmRlcmJvb2tbJ2JpZHMnXSxcbiAgICAgICAgICAgICdhc2tzJzogb3JkZXJib29rWydhc2tzJ10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGxldCB0aWNrZXIgPSBhd2FpdCB0aGlzLnB1YmxpY0dldElkVGlja2VyICh7XG4gICAgICAgICAgICAnaWQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydtYXgnXSksXG4gICAgICAgICAgICAnbG93JzogcGFyc2VGbG9hdCAodGlja2VyWydtaW4nXSksXG4gICAgICAgICAgICAnYmlkJzogcGFyc2VGbG9hdCAodGlja2VyWydiaWQnXSksXG4gICAgICAgICAgICAnYXNrJzogcGFyc2VGbG9hdCAodGlja2VyWydhc2snXSksXG4gICAgICAgICAgICAndndhcCc6IHBhcnNlRmxvYXQgKHRpY2tlclsndndhcCddKSxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xhc3QnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYXZlcmFnZSddKSxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWyd2b2x1bWUnXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0SWRUcmFkZXMgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnaWQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcblxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdFRyYWRlICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ3R5cGUnOiBzaWRlLFxuICAgICAgICAgICAgJ2N1cnJlbmN5JzogcFsnYmFzZSddLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IGFtb3VudCxcbiAgICAgICAgICAgICdwYXltZW50X2N1cnJlbmN5JzogcFsncXVvdGUnXSxcbiAgICAgICAgICAgICdyYXRlJzogcHJpY2UsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJpdmF0ZVBvc3RDYW5jZWwgKHsgJ2lkJzogaWQgfSk7XG4gICAgfSxcblxuICAgIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ11bYXBpXTtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgdXJsICs9ICcvJyArIHRoaXMuaW1wbG9kZVBhcmFtcyAocGF0aCwgcGFyYW1zKSArICcuanNvbic7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBib2R5ID0gdGhpcy51cmxlbmNvZGUgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAgICAgJ21ldGhvZCc6IHBhdGgsXG4gICAgICAgICAgICAgICAgJ21vbWVudCc6IHRoaXMubm9uY2UgKCksXG4gICAgICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgICAgICAgICdDb250ZW50LUxlbmd0aCc6IGJvZHkubGVuZ3RoLFxuICAgICAgICAgICAgICAgICdBUEktS2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ0FQSS1IYXNoJzogdGhpcy5obWFjICh0aGlzLmVuY29kZSAoYm9keSksIHRoaXMuZW5jb2RlICh0aGlzLnNlY3JldCksICdzaGE1MTInKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBiaXRiYXlzID0ge1xuXG4gICAgJ2lkJzogJ2JpdGJheXMnLFxuICAgICduYW1lJzogJ0JpdEJheXMnLFxuICAgICdjb3VudHJpZXMnOiBbICdDTicsICdHQicsICdISycsICdBVScsICdDQScgXSxcbiAgICAncmF0ZUxpbWl0JzogMTUwMCxcbiAgICAndmVyc2lvbic6ICd2MScsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc4MDg1OTktOTgzNjg3ZDItNjA1MS0xMWU3LThkOTUtODBkZmNiZTVjYmI0LmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly9iaXRiYXlzLmNvbS9hcGknLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vYml0YmF5cy5jb20nLFxuICAgICAgICAnZG9jJzogJ2h0dHBzOi8vYml0YmF5cy5jb20vaGVscC9hcGkvJyxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICd0aWNrZXInLFxuICAgICAgICAgICAgICAgICd0cmFkZXMnLFxuICAgICAgICAgICAgICAgICdkZXB0aCcsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAncHJpdmF0ZSc6IHtcbiAgICAgICAgICAgICdwb3N0JzogW1xuICAgICAgICAgICAgICAgICdjYW5jZWwnLFxuICAgICAgICAgICAgICAgICdpbmZvJyxcbiAgICAgICAgICAgICAgICAnb3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnb3JkZXInLFxuICAgICAgICAgICAgICAgICd0cmFuc2FjdGlvbnMnLFxuICAgICAgICAgICAgICAgICd0cmFkZScsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgJ21hcmtldHMnOiB7XG4gICAgICAgICdCVEMvVVNEJzogeyAnaWQnOiAnYnRjX3VzZCcsICdzeW1ib2wnOiAnQlRDL1VTRCcsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdVU0QnIH0sXG4gICAgICAgICdCVEMvQ05ZJzogeyAnaWQnOiAnYnRjX2NueScsICdzeW1ib2wnOiAnQlRDL0NOWScsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdDTlknIH0sXG4gICAgICAgICdPRFMvQlRDJzogeyAnaWQnOiAnb2RzX2J0YycsICdzeW1ib2wnOiAnT0RTL0JUQycsICdiYXNlJzogJ09EUycsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdMU0svQlRDJzogeyAnaWQnOiAnbHNrX2J0YycsICdzeW1ib2wnOiAnTFNLL0JUQycsICdiYXNlJzogJ0xTSycsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdMU0svQ05ZJzogeyAnaWQnOiAnbHNrX2NueScsICdzeW1ib2wnOiAnTFNLL0NOWScsICdiYXNlJzogJ0xTSycsICdxdW90ZSc6ICdDTlknIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RJbmZvICgpO1xuICAgICAgICBsZXQgYmFsYW5jZSA9IHJlc3BvbnNlWydyZXN1bHQnXVsnd2FsbGV0J107XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogYmFsYW5jZSB9O1xuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IHRoaXMuY3VycmVuY2llcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gdGhpcy5jdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IGxvd2VyY2FzZSA9IGN1cnJlbmN5LnRvTG93ZXJDYXNlICgpO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChsb3dlcmNhc2UgaW4gYmFsYW5jZSkge1xuICAgICAgICAgICAgICAgIGFjY291bnRbJ2ZyZWUnXSA9IHBhcnNlRmxvYXQgKGJhbGFuY2VbbG93ZXJjYXNlXVsnYXZhaWwnXSk7XG4gICAgICAgICAgICAgICAgYWNjb3VudFsndXNlZCddID0gcGFyc2VGbG9hdCAoYmFsYW5jZVtsb3dlcmNhc2VdWydsb2NrJ10pO1xuICAgICAgICAgICAgICAgIGFjY291bnRbJ3RvdGFsJ10gPSB0aGlzLnN1bSAoYWNjb3VudFsnZnJlZSddLCBhY2NvdW50Wyd1c2VkJ10pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXREZXB0aCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdtYXJrZXQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IHJlc3BvbnNlWydyZXN1bHQnXTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAob3JkZXJbMF0pO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBwYXJzZUZsb2F0IChvcmRlclsxXSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3NpZGVdLnB1c2ggKFsgcHJpY2UsIGFtb3VudCBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0VGlja2VyICh7XG4gICAgICAgICAgICAnbWFya2V0JzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aWNrZXIgPSByZXNwb25zZVsncmVzdWx0J107XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2J1eSddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3NlbGwnXSksXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xhc3QnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWyd2b2wnXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0VHJhZGVzICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ21hcmtldCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAnbWFya2V0JzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICdvcCc6IHNpZGUsXG4gICAgICAgICAgICAnYW1vdW50JzogYW1vdW50LFxuICAgICAgICB9O1xuICAgICAgICBpZiAodHlwZSA9PSAnbWFya2V0Jykge1xuICAgICAgICAgICAgb3JkZXJbJ29yZGVyX3R5cGUnXSA9IDE7XG4gICAgICAgICAgICBvcmRlclsncHJpY2UnXSA9IHByaWNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3JkZXJbJ29yZGVyX3R5cGUnXSA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdFRyYWRlICh0aGlzLmV4dGVuZCAob3JkZXIsIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXNwb25zZSxcbiAgICAgICAgICAgICdpZCc6IHJlc3BvbnNlWydyZXN1bHQnXVsnaWQnXS50b1N0cmluZyAoKSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0Q2FuY2VsICh7ICdpZCc6IGlkIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgJy8nICsgdGhpcy52ZXJzaW9uICsgJy8nICsgcGF0aDtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChwYXJhbXMpLmxlbmd0aClcbiAgICAgICAgICAgICAgICB1cmwgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHBhcmFtcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpO1xuICAgICAgICAgICAgYm9keSA9IHRoaXMudXJsZW5jb2RlICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgICAgICdub25jZSc6IG5vbmNlLFxuICAgICAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICAgICAgICAnQ29udGVudC1MZW5ndGgnOiBib2R5Lmxlbmd0aCxcbiAgICAgICAgICAgICAgICAnS2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ1NpZ24nOiB0aGlzLmhtYWMgKHRoaXMuZW5jb2RlIChib2R5KSwgdGhpcy5zZWNyZXQsICdzaGE1MTInKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgICAgICBpZiAoJ3N0YXR1cycgaW4gcmVzcG9uc2UpXG4gICAgICAgICAgICBpZiAocmVzcG9uc2VbJ3N0YXR1cyddID09IDIwMClcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGJpdGNvaW5jb2lkID0ge1xuXG4gICAgJ2lkJzogJ2JpdGNvaW5jb2lkJyxcbiAgICAnbmFtZSc6ICdCaXRjb2luLmNvLmlkJyxcbiAgICAnY291bnRyaWVzJzogJ0lEJywgLy8gSW5kb25lc2lhXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc3NjYxMzgtMDQzYzc3ODYtNWVjZi0xMWU3LTg4MmItODA5YzE0ZjM4YjUzLmpwZycsXG4gICAgICAgICdhcGknOiB7XG4gICAgICAgICAgICAncHVibGljJzogJ2h0dHBzOi8vdmlwLmJpdGNvaW4uY28uaWQvYXBpJyxcbiAgICAgICAgICAgICdwcml2YXRlJzogJ2h0dHBzOi8vdmlwLmJpdGNvaW4uY28uaWQvdGFwaScsXG4gICAgICAgIH0sXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly93d3cuYml0Y29pbi5jby5pZCcsXG4gICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAnaHR0cHM6Ly92aXAuYml0Y29pbi5jby5pZC9kb3dubG9hZHMvQklUQ09JTkNPSUQtQVBJLURPQ1VNRU5UQVRJT04ucGRmJyxcbiAgICAgICAgICAgICdodHRwczovL3ZpcC5iaXRjb2luLmNvLmlkL3RyYWRlX2FwaScsXG4gICAgICAgIF0sXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAne3BhaXJ9L3RpY2tlcicsXG4gICAgICAgICAgICAgICAgJ3twYWlyfS90cmFkZXMnLFxuICAgICAgICAgICAgICAgICd7cGFpcn0vZGVwdGgnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnZ2V0SW5mbycsXG4gICAgICAgICAgICAgICAgJ3RyYW5zSGlzdG9yeScsXG4gICAgICAgICAgICAgICAgJ3RyYWRlJyxcbiAgICAgICAgICAgICAgICAndHJhZGVIaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAnb3Blbk9yZGVycycsXG4gICAgICAgICAgICAgICAgJ2NhbmNlbE9yZGVyJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9JRFInOiAgeyAnaWQnOiAnYnRjX2lkcicsICdzeW1ib2wnOiAnQlRDL0lEUicsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdJRFInLCAnYmFzZUlkJzogJ2J0YycsICdxdW90ZUlkJzogJ2lkcicgfSxcbiAgICAgICAgJ0JUUy9CVEMnOiAgeyAnaWQnOiAnYnRzX2J0YycsICdzeW1ib2wnOiAnQlRTL0JUQycsICdiYXNlJzogJ0JUUycsICdxdW90ZSc6ICdCVEMnLCAnYmFzZUlkJzogJ2J0cycsICdxdW90ZUlkJzogJ2J0YycgfSxcbiAgICAgICAgJ0RBU0gvQlRDJzogeyAnaWQnOiAnZHJrX2J0YycsICdzeW1ib2wnOiAnREFTSC9CVEMnLCAnYmFzZSc6ICdEQVNIJywgJ3F1b3RlJzogJ0JUQycsICdiYXNlSWQnOiAnZHJrJywgJ3F1b3RlSWQnOiAnYnRjJyB9LFxuICAgICAgICAnRE9HRS9CVEMnOiB7ICdpZCc6ICdkb2dlX2J0YycsICdzeW1ib2wnOiAnRE9HRS9CVEMnLCAnYmFzZSc6ICdET0dFJywgJ3F1b3RlJzogJ0JUQycsICdiYXNlSWQnOiAnZG9nZScsICdxdW90ZUlkJzogJ2J0YycgfSxcbiAgICAgICAgJ0VUSC9CVEMnOiAgeyAnaWQnOiAnZXRoX2J0YycsICdzeW1ib2wnOiAnRVRIL0JUQycsICdiYXNlJzogJ0VUSCcsICdxdW90ZSc6ICdCVEMnLCAnYmFzZUlkJzogJ2V0aCcsICdxdW90ZUlkJzogJ2J0YycgfSxcbiAgICAgICAgJ0xUQy9CVEMnOiAgeyAnaWQnOiAnbHRjX2J0YycsICdzeW1ib2wnOiAnTFRDL0JUQycsICdiYXNlJzogJ0xUQycsICdxdW90ZSc6ICdCVEMnLCAnYmFzZUlkJzogJ2x0YycsICdxdW90ZUlkJzogJ2J0YycgfSxcbiAgICAgICAgJ05YVC9CVEMnOiAgeyAnaWQnOiAnbnh0X2J0YycsICdzeW1ib2wnOiAnTlhUL0JUQycsICdiYXNlJzogJ05YVCcsICdxdW90ZSc6ICdCVEMnLCAnYmFzZUlkJzogJ254dCcsICdxdW90ZUlkJzogJ2J0YycgfSxcbiAgICAgICAgJ1NUUi9CVEMnOiAgeyAnaWQnOiAnc3RyX2J0YycsICdzeW1ib2wnOiAnU1RSL0JUQycsICdiYXNlJzogJ1NUUicsICdxdW90ZSc6ICdCVEMnLCAnYmFzZUlkJzogJ3N0cicsICdxdW90ZUlkJzogJ2J0YycgfSxcbiAgICAgICAgJ05FTS9CVEMnOiAgeyAnaWQnOiAnbmVtX2J0YycsICdzeW1ib2wnOiAnTkVNL0JUQycsICdiYXNlJzogJ05FTScsICdxdW90ZSc6ICdCVEMnLCAnYmFzZUlkJzogJ25lbScsICdxdW90ZUlkJzogJ2J0YycgfSxcbiAgICAgICAgJ1hSUC9CVEMnOiAgeyAnaWQnOiAneHJwX2J0YycsICdzeW1ib2wnOiAnWFJQL0JUQycsICdiYXNlJzogJ1hSUCcsICdxdW90ZSc6ICdCVEMnLCAnYmFzZUlkJzogJ3hycCcsICdxdW90ZUlkJzogJ2J0YycgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdEdldEluZm8gKCk7XG4gICAgICAgIGxldCBiYWxhbmNlID0gcmVzcG9uc2VbJ3JldHVybiddWydiYWxhbmNlJ107XG4gICAgICAgIGxldCBmcm96ZW4gPSByZXNwb25zZVsncmV0dXJuJ11bJ2JhbGFuY2VfaG9sZCddO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGJhbGFuY2UgfTtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCB0aGlzLmN1cnJlbmNpZXMubGVuZ3RoOyBjKyspIHtcbiAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IHRoaXMuY3VycmVuY2llc1tjXTtcbiAgICAgICAgICAgIGxldCBsb3dlcmNhc2UgPSBjdXJyZW5jeS50b0xvd2VyQ2FzZSAoKTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd1c2VkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAobG93ZXJjYXNlIGluIGJhbGFuY2UpIHtcbiAgICAgICAgICAgICAgICBhY2NvdW50WydmcmVlJ10gPSBwYXJzZUZsb2F0IChiYWxhbmNlW2xvd2VyY2FzZV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGxvd2VyY2FzZSBpbiBmcm96ZW4pIHtcbiAgICAgICAgICAgICAgICBhY2NvdW50Wyd1c2VkJ10gPSBwYXJzZUZsb2F0IChmcm96ZW5bbG93ZXJjYXNlXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhY2NvdW50Wyd0b3RhbCddID0gdGhpcy5zdW0gKGFjY291bnRbJ2ZyZWUnXSwgYWNjb3VudFsndXNlZCddKTtcbiAgICAgICAgICAgIHJlc3VsdFtjdXJyZW5jeV0gPSBhY2NvdW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFBhaXJEZXB0aCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdwYWlyJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdiaWRzJzogW10sXG4gICAgICAgICAgICAnYXNrcyc6IFtdLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHNpZGVzID0geyAnYmlkcyc6ICdidXknLCAnYXNrcyc6ICdzZWxsJyB9O1xuICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzIChzaWRlcyk7XG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwga2V5cy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgbGV0IGtleSA9IGtleXNba107XG4gICAgICAgICAgICBsZXQgc2lkZSA9IHNpZGVzW2tleV07XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAob3JkZXJbMF0pO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBwYXJzZUZsb2F0IChvcmRlclsxXSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W2tleV0ucHVzaCAoWyBwcmljZSwgYW1vdW50IF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgbGV0IHBhaXIgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRQYWlyVGlja2VyICh7XG4gICAgICAgICAgICAncGFpcic6IHBhaXJbJ2lkJ10sXG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgdGlja2VyID0gcmVzcG9uc2VbJ3RpY2tlciddO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gcGFyc2VGbG9hdCAodGlja2VyWydzZXJ2ZXJfdGltZSddKSAqIDEwMDA7XG4gICAgICAgIGxldCBiYXNlVm9sdW1lID0gJ3ZvbF8nICsgcGFpclsnYmFzZUlkJ10udG9Mb3dlckNhc2UgKCk7XG4gICAgICAgIGxldCBxdW90ZVZvbHVtZSA9ICd2b2xfJyArIHBhaXJbJ3F1b3RlSWQnXS50b0xvd2VyQ2FzZSAoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2J1eSddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3NlbGwnXSksXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xhc3QnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyW2Jhc2VWb2x1bWVdKSxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlcltxdW90ZVZvbHVtZV0pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldFBhaXJUcmFkZXMgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAncGFpcic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAncGFpcic6IHBbJ2lkJ10sXG4gICAgICAgICAgICAndHlwZSc6IHNpZGUsXG4gICAgICAgICAgICAncHJpY2UnOiBwcmljZSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IGJhc2UgPSBwWydiYXNlJ10udG9Mb3dlckNhc2UgKCk7XG4gICAgICAgIG9yZGVyW2Jhc2VdID0gYW1vdW50O1xuICAgICAgICBsZXQgcmVzdWx0ID0gdGhpcy5wcml2YXRlUG9zdFRyYWRlICh0aGlzLmV4dGVuZCAob3JkZXIsIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXN1bHQsXG4gICAgICAgICAgICAnaWQnOiByZXN1bHRbJ3JldHVybiddWydvcmRlcl9pZCddLnRvU3RyaW5nICgpLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0Q2FuY2VsT3JkZXIgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnaWQnOiBpZCxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ11bYXBpXTtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgdXJsICs9ICcvJyArIHRoaXMuaW1wbG9kZVBhcmFtcyAocGF0aCwgcGFyYW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLnVybGVuY29kZSAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICAgICAnbWV0aG9kJzogcGF0aCxcbiAgICAgICAgICAgICAgICAnbm9uY2UnOiB0aGlzLm5vbmNlICgpLFxuICAgICAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICAgICAgICAnQ29udGVudC1MZW5ndGgnOiBib2R5Lmxlbmd0aCxcbiAgICAgICAgICAgICAgICAnS2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ1NpZ24nOiB0aGlzLmhtYWMgKHRoaXMuZW5jb2RlIChib2R5KSwgdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSwgJ3NoYTUxMicpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgICAgIGlmICgnZXJyb3InIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyByZXNwb25zZVsnZXJyb3InXSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBiaXRmaW5leCA9IHtcblxuICAgICdpZCc6ICdiaXRmaW5leCcsXG4gICAgJ25hbWUnOiAnQml0ZmluZXgnLFxuICAgICdjb3VudHJpZXMnOiAnVVMnLFxuICAgICd2ZXJzaW9uJzogJ3YxJyxcbiAgICAncmF0ZUxpbWl0JzogMTUwMCxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yNzc2NjI0NC1lMzI4YTUwYy01ZWQyLTExZTctOTQ3Yi0wNDE0MTY1NzliYjMuanBnJyxcbiAgICAgICAgJ2FwaSc6ICdodHRwczovL2FwaS5iaXRmaW5leC5jb20nLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vd3d3LmJpdGZpbmV4LmNvbScsXG4gICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAnaHR0cHM6Ly9iaXRmaW5leC5yZWFkbWUuaW8vdjEvZG9jcycsXG4gICAgICAgICAgICAnaHR0cHM6Ly9iaXRmaW5leC5yZWFkbWUuaW8vdjIvZG9jcycsXG4gICAgICAgICAgICAnaHR0cHM6Ly9naXRodWIuY29tL2JpdGZpbmV4Y29tL2JpdGZpbmV4LWFwaS1ub2RlJyxcbiAgICAgICAgXSxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdib29rL3tzeW1ib2x9JyxcbiAgICAgICAgICAgICAgICAnY2FuZGxlcy97c3ltYm9sfScsXG4gICAgICAgICAgICAgICAgJ2xlbmRib29rL3tjdXJyZW5jeX0nLFxuICAgICAgICAgICAgICAgICdsZW5kcy97Y3VycmVuY3l9JyxcbiAgICAgICAgICAgICAgICAncHVidGlja2VyL3tzeW1ib2x9JyxcbiAgICAgICAgICAgICAgICAnc3RhdHMve3N5bWJvbH0nLFxuICAgICAgICAgICAgICAgICdzeW1ib2xzJyxcbiAgICAgICAgICAgICAgICAnc3ltYm9sc19kZXRhaWxzJyxcbiAgICAgICAgICAgICAgICAndG9kYXknLFxuICAgICAgICAgICAgICAgICd0cmFkZXMve3N5bWJvbH0nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnYWNjb3VudF9pbmZvcycsXG4gICAgICAgICAgICAgICAgJ2JhbGFuY2VzJyxcbiAgICAgICAgICAgICAgICAnYmFza2V0X21hbmFnZScsXG4gICAgICAgICAgICAgICAgJ2NyZWRpdHMnLFxuICAgICAgICAgICAgICAgICdkZXBvc2l0L25ldycsXG4gICAgICAgICAgICAgICAgJ2Z1bmRpbmcvY2xvc2UnLFxuICAgICAgICAgICAgICAgICdoaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAnaGlzdG9yeS9tb3ZlbWVudHMnLFxuICAgICAgICAgICAgICAgICdrZXlfaW5mbycsXG4gICAgICAgICAgICAgICAgJ21hcmdpbl9pbmZvcycsXG4gICAgICAgICAgICAgICAgJ215dHJhZGVzJyxcbiAgICAgICAgICAgICAgICAnb2ZmZXIvY2FuY2VsJyxcbiAgICAgICAgICAgICAgICAnb2ZmZXIvbmV3JyxcbiAgICAgICAgICAgICAgICAnb2ZmZXIvc3RhdHVzJyxcbiAgICAgICAgICAgICAgICAnb2ZmZXJzJyxcbiAgICAgICAgICAgICAgICAnb3JkZXIvY2FuY2VsJyxcbiAgICAgICAgICAgICAgICAnb3JkZXIvY2FuY2VsL2FsbCcsXG4gICAgICAgICAgICAgICAgJ29yZGVyL2NhbmNlbC9tdWx0aScsXG4gICAgICAgICAgICAgICAgJ29yZGVyL2NhbmNlbC9yZXBsYWNlJyxcbiAgICAgICAgICAgICAgICAnb3JkZXIvbmV3JyxcbiAgICAgICAgICAgICAgICAnb3JkZXIvbmV3L211bHRpJyxcbiAgICAgICAgICAgICAgICAnb3JkZXIvc3RhdHVzJyxcbiAgICAgICAgICAgICAgICAnb3JkZXJzJyxcbiAgICAgICAgICAgICAgICAncG9zaXRpb24vY2xhaW0nLFxuICAgICAgICAgICAgICAgICdwb3NpdGlvbnMnLFxuICAgICAgICAgICAgICAgICdzdW1tYXJ5JyxcbiAgICAgICAgICAgICAgICAndGFrZW5fZnVuZHMnLFxuICAgICAgICAgICAgICAgICd0b3RhbF90YWtlbl9mdW5kcycsXG4gICAgICAgICAgICAgICAgJ3RyYW5zZmVyJyxcbiAgICAgICAgICAgICAgICAndW51c2VkX3Rha2VuX2Z1bmRzJyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXcnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hNYXJrZXRzICgpIHtcbiAgICAgICAgbGV0IG1hcmtldHMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFN5bWJvbHNEZXRhaWxzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgbWFya2V0cy5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IG1hcmtldHNbcF07XG4gICAgICAgICAgICBsZXQgaWQgPSBtYXJrZXRbJ3BhaXInXS50b1VwcGVyQ2FzZSAoKTtcbiAgICAgICAgICAgIGxldCBiYXNlSWQgPSBpZC5zbGljZSAoMCwgMyk7XG4gICAgICAgICAgICBsZXQgcXVvdGVJZCA9IGlkLnNsaWNlICgzLCA2KTtcbiAgICAgICAgICAgIGxldCBiYXNlID0gYmFzZUlkO1xuICAgICAgICAgICAgbGV0IHF1b3RlID0gcXVvdGVJZDtcbiAgICAgICAgICAgIC8vIGlzc3VlICM0IEJpdGZpbmV4IG5hbWVzIERhc2ggYXMgRFNILCBpbnN0ZWFkIG9mIERBU0hcbiAgICAgICAgICAgIGlmIChiYXNlID09ICdEU0gnKVxuICAgICAgICAgICAgICAgIGJhc2UgPSAnREFTSCc7XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gYmFzZSArICcvJyArIHF1b3RlO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2ggKHtcbiAgICAgICAgICAgICAgICAnaWQnOiBpZCxcbiAgICAgICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgICAgICdiYXNlJzogYmFzZSxcbiAgICAgICAgICAgICAgICAncXVvdGUnOiBxdW90ZSxcbiAgICAgICAgICAgICAgICAnYmFzZUlkJzogYmFzZUlkLFxuICAgICAgICAgICAgICAgICdxdW90ZUlkJzogcXVvdGVJZCxcbiAgICAgICAgICAgICAgICAnaW5mbyc6IG1hcmtldCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RCYWxhbmNlcyAoKTtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0ge307XG4gICAgICAgIGZvciAobGV0IGIgPSAwOyBiIDwgcmVzcG9uc2UubGVuZ3RoOyBiKyspIHtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0gcmVzcG9uc2VbYl07XG4gICAgICAgICAgICBpZiAoYWNjb3VudFsndHlwZSddID09ICdleGNoYW5nZScpIHtcbiAgICAgICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBhY2NvdW50WydjdXJyZW5jeSddO1xuICAgICAgICAgICAgICAgIC8vIGlzc3VlICM0IEJpdGZpbmV4IG5hbWVzIERhc2ggYXMgRFNILCBpbnN0ZWFkIG9mIERBU0hcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVuY3kgPT0gJ0RTSCcpXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbmN5ID0gJ0RBU0gnO1xuICAgICAgICAgICAgICAgIGxldCB1cHBlcmNhc2UgPSBjdXJyZW5jeS50b1VwcGVyQ2FzZSAoKTtcbiAgICAgICAgICAgICAgICBiYWxhbmNlc1t1cHBlcmNhc2VdID0gYWNjb3VudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IHJlc3BvbnNlIH07XG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgdGhpcy5jdXJyZW5jaWVzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSB0aGlzLmN1cnJlbmNpZXNbY107XG4gICAgICAgICAgICBsZXQgYWNjb3VudCA9IHtcbiAgICAgICAgICAgICAgICAnZnJlZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAndXNlZCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAndG90YWwnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGN1cnJlbmN5IGluIGJhbGFuY2VzKSB7XG4gICAgICAgICAgICAgICAgYWNjb3VudFsnZnJlZSddID0gcGFyc2VGbG9hdCAoYmFsYW5jZXNbY3VycmVuY3ldWydhdmFpbGFibGUnXSk7XG4gICAgICAgICAgICAgICAgYWNjb3VudFsndG90YWwnXSA9IHBhcnNlRmxvYXQgKGJhbGFuY2VzW2N1cnJlbmN5XVsnYW1vdW50J10pO1xuICAgICAgICAgICAgICAgIGFjY291bnRbJ3VzZWQnXSA9IGFjY291bnRbJ3RvdGFsJ10gLSBhY2NvdW50WydmcmVlJ107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRCb29rU3ltYm9sICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ3N5bWJvbCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IFtdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaWRlcyA9IFsgJ2JpZHMnLCAnYXNrcycgXTtcbiAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBzaWRlcy5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1tzXTtcbiAgICAgICAgICAgIGxldCBvcmRlcnMgPSBvcmRlcmJvb2tbc2lkZV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBvcmRlciA9IG9yZGVyc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgcHJpY2UgPSBwYXJzZUZsb2F0IChvcmRlclsncHJpY2UnXSk7XG4gICAgICAgICAgICAgICAgbGV0IGFtb3VudCA9IHBhcnNlRmxvYXQgKG9yZGVyWydhbW91bnQnXSk7XG4gICAgICAgICAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHBhcnNlSW50IChwYXJzZUZsb2F0IChvcmRlclsndGltZXN0YW1wJ10pKTtcbiAgICAgICAgICAgICAgICByZXN1bHRbc2lkZV0ucHVzaCAoWyBwcmljZSwgYW1vdW50LCB0aW1lc3RhbXAgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgdGlja2VyID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRQdWJ0aWNrZXJTeW1ib2wgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHBhcnNlRmxvYXQgKHRpY2tlclsndGltZXN0YW1wJ10pICogMTAwMDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2JpZCddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2FzayddKSxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdF9wcmljZSddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogcGFyc2VGbG9hdCAodGlja2VyWydtaWQnXSksXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndm9sdW1lJ10pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIHBhcnNlVHJhZGUgKHRyYWRlLCBtYXJrZXQpIHtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRyYWRlWyd0aW1lc3RhbXAnXSAqIDEwMDA7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaWQnOiB0cmFkZVsndGlkJ10udG9TdHJpbmcgKCksXG4gICAgICAgICAgICAnaW5mbyc6IHRyYWRlLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdzeW1ib2wnOiBtYXJrZXRbJ3N5bWJvbCddLFxuICAgICAgICAgICAgJ3R5cGUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnc2lkZSc6IHRyYWRlWyd0eXBlJ10sXG4gICAgICAgICAgICAncHJpY2UnOiBwYXJzZUZsb2F0ICh0cmFkZVsncHJpY2UnXSksXG4gICAgICAgICAgICAnYW1vdW50JzogcGFyc2VGbG9hdCAodHJhZGVbJ2Ftb3VudCddKSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG0gPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHRyYWRlcyA9IGF3YWl0IHRoaXMucHVibGljR2V0VHJhZGVzU3ltYm9sICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ3N5bWJvbCc6IG1bJ2lkJ10sXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVRyYWRlcyAodHJhZGVzLCBtKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG9yZGVyID0ge1xuICAgICAgICAgICAgJ3N5bWJvbCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgICAgICAnYW1vdW50JzogYW1vdW50LnRvU3RyaW5nICgpLFxuICAgICAgICAgICAgJ3NpZGUnOiBzaWRlLFxuICAgICAgICAgICAgJ3R5cGUnOiAnZXhjaGFuZ2UgJyArIHR5cGUsXG4gICAgICAgICAgICAnb2Nvb3JkZXInOiBmYWxzZSxcbiAgICAgICAgICAgICdidXlfcHJpY2Vfb2NvJzogMCxcbiAgICAgICAgICAgICdzZWxsX3ByaWNlX29jbyc6IDAsXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlID09ICdtYXJrZXQnKSB7XG4gICAgICAgICAgICBvcmRlclsncHJpY2UnXSA9IHRoaXMubm9uY2UgKCkudG9TdHJpbmcgKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvcmRlclsncHJpY2UnXSA9IHByaWNlLnRvU3RyaW5nICgpO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0T3JkZXJOZXcgKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3VsdCxcbiAgICAgICAgICAgICdpZCc6IHJlc3VsdFsnb3JkZXJfaWQnXS50b1N0cmluZyAoKSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0T3JkZXJDYW5jZWwgKHsgJ29yZGVyX2lkJzogaWQgfSk7XG4gICAgfSxcblxuICAgIG5vbmNlICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCByZXF1ZXN0ID0gJy8nICsgdGhpcy52ZXJzaW9uICsgJy8nICsgdGhpcy5pbXBsb2RlUGFyYW1zIChwYXRoLCBwYXJhbXMpO1xuICAgICAgICBsZXQgcXVlcnkgPSB0aGlzLm9taXQgKHBhcmFtcywgdGhpcy5leHRyYWN0UGFyYW1zIChwYXRoKSk7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgcmVxdWVzdDtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChxdWVyeSkubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG5vbmNlID0gdGhpcy5ub25jZSAoKTtcbiAgICAgICAgICAgIHF1ZXJ5ID0gdGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICAgICAnbm9uY2UnOiBub25jZS50b1N0cmluZyAoKSxcbiAgICAgICAgICAgICAgICAncmVxdWVzdCc6IHJlcXVlc3QsXG4gICAgICAgICAgICB9LCBxdWVyeSk7XG4gICAgICAgICAgICBxdWVyeSA9IHRoaXMuanNvbiAocXVlcnkpO1xuICAgICAgICAgICAgcXVlcnkgPSB0aGlzLmVuY29kZSAocXVlcnkpO1xuICAgICAgICAgICAgbGV0IHBheWxvYWQgPSB0aGlzLnN0cmluZ1RvQmFzZTY0IChxdWVyeSk7XG4gICAgICAgICAgICBsZXQgc2VjcmV0ID0gdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KTtcbiAgICAgICAgICAgIGxldCBzaWduYXR1cmUgPSB0aGlzLmhtYWMgKHBheWxvYWQsIHNlY3JldCwgJ3NoYTM4NCcpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnWC1CRlgtQVBJS0VZJzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ1gtQkZYLVBBWUxPQUQnOiB0aGlzLmRlY29kZSAocGF5bG9hZCksXG4gICAgICAgICAgICAgICAgJ1gtQkZYLVNJR05BVFVSRSc6IHNpZ25hdHVyZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgICAgICBpZiAoJ21lc3NhZ2UnIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBiaXRmbHllciA9IHtcblxuICAgICdpZCc6ICdiaXRmbHllcicsXG4gICAgJ25hbWUnOiAnYml0Rmx5ZXInLFxuICAgICdjb3VudHJpZXMnOiAnSlAnLFxuICAgICd2ZXJzaW9uJzogJ3YxJyxcbiAgICAncmF0ZUxpbWl0JzogNTAwLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI4MDUxNjQyLTU2MTU0MTgyLTY2MGUtMTFlNy05YjBkLTYwNDJkMWU2ZWRkOC5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vYXBpLmJpdGZseWVyLmpwJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL2JpdGZseWVyLmpwJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL2JpdGZseWVyLmpwL0FQSScsXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnZ2V0bWFya2V0cycsICAgIC8vIG9yICdtYXJrZXRzJ1xuICAgICAgICAgICAgICAgICdnZXRib2FyZCcsICAgICAgLy8gb3IgJ2JvYXJkJ1xuICAgICAgICAgICAgICAgICdnZXR0aWNrZXInLCAgICAgLy8gb3IgJ3RpY2tlcidcbiAgICAgICAgICAgICAgICAnZ2V0ZXhlY3V0aW9ucycsIC8vIG9yICdleGVjdXRpb25zJ1xuICAgICAgICAgICAgICAgICdnZXRoZWFsdGgnLFxuICAgICAgICAgICAgICAgICdnZXRjaGF0cycsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAncHJpdmF0ZSc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ2dldHBlcm1pc3Npb25zJyxcbiAgICAgICAgICAgICAgICAnZ2V0YmFsYW5jZScsXG4gICAgICAgICAgICAgICAgJ2dldGNvbGxhdGVyYWwnLFxuICAgICAgICAgICAgICAgICdnZXRjb2xsYXRlcmFsYWNjb3VudHMnLFxuICAgICAgICAgICAgICAgICdnZXRhZGRyZXNzZXMnLFxuICAgICAgICAgICAgICAgICdnZXRjb2luaW5zJyxcbiAgICAgICAgICAgICAgICAnZ2V0Y29pbm91dHMnLFxuICAgICAgICAgICAgICAgICdnZXRiYW5rYWNjb3VudHMnLFxuICAgICAgICAgICAgICAgICdnZXRkZXBvc2l0cycsXG4gICAgICAgICAgICAgICAgJ2dldHdpdGhkcmF3YWxzJyxcbiAgICAgICAgICAgICAgICAnZ2V0Y2hpbGRvcmRlcnMnLFxuICAgICAgICAgICAgICAgICdnZXRwYXJlbnRvcmRlcnMnLFxuICAgICAgICAgICAgICAgICdnZXRwYXJlbnRvcmRlcicsXG4gICAgICAgICAgICAgICAgJ2dldGV4ZWN1dGlvbnMnLFxuICAgICAgICAgICAgICAgICdnZXRwb3NpdGlvbnMnLFxuICAgICAgICAgICAgICAgICdnZXR0cmFkaW5nY29tbWlzc2lvbicsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ3NlbmRjb2luJyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXcnLFxuICAgICAgICAgICAgICAgICdzZW5kY2hpbGRvcmRlcicsXG4gICAgICAgICAgICAgICAgJ2NhbmNlbGNoaWxkb3JkZXInLFxuICAgICAgICAgICAgICAgICdzZW5kcGFyZW50b3JkZXInLFxuICAgICAgICAgICAgICAgICdjYW5jZWxwYXJlbnRvcmRlcicsXG4gICAgICAgICAgICAgICAgJ2NhbmNlbGFsbGNoaWxkb3JkZXJzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoTWFya2V0cyAoKSB7XG4gICAgICAgIGxldCBtYXJrZXRzID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgbWFya2V0cy5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IG1hcmtldHNbcF07XG4gICAgICAgICAgICBsZXQgaWQgPSBtYXJrZXRbJ3Byb2R1Y3RfY29kZSddO1xuICAgICAgICAgICAgbGV0IGN1cnJlbmNpZXMgPSBpZC5zcGxpdCAoJ18nKTtcbiAgICAgICAgICAgIGxldCBiYXNlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgbGV0IHF1b3RlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgbGV0IHN5bWJvbCA9IGlkO1xuICAgICAgICAgICAgbGV0IG51bUN1cnJlbmNpZXMgPSBjdXJyZW5jaWVzLmxlbmd0aDtcbiAgICAgICAgICAgIGlmIChudW1DdXJyZW5jaWVzID09IDIpIHtcbiAgICAgICAgICAgICAgICBiYXNlID0gY3VycmVuY2llc1swXTtcbiAgICAgICAgICAgICAgICBxdW90ZSA9IGN1cnJlbmNpZXNbMV07XG4gICAgICAgICAgICAgICAgc3ltYm9sID0gYmFzZSArICcvJyArIHF1b3RlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0LnB1c2ggKHtcbiAgICAgICAgICAgICAgICAnaWQnOiBpZCxcbiAgICAgICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgICAgICdiYXNlJzogYmFzZSxcbiAgICAgICAgICAgICAgICAncXVvdGUnOiBxdW90ZSxcbiAgICAgICAgICAgICAgICAnaW5mbyc6IG1hcmtldCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZUdldEJhbGFuY2UgKCk7XG4gICAgICAgIGxldCBiYWxhbmNlcyA9IHt9O1xuICAgICAgICBmb3IgKGxldCBiID0gMDsgYiA8IHJlc3BvbnNlLmxlbmd0aDsgYisrKSB7XG4gICAgICAgICAgICBsZXQgYWNjb3VudCA9IHJlc3BvbnNlW2JdO1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gYWNjb3VudFsnY3VycmVuY3lfY29kZSddO1xuICAgICAgICAgICAgYmFsYW5jZXNbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IHJlc3BvbnNlIH07XG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgdGhpcy5jdXJyZW5jaWVzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSB0aGlzLmN1cnJlbmNpZXNbY107XG4gICAgICAgICAgICBsZXQgYWNjb3VudCA9IHtcbiAgICAgICAgICAgICAgICAnZnJlZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAndXNlZCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAndG90YWwnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGN1cnJlbmN5IGluIGJhbGFuY2VzKSB7XG4gICAgICAgICAgICAgICAgYWNjb3VudFsndG90YWwnXSA9IGJhbGFuY2VzW2N1cnJlbmN5XVsnYW1vdW50J107XG4gICAgICAgICAgICAgICAgYWNjb3VudFsnZnJlZSddID0gYmFsYW5jZXNbY3VycmVuY3ldWydhdmFpbGFibGUnXTtcbiAgICAgICAgICAgICAgICBhY2NvdW50Wyd1c2VkJ10gPSBhY2NvdW50Wyd0b3RhbCddIC0gYWNjb3VudFsnZnJlZSddO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IGF3YWl0IHRoaXMucHVibGljR2V0Qm9hcmQgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAncHJvZHVjdF9jb2RlJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdiaWRzJzogW10sXG4gICAgICAgICAgICAnYXNrcyc6IFtdLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHNpZGVzID0gWyAnYmlkcycsICdhc2tzJyBdO1xuICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IHNpZGVzLmxlbmd0aDsgcysrKSB7XG4gICAgICAgICAgICBsZXQgc2lkZSA9IHNpZGVzW3NdO1xuICAgICAgICAgICAgbGV0IG9yZGVycyA9IG9yZGVyYm9va1tzaWRlXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9yZGVyID0gb3JkZXJzW2ldO1xuICAgICAgICAgICAgICAgIGxldCBwcmljZSA9IHBhcnNlRmxvYXQgKG9yZGVyWydwcmljZSddKTtcbiAgICAgICAgICAgICAgICBsZXQgYW1vdW50ID0gcGFyc2VGbG9hdCAob3JkZXJbJ3NpemUnXSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3NpZGVdLnB1c2ggKFsgcHJpY2UsIGFtb3VudCBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCB0aWNrZXIgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFRpY2tlciAoe1xuICAgICAgICAgICAgJ3Byb2R1Y3RfY29kZSc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5wYXJzZTg2MDEgKHRpY2tlclsndGltZXN0YW1wJ10pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xvdyc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2Jlc3RfYmlkJ10pLFxuICAgICAgICAgICAgJ2Fzayc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYmVzdF9hc2snXSksXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2x0cCddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbHVtZV9ieV9wcm9kdWN0J10pLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWyd2b2x1bWUnXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0RXhlY3V0aW9ucyAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdwcm9kdWN0X2NvZGUnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG9yZGVyID0ge1xuICAgICAgICAgICAgJ3Byb2R1Y3RfY29kZSc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgICAgICAnY2hpbGRfb3JkZXJfdHlwZSc6IHR5cGUudG9VcHBlckNhc2UgKCksXG4gICAgICAgICAgICAnc2lkZSc6IHNpZGUudG9VcHBlckNhc2UgKCksXG4gICAgICAgICAgICAncHJpY2UnOiBwcmljZSxcbiAgICAgICAgICAgICdzaXplJzogYW1vdW50LFxuICAgICAgICB9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdFNlbmRjaGlsZG9yZGVyICh0aGlzLmV4dGVuZCAob3JkZXIsIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXN1bHQsXG4gICAgICAgICAgICAnaWQnOiByZXN1bHRbJ2NoaWxkX29yZGVyX2FjY2VwdGFuY2VfaWQnXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdENhbmNlbGNoaWxkb3JkZXIgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAncGFyZW50X29yZGVyX2lkJzogaWQsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCByZXF1ZXN0ID0gJy8nICsgdGhpcy52ZXJzaW9uICsgJy8nO1xuICAgICAgICBpZiAoYXBpID09ICdwcml2YXRlJylcbiAgICAgICAgICAgIHJlcXVlc3QgKz0gJ21lLyc7XG4gICAgICAgIHJlcXVlc3QgKz0gcGF0aDtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ10gKyByZXF1ZXN0O1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHBhcmFtcykubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocGFyYW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCkudG9TdHJpbmcgKCk7XG4gICAgICAgICAgICBib2R5ID0gdGhpcy5qc29uIChwYXJhbXMpO1xuICAgICAgICAgICAgbGV0IGF1dGggPSBbIG5vbmNlLCBtZXRob2QsIHJlcXVlc3QsIGJvZHkgXS5qb2luICgnJyk7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdBQ0NFU1MtS0VZJzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ0FDQ0VTUy1USU1FU1RBTVAnOiBub25jZSxcbiAgICAgICAgICAgICAgICAnQUNDRVNTLVNJR04nOiB0aGlzLmhtYWMgKHRoaXMuZW5jb2RlIChhdXRoKSwgdGhpcy5zZWNyZXQpLFxuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgYml0bGlzaCA9IHtcblxuICAgICdpZCc6ICdiaXRsaXNoJyxcbiAgICAnbmFtZSc6ICdiaXRsaXNoJyxcbiAgICAnY291bnRyaWVzJzogWyAnR0InLCAnRVUnLCAnUlUnIF0sXG4gICAgJ3JhdGVMaW1pdCc6IDE1MDAsXG4gICAgJ3ZlcnNpb24nOiAndjEnLFxuICAgICdoYXNGZXRjaFRpY2tlcnMnOiB0cnVlLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2Mjc1LWRjZmM2YzMwLTVlZDMtMTFlNy04MzlkLTAwYTg0NjM4NWQwYi5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vYml0bGlzaC5jb20vYXBpJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL2JpdGxpc2guY29tJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL2JpdGxpc2guY29tL2FwaScsXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnaW5zdHJ1bWVudHMnLFxuICAgICAgICAgICAgICAgICdvaGxjdicsXG4gICAgICAgICAgICAgICAgJ3BhaXJzJyxcbiAgICAgICAgICAgICAgICAndGlja2VycycsXG4gICAgICAgICAgICAgICAgJ3RyYWRlc19kZXB0aCcsXG4gICAgICAgICAgICAgICAgJ3RyYWRlc19oaXN0b3J5JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2FjY291bnRzX29wZXJhdGlvbnMnLFxuICAgICAgICAgICAgICAgICdiYWxhbmNlJyxcbiAgICAgICAgICAgICAgICAnY2FuY2VsX3RyYWRlJyxcbiAgICAgICAgICAgICAgICAnY2FuY2VsX3RyYWRlc19ieV9pZHMnLFxuICAgICAgICAgICAgICAgICdjYW5jZWxfYWxsX3RyYWRlcycsXG4gICAgICAgICAgICAgICAgJ2NyZWF0ZV9iY29kZScsXG4gICAgICAgICAgICAgICAgJ2NyZWF0ZV90ZW1wbGF0ZV93YWxsZXQnLFxuICAgICAgICAgICAgICAgICdjcmVhdGVfdHJhZGUnLFxuICAgICAgICAgICAgICAgICdkZXBvc2l0JyxcbiAgICAgICAgICAgICAgICAnbGlzdF9hY2NvdW50c19vcGVyYXRpb25zX2Zyb21fdHMnLFxuICAgICAgICAgICAgICAgICdsaXN0X2FjdGl2ZV90cmFkZXMnLFxuICAgICAgICAgICAgICAgICdsaXN0X2Jjb2RlcycsXG4gICAgICAgICAgICAgICAgJ2xpc3RfbXlfbWF0Y2hlc19mcm9tX3RzJyxcbiAgICAgICAgICAgICAgICAnbGlzdF9teV90cmFkZXMnLFxuICAgICAgICAgICAgICAgICdsaXN0X215X3RyYWRzX2Zyb21fdHMnLFxuICAgICAgICAgICAgICAgICdsaXN0X3BheW1lbnRfbWV0aG9kcycsXG4gICAgICAgICAgICAgICAgJ2xpc3RfcGF5bWVudHMnLFxuICAgICAgICAgICAgICAgICdyZWRlZW1fY29kZScsXG4gICAgICAgICAgICAgICAgJ3Jlc2lnbicsXG4gICAgICAgICAgICAgICAgJ3NpZ25pbicsXG4gICAgICAgICAgICAgICAgJ3NpZ25vdXQnLFxuICAgICAgICAgICAgICAgICd0cmFkZV9kZXRhaWxzJyxcbiAgICAgICAgICAgICAgICAndHJhZGVfb3B0aW9ucycsXG4gICAgICAgICAgICAgICAgJ3dpdGhkcmF3JyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXdfYnlfaWQnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hNYXJrZXRzICgpIHtcbiAgICAgICAgbGV0IG1hcmtldHMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFBhaXJzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMgKG1hcmtldHMpO1xuICAgICAgICBmb3IgKGxldCBwID0gMDsgcCA8IGtleXMubGVuZ3RoOyBwKyspIHtcbiAgICAgICAgICAgIGxldCBtYXJrZXQgPSBtYXJrZXRzW2tleXNbcF1dO1xuICAgICAgICAgICAgbGV0IGlkID0gbWFya2V0WydpZCddO1xuICAgICAgICAgICAgbGV0IHN5bWJvbCA9IG1hcmtldFsnbmFtZSddO1xuICAgICAgICAgICAgbGV0IFsgYmFzZSwgcXVvdGUgXSA9IHN5bWJvbC5zcGxpdCAoJy8nKTtcbiAgICAgICAgICAgIC8vIGlzc3VlICM0IGJpdGxpc2ggbmFtZXMgRGFzaCBhcyBEU0gsIGluc3RlYWQgb2YgREFTSFxuICAgICAgICAgICAgaWYgKGJhc2UgPT0gJ0RTSCcpXG4gICAgICAgICAgICAgICAgYmFzZSA9ICdEQVNIJztcbiAgICAgICAgICAgIHN5bWJvbCA9IGJhc2UgKyAnLycgKyBxdW90ZTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoICh7XG4gICAgICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgICAgICAgICAgJ3N5bWJvbCc6IHN5bWJvbCxcbiAgICAgICAgICAgICAgICAnYmFzZSc6IGJhc2UsXG4gICAgICAgICAgICAgICAgJ3F1b3RlJzogcXVvdGUsXG4gICAgICAgICAgICAgICAgJ2luZm8nOiBtYXJrZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBwYXJzZVRpY2tlciAodGlja2VyLCBtYXJrZXQpIHtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydtYXgnXSksXG4gICAgICAgICAgICAnbG93JzogcGFyc2VGbG9hdCAodGlja2VyWydtaW4nXSksXG4gICAgICAgICAgICAnYmlkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Fzayc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2ZpcnN0J10pLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xhc3QnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VycyAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCB0aWNrZXJzID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRUaWNrZXJzICgpO1xuICAgICAgICBsZXQgaWRzID0gT2JqZWN0LmtleXMgKHRpY2tlcnMpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge307XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgaWQgPSBpZHNbaV07XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gdGhpcy5tYXJrZXRzX2J5X2lkW2lkXTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBtYXJrZXRbJ3N5bWJvbCddO1xuICAgICAgICAgICAgbGV0IHRpY2tlciA9IHRpY2tlcnNbaWRdO1xuICAgICAgICAgICAgcmVzdWx0W3N5bWJvbF0gPSB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIG1hcmtldCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgdGlja2VycyA9IGF3YWl0IHRoaXMucHVibGljR2V0VGlja2VycyAoKTtcbiAgICAgICAgbGV0IHRpY2tlciA9IHRpY2tlcnNbcFsnaWQnXV07XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIHApO1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRUcmFkZXNEZXB0aCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdwYWlyX2lkJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSBwYXJzZUludCAocGFyc2VJbnQgKG9yZGVyYm9va1snbGFzdCddKSAvIDEwMDApO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSB7ICdiaWRzJzogJ2JpZCcsICdhc2tzJzogJ2FzaycgfTtcbiAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyAoc2lkZXMpO1xuICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGtleXMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgIGxldCBrZXkgPSBrZXlzW2tdO1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1trZXldO1xuICAgICAgICAgICAgbGV0IG9yZGVycyA9IG9yZGVyYm9va1tzaWRlXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9yZGVyID0gb3JkZXJzW2ldO1xuICAgICAgICAgICAgICAgIGxldCBwcmljZSA9IHBhcnNlRmxvYXQgKG9yZGVyWydwcmljZSddKTtcbiAgICAgICAgICAgICAgICBsZXQgYW1vdW50ID0gcGFyc2VGbG9hdCAob3JkZXJbJ3ZvbHVtZSddKTtcbiAgICAgICAgICAgICAgICByZXN1bHRba2V5XS5wdXNoIChbIHByaWNlLCBhbW91bnQgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0VHJhZGVzSGlzdG9yeSAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdwYWlyX2lkJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RCYWxhbmNlICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IHJlc3BvbnNlIH07XG4gICAgICAgIGxldCBjdXJyZW5jaWVzID0gT2JqZWN0LmtleXMgKHJlc3BvbnNlKTtcbiAgICAgICAgbGV0IGJhbGFuY2UgPSB7fTtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBjdXJyZW5jaWVzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBjdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSByZXNwb25zZVtjdXJyZW5jeV07XG4gICAgICAgICAgICBjdXJyZW5jeSA9IGN1cnJlbmN5LnRvVXBwZXJDYXNlICgpO1xuICAgICAgICAgICAgLy8gaXNzdWUgIzQgYml0bGlzaCBuYW1lcyBEYXNoIGFzIERTSCwgaW5zdGVhZCBvZiBEQVNIXG4gICAgICAgICAgICBpZiAoY3VycmVuY3kgPT0gJ0RTSCcpXG4gICAgICAgICAgICAgICAgY3VycmVuY3kgPSAnREFTSCc7XG4gICAgICAgICAgICBiYWxhbmNlW2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCB0aGlzLmN1cnJlbmNpZXMubGVuZ3RoOyBjKyspIHtcbiAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IHRoaXMuY3VycmVuY2llc1tjXTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd1c2VkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoY3VycmVuY3kgaW4gYmFsYW5jZSkge1xuICAgICAgICAgICAgICAgIGFjY291bnRbJ2ZyZWUnXSA9IHBhcnNlRmxvYXQgKGJhbGFuY2VbY3VycmVuY3ldWydmdW5kcyddKTtcbiAgICAgICAgICAgICAgICBhY2NvdW50Wyd1c2VkJ10gPSBwYXJzZUZsb2F0IChiYWxhbmNlW2N1cnJlbmN5XVsnaG9sZGVkJ10pO1xuICAgICAgICAgICAgICAgIGFjY291bnRbJ3RvdGFsJ10gPSB0aGlzLnN1bSAoYWNjb3VudFsnZnJlZSddLCBhY2NvdW50Wyd1c2VkJ10pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgc2lnbkluICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJpdmF0ZVBvc3RTaWduaW4gKHtcbiAgICAgICAgICAgICdsb2dpbic6IHRoaXMubG9naW4sXG4gICAgICAgICAgICAncGFzc3dkJzogdGhpcy5wYXNzd29yZCxcbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdwYWlyX2lkJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICdkaXInOiAoc2lkZSA9PSAnYnV5JykgPyAnYmlkJyA6ICdhc2snLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IGFtb3VudCxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHR5cGUgPT0gJ2xpbWl0JylcbiAgICAgICAgICAgIG9yZGVyWydwcmljZSddID0gcHJpY2U7XG4gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0Q3JlYXRlVHJhZGUgKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3VsdCxcbiAgICAgICAgICAgICdpZCc6IHJlc3VsdFsnaWQnXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0Q2FuY2VsVHJhZGUgKHsgJ2lkJzogaWQgfSk7XG4gICAgfSxcblxuICAgIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ10gKyAnLycgKyB0aGlzLnZlcnNpb24gKyAnLycgKyBwYXRoO1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHBhcmFtcykubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocGFyYW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLmpzb24gKHRoaXMuZXh0ZW5kICh7ICd0b2tlbic6IHRoaXMuYXBpS2V5IH0sIHBhcmFtcykpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgYml0bWFya2V0ID0ge1xuXG4gICAgJ2lkJzogJ2JpdG1hcmtldCcsXG4gICAgJ25hbWUnOiAnQml0TWFya2V0JyxcbiAgICAnY291bnRyaWVzJzogWyAnUEwnLCAnRVUnIF0sXG4gICAgJ3JhdGVMaW1pdCc6IDE1MDAsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc3NjcyNTYtYTg1NTUyMDAtNWVmOS0xMWU3LTk2ZmQtNDY5YTY1ZTJiMGJkLmpwZycsXG4gICAgICAgICdhcGknOiB7XG4gICAgICAgICAgICAncHVibGljJzogJ2h0dHBzOi8vd3d3LmJpdG1hcmtldC5uZXQnLFxuICAgICAgICAgICAgJ3ByaXZhdGUnOiAnaHR0cHM6Ly93d3cuYml0bWFya2V0LnBsL2FwaTIvJywgLy8gbGFzdCBzbGFzaCBpcyBjcml0aWNhbFxuICAgICAgICB9LFxuICAgICAgICAnd3d3JzogW1xuICAgICAgICAgICAgJ2h0dHBzOi8vd3d3LmJpdG1hcmtldC5wbCcsXG4gICAgICAgICAgICAnaHR0cHM6Ly93d3cuYml0bWFya2V0Lm5ldCcsXG4gICAgICAgIF0sXG4gICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAnaHR0cHM6Ly93d3cuYml0bWFya2V0Lm5ldC9kb2NzLnBocD9maWxlPWFwaV9wdWJsaWMuaHRtbCcsXG4gICAgICAgICAgICAnaHR0cHM6Ly93d3cuYml0bWFya2V0Lm5ldC9kb2NzLnBocD9maWxlPWFwaV9wcml2YXRlLmh0bWwnLFxuICAgICAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS9iaXRtYXJrZXQtbmV0L2FwaScsXG4gICAgICAgIF0sXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnanNvbi97bWFya2V0fS90aWNrZXInLFxuICAgICAgICAgICAgICAgICdqc29uL3ttYXJrZXR9L29yZGVyYm9vaycsXG4gICAgICAgICAgICAgICAgJ2pzb24ve21hcmtldH0vdHJhZGVzJyxcbiAgICAgICAgICAgICAgICAnanNvbi9jdHJhbnNmZXInLFxuICAgICAgICAgICAgICAgICdncmFwaHMve21hcmtldH0vOTBtJyxcbiAgICAgICAgICAgICAgICAnZ3JhcGhzL3ttYXJrZXR9LzZoJyxcbiAgICAgICAgICAgICAgICAnZ3JhcGhzL3ttYXJrZXR9LzFkJyxcbiAgICAgICAgICAgICAgICAnZ3JhcGhzL3ttYXJrZXR9LzdkJyxcbiAgICAgICAgICAgICAgICAnZ3JhcGhzL3ttYXJrZXR9LzFtJyxcbiAgICAgICAgICAgICAgICAnZ3JhcGhzL3ttYXJrZXR9LzNtJyxcbiAgICAgICAgICAgICAgICAnZ3JhcGhzL3ttYXJrZXR9LzZtJyxcbiAgICAgICAgICAgICAgICAnZ3JhcGhzL3ttYXJrZXR9LzF5JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2luZm8nLFxuICAgICAgICAgICAgICAgICd0cmFkZScsXG4gICAgICAgICAgICAgICAgJ2NhbmNlbCcsXG4gICAgICAgICAgICAgICAgJ29yZGVycycsXG4gICAgICAgICAgICAgICAgJ3RyYWRlcycsXG4gICAgICAgICAgICAgICAgJ2hpc3RvcnknLFxuICAgICAgICAgICAgICAgICd3aXRoZHJhd2FscycsXG4gICAgICAgICAgICAgICAgJ3RyYWRpbmdkZXNrJyxcbiAgICAgICAgICAgICAgICAndHJhZGluZ2Rlc2tTdGF0dXMnLFxuICAgICAgICAgICAgICAgICd0cmFkaW5nZGVza0NvbmZpcm0nLFxuICAgICAgICAgICAgICAgICdjcnlwdG90cmFkaW5nZGVzaycsXG4gICAgICAgICAgICAgICAgJ2NyeXB0b3RyYWRpbmdkZXNrU3RhdHVzJyxcbiAgICAgICAgICAgICAgICAnY3J5cHRvdHJhZGluZ2Rlc2tDb25maXJtJyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXcnLFxuICAgICAgICAgICAgICAgICd3aXRoZHJhd0ZpYXQnLFxuICAgICAgICAgICAgICAgICd3aXRoZHJhd1BMTlBQJyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXdGaWF0RmFzdCcsXG4gICAgICAgICAgICAgICAgJ2RlcG9zaXQnLFxuICAgICAgICAgICAgICAgICd0cmFuc2ZlcicsXG4gICAgICAgICAgICAgICAgJ3RyYW5zZmVycycsXG4gICAgICAgICAgICAgICAgJ21hcmdpbkxpc3QnLFxuICAgICAgICAgICAgICAgICdtYXJnaW5PcGVuJyxcbiAgICAgICAgICAgICAgICAnbWFyZ2luQ2xvc2UnLFxuICAgICAgICAgICAgICAgICdtYXJnaW5DYW5jZWwnLFxuICAgICAgICAgICAgICAgICdtYXJnaW5Nb2RpZnknLFxuICAgICAgICAgICAgICAgICdtYXJnaW5CYWxhbmNlQWRkJyxcbiAgICAgICAgICAgICAgICAnbWFyZ2luQmFsYW5jZVJlbW92ZScsXG4gICAgICAgICAgICAgICAgJ3N3YXBMaXN0JyxcbiAgICAgICAgICAgICAgICAnc3dhcE9wZW4nLFxuICAgICAgICAgICAgICAgICdzd2FwQ2xvc2UnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgICdtYXJrZXRzJzoge1xuICAgICAgICAnQlRDL1BMTic6IHsgJ2lkJzogJ0JUQ1BMTicsICdzeW1ib2wnOiAnQlRDL1BMTicsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdQTE4nIH0sXG4gICAgICAgICdCVEMvRVVSJzogeyAnaWQnOiAnQlRDRVVSJywgJ3N5bWJvbCc6ICdCVEMvRVVSJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ0VVUicgfSxcbiAgICAgICAgJ0xUQy9QTE4nOiB7ICdpZCc6ICdMVENQTE4nLCAnc3ltYm9sJzogJ0xUQy9QTE4nLCAnYmFzZSc6ICdMVEMnLCAncXVvdGUnOiAnUExOJyB9LFxuICAgICAgICAnTFRDL0JUQyc6IHsgJ2lkJzogJ0xUQ0JUQycsICdzeW1ib2wnOiAnTFRDL0JUQycsICdiYXNlJzogJ0xUQycsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdMaXRlTWluZVgvQlRDJzogeyAnaWQnOiAnTGl0ZU1pbmVYQlRDJywgJ3N5bWJvbCc6ICdMaXRlTWluZVgvQlRDJywgJ2Jhc2UnOiAnTGl0ZU1pbmVYJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ1BsblgvQlRDJzogeyAnaWQnOiAnUGxueEJUQycsICdzeW1ib2wnOiAnUGxuWC9CVEMnLCAnYmFzZSc6ICdQbG5YJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdEluZm8gKCk7XG4gICAgICAgIGxldCBkYXRhID0gcmVzcG9uc2VbJ2RhdGEnXTtcbiAgICAgICAgbGV0IGJhbGFuY2UgPSBkYXRhWydiYWxhbmNlcyddO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGRhdGEgfTtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCB0aGlzLmN1cnJlbmNpZXMubGVuZ3RoOyBjKyspIHtcbiAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IHRoaXMuY3VycmVuY2llc1tjXTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd1c2VkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoY3VycmVuY3kgaW4gYmFsYW5jZVsnYXZhaWxhYmxlJ10pXG4gICAgICAgICAgICAgICAgYWNjb3VudFsnZnJlZSddID0gYmFsYW5jZVsnYXZhaWxhYmxlJ11bY3VycmVuY3ldO1xuICAgICAgICAgICAgaWYgKGN1cnJlbmN5IGluIGJhbGFuY2VbJ2Jsb2NrZWQnXSlcbiAgICAgICAgICAgICAgICBhY2NvdW50Wyd1c2VkJ10gPSBiYWxhbmNlWydibG9ja2VkJ11bY3VycmVuY3ldO1xuICAgICAgICAgICAgYWNjb3VudFsndG90YWwnXSA9IHRoaXMuc3VtIChhY2NvdW50WydmcmVlJ10sIGFjY291bnRbJ3VzZWQnXSk7XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRKc29uTWFya2V0T3JkZXJib29rICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ21hcmtldCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IG9yZGVyYm9va1snYmlkcyddLFxuICAgICAgICAgICAgJ2Fza3MnOiBvcmRlcmJvb2tbJ2Fza3MnXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG5cbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBsZXQgdGlja2VyID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRKc29uTWFya2V0VGlja2VyICh7XG4gICAgICAgICAgICAnbWFya2V0JzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2JpZCddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2FzayddKSxcbiAgICAgICAgICAgICd2d2FwJzogcGFyc2VGbG9hdCAodGlja2VyWyd2d2FwJ10pLFxuICAgICAgICAgICAgJ29wZW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdCddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbHVtZSddKSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdGhpcy5wdWJsaWNHZXRKc29uTWFya2V0VHJhZGVzICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ21hcmtldCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0VHJhZGUgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnbWFya2V0JzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICd0eXBlJzogc2lkZSxcbiAgICAgICAgICAgICdhbW91bnQnOiBhbW91bnQsXG4gICAgICAgICAgICAncmF0ZSc6IHByaWNlLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgIH07XG4gICAgICAgIGlmICgnaWQnIGluIHJlc3BvbnNlWydvcmRlciddKVxuICAgICAgICAgICAgcmVzdWx0WydpZCddID0gcmVzcG9uc2VbJ2lkJ107XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdENhbmNlbCAoeyAnaWQnOiBpZCB9KTtcbiAgICB9LFxuXG4gICAgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXVthcGldO1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICB1cmwgKz0gJy8nICsgdGhpcy5pbXBsb2RlUGFyYW1zIChwYXRoICsgJy5qc29uJywgcGFyYW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCk7XG4gICAgICAgICAgICBsZXQgcXVlcnkgPSB0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgICAgICd0b25jZSc6IG5vbmNlLFxuICAgICAgICAgICAgICAgICdtZXRob2QnOiBwYXRoLFxuICAgICAgICAgICAgfSwgcGFyYW1zKTtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQVBJLUtleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgICAgICdBUEktSGFzaCc6IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKGJvZHkpLCB0aGlzLmVuY29kZSAodGhpcy5zZWNyZXQpLCAnc2hhNTEyJyksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgYml0bWV4ID0ge1xuXG4gICAgJ2lkJzogJ2JpdG1leCcsXG4gICAgJ25hbWUnOiAnQml0TUVYJyxcbiAgICAnY291bnRyaWVzJzogJ1NDJywgLy8gU2V5Y2hlbGxlc1xuICAgICd2ZXJzaW9uJzogJ3YxJyxcbiAgICAncmF0ZUxpbWl0JzogMTUwMCxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yNzc2NjMxOS1mNjUzYzZlNi01ZWQ0LTExZTctOTMzZC1mMGJjMzY5OWFlOGYuanBnJyxcbiAgICAgICAgJ2FwaSc6ICdodHRwczovL3d3dy5iaXRtZXguY29tJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy5iaXRtZXguY29tJyxcbiAgICAgICAgJ2RvYyc6IFtcbiAgICAgICAgICAgICdodHRwczovL3d3dy5iaXRtZXguY29tL2FwcC9hcGlPdmVydmlldycsXG4gICAgICAgICAgICAnaHR0cHM6Ly9naXRodWIuY29tL0JpdE1FWC9hcGktY29ubmVjdG9ycy90cmVlL21hc3Rlci9vZmZpY2lhbC1odHRwJyxcbiAgICAgICAgXSxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdhbm5vdW5jZW1lbnQnLFxuICAgICAgICAgICAgICAgICdhbm5vdW5jZW1lbnQvdXJnZW50JyxcbiAgICAgICAgICAgICAgICAnZnVuZGluZycsXG4gICAgICAgICAgICAgICAgJ2luc3RydW1lbnQnLFxuICAgICAgICAgICAgICAgICdpbnN0cnVtZW50L2FjdGl2ZScsXG4gICAgICAgICAgICAgICAgJ2luc3RydW1lbnQvYWN0aXZlQW5kSW5kaWNlcycsXG4gICAgICAgICAgICAgICAgJ2luc3RydW1lbnQvYWN0aXZlSW50ZXJ2YWxzJyxcbiAgICAgICAgICAgICAgICAnaW5zdHJ1bWVudC9jb21wb3NpdGVJbmRleCcsXG4gICAgICAgICAgICAgICAgJ2luc3RydW1lbnQvaW5kaWNlcycsXG4gICAgICAgICAgICAgICAgJ2luc3VyYW5jZScsXG4gICAgICAgICAgICAgICAgJ2xlYWRlcmJvYXJkJyxcbiAgICAgICAgICAgICAgICAnbGlxdWlkYXRpb24nLFxuICAgICAgICAgICAgICAgICdvcmRlckJvb2snLFxuICAgICAgICAgICAgICAgICdvcmRlckJvb2svTDInLFxuICAgICAgICAgICAgICAgICdxdW90ZScsXG4gICAgICAgICAgICAgICAgJ3F1b3RlL2J1Y2tldGVkJyxcbiAgICAgICAgICAgICAgICAnc2NoZW1hJyxcbiAgICAgICAgICAgICAgICAnc2NoZW1hL3dlYnNvY2tldEhlbHAnLFxuICAgICAgICAgICAgICAgICdzZXR0bGVtZW50JyxcbiAgICAgICAgICAgICAgICAnc3RhdHMnLFxuICAgICAgICAgICAgICAgICdzdGF0cy9oaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAndHJhZGUnLFxuICAgICAgICAgICAgICAgICd0cmFkZS9idWNrZXRlZCcsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAncHJpdmF0ZSc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ2FwaUtleScsXG4gICAgICAgICAgICAgICAgJ2NoYXQnLFxuICAgICAgICAgICAgICAgICdjaGF0L2NoYW5uZWxzJyxcbiAgICAgICAgICAgICAgICAnY2hhdC9jb25uZWN0ZWQnLFxuICAgICAgICAgICAgICAgICdleGVjdXRpb24nLFxuICAgICAgICAgICAgICAgICdleGVjdXRpb24vdHJhZGVIaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAnbm90aWZpY2F0aW9uJyxcbiAgICAgICAgICAgICAgICAnb3JkZXInLFxuICAgICAgICAgICAgICAgICdwb3NpdGlvbicsXG4gICAgICAgICAgICAgICAgJ3VzZXInLFxuICAgICAgICAgICAgICAgICd1c2VyL2FmZmlsaWF0ZVN0YXR1cycsXG4gICAgICAgICAgICAgICAgJ3VzZXIvY2hlY2tSZWZlcnJhbENvZGUnLFxuICAgICAgICAgICAgICAgICd1c2VyL2NvbW1pc3Npb24nLFxuICAgICAgICAgICAgICAgICd1c2VyL2RlcG9zaXRBZGRyZXNzJyxcbiAgICAgICAgICAgICAgICAndXNlci9tYXJnaW4nLFxuICAgICAgICAgICAgICAgICd1c2VyL21pbldpdGhkcmF3YWxGZWUnLFxuICAgICAgICAgICAgICAgICd1c2VyL3dhbGxldCcsXG4gICAgICAgICAgICAgICAgJ3VzZXIvd2FsbGV0SGlzdG9yeScsXG4gICAgICAgICAgICAgICAgJ3VzZXIvd2FsbGV0U3VtbWFyeScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2FwaUtleScsXG4gICAgICAgICAgICAgICAgJ2FwaUtleS9kaXNhYmxlJyxcbiAgICAgICAgICAgICAgICAnYXBpS2V5L2VuYWJsZScsXG4gICAgICAgICAgICAgICAgJ2NoYXQnLFxuICAgICAgICAgICAgICAgICdvcmRlcicsXG4gICAgICAgICAgICAgICAgJ29yZGVyL2J1bGsnLFxuICAgICAgICAgICAgICAgICdvcmRlci9jYW5jZWxBbGxBZnRlcicsXG4gICAgICAgICAgICAgICAgJ29yZGVyL2Nsb3NlUG9zaXRpb24nLFxuICAgICAgICAgICAgICAgICdwb3NpdGlvbi9pc29sYXRlJyxcbiAgICAgICAgICAgICAgICAncG9zaXRpb24vbGV2ZXJhZ2UnLFxuICAgICAgICAgICAgICAgICdwb3NpdGlvbi9yaXNrTGltaXQnLFxuICAgICAgICAgICAgICAgICdwb3NpdGlvbi90cmFuc2Zlck1hcmdpbicsXG4gICAgICAgICAgICAgICAgJ3VzZXIvY2FuY2VsV2l0aGRyYXdhbCcsXG4gICAgICAgICAgICAgICAgJ3VzZXIvY29uZmlybUVtYWlsJyxcbiAgICAgICAgICAgICAgICAndXNlci9jb25maXJtRW5hYmxlVEZBJyxcbiAgICAgICAgICAgICAgICAndXNlci9jb25maXJtV2l0aGRyYXdhbCcsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZGlzYWJsZVRGQScsXG4gICAgICAgICAgICAgICAgJ3VzZXIvbG9nb3V0JyxcbiAgICAgICAgICAgICAgICAndXNlci9sb2dvdXRBbGwnLFxuICAgICAgICAgICAgICAgICd1c2VyL3ByZWZlcmVuY2VzJyxcbiAgICAgICAgICAgICAgICAndXNlci9yZXF1ZXN0RW5hYmxlVEZBJyxcbiAgICAgICAgICAgICAgICAndXNlci9yZXF1ZXN0V2l0aGRyYXdhbCcsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ3B1dCc6IFtcbiAgICAgICAgICAgICAgICAnb3JkZXInLFxuICAgICAgICAgICAgICAgICdvcmRlci9idWxrJyxcbiAgICAgICAgICAgICAgICAndXNlcicsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ2RlbGV0ZSc6IFtcbiAgICAgICAgICAgICAgICAnYXBpS2V5JyxcbiAgICAgICAgICAgICAgICAnb3JkZXInLFxuICAgICAgICAgICAgICAgICdvcmRlci9hbGwnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE1hcmtldHMgKCkge1xuICAgICAgICBsZXQgbWFya2V0cyA9IGF3YWl0IHRoaXMucHVibGljR2V0SW5zdHJ1bWVudEFjdGl2ZSAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGxldCBwID0gMDsgcCA8IG1hcmtldHMubGVuZ3RoOyBwKyspIHtcbiAgICAgICAgICAgIGxldCBtYXJrZXQgPSBtYXJrZXRzW3BdO1xuICAgICAgICAgICAgbGV0IGlkID0gbWFya2V0WydzeW1ib2wnXTtcbiAgICAgICAgICAgIGxldCBiYXNlID0gbWFya2V0Wyd1bmRlcmx5aW5nJ107XG4gICAgICAgICAgICBsZXQgcXVvdGUgPSBtYXJrZXRbJ3F1b3RlQ3VycmVuY3knXTtcbiAgICAgICAgICAgIGxldCBpc0Z1dHVyZXNDb250cmFjdCA9IGlkICE9IChiYXNlICsgcXVvdGUpO1xuICAgICAgICAgICAgYmFzZSA9IHRoaXMuY29tbW9uQ3VycmVuY3lDb2RlIChiYXNlKTtcbiAgICAgICAgICAgIHF1b3RlID0gdGhpcy5jb21tb25DdXJyZW5jeUNvZGUgKHF1b3RlKTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBpc0Z1dHVyZXNDb250cmFjdCA/IGlkIDogKGJhc2UgKyAnLycgKyBxdW90ZSk7XG4gICAgICAgICAgICByZXN1bHQucHVzaCAoe1xuICAgICAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICAgICAgICAgICdzeW1ib2wnOiBzeW1ib2wsXG4gICAgICAgICAgICAgICAgJ2Jhc2UnOiBiYXNlLFxuICAgICAgICAgICAgICAgICdxdW90ZSc6IHF1b3RlLFxuICAgICAgICAgICAgICAgICdpbmZvJzogbWFya2V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlR2V0VXNlck1hcmdpbiAoeyAnY3VycmVuY3knOiAnYWxsJyB9KTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiByZXNwb25zZSB9O1xuICAgICAgICBmb3IgKGxldCBiID0gMDsgYiA8IHJlc3BvbnNlLmxlbmd0aDsgYisrKSB7XG4gICAgICAgICAgICBsZXQgYmFsYW5jZSA9IHJlc3BvbnNlW2JdO1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gYmFsYW5jZVsnY3VycmVuY3knXS50b1VwcGVyQ2FzZSAoKTtcbiAgICAgICAgICAgIGN1cnJlbmN5ID0gdGhpcy5jb21tb25DdXJyZW5jeUNvZGUgKGN1cnJlbmN5KTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogYmFsYW5jZVsnYXZhaWxhYmxlTWFyZ2luJ10sXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogYmFsYW5jZVsnYW1vdW50J10sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGN1cnJlbmN5ID09ICdCVEMnKSB7XG4gICAgICAgICAgICAgICAgYWNjb3VudFsnZnJlZSddID0gYWNjb3VudFsnZnJlZSddICogMC4wMDAwMDAwMTtcbiAgICAgICAgICAgICAgICBhY2NvdW50Wyd0b3RhbCddID0gYWNjb3VudFsndG90YWwnXSAqIDAuMDAwMDAwMDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhY2NvdW50Wyd1c2VkJ10gPSBhY2NvdW50Wyd0b3RhbCddIC0gYWNjb3VudFsnZnJlZSddO1xuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IGF3YWl0IHRoaXMucHVibGljR2V0T3JkZXJCb29rTDIgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnc3ltYm9sJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdiaWRzJzogW10sXG4gICAgICAgICAgICAnYXNrcyc6IFtdLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgZm9yIChsZXQgbyA9IDA7IG8gPCBvcmRlcmJvb2subGVuZ3RoOyBvKyspIHtcbiAgICAgICAgICAgIGxldCBvcmRlciA9IG9yZGVyYm9va1tvXTtcbiAgICAgICAgICAgIGxldCBzaWRlID0gKG9yZGVyWydzaWRlJ10gPT0gJ1NlbGwnKSA/ICdhc2tzJyA6ICdiaWRzJztcbiAgICAgICAgICAgIGxldCBhbW91bnQgPSBvcmRlclsnc2l6ZSddO1xuICAgICAgICAgICAgbGV0IHByaWNlID0gb3JkZXJbJ3ByaWNlJ107XG4gICAgICAgICAgICByZXN1bHRbc2lkZV0ucHVzaCAoWyBwcmljZSwgYW1vdW50IF0pO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdFsnYmlkcyddID0gdGhpcy5zb3J0QnkgKHJlc3VsdFsnYmlkcyddLCAwLCB0cnVlKTtcbiAgICAgICAgcmVzdWx0Wydhc2tzJ10gPSB0aGlzLnNvcnRCeSAocmVzdWx0Wydhc2tzJ10sIDApO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXF1ZXN0ID0ge1xuICAgICAgICAgICAgJ3N5bWJvbCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgICAgICAnYmluU2l6ZSc6ICcxZCcsXG4gICAgICAgICAgICAncGFydGlhbCc6IHRydWUsXG4gICAgICAgICAgICAnY291bnQnOiAxLFxuICAgICAgICAgICAgJ3JldmVyc2UnOiB0cnVlLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgcXVvdGVzID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRRdW90ZUJ1Y2tldGVkIChyZXF1ZXN0KTtcbiAgICAgICAgbGV0IHF1b3Rlc0xlbmd0aCA9IHF1b3Rlcy5sZW5ndGg7XG4gICAgICAgIGxldCBxdW90ZSA9IHF1b3Rlc1txdW90ZXNMZW5ndGggLSAxXTtcbiAgICAgICAgbGV0IHRpY2tlcnMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFRyYWRlQnVja2V0ZWQgKHJlcXVlc3QpO1xuICAgICAgICBsZXQgdGlja2VyID0gdGlja2Vyc1swXTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydoaWdoJ10pLFxuICAgICAgICAgICAgJ2xvdyc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbG93J10pLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHF1b3RlWydiaWRQcmljZSddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0IChxdW90ZVsnYXNrUHJpY2UnXSksXG4gICAgICAgICAgICAndndhcCc6IHBhcnNlRmxvYXQgKHRpY2tlclsndndhcCddKSxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogcGFyc2VGbG9hdCAodGlja2VyWydjbG9zZSddKSxcbiAgICAgICAgICAgICdmaXJzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsYXN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaG9tZU5vdGlvbmFsJ10pLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWydmb3JlaWduTm90aW9uYWwnXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0VHJhZGUgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnc3ltYm9sJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdzeW1ib2wnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICAgICAgJ3NpZGUnOiB0aGlzLmNhcGl0YWxpemUgKHNpZGUpLFxuICAgICAgICAgICAgJ29yZGVyUXR5JzogYW1vdW50LFxuICAgICAgICAgICAgJ29yZFR5cGUnOiB0aGlzLmNhcGl0YWxpemUgKHR5cGUpLFxuICAgICAgICB9O1xuICAgICAgICBpZiAodHlwZSA9PSAnbGltaXQnKVxuICAgICAgICAgICAgb3JkZXJbJ3JhdGUnXSA9IHByaWNlO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0T3JkZXIgKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ2lkJzogcmVzcG9uc2VbJ29yZGVySUQnXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVEZWxldGVPcmRlciAoeyAnb3JkZXJJRCc6IGlkIH0pO1xuICAgIH0sXG5cbiAgICByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCBxdWVyeSA9ICcvYXBpLycgKyB0aGlzLnZlcnNpb24gKyAnLycgKyBwYXRoO1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHBhcmFtcykubGVuZ3RoKVxuICAgICAgICAgICAgcXVlcnkgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHBhcmFtcyk7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgcXVlcnk7XG4gICAgICAgIGlmIChhcGkgPT0gJ3ByaXZhdGUnKSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpLnRvU3RyaW5nICgpO1xuICAgICAgICAgICAgaWYgKG1ldGhvZCA9PSAnUE9TVCcpXG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChwYXJhbXMpLmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgYm9keSA9IHRoaXMuanNvbiAocGFyYW1zKTtcbiAgICAgICAgICAgIGxldCByZXF1ZXN0ID0gWyBtZXRob2QsIHF1ZXJ5LCBub25jZSwgYm9keSB8fCAnJ10uam9pbiAoJycpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICdhcGktbm9uY2UnOiBub25jZSxcbiAgICAgICAgICAgICAgICAnYXBpLWtleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgICAgICdhcGktc2lnbmF0dXJlJzogdGhpcy5obWFjICh0aGlzLmVuY29kZSAocmVxdWVzdCksIHRoaXMuZW5jb2RlICh0aGlzLnNlY3JldCkpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGJpdHNvID0ge1xuXG4gICAgJ2lkJzogJ2JpdHNvJyxcbiAgICAnbmFtZSc6ICdCaXRzbycsXG4gICAgJ2NvdW50cmllcyc6ICdNWCcsIC8vIE1leGljb1xuICAgICdyYXRlTGltaXQnOiAyMDAwLCAvLyAzMCByZXF1ZXN0cyBwZXIgbWludXRlXG4gICAgJ3ZlcnNpb24nOiAndjMnLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2MzM1LTcxNWNlN2FhLTVlZDUtMTFlNy04OGE4LTE3M2EyN2JiMzBmZS5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vYXBpLmJpdHNvLmNvbScsXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly9iaXRzby5jb20nLFxuICAgICAgICAnZG9jJzogJ2h0dHBzOi8vYml0c28uY29tL2FwaV9pbmZvJyxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdhdmFpbGFibGVfYm9va3MnLFxuICAgICAgICAgICAgICAgICd0aWNrZXInLFxuICAgICAgICAgICAgICAgICdvcmRlcl9ib29rJyxcbiAgICAgICAgICAgICAgICAndHJhZGVzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnYWNjb3VudF9zdGF0dXMnLFxuICAgICAgICAgICAgICAgICdiYWxhbmNlJyxcbiAgICAgICAgICAgICAgICAnZmVlcycsXG4gICAgICAgICAgICAgICAgJ2Z1bmRpbmdzJyxcbiAgICAgICAgICAgICAgICAnZnVuZGluZ3Mve2ZpZH0nLFxuICAgICAgICAgICAgICAgICdmdW5kaW5nX2Rlc3RpbmF0aW9uJyxcbiAgICAgICAgICAgICAgICAna3ljX2RvY3VtZW50cycsXG4gICAgICAgICAgICAgICAgJ2xlZGdlcicsXG4gICAgICAgICAgICAgICAgJ2xlZGdlci90cmFkZXMnLFxuICAgICAgICAgICAgICAgICdsZWRnZXIvZmVlcycsXG4gICAgICAgICAgICAgICAgJ2xlZGdlci9mdW5kaW5ncycsXG4gICAgICAgICAgICAgICAgJ2xlZGdlci93aXRoZHJhd2FscycsXG4gICAgICAgICAgICAgICAgJ214X2JhbmtfY29kZXMnLFxuICAgICAgICAgICAgICAgICdvcGVuX29yZGVycycsXG4gICAgICAgICAgICAgICAgJ29yZGVyX3RyYWRlcy97b2lkfScsXG4gICAgICAgICAgICAgICAgJ29yZGVycy97b2lkfScsXG4gICAgICAgICAgICAgICAgJ3VzZXJfdHJhZGVzJyxcbiAgICAgICAgICAgICAgICAndXNlcl90cmFkZXMve3RpZH0nLFxuICAgICAgICAgICAgICAgICd3aXRoZHJhd2Fscy8nLFxuICAgICAgICAgICAgICAgICd3aXRoZHJhd2Fscy97d2lkfScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2JpdGNvaW5fd2l0aGRyYXdhbCcsXG4gICAgICAgICAgICAgICAgJ2RlYml0X2NhcmRfd2l0aGRyYXdhbCcsXG4gICAgICAgICAgICAgICAgJ2V0aGVyX3dpdGhkcmF3YWwnLFxuICAgICAgICAgICAgICAgICdvcmRlcnMnLFxuICAgICAgICAgICAgICAgICdwaG9uZV9udW1iZXInLFxuICAgICAgICAgICAgICAgICdwaG9uZV92ZXJpZmljYXRpb24nLFxuICAgICAgICAgICAgICAgICdwaG9uZV93aXRoZHJhd2FsJyxcbiAgICAgICAgICAgICAgICAnc3BlaV93aXRoZHJhd2FsJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAnZGVsZXRlJzogW1xuICAgICAgICAgICAgICAgICdvcmRlcnMve29pZH0nLFxuICAgICAgICAgICAgICAgICdvcmRlcnMvYWxsJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hNYXJrZXRzICgpIHtcbiAgICAgICAgbGV0IG1hcmtldHMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldEF2YWlsYWJsZUJvb2tzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgbWFya2V0c1sncGF5bG9hZCddLmxlbmd0aDsgcCsrKSB7XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gbWFya2V0c1sncGF5bG9hZCddW3BdO1xuICAgICAgICAgICAgbGV0IGlkID0gbWFya2V0Wydib29rJ107XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gaWQudG9VcHBlckNhc2UgKCkucmVwbGFjZSAoJ18nLCAnLycpO1xuICAgICAgICAgICAgbGV0IFsgYmFzZSwgcXVvdGUgXSA9IHN5bWJvbC5zcGxpdCAoJy8nKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoICh7XG4gICAgICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgICAgICAgICAgJ3N5bWJvbCc6IHN5bWJvbCxcbiAgICAgICAgICAgICAgICAnYmFzZSc6IGJhc2UsXG4gICAgICAgICAgICAgICAgJ3F1b3RlJzogcXVvdGUsXG4gICAgICAgICAgICAgICAgJ2luZm8nOiBtYXJrZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVHZXRCYWxhbmNlICgpO1xuICAgICAgICBsZXQgYmFsYW5jZXMgPSByZXNwb25zZVsncGF5bG9hZCddWydiYWxhbmNlcyddO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IHJlc3BvbnNlIH07XG4gICAgICAgIGZvciAobGV0IGIgPSAwOyBiIDwgYmFsYW5jZXMubGVuZ3RoOyBiKyspIHtcbiAgICAgICAgICAgIGxldCBiYWxhbmNlID0gYmFsYW5jZXNbYl07XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBiYWxhbmNlWydjdXJyZW5jeSddLnRvVXBwZXJDYXNlICgpO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiBwYXJzZUZsb2F0IChiYWxhbmNlWydhdmFpbGFibGUnXSksXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiBwYXJzZUZsb2F0IChiYWxhbmNlWydsb2NrZWQnXSksXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogcGFyc2VGbG9hdCAoYmFsYW5jZVsndG90YWwnXSksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRPcmRlckJvb2sgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnYm9vayc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgb3JkZXJib29rID0gcmVzcG9uc2VbJ3BheWxvYWQnXTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMucGFyc2U4NjAxIChvcmRlcmJvb2tbJ3VwZGF0ZWRfYXQnXSk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IFtdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaWRlcyA9IFsgJ2JpZHMnLCAnYXNrcycgXTtcbiAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBzaWRlcy5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1tzXTtcbiAgICAgICAgICAgIGxldCBvcmRlcnMgPSBvcmRlcmJvb2tbc2lkZV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBvcmRlciA9IG9yZGVyc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgcHJpY2UgPSBwYXJzZUZsb2F0IChvcmRlclsncHJpY2UnXSk7XG4gICAgICAgICAgICAgICAgbGV0IGFtb3VudCA9IHBhcnNlRmxvYXQgKG9yZGVyWydhbW91bnQnXSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3NpZGVdLnB1c2ggKFsgcHJpY2UsIGFtb3VudCBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRUaWNrZXIgKHtcbiAgICAgICAgICAgICdib29rJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aWNrZXIgPSByZXNwb25zZVsncGF5bG9hZCddO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5wYXJzZTg2MDEgKHRpY2tlclsnY3JlYXRlZF9hdCddKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2JpZCddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2FzayddKSxcbiAgICAgICAgICAgICd2d2FwJzogcGFyc2VGbG9hdCAodGlja2VyWyd2d2FwJ10pLFxuICAgICAgICAgICAgJ29wZW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbHVtZSddKSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wdWJsaWNHZXRUcmFkZXMgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnYm9vayc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAnYm9vayc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgICAgICAnc2lkZSc6IHNpZGUsXG4gICAgICAgICAgICAndHlwZSc6IHR5cGUsXG4gICAgICAgICAgICAnbWFqb3InOiBhbW91bnQsXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlID09ICdsaW1pdCcpXG4gICAgICAgICAgICBvcmRlclsncHJpY2UnXSA9IHByaWNlO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0T3JkZXJzICh0aGlzLmV4dGVuZCAob3JkZXIsIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXNwb25zZSxcbiAgICAgICAgICAgICdpZCc6IHJlc3BvbnNlWydwYXlsb2FkJ11bJ29pZCddLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJpdmF0ZURlbGV0ZU9yZGVycyAoeyAnb2lkJzogaWQgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gJy8nICsgdGhpcy52ZXJzaW9uICsgJy8nICsgdGhpcy5pbXBsb2RlUGFyYW1zIChwYXRoLCBwYXJhbXMpO1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArIHF1ZXJ5O1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHBhcmFtcykubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocGFyYW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyAocGFyYW1zKS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgYm9keSA9IHRoaXMuanNvbiAocGFyYW1zKTtcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCkudG9TdHJpbmcgKCk7XG4gICAgICAgICAgICBsZXQgcmVxdWVzdCA9IFsgbm9uY2UsIG1ldGhvZCwgcXVlcnksIGJvZHkgfHwgJycgXS5qb2luICgnJyk7XG4gICAgICAgICAgICBsZXQgc2lnbmF0dXJlID0gdGhpcy5obWFjICh0aGlzLmVuY29kZSAocmVxdWVzdCksIHRoaXMuZW5jb2RlICh0aGlzLnNlY3JldCkpO1xuICAgICAgICAgICAgbGV0IGF1dGggPSB0aGlzLmFwaUtleSArICc6JyArIG5vbmNlICsgJzonICsgc2lnbmF0dXJlO1xuICAgICAgICAgICAgaGVhZGVycyA9IHsgJ0F1dGhvcml6YXRpb24nOiBcIkJpdHNvIFwiICsgYXV0aCB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdzdWNjZXNzJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIGlmIChyZXNwb25zZVsnc3VjY2VzcyddKVxuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgYml0c3RhbXAgPSB7XG5cbiAgICAnaWQnOiAnYml0c3RhbXAnLFxuICAgICduYW1lJzogJ0JpdHN0YW1wJyxcbiAgICAnY291bnRyaWVzJzogJ0dCJyxcbiAgICAncmF0ZUxpbWl0JzogMTAwMCxcbiAgICAndmVyc2lvbic6ICd2MicsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc3ODYzNzctOGM4YWI1N2UtNWZlOS0xMWU3LThlYTQtMmIwNWI2YmNjZWVjLmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly93d3cuYml0c3RhbXAubmV0L2FwaScsXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly93d3cuYml0c3RhbXAubmV0JyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL3d3dy5iaXRzdGFtcC5uZXQvYXBpJyxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdvcmRlcl9ib29rL3tpZH0vJyxcbiAgICAgICAgICAgICAgICAndGlja2VyX2hvdXIve2lkfS8nLFxuICAgICAgICAgICAgICAgICd0aWNrZXIve2lkfS8nLFxuICAgICAgICAgICAgICAgICd0cmFuc2FjdGlvbnMve2lkfS8nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnYmFsYW5jZS8nLFxuICAgICAgICAgICAgICAgICdiYWxhbmNlL3tpZH0vJyxcbiAgICAgICAgICAgICAgICAnYnV5L3tpZH0vJyxcbiAgICAgICAgICAgICAgICAnYnV5L21hcmtldC97aWR9LycsXG4gICAgICAgICAgICAgICAgJ2NhbmNlbF9vcmRlci8nLFxuICAgICAgICAgICAgICAgICdsaXF1aWRhdGlvbl9hZGRyZXNzL2luZm8vJyxcbiAgICAgICAgICAgICAgICAnbGlxdWlkYXRpb25fYWRkcmVzcy9uZXcvJyxcbiAgICAgICAgICAgICAgICAnb3Blbl9vcmRlcnMvYWxsLycsXG4gICAgICAgICAgICAgICAgJ29wZW5fb3JkZXJzL3tpZH0vJyxcbiAgICAgICAgICAgICAgICAnc2VsbC97aWR9LycsXG4gICAgICAgICAgICAgICAgJ3NlbGwvbWFya2V0L3tpZH0vJyxcbiAgICAgICAgICAgICAgICAndHJhbnNmZXItZnJvbS1tYWluLycsXG4gICAgICAgICAgICAgICAgJ3RyYW5zZmVyLXRvLW1haW4vJyxcbiAgICAgICAgICAgICAgICAndXNlcl90cmFuc2FjdGlvbnMvJyxcbiAgICAgICAgICAgICAgICAndXNlcl90cmFuc2FjdGlvbnMve2lkfS8nLFxuICAgICAgICAgICAgICAgICd3aXRoZHJhd2FsL2NhbmNlbC8nLFxuICAgICAgICAgICAgICAgICd3aXRoZHJhd2FsL29wZW4vJyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXdhbC9zdGF0dXMvJyxcbiAgICAgICAgICAgICAgICAneHJwX2FkZHJlc3MvJyxcbiAgICAgICAgICAgICAgICAneHJwX3dpdGhkcmF3YWwvJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9VU0QnOiB7ICdpZCc6ICdidGN1c2QnLCAnc3ltYm9sJzogJ0JUQy9VU0QnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnVVNEJyB9LFxuICAgICAgICAnQlRDL0VVUic6IHsgJ2lkJzogJ2J0Y2V1cicsICdzeW1ib2wnOiAnQlRDL0VVUicsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdFVVInIH0sXG4gICAgICAgICdFVVIvVVNEJzogeyAnaWQnOiAnZXVydXNkJywgJ3N5bWJvbCc6ICdFVVIvVVNEJywgJ2Jhc2UnOiAnRVVSJywgJ3F1b3RlJzogJ1VTRCcgfSxcbiAgICAgICAgJ1hSUC9VU0QnOiB7ICdpZCc6ICd4cnB1c2QnLCAnc3ltYm9sJzogJ1hSUC9VU0QnLCAnYmFzZSc6ICdYUlAnLCAncXVvdGUnOiAnVVNEJyB9LFxuICAgICAgICAnWFJQL0VVUic6IHsgJ2lkJzogJ3hycGV1cicsICdzeW1ib2wnOiAnWFJQL0VVUicsICdiYXNlJzogJ1hSUCcsICdxdW90ZSc6ICdFVVInIH0sXG4gICAgICAgICdYUlAvQlRDJzogeyAnaWQnOiAneHJwYnRjJywgJ3N5bWJvbCc6ICdYUlAvQlRDJywgJ2Jhc2UnOiAnWFJQJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ0xUQy9VU0QnOiB7ICdpZCc6ICdsdGN1c2QnLCAnc3ltYm9sJzogJ0xUQy9VU0QnLCAnYmFzZSc6ICdMVEMnLCAncXVvdGUnOiAnVVNEJyB9LFxuICAgICAgICAnTFRDL0VVUic6IHsgJ2lkJzogJ2x0Y2V1cicsICdzeW1ib2wnOiAnTFRDL0VVUicsICdiYXNlJzogJ0xUQycsICdxdW90ZSc6ICdFVVInIH0sXG4gICAgICAgICdMVEMvQlRDJzogeyAnaWQnOiAnbHRjYnRjJywgJ3N5bWJvbCc6ICdMVEMvQlRDJywgJ2Jhc2UnOiAnTFRDJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ0VUSC9VU0QnOiB7ICdpZCc6ICdldGh1c2QnLCAnc3ltYm9sJzogJ0VUSC9VU0QnLCAnYmFzZSc6ICdFVEgnLCAncXVvdGUnOiAnVVNEJyB9LFxuICAgICAgICAnRVRIL0VVUic6IHsgJ2lkJzogJ2V0aGV1cicsICdzeW1ib2wnOiAnRVRIL0VVUicsICdiYXNlJzogJ0VUSCcsICdxdW90ZSc6ICdFVVInIH0sXG4gICAgICAgICdFVEgvQlRDJzogeyAnaWQnOiAnZXRoYnRjJywgJ3N5bWJvbCc6ICdFVEgvQlRDJywgJ2Jhc2UnOiAnRVRIJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IGF3YWl0IHRoaXMucHVibGljR2V0T3JkZXJCb29rSWQgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnaWQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHBhcnNlSW50IChvcmRlcmJvb2tbJ3RpbWVzdGFtcCddKSAqIDEwMDA7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IFtdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaWRlcyA9IFsgJ2JpZHMnLCAnYXNrcycgXTtcbiAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBzaWRlcy5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1tzXTtcbiAgICAgICAgICAgIGxldCBvcmRlcnMgPSBvcmRlcmJvb2tbc2lkZV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBvcmRlciA9IG9yZGVyc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgcHJpY2UgPSBwYXJzZUZsb2F0IChvcmRlclswXSk7XG4gICAgICAgICAgICAgICAgbGV0IGFtb3VudCA9IHBhcnNlRmxvYXQgKG9yZGVyWzFdKTtcbiAgICAgICAgICAgICAgICByZXN1bHRbc2lkZV0ucHVzaCAoWyBwcmljZSwgYW1vdW50IF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgbGV0IHRpY2tlciA9IGF3YWl0IHRoaXMucHVibGljR2V0VGlja2VySWQgKHtcbiAgICAgICAgICAgICdpZCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gcGFyc2VJbnQgKHRpY2tlclsndGltZXN0YW1wJ10pICogMTAwMDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2JpZCddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2FzayddKSxcbiAgICAgICAgICAgICd2d2FwJzogcGFyc2VGbG9hdCAodGlja2VyWyd2d2FwJ10pLFxuICAgICAgICAgICAgJ29wZW4nOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ29wZW4nXSksXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdCddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbHVtZSddKSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBwYXJzZVRyYWRlICh0cmFkZSwgbWFya2V0KSB7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSBwYXJzZUludCAodHJhZGVbJ2RhdGUnXSk7XG4gICAgICAgIGxldCBzaWRlID0gKHRyYWRlWyd0eXBlJ10gPT0gMCkgPyAnYnV5JyA6ICdzZWxsJztcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpZCc6IHRyYWRlWyd0aWQnXS50b1N0cmluZyAoKSxcbiAgICAgICAgICAgICdpbmZvJzogdHJhZGUsXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ3N5bWJvbCc6IG1hcmtldFsnc3ltYm9sJ10sXG4gICAgICAgICAgICAndHlwZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdzaWRlJzogc2lkZSxcbiAgICAgICAgICAgICdwcmljZSc6IHBhcnNlRmxvYXQgKHRyYWRlWydwcmljZSddKSxcbiAgICAgICAgICAgICdhbW91bnQnOiBwYXJzZUZsb2F0ICh0cmFkZVsnYW1vdW50J10pLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgbSA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFRyYW5zYWN0aW9uc0lkICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2lkJzogbVsnaWQnXSxcbiAgICAgICAgICAgICd0aW1lJzogJ21pbnV0ZScsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVRyYWRlcyAocmVzcG9uc2UsIG0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBsZXQgYmFsYW5jZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RCYWxhbmNlICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGJhbGFuY2UgfTtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCB0aGlzLmN1cnJlbmNpZXMubGVuZ3RoOyBjKyspIHtcbiAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IHRoaXMuY3VycmVuY2llc1tjXTtcbiAgICAgICAgICAgIGxldCBsb3dlcmNhc2UgPSBjdXJyZW5jeS50b0xvd2VyQ2FzZSAoKTtcbiAgICAgICAgICAgIGxldCB0b3RhbCA9IGxvd2VyY2FzZSArICdfYmFsYW5jZSc7XG4gICAgICAgICAgICBsZXQgZnJlZSA9IGxvd2VyY2FzZSArICdfYXZhaWxhYmxlJztcbiAgICAgICAgICAgIGxldCB1c2VkID0gbG93ZXJjYXNlICsgJ19yZXNlcnZlZCc7XG4gICAgICAgICAgICBsZXQgYWNjb3VudCA9IHtcbiAgICAgICAgICAgICAgICAnZnJlZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAndXNlZCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAndG90YWwnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGZyZWUgaW4gYmFsYW5jZSlcbiAgICAgICAgICAgICAgICBhY2NvdW50WydmcmVlJ10gPSBwYXJzZUZsb2F0IChiYWxhbmNlW2ZyZWVdKTtcbiAgICAgICAgICAgIGlmICh1c2VkIGluIGJhbGFuY2UpXG4gICAgICAgICAgICAgICAgYWNjb3VudFsndXNlZCddID0gcGFyc2VGbG9hdCAoYmFsYW5jZVt1c2VkXSk7XG4gICAgICAgICAgICBpZiAodG90YWwgaW4gYmFsYW5jZSlcbiAgICAgICAgICAgICAgICBhY2NvdW50Wyd0b3RhbCddID0gcGFyc2VGbG9hdCAoYmFsYW5jZVt0b3RhbF0pO1xuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IG1ldGhvZCA9ICdwcml2YXRlUG9zdCcgKyB0aGlzLmNhcGl0YWxpemUgKHNpZGUpO1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAnaWQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IGFtb3VudCxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHR5cGUgPT0gJ21hcmtldCcpXG4gICAgICAgICAgICBtZXRob2QgKz0gJ01hcmtldCc7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIG9yZGVyWydwcmljZSddID0gcHJpY2U7XG4gICAgICAgIG1ldGhvZCArPSAnSWQnO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzW21ldGhvZF0gKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ2lkJzogcmVzcG9uc2VbJ2lkJ10sXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdENhbmNlbE9yZGVyICh7ICdpZCc6IGlkIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgJy8nICsgdGhpcy52ZXJzaW9uICsgJy8nICsgdGhpcy5pbXBsb2RlUGFyYW1zIChwYXRoLCBwYXJhbXMpO1xuICAgICAgICBsZXQgcXVlcnkgPSB0aGlzLm9taXQgKHBhcmFtcywgdGhpcy5leHRyYWN0UGFyYW1zIChwYXRoKSk7XG4gICAgICAgIGlmIChhcGkgPT0gJ3B1YmxpYycpIHtcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyAocXVlcnkpLmxlbmd0aClcbiAgICAgICAgICAgICAgICB1cmwgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHF1ZXJ5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghdGhpcy51aWQpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEF1dGhlbnRpY2F0aW9uRXJyb3IgKHRoaXMuaWQgKyAnIHJlcXVpcmVzIGAnICsgdGhpcy5pZCArICcudWlkYCBwcm9wZXJ0eSBmb3IgYXV0aGVudGljYXRpb24nKTtcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCkudG9TdHJpbmcgKCk7XG4gICAgICAgICAgICBsZXQgYXV0aCA9IG5vbmNlICsgdGhpcy51aWQgKyB0aGlzLmFwaUtleTtcbiAgICAgICAgICAgIGxldCBzaWduYXR1cmUgPSB0aGlzLmVuY29kZSAodGhpcy5obWFjICh0aGlzLmVuY29kZSAoYXV0aCksIHRoaXMuZW5jb2RlICh0aGlzLnNlY3JldCkpKTtcbiAgICAgICAgICAgIHF1ZXJ5ID0gdGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICAgICAna2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ3NpZ25hdHVyZSc6IHNpZ25hdHVyZS50b1VwcGVyQ2FzZSAoKSxcbiAgICAgICAgICAgICAgICAnbm9uY2UnOiBub25jZSxcbiAgICAgICAgICAgIH0sIHF1ZXJ5KTtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtTGVuZ3RoJzogYm9keS5sZW5ndGgudG9TdHJpbmcgKCksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdzdGF0dXMnIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlWydzdGF0dXMnXSA9PSAnZXJyb3InKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgYml0dHJleCA9IHtcblxuICAgICdpZCc6ICdiaXR0cmV4JyxcbiAgICAnbmFtZSc6ICdCaXR0cmV4JyxcbiAgICAnY291bnRyaWVzJzogJ1VTJyxcbiAgICAndmVyc2lvbic6ICd2MS4xJyxcbiAgICAncmF0ZUxpbWl0JzogMTUwMCxcbiAgICAnaGFzRmV0Y2hUaWNrZXJzJzogdHJ1ZSxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yNzc2NjM1Mi1jZjBiM2MyNi01ZWQ1LTExZTctODJiNy1mMzgyNmI3YTk3ZDguanBnJyxcbiAgICAgICAgJ2FwaSc6ICdodHRwczovL2JpdHRyZXguY29tL2FwaScsXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly9iaXR0cmV4LmNvbScsXG4gICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAnaHR0cHM6Ly9iaXR0cmV4LmNvbS9Ib21lL0FwaScsXG4gICAgICAgICAgICAnaHR0cHM6Ly93d3cubnBtanMub3JnL3BhY2thZ2Uvbm9kZS5iaXR0cmV4LmFwaScsXG4gICAgICAgIF0sXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnY3VycmVuY2llcycsXG4gICAgICAgICAgICAgICAgJ21hcmtldGhpc3RvcnknLFxuICAgICAgICAgICAgICAgICdtYXJrZXRzJyxcbiAgICAgICAgICAgICAgICAnbWFya2V0c3VtbWFyaWVzJyxcbiAgICAgICAgICAgICAgICAnbWFya2V0c3VtbWFyeScsXG4gICAgICAgICAgICAgICAgJ29yZGVyYm9vaycsXG4gICAgICAgICAgICAgICAgJ3RpY2tlcicsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAnYWNjb3VudCc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ2JhbGFuY2UnLFxuICAgICAgICAgICAgICAgICdiYWxhbmNlcycsXG4gICAgICAgICAgICAgICAgJ2RlcG9zaXRhZGRyZXNzJyxcbiAgICAgICAgICAgICAgICAnZGVwb3NpdGhpc3RvcnknLFxuICAgICAgICAgICAgICAgICdvcmRlcicsXG4gICAgICAgICAgICAgICAgJ29yZGVyaGlzdG9yeScsXG4gICAgICAgICAgICAgICAgJ3dpdGhkcmF3YWxoaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXcnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ21hcmtldCc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ2J1eWxpbWl0JyxcbiAgICAgICAgICAgICAgICAnYnV5bWFya2V0JyxcbiAgICAgICAgICAgICAgICAnY2FuY2VsJyxcbiAgICAgICAgICAgICAgICAnb3Blbm9yZGVycycsXG4gICAgICAgICAgICAgICAgJ3NlbGxsaW1pdCcsXG4gICAgICAgICAgICAgICAgJ3NlbGxtYXJrZXQnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hNYXJrZXRzICgpIHtcbiAgICAgICAgbGV0IG1hcmtldHMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgcCA9IDA7IHAgPCBtYXJrZXRzWydyZXN1bHQnXS5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IG1hcmtldHNbJ3Jlc3VsdCddW3BdO1xuICAgICAgICAgICAgbGV0IGlkID0gbWFya2V0WydNYXJrZXROYW1lJ107XG4gICAgICAgICAgICBsZXQgYmFzZSA9IG1hcmtldFsnTWFya2V0Q3VycmVuY3knXTtcbiAgICAgICAgICAgIGxldCBxdW90ZSA9IG1hcmtldFsnQmFzZUN1cnJlbmN5J107XG4gICAgICAgICAgICBiYXNlID0gdGhpcy5jb21tb25DdXJyZW5jeUNvZGUgKGJhc2UpO1xuICAgICAgICAgICAgcXVvdGUgPSB0aGlzLmNvbW1vbkN1cnJlbmN5Q29kZSAocXVvdGUpO1xuICAgICAgICAgICAgbGV0IHN5bWJvbCA9IGJhc2UgKyAnLycgKyBxdW90ZTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoICh7XG4gICAgICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgICAgICAgICAgJ3N5bWJvbCc6IHN5bWJvbCxcbiAgICAgICAgICAgICAgICAnYmFzZSc6IGJhc2UsXG4gICAgICAgICAgICAgICAgJ3F1b3RlJzogcXVvdGUsXG4gICAgICAgICAgICAgICAgJ2luZm8nOiBtYXJrZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmFjY291bnRHZXRCYWxhbmNlcyAoKTtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gcmVzcG9uc2VbJ3Jlc3VsdCddO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGJhbGFuY2VzIH07XG4gICAgICAgIGxldCBpbmRleGVkID0gdGhpcy5pbmRleEJ5IChiYWxhbmNlcywgJ0N1cnJlbmN5Jyk7XG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgdGhpcy5jdXJyZW5jaWVzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSB0aGlzLmN1cnJlbmNpZXNbY107XG4gICAgICAgICAgICBsZXQgYWNjb3VudCA9IHtcbiAgICAgICAgICAgICAgICAnZnJlZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAndXNlZCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAndG90YWwnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGN1cnJlbmN5IGluIGluZGV4ZWQpIHtcbiAgICAgICAgICAgICAgICBsZXQgYmFsYW5jZSA9IGluZGV4ZWRbY3VycmVuY3ldO1xuICAgICAgICAgICAgICAgIGFjY291bnRbJ2ZyZWUnXSA9IGJhbGFuY2VbJ0F2YWlsYWJsZSddO1xuICAgICAgICAgICAgICAgIGFjY291bnRbJ3VzZWQnXSA9IGJhbGFuY2VbJ0JhbGFuY2UnXSAtIGJhbGFuY2VbJ0F2YWlsYWJsZSddO1xuICAgICAgICAgICAgICAgIGFjY291bnRbJ3RvdGFsJ10gPSBiYWxhbmNlWydCYWxhbmNlJ107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBwYXJzZUJpZEFzayAoYmlkYXNrKSB7XG4gICAgICAgIGxldCBwcmljZSA9IHBhcnNlRmxvYXQgKGJpZGFza1snUmF0ZSddKTtcbiAgICAgICAgbGV0IGFtb3VudCA9IHBhcnNlRmxvYXQgKGJpZGFza1snUXVhbnRpdHknXSk7XG4gICAgICAgIHJldHVybiBbIHByaWNlLCBhbW91bnQgXTtcbiAgICB9LFxuXG4gICAgcGFyc2VCaWRBc2tzIChiaWRhc2tzKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiaWRhc2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCAodGhpcy5wYXJzZUJpZEFzayAoYmlkYXNrc1tpXSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0T3JkZXJib29rICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ21hcmtldCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgICAgICAndHlwZSc6ICdib3RoJyxcbiAgICAgICAgICAgICdkZXB0aCc6IDUwLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IHJlc3BvbnNlWydyZXN1bHQnXTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSB7ICdiaWRzJzogJ2J1eScsICdhc2tzJzogJ3NlbGwnIH07XG4gICAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMgKHNpZGVzKTtcbiAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBrZXlzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICBsZXQga2V5ID0ga2V5c1trXTtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNba2V5XTtcbiAgICAgICAgICAgIHJlc3VsdFtrZXldID0gdGhpcy5wYXJzZUJpZEFza3MgKG9yZGVyYm9va1tzaWRlXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgcGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KSB7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLnBhcnNlODYwMSAodGlja2VyWydUaW1lU3RhbXAnXSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ0hpZ2gnXSksXG4gICAgICAgICAgICAnbG93JzogcGFyc2VGbG9hdCAodGlja2VyWydMb3cnXSksXG4gICAgICAgICAgICAnYmlkJzogcGFyc2VGbG9hdCAodGlja2VyWydCaWQnXSksXG4gICAgICAgICAgICAnYXNrJzogcGFyc2VGbG9hdCAodGlja2VyWydBc2snXSksXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ0xhc3QnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWydCYXNlVm9sdW1lJ10pLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWydWb2x1bWUnXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXJzICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRNYXJrZXRzdW1tYXJpZXMgKCk7XG4gICAgICAgIGxldCB0aWNrZXJzID0gcmVzcG9uc2VbJ3Jlc3VsdCddO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge307XG4gICAgICAgIGZvciAobGV0IHQgPSAwOyB0IDwgdGlja2Vycy5sZW5ndGg7IHQrKykge1xuICAgICAgICAgICAgbGV0IHRpY2tlciA9IHRpY2tlcnNbdF07XG4gICAgICAgICAgICBsZXQgaWQgPSB0aWNrZXJbJ01hcmtldE5hbWUnXTtcbiAgICAgICAgICAgIGxldCBtYXJrZXQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gaWQ7XG4gICAgICAgICAgICBpZiAoaWQgaW4gdGhpcy5tYXJrZXRzX2J5X2lkKSB7XG4gICAgICAgICAgICAgICAgbWFya2V0ID0gdGhpcy5tYXJrZXRzX2J5X2lkW2lkXTtcbiAgICAgICAgICAgICAgICBzeW1ib2wgPSBtYXJrZXRbJ3N5bWJvbCddO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsZXQgWyBxdW90ZSwgYmFzZSBdID0gaWQuc3BsaXQgKCctJyk7XG4gICAgICAgICAgICAgICAgYmFzZSA9IHRoaXMuY29tbW9uQ3VycmVuY3lDb2RlIChiYXNlKTtcbiAgICAgICAgICAgICAgICBxdW90ZSA9IHRoaXMuY29tbW9uQ3VycmVuY3lDb2RlIChxdW90ZSk7XG4gICAgICAgICAgICAgICAgc3ltYm9sID0gYmFzZSArICcvJyArIHF1b3RlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0W3N5bWJvbF0gPSB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIG1hcmtldCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgbSA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldE1hcmtldHN1bW1hcnkgKHtcbiAgICAgICAgICAgICdtYXJrZXQnOiBtWydpZCddLFxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IHRpY2tlciA9IHJlc3BvbnNlWydyZXN1bHQnXVswXTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VUaWNrZXIgKHRpY2tlciwgbSk7XG4gICAgfSxcblxuICAgIHBhcnNlVHJhZGUgKHRyYWRlLCBtYXJrZXQgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMucGFyc2U4NjAxICh0cmFkZVsnVGltZVN0YW1wJ10pO1xuICAgICAgICBsZXQgc2lkZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHRyYWRlWydPcmRlclR5cGUnXSA9PSAnQlVZJykge1xuICAgICAgICAgICAgc2lkZSA9ICdidXknO1xuICAgICAgICB9IGVsc2UgaWYgKHRyYWRlWydPcmRlclR5cGUnXSA9PSAnU0VMTCcpIHtcbiAgICAgICAgICAgIHNpZGUgPSAnc2VsbCc7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHR5cGUgPSB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaWQnOiB0cmFkZVsnSWQnXS50b1N0cmluZyAoKSxcbiAgICAgICAgICAgICdpbmZvJzogdHJhZGUsXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ3N5bWJvbCc6IG1hcmtldFsnc3ltYm9sJ10sXG4gICAgICAgICAgICAndHlwZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdzaWRlJzogc2lkZSxcbiAgICAgICAgICAgICdwcmljZSc6IHRyYWRlWydQcmljZSddLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IHRyYWRlWydRdWFudGl0eSddLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgbSA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldE1hcmtldGhpc3RvcnkgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnbWFya2V0JzogbVsnaWQnXSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlVHJhZGVzIChyZXNwb25zZVsncmVzdWx0J10sIG0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE15T3Blbk9yZGVycyAobWFya2V0ID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgbSA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0UmV0dXJuT3Blbk9yZGVycyAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdjdXJyZW5jeVBhaXInOiBtWydpZCddLFxuICAgICAgICB9KSk7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlT3JkZXJzIChyZXNwb25zZVsncmVzdWx0J10sIG1hcmtldCk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBtZXRob2QgPSAnbWFya2V0R2V0JyArIHRoaXMuY2FwaXRhbGl6ZSAoc2lkZSkgKyB0eXBlO1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAnbWFya2V0JzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICdxdWFudGl0eSc6IGFtb3VudCxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHR5cGUgPT0gJ2xpbWl0JylcbiAgICAgICAgICAgIG9yZGVyWydyYXRlJ10gPSBwcmljZTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpc1ttZXRob2RdICh0aGlzLmV4dGVuZCAob3JkZXIsIHBhcmFtcykpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXNwb25zZSxcbiAgICAgICAgICAgICdpZCc6IHJlc3BvbnNlWydyZXN1bHQnXVsndXVpZCddLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFya2V0R2V0Q2FuY2VsICh7ICd1dWlkJzogaWQgfSk7XG4gICAgfSxcblxuICAgIHBhcnNlT3JkZXIgKG9yZGVyLCBtYXJrZXQgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHNpZGUgPSAob3JkZXJbJ1R5cGUnXSA9PSAnTElNSVRfQlVZJykgPyAnYnV5JyA6ICdzZWxsJztcbiAgICAgICAgbGV0IG9wZW4gPSBvcmRlclsnSXNPcGVuJ107XG4gICAgICAgIGxldCBjYW5jZWxlZCA9IG9yZGVyWydDYW5jZWxJbml0aWF0ZWQnXTtcbiAgICAgICAgbGV0IHN0YXR1cyA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKG9wZW4pIHtcbiAgICAgICAgICAgIHN0YXR1cyA9ICdvcGVuJztcbiAgICAgICAgfSBlbHNlIGlmIChjYW5jZWxlZCkge1xuICAgICAgICAgICAgc3RhdHVzID0gJ2NhbmNlbGVkJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0YXR1cyA9ICdjbG9zZWQnO1xuICAgICAgICB9XG4gICAgICAgIGxldCBzeW1ib2wgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChtYXJrZXQpIHtcbiAgICAgICAgICAgIHN5bWJvbCA9IG1hcmtldFsnc3ltYm9sJ107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgZXhjaGFuZ2UgPSBvcmRlclsnRXhjaGFuZ2UnXTtcbiAgICAgICAgICAgIGlmIChleGNoYW5nZSBpbiB0aGlzLm1hcmtldHNfYnlfaWQpIHtcbiAgICAgICAgICAgICAgICBtYXJrZXQgPSB0aGlzLm1hcmtldHNfYnlfaWRbZXhjaGFuZ2VdO1xuICAgICAgICAgICAgICAgIHN5bWJvbCA9IFsnc3ltYm9sJ107XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMucGFyc2U4NjAxIChvcmRlclsnT3BlbmVkJ10pO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2luZm8nOiBvcmRlcixcbiAgICAgICAgICAgICdpZCc6IG9yZGVyWydPcmRlclV1aWQnXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgJ3R5cGUnOiAnbGltaXQnLFxuICAgICAgICAgICAgJ3NpZGUnOiBzaWRlLFxuICAgICAgICAgICAgJ3ByaWNlJzogb3JkZXJbJ1ByaWNlUGVyVW5pdCddLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IG9yZGVyWydRdWFudGl0eSddLFxuICAgICAgICAgICAgJ3JlbWFpbmluZyc6IG9yZGVyWydRdWFudGl0eVJlbWFpbmluZyddLFxuICAgICAgICAgICAgJ3N0YXR1cyc6IHN0YXR1cyxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlciAoaWQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5hY2NvdW50R2V0T3JkZXIgKHsgJ3V1aWQnOiBpZCB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VPcmRlciAocmVzcG9uc2VbJ3Jlc3VsdCddKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArICcvJyArIHRoaXMudmVyc2lvbiArICcvJztcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgdXJsICs9IGFwaSArICcvJyArIG1ldGhvZC50b0xvd2VyQ2FzZSAoKSArIHBhdGg7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHBhcmFtcykubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocGFyYW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCk7XG4gICAgICAgICAgICB1cmwgKz0gYXBpICsgJy8nO1xuICAgICAgICAgICAgaWYgKCgoYXBpID09ICdhY2NvdW50JykgJiYgKHBhdGggIT0gJ3dpdGhkcmF3JykpIHx8IChwYXRoID09ICdvcGVub3JkZXJzJykpXG4gICAgICAgICAgICAgICAgdXJsICs9IG1ldGhvZC50b0xvd2VyQ2FzZSAoKTtcbiAgICAgICAgICAgIHVybCArPSBwYXRoICsgJz8nICsgdGhpcy51cmxlbmNvZGUgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAgICAgJ25vbmNlJzogbm9uY2UsXG4gICAgICAgICAgICAgICAgJ2FwaWtleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgICAgICBsZXQgc2lnbmF0dXJlID0gdGhpcy5obWFjICh0aGlzLmVuY29kZSAodXJsKSwgdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSwgJ3NoYTUxMicpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHsgJ2FwaXNpZ24nOiBzaWduYXR1cmUgfTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgICAgIGlmICgnc3VjY2VzcycgaW4gcmVzcG9uc2UpXG4gICAgICAgICAgICBpZiAocmVzcG9uc2VbJ3N1Y2Nlc3MnXSlcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGJsaW5rdHJhZGUgPSB7XG5cbiAgICAnaWQnOiAnYmxpbmt0cmFkZScsXG4gICAgJ25hbWUnOiAnQmxpbmtUcmFkZScsXG4gICAgJ2NvdW50cmllcyc6IFsgJ1VTJywgJ1ZFJywgJ1ZOJywgJ0JSJywgJ1BLJywgJ0NMJyBdLFxuICAgICdyYXRlTGltaXQnOiAxMDAwLFxuICAgICd2ZXJzaW9uJzogJ3YxJyxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yNzk5MDk2OC03NWQ5Yzg4NC02NDcwLTExZTctOTA3My00Njc1NmM4ZTdlOGMuanBnJyxcbiAgICAgICAgJ2FwaSc6IHtcbiAgICAgICAgICAgICdwdWJsaWMnOiAnaHR0cHM6Ly9hcGkuYmxpbmt0cmFkZS5jb20vYXBpJyxcbiAgICAgICAgICAgICdwcml2YXRlJzogJ2h0dHBzOi8vYXBpLmJsaW5rdHJhZGUuY29tL3RhcGknLFxuICAgICAgICB9LFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vYmxpbmt0cmFkZS5jb20nLFxuICAgICAgICAnZG9jJzogJ2h0dHBzOi8vYmxpbmt0cmFkZS5jb20vZG9jcycsXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAne2N1cnJlbmN5fS90aWNrZXInLCAgICAvLyA/Y3J5cHRvX2N1cnJlbmN5PUJUQ1xuICAgICAgICAgICAgICAgICd7Y3VycmVuY3l9L29yZGVyYm9vaycsIC8vID9jcnlwdG9fY3VycmVuY3k9QlRDXG4gICAgICAgICAgICAgICAgJ3tjdXJyZW5jeX0vdHJhZGVzJywgICAgLy8gP2NyeXB0b19jdXJyZW5jeT1CVEMmc2luY2U9PFRJTUVTVEFNUD4mbGltaXQ9PE5VTUJFUj5cbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ0QnLCAgIC8vIG9yZGVyXG4gICAgICAgICAgICAgICAgJ0YnLCAgIC8vIGNhbmNlbCBvcmRlclxuICAgICAgICAgICAgICAgICdVMicsICAvLyBiYWxhbmNlXG4gICAgICAgICAgICAgICAgJ1U0JywgIC8vIG15IG9yZGVyc1xuICAgICAgICAgICAgICAgICdVNicsICAvLyB3aXRoZHJhd1xuICAgICAgICAgICAgICAgICdVMTgnLCAvLyBkZXBvc2l0XG4gICAgICAgICAgICAgICAgJ1UyNCcsIC8vIGNvbmZpcm0gd2l0aGRyYXdhbFxuICAgICAgICAgICAgICAgICdVMjYnLCAvLyBsaXN0IHdpdGhkcmF3YWxzXG4gICAgICAgICAgICAgICAgJ1UzMCcsIC8vIGxpc3QgZGVwb3NpdHNcbiAgICAgICAgICAgICAgICAnVTM0JywgLy8gbGVkZ2VyXG4gICAgICAgICAgICAgICAgJ1U3MCcsIC8vIGNhbmNlbCB3aXRoZHJhd2FsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgJ21hcmtldHMnOiB7XG4gICAgICAgICdCVEMvVkVGJzogeyAnaWQnOiAnQlRDVkVGJywgJ3N5bWJvbCc6ICdCVEMvVkVGJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ1ZFRicsICdicm9rZXJJZCc6IDEsICdicm9rZXInOiAnU3VyQml0Y29pbicgfSxcbiAgICAgICAgJ0JUQy9WTkQnOiB7ICdpZCc6ICdCVENWTkQnLCAnc3ltYm9sJzogJ0JUQy9WTkQnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnVk5EJywgJ2Jyb2tlcklkJzogMywgJ2Jyb2tlcic6ICdWQlRDJyB9LFxuICAgICAgICAnQlRDL0JSTCc6IHsgJ2lkJzogJ0JUQ0JSTCcsICdzeW1ib2wnOiAnQlRDL0JSTCcsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdCUkwnLCAnYnJva2VySWQnOiA0LCAnYnJva2VyJzogJ0ZveEJpdCcgfSxcbiAgICAgICAgJ0JUQy9QS1InOiB7ICdpZCc6ICdCVENQS1InLCAnc3ltYm9sJzogJ0JUQy9QS1InLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnUEtSJywgJ2Jyb2tlcklkJzogOCwgJ2Jyb2tlcic6ICdVcmR1Qml0JyB9LFxuICAgICAgICAnQlRDL0NMUCc6IHsgJ2lkJzogJ0JUQ0NMUCcsICdzeW1ib2wnOiAnQlRDL0NMUCcsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdDTFAnLCAnYnJva2VySWQnOiA5LCAnYnJva2VyJzogJ0NoaWxlQml0JyB9LFxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdFUyICh7XG4gICAgICAgICAgICAnQmFsYW5jZVJlcUlEJzogdGhpcy5ub25jZSAoKSxcbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSBhd2FpdCB0aGlzLnB1YmxpY0dldEN1cnJlbmN5T3JkZXJib29rICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2N1cnJlbmN5JzogcFsncXVvdGUnXSxcbiAgICAgICAgICAgICdjcnlwdG9fY3VycmVuY3knOiBwWydiYXNlJ10sXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IFtdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaWRlcyA9IFsgJ2JpZHMnLCAnYXNrcycgXTtcbiAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBzaWRlcy5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1tzXTtcbiAgICAgICAgICAgIGxldCBvcmRlcnMgPSBvcmRlcmJvb2tbc2lkZV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBvcmRlciA9IG9yZGVyc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgcHJpY2UgPSBwYXJzZUZsb2F0IChvcmRlclswXSk7XG4gICAgICAgICAgICAgICAgbGV0IGFtb3VudCA9IHBhcnNlRmxvYXQgKG9yZGVyWzFdKTtcbiAgICAgICAgICAgICAgICByZXN1bHRbc2lkZV0ucHVzaCAoWyBwcmljZSwgYW1vdW50IF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHRpY2tlciA9IGF3YWl0IHRoaXMucHVibGljR2V0Q3VycmVuY3lUaWNrZXIgKHtcbiAgICAgICAgICAgICdjdXJyZW5jeSc6IHBbJ3F1b3RlJ10sXG4gICAgICAgICAgICAnY3J5cHRvX2N1cnJlbmN5JzogcFsnYmFzZSddLFxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgbG93ZXJjYXNlUXVvdGUgPSBwWydxdW90ZSddLnRvTG93ZXJDYXNlICgpO1xuICAgICAgICBsZXQgcXVvdGVWb2x1bWUgPSAndm9sXycgKyBsb3dlcmNhc2VRdW90ZTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2J1eSddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3NlbGwnXSksXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xhc3QnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWyd2b2wnXSksXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbcXVvdGVWb2x1bWVdKSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICByZXR1cm4gdGhpcy5wdWJsaWNHZXRDdXJyZW5jeVRyYWRlcyAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdjdXJyZW5jeSc6IHBbJ3F1b3RlJ10sXG4gICAgICAgICAgICAnY3J5cHRvX2N1cnJlbmN5JzogcFsnYmFzZSddLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgaWYgKHR5cGUgPT0gJ21hcmtldCcpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgYWxsb3dzIGxpbWl0IG9yZGVycyBvbmx5Jyk7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdDbE9yZElEJzogdGhpcy5ub25jZSAoKSxcbiAgICAgICAgICAgICdTeW1ib2wnOiBwWydpZCddLFxuICAgICAgICAgICAgJ1NpZGUnOiB0aGlzLmNhcGl0YWxpemUgKHNpZGUpLFxuICAgICAgICAgICAgJ09yZFR5cGUnOiAyLFxuICAgICAgICAgICAgJ1ByaWNlJzogcHJpY2UsXG4gICAgICAgICAgICAnT3JkZXJRdHknOiBhbW91bnQsXG4gICAgICAgICAgICAnQnJva2VySUQnOiBwWydicm9rZXJJZCddLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0RCAodGhpcy5leHRlbmQgKG9yZGVyLCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnT3JkZXJJRCddLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0RiAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdDbE9yZElEJzogaWQsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddW2FwaV0gKyAnLycgKyB0aGlzLnZlcnNpb24gKyAnLycgKyB0aGlzLmltcGxvZGVQYXJhbXMgKHBhdGgsIHBhcmFtcyk7XG4gICAgICAgIGxldCBxdWVyeSA9IHRoaXMub21pdCAocGFyYW1zLCB0aGlzLmV4dHJhY3RQYXJhbXMgKHBhdGgpKTtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChxdWVyeSkubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG5vbmNlID0gdGhpcy5ub25jZSAoKS50b1N0cmluZyAoKTtcbiAgICAgICAgICAgIGxldCByZXF1ZXN0ID0gdGhpcy5leHRlbmQgKHsgJ01zZ1R5cGUnOiBwYXRoIH0sIHF1ZXJ5KTtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLmpzb24gKHJlcXVlc3QpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQVBJS2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ05vbmNlJzogbm9uY2UsXG4gICAgICAgICAgICAgICAgJ1NpZ25hdHVyZSc6IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKG5vbmNlKSwgdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSksXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBibDNwID0ge1xuXG4gICAgJ2lkJzogJ2JsM3AnLFxuICAgICduYW1lJzogJ0JMM1AnLFxuICAgICdjb3VudHJpZXMnOiBbICdOTCcsICdFVScgXSwgLy8gTmV0aGVybGFuZHMsIEVVXG4gICAgJ3JhdGVMaW1pdCc6IDEwMDAsXG4gICAgJ3ZlcnNpb24nOiAnMScsXG4gICAgJ2NvbW1lbnQnOiAnQW4gZXhjaGFuZ2UgbWFya2V0IGJ5IEJpdG9uaWNOTCcsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjg1MDE3NTItNjBjMjFiODItNmZlYi0xMWU3LTgxOGItMDU1ZWU2ZDBlNzU0LmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly9hcGkuYmwzcC5ldScsXG4gICAgICAgICd3d3cnOiBbXG4gICAgICAgICAgICAnaHR0cHM6Ly9ibDNwLmV1JyxcbiAgICAgICAgICAgICdodHRwczovL2JpdG9uaWMubmwnLFxuICAgICAgICBdLFxuICAgICAgICAnZG9jJzogW1xuICAgICAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS9CaXRvbmljTkwvYmwzcC1hcGkvdHJlZS9tYXN0ZXIvZG9jcycsXG4gICAgICAgICAgICAnaHR0cHM6Ly9ibDNwLmV1L2FwaScsXG4gICAgICAgICAgICAnaHR0cHM6Ly9iaXRvbmljLm5sL2VuL2FwaScsXG4gICAgICAgIF0sXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAne21hcmtldH0vdGlja2VyJyxcbiAgICAgICAgICAgICAgICAne21hcmtldH0vb3JkZXJib29rJyxcbiAgICAgICAgICAgICAgICAne21hcmtldH0vdHJhZGVzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ3ttYXJrZXR9L21vbmV5L2RlcHRoL2Z1bGwnLFxuICAgICAgICAgICAgICAgICd7bWFya2V0fS9tb25leS9vcmRlci9hZGQnLFxuICAgICAgICAgICAgICAgICd7bWFya2V0fS9tb25leS9vcmRlci9jYW5jZWwnLFxuICAgICAgICAgICAgICAgICd7bWFya2V0fS9tb25leS9vcmRlci9yZXN1bHQnLFxuICAgICAgICAgICAgICAgICd7bWFya2V0fS9tb25leS9vcmRlcnMnLFxuICAgICAgICAgICAgICAgICd7bWFya2V0fS9tb25leS9vcmRlcnMvaGlzdG9yeScsXG4gICAgICAgICAgICAgICAgJ3ttYXJrZXR9L21vbmV5L3RyYWRlcy9mZXRjaCcsXG4gICAgICAgICAgICAgICAgJ0dFTk1LVC9tb25leS9pbmZvJyxcbiAgICAgICAgICAgICAgICAnR0VOTUtUL21vbmV5L2RlcG9zaXRfYWRkcmVzcycsXG4gICAgICAgICAgICAgICAgJ0dFTk1LVC9tb25leS9uZXdfZGVwb3NpdF9hZGRyZXNzJyxcbiAgICAgICAgICAgICAgICAnR0VOTUtUL21vbmV5L3dhbGxldC9oaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAnR0VOTUtUL21vbmV5L3dpdGhkcmF3JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9FVVInOiB7ICdpZCc6ICdCVENFVVInLCAnc3ltYm9sJzogJ0JUQy9FVVInLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnRVVSJyB9LFxuICAgICAgICAnTFRDL0VVUic6IHsgJ2lkJzogJ0xUQ0VVUicsICdzeW1ib2wnOiAnTFRDL0VVUicsICdiYXNlJzogJ0xUQycsICdxdW90ZSc6ICdFVVInIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RHRU5NS1RNb25leUluZm8gKCk7XG4gICAgICAgIGxldCBkYXRhID0gcmVzcG9uc2VbJ2RhdGEnXTtcbiAgICAgICAgbGV0IGJhbGFuY2UgPSBkYXRhWyd3YWxsZXRzJ107XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogZGF0YSB9O1xuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IHRoaXMuY3VycmVuY2llcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gdGhpcy5jdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChjdXJyZW5jeSBpbiBiYWxhbmNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCdhdmFpbGFibGUnIGluIGJhbGFuY2VbY3VycmVuY3ldKSB7XG4gICAgICAgICAgICAgICAgICAgIGFjY291bnRbJ2ZyZWUnXSA9IHBhcnNlRmxvYXQgKGJhbGFuY2VbY3VycmVuY3ldWydhdmFpbGFibGUnXVsndmFsdWUnXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGN1cnJlbmN5IGluIGJhbGFuY2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoJ2JhbGFuY2UnIGluIGJhbGFuY2VbY3VycmVuY3ldKSB7XG4gICAgICAgICAgICAgICAgICAgIGFjY291bnRbJ3RvdGFsJ10gPSBwYXJzZUZsb2F0IChiYWxhbmNlW2N1cnJlbmN5XVsnYmFsYW5jZSddWyd2YWx1ZSddKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYWNjb3VudFsndG90YWwnXSkge1xuICAgICAgICAgICAgICAgIGlmIChhY2NvdW50WydmcmVlJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgYWNjb3VudFsndXNlZCddID0gYWNjb3VudFsndG90YWwnXSAtIGFjY291bnRbJ2ZyZWUnXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldE1hcmtldE9yZGVyYm9vayAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdtYXJrZXQnOiBwWydpZCddLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IHJlc3BvbnNlWydkYXRhJ107XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdiaWRzJzogW10sXG4gICAgICAgICAgICAnYXNrcyc6IFtdLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHNpZGVzID0gWyAnYmlkcycsICdhc2tzJyBdO1xuICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IHNpZGVzLmxlbmd0aDsgcysrKSB7XG4gICAgICAgICAgICBsZXQgc2lkZSA9IHNpZGVzW3NdO1xuICAgICAgICAgICAgbGV0IG9yZGVycyA9IG9yZGVyYm9va1tzaWRlXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9yZGVyID0gb3JkZXJzW2ldO1xuICAgICAgICAgICAgICAgIGxldCBwcmljZSA9IG9yZGVyWydwcmljZV9pbnQnXSAvIDEwMDAwMDtcbiAgICAgICAgICAgICAgICBsZXQgYW1vdW50ID0gb3JkZXJbJ2Ftb3VudF9pbnQnXSAvIDEwMDAwMDAwMDtcbiAgICAgICAgICAgICAgICByZXN1bHRbc2lkZV0ucHVzaCAoWyBwcmljZSwgYW1vdW50IF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgbGV0IHRpY2tlciA9IGF3YWl0IHRoaXMucHVibGljR2V0TWFya2V0VGlja2VyICh7XG4gICAgICAgICAgICAnbWFya2V0JzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aWNrZXJbJ3RpbWVzdGFtcCddICogMTAwMDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2JpZCddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2FzayddKSxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdCddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbHVtZSddWycyNGgnXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0TWFya2V0VHJhZGVzICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ21hcmtldCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAnbWFya2V0JzogcFsnaWQnXSxcbiAgICAgICAgICAgICdhbW91bnRfaW50JzogYW1vdW50LFxuICAgICAgICAgICAgJ2ZlZV9jdXJyZW5jeSc6IHBbJ3F1b3RlJ10sXG4gICAgICAgICAgICAndHlwZSc6IChzaWRlID09ICdidXknKSA/ICdiaWQnIDogJ2FzaycsXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlID09ICdsaW1pdCcpXG4gICAgICAgICAgICBvcmRlclsncHJpY2VfaW50J10gPSBwcmljZTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdE1hcmtldE1vbmV5T3JkZXJBZGQgKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ2lkJzogcmVzcG9uc2VbJ29yZGVyX2lkJ10udG9TdHJpbmcgKCksXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdE1hcmtldE1vbmV5T3JkZXJDYW5jZWwgKHsgJ29yZGVyX2lkJzogaWQgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHJlcXVlc3QgPSB0aGlzLmltcGxvZGVQYXJhbXMgKHBhdGgsIHBhcmFtcyk7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgJy8nICsgdGhpcy52ZXJzaW9uICsgJy8nICsgcmVxdWVzdDtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5vbWl0IChwYXJhbXMsIHRoaXMuZXh0cmFjdFBhcmFtcyAocGF0aCkpO1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHF1ZXJ5KS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChxdWVyeSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpO1xuICAgICAgICAgICAgYm9keSA9IHRoaXMudXJsZW5jb2RlICh0aGlzLmV4dGVuZCAoeyAnbm9uY2UnOiBub25jZSB9LCBxdWVyeSkpO1xuICAgICAgICAgICAgbGV0IHNlY3JldCA9IHRoaXMuYmFzZTY0VG9CaW5hcnkgKHRoaXMuc2VjcmV0KTtcbiAgICAgICAgICAgIGxldCBhdXRoID0gcmVxdWVzdCArIFwiXFwwXCIgKyBib2R5O1xuICAgICAgICAgICAgbGV0IHNpZ25hdHVyZSA9IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKGF1dGgpLCBzZWNyZXQsICdzaGE1MTInLCAnYmFzZTY0Jyk7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICAgICAgICAnQ29udGVudC1MZW5ndGgnOiBib2R5Lmxlbmd0aCxcbiAgICAgICAgICAgICAgICAnUmVzdC1LZXknOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgICAgICAnUmVzdC1TaWduJzogc2lnbmF0dXJlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGJ0Y2NoaW5hID0ge1xuXG4gICAgJ2lkJzogJ2J0Y2NoaW5hJyxcbiAgICAnbmFtZSc6ICdCVENDaGluYScsXG4gICAgJ2NvdW50cmllcyc6ICdDTicsXG4gICAgJ3JhdGVMaW1pdCc6IDE1MDAsXG4gICAgJ3ZlcnNpb24nOiAndjEnLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2MzY4LTQ2NWIzMjg2LTVlZDYtMTFlNy05YTExLTBmNjQ2N2UxZDgyYi5qcGcnLFxuICAgICAgICAnYXBpJzoge1xuICAgICAgICAgICAgJ3B1YmxpYyc6ICdodHRwczovL2RhdGEuYnRjY2hpbmEuY29tL2RhdGEnLFxuICAgICAgICAgICAgJ3ByaXZhdGUnOiAnaHR0cHM6Ly9hcGkuYnRjY2hpbmEuY29tL2FwaV90cmFkZV92MS5waHAnLFxuICAgICAgICB9LFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vd3d3LmJ0Y2NoaW5hLmNvbScsXG4gICAgICAgICdkb2MnOiAnaHR0cHM6Ly93d3cuYnRjY2hpbmEuY29tL2FwaWRvY3MnXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnaGlzdG9yeWRhdGEnLFxuICAgICAgICAgICAgICAgICdvcmRlcmJvb2snLFxuICAgICAgICAgICAgICAgICd0aWNrZXInLFxuICAgICAgICAgICAgICAgICd0cmFkZXMnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnQnV5SWNlYmVyZ09yZGVyJyxcbiAgICAgICAgICAgICAgICAnQnV5T3JkZXInLFxuICAgICAgICAgICAgICAgICdCdXlPcmRlcjInLFxuICAgICAgICAgICAgICAgICdCdXlTdG9wT3JkZXInLFxuICAgICAgICAgICAgICAgICdDYW5jZWxJY2ViZXJnT3JkZXInLFxuICAgICAgICAgICAgICAgICdDYW5jZWxPcmRlcicsXG4gICAgICAgICAgICAgICAgJ0NhbmNlbFN0b3BPcmRlcicsXG4gICAgICAgICAgICAgICAgJ0dldEFjY291bnRJbmZvJyxcbiAgICAgICAgICAgICAgICAnZ2V0QXJjaGl2ZWRPcmRlcicsXG4gICAgICAgICAgICAgICAgJ2dldEFyY2hpdmVkT3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnR2V0RGVwb3NpdHMnLFxuICAgICAgICAgICAgICAgICdHZXRJY2ViZXJnT3JkZXInLFxuICAgICAgICAgICAgICAgICdHZXRJY2ViZXJnT3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnR2V0TWFya2V0RGVwdGgnLFxuICAgICAgICAgICAgICAgICdHZXRNYXJrZXREZXB0aDInLFxuICAgICAgICAgICAgICAgICdHZXRPcmRlcicsXG4gICAgICAgICAgICAgICAgJ0dldE9yZGVycycsXG4gICAgICAgICAgICAgICAgJ0dldFN0b3BPcmRlcicsXG4gICAgICAgICAgICAgICAgJ0dldFN0b3BPcmRlcnMnLFxuICAgICAgICAgICAgICAgICdHZXRUcmFuc2FjdGlvbnMnLFxuICAgICAgICAgICAgICAgICdHZXRXaXRoZHJhd2FsJyxcbiAgICAgICAgICAgICAgICAnR2V0V2l0aGRyYXdhbHMnLFxuICAgICAgICAgICAgICAgICdSZXF1ZXN0V2l0aGRyYXdhbCcsXG4gICAgICAgICAgICAgICAgJ1NlbGxJY2ViZXJnT3JkZXInLFxuICAgICAgICAgICAgICAgICdTZWxsT3JkZXInLFxuICAgICAgICAgICAgICAgICdTZWxsT3JkZXIyJyxcbiAgICAgICAgICAgICAgICAnU2VsbFN0b3BPcmRlcicsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE1hcmtldHMgKCkge1xuICAgICAgICBsZXQgbWFya2V0cyA9IGF3YWl0IHRoaXMucHVibGljR2V0VGlja2VyICh7XG4gICAgICAgICAgICAnbWFya2V0JzogJ2FsbCcsXG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMgKG1hcmtldHMpO1xuICAgICAgICBmb3IgKGxldCBwID0gMDsgcCA8IGtleXMubGVuZ3RoOyBwKyspIHtcbiAgICAgICAgICAgIGxldCBrZXkgPSBrZXlzW3BdO1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IG1hcmtldHNba2V5XTtcbiAgICAgICAgICAgIGxldCBwYXJ0cyA9IGtleS5zcGxpdCAoJ18nKTtcbiAgICAgICAgICAgIGxldCBpZCA9IHBhcnRzWzFdO1xuICAgICAgICAgICAgbGV0IGJhc2UgPSBpZC5zbGljZSAoMCwgMyk7XG4gICAgICAgICAgICBsZXQgcXVvdGUgPSBpZC5zbGljZSAoMywgNik7XG4gICAgICAgICAgICBiYXNlID0gYmFzZS50b1VwcGVyQ2FzZSAoKTtcbiAgICAgICAgICAgIHF1b3RlID0gcXVvdGUudG9VcHBlckNhc2UgKCk7XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gYmFzZSArICcvJyArIHF1b3RlO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2ggKHtcbiAgICAgICAgICAgICAgICAnaWQnOiBpZCxcbiAgICAgICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgICAgICdiYXNlJzogYmFzZSxcbiAgICAgICAgICAgICAgICAncXVvdGUnOiBxdW90ZSxcbiAgICAgICAgICAgICAgICAnaW5mbyc6IG1hcmtldCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RHZXRBY2NvdW50SW5mbyAoKTtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gcmVzcG9uc2VbJ3Jlc3VsdCddO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGJhbGFuY2VzIH07XG5cbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCB0aGlzLmN1cnJlbmNpZXMubGVuZ3RoOyBjKyspIHtcbiAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IHRoaXMuY3VycmVuY2llc1tjXTtcbiAgICAgICAgICAgIGxldCBsb3dlcmNhc2UgPSBjdXJyZW5jeS50b0xvd2VyQ2FzZSAoKTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd1c2VkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAobG93ZXJjYXNlIGluIGJhbGFuY2VzWydiYWxhbmNlJ10pXG4gICAgICAgICAgICAgICAgYWNjb3VudFsndG90YWwnXSA9IHBhcnNlRmxvYXQgKGJhbGFuY2VzWydiYWxhbmNlJ11bbG93ZXJjYXNlXVsnYW1vdW50J10pO1xuICAgICAgICAgICAgaWYgKGxvd2VyY2FzZSBpbiBiYWxhbmNlc1snZnJvemVuJ10pXG4gICAgICAgICAgICAgICAgYWNjb3VudFsndXNlZCddID0gcGFyc2VGbG9hdCAoYmFsYW5jZXNbJ2Zyb3plbiddW2xvd2VyY2FzZV1bJ2Ftb3VudCddKTtcbiAgICAgICAgICAgIGFjY291bnRbJ2ZyZWUnXSA9IGFjY291bnRbJ3RvdGFsJ10gLSBhY2NvdW50Wyd1c2VkJ107XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRPcmRlcmJvb2sgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnbWFya2V0JzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSBvcmRlcmJvb2tbJ2RhdGUnXSAqIDEwMDA7O1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBvcmRlcmJvb2tbJ2JpZHMnXSxcbiAgICAgICAgICAgICdhc2tzJzogb3JkZXJib29rWydhc2tzJ10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICByZXN1bHRbJ2Fza3MnXSA9IHRoaXMuc29ydEJ5IChyZXN1bHRbJ2Fza3MnXSwgMCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHRpY2tlcnMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFRpY2tlciAoe1xuICAgICAgICAgICAgJ21hcmtldCc6IHBbJ2lkJ10sXG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgdGlja2VyID0gdGlja2Vyc1sndGlja2VyJ107XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aWNrZXJbJ2RhdGUnXSAqIDEwMDA7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2hpZ2gnXSksXG4gICAgICAgICAgICAnbG93JzogcGFyc2VGbG9hdCAodGlja2VyWydsb3cnXSksXG4gICAgICAgICAgICAnYmlkJzogcGFyc2VGbG9hdCAodGlja2VyWydidXknXSksXG4gICAgICAgICAgICAnYXNrJzogcGFyc2VGbG9hdCAodGlja2VyWydzZWxsJ10pLFxuICAgICAgICAgICAgJ3Z3YXAnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3Z3YXAnXSksXG4gICAgICAgICAgICAnb3Blbic6IHBhcnNlRmxvYXQgKHRpY2tlclsnb3BlbiddKSxcbiAgICAgICAgICAgICdjbG9zZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsncHJldl9jbG9zZSddKSxcbiAgICAgICAgICAgICdmaXJzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsYXN0JzogcGFyc2VGbG9hdCAodGlja2VyWydsYXN0J10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndm9sJ10pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldFRyYWRlcyAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdtYXJrZXQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IG1ldGhvZCA9ICdwcml2YXRlUG9zdCcgKyB0aGlzLmNhcGl0YWxpemUgKHNpZGUpICsgJ09yZGVyMic7XG4gICAgICAgIGxldCBvcmRlciA9IHt9O1xuICAgICAgICBsZXQgaWQgPSBwWydpZCddLnRvVXBwZXJDYXNlICgpO1xuICAgICAgICBpZiAodHlwZSA9PSAnbWFya2V0Jykge1xuICAgICAgICAgICAgb3JkZXJbJ3BhcmFtcyddID0gWyB1bmRlZmluZWQsIGFtb3VudCwgaWQgXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9yZGVyWydwYXJhbXMnXSA9IFsgcHJpY2UsIGFtb3VudCwgaWQgXTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzW21ldGhvZF0gKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ2lkJzogcmVzcG9uc2VbJ2lkJ10sXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG1hcmtldCA9IHBhcmFtc1snbWFya2V0J107IC8vIFRPRE8gZml4bWVcbiAgICAgICAgcmV0dXJuIHRoaXMucHJpdmF0ZVBvc3RDYW5jZWxPcmRlciAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdwYXJhbXMnOiBbIGlkLCBtYXJrZXQgXSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIG5vbmNlICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWljcm9zZWNvbmRzICgpO1xuICAgIH0sXG5cbiAgICByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddW2FwaV0gKyAnLycgKyBwYXRoO1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHBhcmFtcykubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocGFyYW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5hcGlLZXkpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEF1dGhlbnRpY2F0aW9uRXJyb3IgKHRoaXMuaWQgKyAnIHJlcXVpcmVzIGAnICsgdGhpcy5pZCArICcuYXBpS2V5YCBwcm9wZXJ0eSBmb3IgYXV0aGVudGljYXRpb24nKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5zZWNyZXQpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEF1dGhlbnRpY2F0aW9uRXJyb3IgKHRoaXMuaWQgKyAnIHJlcXVpcmVzIGAnICsgdGhpcy5pZCArICcuc2VjcmV0YCBwcm9wZXJ0eSBmb3IgYXV0aGVudGljYXRpb24nKTtcbiAgICAgICAgICAgIGxldCBwID0gW107XG4gICAgICAgICAgICBpZiAoJ3BhcmFtcycgaW4gcGFyYW1zKVxuICAgICAgICAgICAgICAgIHAgPSBwYXJhbXNbJ3BhcmFtcyddO1xuICAgICAgICAgICAgbGV0IG5vbmNlID0gdGhpcy5ub25jZSAoKTtcbiAgICAgICAgICAgIGxldCByZXF1ZXN0ID0ge1xuICAgICAgICAgICAgICAgICdtZXRob2QnOiBwYXRoLFxuICAgICAgICAgICAgICAgICdpZCc6IG5vbmNlLFxuICAgICAgICAgICAgICAgICdwYXJhbXMnOiBwLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHAgPSBwLmpvaW4gKCcsJyk7XG4gICAgICAgICAgICBib2R5ID0gdGhpcy5qc29uIChyZXF1ZXN0KTtcbiAgICAgICAgICAgIGxldCBxdWVyeSA9IChcbiAgICAgICAgICAgICAgICAndG9uY2U9JyArIG5vbmNlICtcbiAgICAgICAgICAgICAgICAnJmFjY2Vzc2tleT0nICsgdGhpcy5hcGlLZXkgK1xuICAgICAgICAgICAgICAgICcmcmVxdWVzdG1ldGhvZD0nICsgbWV0aG9kLnRvTG93ZXJDYXNlICgpICtcbiAgICAgICAgICAgICAgICAnJmlkPScgKyBub25jZSArXG4gICAgICAgICAgICAgICAgJyZtZXRob2Q9JyArIHBhdGggK1xuICAgICAgICAgICAgICAgICcmcGFyYW1zPScgKyBwXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbGV0IHNpZ25hdHVyZSA9IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKHF1ZXJ5KSwgdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSwgJ3NoYTEnKTtcbiAgICAgICAgICAgIGxldCBhdXRoID0gdGhpcy5hcGlLZXkgKyAnOicgKyBzaWduYXR1cmU7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdDb250ZW50LUxlbmd0aCc6IGJvZHkubGVuZ3RoLFxuICAgICAgICAgICAgICAgICdBdXRob3JpemF0aW9uJzogJ0Jhc2ljICcgKyB0aGlzLnN0cmluZ1RvQmFzZTY0IChhdXRoKSxcbiAgICAgICAgICAgICAgICAnSnNvbi1ScGMtVG9uY2UnOiBub25jZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBidGNlID0ge1xuXG4gICAgJ2lkJzogJ2J0Y2UnLFxuICAgICduYW1lJzogJ0JUQy1lJyxcbiAgICAnY291bnRyaWVzJzogWyAnQkcnLCAnUlUnIF0sIC8vIEJ1bGdhcmlhLCBSdXNzaWFcbiAgICAndmVyc2lvbic6ICczJyxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yNzg0MzIyNS0xYjU3MTUxNC02MTFhLTExZTctOTIwOC0yNjQxYTU2MGI1NjEuanBnJyxcbiAgICAgICAgJ2FwaSc6IHtcbiAgICAgICAgICAgICdwdWJsaWMnOiAnaHR0cHM6Ly9idGMtZS5jb20vYXBpJyxcbiAgICAgICAgICAgICdwcml2YXRlJzogJ2h0dHBzOi8vYnRjLWUuY29tL3RhcGknLFxuICAgICAgICB9LFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vYnRjLWUuY29tJyxcbiAgICAgICAgJ2RvYyc6IFtcbiAgICAgICAgICAgICdodHRwczovL2J0Yy1lLmNvbS9hcGkvMy9kb2NzJyxcbiAgICAgICAgICAgICdodHRwczovL2J0Yy1lLmNvbS90YXBpL2RvY3MnLFxuICAgICAgICBdLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ2luZm8nLFxuICAgICAgICAgICAgICAgICd0aWNrZXIve3BhaXJ9JyxcbiAgICAgICAgICAgICAgICAnZGVwdGgve3BhaXJ9JyxcbiAgICAgICAgICAgICAgICAndHJhZGVzL3twYWlyfScsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAncHJpdmF0ZSc6IHtcbiAgICAgICAgICAgICdwb3N0JzogW1xuICAgICAgICAgICAgICAgICdnZXRJbmZvJyxcbiAgICAgICAgICAgICAgICAnVHJhZGUnLFxuICAgICAgICAgICAgICAgICdBY3RpdmVPcmRlcnMnLFxuICAgICAgICAgICAgICAgICdPcmRlckluZm8nLFxuICAgICAgICAgICAgICAgICdDYW5jZWxPcmRlcicsXG4gICAgICAgICAgICAgICAgJ1RyYWRlSGlzdG9yeScsXG4gICAgICAgICAgICAgICAgJ1RyYW5zSGlzdG9yeScsXG4gICAgICAgICAgICAgICAgJ0NvaW5EZXBvc2l0QWRkcmVzcycsXG4gICAgICAgICAgICAgICAgJ1dpdGhkcmF3Q29pbicsXG4gICAgICAgICAgICAgICAgJ0NyZWF0ZUNvdXBvbicsXG4gICAgICAgICAgICAgICAgJ1JlZGVlbUNvdXBvbicsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoTWFya2V0cyAoKSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0SW5mbyAoKTtcbiAgICAgICAgbGV0IG1hcmtldHMgPSByZXNwb25zZVsncGFpcnMnXTtcbiAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyAobWFya2V0cyk7XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgcCA9IDA7IHAgPCBrZXlzLmxlbmd0aDsgcCsrKSB7XG4gICAgICAgICAgICBsZXQgaWQgPSBrZXlzW3BdO1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IG1hcmtldHNbaWRdO1xuICAgICAgICAgICAgbGV0IFsgYmFzZSwgcXVvdGUgXSA9IGlkLnNwbGl0ICgnXycpO1xuICAgICAgICAgICAgYmFzZSA9IGJhc2UudG9VcHBlckNhc2UgKCk7XG4gICAgICAgICAgICBxdW90ZSA9IHF1b3RlLnRvVXBwZXJDYXNlICgpO1xuICAgICAgICAgICAgaWYgKGJhc2UgPT0gJ0RTSCcpXG4gICAgICAgICAgICAgICAgYmFzZSA9ICdEQVNIJztcbiAgICAgICAgICAgIGJhc2UgPSB0aGlzLmNvbW1vbkN1cnJlbmN5Q29kZSAoYmFzZSk7XG4gICAgICAgICAgICBxdW90ZSA9IHRoaXMuY29tbW9uQ3VycmVuY3lDb2RlIChxdW90ZSk7XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gYmFzZSArICcvJyArIHF1b3RlO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2ggKHtcbiAgICAgICAgICAgICAgICAnaWQnOiBpZCxcbiAgICAgICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgICAgICdiYXNlJzogYmFzZSxcbiAgICAgICAgICAgICAgICAncXVvdGUnOiBxdW90ZSxcbiAgICAgICAgICAgICAgICAnaW5mbyc6IG1hcmtldCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RHZXRJbmZvICgpO1xuICAgICAgICBsZXQgYmFsYW5jZXMgPSByZXNwb25zZVsncmV0dXJuJ107XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogYmFsYW5jZXMgfTtcbiAgICAgICAgbGV0IGZ1bmRzID0gYmFsYW5jZXNbJ2Z1bmRzJ107XG4gICAgICAgIGxldCBjdXJyZW5jaWVzID0gT2JqZWN0LmtleXMgKGZ1bmRzKTtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBjdXJyZW5jaWVzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBjdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IHVwcGVyY2FzZSA9IGN1cnJlbmN5LnRvVXBwZXJDYXNlICgpO1xuICAgICAgICAgICAgLy8gdGhleSBtaXNzcGVsbCBEQVNIIGFzIGRzaCA6L1xuICAgICAgICAgICAgaWYgKHVwcGVyY2FzZSA9PSAnRFNIJylcbiAgICAgICAgICAgICAgICB1cHBlcmNhc2UgPSAnREFTSCc7XG4gICAgICAgICAgICBsZXQgYWNjb3VudCA9IHtcbiAgICAgICAgICAgICAgICAnZnJlZSc6IGZ1bmRzW2N1cnJlbmN5XSxcbiAgICAgICAgICAgICAgICAndXNlZCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAndG90YWwnOiBmdW5kc1tjdXJyZW5jeV0sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVzdWx0W3VwcGVyY2FzZV0gPSBhY2NvdW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0RGVwdGhQYWlyICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ3BhaXInOiBwWydpZCddLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgaWYgKHBbJ2lkJ10gaW4gcmVzcG9uc2UpIHtcbiAgICAgICAgICAgIGxldCBvcmRlcmJvb2sgPSByZXNwb25zZVtwWydpZCddXTtcbiAgICAgICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAgICAgJ2JpZHMnOiBvcmRlcmJvb2tbJ2JpZHMnXSxcbiAgICAgICAgICAgICAgICAnYXNrcyc6IG9yZGVyYm9va1snYXNrcyddLFxuICAgICAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlc3VsdFsnYmlkcyddID0gdGhpcy5zb3J0QnkgKHJlc3VsdFsnYmlkcyddLCAwLCB0cnVlKTtcbiAgICAgICAgICAgIHJlc3VsdFsnYXNrcyddID0gdGhpcy5zb3J0QnkgKHJlc3VsdFsnYXNrcyddLCAwKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyBwWydzeW1ib2wnXSArICcgb3JkZXIgYm9vayBpcyBlbXB0eSBvciBub3QgYXZhaWxhYmxlJyk7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHRpY2tlcnMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFRpY2tlclBhaXIgKHtcbiAgICAgICAgICAgICdwYWlyJzogcFsnaWQnXSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aWNrZXIgPSB0aWNrZXJzW3BbJ2lkJ11dO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGlja2VyWyd1cGRhdGVkJ10gKiAxMDAwO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogdGlja2VyWydoaWdoJ10gPyB0aWNrZXJbJ2hpZ2gnXSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsb3cnOiB0aWNrZXJbJ2xvdyddID8gdGlja2VyWydsb3cnXSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiaWQnOiB0aWNrZXJbJ3NlbGwnXSA/IHRpY2tlclsnYnV5J10gOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXNrJzogdGlja2VyWydidXknXSA/IHRpY2tlclsnc2VsbCddIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3Z3YXAnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnb3Blbic6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjbG9zZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdmaXJzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsYXN0JzogdGlja2VyWydsYXN0J10gPyB0aWNrZXJbJ2xhc3QnXSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdGlja2VyWydhdmcnXSA/IHRpY2tlclsnYXZnJ10gOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHRpY2tlclsndm9sX2N1ciddID8gdGlja2VyWyd2b2xfY3VyJ10gOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiB0aWNrZXJbJ3ZvbCddID8gdGlja2VyWyd2b2wnXSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wdWJsaWNHZXRUcmFkZXNQYWlyICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ3BhaXInOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG9yZGVyID0ge1xuICAgICAgICAgICAgJ3BhaXInOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICAgICAgJ3R5cGUnOiBzaWRlLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IGFtb3VudCxcbiAgICAgICAgICAgICdyYXRlJzogcHJpY2UsXG4gICAgICAgIH07XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RUcmFkZSAodGhpcy5leHRlbmQgKG9yZGVyLCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsncmV0dXJuJ11bJ29yZGVyX2lkJ10sXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdENhbmNlbE9yZGVyICh7ICdvcmRlcl9pZCc6IGlkIH0pO1xuICAgIH0sXG5cbiAgICBwYXJzZU9yZGVyIChvcmRlcikge1xuICAgICAgICBsZXQgc3RhdHVzQ29kZSA9IG9yZGVyWydzdGF0dXMnXTtcbiAgICAgICAgbGV0IHN0YXR1cyA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHN0YXR1c0NvZGUgPT0gMCkge1xuICAgICAgICAgICAgc3RhdHVzID0gJ29wZW4nO1xuICAgICAgICB9IGVsc2UgaWYgKChzdGF0dXNDb2RlID09IDIpIHx8IChzdGF0dXNDb2RlID09IDMpKSB7XG4gICAgICAgICAgICBzdGF0dXMgPSAnY2FuY2VsZWQnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RhdHVzID0gJ2Nsb3NlZCc7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IG9yZGVyWyd0aW1lc3RhbXBfY3JlYXRlZCddICogMTAwMDtcbiAgICAgICAgbGV0IG1hcmtldCA9IHRoaXMubWFya2V0c19ieV9pZFtvcmRlclsncGFpciddXTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdpbmZvJzogb3JkZXIsXG4gICAgICAgICAgICAnaWQnOiBvcmRlclsnaWQnXSxcbiAgICAgICAgICAgICdzeW1ib2wnOiBtYXJrZXRbJ3N5bWJvbCddLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICd0eXBlJzogJ2xpbWl0JyxcbiAgICAgICAgICAgICdzaWRlJzogb3JkZXJbJ3R5cGUnXSxcbiAgICAgICAgICAgICdwcmljZSc6IG9yZGVyWydyYXRlJ10sXG4gICAgICAgICAgICAnYW1vdW50Jzogb3JkZXJbJ3N0YXJ0X2Ftb3VudCddLFxuICAgICAgICAgICAgJ3JlbWFpbmluZyc6IG9yZGVyWydhbW91bnQnXSxcbiAgICAgICAgICAgICdzdGF0dXMnOiBzdGF0dXMsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXIgKGlkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RPcmRlckluZm8gKHsgJ29yZGVyX2lkJzogaWQgfSk7XG4gICAgICAgIGxldCBvcmRlciA9IHJlc3BvbnNlWydyZXR1cm4nXVtpZF07XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlT3JkZXIgKHRoaXMuZXh0ZW5kICh7ICdpZCc6IGlkIH0sIG9yZGVyKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ11bYXBpXSArICcvJyArIHRoaXMudmVyc2lvbiArICcvJyArIHRoaXMuaW1wbG9kZVBhcmFtcyAocGF0aCwgcGFyYW1zKTtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5vbWl0IChwYXJhbXMsIHRoaXMuZXh0cmFjdFBhcmFtcyAocGF0aCkpO1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHF1ZXJ5KS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChxdWVyeSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpO1xuICAgICAgICAgICAgYm9keSA9IHRoaXMudXJsZW5jb2RlICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgICAgICdub25jZSc6IG5vbmNlLFxuICAgICAgICAgICAgICAgICdtZXRob2QnOiBwYXRoLFxuICAgICAgICAgICAgfSwgcXVlcnkpKTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgICAgICAgICdDb250ZW50LUxlbmd0aCc6IGJvZHkubGVuZ3RoLFxuICAgICAgICAgICAgICAgICdLZXknOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgICAgICAnU2lnbic6IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKGJvZHkpLCB0aGlzLmVuY29kZSAodGhpcy5zZWNyZXQpLCAnc2hhNTEyJyksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdzdWNjZXNzJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIGlmICghcmVzcG9uc2VbJ3N1Y2Nlc3MnXSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgJyArIHRoaXMuanNvbiAocmVzcG9uc2UpKTtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGJ0Y21hcmtldHMgPSB7XG5cbiAgICAnaWQnOiAnYnRjbWFya2V0cycsXG4gICAgJ25hbWUnOiAnQlRDIE1hcmtldHMnLFxuICAgICdjb3VudHJpZXMnOiAnQVUnLCAvLyBBdXN0cmFsaWFcbiAgICAncmF0ZUxpbWl0JzogMTAwMCwgLy8gbWFya2V0IGRhdGEgY2FjaGVkIGZvciAxIHNlY29uZCAodHJhZGVzIGNhY2hlZCBmb3IgMiBzZWNvbmRzKVxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI5MTQyOTExLTBlMWFjZmMyLTdkNWMtMTFlNy05OGM0LTA3ZDk1MzJiMjlkNy5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vYXBpLmJ0Y21hcmtldHMubmV0JyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL2J0Y21hcmtldHMubmV0LycsXG4gICAgICAgICdkb2MnOiAnaHR0cHM6Ly9naXRodWIuY29tL0JUQ01hcmtldHMvQVBJJyxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdtYXJrZXQve2lkfS90aWNrJyxcbiAgICAgICAgICAgICAgICAnbWFya2V0L3tpZH0vb3JkZXJib29rJyxcbiAgICAgICAgICAgICAgICAnbWFya2V0L3tpZH0vdHJhZGVzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnYWNjb3VudC9iYWxhbmNlJyxcbiAgICAgICAgICAgICAgICAnYWNjb3VudC97aWR9L3RyYWRpbmdmZWUnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICdwb3N0JzogW1xuICAgICAgICAgICAgICAgICdmdW5kdHJhbnNmZXIvd2l0aGRyYXdDcnlwdG8nLFxuICAgICAgICAgICAgICAgICdmdW5kdHJhbnNmZXIvd2l0aGRyYXdFRlQnLFxuICAgICAgICAgICAgICAgICdvcmRlci9jcmVhdGUnLFxuICAgICAgICAgICAgICAgICdvcmRlci9jYW5jZWwnLFxuICAgICAgICAgICAgICAgICdvcmRlci9oaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAnb3JkZXIvb3BlbicsXG4gICAgICAgICAgICAgICAgJ29yZGVyL3RyYWRlL2hpc3RvcnknLFxuICAgICAgICAgICAgICAgICdvcmRlci9jcmVhdGVCYXRjaCcsIC8vIHRoZXkgcHJvbWlzZSBpdCdzIGNvbWluZyBzb29uLi4uXG4gICAgICAgICAgICAgICAgJ29yZGVyL2RldGFpbCcsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgJ21hcmtldHMnOiB7XG4gICAgICAgICdCVEMvQVVEJzogeyAnaWQnOiAnQlRDL0FVRCcsICdzeW1ib2wnOiAnQlRDL0FVRCcsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdBVUQnIH0sXG4gICAgICAgICdMVEMvQVVEJzogeyAnaWQnOiAnTFRDL0FVRCcsICdzeW1ib2wnOiAnTFRDL0FVRCcsICdiYXNlJzogJ0xUQycsICdxdW90ZSc6ICdBVUQnIH0sXG4gICAgICAgICdFVEgvQVVEJzogeyAnaWQnOiAnRVRIL0FVRCcsICdzeW1ib2wnOiAnRVRIL0FVRCcsICdiYXNlJzogJ0VUSCcsICdxdW90ZSc6ICdBVUQnIH0sXG4gICAgICAgICdFVEMvQVVEJzogeyAnaWQnOiAnRVRDL0FVRCcsICdzeW1ib2wnOiAnRVRDL0FVRCcsICdiYXNlJzogJ0VUQycsICdxdW90ZSc6ICdBVUQnIH0sXG4gICAgICAgICdYUlAvQVVEJzogeyAnaWQnOiAnWFJQL0FVRCcsICdzeW1ib2wnOiAnWFJQL0FVRCcsICdiYXNlJzogJ1hSUCcsICdxdW90ZSc6ICdBVUQnIH0sXG4gICAgICAgICdCQ0gvQVVEJzogeyAnaWQnOiAnQkNIL0FVRCcsICdzeW1ib2wnOiAnQkNIL0FVRCcsICdiYXNlJzogJ0JDSCcsICdxdW90ZSc6ICdBVUQnIH0sXG4gICAgICAgICdMVEMvQlRDJzogeyAnaWQnOiAnTFRDL0JUQycsICdzeW1ib2wnOiAnTFRDL0JUQycsICdiYXNlJzogJ0xUQycsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdFVEgvQlRDJzogeyAnaWQnOiAnRVRIL0JUQycsICdzeW1ib2wnOiAnRVRIL0JUQycsICdiYXNlJzogJ0VUSCcsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdFVEMvQlRDJzogeyAnaWQnOiAnRVRDL0JUQycsICdzeW1ib2wnOiAnRVRDL0JUQycsICdiYXNlJzogJ0VUQycsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdYUlAvQlRDJzogeyAnaWQnOiAnWFJQL0JUQycsICdzeW1ib2wnOiAnWFJQL0JUQycsICdiYXNlJzogJ1hSUCcsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdCQ0gvQlRDJzogeyAnaWQnOiAnQkNIL0JUQycsICdzeW1ib2wnOiAnQkNIL0JUQycsICdiYXNlJzogJ0JDSCcsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBiYWxhbmNlcyA9IGF3YWl0IHRoaXMucHJpdmF0ZUdldEFjY291bnRCYWxhbmNlICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGJhbGFuY2VzIH07XG4gICAgICAgIGZvciAobGV0IGIgPSAwOyBiIDwgYmFsYW5jZXMubGVuZ3RoOyBiKyspIHtcbiAgICAgICAgICAgIGxldCBiYWxhbmNlID0gYmFsYW5jZXNbYl07XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBiYWxhbmNlWydjdXJyZW5jeSddO1xuICAgICAgICAgICAgbGV0IG11bHRpcGxpZXIgPSAxMDAwMDAwMDA7XG4gICAgICAgICAgICBsZXQgZnJlZSA9IHBhcnNlRmxvYXQgKGJhbGFuY2VbJ2JhbGFuY2UnXSAvIG11bHRpcGxpZXIpO1xuICAgICAgICAgICAgbGV0IHVzZWQgPSBwYXJzZUZsb2F0IChiYWxhbmNlWydwZW5kaW5nRnVuZHMnXSAvIG11bHRpcGxpZXIpO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiBmcmVlLFxuICAgICAgICAgICAgICAgICd1c2VkJzogdXNlZCxcbiAgICAgICAgICAgICAgICAndG90YWwnOiB0aGlzLnN1bSAoZnJlZSwgdXNlZCksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgcGFyc2VCaWRBc2sgKGJpZGFzaykge1xuICAgICAgICBsZXQgcHJpY2UgPSBiaWRhc2tbMF07XG4gICAgICAgIGxldCBhbW91bnQgPSBiaWRhc2tbMV07XG4gICAgICAgIHJldHVybiBbIHByaWNlLCBhbW91bnQgXTtcbiAgICB9LFxuXG4gICAgcGFyc2VCaWRBc2tzIChiaWRhc2tzKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiaWRhc2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCAodGhpcy5wYXJzZUJpZEFzayAoYmlkYXNrc1tpXSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBtID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSBhd2FpdCB0aGlzLnB1YmxpY0dldE1hcmtldElkT3JkZXJib29rICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2lkJzogbVsnaWQnXSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSBvcmRlcmJvb2tbJ3RpbWVzdGFtcCddICogMTAwMDtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdiaWRzJzogW10sXG4gICAgICAgICAgICAnYXNrcyc6IFtdLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHNpZGVzID0gWyAnYmlkcycsICdhc2tzJyBdO1xuICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IHNpZGVzLmxlbmd0aDsgcysrKSB7XG4gICAgICAgICAgICBsZXQgc2lkZSA9IHNpZGVzW3NdO1xuICAgICAgICAgICAgcmVzdWx0W3NpZGVdID0gdGhpcy5wYXJzZUJpZEFza3MgKG9yZGVyYm9va1tzaWRlXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgcGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KSB7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aWNrZXJbJ3RpbWVzdGFtcCddICogMTAwMDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsb3cnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmlkJzogcGFyc2VGbG9hdCAodGlja2VyWydiZXN0QmlkJ10pLFxuICAgICAgICAgICAgJ2Fzayc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYmVzdEFzayddKSxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdFByaWNlJ10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndm9sdW1lMjRoJ10pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG0gPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHRpY2tlciA9IGF3YWl0IHRoaXMucHVibGljR2V0TWFya2V0SWRUaWNrICh7XG4gICAgICAgICAgICAnaWQnOiBtWydpZCddLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VUaWNrZXIgKHRpY2tlciwgbSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldE1hcmtldElkVHJhZGVzICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgLy8gJ3NpbmNlJzogNTk4NjgzNDUyMzEsXG4gICAgICAgICAgICAnaWQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG0gPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IG11bHRpcGxpZXIgPSAxMDAwMDAwMDA7IC8vIGZvciBwcmljZSBhbmQgdm9sdW1lXG4gICAgICAgIC8vIGRvZXMgQlRDIE1hcmtldHMgc3VwcG9ydCBtYXJrZXQgb3JkZXJzIGF0IGFsbD9cbiAgICAgICAgbGV0IG9yZGVyU2lkZSA9IChzaWRlID09ICdidXknKSA/ICdCaWQnIDogJ0Fzayc7XG4gICAgICAgIGxldCBvcmRlciA9IHRoaXMub3JkZXJlZCAoe1xuICAgICAgICAgICAgJ2N1cnJlbmN5JzogbVsncXVvdGUnXSxcbiAgICAgICAgICAgICdpbnN0cnVtZW50JzogbVsnYmFzZSddLFxuICAgICAgICAgICAgJ3ByaWNlJzogcHJpY2UgKiBtdWx0aXBsaWVyLFxuICAgICAgICAgICAgJ3ZvbHVtZSc6IGFtb3VudCAqIG11bHRpcGxpZXIsXG4gICAgICAgICAgICAnb3JkZXJTaWRlJzogb3JkZXJTaWRlLFxuICAgICAgICAgICAgJ29yZGVydHlwZSc6IHRoaXMuY2FwaXRhbGl6ZSAodHlwZSksXG4gICAgICAgICAgICAnY2xpZW50UmVxdWVzdElkJzogdGhpcy5ub25jZSAoKS50b1N0cmluZyAoKSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RPcmRlckNyZWF0ZSAodGhpcy5leHRlbmQgKG9yZGVyLCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnaWQnXS50b1N0cmluZyAoKSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXJzIChpZHMpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJpdmF0ZVBvc3RPcmRlckNhbmNlbCAoeyAnb3JkZXJfaWRzJzogaWRzIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FuY2VsT3JkZXJzIChbIGlkIF0pO1xuICAgIH0sXG5cbiAgICBub25jZSAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJpID0gJy8nICsgdGhpcy5pbXBsb2RlUGFyYW1zIChwYXRoLCBwYXJhbXMpO1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArIHVyaTtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5vbWl0IChwYXJhbXMsIHRoaXMuZXh0cmFjdFBhcmFtcyAocGF0aCkpO1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHBhcmFtcykubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocGFyYW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCkudG9TdHJpbmcgKCk7XG4gICAgICAgICAgICBsZXQgYXV0aCA9IHVyaSArIFwiXFxuXCIgKyBub25jZSArIFwiXFxuXCI7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgICAgJ2FwaWtleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgICAgICd0aW1lc3RhbXAnOiBub25jZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAobWV0aG9kID09ICdQT1NUJykge1xuICAgICAgICAgICAgICAgIGJvZHkgPSB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICAgICAgICAgIGhlYWRlcnNbJ0NvbnRlbnQtTGVuZ3RoJ10gPSBib2R5Lmxlbmd0aDtcbiAgICAgICAgICAgICAgICBhdXRoICs9IGJvZHk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgc2VjcmV0ID0gdGhpcy5iYXNlNjRUb0JpbmFyeSAodGhpcy5zZWNyZXQpO1xuICAgICAgICAgICAgbGV0IHNpZ25hdHVyZSA9IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKGF1dGgpLCBzZWNyZXQsICdzaGE1MTInLCAnYmFzZTY0Jyk7XG4gICAgICAgICAgICBoZWFkZXJzWydzaWduYXR1cmUnXSA9IHNpZ25hdHVyZTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgICAgIGlmIChhcGkgPT0gJ3ByaXZhdGUnKSB7XG4gICAgICAgICAgICBpZiAoJ3N1Y2Nlc3MnIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgICAgIGlmICghcmVzcG9uc2VbJ3N1Y2Nlc3MnXSlcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGJ0Y3RyYWRlciA9IHtcblxuICAgICdpZCc6ICdidGN0cmFkZXInLFxuICAgICduYW1lJzogJ0JUQ1RyYWRlcicsXG4gICAgJ2NvdW50cmllcyc6IFsgJ1RSJywgJ0dSJywgJ1BIJyBdLCAvLyBUdXJrZXksIEdyZWVjZSwgUGhpbGlwcGluZXNcbiAgICAncmF0ZUxpbWl0JzogMTAwMCxcbiAgICAnY29tbWVudCc6ICdiYXNlIEFQSSBmb3IgQlRDRXhjaGFuZ2UsIEJUQ1R1cmsnLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3OTkyNDA0LWNkYTFlMzg2LTY0OWMtMTFlNy04ZGMxLTQwYmJkMjg5Nzc2OC5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vd3d3LmJ0Y3RyYWRlci5jb20vYXBpJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy5idGN0cmFkZXIuY29tJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL2dpdGh1Yi5jb20vQlRDVHJhZGVyL2Jyb2tlci1hcGktZG9jcycsXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnb2hsY2RhdGEnLCAvLyA/bGFzdD1DT1VOVFxuICAgICAgICAgICAgICAgICdvcmRlcmJvb2snLFxuICAgICAgICAgICAgICAgICd0aWNrZXInLFxuICAgICAgICAgICAgICAgICd0cmFkZXMnLCAgIC8vID9sYXN0PUNPVU5UIChtYXggNTApXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAncHJpdmF0ZSc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ2JhbGFuY2UnLFxuICAgICAgICAgICAgICAgICdvcGVuT3JkZXJzJyxcbiAgICAgICAgICAgICAgICAndXNlclRyYW5zYWN0aW9ucycsIC8vID9vZmZzZXQ9MCZsaW1pdD0yNSZzb3J0PWFzY1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICdwb3N0JzogW1xuICAgICAgICAgICAgICAgICdidXknLFxuICAgICAgICAgICAgICAgICdjYW5jZWxPcmRlcicsXG4gICAgICAgICAgICAgICAgJ3NlbGwnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlR2V0QmFsYW5jZSAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiByZXNwb25zZSB9O1xuICAgICAgICBsZXQgYmFzZSA9IHtcbiAgICAgICAgICAgICdmcmVlJzogcmVzcG9uc2VbJ2JpdGNvaW5fYXZhaWxhYmxlJ10sXG4gICAgICAgICAgICAndXNlZCc6IHJlc3BvbnNlWydiaXRjb2luX3Jlc2VydmVkJ10sXG4gICAgICAgICAgICAndG90YWwnOiByZXNwb25zZVsnYml0Y29pbl9iYWxhbmNlJ10sXG4gICAgICAgIH07XG4gICAgICAgIGxldCBxdW90ZSA9IHtcbiAgICAgICAgICAgICdmcmVlJzogcmVzcG9uc2VbJ21vbmV5X2F2YWlsYWJsZSddLFxuICAgICAgICAgICAgJ3VzZWQnOiByZXNwb25zZVsnbW9uZXlfcmVzZXJ2ZWQnXSxcbiAgICAgICAgICAgICd0b3RhbCc6IHJlc3BvbnNlWydtb25leV9iYWxhbmNlJ10sXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzeW1ib2wgPSB0aGlzLnN5bWJvbHNbMF07XG4gICAgICAgIGxldCBtYXJrZXQgPSB0aGlzLm1hcmtldHNbc3ltYm9sXTtcbiAgICAgICAgcmVzdWx0W21hcmtldFsnYmFzZSddXSA9IGJhc2U7XG4gICAgICAgIHJlc3VsdFttYXJrZXRbJ3F1b3RlJ11dID0gcXVvdGU7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSBhd2FpdCB0aGlzLnB1YmxpY0dldE9yZGVyYm9vayAocGFyYW1zKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHBhcnNlSW50IChvcmRlcmJvb2tbJ3RpbWVzdGFtcCddICogMTAwMCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IFtdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaWRlcyA9IFsgJ2JpZHMnLCAnYXNrcycgXTtcbiAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBzaWRlcy5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1tzXTtcbiAgICAgICAgICAgIGxldCBvcmRlcnMgPSBvcmRlcmJvb2tbc2lkZV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBvcmRlciA9IG9yZGVyc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgcHJpY2UgPSBwYXJzZUZsb2F0IChvcmRlclswXSk7XG4gICAgICAgICAgICAgICAgbGV0IGFtb3VudCA9IHBhcnNlRmxvYXQgKG9yZGVyWzFdKTtcbiAgICAgICAgICAgICAgICByZXN1bHRbc2lkZV0ucHVzaCAoWyBwcmljZSwgYW1vdW50IF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgbGV0IHRpY2tlciA9IGF3YWl0IHRoaXMucHVibGljR2V0VGlja2VyICgpO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gcGFyc2VJbnQgKHRpY2tlclsndGltZXN0YW1wJ10gKiAxMDAwKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2JpZCddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2FzayddKSxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ29wZW4nXSksXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdCddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogcGFyc2VGbG9hdCAodGlja2VyWydhdmVyYWdlJ10pLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbHVtZSddKSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgbWF4Q291bnQgPSA1MDtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0VHJhZGVzIChwYXJhbXMpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgbWV0aG9kID0gJ3ByaXZhdGVQb3N0JyArIHRoaXMuY2FwaXRhbGl6ZSAoc2lkZSk7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdUeXBlJzogKHNpZGUgPT0gJ2J1eScpID8gJ0J1eUJ0YycgOiAnU2VsQnRjJyxcbiAgICAgICAgICAgICdJc01hcmtldE9yZGVyJzogKHR5cGUgPT0gJ21hcmtldCcpID8gMSA6IDAsXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlID09ICdtYXJrZXQnKSB7XG4gICAgICAgICAgICBpZiAoc2lkZSA9PSAnYnV5JylcbiAgICAgICAgICAgICAgICBvcmRlclsnVG90YWwnXSA9IGFtb3VudDtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBvcmRlclsnQW1vdW50J10gPSBhbW91bnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvcmRlclsnUHJpY2UnXSA9IHByaWNlO1xuICAgICAgICAgICAgb3JkZXJbJ0Ftb3VudCddID0gYW1vdW50O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXNbbWV0aG9kXSAodGhpcy5leHRlbmQgKG9yZGVyLCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnaWQnXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0Q2FuY2VsT3JkZXIgKHsgJ2lkJzogaWQgfSk7XG4gICAgfSxcblxuICAgIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHRoaXMuaWQgPT0gJ2J0Y3RyYWRlcicpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgaXMgYW4gYWJzdHJhY3QgYmFzZSBBUEkgZm9yIEJUQ0V4Y2hhbmdlLCBCVENUdXJrJyk7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgJy8nICsgcGF0aDtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChwYXJhbXMpLmxlbmd0aClcbiAgICAgICAgICAgICAgICB1cmwgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHBhcmFtcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpLnRvU3RyaW5nO1xuICAgICAgICAgICAgYm9keSA9IHRoaXMudXJsZW5jb2RlIChwYXJhbXMpO1xuICAgICAgICAgICAgbGV0IHNlY3JldCA9IHRoaXMuYmFzZTY0VG9TdHJpbmcgKHRoaXMuc2VjcmV0KTtcbiAgICAgICAgICAgIGxldCBhdXRoID0gdGhpcy5hcGlLZXkgKyBub25jZTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ1gtUENLJzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ1gtU3RhbXAnOiBub25jZS50b1N0cmluZyAoKSxcbiAgICAgICAgICAgICAgICAnWC1TaWduYXR1cmUnOiB0aGlzLmhtYWMgKHRoaXMuZW5jb2RlIChhdXRoKSwgc2VjcmV0LCAnc2hhMjU2JywgJ2Jhc2U2NCcpLFxuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICAgICAgICAnQ29udGVudC1MZW5ndGgnOiBib2R5Lmxlbmd0aCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBidGNleGNoYW5nZSA9IGV4dGVuZCAoYnRjdHJhZGVyLCB7XG5cbiAgICAnaWQnOiAnYnRjZXhjaGFuZ2UnLFxuICAgICduYW1lJzogJ0JUQ0V4Y2hhbmdlJyxcbiAgICAnY291bnRyaWVzJzogJ1BIJywgLy8gUGhpbGlwcGluZXNcbiAgICAncmF0ZUxpbWl0JzogMTUwMCxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yNzk5MzA1Mi00YzkyOTExYS02NGFhLTExZTctOTZkOC1lYzZhYzM0MzU3NTcuanBnJyxcbiAgICAgICAgJ2FwaSc6ICdodHRwczovL3d3dy5idGNleGNoYW5nZS5waC9hcGknLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vd3d3LmJ0Y2V4Y2hhbmdlLnBoJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL2dpdGh1Yi5jb20vQlRDVHJhZGVyL2Jyb2tlci1hcGktZG9jcycsXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9QSFAnOiB7ICdpZCc6ICdCVEMvUEhQJywgJ3N5bWJvbCc6ICdCVEMvUEhQJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ1BIUCcgfSxcbiAgICB9LFxufSlcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgYnRjdHJhZGV1YSA9IHtcblxuICAgICdpZCc6ICdidGN0cmFkZXVhJyxcbiAgICAnbmFtZSc6ICdCVEMgVHJhZGUgVUEnLFxuICAgICdjb3VudHJpZXMnOiAnVUEnLCAvLyBVa3JhaW5lLFxuICAgICdyYXRlTGltaXQnOiAzMDAwLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3OTQxNDgzLTc5ZmM3MzUwLTYyZDktMTFlNy05ZjYxLWFjNDdmMjhmY2Q5Ni5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vYnRjLXRyYWRlLmNvbS51YS9hcGknLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vYnRjLXRyYWRlLmNvbS51YScsXG4gICAgICAgICdkb2MnOiAnaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vZG9jdW1lbnQvZC8xb2NZQTB5TXlfUlhkNTYxc2ZHM3FFUFo4MGt5bGwzNkhVeHZDUmU1R2JoRS9lZGl0JyxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdkZWFscy97c3ltYm9sfScsXG4gICAgICAgICAgICAgICAgJ3RyYWRlcy9zZWxsL3tzeW1ib2x9JyxcbiAgICAgICAgICAgICAgICAndHJhZGVzL2J1eS97c3ltYm9sfScsXG4gICAgICAgICAgICAgICAgJ2phcGFuX3N0YXQvaGlnaC97c3ltYm9sfScsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAncHJpdmF0ZSc6IHtcbiAgICAgICAgICAgICdwb3N0JzogW1xuICAgICAgICAgICAgICAgICdhdXRoJyxcbiAgICAgICAgICAgICAgICAnYXNrL3tzeW1ib2x9JyxcbiAgICAgICAgICAgICAgICAnYmFsYW5jZScsXG4gICAgICAgICAgICAgICAgJ2JpZC97c3ltYm9sfScsXG4gICAgICAgICAgICAgICAgJ2J1eS97c3ltYm9sfScsXG4gICAgICAgICAgICAgICAgJ215X29yZGVycy97c3ltYm9sfScsXG4gICAgICAgICAgICAgICAgJ29yZGVyL3N0YXR1cy97aWR9JyxcbiAgICAgICAgICAgICAgICAncmVtb3ZlL29yZGVyL3tpZH0nLFxuICAgICAgICAgICAgICAgICdzZWxsL3tzeW1ib2x9JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9VQUgnOiB7ICdpZCc6ICdidGNfdWFoJywgJ3N5bWJvbCc6ICdCVEMvVUFIJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ1VBSCcgfSxcbiAgICAgICAgJ0VUSC9VQUgnOiB7ICdpZCc6ICdldGhfdWFoJywgJ3N5bWJvbCc6ICdFVEgvVUFIJywgJ2Jhc2UnOiAnRVRIJywgJ3F1b3RlJzogJ1VBSCcgfSxcbiAgICAgICAgJ0xUQy9VQUgnOiB7ICdpZCc6ICdsdGNfdWFoJywgJ3N5bWJvbCc6ICdMVEMvVUFIJywgJ2Jhc2UnOiAnTFRDJywgJ3F1b3RlJzogJ1VBSCcgfSxcbiAgICAgICAgJ0RPR0UvVUFIJzogeyAnaWQnOiAnZG9nZV91YWgnLCAnc3ltYm9sJzogJ0RPR0UvVUFIJywgJ2Jhc2UnOiAnRE9HRScsICdxdW90ZSc6ICdVQUgnIH0sXG4gICAgICAgICdEQVNIL1VBSCc6IHsgJ2lkJzogJ2Rhc2hfdWFoJywgJ3N5bWJvbCc6ICdEQVNIL1VBSCcsICdiYXNlJzogJ0RBU0gnLCAncXVvdGUnOiAnVUFIJyB9LFxuICAgICAgICAnU0lCL1VBSCc6IHsgJ2lkJzogJ3NpYl91YWgnLCAnc3ltYm9sJzogJ1NJQi9VQUgnLCAnYmFzZSc6ICdTSUInLCAncXVvdGUnOiAnVUFIJyB9LFxuICAgICAgICAnS1JCL1VBSCc6IHsgJ2lkJzogJ2tyYl91YWgnLCAnc3ltYm9sJzogJ0tSQi9VQUgnLCAnYmFzZSc6ICdLUkInLCAncXVvdGUnOiAnVUFIJyB9LFxuICAgICAgICAnTlZDL1VBSCc6IHsgJ2lkJzogJ252Y191YWgnLCAnc3ltYm9sJzogJ05WQy9VQUgnLCAnYmFzZSc6ICdOVkMnLCAncXVvdGUnOiAnVUFIJyB9LFxuICAgICAgICAnTFRDL0JUQyc6IHsgJ2lkJzogJ2x0Y19idGMnLCAnc3ltYm9sJzogJ0xUQy9CVEMnLCAnYmFzZSc6ICdMVEMnLCAncXVvdGUnOiAnQlRDJyB9LFxuICAgICAgICAnTlZDL0JUQyc6IHsgJ2lkJzogJ252Y19idGMnLCAnc3ltYm9sJzogJ05WQy9CVEMnLCAnYmFzZSc6ICdOVkMnLCAncXVvdGUnOiAnQlRDJyB9LFxuICAgICAgICAnSVRJL1VBSCc6IHsgJ2lkJzogJ2l0aV91YWgnLCAnc3ltYm9sJzogJ0lUSS9VQUgnLCAnYmFzZSc6ICdJVEknLCAncXVvdGUnOiAnVUFIJyB9LFxuICAgICAgICAnRE9HRS9CVEMnOiB7ICdpZCc6ICdkb2dlX2J0YycsICdzeW1ib2wnOiAnRE9HRS9CVEMnLCAnYmFzZSc6ICdET0dFJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ0RBU0gvQlRDJzogeyAnaWQnOiAnZGFzaF9idGMnLCAnc3ltYm9sJzogJ0RBU0gvQlRDJywgJ2Jhc2UnOiAnREFTSCcsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgfSxcblxuICAgIHNpZ25JbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0QXV0aCAoKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdEJhbGFuY2UgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogcmVzcG9uc2UgfTtcbiAgICAgICAgaWYgKCdhY2NvdW50cycgaW4gcmVzdWx0KSB7XG4gICAgICAgICAgICBsZXQgYWNjb3VudHMgPSByZXNwb25zZVsnYWNjb3VudHMnXTtcbiAgICAgICAgICAgIGZvciAobGV0IGIgPSAwOyBiIDwgYWNjb3VudHMubGVuZ3RoOyBiKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgYWNjb3VudCA9IGFjY291bnRzW2JdO1xuICAgICAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IGFjY291bnRbJ2N1cnJlbmN5J107XG4gICAgICAgICAgICAgICAgbGV0IGJhbGFuY2UgPSBwYXJzZUZsb2F0IChhY2NvdW50WydiYWxhbmNlJ10pO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtjdXJyZW5jeV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICdmcmVlJzogYmFsYW5jZSxcbiAgICAgICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICd0b3RhbCc6IGJhbGFuY2UsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgYmlkcyA9IGF3YWl0IHRoaXMucHVibGljR2V0VHJhZGVzQnV5U3ltYm9sICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ3N5bWJvbCc6IHBbJ2lkJ10sXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgYXNrcyA9IGF3YWl0IHRoaXMucHVibGljR2V0VHJhZGVzU2VsbFN5bWJvbCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiBwWydpZCddLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IHtcbiAgICAgICAgICAgICdiaWRzJzogW10sXG4gICAgICAgICAgICAnYXNrcyc6IFtdLFxuICAgICAgICB9O1xuICAgICAgICBpZiAoYmlkcykge1xuICAgICAgICAgICAgaWYgKCdsaXN0JyBpbiBiaWRzKVxuICAgICAgICAgICAgICAgIG9yZGVyYm9va1snYmlkcyddID0gYmlkc1snbGlzdCddO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhc2tzKSB7XG4gICAgICAgICAgICBpZiAoJ2xpc3QnIGluIGFza3MpXG4gICAgICAgICAgICAgICAgb3JkZXJib29rWydhc2tzJ10gPSBhc2tzWydsaXN0J107XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAob3JkZXJbJ3ByaWNlJ10pO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBwYXJzZUZsb2F0IChvcmRlclsnY3VycmVuY3lfdHJhZGUnXSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3NpZGVdLnB1c2ggKFsgcHJpY2UsIGFtb3VudCBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0SmFwYW5TdGF0SGlnaFN5bWJvbCAoe1xuICAgICAgICAgICAgJ3N5bWJvbCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgdGlja2VyID0gcmVzcG9uc2VbJ3RyYWRlcyddO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbG93JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2JpZCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhc2snOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgICAgIGxldCB0aWNrZXJMZW5ndGggPSB0aWNrZXIubGVuZ3RoO1xuICAgICAgICBpZiAodGlja2VyTGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgbGV0IHN0YXJ0ID0gTWF0aC5tYXggKHRpY2tlckxlbmd0aCAtIDQ4LCAwKTtcbiAgICAgICAgICAgIGZvciAobGV0IHQgPSBzdGFydDsgdCA8IHRpY2tlci5sZW5ndGg7IHQrKykge1xuICAgICAgICAgICAgICAgIGxldCBjYW5kbGUgPSB0aWNrZXJbdF07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByZXN1bHRbJ29wZW4nXSA9PSAndW5kZWZpbmVkJylcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0WydvcGVuJ10gPSBjYW5kbGVbMV07XG4gICAgICAgICAgICAgICAgaWYgKCh0eXBlb2YgcmVzdWx0WydoaWdoJ10gPT0gJ3VuZGVmaW5lZCcpIHx8IChyZXN1bHRbJ2hpZ2gnXSA8IGNhbmRsZVsyXSkpXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdFsnaGlnaCddID0gY2FuZGxlWzJdO1xuICAgICAgICAgICAgICAgIGlmICgodHlwZW9mIHJlc3VsdFsnbG93J10gPT0gJ3VuZGVmaW5lZCcpIHx8IChyZXN1bHRbJ2xvdyddID4gY2FuZGxlWzNdKSlcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0Wydsb3cnXSA9IGNhbmRsZVszXTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJlc3VsdFsncXVvdGVWb2x1bWUnXSA9PSAndW5kZWZpbmVkJylcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0WydxdW90ZVZvbHVtZSddID0gLWNhbmRsZVs1XTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdFsncXVvdGVWb2x1bWUnXSAtPSBjYW5kbGVbNV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgbGFzdCA9IHRpY2tlckxlbmd0aCAtIDE7XG4gICAgICAgICAgICByZXN1bHRbJ2Nsb3NlJ10gPSB0aWNrZXJbbGFzdF1bNF07XG4gICAgICAgICAgICByZXN1bHRbJ3F1b3RlVm9sdW1lJ10gPSAtMSAqIHJlc3VsdFsncXVvdGVWb2x1bWUnXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdGhpcy5wdWJsaWNHZXREZWFsc1N5bWJvbCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgaWYgKHR5cGUgPT0gJ21hcmtldCcpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgYWxsb3dzIGxpbWl0IG9yZGVycyBvbmx5Jyk7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCBtZXRob2QgPSAncHJpdmF0ZVBvc3QnICsgdGhpcy5jYXBpdGFsaXplIChzaWRlKSArICdJZCc7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdjb3VudCc6IGFtb3VudCxcbiAgICAgICAgICAgICdjdXJyZW5jeTEnOiBwWydxdW90ZSddLFxuICAgICAgICAgICAgJ2N1cnJlbmN5JzogcFsnYmFzZSddLFxuICAgICAgICAgICAgJ3ByaWNlJzogcHJpY2UsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB0aGlzW21ldGhvZF0gKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdFJlbW92ZU9yZGVySWQgKHsgJ2lkJzogaWQgfSk7XG4gICAgfSxcblxuICAgIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ10gKyAnLycgKyB0aGlzLmltcGxvZGVQYXJhbXMgKHBhdGgsIHBhcmFtcyk7XG4gICAgICAgIGxldCBxdWVyeSA9IHRoaXMub21pdCAocGFyYW1zLCB0aGlzLmV4dHJhY3RQYXJhbXMgKHBhdGgpKTtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChxdWVyeSkubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSB0aGlzLmltcGxvZGVQYXJhbXMgKHBhdGgsIHF1ZXJ5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCk7XG4gICAgICAgICAgICBib2R5ID0gdGhpcy51cmxlbmNvZGUgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAgICAgJ291dF9vcmRlcl9pZCc6IG5vbmNlLFxuICAgICAgICAgICAgICAgICdub25jZSc6IG5vbmNlLFxuICAgICAgICAgICAgfSwgcXVlcnkpKTtcbiAgICAgICAgICAgIGxldCBhdXRoID0gYm9keSArIHRoaXMuc2VjcmV0O1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAncHVibGljLWtleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgICAgICdhcGktc2lnbic6IHRoaXMuaGFzaCAodGhpcy5lbmNvZGUgKGF1dGgpLCAnc2hhMjU2JyksXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgICAgICAgICdDb250ZW50LUxlbmd0aCc6IGJvZHkubGVuZ3RoLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGJ0Y3R1cmsgPSBleHRlbmQgKGJ0Y3RyYWRlciwge1xuXG4gICAgJ2lkJzogJ2J0Y3R1cmsnLFxuICAgICduYW1lJzogJ0JUQ1R1cmsnLFxuICAgICdjb3VudHJpZXMnOiAnVFInLCAvLyBUdXJrZXlcbiAgICAncmF0ZUxpbWl0JzogMTAwMCxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yNzk5MjcwOS0xOGUxNTY0Ni02NGEzLTExZTctOWZhMi1iMDk1MGVjNzcxMmYuanBnJyxcbiAgICAgICAgJ2FwaSc6ICdodHRwczovL3d3dy5idGN0dXJrLmNvbS9hcGknLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vd3d3LmJ0Y3R1cmsuY29tJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL2dpdGh1Yi5jb20vQlRDVHJhZGVyL2Jyb2tlci1hcGktZG9jcycsXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9UUlknOiB7ICdpZCc6ICdCVEMvVFJZJywgJ3N5bWJvbCc6ICdCVEMvVFJZJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ1RSWScgfSxcbiAgICB9LFxufSlcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgYnRjeCA9IHtcblxuICAgICdpZCc6ICdidGN4JyxcbiAgICAnbmFtZSc6ICdCVENYJyxcbiAgICAnY291bnRyaWVzJzogWyAnSVMnLCAnVVMnLCAnRVUnIF0sXG4gICAgJ3JhdGVMaW1pdCc6IDE1MDAsIC8vIHN1cHBvcnQgaW4gZW5nbGlzaCBpcyB2ZXJ5IHBvb3IsIHVuYWJsZSB0byB0ZWxsIHJhdGUgbGltaXRzXG4gICAgJ3ZlcnNpb24nOiAndjEnLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2Mzg1LTlmZGNjOThjLTVlZDYtMTFlNy04ZjE0LTY2ZDVlNWNkNDdlNi5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vYnRjLXguaXMvYXBpJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL2J0Yy14LmlzJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL2J0Yy14LmlzL2N1c3RvbS9hcGktZG9jdW1lbnQuaHRtbCcsXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnZGVwdGgve2lkfS97bGltaXR9JyxcbiAgICAgICAgICAgICAgICAndGlja2VyL3tpZH0nLFxuICAgICAgICAgICAgICAgICd0cmFkZS97aWR9L3tsaW1pdH0nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnYmFsYW5jZScsXG4gICAgICAgICAgICAgICAgJ2NhbmNlbCcsXG4gICAgICAgICAgICAgICAgJ2hpc3RvcnknLFxuICAgICAgICAgICAgICAgICdvcmRlcicsXG4gICAgICAgICAgICAgICAgJ3JlZGVlbScsXG4gICAgICAgICAgICAgICAgJ3RyYWRlJyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXcnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgICdtYXJrZXRzJzoge1xuICAgICAgICAnQlRDL1VTRCc6IHsgJ2lkJzogJ2J0Yy91c2QnLCAnc3ltYm9sJzogJ0JUQy9VU0QnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnVVNEJyB9LFxuICAgICAgICAnQlRDL0VVUic6IHsgJ2lkJzogJ2J0Yy9ldXInLCAnc3ltYm9sJzogJ0JUQy9FVVInLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnRVVSJyB9LFxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBsZXQgYmFsYW5jZXMgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0QmFsYW5jZSAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiBiYWxhbmNlcyB9O1xuICAgICAgICBsZXQgY3VycmVuY2llcyA9IE9iamVjdC5rZXlzIChiYWxhbmNlcyk7XG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgY3VycmVuY2llcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gY3VycmVuY2llc1tjXTtcbiAgICAgICAgICAgIGxldCB1cHBlcmNhc2UgPSBjdXJyZW5jeS50b1VwcGVyQ2FzZSAoKTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogYmFsYW5jZXNbY3VycmVuY3ldLFxuICAgICAgICAgICAgICAgICd1c2VkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IGJhbGFuY2VzW2N1cnJlbmN5XSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXN1bHRbdXBwZXJjYXNlXSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IGF3YWl0IHRoaXMucHVibGljR2V0RGVwdGhJZExpbWl0ICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2lkJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICdsaW1pdCc6IDEwMDAsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IFtdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaWRlcyA9IFsgJ2JpZHMnLCAnYXNrcycgXTtcbiAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBzaWRlcy5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1tzXTtcbiAgICAgICAgICAgIGxldCBvcmRlcnMgPSBvcmRlcmJvb2tbc2lkZV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBvcmRlciA9IG9yZGVyc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgcHJpY2UgPSBvcmRlclsncHJpY2UnXTtcbiAgICAgICAgICAgICAgICBsZXQgYW1vdW50ID0gb3JkZXJbJ2Ftb3VudCddO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtzaWRlXS5wdXNoIChbIHByaWNlLCBhbW91bnQgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBsZXQgdGlja2VyID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRUaWNrZXJJZCAoe1xuICAgICAgICAgICAgJ2lkJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aWNrZXJbJ3RpbWUnXSAqIDEwMDA7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2hpZ2gnXSksXG4gICAgICAgICAgICAnbG93JzogcGFyc2VGbG9hdCAodGlja2VyWydsb3cnXSksXG4gICAgICAgICAgICAnYmlkJzogcGFyc2VGbG9hdCAodGlja2VyWydzZWxsJ10pLFxuICAgICAgICAgICAgJ2Fzayc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYnV5J10pLFxuICAgICAgICAgICAgJ3Z3YXAnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnb3Blbic6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjbG9zZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdmaXJzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsYXN0JzogcGFyc2VGbG9hdCAodGlja2VyWydsYXN0J10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndm9sdW1lJ10pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldFRyYWRlSWRMaW1pdCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdpZCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgICAgICAnbGltaXQnOiAxMDAwLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdFRyYWRlICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ3R5cGUnOiBzaWRlLnRvVXBwZXJDYXNlICgpLFxuICAgICAgICAgICAgJ21hcmtldCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgICAgICAnYW1vdW50JzogYW1vdW50LFxuICAgICAgICAgICAgJ3ByaWNlJzogcHJpY2UsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXNwb25zZSxcbiAgICAgICAgICAgICdpZCc6IHJlc3BvbnNlWydvcmRlciddWydpZCddLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJpdmF0ZVBvc3RDYW5jZWwgKHsgJ29yZGVyJzogaWQgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ10gKyAnLycgKyB0aGlzLnZlcnNpb24gKyAnLyc7XG4gICAgICAgIGlmIChhcGkgPT0gJ3B1YmxpYycpIHtcbiAgICAgICAgICAgIHVybCArPSB0aGlzLmltcGxvZGVQYXJhbXMgKHBhdGgsIHBhcmFtcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpO1xuICAgICAgICAgICAgdXJsICs9IGFwaTtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLnVybGVuY29kZSAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICAgICAnTWV0aG9kJzogcGF0aC50b1VwcGVyQ2FzZSAoKSxcbiAgICAgICAgICAgICAgICAnTm9uY2UnOiBub25jZSxcbiAgICAgICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgICAgICAgJ0tleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgICAgICdTaWduYXR1cmUnOiB0aGlzLmhtYWMgKHRoaXMuZW5jb2RlIChib2R5KSwgdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSwgJ3NoYTUxMicpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgICAgIGlmICgnZXJyb3InIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlWydlcnJvciddKSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBidGVyID0ge1xuICAgICdpZCc6ICdidGVyJyxcbiAgICAnbmFtZSc6ICdCdGVyJyxcbiAgICAnY291bnRyaWVzJzogWyAnVkcnLCAnQ04nIF0sIC8vIEJyaXRpc2ggVmlyZ2luIElzbGFuZHMsIENoaW5hXG4gICAgJ3ZlcnNpb24nOiAnMicsXG4gICAgJ2hhc0ZldGNoVGlja2Vycyc6IHRydWUsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc5ODA0NzktY2ZhMzE4OGMtNjM4Ny0xMWU3LTgxOTEtOTNmYzQxODRiYTVjLmpwZycsXG4gICAgICAgICdhcGknOiB7XG4gICAgICAgICAgICAncHVibGljJzogJ2h0dHBzOi8vZGF0YS5idGVyLmNvbS9hcGknLFxuICAgICAgICAgICAgJ3ByaXZhdGUnOiAnaHR0cHM6Ly9hcGkuYnRlci5jb20vYXBpJyxcbiAgICAgICAgfSxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL2J0ZXIuY29tJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL2J0ZXIuY29tL2FwaTInLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ3BhaXJzJyxcbiAgICAgICAgICAgICAgICAnbWFya2V0aW5mbycsXG4gICAgICAgICAgICAgICAgJ21hcmtldGxpc3QnLFxuICAgICAgICAgICAgICAgICd0aWNrZXJzJyxcbiAgICAgICAgICAgICAgICAndGlja2VyL3tpZH0nLFxuICAgICAgICAgICAgICAgICdvcmRlckJvb2sve2lkfScsXG4gICAgICAgICAgICAgICAgJ3RyYWRlL3tpZH0nLFxuICAgICAgICAgICAgICAgICd0cmFkZUhpc3Rvcnkve2lkfScsXG4gICAgICAgICAgICAgICAgJ3RyYWRlSGlzdG9yeS97aWR9L3t0aWR9JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2JhbGFuY2VzJyxcbiAgICAgICAgICAgICAgICAnZGVwb3NpdEFkZHJlc3MnLFxuICAgICAgICAgICAgICAgICduZXdBZGRyZXNzJyxcbiAgICAgICAgICAgICAgICAnZGVwb3NpdHNXaXRoZHJhd2FscycsXG4gICAgICAgICAgICAgICAgJ2J1eScsXG4gICAgICAgICAgICAgICAgJ3NlbGwnLFxuICAgICAgICAgICAgICAgICdjYW5jZWxPcmRlcicsXG4gICAgICAgICAgICAgICAgJ2NhbmNlbEFsbE9yZGVycycsXG4gICAgICAgICAgICAgICAgJ2dldE9yZGVyJyxcbiAgICAgICAgICAgICAgICAnb3Blbk9yZGVycycsXG4gICAgICAgICAgICAgICAgJ3RyYWRlSGlzdG9yeScsXG4gICAgICAgICAgICAgICAgJ3dpdGhkcmF3JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoTWFya2V0cyAoKSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0TWFya2V0bGlzdCAoKTtcbiAgICAgICAgbGV0IG1hcmtldHMgPSByZXNwb25zZVsnZGF0YSddO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgbWFya2V0cy5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IG1hcmtldHNbcF07XG4gICAgICAgICAgICBsZXQgaWQgPSBtYXJrZXRbJ3BhaXInXTtcbiAgICAgICAgICAgIGxldCBiYXNlID0gbWFya2V0WydjdXJyX2EnXTtcbiAgICAgICAgICAgIGxldCBxdW90ZSA9IG1hcmtldFsnY3Vycl9iJ107XG4gICAgICAgICAgICBiYXNlID0gdGhpcy5jb21tb25DdXJyZW5jeUNvZGUgKGJhc2UpO1xuICAgICAgICAgICAgcXVvdGUgPSB0aGlzLmNvbW1vbkN1cnJlbmN5Q29kZSAocXVvdGUpO1xuICAgICAgICAgICAgbGV0IHN5bWJvbCA9IGJhc2UgKyAnLycgKyBxdW90ZTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoICh7XG4gICAgICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgICAgICAgICAgJ3N5bWJvbCc6IHN5bWJvbCxcbiAgICAgICAgICAgICAgICAnYmFzZSc6IGJhc2UsXG4gICAgICAgICAgICAgICAgJ3F1b3RlJzogcXVvdGUsXG4gICAgICAgICAgICAgICAgJ2luZm8nOiBtYXJrZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgYmFsYW5jZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RCYWxhbmNlcyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiBiYWxhbmNlIH07XG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgdGhpcy5jdXJyZW5jaWVzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSB0aGlzLmN1cnJlbmNpZXNbY107XG4gICAgICAgICAgICBsZXQgY29kZSA9IHRoaXMuY29tbW9uQ3VycmVuY3lDb2RlIChjdXJyZW5jeSk7XG4gICAgICAgICAgICBsZXQgYWNjb3VudCA9IHtcbiAgICAgICAgICAgICAgICAnZnJlZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAndXNlZCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAndG90YWwnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKCdhdmFpbGFibGUnIGluIGJhbGFuY2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVuY3kgaW4gYmFsYW5jZVsnYXZhaWxhYmxlJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgYWNjb3VudFsnZnJlZSddID0gcGFyc2VGbG9hdCAoYmFsYW5jZVsnYXZhaWxhYmxlJ11bY3VycmVuY3ldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoJ2xvY2tlZCcgaW4gYmFsYW5jZSkge1xuICAgICAgICAgICAgICAgIGlmIChjdXJyZW5jeSBpbiBiYWxhbmNlWydsb2NrZWQnXSkge1xuICAgICAgICAgICAgICAgICAgICBhY2NvdW50Wyd1c2VkJ10gPSBwYXJzZUZsb2F0IChiYWxhbmNlWydsb2NrZWQnXVtjdXJyZW5jeV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFjY291bnRbJ3RvdGFsJ10gPSB0aGlzLnN1bSAoYWNjb3VudFsnZnJlZSddLCBhY2NvdW50Wyd1c2VkJ10pO1xuICAgICAgICAgICAgcmVzdWx0W2NvZGVdID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRPcmRlckJvb2tJZCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdpZCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IFtdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaWRlcyA9IFsgJ2JpZHMnLCAnYXNrcycgXTtcbiAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBzaWRlcy5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1tzXTtcbiAgICAgICAgICAgIGxldCBvcmRlcnMgPSBvcmRlcmJvb2tbc2lkZV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBvcmRlciA9IG9yZGVyc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgcHJpY2UgPSBwYXJzZUZsb2F0IChvcmRlclswXSk7XG4gICAgICAgICAgICAgICAgbGV0IGFtb3VudCA9IHBhcnNlRmxvYXQgKG9yZGVyWzFdKTtcbiAgICAgICAgICAgICAgICByZXN1bHRbc2lkZV0ucHVzaCAoWyBwcmljZSwgYW1vdW50IF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlc3VsdFsnYXNrcyddID0gdGhpcy5zb3J0QnkgKHJlc3VsdFsnYXNrcyddLCAwKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgcGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaDI0aHInXSksXG4gICAgICAgICAgICAnbG93JzogcGFyc2VGbG9hdCAodGlja2VyWydsb3cyNGhyJ10pLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaGVzdEJpZCddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvd2VzdEFzayddKSxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdCddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3BlcmNlbnRDaGFuZ2UnXSksXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2Jhc2VWb2x1bWUnXSksXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3F1b3RlVm9sdW1lJ10pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VycyAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCB0aWNrZXJzID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRUaWNrZXJzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge307XG4gICAgICAgIGxldCBpZHMgPSBPYmplY3Qua2V5cyAodGlja2Vycyk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgaWQgPSBpZHNbaV07XG4gICAgICAgICAgICBsZXQgWyBiYXNlSWQsIHF1b3RlSWQgXSA9IGlkLnNwbGl0ICgnXycpO1xuICAgICAgICAgICAgbGV0IGJhc2UgPSBiYXNlSWQudG9VcHBlckNhc2UgKCk7XG4gICAgICAgICAgICBsZXQgcXVvdGUgPSBxdW90ZUlkLnRvVXBwZXJDYXNlICgpO1xuICAgICAgICAgICAgYmFzZSA9IHRoaXMuY29tbW9uQ3VycmVuY3lDb2RlIChiYXNlKTtcbiAgICAgICAgICAgIHF1b3RlID0gdGhpcy5jb21tb25DdXJyZW5jeUNvZGUgKHF1b3RlKTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBiYXNlICsgJy8nICsgcXVvdGU7XG4gICAgICAgICAgICBsZXQgdGlja2VyID0gdGlja2Vyc1tpZF07XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKHN5bWJvbCBpbiB0aGlzLm1hcmtldHMpXG4gICAgICAgICAgICAgICAgbWFya2V0ID0gdGhpcy5tYXJrZXRzW3N5bWJvbF07XG4gICAgICAgICAgICBpZiAoaWQgaW4gdGhpcy5tYXJrZXRzX2J5X2lkKVxuICAgICAgICAgICAgICAgIG1hcmtldCA9IHRoaXMubWFya2V0c19ieV9pZFtpZF07XG4gICAgICAgICAgICByZXN1bHRbc3ltYm9sXSA9IHRoaXMucGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCB0aWNrZXIgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFRpY2tlcklkICh7XG4gICAgICAgICAgICAnaWQnOiBwWydpZCddLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VUaWNrZXIgKHRpY2tlciwgcCk7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldFRyYWRlSGlzdG9yeUlkICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2lkJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGlmICh0eXBlID09ICdtYXJrZXQnKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnIGFsbG93cyBsaW1pdCBvcmRlcnMgb25seScpO1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgbWV0aG9kID0gJ3ByaXZhdGVQb3N0JyArIHRoaXMuY2FwaXRhbGl6ZSAoc2lkZSk7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdjdXJyZW5jeVBhaXInOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICAgICAgJ3JhdGUnOiBwcmljZSxcbiAgICAgICAgICAgICdhbW91bnQnOiBhbW91bnQsXG4gICAgICAgIH07XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXNbbWV0aG9kXSAodGhpcy5leHRlbmQgKG9yZGVyLCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnb3JkZXJOdW1iZXInXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0Q2FuY2VsT3JkZXIgKHsgJ29yZGVyTnVtYmVyJzogaWQgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHByZWZpeCA9IChhcGkgPT0gJ3ByaXZhdGUnKSA/IChhcGkgKyAnLycpIDogJyc7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddW2FwaV0gKyB0aGlzLnZlcnNpb24gKyAnLzEvJyArIHByZWZpeCArIHRoaXMuaW1wbG9kZVBhcmFtcyAocGF0aCwgcGFyYW1zKTtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5vbWl0IChwYXJhbXMsIHRoaXMuZXh0cmFjdFBhcmFtcyAocGF0aCkpO1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHF1ZXJ5KS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChxdWVyeSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpO1xuICAgICAgICAgICAgbGV0IHJlcXVlc3QgPSB7ICdub25jZSc6IG5vbmNlIH07XG4gICAgICAgICAgICBib2R5ID0gdGhpcy51cmxlbmNvZGUgKHRoaXMuZXh0ZW5kIChyZXF1ZXN0LCBxdWVyeSkpO1xuICAgICAgICAgICAgbGV0IHNpZ25hdHVyZSA9IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKGJvZHkpLCB0aGlzLmVuY29kZSAodGhpcy5zZWNyZXQpLCAnc2hhNTEyJyk7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdLZXknOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgICAgICAnU2lnbic6IHNpZ25hdHVyZSxcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtTGVuZ3RoJzogYm9keS5sZW5ndGgudG9TdHJpbmcgKCksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdyZXN1bHQnIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlWydyZXN1bHQnXSAhPSAndHJ1ZScpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBieGludGggPSB7XG5cbiAgICAnaWQnOiAnYnhpbnRoJyxcbiAgICAnbmFtZSc6ICdCWC5pbi50aCcsXG4gICAgJ2NvdW50cmllcyc6ICdUSCcsIC8vIFRoYWlsYW5kXG4gICAgJ3JhdGVMaW1pdCc6IDE1MDAsXG4gICAgJ2hhc0ZldGNoVGlja2Vycyc6IHRydWUsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc3NjY0MTItNTY3YjFlYjQtNWVkNy0xMWU3LTk0YTgtZmY2YTM4ODRmNmM1LmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly9ieC5pbi50aC9hcGknLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vYnguaW4udGgnLFxuICAgICAgICAnZG9jJzogJ2h0dHBzOi8vYnguaW4udGgvaW5mby9hcGknLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJycsIC8vIHRpY2tlclxuICAgICAgICAgICAgICAgICdvcHRpb25zJyxcbiAgICAgICAgICAgICAgICAnb3B0aW9uYm9vaycsXG4gICAgICAgICAgICAgICAgJ29yZGVyYm9vaycsXG4gICAgICAgICAgICAgICAgJ3BhaXJpbmcnLFxuICAgICAgICAgICAgICAgICd0cmFkZScsXG4gICAgICAgICAgICAgICAgJ3RyYWRlaGlzdG9yeScsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAncHJpdmF0ZSc6IHtcbiAgICAgICAgICAgICdwb3N0JzogW1xuICAgICAgICAgICAgICAgICdiYWxhbmNlJyxcbiAgICAgICAgICAgICAgICAnYmlsbGVyJyxcbiAgICAgICAgICAgICAgICAnYmlsbGdyb3VwJyxcbiAgICAgICAgICAgICAgICAnYmlsbHBheScsXG4gICAgICAgICAgICAgICAgJ2NhbmNlbCcsXG4gICAgICAgICAgICAgICAgJ2RlcG9zaXQnLFxuICAgICAgICAgICAgICAgICdnZXRvcmRlcnMnLFxuICAgICAgICAgICAgICAgICdoaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAnb3B0aW9uLWlzc3VlJyxcbiAgICAgICAgICAgICAgICAnb3B0aW9uLWJpZCcsXG4gICAgICAgICAgICAgICAgJ29wdGlvbi1zZWxsJyxcbiAgICAgICAgICAgICAgICAnb3B0aW9uLW15aXNzdWUnLFxuICAgICAgICAgICAgICAgICdvcHRpb24tbXliaWQnLFxuICAgICAgICAgICAgICAgICdvcHRpb24tbXlvcHRpb25zJyxcbiAgICAgICAgICAgICAgICAnb3B0aW9uLWV4ZXJjaXNlJyxcbiAgICAgICAgICAgICAgICAnb3B0aW9uLWNhbmNlbCcsXG4gICAgICAgICAgICAgICAgJ29wdGlvbi1oaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAnb3JkZXInLFxuICAgICAgICAgICAgICAgICd3aXRoZHJhd2FsJyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXdhbC1oaXN0b3J5JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoTWFya2V0cyAoKSB7XG4gICAgICAgIGxldCBtYXJrZXRzID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRQYWlyaW5nICgpO1xuICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzIChtYXJrZXRzKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGxldCBwID0gMDsgcCA8IGtleXMubGVuZ3RoOyBwKyspIHtcbiAgICAgICAgICAgIGxldCBtYXJrZXQgPSBtYXJrZXRzW2tleXNbcF1dO1xuICAgICAgICAgICAgbGV0IGlkID0gbWFya2V0WydwYWlyaW5nX2lkJ10udG9TdHJpbmcgKCk7XG4gICAgICAgICAgICBsZXQgYmFzZSA9IG1hcmtldFsncHJpbWFyeV9jdXJyZW5jeSddO1xuICAgICAgICAgICAgbGV0IHF1b3RlID0gbWFya2V0WydzZWNvbmRhcnlfY3VycmVuY3knXTtcbiAgICAgICAgICAgIGJhc2UgPSB0aGlzLmNvbW1vbkN1cnJlbmN5Q29kZSAoYmFzZSk7XG4gICAgICAgICAgICBxdW90ZSA9IHRoaXMuY29tbW9uQ3VycmVuY3lDb2RlIChxdW90ZSk7XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gYmFzZSArICcvJyArIHF1b3RlO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2ggKHtcbiAgICAgICAgICAgICAgICAnaWQnOiBpZCxcbiAgICAgICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgICAgICdiYXNlJzogYmFzZSxcbiAgICAgICAgICAgICAgICAncXVvdGUnOiBxdW90ZSxcbiAgICAgICAgICAgICAgICAnaW5mbyc6IG1hcmtldCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGNvbW1vbkN1cnJlbmN5Q29kZSAoY3VycmVuY3kpIHtcbiAgICAgICAgLy8gd2h5IHdvdWxkIHRoZXkgdXNlIHRocmVlIGxldHRlcnMgaW5zdGVhZCBvZiBmb3VyIGZvciBjdXJyZW5jeSBjb2Rlc1xuICAgICAgICBpZiAoY3VycmVuY3kgPT0gJ0RBUycpXG4gICAgICAgICAgICByZXR1cm4gJ0RBU0gnO1xuICAgICAgICBpZiAoY3VycmVuY3kgPT0gJ0RPRycpXG4gICAgICAgICAgICByZXR1cm4gJ0RPR0UnO1xuICAgICAgICByZXR1cm4gY3VycmVuY3k7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RCYWxhbmNlICgpO1xuICAgICAgICBsZXQgYmFsYW5jZSA9IHJlc3BvbnNlWydiYWxhbmNlJ107XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogYmFsYW5jZSB9O1xuICAgICAgICBsZXQgY3VycmVuY2llcyA9IE9iamVjdC5rZXlzIChiYWxhbmNlKTtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBjdXJyZW5jaWVzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBjdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IGNvZGUgPSB0aGlzLmNvbW1vbkN1cnJlbmN5Q29kZSAoY3VycmVuY3kpO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiBwYXJzZUZsb2F0IChiYWxhbmNlW2N1cnJlbmN5XVsnYXZhaWxhYmxlJ10pLFxuICAgICAgICAgICAgICAgICd1c2VkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHBhcnNlRmxvYXQgKGJhbGFuY2VbY3VycmVuY3ldWyd0b3RhbCddKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhY2NvdW50Wyd1c2VkJ10gPSBhY2NvdW50Wyd0b3RhbCddIC0gYWNjb3VudFsnZnJlZSddO1xuICAgICAgICAgICAgcmVzdWx0W2NvZGVdID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRPcmRlcmJvb2sgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAncGFpcmluZyc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IFtdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaWRlcyA9IFsgJ2JpZHMnLCAnYXNrcycgXTtcbiAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBzaWRlcy5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1tzXTtcbiAgICAgICAgICAgIGxldCBvcmRlcnMgPSBvcmRlcmJvb2tbc2lkZV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBvcmRlciA9IG9yZGVyc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgcHJpY2UgPSBwYXJzZUZsb2F0IChvcmRlclswXSk7XG4gICAgICAgICAgICAgICAgbGV0IGFtb3VudCA9IHBhcnNlRmxvYXQgKG9yZGVyWzFdKTtcbiAgICAgICAgICAgICAgICByZXN1bHRbc2lkZV0ucHVzaCAoWyBwcmljZSwgYW1vdW50IF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIHBhcnNlVGlja2VyICh0aWNrZXIsIG1hcmtldCkge1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbG93JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnb3JkZXJib29rJ11bJ2JpZHMnXVsnaGlnaGJpZCddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ29yZGVyYm9vayddWydhc2tzJ11bJ2hpZ2hiaWQnXSksXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xhc3RfcHJpY2UnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogcGFyc2VGbG9hdCAodGlja2VyWydjaGFuZ2UnXSksXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbHVtZV8yNGhvdXJzJ10pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VycyAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCB0aWNrZXJzID0gYXdhaXQgdGhpcy5wdWJsaWNHZXQgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7fTtcbiAgICAgICAgbGV0IGlkcyA9IE9iamVjdC5rZXlzICh0aWNrZXJzKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCBpZCA9IGlkc1tpXTtcbiAgICAgICAgICAgIGxldCB0aWNrZXIgPSB0aWNrZXJzW2lkXTtcbiAgICAgICAgICAgIGxldCBtYXJrZXQgPSB0aGlzLm1hcmtldHNfYnlfaWRbaWRdO1xuICAgICAgICAgICAgbGV0IHN5bWJvbCA9IG1hcmtldFsnc3ltYm9sJ107XG4gICAgICAgICAgICByZXN1bHRbc3ltYm9sXSA9IHRoaXMucGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCB0aWNrZXJzID0gYXdhaXQgdGhpcy5wdWJsaWNHZXQgKHsgJ3BhaXJpbmcnOiBwWydpZCddIH0pO1xuICAgICAgICBsZXQgaWQgPSBwWydpZCddLnRvU3RyaW5nICgpO1xuICAgICAgICBsZXQgdGlja2VyID0gdGlja2Vyc1tpZF07XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIHApO1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wdWJsaWNHZXRUcmFkZSAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdwYWlyaW5nJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RPcmRlciAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdwYWlyaW5nJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICd0eXBlJzogc2lkZSxcbiAgICAgICAgICAgICdhbW91bnQnOiBhbW91bnQsXG4gICAgICAgICAgICAncmF0ZSc6IHByaWNlLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnb3JkZXJfaWQnXS50b1N0cmluZyAoKSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBwYWlyaW5nID0gdW5kZWZpbmVkOyAvLyBUT0RPIGZpeG1lXG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0Q2FuY2VsICh7XG4gICAgICAgICAgICAnb3JkZXJfaWQnOiBpZCxcbiAgICAgICAgICAgICdwYWlyaW5nJzogcGFpcmluZyxcbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ10gKyAnLyc7XG4gICAgICAgIGlmIChwYXRoKVxuICAgICAgICAgICAgdXJsICs9IHBhdGggKyAnLyc7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyAocGFyYW1zKS5sZW5ndGgpXG4gICAgICAgICAgICB1cmwgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHBhcmFtcyk7XG4gICAgICAgIGlmIChhcGkgPT0gJ3ByaXZhdGUnKSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpO1xuICAgICAgICAgICAgbGV0IGF1dGggPSB0aGlzLmFwaUtleSArIG5vbmNlLnRvU3RyaW5nICgpICsgdGhpcy5zZWNyZXQ7XG4gICAgICAgICAgICBsZXQgc2lnbmF0dXJlID0gdGhpcy5oYXNoICh0aGlzLmVuY29kZSAoYXV0aCksICdzaGEyNTYnKTtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLnVybGVuY29kZSAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICAgICAna2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ25vbmNlJzogbm9uY2UsXG4gICAgICAgICAgICAgICAgJ3NpZ25hdHVyZSc6IHNpZ25hdHVyZSxcbiAgICAgICAgICAgICAgICAvLyB0d29mYTogdGhpcy50d29mYSxcbiAgICAgICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtTGVuZ3RoJzogYm9keS5sZW5ndGgsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJylcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgaWYgKCdzdWNjZXNzJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIGlmIChyZXNwb25zZVsnc3VjY2VzcyddKVxuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgY2NleCA9IHtcblxuICAgICdpZCc6ICdjY2V4JyxcbiAgICAnbmFtZSc6ICdDLUNFWCcsXG4gICAgJ2NvdW50cmllcyc6IFsgJ0RFJywgJ0VVJyBdLFxuICAgICdyYXRlTGltaXQnOiAxNTAwLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2NDMzLTE2ODgxZjkwLTVlZDgtMTFlNy05MmY4LTNkOTJjYzc0N2E2Yy5qcGcnLFxuICAgICAgICAnYXBpJzoge1xuICAgICAgICAgICAgJ3RpY2tlcnMnOiAnaHR0cHM6Ly9jLWNleC5jb20vdCcsXG4gICAgICAgICAgICAncHVibGljJzogJ2h0dHBzOi8vYy1jZXguY29tL3QvYXBpX3B1Yi5odG1sJyxcbiAgICAgICAgICAgICdwcml2YXRlJzogJ2h0dHBzOi8vYy1jZXguY29tL3QvYXBpLmh0bWwnLFxuICAgICAgICB9LFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vYy1jZXguY29tJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL2MtY2V4LmNvbS8/aWQ9YXBpJyxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICd0aWNrZXJzJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnY29pbm5hbWVzJyxcbiAgICAgICAgICAgICAgICAne21hcmtldH0nLFxuICAgICAgICAgICAgICAgICdwYWlycycsXG4gICAgICAgICAgICAgICAgJ3ByaWNlcycsXG4gICAgICAgICAgICAgICAgJ3ZvbHVtZV97Y29pbn0nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ2JhbGFuY2VkaXN0cmlidXRpb24nLFxuICAgICAgICAgICAgICAgICdtYXJrZXRoaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAnbWFya2V0cycsXG4gICAgICAgICAgICAgICAgJ21hcmtldHN1bW1hcmllcycsXG4gICAgICAgICAgICAgICAgJ29yZGVyYm9vaycsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAncHJpdmF0ZSc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ2J1eWxpbWl0JyxcbiAgICAgICAgICAgICAgICAnY2FuY2VsJyxcbiAgICAgICAgICAgICAgICAnZ2V0YmFsYW5jZScsXG4gICAgICAgICAgICAgICAgJ2dldGJhbGFuY2VzJyxcbiAgICAgICAgICAgICAgICAnZ2V0b3Blbm9yZGVycycsXG4gICAgICAgICAgICAgICAgJ2dldG9yZGVyJyxcbiAgICAgICAgICAgICAgICAnZ2V0b3JkZXJoaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAnbXl0cmFkZXMnLFxuICAgICAgICAgICAgICAgICdzZWxsbGltaXQnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hNYXJrZXRzICgpIHtcbiAgICAgICAgbGV0IG1hcmtldHMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgcCA9IDA7IHAgPCBtYXJrZXRzWydyZXN1bHQnXS5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IG1hcmtldHNbJ3Jlc3VsdCddW3BdO1xuICAgICAgICAgICAgbGV0IGlkID0gbWFya2V0WydNYXJrZXROYW1lJ107XG4gICAgICAgICAgICBsZXQgYmFzZSA9IG1hcmtldFsnTWFya2V0Q3VycmVuY3knXTtcbiAgICAgICAgICAgIGxldCBxdW90ZSA9IG1hcmtldFsnQmFzZUN1cnJlbmN5J107XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gYmFzZSArICcvJyArIHF1b3RlO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2ggKHtcbiAgICAgICAgICAgICAgICAnaWQnOiBpZCxcbiAgICAgICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgICAgICdiYXNlJzogYmFzZSxcbiAgICAgICAgICAgICAgICAncXVvdGUnOiBxdW90ZSxcbiAgICAgICAgICAgICAgICAnaW5mbyc6IG1hcmtldCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZUdldEJhbGFuY2VzICgpO1xuICAgICAgICBsZXQgYmFsYW5jZXMgPSByZXNwb25zZVsncmVzdWx0J107XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogYmFsYW5jZXMgfTtcbiAgICAgICAgZm9yIChsZXQgYiA9IDA7IGIgPCBiYWxhbmNlcy5sZW5ndGg7IGIrKykge1xuICAgICAgICAgICAgbGV0IGJhbGFuY2UgPSBiYWxhbmNlc1tiXTtcbiAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IGJhbGFuY2VbJ0N1cnJlbmN5J107XG4gICAgICAgICAgICBsZXQgYWNjb3VudCA9IHtcbiAgICAgICAgICAgICAgICAnZnJlZSc6IGJhbGFuY2VbJ0F2YWlsYWJsZSddLFxuICAgICAgICAgICAgICAgICd1c2VkJzogYmFsYW5jZVsnUGVuZGluZyddLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IGJhbGFuY2VbJ0JhbGFuY2UnXSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldE9yZGVyYm9vayAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdtYXJrZXQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICAgICAgJ3R5cGUnOiAnYm90aCcsXG4gICAgICAgICAgICAnZGVwdGgnOiAxMDAsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgb3JkZXJib29rID0gcmVzcG9uc2VbJ3Jlc3VsdCddO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IFtdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaWRlcyA9IHsgJ2JpZHMnOiAnYnV5JywgJ2Fza3MnOiAnc2VsbCcgfTtcbiAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyAoc2lkZXMpO1xuICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGtleXMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgIGxldCBrZXkgPSBrZXlzW2tdO1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1trZXldO1xuICAgICAgICAgICAgbGV0IG9yZGVycyA9IG9yZGVyYm9va1tzaWRlXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9yZGVyID0gb3JkZXJzW2ldO1xuICAgICAgICAgICAgICAgIGxldCBwcmljZSA9IHBhcnNlRmxvYXQgKG9yZGVyWydSYXRlJ10pO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBwYXJzZUZsb2F0IChvcmRlclsnUXVhbnRpdHknXSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W2tleV0ucHVzaCAoWyBwcmljZSwgYW1vdW50IF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIHBhcnNlVGlja2VyICh0aWNrZXIsIG1hcmtldCkge1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGlja2VyWyd1cGRhdGVkJ10gKiAxMDAwO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydoaWdoJ10pLFxuICAgICAgICAgICAgJ2xvdyc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbG93J10pLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYnV5J10pLFxuICAgICAgICAgICAgJ2Fzayc6IHBhcnNlRmxvYXQgKHRpY2tlclsnc2VsbCddKSxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdHByaWNlJ10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2F2ZyddKSxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWydidXlzdXBwb3J0J10pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy50aWNrZXJzR2V0TWFya2V0ICh7XG4gICAgICAgICAgICAnbWFya2V0JzogcFsnaWQnXS50b0xvd2VyQ2FzZSAoKSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aWNrZXIgPSByZXNwb25zZVsndGlja2VyJ107XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIHApO1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wdWJsaWNHZXRNYXJrZXRoaXN0b3J5ICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ21hcmtldCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgICAgICAndHlwZSc6ICdib3RoJyxcbiAgICAgICAgICAgICdkZXB0aCc6IDEwMCxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBtZXRob2QgPSAncHJpdmF0ZUdldCcgKyB0aGlzLmNhcGl0YWxpemUgKHNpZGUpICsgdHlwZTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpc1ttZXRob2RdICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ21hcmtldCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgICAgICAncXVhbnRpdHknOiBhbW91bnQsXG4gICAgICAgICAgICAncmF0ZSc6IHByaWNlLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsncmVzdWx0J11bJ3V1aWQnXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVHZXRDYW5jZWwgKHsgJ3V1aWQnOiBpZCB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXVthcGldO1xuICAgICAgICBpZiAoYXBpID09ICdwcml2YXRlJykge1xuICAgICAgICAgICAgbGV0IG5vbmNlID0gdGhpcy5ub25jZSAoKS50b1N0cmluZyAoKTtcbiAgICAgICAgICAgIGxldCBxdWVyeSA9IHRoaXMua2V5c29ydCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICAgICAnYSc6IHBhdGgsXG4gICAgICAgICAgICAgICAgJ2FwaWtleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgICAgICdub25jZSc6IG5vbmNlLFxuICAgICAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgICAgICB1cmwgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHF1ZXJ5KTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7ICdhcGlzaWduJzogdGhpcy5obWFjICh0aGlzLmVuY29kZSAodXJsKSwgdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSwgJ3NoYTUxMicpIH07XG4gICAgICAgIH0gZWxzZSBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICB1cmwgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAgICAgJ2EnOiAnZ2V0JyArIHBhdGgsXG4gICAgICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHVybCArPSAnLycgKyB0aGlzLmltcGxvZGVQYXJhbXMgKHBhdGgsIHBhcmFtcykgKyAnLmpzb24nO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKGFwaSA9PSAndGlja2VycycpXG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgIGlmICgnc3VjY2VzcycgaW4gcmVzcG9uc2UpXG4gICAgICAgICAgICBpZiAocmVzcG9uc2VbJ3N1Y2Nlc3MnXSlcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGNleCA9IHtcblxuICAgICdpZCc6ICdjZXgnLFxuICAgICduYW1lJzogJ0NFWC5JTycsXG4gICAgJ2NvdW50cmllcyc6IFsgJ0dCJywgJ0VVJywgJ0NZJywgJ1JVJyBdLFxuICAgICdyYXRlTGltaXQnOiAxNTAwLFxuICAgICdoYXNGZXRjaFRpY2tlcnMnOiB0cnVlLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2NDQyLThkZGMzM2IwLTVlZDgtMTFlNy04Yjk4LWY3ODZhZWYwZjNjOS5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vY2V4LmlvL2FwaScsXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly9jZXguaW8nLFxuICAgICAgICAnZG9jJzogJ2h0dHBzOi8vY2V4LmlvL2NleC1hcGknLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ2N1cnJlbmN5X2xpbWl0cycsXG4gICAgICAgICAgICAgICAgJ2xhc3RfcHJpY2Uve3BhaXJ9JyxcbiAgICAgICAgICAgICAgICAnbGFzdF9wcmljZXMve2N1cnJlbmNpZXN9JyxcbiAgICAgICAgICAgICAgICAnb2hsY3YvaGQve3l5eXltbWRkfS97cGFpcn0nLFxuICAgICAgICAgICAgICAgICdvcmRlcl9ib29rL3twYWlyfScsXG4gICAgICAgICAgICAgICAgJ3RpY2tlci97cGFpcn0nLFxuICAgICAgICAgICAgICAgICd0aWNrZXJzL3tjdXJyZW5jaWVzfScsXG4gICAgICAgICAgICAgICAgJ3RyYWRlX2hpc3Rvcnkve3BhaXJ9JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnY29udmVydC97cGFpcn0nLFxuICAgICAgICAgICAgICAgICdwcmljZV9zdGF0cy97cGFpcn0nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnYWN0aXZlX29yZGVyc19zdGF0dXMvJyxcbiAgICAgICAgICAgICAgICAnYXJjaGl2ZWRfb3JkZXJzL3twYWlyfScsXG4gICAgICAgICAgICAgICAgJ2JhbGFuY2UvJyxcbiAgICAgICAgICAgICAgICAnY2FuY2VsX29yZGVyLycsXG4gICAgICAgICAgICAgICAgJ2NhbmNlbF9vcmRlcnMve3BhaXJ9JyxcbiAgICAgICAgICAgICAgICAnY2FuY2VsX3JlcGxhY2Vfb3JkZXIve3BhaXJ9JyxcbiAgICAgICAgICAgICAgICAnY2xvc2VfcG9zaXRpb24ve3BhaXJ9JyxcbiAgICAgICAgICAgICAgICAnZ2V0X2FkZHJlc3MvJyxcbiAgICAgICAgICAgICAgICAnZ2V0X215ZmVlLycsXG4gICAgICAgICAgICAgICAgJ2dldF9vcmRlci8nLFxuICAgICAgICAgICAgICAgICdnZXRfb3JkZXJfdHgvJyxcbiAgICAgICAgICAgICAgICAnb3Blbl9vcmRlcnMve3BhaXJ9JyxcbiAgICAgICAgICAgICAgICAnb3Blbl9vcmRlcnMvJyxcbiAgICAgICAgICAgICAgICAnb3Blbl9wb3NpdGlvbi97cGFpcn0nLFxuICAgICAgICAgICAgICAgICdvcGVuX3Bvc2l0aW9ucy97cGFpcn0nLFxuICAgICAgICAgICAgICAgICdwbGFjZV9vcmRlci97cGFpcn0nLFxuICAgICAgICAgICAgICAgICdwbGFjZV9vcmRlci97cGFpcn0nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE1hcmtldHMgKCkge1xuICAgICAgICBsZXQgbWFya2V0cyA9IGF3YWl0IHRoaXMucHVibGljR2V0Q3VycmVuY3lMaW1pdHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgcCA9IDA7IHAgPCBtYXJrZXRzWydkYXRhJ11bJ3BhaXJzJ10ubGVuZ3RoOyBwKyspIHtcbiAgICAgICAgICAgIGxldCBtYXJrZXQgPSBtYXJrZXRzWydkYXRhJ11bJ3BhaXJzJ11bcF07XG4gICAgICAgICAgICBsZXQgaWQgPSBtYXJrZXRbJ3N5bWJvbDEnXSArICcvJyArIG1hcmtldFsnc3ltYm9sMiddO1xuICAgICAgICAgICAgbGV0IHN5bWJvbCA9IGlkO1xuICAgICAgICAgICAgbGV0IFsgYmFzZSwgcXVvdGUgXSA9IHN5bWJvbC5zcGxpdCAoJy8nKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoICh7XG4gICAgICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgICAgICAgICAgJ3N5bWJvbCc6IHN5bWJvbCxcbiAgICAgICAgICAgICAgICAnYmFzZSc6IGJhc2UsXG4gICAgICAgICAgICAgICAgJ3F1b3RlJzogcXVvdGUsXG4gICAgICAgICAgICAgICAgJ2luZm8nOiBtYXJrZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgYmFsYW5jZXMgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0QmFsYW5jZSAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiBiYWxhbmNlcyB9O1xuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IHRoaXMuY3VycmVuY2llcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gdGhpcy5jdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiBwYXJzZUZsb2F0IChiYWxhbmNlc1tjdXJyZW5jeV1bJ2F2YWlsYWJsZSddKSxcbiAgICAgICAgICAgICAgICAndXNlZCc6IHBhcnNlRmxvYXQgKGJhbGFuY2VzW2N1cnJlbmN5XVsnb3JkZXJzJ10pLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhY2NvdW50Wyd0b3RhbCddID0gdGhpcy5zdW0gKGFjY291bnRbJ2ZyZWUnXSwgYWNjb3VudFsndXNlZCddKTtcbiAgICAgICAgICAgIHJlc3VsdFtjdXJyZW5jeV0gPSBhY2NvdW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSBhd2FpdCAgdGhpcy5wdWJsaWNHZXRPcmRlckJvb2tQYWlyICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ3BhaXInOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IG9yZGVyYm9va1sndGltZXN0YW1wJ10gKiAxMDAwO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBvcmRlcmJvb2tbJ2JpZHMnXSxcbiAgICAgICAgICAgICdhc2tzJzogb3JkZXJib29rWydhc2tzJ10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBwYXJzZVRpY2tlciAodGlja2VyLCBtYXJrZXQpIHtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHBhcnNlSW50ICh0aWNrZXJbJ3RpbWVzdGFtcCddKSAqIDEwMDA7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2hpZ2gnXSksXG4gICAgICAgICAgICAnbG93JzogcGFyc2VGbG9hdCAodGlja2VyWydsb3cnXSksXG4gICAgICAgICAgICAnYmlkJzogcGFyc2VGbG9hdCAodGlja2VyWydiaWQnXSksXG4gICAgICAgICAgICAnYXNrJzogcGFyc2VGbG9hdCAodGlja2VyWydhc2snXSksXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xhc3QnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWyd2b2x1bWUnXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXJzICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IGN1cnJlbmNpZXMgPSB0aGlzLmN1cnJlbmNpZXMuam9pbiAoJy8nKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRUaWNrZXJzQ3VycmVuY2llcyAoe1xuICAgICAgICAgICAgJ2N1cnJlbmNpZXMnOiBjdXJyZW5jaWVzLFxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IHRpY2tlcnMgPSByZXNwb25zZVsnZGF0YSddO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge307XG4gICAgICAgIGZvciAobGV0IHQgPSAwOyB0IDwgdGlja2Vycy5sZW5ndGg7IHQrKykge1xuICAgICAgICAgICAgbGV0IHRpY2tlciA9IHRpY2tlcnNbdF07XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gdGlja2VyWydwYWlyJ10ucmVwbGFjZSAoJzonLCAnLycpO1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IHRoaXMubWFya2V0c1tzeW1ib2xdO1xuICAgICAgICAgICAgcmVzdWx0W3N5bWJvbF0gPSB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIG1hcmtldCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgdGlja2VyID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRUaWNrZXJQYWlyICh7XG4gICAgICAgICAgICAncGFpcic6IHBbJ2lkJ10sXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVRpY2tlciAodGlja2VyLCBwKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0VHJhZGVIaXN0b3J5UGFpciAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdwYWlyJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdwYWlyJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICd0eXBlJzogc2lkZSxcbiAgICAgICAgICAgICdhbW91bnQnOiBhbW91bnQsXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlID09ICdsaW1pdCcpXG4gICAgICAgICAgICBvcmRlclsncHJpY2UnXSA9IHByaWNlO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBvcmRlclsnb3JkZXJfdHlwZSddID0gdHlwZTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdFBsYWNlT3JkZXJQYWlyICh0aGlzLmV4dGVuZCAob3JkZXIsIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXNwb25zZSxcbiAgICAgICAgICAgICdpZCc6IHJlc3BvbnNlWydpZCddLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJpdmF0ZVBvc3RDYW5jZWxPcmRlciAoeyAnaWQnOiBpZCB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArICcvJyArIHRoaXMuaW1wbG9kZVBhcmFtcyAocGF0aCwgcGFyYW1zKTtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5vbWl0IChwYXJhbXMsIHRoaXMuZXh0cmFjdFBhcmFtcyAocGF0aCkpO1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHF1ZXJ5KS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChxdWVyeSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMudWlkKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBBdXRoZW50aWNhdGlvbkVycm9yICh0aGlzLmlkICsgJyByZXF1aXJlcyBgJyArIHRoaXMuaWQgKyAnLnVpZGAgcHJvcGVydHkgZm9yIGF1dGhlbnRpY2F0aW9uJyk7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpLnRvU3RyaW5nICgpO1xuICAgICAgICAgICAgbGV0IGF1dGggPSBub25jZSArIHRoaXMudWlkICsgdGhpcy5hcGlLZXk7XG4gICAgICAgICAgICBsZXQgc2lnbmF0dXJlID0gdGhpcy5obWFjICh0aGlzLmVuY29kZSAoYXV0aCksIHRoaXMuZW5jb2RlICh0aGlzLnNlY3JldCkpO1xuICAgICAgICAgICAgYm9keSA9IHRoaXMudXJsZW5jb2RlICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgICAgICdrZXknOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgICAgICAnc2lnbmF0dXJlJzogc2lnbmF0dXJlLnRvVXBwZXJDYXNlICgpLFxuICAgICAgICAgICAgICAgICdub25jZSc6IG5vbmNlLFxuICAgICAgICAgICAgfSwgcXVlcnkpKTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgICAgICAgICdDb250ZW50LUxlbmd0aCc6IGJvZHkubGVuZ3RoLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgICAgIGlmICgnZScgaW4gcmVzcG9uc2UpIHtcbiAgICAgICAgICAgIGlmICgnb2snIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZVsnb2snXSA9PSAnb2snKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgJyArIHRoaXMuanNvbiAocmVzcG9uc2UpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgY2hidGMgPSB7XG4gICAgJ2lkJzogJ2NoYnRjJyxcbiAgICAnbmFtZSc6ICdDSEJUQycsXG4gICAgJ2NvdW50cmllcyc6ICdDTicsXG4gICAgJ3JhdGVMaW1pdCc6IDEwMDAsXG4gICAgJ3ZlcnNpb24nOiAndjEnLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI4NTU1NjU5LWYwMDQwZGMyLTcxMDktMTFlNy05ZDk5LTY4OGE0MzhiZjlmNC5qcGcnLFxuICAgICAgICAnYXBpJzoge1xuICAgICAgICAgICAgJ3B1YmxpYyc6ICdodHRwOi8vYXBpLmNoYnRjLmNvbS9kYXRhJywgLy8gbm8gaHR0cHMgZm9yIHB1YmxpYyBBUElcbiAgICAgICAgICAgICdwcml2YXRlJzogJ2h0dHBzOi8vdHJhZGUuY2hidGMuY29tL2FwaScsXG4gICAgICAgIH0sXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly90cmFkZS5jaGJ0Yy5jb20vYXBpJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL3d3dy5jaGJ0Yy5jb20vaS9kZXZlbG9wZXInLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ3RpY2tlcicsXG4gICAgICAgICAgICAgICAgJ2RlcHRoJyxcbiAgICAgICAgICAgICAgICAndHJhZGVzJyxcbiAgICAgICAgICAgICAgICAna2xpbmUnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnb3JkZXInLFxuICAgICAgICAgICAgICAgICdjYW5jZWxPcmRlcicsXG4gICAgICAgICAgICAgICAgJ2dldE9yZGVyJyxcbiAgICAgICAgICAgICAgICAnZ2V0T3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnZ2V0T3JkZXJzTmV3JyxcbiAgICAgICAgICAgICAgICAnZ2V0T3JkZXJzSWdub3JlVHJhZGVUeXBlJyxcbiAgICAgICAgICAgICAgICAnZ2V0VW5maW5pc2hlZE9yZGVyc0lnbm9yZVRyYWRlVHlwZScsXG4gICAgICAgICAgICAgICAgJ2dldEFjY291bnRJbmZvJyxcbiAgICAgICAgICAgICAgICAnZ2V0VXNlckFkZHJlc3MnLFxuICAgICAgICAgICAgICAgICdnZXRXaXRoZHJhd0FkZHJlc3MnLFxuICAgICAgICAgICAgICAgICdnZXRXaXRoZHJhd1JlY29yZCcsXG4gICAgICAgICAgICAgICAgJ2dldENoYXJnZVJlY29yZCcsXG4gICAgICAgICAgICAgICAgJ2dldENueVdpdGhkcmF3UmVjb3JkJyxcbiAgICAgICAgICAgICAgICAnZ2V0Q255Q2hhcmdlUmVjb3JkJyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXcnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgICdtYXJrZXRzJzoge1xuICAgICAgICAnQlRDL0NOWSc6IHsgJ2lkJzogJ2J0Y19jbnknLCAnc3ltYm9sJzogJ0JUQy9DTlknLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnQ05ZJyB9LFxuICAgICAgICAnTFRDL0NOWSc6IHsgJ2lkJzogJ2x0Y19jbnknLCAnc3ltYm9sJzogJ0xUQy9DTlknLCAnYmFzZSc6ICdMVEMnLCAncXVvdGUnOiAnQ05ZJyB9LFxuICAgICAgICAnRVRIL0NOWSc6IHsgJ2lkJzogJ2V0aF9jbnknLCAnc3ltYm9sJzogJ0VUSC9DTlknLCAnYmFzZSc6ICdFVEgnLCAncXVvdGUnOiAnQ05ZJyB9LFxuICAgICAgICAnRVRDL0NOWSc6IHsgJ2lkJzogJ2V0Y19jbnknLCAnc3ltYm9sJzogJ0VUQy9DTlknLCAnYmFzZSc6ICdFVEMnLCAncXVvdGUnOiAnQ05ZJyB9LFxuICAgICAgICAnQlRTL0NOWSc6IHsgJ2lkJzogJ2J0c19jbnknLCAnc3ltYm9sJzogJ0JUUy9DTlknLCAnYmFzZSc6ICdCVFMnLCAncXVvdGUnOiAnQ05ZJyB9LFxuICAgICAgICAnRU9TL0NOWSc6IHsgJ2lkJzogJ2Vvc19jbnknLCAnc3ltYm9sJzogJ0VPUy9DTlknLCAnYmFzZSc6ICdFT1MnLCAncXVvdGUnOiAnQ05ZJyB9LFxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0R2V0QWNjb3VudEluZm8gKCk7XG4gICAgICAgIGxldCBiYWxhbmNlcyA9IHJlc3BvbnNlWydyZXN1bHQnXTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiBiYWxhbmNlcyB9O1xuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IHRoaXMuY3VycmVuY2llcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gdGhpcy5jdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChjdXJyZW5jeSBpbiBiYWxhbmNlc1snYmFsYW5jZSddKVxuICAgICAgICAgICAgICAgIGFjY291bnRbJ2ZyZWUnXSA9IGJhbGFuY2VzWydiYWxhbmNlJ11bY3VycmVuY3ldWydhbW91bnQnXTtcbiAgICAgICAgICAgIGlmIChjdXJyZW5jeSBpbiBiYWxhbmNlc1snZnJvemVuJ10pXG4gICAgICAgICAgICAgICAgYWNjb3VudFsndXNlZCddID0gYmFsYW5jZXNbJ2Zyb3plbiddW2N1cnJlbmN5XVsnYW1vdW50J107XG4gICAgICAgICAgICBhY2NvdW50Wyd0b3RhbCddID0gdGhpcy5zdW0gKGFjY291bnRbJ2ZyZWUnXSwgYWNjb3VudFsndXNlZCddKTtcbiAgICAgICAgICAgIHJlc3VsdFtjdXJyZW5jeV0gPSBhY2NvdW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSBhd2FpdCB0aGlzLnB1YmxpY0dldERlcHRoICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2N1cnJlbmN5JzogcFsnaWQnXSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgbGV0IGJpZHMgPSB1bmRlZmluZWQ7XG4gICAgICAgIGxldCBhc2tzID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoJ2JpZHMnIGluIG9yZGVyYm9vaylcbiAgICAgICAgICAgIGJpZHMgPSBvcmRlcmJvb2tbJ2JpZHMnXTtcbiAgICAgICAgaWYgKCdhc2tzJyBpbiBvcmRlcmJvb2spXG4gICAgICAgICAgICBhc2tzID0gb3JkZXJib29rWydhc2tzJ107XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IGJpZHMsXG4gICAgICAgICAgICAnYXNrcyc6IGFza3MsXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBpZiAocmVzdWx0WydiaWRzJ10pXG4gICAgICAgICAgICByZXN1bHRbJ2JpZHMnXSA9IHRoaXMuc29ydEJ5IChyZXN1bHRbJ2JpZHMnXSwgMCwgdHJ1ZSk7XG4gICAgICAgIGlmIChyZXN1bHRbJ2Fza3MnXSlcbiAgICAgICAgICAgIHJlc3VsdFsnYXNrcyddID0gdGhpcy5zb3J0QnkgKHJlc3VsdFsnYXNrcyddLCAwKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFRpY2tlciAoe1xuICAgICAgICAgICAgJ2N1cnJlbmN5JzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aWNrZXIgPSByZXNwb25zZVsndGlja2VyJ107XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2J1eSddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3NlbGwnXSksXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xhc3QnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWyd2b2wnXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0VHJhZGVzICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2N1cnJlbmN5JzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBwYXJhbVN0cmluZyA9ICcmcHJpY2U9JyArIHByaWNlLnRvU3RyaW5nICgpO1xuICAgICAgICBwYXJhbVN0cmluZyArPSAnJmFtb3VudD0nICsgYW1vdW50LnRvU3RyaW5nICgpO1xuICAgICAgICBsZXQgdHJhZGVUeXBlID0gKHNpZGUgPT0gJ2J1eScpID8gJzEnIDogJzAnO1xuICAgICAgICBwYXJhbVN0cmluZyArPSAnJnRyYWRlVHlwZT0nICsgdHJhZGVUeXBlO1xuICAgICAgICBwYXJhbVN0cmluZyArPSAnJmN1cnJlbmN5PScgKyB0aGlzLm1hcmtldElkIChtYXJrZXQpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0T3JkZXIgKHBhcmFtU3RyaW5nKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnaWQnXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgcGFyYW1TdHJpbmcgPSAnJmlkPScgKyBpZC50b1N0cmluZyAoKTtcbiAgICAgICAgaWYgKCdjdXJyZW5jeScgaW4gcGFyYW1zKVxuICAgICAgICAgICAgcGFyYW1TdHJpbmcgKz0gJyZjdXJyZW5jeT0nICsgcGFyYW1zWydjdXJyZW5jeSddO1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdENhbmNlbE9yZGVyIChwYXJhbVN0cmluZyk7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXIgKGlkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgcGFyYW1TdHJpbmcgPSAnJmlkPScgKyBpZC50b1N0cmluZyAoKTtcbiAgICAgICAgaWYgKCdjdXJyZW5jeScgaW4gcGFyYW1zKVxuICAgICAgICAgICAgcGFyYW1TdHJpbmcgKz0gJyZjdXJyZW5jeT0nICsgcGFyYW1zWydjdXJyZW5jeSddO1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdEdldE9yZGVyIChwYXJhbVN0cmluZyk7XG4gICAgfSxcblxuICAgIG5vbmNlICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddW2FwaV07XG4gICAgICAgIGlmIChhcGkgPT0gJ3B1YmxpYycpIHtcbiAgICAgICAgICAgIHVybCArPSAnLycgKyB0aGlzLnZlcnNpb24gKyAnLycgKyBwYXRoO1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChwYXJhbXMpLmxlbmd0aClcbiAgICAgICAgICAgICAgICB1cmwgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHBhcmFtcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgcGFyYW1zTGVuZ3RoID0gcGFyYW1zLmxlbmd0aDsgLy8gcGFyYW1zIHNob3VsZCBiZSBhIHN0cmluZyBoZXJlXG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpO1xuICAgICAgICAgICAgbGV0IGF1dGggPSAnbWV0aG9kPScgKyBwYXRoO1xuICAgICAgICAgICAgYXV0aCArPSAnJmFjY2Vzc2tleT0nICsgdGhpcy5hcGlLZXk7XG4gICAgICAgICAgICBhdXRoICs9IHBhcmFtc0xlbmd0aCA/IHBhcmFtcyA6ICcnO1xuICAgICAgICAgICAgbGV0IHNlY3JldCA9IHRoaXMuaGFzaCAodGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSwgJ3NoYTEnKTtcbiAgICAgICAgICAgIGxldCBzaWduYXR1cmUgPSB0aGlzLmhtYWMgKHRoaXMuZW5jb2RlIChhdXRoKSwgdGhpcy5lbmNvZGUgKHNlY3JldCksICdtZDUnKTtcbiAgICAgICAgICAgIGxldCBzdWZmaXggPSAnc2lnbj0nICsgc2lnbmF0dXJlICsgJyZyZXFUaW1lPScgKyBub25jZS50b1N0cmluZyAoKTtcbiAgICAgICAgICAgIHVybCArPSAnLycgKyBwYXRoICsgJz8nICsgYXV0aCArICcmJyArIHN1ZmZpeDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgICAgIGlmIChhcGkgPT0gJ3ByaXZhdGUnKVxuICAgICAgICAgICAgaWYgKCdjb2RlJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgJyArIHRoaXMuanNvbiAocmVzcG9uc2UpKTtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGNoaWxlYml0ID0gZXh0ZW5kIChibGlua3RyYWRlLCB7XG4gICAgJ2lkJzogJ2NoaWxlYml0JyxcbiAgICAnbmFtZSc6ICdDaGlsZUJpdCcsXG4gICAgJ2NvdW50cmllcyc6ICdDTCcsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc5OTE0MTQtMTI5OGYwZDgtNjQ3Zi0xMWU3LTljNDAtZDU2NDA5MjY2MzM2LmpwZycsXG4gICAgICAgICdhcGknOiB7XG4gICAgICAgICAgICAncHVibGljJzogJ2h0dHBzOi8vYXBpLmJsaW5rdHJhZGUuY29tL2FwaScsXG4gICAgICAgICAgICAncHJpdmF0ZSc6ICdodHRwczovL2FwaS5ibGlua3RyYWRlLmNvbS90YXBpJyxcbiAgICAgICAgfSxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL2NoaWxlYml0Lm5ldCcsXG4gICAgICAgICdkb2MnOiAnaHR0cHM6Ly9ibGlua3RyYWRlLmNvbS9kb2NzJyxcbiAgICB9LFxuICAgICdjb21tZW50JzogJ0JsaW5rdHJhZGUgQVBJJyxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9DTFAnOiB7ICdpZCc6ICdCVENDTFAnLCAnc3ltYm9sJzogJ0JUQy9DTFAnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnQ0xQJywgJ2Jyb2tlcklkJzogOSwgJ2Jyb2tlcic6ICdDaGlsZUJpdCcgfSxcbiAgICB9LFxufSlcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgY29pbmNoZWNrID0ge1xuXG4gICAgJ2lkJzogJ2NvaW5jaGVjaycsXG4gICAgJ25hbWUnOiAnY29pbmNoZWNrJyxcbiAgICAnY291bnRyaWVzJzogWyAnSlAnLCAnSUQnIF0sXG4gICAgJ3JhdGVMaW1pdCc6IDE1MDAsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc3NjY0NjQtM2I1YzNjNzQtNWVkOS0xMWU3LTg0MGUtMzFiMzI5NjhlMWRhLmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly9jb2luY2hlY2suY29tL2FwaScsXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly9jb2luY2hlY2suY29tJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL2NvaW5jaGVjay5jb20vZG9jdW1lbnRzL2V4Y2hhbmdlL2FwaScsXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnZXhjaGFuZ2Uvb3JkZXJzL3JhdGUnLFxuICAgICAgICAgICAgICAgICdvcmRlcl9ib29rcycsXG4gICAgICAgICAgICAgICAgJ3JhdGUve3BhaXJ9JyxcbiAgICAgICAgICAgICAgICAndGlja2VyJyxcbiAgICAgICAgICAgICAgICAndHJhZGVzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnYWNjb3VudHMnLFxuICAgICAgICAgICAgICAgICdhY2NvdW50cy9iYWxhbmNlJyxcbiAgICAgICAgICAgICAgICAnYWNjb3VudHMvbGV2ZXJhZ2VfYmFsYW5jZScsXG4gICAgICAgICAgICAgICAgJ2JhbmtfYWNjb3VudHMnLFxuICAgICAgICAgICAgICAgICdkZXBvc2l0X21vbmV5JyxcbiAgICAgICAgICAgICAgICAnZXhjaGFuZ2Uvb3JkZXJzL29wZW5zJyxcbiAgICAgICAgICAgICAgICAnZXhjaGFuZ2Uvb3JkZXJzL3RyYW5zYWN0aW9ucycsXG4gICAgICAgICAgICAgICAgJ2V4Y2hhbmdlL29yZGVycy90cmFuc2FjdGlvbnNfcGFnaW5hdGlvbicsXG4gICAgICAgICAgICAgICAgJ2V4Y2hhbmdlL2xldmVyYWdlL3Bvc2l0aW9ucycsXG4gICAgICAgICAgICAgICAgJ2xlbmRpbmcvYm9ycm93cy9tYXRjaGVzJyxcbiAgICAgICAgICAgICAgICAnc2VuZF9tb25leScsXG4gICAgICAgICAgICAgICAgJ3dpdGhkcmF3cycsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2JhbmtfYWNjb3VudHMnLFxuICAgICAgICAgICAgICAgICdkZXBvc2l0X21vbmV5L3tpZH0vZmFzdCcsXG4gICAgICAgICAgICAgICAgJ2V4Y2hhbmdlL29yZGVycycsXG4gICAgICAgICAgICAgICAgJ2V4Y2hhbmdlL3RyYW5zZmVycy90b19sZXZlcmFnZScsXG4gICAgICAgICAgICAgICAgJ2V4Y2hhbmdlL3RyYW5zZmVycy9mcm9tX2xldmVyYWdlJyxcbiAgICAgICAgICAgICAgICAnbGVuZGluZy9ib3Jyb3dzJyxcbiAgICAgICAgICAgICAgICAnbGVuZGluZy9ib3Jyb3dzL3tpZH0vcmVwYXknLFxuICAgICAgICAgICAgICAgICdzZW5kX21vbmV5JyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXdzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAnZGVsZXRlJzogW1xuICAgICAgICAgICAgICAgICdiYW5rX2FjY291bnRzL3tpZH0nLFxuICAgICAgICAgICAgICAgICdleGNoYW5nZS9vcmRlcnMve2lkfScsXG4gICAgICAgICAgICAgICAgJ3dpdGhkcmF3cy97aWR9JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9KUFknOiAgeyAnaWQnOiAnYnRjX2pweScsICAnc3ltYm9sJzogJ0JUQy9KUFknLCAgJ2Jhc2UnOiAnQlRDJywgICdxdW90ZSc6ICdKUFknIH0sIC8vIHRoZSBvbmx5IHJlYWwgcGFpclxuICAgICAgICAnRVRIL0pQWSc6ICB7ICdpZCc6ICdldGhfanB5JywgICdzeW1ib2wnOiAnRVRIL0pQWScsICAnYmFzZSc6ICdFVEgnLCAgJ3F1b3RlJzogJ0pQWScgfSxcbiAgICAgICAgJ0VUQy9KUFknOiAgeyAnaWQnOiAnZXRjX2pweScsICAnc3ltYm9sJzogJ0VUQy9KUFknLCAgJ2Jhc2UnOiAnRVRDJywgICdxdW90ZSc6ICdKUFknIH0sXG4gICAgICAgICdEQU8vSlBZJzogIHsgJ2lkJzogJ2Rhb19qcHknLCAgJ3N5bWJvbCc6ICdEQU8vSlBZJywgICdiYXNlJzogJ0RBTycsICAncXVvdGUnOiAnSlBZJyB9LFxuICAgICAgICAnTFNLL0pQWSc6ICB7ICdpZCc6ICdsc2tfanB5JywgICdzeW1ib2wnOiAnTFNLL0pQWScsICAnYmFzZSc6ICdMU0snLCAgJ3F1b3RlJzogJ0pQWScgfSxcbiAgICAgICAgJ0ZDVC9KUFknOiAgeyAnaWQnOiAnZmN0X2pweScsICAnc3ltYm9sJzogJ0ZDVC9KUFknLCAgJ2Jhc2UnOiAnRkNUJywgICdxdW90ZSc6ICdKUFknIH0sXG4gICAgICAgICdYTVIvSlBZJzogIHsgJ2lkJzogJ3htcl9qcHknLCAgJ3N5bWJvbCc6ICdYTVIvSlBZJywgICdiYXNlJzogJ1hNUicsICAncXVvdGUnOiAnSlBZJyB9LFxuICAgICAgICAnUkVQL0pQWSc6ICB7ICdpZCc6ICdyZXBfanB5JywgICdzeW1ib2wnOiAnUkVQL0pQWScsICAnYmFzZSc6ICdSRVAnLCAgJ3F1b3RlJzogJ0pQWScgfSxcbiAgICAgICAgJ1hSUC9KUFknOiAgeyAnaWQnOiAneHJwX2pweScsICAnc3ltYm9sJzogJ1hSUC9KUFknLCAgJ2Jhc2UnOiAnWFJQJywgICdxdW90ZSc6ICdKUFknIH0sXG4gICAgICAgICdaRUMvSlBZJzogIHsgJ2lkJzogJ3plY19qcHknLCAgJ3N5bWJvbCc6ICdaRUMvSlBZJywgICdiYXNlJzogJ1pFQycsICAncXVvdGUnOiAnSlBZJyB9LFxuICAgICAgICAnWEVNL0pQWSc6ICB7ICdpZCc6ICd4ZW1fanB5JywgICdzeW1ib2wnOiAnWEVNL0pQWScsICAnYmFzZSc6ICdYRU0nLCAgJ3F1b3RlJzogJ0pQWScgfSxcbiAgICAgICAgJ0xUQy9KUFknOiAgeyAnaWQnOiAnbHRjX2pweScsICAnc3ltYm9sJzogJ0xUQy9KUFknLCAgJ2Jhc2UnOiAnTFRDJywgICdxdW90ZSc6ICdKUFknIH0sXG4gICAgICAgICdEQVNIL0pQWSc6IHsgJ2lkJzogJ2Rhc2hfanB5JywgJ3N5bWJvbCc6ICdEQVNIL0pQWScsICdiYXNlJzogJ0RBU0gnLCAncXVvdGUnOiAnSlBZJyB9LFxuICAgICAgICAnRVRIL0JUQyc6ICB7ICdpZCc6ICdldGhfYnRjJywgICdzeW1ib2wnOiAnRVRIL0JUQycsICAnYmFzZSc6ICdFVEgnLCAgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ0VUQy9CVEMnOiAgeyAnaWQnOiAnZXRjX2J0YycsICAnc3ltYm9sJzogJ0VUQy9CVEMnLCAgJ2Jhc2UnOiAnRVRDJywgICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdMU0svQlRDJzogIHsgJ2lkJzogJ2xza19idGMnLCAgJ3N5bWJvbCc6ICdMU0svQlRDJywgICdiYXNlJzogJ0xTSycsICAncXVvdGUnOiAnQlRDJyB9LFxuICAgICAgICAnRkNUL0JUQyc6ICB7ICdpZCc6ICdmY3RfYnRjJywgICdzeW1ib2wnOiAnRkNUL0JUQycsICAnYmFzZSc6ICdGQ1QnLCAgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ1hNUi9CVEMnOiAgeyAnaWQnOiAneG1yX2J0YycsICAnc3ltYm9sJzogJ1hNUi9CVEMnLCAgJ2Jhc2UnOiAnWE1SJywgICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdSRVAvQlRDJzogIHsgJ2lkJzogJ3JlcF9idGMnLCAgJ3N5bWJvbCc6ICdSRVAvQlRDJywgICdiYXNlJzogJ1JFUCcsICAncXVvdGUnOiAnQlRDJyB9LFxuICAgICAgICAnWFJQL0JUQyc6ICB7ICdpZCc6ICd4cnBfYnRjJywgICdzeW1ib2wnOiAnWFJQL0JUQycsICAnYmFzZSc6ICdYUlAnLCAgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ1pFQy9CVEMnOiAgeyAnaWQnOiAnemVjX2J0YycsICAnc3ltYm9sJzogJ1pFQy9CVEMnLCAgJ2Jhc2UnOiAnWkVDJywgICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdYRU0vQlRDJzogIHsgJ2lkJzogJ3hlbV9idGMnLCAgJ3N5bWJvbCc6ICdYRU0vQlRDJywgICdiYXNlJzogJ1hFTScsICAncXVvdGUnOiAnQlRDJyB9LFxuICAgICAgICAnTFRDL0JUQyc6ICB7ICdpZCc6ICdsdGNfYnRjJywgICdzeW1ib2wnOiAnTFRDL0JUQycsICAnYmFzZSc6ICdMVEMnLCAgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ0RBU0gvQlRDJzogeyAnaWQnOiAnZGFzaF9idGMnLCAnc3ltYm9sJzogJ0RBU0gvQlRDJywgJ2Jhc2UnOiAnREFTSCcsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGxldCBiYWxhbmNlcyA9IGF3YWl0IHRoaXMucHJpdmF0ZUdldEFjY291bnRzQmFsYW5jZSAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiBiYWxhbmNlcyB9O1xuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IHRoaXMuY3VycmVuY2llcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gdGhpcy5jdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IGxvd2VyY2FzZSA9IGN1cnJlbmN5LnRvTG93ZXJDYXNlICgpO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChsb3dlcmNhc2UgaW4gYmFsYW5jZXMpXG4gICAgICAgICAgICAgICAgYWNjb3VudFsnZnJlZSddID0gcGFyc2VGbG9hdCAoYmFsYW5jZXNbbG93ZXJjYXNlXSk7XG4gICAgICAgICAgICBsZXQgcmVzZXJ2ZWQgPSBsb3dlcmNhc2UgKyAnX3Jlc2VydmVkJztcbiAgICAgICAgICAgIGlmIChyZXNlcnZlZCBpbiBiYWxhbmNlcylcbiAgICAgICAgICAgICAgICBhY2NvdW50Wyd1c2VkJ10gPSBwYXJzZUZsb2F0IChiYWxhbmNlc1tyZXNlcnZlZF0pO1xuICAgICAgICAgICAgYWNjb3VudFsndG90YWwnXSA9IHRoaXMuc3VtIChhY2NvdW50WydmcmVlJ10sIGFjY291bnRbJ3VzZWQnXSk7XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgIHRoaXMucHVibGljR2V0T3JkZXJCb29rcyAocGFyYW1zKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAob3JkZXJbMF0pO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBwYXJzZUZsb2F0IChvcmRlclsxXSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3NpZGVdLnB1c2ggKFsgcHJpY2UsIGFtb3VudCBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGxldCB0aWNrZXIgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFRpY2tlciAoKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRpY2tlclsndGltZXN0YW1wJ10gKiAxMDAwO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydoaWdoJ10pLFxuICAgICAgICAgICAgJ2xvdyc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbG93J10pLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYmlkJ10pLFxuICAgICAgICAgICAgJ2Fzayc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYXNrJ10pLFxuICAgICAgICAgICAgJ3Z3YXAnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnb3Blbic6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjbG9zZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdmaXJzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsYXN0JzogcGFyc2VGbG9hdCAodGlja2VyWydsYXN0J10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndm9sdW1lJ10pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldFRyYWRlcyAocGFyYW1zKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IHByZWZpeCA9ICcnO1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAncGFpcic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlID09ICdtYXJrZXQnKSB7XG4gICAgICAgICAgICBsZXQgb3JkZXJfdHlwZSA9IHR5cGUgKyAnXycgKyBzaWRlO1xuICAgICAgICAgICAgb3JkZXJbJ29yZGVyX3R5cGUnXSA9IG9yZGVyX3R5cGU7XG4gICAgICAgICAgICBsZXQgcHJlZml4ID0gKHNpZGUgPT0gJ2J1eScpID8gKG9yZGVyX3R5cGUgKyAnXycpIDogJyc7XG4gICAgICAgICAgICBvcmRlcltwcmVmaXggKyAnYW1vdW50J10gPSBhbW91bnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvcmRlclsnb3JkZXJfdHlwZSddID0gc2lkZTtcbiAgICAgICAgICAgIG9yZGVyWydyYXRlJ10gPSBwcmljZTtcbiAgICAgICAgICAgIG9yZGVyWydhbW91bnQnXSA9IGFtb3VudDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0RXhjaGFuZ2VPcmRlcnMgKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ2lkJzogcmVzcG9uc2VbJ2lkJ10udG9TdHJpbmcgKCksXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlRGVsZXRlRXhjaGFuZ2VPcmRlcnNJZCAoeyAnaWQnOiBpZCB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArICcvJyArIHRoaXMuaW1wbG9kZVBhcmFtcyAocGF0aCwgcGFyYW1zKTtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5vbWl0IChwYXJhbXMsIHRoaXMuZXh0cmFjdFBhcmFtcyAocGF0aCkpO1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHF1ZXJ5KS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChxdWVyeSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpLnRvU3RyaW5nICgpO1xuICAgICAgICAgICAgbGV0IGxlbmd0aCA9IDA7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHF1ZXJ5KS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBib2R5ID0gdGhpcy51cmxlbmNvZGUgKHRoaXMua2V5c29ydCAocXVlcnkpKTtcbiAgICAgICAgICAgICAgICBsZW5ndGggPSBib2R5Lmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBhdXRoID0gbm9uY2UgKyB1cmwgKyAoYm9keSB8fCAnJyk7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICAgICAgICAnQ29udGVudC1MZW5ndGgnOiBsZW5ndGgsXG4gICAgICAgICAgICAgICAgJ0FDQ0VTUy1LRVknOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgICAgICAnQUNDRVNTLU5PTkNFJzogbm9uY2UsXG4gICAgICAgICAgICAgICAgJ0FDQ0VTUy1TSUdOQVRVUkUnOiB0aGlzLmhtYWMgKHRoaXMuZW5jb2RlIChhdXRoKSwgdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJylcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgaWYgKCdzdWNjZXNzJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIGlmIChyZXNwb25zZVsnc3VjY2VzcyddKVxuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgY29pbmZsb29yID0ge1xuXG4gICAgJ2lkJzogJ2NvaW5mbG9vcicsXG4gICAgJ25hbWUnOiAnY29pbmZsb29yJyxcbiAgICAncmF0ZUxpbWl0JzogMTAwMCxcbiAgICAnY291bnRyaWVzJzogJ1VLJyxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yODI0NjA4MS02MjNmYzE2NC02YTFjLTExZTctOTEzZi1iYWMwZDU1NzZjOTAuanBnJyxcbiAgICAgICAgJ2FwaSc6ICdodHRwczovL3dlYmFwaS5jb2luZmxvb3IuY28udWs6ODA5MC9iaXN0JyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy5jb2luZmxvb3IuY28udWsnLFxuICAgICAgICAnZG9jJzogW1xuICAgICAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS9jb2luZmxvb3IvYXBpJyxcbiAgICAgICAgICAgICdodHRwczovL3d3dy5jb2luZmxvb3IuY28udWsvYXBpJyxcbiAgICAgICAgXSxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICd7aWR9L3RpY2tlci8nLFxuICAgICAgICAgICAgICAgICd7aWR9L29yZGVyX2Jvb2svJyxcbiAgICAgICAgICAgICAgICAne2lkfS90cmFuc2FjdGlvbnMvJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ3tpZH0vYmFsYW5jZS8nLFxuICAgICAgICAgICAgICAgICd7aWR9L3VzZXJfdHJhbnNhY3Rpb25zLycsXG4gICAgICAgICAgICAgICAgJ3tpZH0vb3Blbl9vcmRlcnMvJyxcbiAgICAgICAgICAgICAgICAne2lkfS9jYW5jZWxfb3JkZXIvJyxcbiAgICAgICAgICAgICAgICAne2lkfS9idXkvJyxcbiAgICAgICAgICAgICAgICAne2lkfS9zZWxsLycsXG4gICAgICAgICAgICAgICAgJ3tpZH0vYnV5X21hcmtldC8nLFxuICAgICAgICAgICAgICAgICd7aWR9L3NlbGxfbWFya2V0LycsXG4gICAgICAgICAgICAgICAgJ3tpZH0vZXN0aW1hdGVfc2VsbF9tYXJrZXQvJyxcbiAgICAgICAgICAgICAgICAne2lkfS9lc3RpbWF0ZV9idXlfbWFya2V0LycsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgJ21hcmtldHMnOiB7XG4gICAgICAgICdCVEMvR0JQJzogeyAnaWQnOiAnWEJUL0dCUCcsICdzeW1ib2wnOiAnQlRDL0dCUCcsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdHQlAnIH0sXG4gICAgICAgICdCVEMvRVVSJzogeyAnaWQnOiAnWEJUL0VVUicsICdzeW1ib2wnOiAnQlRDL0VVUicsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdFVVInIH0sXG4gICAgICAgICdCVEMvVVNEJzogeyAnaWQnOiAnWEJUL1VTRCcsICdzeW1ib2wnOiAnQlRDL1VTRCcsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdVU0QnIH0sXG4gICAgICAgICdCVEMvUExOJzogeyAnaWQnOiAnWEJUL1BMTicsICdzeW1ib2wnOiAnQlRDL1BMTicsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdQTE4nIH0sXG4gICAgICAgICdCQ0gvR0JQJzogeyAnaWQnOiAnQkNIL0dCUCcsICdzeW1ib2wnOiAnQkNIL0dCUCcsICdiYXNlJzogJ0JDSCcsICdxdW90ZSc6ICdHQlAnIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAobWFya2V0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0SWRCYWxhbmNlICh7XG4gICAgICAgICAgICAnaWQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCkge1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRJZE9yZGVyQm9vayAoe1xuICAgICAgICAgICAgJ2lkJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdiaWRzJzogW10sXG4gICAgICAgICAgICAnYXNrcyc6IFtdLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHNpZGVzID0gWyAnYmlkcycsICdhc2tzJyBdO1xuICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IHNpZGVzLmxlbmd0aDsgcysrKSB7XG4gICAgICAgICAgICBsZXQgc2lkZSA9IHNpZGVzW3NdO1xuICAgICAgICAgICAgbGV0IG9yZGVycyA9IG9yZGVyYm9va1tzaWRlXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9yZGVyID0gb3JkZXJzW2ldO1xuICAgICAgICAgICAgICAgIGxldCBwcmljZSA9IHBhcnNlRmxvYXQgKG9yZGVyWzBdKTtcbiAgICAgICAgICAgICAgICBsZXQgYW1vdW50ID0gcGFyc2VGbG9hdCAob3JkZXJbMV0pO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtzaWRlXS5wdXNoIChbIHByaWNlLCBhbW91bnQgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgcGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KSB7XG4gICAgICAgIC8vIHJld3JpdGUgdG8gZ2V0IHRoZSB0aW1lc3RhbXAgZnJvbSBIVFRQIGhlYWRlcnNcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydoaWdoJ10pLFxuICAgICAgICAgICAgJ2xvdyc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbG93J10pLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYmlkJ10pLFxuICAgICAgICAgICAgJ2Fzayc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYXNrJ10pLFxuICAgICAgICAgICAgJ3Z3YXAnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3Z3YXAnXSksXG4gICAgICAgICAgICAnb3Blbic6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjbG9zZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdmaXJzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsYXN0JzogcGFyc2VGbG9hdCAodGlja2VyWydsYXN0J10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndm9sdW1lJ10pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgbGV0IG0gPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHRpY2tlciA9IGF3YWl0IHRoaXMucHVibGljR2V0SWRUaWNrZXIgKHtcbiAgICAgICAgICAgICdpZCc6IG1bJ2lkJ10sXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVRpY2tlciAodGlja2VyLCBtKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0SWRUcmFuc2FjdGlvbnMgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnaWQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IG9yZGVyID0geyAnaWQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpIH07XG4gICAgICAgIGxldCBtZXRob2QgPSAncHJpdmF0ZVBvc3RJZCcgKyB0aGlzLmNhcGl0YWxpemUgKHNpZGUpO1xuICAgICAgICBpZiAodHlwZSA9PSAnbWFya2V0Jykge1xuICAgICAgICAgICAgb3JkZXJbJ3F1YW50aXR5J10gPSBhbW91bnQ7XG4gICAgICAgICAgICBtZXRob2QgKz0gJ01hcmtldCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvcmRlclsncHJpY2UnXSA9IHByaWNlO1xuICAgICAgICAgICAgb3JkZXJbJ2Ftb3VudCddID0gYW1vdW50O1xuICAgICAgICB9ICAgICAgICBcbiAgICAgICAgcmV0dXJuIHRoaXNbbWV0aG9kXSAodGhpcy5leHRlbmQgKG9yZGVyLCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0SWRDYW5jZWxPcmRlciAoeyAnaWQnOiBpZCB9KTtcbiAgICB9LFxuXG4gICAgcmVxdWVzdCAocGF0aCwgdHlwZSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gY3VybCAtayAtdSAnW1VzZXIgSURdL1tBUEkga2V5XTpbUGFzc3BocmFzZV0nIGh0dHBzOi8vd2ViYXBpLmNvaW5mbG9vci5jby51azo4MDkwL2Jpc3QvWEJUL0dCUC9iYWxhbmNlL1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArICcvJyArIHRoaXMuaW1wbG9kZVBhcmFtcyAocGF0aCwgcGFyYW1zKTtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5vbWl0IChwYXJhbXMsIHRoaXMuZXh0cmFjdFBhcmFtcyAocGF0aCkpO1xuICAgICAgICBpZiAodHlwZSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChxdWVyeSkubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG5vbmNlID0gdGhpcy5ub25jZSAoKTtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLnVybGVuY29kZSAodGhpcy5leHRlbmQgKHsgJ25vbmNlJzogbm9uY2UgfSwgcXVlcnkpKTtcbiAgICAgICAgICAgIGxldCBhdXRoID0gdGhpcy51aWQgKyAnLycgKyB0aGlzLmFwaUtleSArICc6JyArIHRoaXMucGFzc3dvcmQ7XG4gICAgICAgICAgICBsZXQgc2lnbmF0dXJlID0gdGhpcy5zdHJpbmdUb0Jhc2U2NCAoYXV0aCk7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICAgICAgICAnQ29udGVudC1MZW5ndGgnOiBib2R5Lmxlbmd0aCxcbiAgICAgICAgICAgICAgICAnQXV0aG9yaXphdGlvbic6ICdCYXNpYyAnICsgc2lnbmF0dXJlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGNvaW5naSA9IHtcblxuICAgICdpZCc6ICdjb2luZ2knLFxuICAgICduYW1lJzogJ0NvaW5naScsXG4gICAgJ3JhdGVMaW1pdCc6IDEwMDAsXG4gICAgJ2NvdW50cmllcyc6IFsgJ1BBJywgJ0JHJywgJ0NOJywgJ1VTJyBdLCAvLyBQYW5hbWEsIEJ1bGdhcmlhLCBDaGluYSwgVVNcbiAgICAnaGFzRmV0Y2hUaWNrZXJzJzogdHJ1ZSxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yODYxOTcwNy01YzkyMzJhOC03MjEyLTExZTctODZkNi05OGZlNWQxNWNjNmUuanBnJyxcbiAgICAgICAgJ2FwaSc6ICdodHRwczovL2FwaS5jb2luZ2kuY29tJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL2NvaW5naS5jb20nLFxuICAgICAgICAnZG9jJzogJ2h0dHA6Ly9kb2NzLmNvaW5naS5hcGlhcnkuaW8vJyxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdjdXJyZW50Jzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnb3JkZXItYm9vay97cGFpcn0ve2Fza0NvdW50fS97YmlkQ291bnR9L3tkZXB0aH0nLFxuICAgICAgICAgICAgICAgICd0cmFuc2FjdGlvbnMve3BhaXJ9L3ttYXhDb3VudH0nLFxuICAgICAgICAgICAgICAgICcyNGhvdXItcm9sbGluZy1hZ2dyZWdhdGlvbicsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAndXNlcic6IHtcbiAgICAgICAgICAgICdwb3N0JzogW1xuICAgICAgICAgICAgICAgICdiYWxhbmNlJyxcbiAgICAgICAgICAgICAgICAnYWRkLW9yZGVyJyxcbiAgICAgICAgICAgICAgICAnY2FuY2VsLW9yZGVyJyxcbiAgICAgICAgICAgICAgICAnb3JkZXJzJyxcbiAgICAgICAgICAgICAgICAndHJhbnNhY3Rpb25zJyxcbiAgICAgICAgICAgICAgICAnY3JlYXRlLWNyeXB0by13aXRoZHJhd2FsJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0xUQy9CVEMnOiB7ICdpZCc6ICdsdGMtYnRjJywgJ3N5bWJvbCc6ICdMVEMvQlRDJywgJ2Jhc2UnOiAnTFRDJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ1BQQy9CVEMnOiB7ICdpZCc6ICdwcGMtYnRjJywgJ3N5bWJvbCc6ICdQUEMvQlRDJywgJ2Jhc2UnOiAnUFBDJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ0RPR0UvQlRDJzogeyAnaWQnOiAnZG9nZS1idGMnLCAnc3ltYm9sJzogJ0RPR0UvQlRDJywgJ2Jhc2UnOiAnRE9HRScsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdWVEMvQlRDJzogeyAnaWQnOiAndnRjLWJ0YycsICdzeW1ib2wnOiAnVlRDL0JUQycsICdiYXNlJzogJ1ZUQycsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdGVEMvQlRDJzogeyAnaWQnOiAnZnRjLWJ0YycsICdzeW1ib2wnOiAnRlRDL0JUQycsICdiYXNlJzogJ0ZUQycsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdOTUMvQlRDJzogeyAnaWQnOiAnbm1jLWJ0YycsICdzeW1ib2wnOiAnTk1DL0JUQycsICdiYXNlJzogJ05NQycsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdEQVNIL0JUQyc6IHsgJ2lkJzogJ2Rhc2gtYnRjJywgJ3N5bWJvbCc6ICdEQVNIL0JUQycsICdiYXNlJzogJ0RBU0gnLCAncXVvdGUnOiAnQlRDJyB9LFxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBsZXQgY3VycmVuY2llcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IHRoaXMuY3VycmVuY2llcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gdGhpcy5jdXJyZW5jaWVzW2NdLnRvTG93ZXJDYXNlICgpO1xuICAgICAgICAgICAgY3VycmVuY2llcy5wdXNoIChjdXJyZW5jeSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGJhbGFuY2VzID0gYXdhaXQgdGhpcy51c2VyUG9zdEJhbGFuY2UgKHtcbiAgICAgICAgICAgICdjdXJyZW5jaWVzJzogY3VycmVuY2llcy5qb2luICgnLCcpXG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGJhbGFuY2VzIH07XG4gICAgICAgIGZvciAobGV0IGIgPSAwOyBiIDwgYmFsYW5jZXMubGVuZ3RoOyBiKyspIHtcbiAgICAgICAgICAgIGxldCBiYWxhbmNlID0gYmFsYW5jZXNbYl07XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBiYWxhbmNlWydjdXJyZW5jeSddWyduYW1lJ107XG4gICAgICAgICAgICBjdXJyZW5jeSA9IGN1cnJlbmN5LnRvVXBwZXJDYXNlICgpO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiBiYWxhbmNlWydhdmFpbGFibGUnXSxcbiAgICAgICAgICAgICAgICAndXNlZCc6IGJhbGFuY2VbJ2Jsb2NrZWQnXSArIGJhbGFuY2VbJ2luT3JkZXJzJ10gKyBiYWxhbmNlWyd3aXRoZHJhd2luZyddLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhY2NvdW50Wyd0b3RhbCddID0gdGhpcy5zdW0gKGFjY291bnRbJ2ZyZWUnXSwgYWNjb3VudFsndXNlZCddKTtcbiAgICAgICAgICAgIHJlc3VsdFtjdXJyZW5jeV0gPSBhY2NvdW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSBhd2FpdCB0aGlzLmN1cnJlbnRHZXRPcmRlckJvb2tQYWlyQXNrQ291bnRCaWRDb3VudERlcHRoICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ3BhaXInOiBwWydpZCddLFxuICAgICAgICAgICAgJ2Fza0NvdW50JzogNTEyLCAvLyBtYXhpbXVtIHJldHVybmVkIG51bWJlciBvZiBhc2tzIDEtNTEyXG4gICAgICAgICAgICAnYmlkQ291bnQnOiA1MTIsIC8vIG1heGltdW0gcmV0dXJuZWQgbnVtYmVyIG9mIGJpZHMgMS01MTJcbiAgICAgICAgICAgICdkZXB0aCc6IDMyLCAvLyBtYXhpbXVtIG51bWJlciBvZiBkZXB0aCByYW5nZSBzdGVwcyAxLTMyXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IFtdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaWRlcyA9IFsgJ2JpZHMnLCAnYXNrcycgXTtcbiAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBzaWRlcy5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1tzXTtcbiAgICAgICAgICAgIGxldCBvcmRlcnMgPSBvcmRlcmJvb2tbc2lkZV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBvcmRlciA9IG9yZGVyc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgcHJpY2UgPSBvcmRlclsncHJpY2UnXTtcbiAgICAgICAgICAgICAgICBsZXQgYW1vdW50ID0gb3JkZXJbJ2Jhc2VBbW91bnQnXTtcbiAgICAgICAgICAgICAgICByZXN1bHRbc2lkZV0ucHVzaCAoWyBwcmljZSwgYW1vdW50IF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIHBhcnNlVGlja2VyICh0aWNrZXIsIG1hcmtldCkge1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiB0aWNrZXJbJ2hpZ2gnXSxcbiAgICAgICAgICAgICdsb3cnOiB0aWNrZXJbJ2xvdyddLFxuICAgICAgICAgICAgJ2JpZCc6IHRpY2tlclsnaGlnaGVzdEJpZCddLFxuICAgICAgICAgICAgJ2Fzayc6IHRpY2tlclsnbG93ZXN0QXNrJ10sXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogdGlja2VyWydiYXNlVm9sdW1lJ10sXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiB0aWNrZXJbJ2NvdW50ZXJWb2x1bWUnXSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGlja2VyO1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlcnMgKCkge1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmN1cnJlbnRHZXQyNGhvdXJSb2xsaW5nQWdncmVnYXRpb24gKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7fTtcbiAgICAgICAgZm9yIChsZXQgdCA9IDA7IHQgPCByZXNwb25zZS5sZW5ndGg7IHQrKykge1xuICAgICAgICAgICAgbGV0IHRpY2tlciA9IHJlc3BvbnNlW3RdO1xuICAgICAgICAgICAgbGV0IGJhc2UgPSB0aWNrZXJbJ2N1cnJlbmN5UGFpciddWydiYXNlJ10udG9VcHBlckNhc2UgKCk7XG4gICAgICAgICAgICBsZXQgcXVvdGUgPSB0aWNrZXJbJ2N1cnJlbmN5UGFpciddWydjb3VudGVyJ10udG9VcHBlckNhc2UgKCk7XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gYmFzZSArICcvJyArIHF1b3RlO1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IHRoaXMubWFya2V0c1tzeW1ib2xdO1xuICAgICAgICAgICAgcmVzdWx0W3N5bWJvbF0gPSB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIG1hcmtldCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmN1cnJlbnRHZXQyNGhvdXJSb2xsaW5nQWdncmVnYXRpb24gKCk7XG4gICAgICAgIGxldCB0aWNrZXJzID0ge307XG4gICAgICAgIGZvciAobGV0IHQgPSAwOyB0IDwgcmVzcG9uc2UubGVuZ3RoOyB0KyspIHtcbiAgICAgICAgICAgIGxldCB0aWNrZXIgPSByZXNwb25zZVt0XTtcbiAgICAgICAgICAgIGxldCBiYXNlID0gdGlja2VyWydjdXJyZW5jeVBhaXInXVsnYmFzZSddLnRvVXBwZXJDYXNlICgpO1xuICAgICAgICAgICAgbGV0IHF1b3RlID0gdGlja2VyWydjdXJyZW5jeVBhaXInXVsnY291bnRlciddLnRvVXBwZXJDYXNlICgpO1xuICAgICAgICAgICAgbGV0IHN5bWJvbCA9IGJhc2UgKyAnLycgKyBxdW90ZTtcbiAgICAgICAgICAgIHRpY2tlcnNbc3ltYm9sXSA9IHRpY2tlcjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgc3ltYm9sID0gcFsnc3ltYm9sJ107XG4gICAgICAgIGlmIChzeW1ib2wgaW4gdGlja2Vycykge1xuICAgICAgICAgICAgbGV0IHRpY2tlciA9IHRpY2tlcnNbc3ltYm9sXTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIHApO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgc3ltYm9sICsgJyB0aWNrZXIgbm90IGZvdW5kJyk7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRHZXRUcmFuc2FjdGlvbnNQYWlyTWF4Q291bnQgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAncGFpcic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgICAgICAnbWF4Q291bnQnOiAxMjgsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAnY3VycmVuY3lQYWlyJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICd2b2x1bWUnOiBhbW91bnQsXG4gICAgICAgICAgICAncHJpY2UnOiBwcmljZSxcbiAgICAgICAgICAgICdvcmRlclR5cGUnOiAoc2lkZSA9PSAnYnV5JykgPyAwIDogMSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy51c2VyUG9zdEFkZE9yZGVyICh0aGlzLmV4dGVuZCAob3JkZXIsIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXNwb25zZSxcbiAgICAgICAgICAgICdpZCc6IHJlc3BvbnNlWydyZXN1bHQnXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnVzZXJQb3N0Q2FuY2VsT3JkZXIgKHsgJ29yZGVySWQnOiBpZCB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArICcvJyArIGFwaSArICcvJyArIHRoaXMuaW1wbG9kZVBhcmFtcyAocGF0aCwgcGFyYW1zKTtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5vbWl0IChwYXJhbXMsIHRoaXMuZXh0cmFjdFBhcmFtcyAocGF0aCkpO1xuICAgICAgICBpZiAoYXBpID09ICdjdXJyZW50Jykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChxdWVyeSkubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG5vbmNlID0gdGhpcy5ub25jZSAoKTtcbiAgICAgICAgICAgIGxldCByZXF1ZXN0ID0gdGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICAgICAndG9rZW4nOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgICAgICAnbm9uY2UnOiBub25jZSxcbiAgICAgICAgICAgIH0sIHF1ZXJ5KTtcbiAgICAgICAgICAgIGxldCBhdXRoID0gbm9uY2UudG9TdHJpbmcgKCkgKyAnJCcgKyB0aGlzLmFwaUtleTtcbiAgICAgICAgICAgIHJlcXVlc3RbJ3NpZ25hdHVyZSddID0gdGhpcy5obWFjICh0aGlzLmVuY29kZSAoYXV0aCksIHRoaXMuZW5jb2RlICh0aGlzLnNlY3JldCkpO1xuICAgICAgICAgICAgYm9keSA9IHRoaXMuanNvbiAocmVxdWVzdCk7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtTGVuZ3RoJzogYm9keS5sZW5ndGgsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdlcnJvcnMnIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBjb2lubWFya2V0Y2FwID0ge1xuXG4gICAgJ2lkJzogJ2NvaW5tYXJrZXRjYXAnLFxuICAgICduYW1lJzogJ0NvaW5NYXJrZXRDYXAnLFxuICAgICdyYXRlTGltaXQnOiAxMDAwMCxcbiAgICAndmVyc2lvbic6ICd2MScsXG4gICAgJ2NvdW50cmllcyc6ICdVUycsXG4gICAgJ2hhc0ZldGNoVGlja2Vycyc6IHRydWUsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjgyNDQyNDQtOWJlNjMxMmEtNjllZC0xMWU3LTk5YzEtN2MxNzk3Mjc1MjY1LmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly9hcGkuY29pbm1hcmtldGNhcC5jb20nLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vY29pbm1hcmtldGNhcC5jb20nLFxuICAgICAgICAnZG9jJzogJ2h0dHBzOi8vY29pbm1hcmtldGNhcC5jb20vYXBpJyxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICd0aWNrZXIvJyxcbiAgICAgICAgICAgICAgICAndGlja2VyL3tpZH0vJyxcbiAgICAgICAgICAgICAgICAnZ2xvYmFsLycsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgJ2N1cnJlbmNpZXMnOiBbXG4gICAgICAgICdBVUQnLFxuICAgICAgICAnQlJMJyxcbiAgICAgICAgJ0NBRCcsXG4gICAgICAgICdDSEYnLFxuICAgICAgICAnQ05ZJyxcbiAgICAgICAgJ0VVUicsXG4gICAgICAgICdHQlAnLFxuICAgICAgICAnSEtEJyxcbiAgICAgICAgJ0lEUicsXG4gICAgICAgICdJTlInLFxuICAgICAgICAnSlBZJyxcbiAgICAgICAgJ0tSVycsXG4gICAgICAgICdNWE4nLFxuICAgICAgICAnUlVCJyxcbiAgICAgICAgJ1VTRCcsXG4gICAgXSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICgnRmV0Y2hpbmcgb3JkZXIgYm9va3MgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgQVBJIG9mICcgKyB0aGlzLmlkKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hNYXJrZXRzICgpIHtcbiAgICAgICAgbGV0IG1hcmtldHMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFRpY2tlciAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGxldCBwID0gMDsgcCA8IG1hcmtldHMubGVuZ3RoOyBwKyspIHtcbiAgICAgICAgICAgIGxldCBtYXJrZXQgPSBtYXJrZXRzW3BdO1xuICAgICAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCB0aGlzLmN1cnJlbmNpZXMubGVuZ3RoOyBjKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgYmFzZSA9IG1hcmtldFsnc3ltYm9sJ107XG4gICAgICAgICAgICAgICAgbGV0IGJhc2VJZCA9IG1hcmtldFsnaWQnXTtcbiAgICAgICAgICAgICAgICBsZXQgcXVvdGUgPSB0aGlzLmN1cnJlbmNpZXNbY107XG4gICAgICAgICAgICAgICAgbGV0IHF1b3RlSWQgPSBxdW90ZS50b0xvd2VyQ2FzZSAoKTtcbiAgICAgICAgICAgICAgICBsZXQgc3ltYm9sID0gYmFzZSArICcvJyArIHF1b3RlO1xuICAgICAgICAgICAgICAgIGxldCBpZCA9IGJhc2VJZCArICcvJyArIHF1b3RlO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoICh7XG4gICAgICAgICAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICAgICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgICAgICAgICAnYmFzZSc6IGJhc2UsXG4gICAgICAgICAgICAgICAgICAgICdxdW90ZSc6IHF1b3RlLFxuICAgICAgICAgICAgICAgICAgICAnYmFzZUlkJzogYmFzZUlkLFxuICAgICAgICAgICAgICAgICAgICAncXVvdGVJZCc6IHF1b3RlSWQsXG4gICAgICAgICAgICAgICAgICAgICdpbmZvJzogbWFya2V0LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoR2xvYmFsIChjdXJyZW5jeSA9ICdVU0QnKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXF1ZXN0ID0ge307XG4gICAgICAgIGlmIChjdXJyZW5jeSlcbiAgICAgICAgICAgIHJlcXVlc3RbJ2NvbnZlcnQnXSA9IGN1cnJlbmN5O1xuICAgICAgICByZXR1cm4gdGhpcy5wdWJsaWNHZXRHbG9iYWwgKHJlcXVlc3QpO1xuICAgIH0sXG5cbiAgICBwYXJzZVRpY2tlciAodGlja2VyLCBtYXJrZXQpIHtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBpZiAoJ2xhc3RfdXBkYXRlZCcgaW4gdGlja2VyKVxuICAgICAgICAgICAgaWYgKHRpY2tlclsnbGFzdF91cGRhdGVkJ10pXG4gICAgICAgICAgICAgICAgdGltZXN0YW1wID0gcGFyc2VJbnQgKHRpY2tlclsnbGFzdF91cGRhdGVkJ10pICogMTAwMDtcbiAgICAgICAgbGV0IHZvbHVtZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IHZvbHVtZUtleSA9ICcyNGhfdm9sdW1lXycgKyBtYXJrZXRbJ3F1b3RlSWQnXTtcbiAgICAgICAgaWYgKHRpY2tlclt2b2x1bWVLZXldKVxuICAgICAgICAgICAgdm9sdW1lID0gcGFyc2VGbG9hdCAodGlja2VyW3ZvbHVtZUtleV0pO1xuICAgICAgICBsZXQgcHJpY2UgPSAncHJpY2VfJyArIG1hcmtldFsncXVvdGVJZCddO1xuICAgICAgICBsZXQgY2hhbmdlID0gdW5kZWZpbmVkO1xuICAgICAgICBsZXQgY2hhbmdlS2V5ID0gJ3BlcmNlbnRfY2hhbmdlXzI0aCc7XG4gICAgICAgIGlmICh0aWNrZXJbY2hhbmdlS2V5XSlcbiAgICAgICAgICAgIGNoYW5nZSA9IHBhcnNlRmxvYXQgKHRpY2tlcltjaGFuZ2VLZXldKTtcbiAgICAgICAgbGV0IGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChwcmljZSBpbiB0aWNrZXIpXG4gICAgICAgICAgICBpZiAodGlja2VyW3ByaWNlXSlcbiAgICAgICAgICAgICAgICBsYXN0ID0gcGFyc2VGbG9hdCAodGlja2VyW3ByaWNlXSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbG93JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2JpZCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhc2snOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBsYXN0LFxuICAgICAgICAgICAgJ2NoYW5nZSc6IGNoYW5nZSxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHZvbHVtZSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlcnMgKGN1cnJlbmN5ID0gJ1VTRCcpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlcXVlc3QgPSB7fTtcbiAgICAgICAgaWYgKGN1cnJlbmN5KVxuICAgICAgICAgICAgcmVxdWVzdFsnY29udmVydCddID0gY3VycmVuY3k7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0VGlja2VyIChyZXF1ZXN0KTtcbiAgICAgICAgbGV0IHRpY2tlcnMgPSB7fTtcbiAgICAgICAgZm9yIChsZXQgdCA9IDA7IHQgPCByZXNwb25zZS5sZW5ndGg7IHQrKykge1xuICAgICAgICAgICAgbGV0IHRpY2tlciA9IHJlc3BvbnNlW3RdO1xuICAgICAgICAgICAgbGV0IGlkID0gdGlja2VyWydpZCddICsgJy8nICsgY3VycmVuY3k7XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gdGhpcy5tYXJrZXRzX2J5X2lkW2lkXTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBtYXJrZXRbJ3N5bWJvbCddO1xuICAgICAgICAgICAgdGlja2Vyc1tzeW1ib2xdID0gdGhpcy5wYXJzZVRpY2tlciAodGlja2VyLCBtYXJrZXQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aWNrZXJzO1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCByZXF1ZXN0ID0ge1xuICAgICAgICAgICAgJ2NvbnZlcnQnOiBwWydxdW90ZSddLFxuICAgICAgICAgICAgJ2lkJzogcFsnYmFzZUlkJ10sXG4gICAgICAgIH07XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0VGlja2VySWQgKHJlcXVlc3QpO1xuICAgICAgICBsZXQgdGlja2VyID0gcmVzcG9uc2VbMF07XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIHApO1xuICAgIH0sXG5cbiAgICByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgJy8nICsgdGhpcy52ZXJzaW9uICsgJy8nICsgdGhpcy5pbXBsb2RlUGFyYW1zIChwYXRoLCBwYXJhbXMpO1xuICAgICAgICBsZXQgcXVlcnkgPSB0aGlzLm9taXQgKHBhcmFtcywgdGhpcy5leHRyYWN0UGFyYW1zIChwYXRoKSk7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyAocXVlcnkpLmxlbmd0aClcbiAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICByZXR1cm4gdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGNvaW5tYXRlID0ge1xuXG4gICAgJ2lkJzogJ2NvaW5tYXRlJyxcbiAgICAnbmFtZSc6ICdDb2luTWF0ZScsXG4gICAgJ2NvdW50cmllcyc6IFsgJ0dCJywgJ0NaJyBdLCAvLyBVSywgQ3plY2ggUmVwdWJsaWNcbiAgICAncmF0ZUxpbWl0JzogMTAwMCxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yNzgxMTIyOS1jMWVmYjUxMC02MDZjLTExZTctOWEzNi04NGJhMmNlNDEyZDguanBnJyxcbiAgICAgICAgJ2FwaSc6ICdodHRwczovL2NvaW5tYXRlLmlvL2FwaScsXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly9jb2lubWF0ZS5pbycsXG4gICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAnaHR0cDovL2RvY3MuY29pbm1hdGUuYXBpYXJ5LmlvJyxcbiAgICAgICAgICAgICdodHRwczovL2NvaW5tYXRlLmlvL2RldmVsb3BlcnMnLFxuICAgICAgICBdLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ29yZGVyQm9vaycsXG4gICAgICAgICAgICAgICAgJ3RpY2tlcicsXG4gICAgICAgICAgICAgICAgJ3RyYW5zYWN0aW9ucycsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAncHJpdmF0ZSc6IHtcbiAgICAgICAgICAgICdwb3N0JzogW1xuICAgICAgICAgICAgICAgICdiYWxhbmNlcycsXG4gICAgICAgICAgICAgICAgJ2JpdGNvaW5XaXRoZHJhd2FsJyxcbiAgICAgICAgICAgICAgICAnYml0Y29pbkRlcG9zaXRBZGRyZXNzZXMnLFxuICAgICAgICAgICAgICAgICdidXlJbnN0YW50JyxcbiAgICAgICAgICAgICAgICAnYnV5TGltaXQnLFxuICAgICAgICAgICAgICAgICdjYW5jZWxPcmRlcicsXG4gICAgICAgICAgICAgICAgJ2NhbmNlbE9yZGVyV2l0aEluZm8nLFxuICAgICAgICAgICAgICAgICdjcmVhdGVWb3VjaGVyJyxcbiAgICAgICAgICAgICAgICAnb3Blbk9yZGVycycsXG4gICAgICAgICAgICAgICAgJ3JlZGVlbVZvdWNoZXInLFxuICAgICAgICAgICAgICAgICdzZWxsSW5zdGFudCcsXG4gICAgICAgICAgICAgICAgJ3NlbGxMaW1pdCcsXG4gICAgICAgICAgICAgICAgJ3RyYW5zYWN0aW9uSGlzdG9yeScsXG4gICAgICAgICAgICAgICAgJ3VuY29uZmlybWVkQml0Y29pbkRlcG9zaXRzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9FVVInOiB7ICdpZCc6ICdCVENfRVVSJywgJ3N5bWJvbCc6ICdCVEMvRVVSJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ0VVUicgfSxcbiAgICAgICAgJ0JUQy9DWksnOiB7ICdpZCc6ICdCVENfQ1pLJywgJ3N5bWJvbCc6ICdCVEMvQ1pLJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ0NaSycgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdEJhbGFuY2VzICgpO1xuICAgICAgICBsZXQgYmFsYW5jZXMgPSByZXNwb25zZVsnZGF0YSddO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGJhbGFuY2VzIH07XG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgdGhpcy5jdXJyZW5jaWVzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSB0aGlzLmN1cnJlbmNpZXNbY107XG4gICAgICAgICAgICBsZXQgYWNjb3VudCA9IHtcbiAgICAgICAgICAgICAgICAnZnJlZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAndXNlZCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAndG90YWwnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGN1cnJlbmN5IGluIGJhbGFuY2VzKSB7XG4gICAgICAgICAgICAgICAgYWNjb3VudFsnZnJlZSddID0gYmFsYW5jZXNbY3VycmVuY3ldWydhdmFpbGFibGUnXTtcbiAgICAgICAgICAgICAgICBhY2NvdW50Wyd1c2VkJ10gPSBiYWxhbmNlc1tjdXJyZW5jeV1bJ3Jlc2VydmVkJ107XG4gICAgICAgICAgICAgICAgYWNjb3VudFsndG90YWwnXSA9IGJhbGFuY2VzW2N1cnJlbmN5XVsnYmFsYW5jZSddO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRPcmRlckJvb2sgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnY3VycmVuY3lQYWlyJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICdncm91cEJ5UHJpY2VMaW1pdCc6ICdGYWxzZScsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgb3JkZXJib29rID0gcmVzcG9uc2VbJ2RhdGEnXTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IG9yZGVyYm9va1sndGltZXN0YW1wJ10gKiAxMDAwO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gb3JkZXJbJ3ByaWNlJ107XG4gICAgICAgICAgICAgICAgbGV0IGFtb3VudCA9IG9yZGVyWydhbW91bnQnXTtcbiAgICAgICAgICAgICAgICByZXN1bHRbc2lkZV0ucHVzaCAoWyBwcmljZSwgYW1vdW50IF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRUaWNrZXIgKHtcbiAgICAgICAgICAgICdjdXJyZW5jeVBhaXInOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IHRpY2tlciA9IHJlc3BvbnNlWydkYXRhJ107XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aWNrZXJbJ3RpbWVzdGFtcCddICogMTAwMDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2JpZCddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2FzayddKSxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdCddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2Ftb3VudCddKSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdGhpcy5wdWJsaWNHZXRUcmFuc2FjdGlvbnMgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnY3VycmVuY3lQYWlyJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICdtaW51dGVzSW50b0hpc3RvcnknOiAxMCxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBtZXRob2QgPSAncHJpdmF0ZVBvc3QnICsgdGhpcy5jYXBpdGFsaXplIChzaWRlKTtcbiAgICAgICAgbGV0IG9yZGVyID0ge1xuICAgICAgICAgICAgJ2N1cnJlbmN5UGFpcic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlID09ICdtYXJrZXQnKSB7XG4gICAgICAgICAgICBpZiAoc2lkZSA9PSAnYnV5JylcbiAgICAgICAgICAgICAgICBvcmRlclsndG90YWwnXSA9IGFtb3VudDsgLy8gYW1vdW50IGluIGZpYXRcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBvcmRlclsnYW1vdW50J10gPSBhbW91bnQ7IC8vIGFtb3VudCBpbiBmaWF0XG4gICAgICAgICAgICBtZXRob2QgKz0gJ0luc3RhbnQnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3JkZXJbJ2Ftb3VudCddID0gYW1vdW50OyAvLyBhbW91bnQgaW4gY3J5cHRvXG4gICAgICAgICAgICBvcmRlclsncHJpY2UnXSA9IHByaWNlO1xuICAgICAgICAgICAgbWV0aG9kICs9IHRoaXMuY2FwaXRhbGl6ZSAodHlwZSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpc1ttZXRob2RdIChzZWxmLmV4dGVuZCAob3JkZXIsIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXNwb25zZSxcbiAgICAgICAgICAgICdpZCc6IHJlc3BvbnNlWydkYXRhJ10udG9TdHJpbmcgKCksXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdENhbmNlbE9yZGVyICh7ICdvcmRlcklkJzogaWQgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ10gKyAnLycgKyBwYXRoO1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHBhcmFtcykubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocGFyYW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghdGhpcy51aWQpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEF1dGhlbnRpY2F0aW9uRXJyb3IgKHRoaXMuaWQgKyAnIHJlcXVpcmVzIGAnICsgdGhpcy5pZCArICcudWlkYCBwcm9wZXJ0eSBmb3IgYXV0aGVudGljYXRpb24nKTtcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCkudG9TdHJpbmcgKCk7XG4gICAgICAgICAgICBsZXQgYXV0aCA9IG5vbmNlICsgdGhpcy51aWQgKyB0aGlzLmFwaUtleTtcbiAgICAgICAgICAgIGxldCBzaWduYXR1cmUgPSB0aGlzLmhtYWMgKHRoaXMuZW5jb2RlIChhdXRoKSwgdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSk7XG4gICAgICAgICAgICBib2R5ID0gdGhpcy51cmxlbmNvZGUgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAgICAgJ2NsaWVudElkJzogdGhpcy51aWQsXG4gICAgICAgICAgICAgICAgJ25vbmNlJzogbm9uY2UsXG4gICAgICAgICAgICAgICAgJ3B1YmxpY0tleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgICAgICdzaWduYXR1cmUnOiBzaWduYXR1cmUudG9VcHBlckNhc2UgKCksXG4gICAgICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgICAgICBpZiAoJ2Vycm9yJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIGlmIChyZXNwb25zZVsnZXJyb3InXSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgJyArIHRoaXMuanNvbiAocmVzcG9uc2UpKTtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGNvaW5zZWN1cmUgPSB7XG5cbiAgICAnaWQnOiAnY29pbnNlY3VyZScsXG4gICAgJ25hbWUnOiAnQ29pbnNlY3VyZScsXG4gICAgJ2NvdW50cmllcyc6ICdJTicsIC8vIEluZGlhXG4gICAgJ3JhdGVMaW1pdCc6IDEwMDAsXG4gICAgJ3ZlcnNpb24nOiAndjEnLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2NDcyLTljYmQyMDBhLTVlZDktMTFlNy05NTUxLTIyNjdhZDdiYWMwOC5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vYXBpLmNvaW5zZWN1cmUuaW4nLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vY29pbnNlY3VyZS5pbicsXG4gICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAnaHR0cHM6Ly9hcGkuY29pbnNlY3VyZS5pbicsXG4gICAgICAgICAgICAnaHR0cHM6Ly9naXRodWIuY29tL2NvaW5zZWN1cmUvcGx1Z2lucycsXG4gICAgICAgIF0sXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnYml0Y29pbi9zZWFyY2gvY29uZmlybWF0aW9uL3t0eGlkfScsXG4gICAgICAgICAgICAgICAgJ2V4Y2hhbmdlL2Fzay9sb3cnLFxuICAgICAgICAgICAgICAgICdleGNoYW5nZS9hc2svb3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnZXhjaGFuZ2UvYmlkL2hpZ2gnLFxuICAgICAgICAgICAgICAgICdleGNoYW5nZS9iaWQvb3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnZXhjaGFuZ2UvbGFzdFRyYWRlJyxcbiAgICAgICAgICAgICAgICAnZXhjaGFuZ2UvbWF4MjRIcicsXG4gICAgICAgICAgICAgICAgJ2V4Y2hhbmdlL21pbjI0SHInLFxuICAgICAgICAgICAgICAgICdleGNoYW5nZS90aWNrZXInLFxuICAgICAgICAgICAgICAgICdleGNoYW5nZS90cmFkZXMnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdtZmEvYXV0aHkvY2FsbCcsXG4gICAgICAgICAgICAgICAgJ21mYS9hdXRoeS9zbXMnLFxuICAgICAgICAgICAgICAgICduZXRraS9zZWFyY2gve25ldGtpTmFtZX0nLFxuICAgICAgICAgICAgICAgICd1c2VyL2Jhbmsvb3RwL3tudW1iZXJ9JyxcbiAgICAgICAgICAgICAgICAndXNlci9reWMvb3RwL3tudW1iZXJ9JyxcbiAgICAgICAgICAgICAgICAndXNlci9wcm9maWxlL3Bob25lL290cC97bnVtYmVyfScsXG4gICAgICAgICAgICAgICAgJ3VzZXIvd2FsbGV0L2NvaW4vYWRkcmVzcy97aWR9JyxcbiAgICAgICAgICAgICAgICAndXNlci93YWxsZXQvY29pbi9kZXBvc2l0L2NvbmZpcm1lZC9hbGwnLFxuICAgICAgICAgICAgICAgICd1c2VyL3dhbGxldC9jb2luL2RlcG9zaXQvY29uZmlybWVkL3tpZH0nLFxuICAgICAgICAgICAgICAgICd1c2VyL3dhbGxldC9jb2luL2RlcG9zaXQvdW5jb25maXJtZWQvYWxsJyxcbiAgICAgICAgICAgICAgICAndXNlci93YWxsZXQvY29pbi9kZXBvc2l0L3VuY29uZmlybWVkL3tpZH0nLFxuICAgICAgICAgICAgICAgICd1c2VyL3dhbGxldC9jb2luL3dhbGxldHMnLFxuICAgICAgICAgICAgICAgICd1c2VyL2V4Y2hhbmdlL2JhbmsvZmlhdC9hY2NvdW50cycsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYmFuay9maWF0L2JhbGFuY2UvYXZhaWxhYmxlJyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS9iYW5rL2ZpYXQvYmFsYW5jZS9wZW5kaW5nJyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS9iYW5rL2ZpYXQvYmFsYW5jZS90b3RhbCcsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYmFuay9maWF0L2RlcG9zaXQvY2FuY2VsbGVkJyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS9iYW5rL2ZpYXQvZGVwb3NpdC91bnZlcmlmaWVkJyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS9iYW5rL2ZpYXQvZGVwb3NpdC92ZXJpZmllZCcsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYmFuay9maWF0L3dpdGhkcmF3L2NhbmNlbGxlZCcsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYmFuay9maWF0L3dpdGhkcmF3L2NvbXBsZXRlZCcsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYmFuay9maWF0L3dpdGhkcmF3L3VudmVyaWZpZWQnLFxuICAgICAgICAgICAgICAgICd1c2VyL2V4Y2hhbmdlL2JhbmsvZmlhdC93aXRoZHJhdy92ZXJpZmllZCcsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYXNrL2NhbmNlbGxlZCcsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYXNrL2NvbXBsZXRlZCcsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYXNrL3BlbmRpbmcnLFxuICAgICAgICAgICAgICAgICd1c2VyL2V4Y2hhbmdlL2JpZC9jYW5jZWxsZWQnLFxuICAgICAgICAgICAgICAgICd1c2VyL2V4Y2hhbmdlL2JpZC9jb21wbGV0ZWQnLFxuICAgICAgICAgICAgICAgICd1c2VyL2V4Y2hhbmdlL2JpZC9wZW5kaW5nJyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS9iYW5rL2NvaW4vYWRkcmVzc2VzJyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS9iYW5rL2NvaW4vYmFsYW5jZS9hdmFpbGFibGUnLFxuICAgICAgICAgICAgICAgICd1c2VyL2V4Y2hhbmdlL2JhbmsvY29pbi9iYWxhbmNlL3BlbmRpbmcnLFxuICAgICAgICAgICAgICAgICd1c2VyL2V4Y2hhbmdlL2JhbmsvY29pbi9iYWxhbmNlL3RvdGFsJyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS9iYW5rL2NvaW4vZGVwb3NpdC9jYW5jZWxsZWQnLFxuICAgICAgICAgICAgICAgICd1c2VyL2V4Y2hhbmdlL2JhbmsvY29pbi9kZXBvc2l0L3VudmVyaWZpZWQnLFxuICAgICAgICAgICAgICAgICd1c2VyL2V4Y2hhbmdlL2JhbmsvY29pbi9kZXBvc2l0L3ZlcmlmaWVkJyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS9iYW5rL2NvaW4vd2l0aGRyYXcvY2FuY2VsbGVkJyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS9iYW5rL2NvaW4vd2l0aGRyYXcvY29tcGxldGVkJyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS9iYW5rL2NvaW4vd2l0aGRyYXcvdW52ZXJpZmllZCcsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYmFuay9jb2luL3dpdGhkcmF3L3ZlcmlmaWVkJyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS9iYW5rL3N1bW1hcnknLFxuICAgICAgICAgICAgICAgICd1c2VyL2V4Y2hhbmdlL2NvaW4vZmVlJyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS9maWF0L2ZlZScsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2Uva3ljcycsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvcmVmZXJyYWwvY29pbi9wYWlkJyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS9yZWZlcnJhbC9jb2luL3N1Y2Nlc3NmdWwnLFxuICAgICAgICAgICAgICAgICd1c2VyL2V4Y2hhbmdlL3JlZmVycmFsL2ZpYXQvcGFpZCcsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvcmVmZXJyYWxzJyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS90cmFkZS9zdW1tYXJ5JyxcbiAgICAgICAgICAgICAgICAndXNlci9sb2dpbi90b2tlbi97dG9rZW59JyxcbiAgICAgICAgICAgICAgICAndXNlci9zdW1tYXJ5JyxcbiAgICAgICAgICAgICAgICAndXNlci93YWxsZXQvc3VtbWFyeScsXG4gICAgICAgICAgICAgICAgJ3dhbGxldC9jb2luL3dpdGhkcmF3L2NhbmNlbGxlZCcsXG4gICAgICAgICAgICAgICAgJ3dhbGxldC9jb2luL3dpdGhkcmF3L2NvbXBsZXRlZCcsXG4gICAgICAgICAgICAgICAgJ3dhbGxldC9jb2luL3dpdGhkcmF3L3VudmVyaWZpZWQnLFxuICAgICAgICAgICAgICAgICd3YWxsZXQvY29pbi93aXRoZHJhdy92ZXJpZmllZCcsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2xvZ2luJyxcbiAgICAgICAgICAgICAgICAnbG9naW4vaW5pdGlhdGUnLFxuICAgICAgICAgICAgICAgICdsb2dpbi9wYXNzd29yZC9mb3Jnb3QnLFxuICAgICAgICAgICAgICAgICdtZmEvYXV0aHkvaW5pdGlhdGUnLFxuICAgICAgICAgICAgICAgICdtZmEvZ2EvaW5pdGlhdGUnLFxuICAgICAgICAgICAgICAgICdzaWdudXAnLFxuICAgICAgICAgICAgICAgICd1c2VyL25ldGtpL3VwZGF0ZScsXG4gICAgICAgICAgICAgICAgJ3VzZXIvcHJvZmlsZS9pbWFnZS91cGRhdGUnLFxuICAgICAgICAgICAgICAgICd1c2VyL2V4Y2hhbmdlL2JhbmsvY29pbi93aXRoZHJhdy9pbml0aWF0ZScsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYmFuay9jb2luL3dpdGhkcmF3L25ld1ZlcmlmeWNvZGUnLFxuICAgICAgICAgICAgICAgICd1c2VyL2V4Y2hhbmdlL2JhbmsvZmlhdC93aXRoZHJhdy9pbml0aWF0ZScsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYmFuay9maWF0L3dpdGhkcmF3L25ld1ZlcmlmeWNvZGUnLFxuICAgICAgICAgICAgICAgICd1c2VyL3Bhc3N3b3JkL2NoYW5nZScsXG4gICAgICAgICAgICAgICAgJ3VzZXIvcGFzc3dvcmQvcmVzZXQnLFxuICAgICAgICAgICAgICAgICd1c2VyL3dhbGxldC9jb2luL3dpdGhkcmF3L2luaXRpYXRlJyxcbiAgICAgICAgICAgICAgICAnd2FsbGV0L2NvaW4vd2l0aGRyYXcvbmV3VmVyaWZ5Y29kZScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ3B1dCc6IFtcbiAgICAgICAgICAgICAgICAnc2lnbnVwL3ZlcmlmeS97dG9rZW59JyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS9reWMnLFxuICAgICAgICAgICAgICAgICd1c2VyL2V4Y2hhbmdlL2JhbmsvZmlhdC9kZXBvc2l0L25ldycsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYXNrL25ldycsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYmlkL25ldycsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvaW5zdGFudC9idXknLFxuICAgICAgICAgICAgICAgICd1c2VyL2V4Y2hhbmdlL2luc3RhbnQvc2VsbCcsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYmFuay9jb2luL3dpdGhkcmF3L3ZlcmlmeScsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYmFuay9maWF0L2FjY291bnQvbmV3JyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS9iYW5rL2ZpYXQvd2l0aGRyYXcvdmVyaWZ5JyxcbiAgICAgICAgICAgICAgICAndXNlci9tZmEvYXV0aHkvaW5pdGlhdGUvZW5hYmxlJyxcbiAgICAgICAgICAgICAgICAndXNlci9tZmEvZ2EvaW5pdGlhdGUvZW5hYmxlJyxcbiAgICAgICAgICAgICAgICAndXNlci9uZXRraS9jcmVhdGUnLFxuICAgICAgICAgICAgICAgICd1c2VyL3Byb2ZpbGUvcGhvbmUvbmV3JyxcbiAgICAgICAgICAgICAgICAndXNlci93YWxsZXQvY29pbi9hZGRyZXNzL25ldycsXG4gICAgICAgICAgICAgICAgJ3VzZXIvd2FsbGV0L2NvaW4vbmV3JyxcbiAgICAgICAgICAgICAgICAndXNlci93YWxsZXQvY29pbi93aXRoZHJhdy9zZW5kVG9FeGNoYW5nZScsXG4gICAgICAgICAgICAgICAgJ3VzZXIvd2FsbGV0L2NvaW4vd2l0aGRyYXcvdmVyaWZ5JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAnZGVsZXRlJzogW1xuICAgICAgICAgICAgICAgICd1c2VyL2djbS97Y29kZX0nLFxuICAgICAgICAgICAgICAgICd1c2VyL2xvZ291dCcsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYmFuay9jb2luL3dpdGhkcmF3L3VudmVyaWZpZWQvY2FuY2VsL3t3aXRoZHJhd0lEfScsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYmFuay9maWF0L2RlcG9zaXQvY2FuY2VsL3tkZXBvc2l0SUR9JyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS9hc2svY2FuY2VsL3tvcmRlcklEfScsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYmlkL2NhbmNlbC97b3JkZXJJRH0nLFxuICAgICAgICAgICAgICAgICd1c2VyL2V4Y2hhbmdlL2JhbmsvZmlhdC93aXRoZHJhdy91bnZlcmlmaWVkL2NhbmNlbC97d2l0aGRyYXdJRH0nLFxuICAgICAgICAgICAgICAgICd1c2VyL21mYS9hdXRoeS9kaXNhYmxlL3tjb2RlfScsXG4gICAgICAgICAgICAgICAgJ3VzZXIvbWZhL2dhL2Rpc2FibGUve2NvZGV9JyxcbiAgICAgICAgICAgICAgICAndXNlci9wcm9maWxlL3Bob25lL2RlbGV0ZScsXG4gICAgICAgICAgICAgICAgJ3VzZXIvcHJvZmlsZS9pbWFnZS9kZWxldGUve25ldGtpTmFtZX0nLFxuICAgICAgICAgICAgICAgICd1c2VyL3dhbGxldC9jb2luL3dpdGhkcmF3L3VudmVyaWZpZWQvY2FuY2VsL3t3aXRoZHJhd0lEfScsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgJ21hcmtldHMnOiB7XG4gICAgICAgICdCVEMvSU5SJzogeyAnaWQnOiAnQlRDL0lOUicsICdzeW1ib2wnOiAnQlRDL0lOUicsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdJTlInIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZUdldFVzZXJFeGNoYW5nZUJhbmtTdW1tYXJ5ICgpO1xuICAgICAgICBsZXQgYmFsYW5jZSA9IHJlc3BvbnNlWydtZXNzYWdlJ107XG4gICAgICAgIGxldCBjb2luID0ge1xuICAgICAgICAgICAgJ2ZyZWUnOiBiYWxhbmNlWydhdmFpbGFibGVDb2luQmFsYW5jZSddLFxuICAgICAgICAgICAgJ3VzZWQnOiBiYWxhbmNlWydwZW5kaW5nQ29pbkJhbGFuY2UnXSxcbiAgICAgICAgICAgICd0b3RhbCc6IGJhbGFuY2VbJ3RvdGFsQ29pbkJhbGFuY2UnXSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IGZpYXQgPSB7XG4gICAgICAgICAgICAnZnJlZSc6IGJhbGFuY2VbJ2F2YWlsYWJsZUZpYXRCYWxhbmNlJ10sXG4gICAgICAgICAgICAndXNlZCc6IGJhbGFuY2VbJ3BlbmRpbmdGaWF0QmFsYW5jZSddLFxuICAgICAgICAgICAgJ3RvdGFsJzogYmFsYW5jZVsndG90YWxGaWF0QmFsYW5jZSddLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2luZm8nOiBiYWxhbmNlLFxuICAgICAgICAgICAgJ0JUQyc6IGNvaW4sXG4gICAgICAgICAgICAnSU5SJzogZmlhdCxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IGJpZHMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldEV4Y2hhbmdlQmlkT3JkZXJzIChwYXJhbXMpO1xuICAgICAgICBsZXQgYXNrcyA9IGF3YWl0IHRoaXMucHVibGljR2V0RXhjaGFuZ2VBc2tPcmRlcnMgKHBhcmFtcyk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IGJpZHNbJ21lc3NhZ2UnXSxcbiAgICAgICAgICAgICdhc2tzJzogYXNrc1snbWVzc2FnZSddLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IFtdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaWRlcyA9IFsgJ2JpZHMnLCAnYXNrcycgXTtcbiAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBzaWRlcy5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1tzXTtcbiAgICAgICAgICAgIGxldCBvcmRlcnMgPSBvcmRlcmJvb2tbc2lkZV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBvcmRlciA9IG9yZGVyc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgcHJpY2UgPSBvcmRlclsncmF0ZSddO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBvcmRlclsndm9sJ107XG4gICAgICAgICAgICAgICAgcmVzdWx0W3NpZGVdLnB1c2ggKFsgcHJpY2UsIGFtb3VudCBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0RXhjaGFuZ2VUaWNrZXIgKCk7XG4gICAgICAgIGxldCB0aWNrZXIgPSByZXNwb25zZVsnbWVzc2FnZSddO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGlja2VyWyd0aW1lc3RhbXAnXTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2JpZCddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2FzayddKSxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ29wZW4nXSksXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdFByaWNlJ10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsnY29pbnZvbHVtZSddKSxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsnZmlhdHZvbHVtZSddKSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdGhpcy5wdWJsaWNHZXRFeGNoYW5nZVRyYWRlcyAocGFyYW1zKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IG1ldGhvZCA9ICdwcml2YXRlUHV0VXNlckV4Y2hhbmdlJztcbiAgICAgICAgbGV0IG9yZGVyID0ge307XG4gICAgICAgIGlmICh0eXBlID09ICdtYXJrZXQnKSB7XG4gICAgICAgICAgICBtZXRob2QgKz0gJ0luc3RhbnQnICsgdGhpcy5jYXBpdGFsaXplIChzaWRlKTtcbiAgICAgICAgICAgIGlmIChzaWRlID09ICdidXknKVxuICAgICAgICAgICAgICAgIG9yZGVyWydtYXhGaWF0J10gPSBhbW91bnQ7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgb3JkZXJbJ21heFZvbCddID0gYW1vdW50O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IGRpcmVjdGlvbiA9IChzaWRlID09ICdidXknKSA/ICdCaWQnIDogJ0Fzayc7XG4gICAgICAgICAgICBtZXRob2QgKz0gZGlyZWN0aW9uICsgJ05ldyc7XG4gICAgICAgICAgICBvcmRlclsncmF0ZSddID0gcHJpY2U7XG4gICAgICAgICAgICBvcmRlclsndm9sJ10gPSBhbW91bnQ7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpc1ttZXRob2RdIChzZWxmLmV4dGVuZCAob3JkZXIsIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXNwb25zZSxcbiAgICAgICAgICAgICdpZCc6IHJlc3BvbnNlWydtZXNzYWdlJ11bJ29yZGVySUQnXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyBjYW5jZWxPcmRlciAoKSBpcyBub3QgZnVsbHkgaW1wbGVtZW50ZWQgeWV0Jyk7XG4gICAgICAgIGxldCBtZXRob2QgPSAncHJpdmF0ZURlbGV0ZVVzZXJFeGNoYW5nZUFza0NhbmNlbE9yZGVySWQnOyAvLyBUT0RPIGZpeG1lLCBoYXZlIHRvIHNwZWNpZnkgb3JkZXIgc2lkZSBoZXJlXG4gICAgICAgIHJldHVybiB0aGlzW21ldGhvZF0gKHsgJ29yZGVySUQnOiBpZCB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArICcvJyArIHRoaXMudmVyc2lvbiArICcvJyArIHRoaXMuaW1wbG9kZVBhcmFtcyAocGF0aCwgcGFyYW1zKTtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5vbWl0IChwYXJhbXMsIHRoaXMuZXh0cmFjdFBhcmFtcyAocGF0aCkpO1xuICAgICAgICBpZiAoYXBpID09ICdwcml2YXRlJykge1xuICAgICAgICAgICAgaGVhZGVycyA9IHsgJ0F1dGhvcml6YXRpb24nOiB0aGlzLmFwaUtleSB9O1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChxdWVyeSkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgYm9keSA9IHRoaXMuanNvbiAocXVlcnkpO1xuICAgICAgICAgICAgICAgIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gJ2FwcGxpY2F0aW9uL2pzb24nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdzdWNjZXNzJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIGlmIChyZXNwb25zZVsnc3VjY2VzcyddKVxuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgY29pbnNwb3QgPSB7XG5cbiAgICAnaWQnOiAnY29pbnNwb3QnLFxuICAgICduYW1lJzogJ0NvaW5TcG90JyxcbiAgICAnY291bnRyaWVzJzogJ0FVJywgLy8gQXVzdHJhbGlhXG4gICAgJ3JhdGVMaW1pdCc6IDEwMDAsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjgyMDg0MjktM2NhY2RmOWEtNjg5Ni0xMWU3LTg1NGUtNGM3OWE3NzJhMzBmLmpwZycsXG4gICAgICAgICdhcGknOiB7XG4gICAgICAgICAgICAncHVibGljJzogJ2h0dHBzOi8vd3d3LmNvaW5zcG90LmNvbS5hdS9wdWJhcGknLFxuICAgICAgICAgICAgJ3ByaXZhdGUnOiAnaHR0cHM6Ly93d3cuY29pbnNwb3QuY29tLmF1L2FwaScsXG4gICAgICAgIH0sXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly93d3cuY29pbnNwb3QuY29tLmF1JyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL3d3dy5jb2luc3BvdC5jb20uYXUvYXBpJyxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdsYXRlc3QnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnb3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnb3JkZXJzL2hpc3RvcnknLFxuICAgICAgICAgICAgICAgICdteS9jb2luL2RlcG9zaXQnLFxuICAgICAgICAgICAgICAgICdteS9jb2luL3NlbmQnLFxuICAgICAgICAgICAgICAgICdxdW90ZS9idXknLFxuICAgICAgICAgICAgICAgICdxdW90ZS9zZWxsJyxcbiAgICAgICAgICAgICAgICAnbXkvYmFsYW5jZXMnLFxuICAgICAgICAgICAgICAgICdteS9vcmRlcnMnLFxuICAgICAgICAgICAgICAgICdteS9idXknLFxuICAgICAgICAgICAgICAgICdteS9zZWxsJyxcbiAgICAgICAgICAgICAgICAnbXkvYnV5L2NhbmNlbCcsXG4gICAgICAgICAgICAgICAgJ215L3NlbGwvY2FuY2VsJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9BVUQnOiB7ICdpZCc6ICdCVEMnLCAnc3ltYm9sJzogJ0JUQy9BVUQnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnQVVEJyB9LFxuICAgICAgICAnTFRDL0FVRCc6IHsgJ2lkJzogJ0xUQycsICdzeW1ib2wnOiAnTFRDL0FVRCcsICdiYXNlJzogJ0xUQycsICdxdW90ZSc6ICdBVUQnIH0sXG4gICAgICAgICdET0dFL0FVRCc6IHsgJ2lkJzogJ0RPR0UnLCAnc3ltYm9sJzogJ0RPR0UvQVVEJywgJ2Jhc2UnOiAnRE9HRScsICdxdW90ZSc6ICdBVUQnIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RNeUJhbGFuY2VzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IHJlc3BvbnNlIH07XG4gICAgICAgIGlmICgnYmFsYW5jZScgaW4gcmVzcG9uc2UpIHtcbiAgICAgICAgICAgIGxldCBiYWxhbmNlcyA9IHJlc3BvbnNlWydiYWxhbmNlJ107XG4gICAgICAgICAgICBsZXQgY3VycmVuY2llcyA9IE9iamVjdC5rZXlzIChiYWxhbmNlcyk7XG4gICAgICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IGN1cnJlbmNpZXMubGVuZ3RoOyBjKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBjdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgICAgIGxldCB1cHBlcmNhc2UgPSBjdXJyZW5jeS50b1VwcGVyQ2FzZSAoKTtcbiAgICAgICAgICAgICAgICBsZXQgYWNjb3VudCA9IHtcbiAgICAgICAgICAgICAgICAgICAgJ2ZyZWUnOiBiYWxhbmNlc1tjdXJyZW5jeV0sXG4gICAgICAgICAgICAgICAgICAgICd1c2VkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAndG90YWwnOiBiYWxhbmNlc1tjdXJyZW5jeV0sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBpZiAodXBwZXJjYXNlID09ICdEUksnKVxuICAgICAgICAgICAgICAgICAgICB1cHBlcmNhc2UgPSAnREFTSCc7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3VwcGVyY2FzZV0gPSBhY2NvdW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0T3JkZXJzICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2NvaW50eXBlJzogcFsnaWQnXSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdiaWRzJzogW10sXG4gICAgICAgICAgICAnYXNrcyc6IFtdLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHNpZGVzID0geyAnYmlkcyc6ICdidXlvcmRlcnMnLCAnYXNrcyc6ICdzZWxsb3JkZXJzJyB9O1xuICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzIChzaWRlcyk7XG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwga2V5cy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgbGV0IGtleSA9IGtleXNba107XG4gICAgICAgICAgICBsZXQgc2lkZSA9IHNpZGVzW2tleV07XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAob3JkZXJbJ3JhdGUnXSk7XG4gICAgICAgICAgICAgICAgbGV0IGFtb3VudCA9IHBhcnNlRmxvYXQgKG9yZGVyWydhbW91bnQnXSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W2tleV0ucHVzaCAoWyBwcmljZSwgYW1vdW50IF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlc3VsdFsnYmlkcyddID0gdGhpcy5zb3J0QnkgKHJlc3VsdFsnYmlkcyddLCAwLCB0cnVlKTtcbiAgICAgICAgcmVzdWx0Wydhc2tzJ10gPSB0aGlzLnNvcnRCeSAocmVzdWx0Wydhc2tzJ10sIDApO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0TGF0ZXN0ICgpO1xuICAgICAgICBsZXQgaWQgPSB0aGlzLm1hcmtldElkIChtYXJrZXQpO1xuICAgICAgICBpZCA9IGlkLnRvTG93ZXJDYXNlICgpO1xuICAgICAgICBsZXQgdGlja2VyID0gcmVzcG9uc2VbJ3ByaWNlcyddW2lkXTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xvdyc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2JpZCddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2FzayddKSxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdCddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJpdmF0ZVBvc3RPcmRlcnNIaXN0b3J5ICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2NvaW50eXBlJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBtZXRob2QgPSAncHJpdmF0ZVBvc3RNeScgKyB0aGlzLmNhcGl0YWxpemUgKHNpZGUpO1xuICAgICAgICBpZiAodHlwZSA9PSAnbWFya2V0JylcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyBhbGxvd3MgbGltaXQgb3JkZXJzIG9ubHknKTtcbiAgICAgICAgbGV0IG9yZGVyID0ge1xuICAgICAgICAgICAgJ2NvaW50eXBlJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICdhbW91bnQnOiBhbW91bnQsXG4gICAgICAgICAgICAncmF0ZSc6IHByaWNlLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGhpc1ttZXRob2RdICh0aGlzLmV4dGVuZCAob3JkZXIsIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyBjYW5jZWxPcmRlciAoKSBpcyBub3QgZnVsbHkgaW1wbGVtZW50ZWQgeWV0Jyk7XG4gICAgICAgIGxldCBtZXRob2QgPSAncHJpdmF0ZVBvc3RNeUJ1eSc7XG4gICAgICAgIHJldHVybiB0aGlzW21ldGhvZF0gKHsgJ2lkJzogaWQgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmFwaUtleSlcbiAgICAgICAgICAgIHRocm93IG5ldyBBdXRoZW50aWNhdGlvbkVycm9yICh0aGlzLmlkICsgJyByZXF1aXJlcyBhcGlLZXkgZm9yIGFsbCByZXF1ZXN0cycpO1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXVthcGldICsgJy8nICsgcGF0aDtcbiAgICAgICAgaWYgKGFwaSA9PSAncHJpdmF0ZScpIHtcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCk7XG4gICAgICAgICAgICBib2R5ID0gdGhpcy5qc29uICh0aGlzLmV4dGVuZCAoeyAnbm9uY2UnOiBub25jZSB9LCBwYXJhbXMpKTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAnQ29udGVudC1MZW5ndGgnOiBib2R5Lmxlbmd0aCxcbiAgICAgICAgICAgICAgICAna2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ3NpZ24nOiB0aGlzLmhtYWMgKHRoaXMuZW5jb2RlIChib2R5KSwgdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSwgJ3NoYTUxMicpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGNyeXB0b3BpYSA9IHtcblxuICAgICdpZCc6ICdjcnlwdG9waWEnLFxuICAgICduYW1lJzogJ0NyeXB0b3BpYScsXG4gICAgJ3JhdGVMaW1pdCc6IDE1MDAsXG4gICAgJ2NvdW50cmllcyc6ICdOWicsIC8vIE5ldyBaZWFsYW5kXG4gICAgJ2hhc0ZldGNoVGlja2Vycyc6IHRydWUsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjk0ODQzOTQtN2I0ZWE2ZTItODRjNi0xMWU3LTgzZTUtMWZjY2Y0YjJkYzgxLmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly93d3cuY3J5cHRvcGlhLmNvLm56L2FwaScsXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly93d3cuY3J5cHRvcGlhLmNvLm56JyxcbiAgICAgICAgJ2RvYyc6IFtcbiAgICAgICAgICAgICdodHRwczovL3d3dy5jcnlwdG9waWEuY28ubnovRm9ydW0vVGhyZWFkLzI1NScsXG4gICAgICAgICAgICAnaHR0cHM6Ly93d3cuY3J5cHRvcGlhLmNvLm56L0ZvcnVtL1RocmVhZC8yNTYnLFxuICAgICAgICBdLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ0dldEN1cnJlbmNpZXMnLFxuICAgICAgICAgICAgICAgICdHZXRUcmFkZVBhaXJzJyxcbiAgICAgICAgICAgICAgICAnR2V0TWFya2V0cycsXG4gICAgICAgICAgICAgICAgJ0dldE1hcmtldHMve2lkfScsXG4gICAgICAgICAgICAgICAgJ0dldE1hcmtldHMve2hvdXJzfScsXG4gICAgICAgICAgICAgICAgJ0dldE1hcmtldHMve2lkfS97aG91cnN9JyxcbiAgICAgICAgICAgICAgICAnR2V0TWFya2V0L3tpZH0nLFxuICAgICAgICAgICAgICAgICdHZXRNYXJrZXQve2lkfS97aG91cnN9JyxcbiAgICAgICAgICAgICAgICAnR2V0TWFya2V0SGlzdG9yeS97aWR9JyxcbiAgICAgICAgICAgICAgICAnR2V0TWFya2V0SGlzdG9yeS97aWR9L3tob3Vyc30nLFxuICAgICAgICAgICAgICAgICdHZXRNYXJrZXRPcmRlcnMve2lkfScsXG4gICAgICAgICAgICAgICAgJ0dldE1hcmtldE9yZGVycy97aWR9L3tjb3VudH0nLFxuICAgICAgICAgICAgICAgICdHZXRNYXJrZXRPcmRlckdyb3Vwcy97aWRzfS97Y291bnR9JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ0NhbmNlbFRyYWRlJyxcbiAgICAgICAgICAgICAgICAnR2V0QmFsYW5jZScsXG4gICAgICAgICAgICAgICAgJ0dldERlcG9zaXRBZGRyZXNzJyxcbiAgICAgICAgICAgICAgICAnR2V0T3Blbk9yZGVycycsXG4gICAgICAgICAgICAgICAgJ0dldFRyYWRlSGlzdG9yeScsXG4gICAgICAgICAgICAgICAgJ0dldFRyYW5zYWN0aW9ucycsXG4gICAgICAgICAgICAgICAgJ1N1Ym1pdFRpcCcsXG4gICAgICAgICAgICAgICAgJ1N1Ym1pdFRyYWRlJyxcbiAgICAgICAgICAgICAgICAnU3VibWl0VHJhbnNmZXInLFxuICAgICAgICAgICAgICAgICdTdWJtaXRXaXRoZHJhdycsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE1hcmtldHMgKCkge1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgbGV0IG1hcmtldHMgPSByZXNwb25zZVsnRGF0YSddO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1hcmtldHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCBtYXJrZXQgPSBtYXJrZXRzW2ldO1xuICAgICAgICAgICAgbGV0IGlkID0gbWFya2V0WydUcmFkZVBhaXJJZCddO1xuICAgICAgICAgICAgbGV0IHN5bWJvbCA9IG1hcmtldFsnTGFiZWwnXTtcbiAgICAgICAgICAgIGxldCBbIGJhc2UsIHF1b3RlIF0gPSBzeW1ib2wuc3BsaXQgKCcvJyk7XG4gICAgICAgICAgICByZXN1bHQucHVzaCAoe1xuICAgICAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICAgICAgICAgICdzeW1ib2wnOiBzeW1ib2wsXG4gICAgICAgICAgICAgICAgJ2Jhc2UnOiBiYXNlLFxuICAgICAgICAgICAgICAgICdxdW90ZSc6IHF1b3RlLFxuICAgICAgICAgICAgICAgICdpbmZvJzogbWFya2V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRNYXJrZXRPcmRlcnNJZCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdpZCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgb3JkZXJib29rID0gcmVzcG9uc2VbJ0RhdGEnXTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSB7ICdiaWRzJzogJ0J1eScsICdhc2tzJzogJ1NlbGwnIH07XG4gICAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMgKHNpZGVzKTtcbiAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBrZXlzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICBsZXQga2V5ID0ga2V5c1trXTtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNba2V5XTtcbiAgICAgICAgICAgIGxldCBvcmRlcnMgPSBvcmRlcmJvb2tbc2lkZV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBvcmRlciA9IG9yZGVyc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgcHJpY2UgPSBwYXJzZUZsb2F0IChvcmRlclsnUHJpY2UnXSk7XG4gICAgICAgICAgICAgICAgbGV0IGFtb3VudCA9IHBhcnNlRmxvYXQgKG9yZGVyWydUb3RhbCddKTtcbiAgICAgICAgICAgICAgICByZXN1bHRba2V5XS5wdXNoIChbIHByaWNlLCBhbW91bnQgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgcGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KSB7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydIaWdoJ10pLFxuICAgICAgICAgICAgJ2xvdyc6IHBhcnNlRmxvYXQgKHRpY2tlclsnTG93J10pLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnQmlkUHJpY2UnXSksXG4gICAgICAgICAgICAnYXNrJzogcGFyc2VGbG9hdCAodGlja2VyWydBc2tQcmljZSddKSxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ09wZW4nXSksXG4gICAgICAgICAgICAnY2xvc2UnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ0Nsb3NlJ10pLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ0xhc3RQcmljZSddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ0NoYW5nZSddKSxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsnQmFzZVZvbHVtZSddKSxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsnVm9sdW1lJ10pLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBtID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0TWFya2V0SWQgKHtcbiAgICAgICAgICAgICdpZCc6IG1bJ2lkJ10sXG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgdGlja2VyID0gcmVzcG9uc2VbJ0RhdGEnXTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VUaWNrZXIgKHRpY2tlciwgbSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VycyAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0TWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHt9O1xuICAgICAgICBsZXQgdGlja2VycyA9IHJlc3BvbnNlWydEYXRhJ107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGlja2Vycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IHRpY2tlciA9IHRpY2tlcnNbaV07XG4gICAgICAgICAgICBsZXQgaWQgPSB0aWNrZXJbJ1RyYWRlUGFpcklkJ107XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gdGhpcy5tYXJrZXRzX2J5X2lkW2lkXTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBtYXJrZXRbJ3N5bWJvbCddO1xuICAgICAgICAgICAgcmVzdWx0W3N5bWJvbF0gPSB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIG1hcmtldCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgcGFyc2VUcmFkZSAodHJhZGUsIG1hcmtldCkge1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdHJhZGVbJ1RpbWVzdGFtcCddICogMTAwMDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpZCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdpbmZvJzogdHJhZGUsXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ3N5bWJvbCc6IG1hcmtldFsnc3ltYm9sJ10sXG4gICAgICAgICAgICAndHlwZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdzaWRlJzogdHJhZGVbJ1R5cGUnXS50b0xvd2VyQ2FzZSAoKSxcbiAgICAgICAgICAgICdwcmljZSc6IHRyYWRlWydQcmljZSddLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IHRyYWRlWydBbW91bnQnXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG0gPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRNYXJrZXRIaXN0b3J5SWRIb3VycyAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdpZCc6IG1bJ2lkJ10sXG4gICAgICAgICAgICAnaG91cnMnOiAyNCwgLy8gZGVmYXVsdFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IHRyYWRlcyA9IHJlc3BvbnNlWydEYXRhJ107XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlVHJhZGVzICh0cmFkZXMsIG0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0R2V0QmFsYW5jZSAoKTtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gcmVzcG9uc2VbJ0RhdGEnXTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiByZXNwb25zZSB9O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJhbGFuY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgYmFsYW5jZSA9IGJhbGFuY2VzW2ldO1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gYmFsYW5jZVsnU3ltYm9sJ107XG4gICAgICAgICAgICBsZXQgYWNjb3VudCA9IHtcbiAgICAgICAgICAgICAgICAnZnJlZSc6IGJhbGFuY2VbJ0F2YWlsYWJsZSddLFxuICAgICAgICAgICAgICAgICd1c2VkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IGJhbGFuY2VbJ1RvdGFsJ10sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYWNjb3VudFsndXNlZCddID0gYWNjb3VudFsndG90YWwnXSAtIGFjY291bnRbJ2ZyZWUnXTtcbiAgICAgICAgICAgIHJlc3VsdFtjdXJyZW5jeV0gPSBhY2NvdW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdNYXJrZXQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICAgICAgJ1R5cGUnOiB0aGlzLmNhcGl0YWxpemUgKHNpZGUpLFxuICAgICAgICAgICAgJ1JhdGUnOiBwcmljZSxcbiAgICAgICAgICAgICdBbW91bnQnOiBhbW91bnQsXG4gICAgICAgIH07XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RTdWJtaXRUcmFkZSAodGhpcy5leHRlbmQgKG9yZGVyLCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnRGF0YSddWydPcmRlcklkJ10udG9TdHJpbmcgKCksXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdENhbmNlbFRyYWRlICh7XG4gICAgICAgICAgICAnVHlwZSc6ICdUcmFkZScsXG4gICAgICAgICAgICAnT3JkZXJJZCc6IGlkLFxuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArICcvJyArIHRoaXMuaW1wbG9kZVBhcmFtcyAocGF0aCwgcGFyYW1zKTtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5vbWl0IChwYXJhbXMsIHRoaXMuZXh0cmFjdFBhcmFtcyAocGF0aCkpO1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHF1ZXJ5KS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChxdWVyeSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpLnRvU3RyaW5nICgpO1xuICAgICAgICAgICAgYm9keSA9IHRoaXMuanNvbiAocXVlcnkpO1xuICAgICAgICAgICAgbGV0IGhhc2ggPSB0aGlzLmhhc2ggKHRoaXMuZW5jb2RlIChib2R5KSwgJ21kNScsICdiYXNlNjQnKTtcbiAgICAgICAgICAgIGxldCBzZWNyZXQgPSB0aGlzLmJhc2U2NFRvQmluYXJ5ICh0aGlzLnNlY3JldCk7XG4gICAgICAgICAgICBsZXQgdXJpID0gdGhpcy5lbmNvZGVVUklDb21wb25lbnQgKHVybCk7XG4gICAgICAgICAgICBsZXQgbG93ZXJjYXNlID0gdXJpLnRvTG93ZXJDYXNlICgpO1xuICAgICAgICAgICAgbGV0IHBheWxvYWQgPSB0aGlzLmFwaUtleSArIG1ldGhvZCArIGxvd2VyY2FzZSArIG5vbmNlICsgdGhpcy5iaW5hcnlUb1N0cmluZyAoaGFzaCk7XG4gICAgICAgICAgICBsZXQgc2lnbmF0dXJlID0gdGhpcy5obWFjICh0aGlzLmVuY29kZSAocGF5bG9hZCksIHNlY3JldCwgJ3NoYTI1NicsICdiYXNlNjQnKTtcbiAgICAgICAgICAgIGxldCBhdXRoID0gJ2FteCAnICsgdGhpcy5hcGlLZXkgKyAnOicgKyB0aGlzLmJpbmFyeVRvU3RyaW5nIChzaWduYXR1cmUpICsgJzonICsgbm9uY2U7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtTGVuZ3RoJzogYm9keS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgJ0F1dGhvcml6YXRpb24nOiBhdXRoLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgICAgIGlmICgnU3VjY2VzcycgaW4gcmVzcG9uc2UpXG4gICAgICAgICAgICBpZiAocmVzcG9uc2VbJ1N1Y2Nlc3MnXSlcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGRzeCA9IHtcblxuICAgICdpZCc6ICdkc3gnLFxuICAgICduYW1lJzogJ0RTWCcsXG4gICAgJ2NvdW50cmllcyc6ICdVSycsXG4gICAgJ3JhdGVMaW1pdCc6IDE1MDAsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc5OTAyNzUtMTQxMzE1OGEtNjQ1YS0xMWU3LTkzMWMtOTQ3MTdmNzUxMGUzLmpwZycsXG4gICAgICAgICdhcGknOiB7XG4gICAgICAgICAgICAnbWFwaSc6ICdodHRwczovL2RzeC51ay9tYXBpJywgIC8vIG1hcmtldCBkYXRhXG4gICAgICAgICAgICAndGFwaSc6ICdodHRwczovL2RzeC51ay90YXBpJywgIC8vIHRyYWRpbmdcbiAgICAgICAgICAgICdkd2FwaSc6ICdodHRwczovL2RzeC51ay9kd2FwaScsIC8vIGRlcG9zaXQvd2l0aGRyYXdcbiAgICAgICAgfSxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL2RzeC51aycsXG4gICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAnaHR0cHM6Ly9hcGkuZHN4LnVrJyxcbiAgICAgICAgICAgICdodHRwczovL2RzeC51ay9hcGlfZG9jcy9wdWJsaWMnLFxuICAgICAgICAgICAgJ2h0dHBzOi8vZHN4LnVrL2FwaV9kb2NzL3ByaXZhdGUnLFxuICAgICAgICAgICAgJycsXG4gICAgICAgIF0sXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAnbWFwaSc6IHsgLy8gbWFya2V0IGRhdGEgKHB1YmxpYylcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ2JhcnNGcm9tTW9tZW50L3tpZH0ve3BlcmlvZH0ve3N0YXJ0fScsIC8vIGVtcHR5IHJlcGx5IDpcXFxuICAgICAgICAgICAgICAgICdkZXB0aC97aWR9JyxcbiAgICAgICAgICAgICAgICAnaW5mbycsXG4gICAgICAgICAgICAgICAgJ2xhc3RCYXJzL3tpZH0ve3BlcmlvZH0ve2Ftb3VudH0nLCAvLyBwZXJpb2QgaXMgKG0sIGggb3IgZClcbiAgICAgICAgICAgICAgICAncGVyaW9kQmFycy97aWR9L3twZXJpb2R9L3tzdGFydH0ve2VuZH0nLFxuICAgICAgICAgICAgICAgICd0aWNrZXIve2lkfScsXG4gICAgICAgICAgICAgICAgJ3RyYWRlcy97aWR9JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICd0YXBpJzogeyAvLyB0cmFkaW5nIChwcml2YXRlKVxuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2dldEluZm8nLFxuICAgICAgICAgICAgICAgICdUcmFuc0hpc3RvcnknLFxuICAgICAgICAgICAgICAgICdUcmFkZUhpc3RvcnknLFxuICAgICAgICAgICAgICAgICdPcmRlckhpc3RvcnknLFxuICAgICAgICAgICAgICAgICdBY3RpdmVPcmRlcnMnLFxuICAgICAgICAgICAgICAgICdUcmFkZScsXG4gICAgICAgICAgICAgICAgJ0NhbmNlbE9yZGVyJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdkd2FwaSc6IHsgLy8gZGVwb3NpdCAvIHdpdGhkcmF3IChwcml2YXRlKVxuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2dldENyeXB0b0RlcG9zaXRBZGRyZXNzJyxcbiAgICAgICAgICAgICAgICAnY3J5cHRvV2l0aGRyYXcnLFxuICAgICAgICAgICAgICAgICdmaWF0V2l0aGRyYXcnLFxuICAgICAgICAgICAgICAgICdnZXRUcmFuc2FjdGlvblN0YXR1cycsXG4gICAgICAgICAgICAgICAgJ2dldFRyYW5zYWN0aW9ucycsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE1hcmtldHMgKCkge1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLm1hcGlHZXRJbmZvICgpO1xuICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzIChyZXNwb25zZVsncGFpcnMnXSk7XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgcCA9IDA7IHAgPCBrZXlzLmxlbmd0aDsgcCsrKSB7XG4gICAgICAgICAgICBsZXQgaWQgPSBrZXlzW3BdO1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IHJlc3BvbnNlWydwYWlycyddW2lkXTtcbiAgICAgICAgICAgIGxldCBiYXNlID0gaWQuc2xpY2UgKDAsIDMpO1xuICAgICAgICAgICAgbGV0IHF1b3RlID0gaWQuc2xpY2UgKDMsIDYpO1xuICAgICAgICAgICAgYmFzZSA9IGJhc2UudG9VcHBlckNhc2UgKCk7XG4gICAgICAgICAgICBxdW90ZSA9IHF1b3RlLnRvVXBwZXJDYXNlICgpO1xuICAgICAgICAgICAgbGV0IHN5bWJvbCA9IGJhc2UgKyAnLycgKyBxdW90ZTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoICh7XG4gICAgICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgICAgICAgICAgJ3N5bWJvbCc6IHN5bWJvbCxcbiAgICAgICAgICAgICAgICAnYmFzZSc6IGJhc2UsXG4gICAgICAgICAgICAgICAgJ3F1b3RlJzogcXVvdGUsXG4gICAgICAgICAgICAgICAgJ2luZm8nOiBtYXJrZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnRhcGlQb3N0R2V0SW5mbyAoKTtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gcmVzcG9uc2VbJ3JldHVybiddO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGJhbGFuY2VzIH07XG4gICAgICAgIGxldCBjdXJyZW5jaWVzID0gT2JqZWN0LmtleXMgKGJhbGFuY2VzWyd0b3RhbCddKTtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBjdXJyZW5jaWVzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBjdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiBiYWxhbmNlc1snZnVuZHMnXVtjdXJyZW5jeV0sXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogYmFsYW5jZXNbJ3RvdGFsJ11bY3VycmVuY3ldLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGFjY291bnRbJ3VzZWQnXSA9IGFjY291bnRbJ3RvdGFsJ10gLSBhY2NvdW50WydmcmVlJ107XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLm1hcGlHZXREZXB0aElkICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2lkJzogcFsnaWQnXSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSByZXNwb25zZVtwWydpZCddXTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gb3JkZXJbMF07XG4gICAgICAgICAgICAgICAgbGV0IGFtb3VudCA9IG9yZGVyWzFdO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtzaWRlXS5wdXNoIChbIHByaWNlLCBhbW91bnQgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLm1hcGlHZXRUaWNrZXJJZCAoe1xuICAgICAgICAgICAgJ2lkJzogcFsnaWQnXSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aWNrZXIgPSByZXNwb25zZVtwWydpZCddXTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRpY2tlclsndXBkYXRlZCddICogMTAwMDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2J1eSddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3NlbGwnXSksXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xhc3QnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYXZnJ10pLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbCddKSxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndm9sX2N1ciddKSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBpR2V0VHJhZGVzSWQgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnaWQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgaWYgKHR5cGUgPT0gJ21hcmtldCcpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgYWxsb3dzIGxpbWl0IG9yZGVycyBvbmx5Jyk7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdwYWlyJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICd0eXBlJzogc2lkZSxcbiAgICAgICAgICAgICdyYXRlJzogcHJpY2UsXG4gICAgICAgICAgICAnYW1vdW50JzogYW1vdW50LFxuICAgICAgICB9O1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnRhcGlQb3N0VHJhZGUgKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ2lkJzogcmVzcG9uc2VbJ3JldHVybiddWydvcmRlcklkJ10udG9TdHJpbmcgKCksXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy50YXBpUG9zdENhbmNlbE9yZGVyICh7ICdvcmRlcklkJzogaWQgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdtYXBpJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddW2FwaV07XG4gICAgICAgIGlmICgoYXBpID09ICdtYXBpJykgfHwgKGFwaSA9PSAnZHdhcGknKSlcbiAgICAgICAgICAgIHVybCArPSAnLycgKyB0aGlzLmltcGxvZGVQYXJhbXMgKHBhdGgsIHBhcmFtcyk7XG4gICAgICAgIGxldCBxdWVyeSA9IHRoaXMub21pdCAocGFyYW1zLCB0aGlzLmV4dHJhY3RQYXJhbXMgKHBhdGgpKTtcbiAgICAgICAgaWYgKGFwaSA9PSAnbWFwaScpIHtcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyAocXVlcnkpLmxlbmd0aClcbiAgICAgICAgICAgICAgICB1cmwgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHF1ZXJ5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCk7XG4gICAgICAgICAgICBsZXQgbWV0aG9kID0gcGF0aDtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLnVybGVuY29kZSAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICAgICAnbWV0aG9kJzogcGF0aCxcbiAgICAgICAgICAgICAgICAnbm9uY2UnOiBub25jZSxcbiAgICAgICAgICAgIH0sIHF1ZXJ5KSk7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICAgICAgICAnQ29udGVudC1MZW5ndGgnOiBib2R5Lmxlbmd0aCxcbiAgICAgICAgICAgICAgICAnS2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ1NpZ24nOiB0aGlzLmhtYWMgKHRoaXMuZW5jb2RlIChib2R5KSwgdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSwgJ3NoYTUxMicsICdiYXNlNjQnKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgICAgICBpZiAoYXBpID09ICdtYXBpJylcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgaWYgKCdzdWNjZXNzJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIGlmIChyZXNwb25zZVsnc3VjY2VzcyddKVxuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgZXhtbyA9IHtcblxuICAgICdpZCc6ICdleG1vJyxcbiAgICAnbmFtZSc6ICdFWE1PJyxcbiAgICAnY291bnRyaWVzJzogWyAnRVMnLCAnUlUnIF0sIC8vIFNwYWluLCBSdXNzaWFcbiAgICAncmF0ZUxpbWl0JzogMTAwMCwgLy8gb25jZSBldmVyeSAzNTAgbXMg4omIIDE4MCByZXF1ZXN0cyBwZXIgbWludXRlIOKJiCAzIHJlcXVlc3RzIHBlciBzZWNvbmRcbiAgICAndmVyc2lvbic6ICd2MScsXG4gICAgJ2hhc0ZldGNoVGlja2Vycyc6IHRydWUsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc3NjY0OTEtMWIwZWE5NTYtNWVkYS0xMWU3LTkyMjUtNDBkNjdiNDgxYjhkLmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly9hcGkuZXhtby5jb20nLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vZXhtby5tZScsXG4gICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAnaHR0cHM6Ly9leG1vLm1lL3J1L2FwaV9kb2MnLFxuICAgICAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS9leG1vLWRldi9leG1vX2FwaV9saWIvdHJlZS9tYXN0ZXIvbm9kZWpzJyxcbiAgICAgICAgXSxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdjdXJyZW5jeScsXG4gICAgICAgICAgICAgICAgJ29yZGVyX2Jvb2snLFxuICAgICAgICAgICAgICAgICdwYWlyX3NldHRpbmdzJyxcbiAgICAgICAgICAgICAgICAndGlja2VyJyxcbiAgICAgICAgICAgICAgICAndHJhZGVzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ3VzZXJfaW5mbycsXG4gICAgICAgICAgICAgICAgJ29yZGVyX2NyZWF0ZScsXG4gICAgICAgICAgICAgICAgJ29yZGVyX2NhbmNlbCcsXG4gICAgICAgICAgICAgICAgJ3VzZXJfb3Blbl9vcmRlcnMnLFxuICAgICAgICAgICAgICAgICd1c2VyX3RyYWRlcycsXG4gICAgICAgICAgICAgICAgJ3VzZXJfY2FuY2VsbGVkX29yZGVycycsXG4gICAgICAgICAgICAgICAgJ29yZGVyX3RyYWRlcycsXG4gICAgICAgICAgICAgICAgJ3JlcXVpcmVkX2Ftb3VudCcsXG4gICAgICAgICAgICAgICAgJ2RlcG9zaXRfYWRkcmVzcycsXG4gICAgICAgICAgICAgICAgJ3dpdGhkcmF3X2NyeXB0JyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXdfZ2V0X3R4aWQnLFxuICAgICAgICAgICAgICAgICdleGNvZGVfY3JlYXRlJyxcbiAgICAgICAgICAgICAgICAnZXhjb2RlX2xvYWQnLFxuICAgICAgICAgICAgICAgICd3YWxsZXRfaGlzdG9yeScsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE1hcmtldHMgKCkge1xuICAgICAgICBsZXQgbWFya2V0cyA9IGF3YWl0IHRoaXMucHVibGljR2V0UGFpclNldHRpbmdzICgpO1xuICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzIChtYXJrZXRzKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGxldCBwID0gMDsgcCA8IGtleXMubGVuZ3RoOyBwKyspIHtcbiAgICAgICAgICAgIGxldCBpZCA9IGtleXNbcF07XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gbWFya2V0c1tpZF07XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gaWQucmVwbGFjZSAoJ18nLCAnLycpO1xuICAgICAgICAgICAgbGV0IFsgYmFzZSwgcXVvdGUgXSA9IHN5bWJvbC5zcGxpdCAoJy8nKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoICh7XG4gICAgICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgICAgICAgICAgJ3N5bWJvbCc6IHN5bWJvbCxcbiAgICAgICAgICAgICAgICAnYmFzZSc6IGJhc2UsXG4gICAgICAgICAgICAgICAgJ3F1b3RlJzogcXVvdGUsXG4gICAgICAgICAgICAgICAgJ2luZm8nOiBtYXJrZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0VXNlckluZm8gKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogcmVzcG9uc2UgfTtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCB0aGlzLmN1cnJlbmNpZXMubGVuZ3RoOyBjKyspIHtcbiAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IHRoaXMuY3VycmVuY2llc1tjXTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd1c2VkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoY3VycmVuY3kgaW4gcmVzcG9uc2VbJ2JhbGFuY2VzJ10pXG4gICAgICAgICAgICAgICAgYWNjb3VudFsnZnJlZSddID0gcGFyc2VGbG9hdCAocmVzcG9uc2VbJ2JhbGFuY2VzJ11bY3VycmVuY3ldKTtcbiAgICAgICAgICAgIGlmIChjdXJyZW5jeSBpbiByZXNwb25zZVsncmVzZXJ2ZWQnXSlcbiAgICAgICAgICAgICAgICBhY2NvdW50Wyd1c2VkJ10gPSBwYXJzZUZsb2F0IChyZXNwb25zZVsncmVzZXJ2ZWQnXVtjdXJyZW5jeV0pO1xuICAgICAgICAgICAgYWNjb3VudFsndG90YWwnXSA9IHRoaXMuc3VtIChhY2NvdW50WydmcmVlJ10sIGFjY291bnRbJ3VzZWQnXSk7XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldE9yZGVyQm9vayAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdwYWlyJzogcFsnaWQnXSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSByZXNwb25zZVtwWydpZCddXTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSB7ICdiaWRzJzogJ2JpZCcsICdhc2tzJzogJ2FzaycgfTtcbiAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyAoc2lkZXMpO1xuICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGtleXMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgIGxldCBrZXkgPSBrZXlzW2tdO1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1trZXldO1xuICAgICAgICAgICAgbGV0IG9yZGVycyA9IG9yZGVyYm9va1tzaWRlXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9yZGVyID0gb3JkZXJzW2ldO1xuICAgICAgICAgICAgICAgIGxldCBwcmljZSA9IHBhcnNlRmxvYXQgKG9yZGVyWzBdKTtcbiAgICAgICAgICAgICAgICBsZXQgYW1vdW50ID0gcGFyc2VGbG9hdCAob3JkZXJbMV0pO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldLnB1c2ggKFsgcHJpY2UsIGFtb3VudCBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBwYXJzZVRpY2tlciAodGlja2VyLCBtYXJrZXQpIHtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRpY2tlclsndXBkYXRlZCddICogMTAwMDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2J1eV9wcmljZSddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3NlbGxfcHJpY2UnXSksXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xhc3RfdHJhZGUnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYXZnJ10pLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbCddKSxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndm9sX2N1cnInXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXJzIChjdXJyZW5jeSA9ICdVU0QnKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0VGlja2VyICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge307XG4gICAgICAgIGxldCBpZHMgPSBPYmplY3Qua2V5cyAocmVzcG9uc2UpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IGlkID0gaWRzW2ldO1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IHRoaXMubWFya2V0c19ieV9pZFtpZF07XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gbWFya2V0WydzeW1ib2wnXTtcbiAgICAgICAgICAgIGxldCB0aWNrZXIgPSByZXNwb25zZVtpZF07XG4gICAgICAgICAgICByZXN1bHRbc3ltYm9sXSA9IHRoaXMucGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0VGlja2VyICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVRpY2tlciAocmVzcG9uc2VbcFsnaWQnXV0sIHApO1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wdWJsaWNHZXRUcmFkZXMgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAncGFpcic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcHJlZml4ID0gJyc7XG4gICAgICAgIGlmICh0eXBlID09ICdtYXJrZXQnKVxuICAgICAgICAgICAgcHJlZml4ID0gJ21hcmtldF8nO1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAncGFpcic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgICAgICAncXVhbnRpdHknOiBhbW91bnQsXG4gICAgICAgICAgICAncHJpY2UnOiBwcmljZSB8fCAwLFxuICAgICAgICAgICAgJ3R5cGUnOiBwcmVmaXggKyBzaWRlLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0T3JkZXJDcmVhdGUgKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ2lkJzogcmVzcG9uc2VbJ29yZGVyX2lkJ10udG9TdHJpbmcgKCksXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdE9yZGVyQ2FuY2VsICh7ICdvcmRlcl9pZCc6IGlkIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgJy8nICsgdGhpcy52ZXJzaW9uICsgJy8nICsgcGF0aDtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChwYXJhbXMpLmxlbmd0aClcbiAgICAgICAgICAgICAgICB1cmwgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHBhcmFtcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpO1xuICAgICAgICAgICAgYm9keSA9IHRoaXMudXJsZW5jb2RlICh0aGlzLmV4dGVuZCAoeyAnbm9uY2UnOiBub25jZSB9LCBwYXJhbXMpKTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgICAgICAgICdDb250ZW50LUxlbmd0aCc6IGJvZHkubGVuZ3RoLFxuICAgICAgICAgICAgICAgICdLZXknOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgICAgICAnU2lnbic6IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKGJvZHkpLCB0aGlzLmVuY29kZSAodGhpcy5zZWNyZXQpLCAnc2hhNTEyJyksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdyZXN1bHQnIGluIHJlc3BvbnNlKSB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2VbJ3Jlc3VsdCddKVxuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBmbG93YnRjID0ge1xuXG4gICAgJ2lkJzogJ2Zsb3didGMnLFxuICAgICduYW1lJzogJ2Zsb3dCVEMnLFxuICAgICdjb3VudHJpZXMnOiAnQlInLCAvLyBCcmF6aWxcbiAgICAndmVyc2lvbic6ICd2MScsXG4gICAgJ3JhdGVMaW1pdCc6IDEwMDAsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjgxNjI0NjUtY2Q4MTVkNGMtNjdjZi0xMWU3LThlNTctNDM4YmVhMDUyM2EyLmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly9hcGkuZmxvd2J0Yy5jb206ODQwMC9hamF4JyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3RyYWRlci5mbG93YnRjLmNvbScsXG4gICAgICAgICdkb2MnOiAnaHR0cDovL3d3dy5mbG93YnRjLmNvbS5ici9hcGkvJyxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnR2V0VGlja2VyJyxcbiAgICAgICAgICAgICAgICAnR2V0VHJhZGVzJyxcbiAgICAgICAgICAgICAgICAnR2V0VHJhZGVzQnlEYXRlJyxcbiAgICAgICAgICAgICAgICAnR2V0T3JkZXJCb29rJyxcbiAgICAgICAgICAgICAgICAnR2V0UHJvZHVjdFBhaXJzJyxcbiAgICAgICAgICAgICAgICAnR2V0UHJvZHVjdHMnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnQ3JlYXRlQWNjb3VudCcsXG4gICAgICAgICAgICAgICAgJ0dldFVzZXJJbmZvJyxcbiAgICAgICAgICAgICAgICAnU2V0VXNlckluZm8nLFxuICAgICAgICAgICAgICAgICdHZXRBY2NvdW50SW5mbycsXG4gICAgICAgICAgICAgICAgJ0dldEFjY291bnRUcmFkZXMnLFxuICAgICAgICAgICAgICAgICdHZXREZXBvc2l0QWRkcmVzc2VzJyxcbiAgICAgICAgICAgICAgICAnV2l0aGRyYXcnLFxuICAgICAgICAgICAgICAgICdDcmVhdGVPcmRlcicsXG4gICAgICAgICAgICAgICAgJ01vZGlmeU9yZGVyJyxcbiAgICAgICAgICAgICAgICAnQ2FuY2VsT3JkZXInLFxuICAgICAgICAgICAgICAgICdDYW5jZWxBbGxPcmRlcnMnLFxuICAgICAgICAgICAgICAgICdHZXRBY2NvdW50T3Blbk9yZGVycycsXG4gICAgICAgICAgICAgICAgJ0dldE9yZGVyRmVlJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoTWFya2V0cyAoKSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljUG9zdEdldFByb2R1Y3RQYWlycyAoKTtcbiAgICAgICAgbGV0IG1hcmtldHMgPSByZXNwb25zZVsncHJvZHVjdFBhaXJzJ107XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgcCA9IDA7IHAgPCBtYXJrZXRzLmxlbmd0aDsgcCsrKSB7XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gbWFya2V0c1twXTtcbiAgICAgICAgICAgIGxldCBpZCA9IG1hcmtldFsnbmFtZSddO1xuICAgICAgICAgICAgbGV0IGJhc2UgPSBtYXJrZXRbJ3Byb2R1Y3QxTGFiZWwnXTtcbiAgICAgICAgICAgIGxldCBxdW90ZSA9IG1hcmtldFsncHJvZHVjdDJMYWJlbCddO1xuICAgICAgICAgICAgbGV0IHN5bWJvbCA9IGJhc2UgKyAnLycgKyBxdW90ZTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoICh7XG4gICAgICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgICAgICAgICAgJ3N5bWJvbCc6IHN5bWJvbCxcbiAgICAgICAgICAgICAgICAnYmFzZSc6IGJhc2UsXG4gICAgICAgICAgICAgICAgJ3F1b3RlJzogcXVvdGUsXG4gICAgICAgICAgICAgICAgJ2luZm8nOiBtYXJrZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0R2V0QWNjb3VudEluZm8gKCk7XG4gICAgICAgIGxldCBiYWxhbmNlcyA9IHJlc3BvbnNlWydjdXJyZW5jaWVzJ107XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogcmVzcG9uc2UgfTtcbiAgICAgICAgZm9yIChsZXQgYiA9IDA7IGIgPCBiYWxhbmNlcy5sZW5ndGg7IGIrKykge1xuICAgICAgICAgICAgbGV0IGJhbGFuY2UgPSBiYWxhbmNlc1tiXTtcbiAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IGJhbGFuY2VbJ25hbWUnXTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogYmFsYW5jZVsnYmFsYW5jZSddLFxuICAgICAgICAgICAgICAgICd1c2VkJzogYmFsYW5jZVsnaG9sZCddLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhY2NvdW50Wyd0b3RhbCddID0gdGhpcy5zdW0gKGFjY291bnRbJ2ZyZWUnXSwgYWNjb3VudFsndXNlZCddKTtcbiAgICAgICAgICAgIHJlc3VsdFtjdXJyZW5jeV0gPSBhY2NvdW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSBhd2FpdCB0aGlzLnB1YmxpY1Bvc3RHZXRPcmRlckJvb2sgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAncHJvZHVjdFBhaXInOiBwWydpZCddLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAob3JkZXJbJ3B4J10pO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBwYXJzZUZsb2F0IChvcmRlclsncXR5J10pO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtzaWRlXS5wdXNoIChbIHByaWNlLCBhbW91bnQgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgdGlja2VyID0gYXdhaXQgdGhpcy5wdWJsaWNQb3N0R2V0VGlja2VyICh7XG4gICAgICAgICAgICAncHJvZHVjdFBhaXInOiBwWydpZCddLFxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydoaWdoJ10pLFxuICAgICAgICAgICAgJ2xvdyc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbG93J10pLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYmlkJ10pLFxuICAgICAgICAgICAgJ2Fzayc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYXNrJ10pLFxuICAgICAgICAgICAgJ3Z3YXAnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnb3Blbic6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjbG9zZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdmaXJzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsYXN0JzogcGFyc2VGbG9hdCAodGlja2VyWydsYXN0J10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndm9sdW1lMjRociddKSxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndm9sdW1lMjRoclByb2R1Y3QyJ10pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY1Bvc3RHZXRUcmFkZXMgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnaW5zJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBvcmRlclR5cGUgPSAodHlwZSA9PSAnbWFya2V0JykgPyAxIDogMDtcbiAgICAgICAgbGV0IG9yZGVyID0ge1xuICAgICAgICAgICAgJ2lucyc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgICAgICAnc2lkZSc6IHNpZGUsXG4gICAgICAgICAgICAnb3JkZXJUeXBlJzogb3JkZXJUeXBlLFxuICAgICAgICAgICAgJ3F0eSc6IGFtb3VudCxcbiAgICAgICAgICAgICdweCc6IHByaWNlLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0Q3JlYXRlT3JkZXIgKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ2lkJzogcmVzcG9uc2VbJ3NlcnZlck9yZGVySWQnXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBpZiAoJ2lucycgaW4gcGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdENhbmNlbE9yZGVyICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgICAgICdzZXJ2ZXJPcmRlcklkJzogaWQsXG4gICAgICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgcmVxdWlyZXMgYGluc2Agc3ltYm9sIHBhcmFtZXRlciBmb3IgY2FuY2VsbGluZyBhbiBvcmRlcicpO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgJy8nICsgdGhpcy52ZXJzaW9uICsgJy8nICsgcGF0aDtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChwYXJhbXMpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGJvZHkgPSB0aGlzLmpzb24gKHBhcmFtcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMudWlkKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBBdXRoZW50aWNhdGlvbkVycm9yICh0aGlzLmlkICsgJyByZXF1aXJlcyBgJyArIHRoaXMuaWQgKyAnLnVpZGAgcHJvcGVydHkgZm9yIGF1dGhlbnRpY2F0aW9uJyk7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpO1xuICAgICAgICAgICAgbGV0IGF1dGggPSBub25jZS50b1N0cmluZyAoKSArIHRoaXMudWlkICsgdGhpcy5hcGlLZXk7XG4gICAgICAgICAgICBsZXQgc2lnbmF0dXJlID0gdGhpcy5obWFjICh0aGlzLmVuY29kZSAoYXV0aCksIHRoaXMuZW5jb2RlICh0aGlzLnNlY3JldCkpO1xuICAgICAgICAgICAgYm9keSA9IHRoaXMuanNvbiAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICAgICAnYXBpS2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ2FwaU5vbmNlJzogbm9uY2UsXG4gICAgICAgICAgICAgICAgJ2FwaVNpZyc6IHNpZ25hdHVyZS50b1VwcGVyQ2FzZSAoKSxcbiAgICAgICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICdDb250ZW50LUxlbmd0aCc6IGJvZHkubGVuZ3RoLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgICAgIGlmICgnaXNBY2NlcHRlZCcgaW4gcmVzcG9uc2UpXG4gICAgICAgICAgICBpZiAocmVzcG9uc2VbJ2lzQWNjZXB0ZWQnXSlcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGZveGJpdCA9IGV4dGVuZCAoYmxpbmt0cmFkZSwge1xuICAgICdpZCc6ICdmb3hiaXQnLFxuICAgICduYW1lJzogJ0ZveEJpdCcsXG4gICAgJ2NvdW50cmllcyc6ICdCUicsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc5OTE0MTMtMTFiNDBkNDItNjQ3Zi0xMWU3LTkxZWUtNzhjZWQ4NzRkZDA5LmpwZycsXG4gICAgICAgICdhcGknOiB7XG4gICAgICAgICAgICAncHVibGljJzogJ2h0dHBzOi8vYXBpLmJsaW5rdHJhZGUuY29tL2FwaScsXG4gICAgICAgICAgICAncHJpdmF0ZSc6ICdodHRwczovL2FwaS5ibGlua3RyYWRlLmNvbS90YXBpJyxcbiAgICAgICAgfSxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL2ZveGJpdC5leGNoYW5nZScsXG4gICAgICAgICdkb2MnOiAnaHR0cHM6Ly9ibGlua3RyYWRlLmNvbS9kb2NzJyxcbiAgICB9LFxuICAgICdjb21tZW50JzogJ0JsaW5rdHJhZGUgQVBJJyxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9CUkwnOiB7ICdpZCc6ICdCVENCUkwnLCAnc3ltYm9sJzogJ0JUQy9CUkwnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnQlJMJywgJ2Jyb2tlcklkJzogNCwgJ2Jyb2tlcic6ICdGb3hCaXQnIH0sXG4gICAgfSxcbn0pXG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGZ5YiA9IHtcblxuICAgICdyYXRlTGltaXQnOiAxNTAwLFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICd0aWNrZXInLFxuICAgICAgICAgICAgICAgICd0aWNrZXJkZXRhaWxlZCcsXG4gICAgICAgICAgICAgICAgJ29yZGVyYm9vaycsXG4gICAgICAgICAgICAgICAgJ3RyYWRlcycsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAncHJpdmF0ZSc6IHtcbiAgICAgICAgICAgICdwb3N0JzogW1xuICAgICAgICAgICAgICAgICd0ZXN0JyxcbiAgICAgICAgICAgICAgICAnZ2V0YWNjaW5mbycsXG4gICAgICAgICAgICAgICAgJ2dldHBlbmRpbmdvcmRlcnMnLFxuICAgICAgICAgICAgICAgICdnZXRvcmRlcmhpc3RvcnknLFxuICAgICAgICAgICAgICAgICdjYW5jZWxwZW5kaW5nb3JkZXInLFxuICAgICAgICAgICAgICAgICdwbGFjZW9yZGVyJyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXcnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgbGV0IGJhbGFuY2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0R2V0YWNjaW5mbyAoKTtcbiAgICAgICAgbGV0IGJ0YyA9IHBhcnNlRmxvYXQgKGJhbGFuY2VbJ2J0Y0JhbCddKTtcbiAgICAgICAgbGV0IHN5bWJvbCA9IHRoaXMuc3ltYm9sc1swXTtcbiAgICAgICAgbGV0IHF1b3RlID0gdGhpcy5tYXJrZXRzW3N5bWJvbF1bJ3F1b3RlJ107XG4gICAgICAgIGxldCBsb3dlcmNhc2UgPSBxdW90ZS50b0xvd2VyQ2FzZSAoKSArICdCYWwnO1xuICAgICAgICBsZXQgZmlhdCA9IHBhcnNlRmxvYXQgKGJhbGFuY2VbbG93ZXJjYXNlXSk7XG4gICAgICAgIGxldCBjcnlwdG8gPSB7XG4gICAgICAgICAgICAnZnJlZSc6IGJ0YyxcbiAgICAgICAgICAgICd1c2VkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3RvdGFsJzogYnRjLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgYWNjb3VudHMgPSB7ICdCVEMnOiBjcnlwdG8gfTtcbiAgICAgICAgYWNjb3VudHNbcXVvdGVdID0ge1xuICAgICAgICAgICAgJ2ZyZWUnOiBmaWF0LFxuICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAndG90YWwnOiBmaWF0LFxuICAgICAgICB9O1xuICAgICAgICBhY2NvdW50c1snaW5mbyddID0gYmFsYW5jZTtcbiAgICAgICAgcmV0dXJuIGFjY291bnRzO1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRPcmRlcmJvb2sgKHBhcmFtcyk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdiaWRzJzogW10sXG4gICAgICAgICAgICAnYXNrcyc6IFtdLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHNpZGVzID0gWyAnYmlkcycsICdhc2tzJyBdO1xuICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IHNpZGVzLmxlbmd0aDsgcysrKSB7XG4gICAgICAgICAgICBsZXQgc2lkZSA9IHNpZGVzW3NdO1xuICAgICAgICAgICAgbGV0IG9yZGVycyA9IG9yZGVyYm9va1tzaWRlXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9yZGVyID0gb3JkZXJzW2ldO1xuICAgICAgICAgICAgICAgIGxldCBwcmljZSA9IHBhcnNlRmxvYXQgKG9yZGVyWzBdKTtcbiAgICAgICAgICAgICAgICBsZXQgYW1vdW50ID0gcGFyc2VGbG9hdCAob3JkZXJbMV0pO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtzaWRlXS5wdXNoIChbIHByaWNlLCBhbW91bnQgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBsZXQgdGlja2VyID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRUaWNrZXJkZXRhaWxlZCAoKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgbGFzdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IHZvbHVtZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKCdsYXN0JyBpbiB0aWNrZXIpXG4gICAgICAgICAgICBsYXN0ID0gcGFyc2VGbG9hdCAodGlja2VyWydsYXN0J10pO1xuICAgICAgICBpZiAoJ3ZvbCcgaW4gdGlja2VyKVxuICAgICAgICAgICAgdm9sdW1lID0gcGFyc2VGbG9hdCAodGlja2VyWyd2b2wnXSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbG93JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYmlkJ10pLFxuICAgICAgICAgICAgJ2Fzayc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYXNrJ10pLFxuICAgICAgICAgICAgJ3Z3YXAnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnb3Blbic6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjbG9zZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdmaXJzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsYXN0JzogbGFzdCxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiB2b2x1bWUsXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0VHJhZGVzIChwYXJhbXMpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0UGxhY2VvcmRlciAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdxdHknOiBhbW91bnQsXG4gICAgICAgICAgICAncHJpY2UnOiBwcmljZSxcbiAgICAgICAgICAgICd0eXBlJzogc2lkZVswXS50b1VwcGVyQ2FzZSAoKVxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsncGVuZGluZ19vaWQnXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0Q2FuY2VscGVuZGluZ29yZGVyICh7ICdvcmRlck5vJzogaWQgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ10gKyAnLycgKyBwYXRoO1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICB1cmwgKz0gJy5qc29uJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCk7XG4gICAgICAgICAgICBib2R5ID0gdGhpcy51cmxlbmNvZGUgKHRoaXMuZXh0ZW5kICh7ICd0aW1lc3RhbXAnOiBub25jZSB9LCBwYXJhbXMpKTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgICAgICAgICdrZXknOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgICAgICAnc2lnJzogdGhpcy5obWFjICh0aGlzLmVuY29kZSAoYm9keSksIHRoaXMuZW5jb2RlICh0aGlzLnNlY3JldCksICdzaGExJylcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgICAgICBpZiAoYXBpID09ICdwcml2YXRlJylcbiAgICAgICAgICAgIGlmICgnZXJyb3InIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZVsnZXJyb3InXSlcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBmeWJzZSA9IGV4dGVuZCAoZnliLCB7XG4gICAgJ2lkJzogJ2Z5YnNlJyxcbiAgICAnbmFtZSc6ICdGWUItU0UnLFxuICAgICdjb3VudHJpZXMnOiAnU0UnLCAvLyBTd2VkZW5cbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yNzc2NjUxMi0zMTAxOTc3Mi01ZWRiLTExZTctODI0MS0yZTY3NWU2Nzk3ZjEuanBnJyxcbiAgICAgICAgJ2FwaSc6ICdodHRwczovL3d3dy5meWJzZS5zZS9hcGkvU0VLJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy5meWJzZS5zZScsXG4gICAgICAgICdkb2MnOiAnaHR0cDovL2RvY3MuZnliLmFwaWFyeS5pbycsXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9TRUsnOiB7ICdpZCc6ICdTRUsnLCAnc3ltYm9sJzogJ0JUQy9TRUsnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnU0VLJyB9LFxuICAgIH0sXG59KVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBmeWJzZyA9IGV4dGVuZCAoZnliLCB7XG4gICAgJ2lkJzogJ2Z5YnNnJyxcbiAgICAnbmFtZSc6ICdGWUItU0cnLFxuICAgICdjb3VudHJpZXMnOiAnU0cnLCAvLyBTaW5nYXBvcmVcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yNzc2NjUxMy0zMzY0ZDU2YS01ZWRiLTExZTctOWU2Yi1kNTg5OGJiODljODEuanBnJyxcbiAgICAgICAgJ2FwaSc6ICdodHRwczovL3d3dy5meWJzZy5jb20vYXBpL1NHRCcsXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly93d3cuZnlic2cuY29tJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwOi8vZG9jcy5meWIuYXBpYXJ5LmlvJyxcbiAgICB9LFxuICAgICdtYXJrZXRzJzoge1xuICAgICAgICAnQlRDL1NHRCc6IHsgJ2lkJzogJ1NHRCcsICdzeW1ib2wnOiAnQlRDL1NHRCcsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdTR0QnIH0sXG4gICAgfSxcbn0pXG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGdhdGVjb2luID0ge1xuXG4gICAgJ2lkJzogJ2dhdGVjb2luJyxcbiAgICAnbmFtZSc6ICdHYXRlY29pbicsXG4gICAgJ3JhdGVMaW1pdCc6IDIwMDAsXG4gICAgJ2NvdW50cmllcyc6ICdISycsIC8vIEhvbmcgS29uZ1xuICAgICdjb21tZW50JzogJ2EgcmVndWxhdGVkL2xpY2Vuc2VkIGV4Y2hhbmdlJyxcbiAgICAnaGFzRmV0Y2hUaWNrZXJzJzogdHJ1ZSxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yODY0NjgxNy01MDg0NTdmMi03MjZjLTExZTctOWVlYi0zNTI4ZDI0MTNhNTguanBnJyxcbiAgICAgICAgJ2FwaSc6ICdodHRwczovL2FwaS5nYXRlY29pbi5jb20nLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vZ2F0ZWNvaW4uY29tJyxcbiAgICAgICAgJ2RvYyc6IFtcbiAgICAgICAgICAgICdodHRwczovL2dhdGVjb2luLmNvbS9hcGknLFxuICAgICAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS9HYXRlY29pbi9SRVNUZnVsLUFQSS1JbXBsZW1lbnRhdGlvbicsXG4gICAgICAgICAgICAnaHR0cHM6Ly9hcGkuZ2F0ZWNvaW4uY29tL3N3YWdnZXItdWkvaW5kZXguaHRtbCcsXG4gICAgICAgIF0sXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnUHVibGljL0V4Y2hhbmdlUmF0ZScsIC8vIEdldCB0aGUgZXhjaGFuZ2UgcmF0ZXNcbiAgICAgICAgICAgICAgICAnUHVibGljL0xpdmVUaWNrZXInLCAvLyBHZXQgbGl2ZSB0aWNrZXIgZm9yIGFsbCBjdXJyZW5jeVxuICAgICAgICAgICAgICAgICdQdWJsaWMvTGl2ZVRpY2tlci97Q3VycmVuY3lQYWlyfScsIC8vIEdldCBsaXZlIHRpY2tlciBieSBjdXJyZW5jeVxuICAgICAgICAgICAgICAgICdQdWJsaWMvTGl2ZVRpY2tlcnMnLCAvLyBHZXQgbGl2ZSB0aWNrZXIgZm9yIGFsbCBjdXJyZW5jeVxuICAgICAgICAgICAgICAgICdQdWJsaWMvTWFya2V0RGVwdGgve0N1cnJlbmN5UGFpcn0nLCAvLyBHZXRzIHByaWNlcyBhbmQgbWFya2V0IGRlcHRoIGZvciB0aGUgY3VycmVuY3kgcGFpci5cbiAgICAgICAgICAgICAgICAnUHVibGljL05ldHdvcmtTdGF0aXN0aWNzL3tEaWdpQ3VycmVuY3l9JywgLy8gR2V0IHRoZSBuZXR3b3JrIHN0YXR1cyBvZiBhIHNwZWNpZmljIGRpZ2l0YWwgY3VycmVuY3lcbiAgICAgICAgICAgICAgICAnUHVibGljL1N0YXRpc3RpY0hpc3Rvcnkve0RpZ2lDdXJyZW5jeX0ve1R5cGVvZmRhdGF9JywgLy8gR2V0IHRoZSBoaXN0b3JpY2FsIGRhdGEgb2YgYSBzcGVjaWZpYyBkaWdpdGFsIGN1cnJlbmN5XG4gICAgICAgICAgICAgICAgJ1B1YmxpYy9UaWNrZXJIaXN0b3J5L3tDdXJyZW5jeVBhaXJ9L3tUaW1lZnJhbWV9JywgLy8gR2V0IHRpY2tlciBoaXN0b3J5XG4gICAgICAgICAgICAgICAgJ1B1YmxpYy9UcmFuc2FjdGlvbnMve0N1cnJlbmN5UGFpcn0nLCAvLyBHZXRzIHJlY2VudCB0cmFuc2FjdGlvbnNcbiAgICAgICAgICAgICAgICAnUHVibGljL1RyYW5zYWN0aW9uc0hpc3Rvcnkve0N1cnJlbmN5UGFpcn0nLCAvLyBHZXRzIGFsbCB0cmFuc2FjdGlvbnNcbiAgICAgICAgICAgICAgICAnUmVmZXJlbmNlL0J1c2luZXNzTmF0dXJlTGlzdCcsIC8vIEdldCB0aGUgYnVzaW5lc3MgbmF0dXJlIGxpc3QuXG4gICAgICAgICAgICAgICAgJ1JlZmVyZW5jZS9Db3VudHJpZXMnLCAvLyBHZXQgdGhlIGNvdW50cnkgbGlzdC5cbiAgICAgICAgICAgICAgICAnUmVmZXJlbmNlL0N1cnJlbmNpZXMnLCAvLyBHZXQgdGhlIGN1cnJlbmN5IGxpc3QuXG4gICAgICAgICAgICAgICAgJ1JlZmVyZW5jZS9DdXJyZW5jeVBhaXJzJywgLy8gR2V0IHRoZSBjdXJyZW5jeSBwYWlyIGxpc3QuXG4gICAgICAgICAgICAgICAgJ1JlZmVyZW5jZS9DdXJyZW50U3RhdHVzTGlzdCcsIC8vIEdldCB0aGUgY3VycmVudCBzdGF0dXMgbGlzdC5cbiAgICAgICAgICAgICAgICAnUmVmZXJlbmNlL0lkZW50eWRvY3VtZW50VHlwZXMnLCAvLyBHZXQgdGhlIGRpZmZlcmVudCB0eXBlcyBvZiBpZGVudGl0eSBkb2N1bWVudHMgcG9zc2libGUuXG4gICAgICAgICAgICAgICAgJ1JlZmVyZW5jZS9JbmNvbWVSYW5nZUxpc3QnLCAvLyBHZXQgdGhlIGluY29tZSByYW5nZSBsaXN0LlxuICAgICAgICAgICAgICAgICdSZWZlcmVuY2UvSW5jb21lU291cmNlTGlzdCcsIC8vIEdldCB0aGUgaW5jb21lIHNvdXJjZSBsaXN0LlxuICAgICAgICAgICAgICAgICdSZWZlcmVuY2UvVmVyaWZpY2F0aW9uTGV2ZWxMaXN0JywgLy8gR2V0IHRoZSB2ZXJpZiBsZXZlbCBsaXN0LlxuICAgICAgICAgICAgICAgICdTdHJlYW0vUHVibGljQ2hhbm5lbCcsIC8vIEdldCB0aGUgcHVibGljIHB1Ym51YiBjaGFubmVsIGxpc3RcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnRXhwb3J0L1RyYW5zYWN0aW9ucycsIC8vIFJlcXVlc3QgYSBleHBvcnQgb2YgYWxsIHRyYWRlcyBmcm9tIGJhc2VkIG9uIGN1cnJlbmN5cGFpciwgc3RhcnQgZGF0ZSBhbmQgZW5kIGRhdGVcbiAgICAgICAgICAgICAgICAnUGluZycsIC8vIFBvc3QgYSBzdHJpbmcsIHRoZW4gZ2V0IGl0IGJhY2suXG4gICAgICAgICAgICAgICAgJ1B1YmxpYy9VbnN1YnNjcmliZS97RW1haWxDb2RlfScsIC8vIExldHMgdGhlIHVzZXIgdW5zdWJzY3JpYmUgZnJvbSBlbWFpbHNcbiAgICAgICAgICAgICAgICAnUmVnaXN0ZXJVc2VyJywgLy8gSW5pdGlhbCB0cmFkZXIgcmVnaXN0cmF0aW9uLlxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdBY2NvdW50L0NvcnBvcmF0ZURhdGEnLCAvLyBHZXQgY29ycG9yYXRlIGFjY291bnQgZGF0YVxuICAgICAgICAgICAgICAgICdBY2NvdW50L0RvY3VtZW50QWRkcmVzcycsIC8vIENoZWNrIGlmIHJlc2lkZW5jZSBwcm9vZiB1cGxvYWRlZFxuICAgICAgICAgICAgICAgICdBY2NvdW50L0RvY3VtZW50Q29ycG9yYXRpb24nLCAvLyBDaGVjayBpZiByZWdpc3RlcmVkIGRvY3VtZW50IHVwbG9hZGVkXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvRG9jdW1lbnRJRCcsIC8vIENoZWNrIGlmIElEIGRvY3VtZW50IGNvcHkgdXBsb2FkZWRcbiAgICAgICAgICAgICAgICAnQWNjb3VudC9Eb2N1bWVudEluZm9ybWF0aW9uJywgLy8gR2V0IFN0ZXAzIERhdGFcbiAgICAgICAgICAgICAgICAnQWNjb3VudC9FbWFpbCcsIC8vIEdldCB1c2VyIGVtYWlsXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvRmVlUmF0ZScsIC8vIEdldCBmZWUgcmF0ZSBvZiBsb2dnZWQgaW4gdXNlclxuICAgICAgICAgICAgICAgICdBY2NvdW50L0xldmVsJywgLy8gR2V0IHZlcmlmIGxldmVsIG9mIGxvZ2dlZCBpbiB1c2VyXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvUGVyc29uYWxJbmZvcm1hdGlvbicsIC8vIEdldCBTdGVwMSBEYXRhXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvUGhvbmUnLCAvLyBHZXQgdXNlciBwaG9uZSBudW1iZXJcbiAgICAgICAgICAgICAgICAnQWNjb3VudC9Qcm9maWxlJywgLy8gR2V0IHRyYWRlciBwcm9maWxlXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvUXVlc3Rpb25uYWlyZScsIC8vIEZpbGwgdGhlIHF1ZXN0aW9ubmFpcmVcbiAgICAgICAgICAgICAgICAnQWNjb3VudC9SZWZlcnJhbCcsIC8vIEdldCByZWZlcnJhbCBpbmZvcm1hdGlvblxuICAgICAgICAgICAgICAgICdBY2NvdW50L1JlZmVycmFsQ29kZScsIC8vIEdldCB0aGUgcmVmZXJyYWwgY29kZSBvZiB0aGUgbG9nZ2VkIGluIHVzZXJcbiAgICAgICAgICAgICAgICAnQWNjb3VudC9SZWZlcnJhbE5hbWVzJywgLy8gR2V0IG5hbWVzIG9mIHJlZmVycmVkIHRyYWRlcnNcbiAgICAgICAgICAgICAgICAnQWNjb3VudC9SZWZlcnJhbFJld2FyZCcsIC8vIEdldCByZWZlcnJhbCByZXdhcmQgaW5mb3JtYXRpb25cbiAgICAgICAgICAgICAgICAnQWNjb3VudC9SZWZlcnJlZENvZGUnLCAvLyBHZXQgcmVmZXJyYWwgY29kZVxuICAgICAgICAgICAgICAgICdBY2NvdW50L1Jlc2lkZW50SW5mb3JtYXRpb24nLCAvLyBHZXQgU3RlcDIgRGF0YVxuICAgICAgICAgICAgICAgICdBY2NvdW50L1NlY3VyaXR5U2V0dGluZ3MnLCAvLyBHZXQgdmVyaWYgZGV0YWlscyBvZiBsb2dnZWQgaW4gdXNlclxuICAgICAgICAgICAgICAgICdBY2NvdW50L1VzZXInLCAvLyBHZXQgYWxsIHVzZXIgaW5mb1xuICAgICAgICAgICAgICAgICdBUElLZXkvQVBJS2V5JywgLy8gR2V0IEFQSSBLZXkgZm9yIGxvZ2dlZCBpbiB1c2VyXG4gICAgICAgICAgICAgICAgJ0F1dGgvQ29ubmVjdGlvbkhpc3RvcnknLCAvLyBHZXRzIGNvbm5lY3Rpb24gaGlzdG9yeSBvZiBsb2dnZWQgaW4gdXNlclxuICAgICAgICAgICAgICAgICdCYWxhbmNlL0JhbGFuY2VzJywgLy8gR2V0cyB0aGUgYXZhaWxhYmxlIGJhbGFuY2UgZm9yIGVhY2ggY3VycmVuY3kgZm9yIHRoZSBsb2dnZWQgaW4gYWNjb3VudC5cbiAgICAgICAgICAgICAgICAnQmFsYW5jZS9CYWxhbmNlcy97Q3VycmVuY3l9JywgLy8gR2V0cyB0aGUgYXZhaWxhYmxlIGJhbGFuY2UgZm9yIHMgY3VycmVuY3kgZm9yIHRoZSBsb2dnZWQgaW4gYWNjb3VudC5cbiAgICAgICAgICAgICAgICAnQmFsYW5jZS9EZXBvc2l0cycsIC8vIEdldCBhbGwgYWNjb3VudCBkZXBvc2l0cywgaW5jbHVkaW5nIHdpcmUgYW5kIGRpZ2l0YWwgY3VycmVuY3ksIG9mIHRoZSBsb2dnZWQgaW4gdXNlclxuICAgICAgICAgICAgICAgICdCYWxhbmNlL1dpdGhkcmF3YWxzJywgLy8gR2V0IGFsbCBhY2NvdW50IHdpdGhkcmF3YWxzLCBpbmNsdWRpbmcgd2lyZSBhbmQgZGlnaXRhbCBjdXJyZW5jeSwgb2YgdGhlIGxvZ2dlZCBpbiB1c2VyXG4gICAgICAgICAgICAgICAgJ0JhbmsvQWNjb3VudHMve0N1cnJlbmN5fS97TG9jYXRpb259JywgLy8gR2V0IGludGVybmFsIGJhbmsgYWNjb3VudCBmb3IgZGVwb3NpdFxuICAgICAgICAgICAgICAgICdCYW5rL1RyYW5zYWN0aW9ucycsIC8vIEdldCBhbGwgYWNjb3VudCB0cmFuc2FjdGlvbnMgb2YgdGhlIGxvZ2dlZCBpbiB1c2VyXG4gICAgICAgICAgICAgICAgJ0JhbmsvVXNlckFjY291bnRzJywgLy8gR2V0cyBhbGwgdGhlIGJhbmsgYWNjb3VudHMgcmVsYXRlZCB0byB0aGUgbG9nZ2VkIGluIHVzZXIuXG4gICAgICAgICAgICAgICAgJ0JhbmsvVXNlckFjY291bnRzL3tDdXJyZW5jeX0nLCAvLyBHZXRzIGFsbCB0aGUgYmFuayBhY2NvdW50cyByZWxhdGVkIHRvIHRoZSBsb2dnZWQgaW4gdXNlci5cbiAgICAgICAgICAgICAgICAnRWxlY3Ryb25pY1dhbGxldC9EZXBvc2l0V2FsbGV0cycsIC8vIEdldHMgYWxsIGNyeXB0byBjdXJyZW5jeSBhZGRyZXNzZXMgcmVsYXRlZCBkZXBvc2l0cyB0byB0aGUgbG9nZ2VkIGluIHVzZXIuXG4gICAgICAgICAgICAgICAgJ0VsZWN0cm9uaWNXYWxsZXQvRGVwb3NpdFdhbGxldHMve0RpZ2lDdXJyZW5jeX0nLCAvLyBHZXRzIGFsbCBjcnlwdG8gY3VycmVuY3kgYWRkcmVzc2VzIHJlbGF0ZWQgZGVwb3NpdHMgdG8gdGhlIGxvZ2dlZCBpbiB1c2VyIGJ5IGN1cnJlbmN5LlxuICAgICAgICAgICAgICAgICdFbGVjdHJvbmljV2FsbGV0L1RyYW5zYWN0aW9ucycsIC8vIEdldCBhbGwgZGlnaXRhbCBjdXJyZW5jeSB0cmFuc2FjdGlvbnMgb2YgdGhlIGxvZ2dlZCBpbiB1c2VyXG4gICAgICAgICAgICAgICAgJ0VsZWN0cm9uaWNXYWxsZXQvVHJhbnNhY3Rpb25zL3tEaWdpQ3VycmVuY3l9JywgLy8gR2V0IGFsbCBkaWdpdGFsIGN1cnJlbmN5IHRyYW5zYWN0aW9ucyBvZiB0aGUgbG9nZ2VkIGluIHVzZXJcbiAgICAgICAgICAgICAgICAnRWxlY3Ryb25pY1dhbGxldC9Vc2VyV2FsbGV0cycsIC8vIEdldHMgYWxsIGV4dGVybmFsIGRpZ2l0YWwgY3VycmVuY3kgYWRkcmVzc2VzIHJlbGF0ZWQgdG8gdGhlIGxvZ2dlZCBpbiB1c2VyLlxuICAgICAgICAgICAgICAgICdFbGVjdHJvbmljV2FsbGV0L1VzZXJXYWxsZXRzL3tEaWdpQ3VycmVuY3l9JywgLy8gR2V0cyBhbGwgZXh0ZXJuYWwgZGlnaXRhbCBjdXJyZW5jeSBhZGRyZXNzZXMgcmVsYXRlZCB0byB0aGUgbG9nZ2VkIGluIHVzZXIgYnkgY3VycmVuY3kuXG4gICAgICAgICAgICAgICAgJ0luZm8vUmVmZXJlbmNlQ3VycmVuY3knLCAvLyBHZXQgdXNlcidzIHJlZmVyZW5jZSBjdXJyZW5jeVxuICAgICAgICAgICAgICAgICdJbmZvL1JlZmVyZW5jZUxhbmd1YWdlJywgLy8gR2V0IHVzZXIncyByZWZlcmVuY2UgbGFuZ3VhZ2VcbiAgICAgICAgICAgICAgICAnTm90aWZpY2F0aW9uL01lc3NhZ2VzJywgLy8gR2V0IGZyb20gb2xkZXN0IHVucmVhZCArIDMgcmVhZCBtZXNzYWdlIHRvIG5ld2VzdCBtZXNzYWdlc1xuICAgICAgICAgICAgICAgICdUcmFkZS9PcmRlcnMnLCAvLyBHZXRzIG9wZW4gb3JkZXJzIGZvciB0aGUgbG9nZ2VkIGluIHRyYWRlci5cbiAgICAgICAgICAgICAgICAnVHJhZGUvT3JkZXJzL3tPcmRlcklEfScsIC8vIEdldHMgYW4gb3JkZXIgZm9yIHRoZSBsb2dnZWQgaW4gdHJhZGVyLlxuICAgICAgICAgICAgICAgICdUcmFkZS9TdG9wT3JkZXJzJywgLy8gR2V0cyBhbGwgc3RvcCBvcmRlcnMgZm9yIHRoZSBsb2dnZWQgaW4gdHJhZGVyLiBNYXggMTAwMCByZWNvcmQuXG4gICAgICAgICAgICAgICAgJ1RyYWRlL1N0b3BPcmRlcnNIaXN0b3J5JywgLy8gR2V0cyBhbGwgc3RvcCBvcmRlcnMgZm9yIHRoZSBsb2dnZWQgaW4gdHJhZGVyLiBNYXggMTAwMCByZWNvcmQuXG4gICAgICAgICAgICAgICAgJ1RyYWRlL1RyYWRlcycsIC8vIEdldHMgYWxsIHRyYW5zYWN0aW9ucyBvZiBsb2dnZWQgaW4gdXNlclxuICAgICAgICAgICAgICAgICdUcmFkZS9Vc2VyVHJhZGVzJywgLy8gR2V0cyBhbGwgdHJhbnNhY3Rpb25zIG9mIGxvZ2dlZCBpbiB1c2VyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvRG9jdW1lbnRBZGRyZXNzJywgLy8gVXBsb2FkIGFkZHJlc3MgcHJvb2YgZG9jdW1lbnRcbiAgICAgICAgICAgICAgICAnQWNjb3VudC9Eb2N1bWVudENvcnBvcmF0aW9uJywgLy8gVXBsb2FkIHJlZ2lzdGVyZWQgZG9jdW1lbnQgZG9jdW1lbnRcbiAgICAgICAgICAgICAgICAnQWNjb3VudC9Eb2N1bWVudElEJywgLy8gVXBsb2FkIElEIGRvY3VtZW50IGNvcHlcbiAgICAgICAgICAgICAgICAnQWNjb3VudC9FbWFpbC9SZXF1ZXN0VmVyaWZ5JywgLy8gUmVxdWVzdCBmb3IgdmVyaWZpY2F0aW9uIGVtYWlsXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvRW1haWwvVmVyaWZ5JywgLy8gVmVyaWZpY2F0aW9uIGVtYWlsXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvR29vZ2xlQXV0aCcsIC8vIEVuYWJsZSBnb29nbGUgYXV0aFxuICAgICAgICAgICAgICAgICdBY2NvdW50L0xldmVsJywgLy8gUmVxdWVzdCB2ZXJpZiBsZXZlbCBvZiBsb2dnZWQgaW4gdXNlclxuICAgICAgICAgICAgICAgICdBY2NvdW50L1F1ZXN0aW9ubmFpcmUnLCAvLyBGaWxsIHRoZSBxdWVzdGlvbm5haXJlXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvUmVmZXJyYWwnLCAvLyBQb3N0IGEgcmVmZXJyYWwgZW1haWxcbiAgICAgICAgICAgICAgICAnQVBJS2V5L0FQSUtleScsIC8vIENyZWF0ZSBhIG5ldyBBUEkga2V5IGZvciBsb2dnZWQgaW4gdXNlclxuICAgICAgICAgICAgICAgICdBdXRoL0NoYW5nZVBhc3N3b3JkJywgLy8gQ2hhbmdlIHBhc3N3b3JkLlxuICAgICAgICAgICAgICAgICdBdXRoL0ZvcmdvdFBhc3N3b3JkJywgLy8gUmVxdWVzdCByZXNldCBwYXNzd29yZFxuICAgICAgICAgICAgICAgICdBdXRoL0ZvcmdvdFVzZXJJRCcsIC8vIFJlcXVlc3QgdXNlciBpZFxuICAgICAgICAgICAgICAgICdBdXRoL0xvZ2luJywgLy8gVHJhZGVyIHNlc3Npb24gbG9nIGluLlxuICAgICAgICAgICAgICAgICdBdXRoL0xvZ291dCcsIC8vIExvZ291dCBmcm9tIHRoZSBjdXJyZW50IHNlc3Npb24uXG4gICAgICAgICAgICAgICAgJ0F1dGgvTG9nb3V0T3RoZXJTZXNzaW9ucycsIC8vIExvZ291dCBvdGhlciBzZXNzaW9ucy5cbiAgICAgICAgICAgICAgICAnQXV0aC9SZXNldFBhc3N3b3JkJywgLy8gUmVzZXQgcGFzc3dvcmRcbiAgICAgICAgICAgICAgICAnQmFuay9UcmFuc2FjdGlvbnMnLCAvLyBSZXF1ZXN0IGEgdHJhbnNmZXIgZnJvbSB0aGUgdHJhZGVycyBhY2NvdW50IG9mIHRoZSBsb2dnZWQgaW4gdXNlci4gVGhpcyBpcyBvbmx5IGF2YWlsYWJsZSBmb3IgYmFuayBhY2NvdW50XG4gICAgICAgICAgICAgICAgJ0JhbmsvVXNlckFjY291bnRzJywgLy8gQWRkIGFuIGFjY291bnQgdGhlIGxvZ2dlZCBpbiB1c2VyXG4gICAgICAgICAgICAgICAgJ0VsZWN0cm9uaWNXYWxsZXQvRGVwb3NpdFdhbGxldHMve0RpZ2lDdXJyZW5jeX0nLCAvLyBBZGQgYW4gZGlnaXRhbCBjdXJyZW5jeSBhZGRyZXNzZXMgdG8gdGhlIGxvZ2dlZCBpbiB1c2VyLlxuICAgICAgICAgICAgICAgICdFbGVjdHJvbmljV2FsbGV0L1RyYW5zYWN0aW9ucy9EZXBvc2l0cy97RGlnaUN1cnJlbmN5fScsIC8vIEdldCBhbGwgaW50ZXJuYWwgZGlnaXRhbCBjdXJyZW5jeSB0cmFuc2FjdGlvbnMgb2YgdGhlIGxvZ2dlZCBpbiB1c2VyXG4gICAgICAgICAgICAgICAgJ0VsZWN0cm9uaWNXYWxsZXQvVHJhbnNhY3Rpb25zL1dpdGhkcmF3YWxzL3tEaWdpQ3VycmVuY3l9JywgLy8gR2V0IGFsbCBleHRlcm5hbCBkaWdpdGFsIGN1cnJlbmN5IHRyYW5zYWN0aW9ucyBvZiB0aGUgbG9nZ2VkIGluIHVzZXJcbiAgICAgICAgICAgICAgICAnRWxlY3Ryb25pY1dhbGxldC9Vc2VyV2FsbGV0cy97RGlnaUN1cnJlbmN5fScsIC8vIEFkZCBhbiBleHRlcm5hbCBkaWdpdGFsIGN1cnJlbmN5IGFkZHJlc3NlcyB0byB0aGUgbG9nZ2VkIGluIHVzZXIuXG4gICAgICAgICAgICAgICAgJ0VsZWN0cm9uaWNXYWxsZXQvV2l0aGRyYXdhbHMve0RpZ2lDdXJyZW5jeX0nLCAvLyBSZXF1ZXN0IGEgdHJhbnNmZXIgZnJvbSB0aGUgdHJhZGVycyBhY2NvdW50IHRvIGFuIGV4dGVybmFsIGFkZHJlc3MuIFRoaXMgaXMgb25seSBhdmFpbGFibGUgZm9yIGNyeXB0byBjdXJyZW5jaWVzLlxuICAgICAgICAgICAgICAgICdOb3RpZmljYXRpb24vTWVzc2FnZXMnLCAvLyBNYXJrIGFsbCBhcyByZWFkXG4gICAgICAgICAgICAgICAgJ05vdGlmaWNhdGlvbi9NZXNzYWdlcy97SUR9JywgLy8gTWFyayBhcyByZWFkXG4gICAgICAgICAgICAgICAgJ1RyYWRlL09yZGVycycsIC8vIFBsYWNlIGFuIG9yZGVyIGF0IHRoZSBleGNoYW5nZS5cbiAgICAgICAgICAgICAgICAnVHJhZGUvU3RvcE9yZGVycycsIC8vIFBsYWNlIGEgc3RvcCBvcmRlciBhdCB0aGUgZXhjaGFuZ2UuXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ3B1dCc6IFtcbiAgICAgICAgICAgICAgICAnQWNjb3VudC9Db3Jwb3JhdGVEYXRhJywgLy8gVXBkYXRlIHVzZXIgY29tcGFueSBkYXRhIGZvciBjb3Jwb3JhdGUgYWNjb3VudFxuICAgICAgICAgICAgICAgICdBY2NvdW50L0RvY3VtZW50SUQnLCAvLyBVcGRhdGUgSUQgZG9jdW1lbnQgbWV0YSBkYXRhXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvRG9jdW1lbnRJbmZvcm1hdGlvbicsIC8vIFVwZGF0ZSBTdGVwMyBEYXRhXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvRW1haWwnLCAvLyBVcGRhdGUgdXNlciBlbWFpbFxuICAgICAgICAgICAgICAgICdBY2NvdW50L1BlcnNvbmFsSW5mb3JtYXRpb24nLCAvLyBVcGRhdGUgU3RlcDEgRGF0YVxuICAgICAgICAgICAgICAgICdBY2NvdW50L1Bob25lJywgLy8gVXBkYXRlIHVzZXIgcGhvbmUgbnVtYmVyXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvUXVlc3Rpb25uYWlyZScsIC8vIHVwZGF0ZSB0aGUgcXVlc3Rpb25uYWlyZVxuICAgICAgICAgICAgICAgICdBY2NvdW50L1JlZmVycmVkQ29kZScsIC8vIFVwZGF0ZSByZWZlcnJhbCBjb2RlXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvUmVzaWRlbnRJbmZvcm1hdGlvbicsIC8vIFVwZGF0ZSBTdGVwMiBEYXRhXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvU2VjdXJpdHlTZXR0aW5ncycsIC8vIFVwZGF0ZSB2ZXJpZiBkZXRhaWxzIG9mIGxvZ2dlZCBpbiB1c2VyXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvVXNlcicsIC8vIFVwZGF0ZSBhbGwgdXNlciBpbmZvXG4gICAgICAgICAgICAgICAgJ0JhbmsvVXNlckFjY291bnRzJywgLy8gVXBkYXRlIHRoZSBsYWJlbCBvZiBleGlzdGluZyB1c2VyIGJhbmsgYWNjb3VubnRcbiAgICAgICAgICAgICAgICAnRWxlY3Ryb25pY1dhbGxldC9EZXBvc2l0V2FsbGV0cy97RGlnaUN1cnJlbmN5fS97QWRkcmVzc05hbWV9JywgLy8gVXBkYXRlIHRoZSBuYW1lIG9mIGFuIGFkZHJlc3NcbiAgICAgICAgICAgICAgICAnRWxlY3Ryb25pY1dhbGxldC9Vc2VyV2FsbGV0cy97RGlnaUN1cnJlbmN5fScsIC8vIFVwZGF0ZSB0aGUgbmFtZSBvZiBhbiBleHRlcm5hbCBhZGRyZXNzXG4gICAgICAgICAgICAgICAgJ0luZm8vUmVmZXJlbmNlQ3VycmVuY3knLCAvLyBVc2VyJ3MgcmVmZXJlbmNlIGN1cnJlbmN5XG4gICAgICAgICAgICAgICAgJ0luZm8vUmVmZXJlbmNlTGFuZ3VhZ2UnLCAvLyBVcGRhdGUgdXNlcidzIHJlZmVyZW5jZSBsYW5ndWFnZVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICdkZWxldGUnOiBbXG4gICAgICAgICAgICAgICAgJ0FQSUtleS9BUElLZXkve1B1YmxpY0tleX0nLCAvLyBSZW1vdmUgYW4gQVBJIGtleVxuICAgICAgICAgICAgICAgICdCYW5rL1RyYW5zYWN0aW9ucy97UmVxdWVzdElEfScsIC8vIERlbGV0ZSBwZW5kaW5nIGFjY291bnQgd2l0aGRyYXcgb2YgdGhlIGxvZ2dlZCBpbiB1c2VyXG4gICAgICAgICAgICAgICAgJ0JhbmsvVXNlckFjY291bnRzL3tDdXJyZW5jeX0ve0xhYmVsfScsIC8vIERlbGV0ZSBhbiBhY2NvdW50IG9mIHRoZSBsb2dnZWQgaW4gdXNlclxuICAgICAgICAgICAgICAgICdFbGVjdHJvbmljV2FsbGV0L0RlcG9zaXRXYWxsZXRzL3tEaWdpQ3VycmVuY3l9L3tBZGRyZXNzTmFtZX0nLCAvLyBEZWxldGUgYW4gZGlnaXRhbCBjdXJyZW5jeSBhZGRyZXNzZXMgcmVsYXRlZCB0byB0aGUgbG9nZ2VkIGluIHVzZXIuXG4gICAgICAgICAgICAgICAgJ0VsZWN0cm9uaWNXYWxsZXQvVXNlcldhbGxldHMve0RpZ2lDdXJyZW5jeX0ve0FkZHJlc3NOYW1lfScsIC8vIERlbGV0ZSBhbiBleHRlcm5hbCBkaWdpdGFsIGN1cnJlbmN5IGFkZHJlc3NlcyByZWxhdGVkIHRvIHRoZSBsb2dnZWQgaW4gdXNlci5cbiAgICAgICAgICAgICAgICAnVHJhZGUvT3JkZXJzJywgLy8gQ2FuY2VscyBhbGwgZXhpc3Rpbmcgb3JkZXJcbiAgICAgICAgICAgICAgICAnVHJhZGUvT3JkZXJzL3tPcmRlcklEfScsIC8vIENhbmNlbHMgYW4gZXhpc3Rpbmcgb3JkZXJcbiAgICAgICAgICAgICAgICAnVHJhZGUvU3RvcE9yZGVycycsIC8vIENhbmNlbHMgYWxsIGV4aXN0aW5nIHN0b3Agb3JkZXJzXG4gICAgICAgICAgICAgICAgJ1RyYWRlL1N0b3BPcmRlcnMve0lEfScsIC8vIENhbmNlbHMgYW4gZXhpc3Rpbmcgc3RvcCBvcmRlclxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hNYXJrZXRzICgpIHtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRQdWJsaWNMaXZlVGlja2VycyAoKTtcbiAgICAgICAgbGV0IG1hcmtldHMgPSByZXNwb25zZVsndGlja2VycyddO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgbWFya2V0cy5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IG1hcmtldHNbcF07XG4gICAgICAgICAgICBsZXQgaWQgPSBtYXJrZXRbJ2N1cnJlbmN5UGFpciddO1xuICAgICAgICAgICAgbGV0IGJhc2UgPSBpZC5zbGljZSAoMCwgMyk7XG4gICAgICAgICAgICBsZXQgcXVvdGUgPSBpZC5zbGljZSAoMywgNik7XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gYmFzZSArICcvJyArIHF1b3RlO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2ggKHtcbiAgICAgICAgICAgICAgICAnaWQnOiBpZCxcbiAgICAgICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgICAgICdiYXNlJzogYmFzZSxcbiAgICAgICAgICAgICAgICAncXVvdGUnOiBxdW90ZSxcbiAgICAgICAgICAgICAgICAnaW5mbyc6IG1hcmtldCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZUdldEJhbGFuY2VCYWxhbmNlcyAoKTtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gcmVzcG9uc2VbJ2JhbGFuY2VzJ107XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogYmFsYW5jZXMgfTtcbiAgICAgICAgZm9yIChsZXQgYiA9IDA7IGIgPCBiYWxhbmNlcy5sZW5ndGg7IGIrKykge1xuICAgICAgICAgICAgbGV0IGJhbGFuY2UgPSBiYWxhbmNlc1tiXTtcbiAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IGJhbGFuY2VbJ2N1cnJlbmN5J107XG4gICAgICAgICAgICBsZXQgYWNjb3VudCA9IHtcbiAgICAgICAgICAgICAgICAnZnJlZSc6IGJhbGFuY2VbJ2F2YWlsYWJsZUJhbGFuY2UnXSxcbiAgICAgICAgICAgICAgICAndXNlZCc6IHRoaXMuc3VtIChcbiAgICAgICAgICAgICAgICAgICAgYmFsYW5jZVsncGVuZGluZ0luY29taW5nJ10sXG4gICAgICAgICAgICAgICAgICAgIGJhbGFuY2VbJ3BlbmRpbmdPdXRnb2luZyddLFxuICAgICAgICAgICAgICAgICAgICBiYWxhbmNlWydvcGVuT3JkZXInXSksXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogYmFsYW5jZVsnYmFsYW5jZSddLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlc3VsdFtjdXJyZW5jeV0gPSBhY2NvdW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFB1YmxpY01hcmtldERlcHRoQ3VycmVuY3lQYWlyICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ0N1cnJlbmN5UGFpcic6IHBbJ2lkJ10sXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IFtdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaWRlcyA9IFsgJ2JpZHMnLCAnYXNrcycgXTtcbiAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBzaWRlcy5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1tzXTtcbiAgICAgICAgICAgIGxldCBvcmRlcnMgPSBvcmRlcmJvb2tbc2lkZV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBvcmRlciA9IG9yZGVyc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgcHJpY2UgPSBwYXJzZUZsb2F0IChvcmRlclsncHJpY2UnXSk7XG4gICAgICAgICAgICAgICAgbGV0IGFtb3VudCA9IHBhcnNlRmxvYXQgKG9yZGVyWyd2b2x1bWUnXSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3NpZGVdLnB1c2ggKFsgcHJpY2UsIGFtb3VudCBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBwYXJzZVRpY2tlciAodGlja2VyLCBtYXJrZXQpIHtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHBhcnNlSW50ICh0aWNrZXJbJ2NyZWF0ZURhdGVUaW1lJ10pICogMTAwMDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2JpZCddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2FzayddKSxcbiAgICAgICAgICAgICd2d2FwJzogcGFyc2VGbG9hdCAodGlja2VyWyd2d2FwJ10pLFxuICAgICAgICAgICAgJ29wZW4nOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ29wZW4nXSksXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdCddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbHVtZSddKSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlcnMgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFB1YmxpY0xpdmVUaWNrZXJzICgpO1xuICAgICAgICBsZXQgdGlja2VycyA9IHJlc3BvbnNlWyd0aWNrZXJzJ107XG4gICAgICAgIGxldCByZXN1bHQgPSB7fTtcbiAgICAgICAgZm9yIChsZXQgdCA9IDA7IHQgPCB0aWNrZXJzLmxlbmd0aDsgdCsrKSB7XG4gICAgICAgICAgICBsZXQgdGlja2VyID0gdGlja2Vyc1t0XTtcbiAgICAgICAgICAgIGxldCBpZCA9IHRpY2tlclsnY3VycmVuY3lQYWlyJ107XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gdGhpcy5tYXJrZXRzX2J5X2lkW2lkXTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBtYXJrZXRbJ3N5bWJvbCddO1xuICAgICAgICAgICAgcmVzdWx0W3N5bWJvbF0gPSB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIG1hcmtldCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFB1YmxpY0xpdmVUaWNrZXJDdXJyZW5jeVBhaXIgKHtcbiAgICAgICAgICAgICdDdXJyZW5jeVBhaXInOiBwWydpZCddLFxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IHRpY2tlciA9IHJlc3BvbnNlWyd0aWNrZXInXTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VUaWNrZXIgKHRpY2tlciwgcCk7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldFB1YmxpY1RyYW5zYWN0aW9uc0N1cnJlbmN5UGFpciAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdDdXJyZW5jeVBhaXInOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG9yZGVyID0ge1xuICAgICAgICAgICAgJ0NvZGUnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICAgICAgJ1dheSc6IChzaWRlID09ICdidXknKSA/ICdCaWQnIDogJ0FzaycsXG4gICAgICAgICAgICAnQW1vdW50JzogYW1vdW50LFxuICAgICAgICB9O1xuICAgICAgICBpZiAodHlwZSA9PSAnbGltaXQnKVxuICAgICAgICAgICAgb3JkZXJbJ1ByaWNlJ10gPSBwcmljZTtcbiAgICAgICAgaWYgKHRoaXMudHdvZmEpIHtcbiAgICAgICAgICAgIGlmICgnVmFsaWRhdGlvbkNvZGUnIGluIHBhcmFtcylcbiAgICAgICAgICAgICAgICBvcmRlclsnVmFsaWRhdGlvbkNvZGUnXSA9IHBhcmFtc1snVmFsaWRhdGlvbkNvZGUnXTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXV0aGVudGljYXRpb25FcnJvciAodGhpcy5pZCArICcgdHdvLWZhY3RvciBhdXRoZW50aWNhdGlvbiByZXF1aXJlcyBhIG1pc3NpbmcgVmFsaWRhdGlvbkNvZGUgcGFyYW1ldGVyJyk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdFRyYWRlT3JkZXJzICh0aGlzLmV4dGVuZCAob3JkZXIsIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXNwb25zZSxcbiAgICAgICAgICAgICdpZCc6IHJlc3BvbnNlWydjbE9yZGVySWQnXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVEZWxldGVUcmFkZU9yZGVyc09yZGVySUQgKHsgJ09yZGVySUQnOiBpZCB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArICcvJyArIHRoaXMuaW1wbG9kZVBhcmFtcyAocGF0aCwgcGFyYW1zKTtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5vbWl0IChwYXJhbXMsIHRoaXMuZXh0cmFjdFBhcmFtcyAocGF0aCkpO1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHF1ZXJ5KS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChxdWVyeSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpO1xuICAgICAgICAgICAgbGV0IGNvbnRlbnRUeXBlID0gKG1ldGhvZCA9PSAnR0VUJykgPyAnJyA6ICdhcHBsaWNhdGlvbi9qc29uJztcbiAgICAgICAgICAgIGxldCBhdXRoID0gbWV0aG9kICsgdXJsICsgY29udGVudFR5cGUgKyBub25jZS50b1N0cmluZyAoKTtcbiAgICAgICAgICAgIGF1dGggPSBhdXRoLnRvTG93ZXJDYXNlICgpO1xuICAgICAgICAgICAgbGV0IHNpZ25hdHVyZSA9IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKGF1dGgpLCB0aGlzLmVuY29kZSAodGhpcy5zZWNyZXQpLCAnc2hhMjU2JywgJ2Jhc2U2NCcpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQVBJX1BVQkxJQ19LRVknOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgICAgICAnQVBJX1JFUVVFU1RfU0lHTkFUVVJFJzogc2lnbmF0dXJlLFxuICAgICAgICAgICAgICAgICdBUElfUkVRVUVTVF9EQVRFJzogbm9uY2UsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKG1ldGhvZCAhPSAnR0VUJykge1xuICAgICAgICAgICAgICAgIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gY29udGVudFR5cGU7XG4gICAgICAgICAgICAgICAgYm9keSA9IHRoaXMuanNvbiAodGhpcy5leHRlbmQgKHsgJ25vbmNlJzogbm9uY2UgfSwgcGFyYW1zKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgICAgICBpZiAoJ3Jlc3BvbnNlU3RhdHVzJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIGlmICgnbWVzc2FnZScgaW4gcmVzcG9uc2VbJ3Jlc3BvbnNlU3RhdHVzJ10pXG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlWydyZXNwb25zZVN0YXR1cyddWydtZXNzYWdlJ10gPT0gJ09LJylcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgJyArIHRoaXMuanNvbiAocmVzcG9uc2UpKTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBnZGF4ID0ge1xuICAgICdpZCc6ICdnZGF4JyxcbiAgICAnbmFtZSc6ICdHREFYJyxcbiAgICAnY291bnRyaWVzJzogJ1VTJyxcbiAgICAncmF0ZUxpbWl0JzogMTAwMCxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ3Rlc3QnOiAnaHR0cHM6Ly9hcGktcHVibGljLnNhbmRib3guZ2RheC5jb20nLFxuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2NTI3LWIxYmU0MWM2LTVlZGItMTFlNy05NWY2LTViNDk2YzQ2OWUyYy5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vYXBpLmdkYXguY29tJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy5nZGF4LmNvbScsXG4gICAgICAgICdkb2MnOiAnaHR0cHM6Ly9kb2NzLmdkYXguY29tJyxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdjdXJyZW5jaWVzJyxcbiAgICAgICAgICAgICAgICAncHJvZHVjdHMnLFxuICAgICAgICAgICAgICAgICdwcm9kdWN0cy97aWR9L2Jvb2snLFxuICAgICAgICAgICAgICAgICdwcm9kdWN0cy97aWR9L2NhbmRsZXMnLFxuICAgICAgICAgICAgICAgICdwcm9kdWN0cy97aWR9L3N0YXRzJyxcbiAgICAgICAgICAgICAgICAncHJvZHVjdHMve2lkfS90aWNrZXInLFxuICAgICAgICAgICAgICAgICdwcm9kdWN0cy97aWR9L3RyYWRlcycsXG4gICAgICAgICAgICAgICAgJ3RpbWUnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdhY2NvdW50cycsXG4gICAgICAgICAgICAgICAgJ2FjY291bnRzL3tpZH0nLFxuICAgICAgICAgICAgICAgICdhY2NvdW50cy97aWR9L2hvbGRzJyxcbiAgICAgICAgICAgICAgICAnYWNjb3VudHMve2lkfS9sZWRnZXInLFxuICAgICAgICAgICAgICAgICdjb2luYmFzZS1hY2NvdW50cycsXG4gICAgICAgICAgICAgICAgJ2ZpbGxzJyxcbiAgICAgICAgICAgICAgICAnZnVuZGluZycsXG4gICAgICAgICAgICAgICAgJ29yZGVycycsXG4gICAgICAgICAgICAgICAgJ29yZGVycy97aWR9JyxcbiAgICAgICAgICAgICAgICAncGF5bWVudC1tZXRob2RzJyxcbiAgICAgICAgICAgICAgICAncG9zaXRpb24nLFxuICAgICAgICAgICAgICAgICdyZXBvcnRzL3tpZH0nLFxuICAgICAgICAgICAgICAgICd1c2Vycy9zZWxmL3RyYWlsaW5nLXZvbHVtZScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2RlcG9zaXRzL2NvaW5iYXNlLWFjY291bnQnLFxuICAgICAgICAgICAgICAgICdkZXBvc2l0cy9wYXltZW50LW1ldGhvZCcsXG4gICAgICAgICAgICAgICAgJ2Z1bmRpbmcvcmVwYXknLFxuICAgICAgICAgICAgICAgICdvcmRlcnMnLFxuICAgICAgICAgICAgICAgICdwb3NpdGlvbi9jbG9zZScsXG4gICAgICAgICAgICAgICAgJ3Byb2ZpbGVzL21hcmdpbi10cmFuc2ZlcicsXG4gICAgICAgICAgICAgICAgJ3JlcG9ydHMnLFxuICAgICAgICAgICAgICAgICd3aXRoZHJhd2Fscy9jb2luYmFzZScsXG4gICAgICAgICAgICAgICAgJ3dpdGhkcmF3YWxzL2NyeXB0bycsXG4gICAgICAgICAgICAgICAgJ3dpdGhkcmF3YWxzL3BheW1lbnQtbWV0aG9kJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAnZGVsZXRlJzogW1xuICAgICAgICAgICAgICAgICdvcmRlcnMnLFxuICAgICAgICAgICAgICAgICdvcmRlcnMve2lkfScsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE1hcmtldHMgKCkge1xuICAgICAgICBsZXQgbWFya2V0cyA9IGF3YWl0IHRoaXMucHVibGljR2V0UHJvZHVjdHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgcCA9IDA7IHAgPCBtYXJrZXRzLmxlbmd0aDsgcCsrKSB7XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gbWFya2V0c1twXTtcbiAgICAgICAgICAgIGxldCBpZCA9IG1hcmtldFsnaWQnXTtcbiAgICAgICAgICAgIGxldCBiYXNlID0gbWFya2V0WydiYXNlX2N1cnJlbmN5J107XG4gICAgICAgICAgICBsZXQgcXVvdGUgPSBtYXJrZXRbJ3F1b3RlX2N1cnJlbmN5J107XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gYmFzZSArICcvJyArIHF1b3RlO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2ggKHtcbiAgICAgICAgICAgICAgICAnaWQnOiBpZCxcbiAgICAgICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgICAgICdiYXNlJzogYmFzZSxcbiAgICAgICAgICAgICAgICAncXVvdGUnOiBxdW90ZSxcbiAgICAgICAgICAgICAgICAnaW5mbyc6IG1hcmtldCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBiYWxhbmNlcyA9IGF3YWl0IHRoaXMucHJpdmF0ZUdldEFjY291bnRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGJhbGFuY2VzIH07XG4gICAgICAgIGZvciAobGV0IGIgPSAwOyBiIDwgYmFsYW5jZXMubGVuZ3RoOyBiKyspIHtcbiAgICAgICAgICAgIGxldCBiYWxhbmNlID0gYmFsYW5jZXNbYl07XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBiYWxhbmNlWydjdXJyZW5jeSddO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiBwYXJzZUZsb2F0IChiYWxhbmNlWydhdmFpbGFibGUnXSksXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiBwYXJzZUZsb2F0IChiYWxhbmNlWydob2xkJ10pLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHBhcnNlRmxvYXQgKGJhbGFuY2VbJ2JhbGFuY2UnXSksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IGF3YWl0IHRoaXMucHVibGljR2V0UHJvZHVjdHNJZEJvb2sgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnaWQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICAgICAgJ2xldmVsJzogMiwgLy8gMSBiZXN0IGJpZGFzaywgMiBhZ2dyZWdhdGVkLCAzIGZ1bGxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdiaWRzJzogW10sXG4gICAgICAgICAgICAnYXNrcyc6IFtdLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHNpZGVzID0gWyAnYmlkcycsICdhc2tzJyBdO1xuICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IHNpZGVzLmxlbmd0aDsgcysrKSB7XG4gICAgICAgICAgICBsZXQgc2lkZSA9IHNpZGVzW3NdO1xuICAgICAgICAgICAgbGV0IG9yZGVycyA9IG9yZGVyYm9va1tzaWRlXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9yZGVyID0gb3JkZXJzW2ldO1xuICAgICAgICAgICAgICAgIGxldCBwcmljZSA9IHBhcnNlRmxvYXQgKG9yZGVyWzBdKTtcbiAgICAgICAgICAgICAgICBsZXQgYW1vdW50ID0gcGFyc2VGbG9hdCAob3JkZXJbMV0pO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtzaWRlXS5wdXNoIChbIHByaWNlLCBhbW91bnQgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgdGlja2VyID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRQcm9kdWN0c0lkVGlja2VyICh7XG4gICAgICAgICAgICAnaWQnOiBwWydpZCddLFxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IHF1b3RlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRQcm9kdWN0c0lkU3RhdHMgKHtcbiAgICAgICAgICAgICdpZCc6IHBbJ2lkJ10sXG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5wYXJzZTg2MDEgKHRpY2tlclsndGltZSddKTtcbiAgICAgICAgbGV0IGJpZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IGFzayA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKCdiaWQnIGluIHRpY2tlcilcbiAgICAgICAgICAgIGJpZCA9IHBhcnNlRmxvYXQgKHRpY2tlclsnYmlkJ10pO1xuICAgICAgICBpZiAoJ2FzaycgaW4gdGlja2VyKVxuICAgICAgICAgICAgYXNrID0gcGFyc2VGbG9hdCAodGlja2VyWydhc2snXSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiBwYXJzZUZsb2F0IChxdW90ZVsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0IChxdW90ZVsnbG93J10pLFxuICAgICAgICAgICAgJ2JpZCc6IGJpZCxcbiAgICAgICAgICAgICdhc2snOiBhc2ssXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogcGFyc2VGbG9hdCAocXVvdGVbJ29wZW4nXSksXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHF1b3RlWydsYXN0J10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndm9sdW1lJ10pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIHBhcnNlVHJhZGUgKHRyYWRlLCBtYXJrZXQpIHtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMucGFyc2U4NjAxIChbJ3RpbWUnXSk7XG4gICAgICAgIGxldCB0eXBlID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2lkJzogdHJhZGVbJ3RyYWRlX2lkJ10udG9TdHJpbmcgKCksXG4gICAgICAgICAgICAnaW5mbyc6IHRyYWRlLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdzeW1ib2wnOiBtYXJrZXRbJ3N5bWJvbCddLFxuICAgICAgICAgICAgJ3R5cGUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnc2lkZSc6IHRyYWRlWydzaWRlJ10sXG4gICAgICAgICAgICAncHJpY2UnOiBwYXJzZUZsb2F0ICh0cmFkZVsncHJpY2UnXSksXG4gICAgICAgICAgICAnYW1vdW50JzogcGFyc2VGbG9hdCAodHJhZGVbJ3NpemUnXSksXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldFByb2R1Y3RzSWRUcmFkZXMgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnaWQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLCAvLyBmaXhlcyBpc3N1ZSAjMlxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgcGFyc2VPSExDViAob2hsY3YsIG1hcmtldCA9IHVuZGVmaW5lZCwgdGltZWZyYW1lID0gNjAsIHNpbmNlID0gdW5kZWZpbmVkLCBsaW1pdCA9IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgb2hsY3ZbMF0gKiAxMDAwLFxuICAgICAgICAgICAgb2hsY3ZbM10sXG4gICAgICAgICAgICBvaGxjdlsyXSxcbiAgICAgICAgICAgIG9obGN2WzFdLFxuICAgICAgICAgICAgb2hsY3ZbNF0sXG4gICAgICAgICAgICBvaGxjdls1XSxcbiAgICAgICAgXTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPSExDViAobWFya2V0LCB0aW1lZnJhbWUgPSA2MCwgc2luY2UgPSB1bmRlZmluZWQsIGxpbWl0ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCBtID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0UHJvZHVjdHNJZENhbmRsZXMgKHtcbiAgICAgICAgICAgICdpZCc6IG1bJ2lkJ10sXG4gICAgICAgICAgICAnZ3JhbnVsYXJpdHknOiB0aW1lZnJhbWUsXG4gICAgICAgICAgICAnc3RhcnQnOiBzaW5jZSxcbiAgICAgICAgICAgICdlbmQnOiBsaW1pdCxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlT0hMQ1ZzIChtLCByZXNwb25zZSwgdGltZWZyYW1lLCBzaW5jZSwgbGltaXQpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgb2lkID0gdGhpcy5ub25jZSAoKS50b1N0cmluZyAoKTtcbiAgICAgICAgbGV0IG9yZGVyID0ge1xuICAgICAgICAgICAgJ3Byb2R1Y3RfaWQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICAgICAgJ3NpZGUnOiBzaWRlLFxuICAgICAgICAgICAgJ3NpemUnOiBhbW91bnQsXG4gICAgICAgICAgICAndHlwZSc6IHR5cGUsXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlID09ICdsaW1pdCcpXG4gICAgICAgICAgICBvcmRlclsncHJpY2UnXSA9IHByaWNlO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0T3JkZXJzICh0aGlzLmV4dGVuZCAob3JkZXIsIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXNwb25zZSxcbiAgICAgICAgICAgICdpZCc6IHJlc3BvbnNlWydpZCddLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJpdmF0ZURlbGV0ZU9yZGVyc0lkICh7ICdpZCc6IGlkIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCByZXF1ZXN0ID0gJy8nICsgdGhpcy5pbXBsb2RlUGFyYW1zIChwYXRoLCBwYXJhbXMpO1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArIHJlcXVlc3Q7XG4gICAgICAgIGxldCBxdWVyeSA9IHRoaXMub21pdCAocGFyYW1zLCB0aGlzLmV4dHJhY3RQYXJhbXMgKHBhdGgpKTtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChxdWVyeSkubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmFwaUtleSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXV0aGVudGljYXRpb25FcnJvciAodGhpcy5pZCArICcgcmVxdWlyZXMgYXBpS2V5IHByb3BlcnR5IGZvciBhdXRoZW50aWNhdGlvbiBhbmQgdHJhZGluZycpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLnNlY3JldClcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXV0aGVudGljYXRpb25FcnJvciAodGhpcy5pZCArICcgcmVxdWlyZXMgc2VjcmV0IHByb3BlcnR5IGZvciBhdXRoZW50aWNhdGlvbiBhbmQgdHJhZGluZycpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLnBhc3N3b3JkKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBBdXRoZW50aWNhdGlvbkVycm9yICh0aGlzLmlkICsgJyByZXF1aXJlcyBwYXNzd29yZCBwcm9wZXJ0eSBmb3IgYXV0aGVudGljYXRpb24gYW5kIHRyYWRpbmcnKTtcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCkudG9TdHJpbmcgKCk7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHF1ZXJ5KS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgYm9keSA9IHRoaXMuanNvbiAocXVlcnkpO1xuICAgICAgICAgICAgbGV0IHdoYXQgPSBub25jZSArIG1ldGhvZCArIHJlcXVlc3QgKyAoYm9keSB8fCAnJyk7XG4gICAgICAgICAgICBsZXQgc2VjcmV0ID0gdGhpcy5iYXNlNjRUb0JpbmFyeSAodGhpcy5zZWNyZXQpO1xuICAgICAgICAgICAgbGV0IHNpZ25hdHVyZSA9IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKHdoYXQpLCBzZWNyZXQsICdzaGEyNTYnLCAnYmFzZTY0Jyk7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdDQi1BQ0NFU1MtS0VZJzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ0NCLUFDQ0VTUy1TSUdOJzogdGhpcy5kZWNvZGUgKHNpZ25hdHVyZSksXG4gICAgICAgICAgICAgICAgJ0NCLUFDQ0VTUy1USU1FU1RBTVAnOiBub25jZSxcbiAgICAgICAgICAgICAgICAnQ0ItQUNDRVNTLVBBU1NQSFJBU0UnOiB0aGlzLnBhc3N3b3JkLFxuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdtZXNzYWdlJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgZ2VtaW5pID0ge1xuICAgICdpZCc6ICdnZW1pbmknLFxuICAgICduYW1lJzogJ0dlbWluaScsXG4gICAgJ2NvdW50cmllcyc6ICdVUycsXG4gICAgJ3JhdGVMaW1pdCc6IDE1MDAsIC8vIDIwMCBmb3IgcHJpdmF0ZSBBUElcbiAgICAndmVyc2lvbic6ICd2MScsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc4MTY4NTctY2U3YmU2NDQtNjA5Ni0xMWU3LTgyZDYtM2MyNTcyNjMyMjljLmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly9hcGkuZ2VtaW5pLmNvbScsXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly9nZW1pbmkuY29tJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL2RvY3MuZ2VtaW5pLmNvbS9yZXN0LWFwaScsXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnc3ltYm9scycsXG4gICAgICAgICAgICAgICAgJ3B1YnRpY2tlci97c3ltYm9sfScsXG4gICAgICAgICAgICAgICAgJ2Jvb2sve3N5bWJvbH0nLFxuICAgICAgICAgICAgICAgICd0cmFkZXMve3N5bWJvbH0nLFxuICAgICAgICAgICAgICAgICdhdWN0aW9uL3tzeW1ib2x9JyxcbiAgICAgICAgICAgICAgICAnYXVjdGlvbi97c3ltYm9sfS9oaXN0b3J5JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ29yZGVyL25ldycsXG4gICAgICAgICAgICAgICAgJ29yZGVyL2NhbmNlbCcsXG4gICAgICAgICAgICAgICAgJ29yZGVyL2NhbmNlbC9zZXNzaW9uJyxcbiAgICAgICAgICAgICAgICAnb3JkZXIvY2FuY2VsL2FsbCcsXG4gICAgICAgICAgICAgICAgJ29yZGVyL3N0YXR1cycsXG4gICAgICAgICAgICAgICAgJ29yZGVycycsXG4gICAgICAgICAgICAgICAgJ215dHJhZGVzJyxcbiAgICAgICAgICAgICAgICAndHJhZGV2b2x1bWUnLFxuICAgICAgICAgICAgICAgICdiYWxhbmNlcycsXG4gICAgICAgICAgICAgICAgJ2RlcG9zaXQve2N1cnJlbmN5fS9uZXdBZGRyZXNzJyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXcve2N1cnJlbmN5fScsXG4gICAgICAgICAgICAgICAgJ2hlYXJ0YmVhdCcsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE1hcmtldHMgKCkge1xuICAgICAgICBsZXQgbWFya2V0cyA9IGF3YWl0IHRoaXMucHVibGljR2V0U3ltYm9scyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGxldCBwID0gMDsgcCA8IG1hcmtldHMubGVuZ3RoOyBwKyspIHtcbiAgICAgICAgICAgIGxldCBpZCA9IG1hcmtldHNbcF07XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gaWQ7XG4gICAgICAgICAgICBsZXQgdXBwZXJjYXNlID0gbWFya2V0LnRvVXBwZXJDYXNlICgpO1xuICAgICAgICAgICAgbGV0IGJhc2UgPSB1cHBlcmNhc2Uuc2xpY2UgKDAsIDMpO1xuICAgICAgICAgICAgbGV0IHF1b3RlID0gdXBwZXJjYXNlLnNsaWNlICgzLCA2KTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBiYXNlICsgJy8nICsgcXVvdGU7XG4gICAgICAgICAgICByZXN1bHQucHVzaCAoe1xuICAgICAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICAgICAgICAgICdzeW1ib2wnOiBzeW1ib2wsXG4gICAgICAgICAgICAgICAgJ2Jhc2UnOiBiYXNlLFxuICAgICAgICAgICAgICAgICdxdW90ZSc6IHF1b3RlLFxuICAgICAgICAgICAgICAgICdpbmZvJzogbWFya2V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IGF3YWl0IHRoaXMucHVibGljR2V0Qm9va1N5bWJvbCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAob3JkZXJbJ3ByaWNlJ10pO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBwYXJzZUZsb2F0IChvcmRlclsnYW1vdW50J10pO1xuICAgICAgICAgICAgICAgIGxldCB0aW1lc3RhbXAgPSBwYXJzZUludCAob3JkZXJbJ3RpbWVzdGFtcCddKSAqIDEwMDA7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3NpZGVdLnB1c2ggKFsgcHJpY2UsIGFtb3VudCwgdGltZXN0YW1wIF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHRpY2tlciA9IGF3YWl0IHRoaXMucHVibGljR2V0UHVidGlja2VyU3ltYm9sICh7XG4gICAgICAgICAgICAnc3ltYm9sJzogcFsnaWQnXSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aWNrZXJbJ3ZvbHVtZSddWyd0aW1lc3RhbXAnXTtcbiAgICAgICAgbGV0IGJhc2VWb2x1bWUgPSBwWydiYXNlJ107XG4gICAgICAgIGxldCBxdW90ZVZvbHVtZSA9IHBbJ3F1b3RlJ107XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbG93JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYmlkJ10pLFxuICAgICAgICAgICAgJ2Fzayc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYXNrJ10pLFxuICAgICAgICAgICAgJ3Z3YXAnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnb3Blbic6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjbG9zZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdmaXJzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsYXN0JzogcGFyc2VGbG9hdCAodGlja2VyWydsYXN0J10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndm9sdW1lJ11bYmFzZVZvbHVtZV0pLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWyd2b2x1bWUnXVtxdW90ZVZvbHVtZV0pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldFRyYWRlc1N5bWJvbCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdEJhbGFuY2VzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGJhbGFuY2VzIH07XG4gICAgICAgIGZvciAobGV0IGIgPSAwOyBiIDwgYmFsYW5jZXMubGVuZ3RoOyBiKyspIHtcbiAgICAgICAgICAgIGxldCBiYWxhbmNlID0gYmFsYW5jZXNbYl07XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBiYWxhbmNlWydjdXJyZW5jeSddO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiBwYXJzZUZsb2F0IChiYWxhbmNlWydhdmFpbGFibGUnXSksXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogcGFyc2VGbG9hdCAoYmFsYW5jZVsnYW1vdW50J10pLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGFjY291bnRbJ3VzZWQnXSA9IGFjY291bnRbJ3RvdGFsJ10gLSBhY2NvdW50WydmcmVlJ107XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBpZiAodHlwZSA9PSAnbWFya2V0JylcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyBhbGxvd3MgbGltaXQgb3JkZXJzIG9ubHknKTtcbiAgICAgICAgbGV0IG9yZGVyID0ge1xuICAgICAgICAgICAgJ2NsaWVudF9vcmRlcl9pZCc6IHRoaXMubm9uY2UgKCksXG4gICAgICAgICAgICAnc3ltYm9sJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICdhbW91bnQnOiBhbW91bnQudG9TdHJpbmcgKCksXG4gICAgICAgICAgICAncHJpY2UnOiBwcmljZS50b1N0cmluZyAoKSxcbiAgICAgICAgICAgICdzaWRlJzogc2lkZSxcbiAgICAgICAgICAgICd0eXBlJzogJ2V4Y2hhbmdlIGxpbWl0JywgLy8gZ2VtaW5pIGFsbG93cyBsaW1pdCBvcmRlcnMgb25seVxuICAgICAgICB9O1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0T3JkZXJOZXcgKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ2lkJzogcmVzcG9uc2VbJ29yZGVyX2lkJ10sXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdENhbmNlbE9yZGVyICh7ICdvcmRlcl9pZCc6IGlkIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSAnLycgKyB0aGlzLnZlcnNpb24gKyAnLycgKyB0aGlzLmltcGxvZGVQYXJhbXMgKHBhdGgsIHBhcmFtcyk7XG4gICAgICAgIGxldCBxdWVyeSA9IHRoaXMub21pdCAocGFyYW1zLCB0aGlzLmV4dHJhY3RQYXJhbXMgKHBhdGgpKTtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChxdWVyeSkubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG5vbmNlID0gdGhpcy5ub25jZSAoKTtcbiAgICAgICAgICAgIGxldCByZXF1ZXN0ID0gdGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICAgICAncmVxdWVzdCc6IHVybCxcbiAgICAgICAgICAgICAgICAnbm9uY2UnOiBub25jZSxcbiAgICAgICAgICAgIH0sIHF1ZXJ5KTtcbiAgICAgICAgICAgIGxldCBwYXlsb2FkID0gdGhpcy5qc29uIChyZXF1ZXN0KTtcbiAgICAgICAgICAgIHBheWxvYWQgPSB0aGlzLnN0cmluZ1RvQmFzZTY0ICh0aGlzLmVuY29kZSAocGF5bG9hZCkpO1xuICAgICAgICAgICAgbGV0IHNpZ25hdHVyZSA9IHRoaXMuaG1hYyAocGF5bG9hZCwgdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSwgJ3NoYTM4NCcpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ3RleHQvcGxhaW4nLFxuICAgICAgICAgICAgICAgICdDb250ZW50LUxlbmd0aCc6IDAsXG4gICAgICAgICAgICAgICAgJ1gtR0VNSU5JLUFQSUtFWSc6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgICAgICdYLUdFTUlOSS1QQVlMT0FEJzogcGF5bG9hZCxcbiAgICAgICAgICAgICAgICAnWC1HRU1JTkktU0lHTkFUVVJFJzogc2lnbmF0dXJlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgdXJsO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgICAgIGlmICgncmVzdWx0JyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIGlmIChyZXNwb25zZVsncmVzdWx0J10gPT0gJ2Vycm9yJylcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgJyArIHRoaXMuanNvbiAocmVzcG9uc2UpKTtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGhpdGJ0YyA9IHtcblxuICAgICdpZCc6ICdoaXRidGMnLFxuICAgICduYW1lJzogJ0hpdEJUQycsXG4gICAgJ2NvdW50cmllcyc6ICdISycsIC8vIEhvbmcgS29uZ1xuICAgICdyYXRlTGltaXQnOiAxNTAwLFxuICAgICd2ZXJzaW9uJzogJzEnLFxuICAgICdoYXNGZXRjaFRpY2tlcnMnOiB0cnVlLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2NTU1LThlYWVjMjBlLTVlZGMtMTFlNy05YzViLTZkYzY5ZmM0MmY1ZS5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHA6Ly9hcGkuaGl0YnRjLmNvbScsXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly9oaXRidGMuY29tJyxcbiAgICAgICAgJ2RvYyc6IFtcbiAgICAgICAgICAgICdodHRwczovL2hpdGJ0Yy5jb20vYXBpJyxcbiAgICAgICAgICAgICdodHRwOi8vaGl0YnRjLWNvbS5naXRodWIuaW8vaGl0YnRjLWFwaScsXG4gICAgICAgICAgICAnaHR0cDovL2pzZmlkZGxlLm5ldC9ibWtuaWdodC9ScWJZQicsXG4gICAgICAgIF0sXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAne3N5bWJvbH0vb3JkZXJib29rJyxcbiAgICAgICAgICAgICAgICAne3N5bWJvbH0vdGlja2VyJyxcbiAgICAgICAgICAgICAgICAne3N5bWJvbH0vdHJhZGVzJyxcbiAgICAgICAgICAgICAgICAne3N5bWJvbH0vdHJhZGVzL3JlY2VudCcsXG4gICAgICAgICAgICAgICAgJ3N5bWJvbHMnLFxuICAgICAgICAgICAgICAgICd0aWNrZXInLFxuICAgICAgICAgICAgICAgICd0aW1lLCdcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICd0cmFkaW5nJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnYmFsYW5jZScsXG4gICAgICAgICAgICAgICAgJ29yZGVycy9hY3RpdmUnLFxuICAgICAgICAgICAgICAgICdvcmRlcnMvcmVjZW50JyxcbiAgICAgICAgICAgICAgICAnb3JkZXInLFxuICAgICAgICAgICAgICAgICd0cmFkZXMvYnkvb3JkZXInLFxuICAgICAgICAgICAgICAgICd0cmFkZXMnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICdwb3N0JzogW1xuICAgICAgICAgICAgICAgICduZXdfb3JkZXInLFxuICAgICAgICAgICAgICAgICdjYW5jZWxfb3JkZXInLFxuICAgICAgICAgICAgICAgICdjYW5jZWxfb3JkZXJzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwYXltZW50Jzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnYmFsYW5jZScsXG4gICAgICAgICAgICAgICAgJ2FkZHJlc3Mve2N1cnJlbmN5fScsXG4gICAgICAgICAgICAgICAgJ3RyYW5zYWN0aW9ucycsXG4gICAgICAgICAgICAgICAgJ3RyYW5zYWN0aW9ucy97dHJhbnNhY3Rpb259JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAndHJhbnNmZXJfdG9fdHJhZGluZycsXG4gICAgICAgICAgICAgICAgJ3RyYW5zZmVyX3RvX21haW4nLFxuICAgICAgICAgICAgICAgICdhZGRyZXNzL3tjdXJyZW5jeX0nLFxuICAgICAgICAgICAgICAgICdwYXlvdXQnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE1hcmtldHMgKCkge1xuICAgICAgICBsZXQgbWFya2V0cyA9IGF3YWl0IHRoaXMucHVibGljR2V0U3ltYm9scyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGxldCBwID0gMDsgcCA8IG1hcmtldHNbJ3N5bWJvbHMnXS5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IG1hcmtldHNbJ3N5bWJvbHMnXVtwXTtcbiAgICAgICAgICAgIGxldCBpZCA9IG1hcmtldFsnc3ltYm9sJ107XG4gICAgICAgICAgICBsZXQgYmFzZSA9IG1hcmtldFsnY29tbW9kaXR5J107XG4gICAgICAgICAgICBsZXQgcXVvdGUgPSBtYXJrZXRbJ2N1cnJlbmN5J107XG4gICAgICAgICAgICBsZXQgbG90ID0gcGFyc2VGbG9hdCAobWFya2V0Wydsb3QnXSk7XG4gICAgICAgICAgICBsZXQgc3RlcCA9IHBhcnNlRmxvYXQgKG1hcmtldFsnc3RlcCddKTtcbiAgICAgICAgICAgIGJhc2UgPSB0aGlzLmNvbW1vbkN1cnJlbmN5Q29kZSAoYmFzZSk7XG4gICAgICAgICAgICBxdW90ZSA9IHRoaXMuY29tbW9uQ3VycmVuY3lDb2RlIChxdW90ZSk7XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gYmFzZSArICcvJyArIHF1b3RlO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2ggKHtcbiAgICAgICAgICAgICAgICAnaWQnOiBpZCxcbiAgICAgICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgICAgICdiYXNlJzogYmFzZSxcbiAgICAgICAgICAgICAgICAncXVvdGUnOiBxdW90ZSxcbiAgICAgICAgICAgICAgICAnbG90JzogbG90LFxuICAgICAgICAgICAgICAgICdzdGVwJzogc3RlcCxcbiAgICAgICAgICAgICAgICAnaW5mbyc6IG1hcmtldCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMudHJhZGluZ0dldEJhbGFuY2UgKCk7XG4gICAgICAgIGxldCBiYWxhbmNlcyA9IHJlc3BvbnNlWydiYWxhbmNlJ107XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogYmFsYW5jZXMgfTtcbiAgICAgICAgZm9yIChsZXQgYiA9IDA7IGIgPCBiYWxhbmNlcy5sZW5ndGg7IGIrKykge1xuICAgICAgICAgICAgbGV0IGJhbGFuY2UgPSBiYWxhbmNlc1tiXTtcbiAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IGJhbGFuY2VbJ2N1cnJlbmN5X2NvZGUnXTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogcGFyc2VGbG9hdCAoYmFsYW5jZVsnY2FzaCddKSxcbiAgICAgICAgICAgICAgICAndXNlZCc6IHBhcnNlRmxvYXQgKGJhbGFuY2VbJ3Jlc2VydmVkJ10pLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhY2NvdW50Wyd0b3RhbCddID0gdGhpcy5zdW0gKGFjY291bnRbJ2ZyZWUnXSwgYWNjb3VudFsndXNlZCddKTtcbiAgICAgICAgICAgIHJlc3VsdFtjdXJyZW5jeV0gPSBhY2NvdW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFN5bWJvbE9yZGVyYm9vayAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAob3JkZXJbMF0pO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBwYXJzZUZsb2F0IChvcmRlclsxXSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3NpZGVdLnB1c2ggKFsgcHJpY2UsIGFtb3VudCBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBwYXJzZVRpY2tlciAodGlja2VyLCBtYXJrZXQpIHtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRpY2tlclsndGltZXN0YW1wJ107XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2hpZ2gnXSksXG4gICAgICAgICAgICAnbG93JzogcGFyc2VGbG9hdCAodGlja2VyWydsb3cnXSksXG4gICAgICAgICAgICAnYmlkJzogcGFyc2VGbG9hdCAodGlja2VyWydiaWQnXSksXG4gICAgICAgICAgICAnYXNrJzogcGFyc2VGbG9hdCAodGlja2VyWydhc2snXSksXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogcGFyc2VGbG9hdCAodGlja2VyWydvcGVuJ10pLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xhc3QnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWyd2b2x1bWUnXSksXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbHVtZV9xdW90ZSddKSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlcnMgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgdGlja2VycyA9IGF3YWl0IHRoaXMucHVibGljR2V0VGlja2VyICgpO1xuICAgICAgICBsZXQgaWRzID0gT2JqZWN0LmtleXMgKHRpY2tlcnMpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge307XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgaWQgPSBpZHNbaV07XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gdGhpcy5tYXJrZXRzX2J5X2lkW2lkXTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBtYXJrZXRbJ3N5bWJvbCddO1xuICAgICAgICAgICAgbGV0IHRpY2tlciA9IHRpY2tlcnNbaWRdO1xuICAgICAgICAgICAgcmVzdWx0W3N5bWJvbF0gPSB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIG1hcmtldCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgdGlja2VyID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRTeW1ib2xUaWNrZXIgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiBwWydpZCddLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCdtZXNzYWdlJyBpbiB0aWNrZXIpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgJyArIHRpY2tlclsnbWVzc2FnZSddKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VUaWNrZXIgKHRpY2tlciwgcCk7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldFN5bWJvbFRyYWRlcyAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgLy8gY2hlY2sgaWYgYW1vdW50IGNhbiBiZSBldmVubHkgZGl2aWRlZCBpbnRvIGxvdHNcbiAgICAgICAgLy8gdGhleSB3YW50IGludGVnZXIgcXVhbnRpdHkgaW4gbG90IHVuaXRzXG4gICAgICAgIGxldCBxdWFudGl0eSA9IHBhcnNlRmxvYXQgKGFtb3VudCkgLyBwWydsb3QnXTtcbiAgICAgICAgbGV0IHdob2xlTG90cyA9IE1hdGgucm91bmQgKHF1YW50aXR5KTtcbiAgICAgICAgbGV0IGRpZmZlcmVuY2UgPSBxdWFudGl0eSAtIHdob2xlTG90cztcbiAgICAgICAgaWYgKE1hdGguYWJzIChkaWZmZXJlbmNlKSA+IHBbJ3N0ZXAnXSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyBvcmRlciBhbW91bnQgc2hvdWxkIGJlIGV2ZW5seSBkaXZpc2libGUgYnkgbG90IHVuaXQgc2l6ZSBvZiAnICsgcFsnbG90J10udG9TdHJpbmcgKCkpO1xuICAgICAgICBsZXQgY2xpZW50T3JkZXJJZCA9IHRoaXMubm9uY2UgKCk7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdjbGllbnRPcmRlcklkJzogY2xpZW50T3JkZXJJZC50b1N0cmluZyAoKSxcbiAgICAgICAgICAgICdzeW1ib2wnOiBwWydpZCddLFxuICAgICAgICAgICAgJ3NpZGUnOiBzaWRlLFxuICAgICAgICAgICAgJ3F1YW50aXR5Jzogd2hvbGVMb3RzLnRvU3RyaW5nICgpLCAvLyBxdWFudGl0eSBpbiBpbnRlZ2VyIGxvdCB1bml0c1xuICAgICAgICAgICAgJ3R5cGUnOiB0eXBlLFxuICAgICAgICB9O1xuICAgICAgICBpZiAodHlwZSA9PSAnbGltaXQnKVxuICAgICAgICAgICAgb3JkZXJbJ3ByaWNlJ10gPSAnJS4xMGYnLnNwcmludGYgKHByaWNlKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy50cmFkaW5nUG9zdE5ld09yZGVyICh0aGlzLmV4dGVuZCAob3JkZXIsIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXNwb25zZSxcbiAgICAgICAgICAgICdpZCc6IHJlc3BvbnNlWydFeGVjdXRpb25SZXBvcnQnXVsnY2xpZW50T3JkZXJJZCddLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnRyYWRpbmdQb3N0Q2FuY2VsT3JkZXIgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnY2xpZW50T3JkZXJJZCc6IGlkLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gJy8nICsgJ2FwaScgKyAnLycgKyB0aGlzLnZlcnNpb24gKyAnLycgKyBhcGkgKyAnLycgKyB0aGlzLmltcGxvZGVQYXJhbXMgKHBhdGgsIHBhcmFtcyk7XG4gICAgICAgIGxldCBxdWVyeSA9IHRoaXMub21pdCAocGFyYW1zLCB0aGlzLmV4dHJhY3RQYXJhbXMgKHBhdGgpKTtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChxdWVyeSkubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG5vbmNlID0gdGhpcy5ub25jZSAoKTtcbiAgICAgICAgICAgIHF1ZXJ5ID0gdGhpcy5leHRlbmQgKHsgJ25vbmNlJzogbm9uY2UsICdhcGlrZXknOiB0aGlzLmFwaUtleSB9LCBxdWVyeSk7XG4gICAgICAgICAgICBpZiAobWV0aG9kID09ICdQT1NUJylcbiAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHF1ZXJ5KS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgIGJvZHkgPSB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChxdWVyeSk7XG4gICAgICAgICAgICBsZXQgYXV0aCA9IHVybCArIChib2R5IHx8ICcnKTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgICAgICAgICdYLVNpZ25hdHVyZSc6IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKGF1dGgpLCB0aGlzLmVuY29kZSAodGhpcy5zZWNyZXQpLCAnc2hhNTEyJykudG9Mb3dlckNhc2UgKCksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHVybCA9IHRoaXMudXJsc1snYXBpJ10gKyB1cmw7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdjb2RlJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgaHVvYmkgPSB7XG5cbiAgICAnaWQnOiAnaHVvYmknLFxuICAgICduYW1lJzogJ0h1b2JpJyxcbiAgICAnY291bnRyaWVzJzogJ0NOJyxcbiAgICAncmF0ZUxpbWl0JzogMjAwMCxcbiAgICAndmVyc2lvbic6ICd2MycsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc3NjY1NjktMTVhYTdiOWEtNWVkZC0xMWU3LTllN2YtNDQ3OTFmNGVlNDljLmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cDovL2FwaS5odW9iaS5jb20nLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vd3d3Lmh1b2JpLmNvbScsXG4gICAgICAgICdkb2MnOiAnaHR0cHM6Ly9naXRodWIuY29tL2h1b2JpYXBpL0FQSV9Eb2NzX2VuL3dpa2knLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ3N0YXRpY21hcmtldCc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ3tpZH1fa2xpbmVfe3BlcmlvZH0nLFxuICAgICAgICAgICAgICAgICd0aWNrZXJfe2lkfScsXG4gICAgICAgICAgICAgICAgJ2RlcHRoX3tpZH0nLFxuICAgICAgICAgICAgICAgICdkZXB0aF97aWR9X3tsZW5ndGh9JyxcbiAgICAgICAgICAgICAgICAnZGV0YWlsX3tpZH0nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3VzZG1hcmtldCc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ3tpZH1fa2xpbmVfe3BlcmlvZH0nLFxuICAgICAgICAgICAgICAgICd0aWNrZXJfe2lkfScsXG4gICAgICAgICAgICAgICAgJ2RlcHRoX3tpZH0nLFxuICAgICAgICAgICAgICAgICdkZXB0aF97aWR9X3tsZW5ndGh9JyxcbiAgICAgICAgICAgICAgICAnZGV0YWlsX3tpZH0nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3RyYWRlJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2dldF9hY2NvdW50X2luZm8nLFxuICAgICAgICAgICAgICAgICdnZXRfb3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnb3JkZXJfaW5mbycsXG4gICAgICAgICAgICAgICAgJ2J1eScsXG4gICAgICAgICAgICAgICAgJ3NlbGwnLFxuICAgICAgICAgICAgICAgICdidXlfbWFya2V0JyxcbiAgICAgICAgICAgICAgICAnc2VsbF9tYXJrZXQnLFxuICAgICAgICAgICAgICAgICdjYW5jZWxfb3JkZXInLFxuICAgICAgICAgICAgICAgICdnZXRfbmV3X2RlYWxfb3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnZ2V0X29yZGVyX2lkX2J5X3RyYWRlX2lkJyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXdfY29pbicsXG4gICAgICAgICAgICAgICAgJ2NhbmNlbF93aXRoZHJhd19jb2luJyxcbiAgICAgICAgICAgICAgICAnZ2V0X3dpdGhkcmF3X2NvaW5fcmVzdWx0JyxcbiAgICAgICAgICAgICAgICAndHJhbnNmZXInLFxuICAgICAgICAgICAgICAgICdsb2FuJyxcbiAgICAgICAgICAgICAgICAncmVwYXltZW50JyxcbiAgICAgICAgICAgICAgICAnZ2V0X2xvYW5fYXZhaWxhYmxlJyxcbiAgICAgICAgICAgICAgICAnZ2V0X2xvYW5zJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9DTlknOiB7ICdpZCc6ICdidGMnLCAnc3ltYm9sJzogJ0JUQy9DTlknLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnQ05ZJywgJ3R5cGUnOiAnc3RhdGljbWFya2V0JywgJ2NvaW5UeXBlJzogMSB9LFxuICAgICAgICAnTFRDL0NOWSc6IHsgJ2lkJzogJ2x0YycsICdzeW1ib2wnOiAnTFRDL0NOWScsICdiYXNlJzogJ0xUQycsICdxdW90ZSc6ICdDTlknLCAndHlwZSc6ICdzdGF0aWNtYXJrZXQnLCAnY29pblR5cGUnOiAyIH0sXG4gICAgICAgICdCVEMvVVNEJzogeyAnaWQnOiAnYnRjJywgJ3N5bWJvbCc6ICdCVEMvVVNEJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ1VTRCcsICd0eXBlJzogJ3VzZG1hcmtldCcsICAgICdjb2luVHlwZSc6IDEgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gYXdhaXQgdGhpcy50cmFkZVBvc3RHZXRBY2NvdW50SW5mbyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiBiYWxhbmNlcyB9O1xuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IHRoaXMuY3VycmVuY2llcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gdGhpcy5jdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IGxvd2VyY2FzZSA9IGN1cnJlbmN5LnRvTG93ZXJDYXNlICgpO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGxldCBhdmFpbGFibGUgPSAnYXZhaWxhYmxlXycgKyBsb3dlcmNhc2UgKyAnX2Rpc3BsYXknO1xuICAgICAgICAgICAgbGV0IGZyb3plbiA9ICdmcm96ZW5fJyArIGxvd2VyY2FzZSArICdfZGlzcGxheSc7XG4gICAgICAgICAgICBsZXQgbG9hbiA9ICdsb2FuXycgKyBsb3dlcmNhc2UgKyAnX2Rpc3BsYXknO1xuICAgICAgICAgICAgaWYgKGF2YWlsYWJsZSBpbiBiYWxhbmNlcylcbiAgICAgICAgICAgICAgICBhY2NvdW50WydmcmVlJ10gPSBwYXJzZUZsb2F0IChiYWxhbmNlc1thdmFpbGFibGVdKTtcbiAgICAgICAgICAgIGlmIChmcm96ZW4gaW4gYmFsYW5jZXMpXG4gICAgICAgICAgICAgICAgYWNjb3VudFsndXNlZCddID0gcGFyc2VGbG9hdCAoYmFsYW5jZXNbZnJvemVuXSk7XG4gICAgICAgICAgICBpZiAobG9hbiBpbiBiYWxhbmNlcylcbiAgICAgICAgICAgICAgICBhY2NvdW50Wyd1c2VkJ10gPSB0aGlzLnN1bSAoYWNjb3VudFsndXNlZCddLCBwYXJzZUZsb2F0IChiYWxhbmNlc1tsb2FuXSkpO1xuICAgICAgICAgICAgYWNjb3VudFsndG90YWwnXSA9IHRoaXMuc3VtIChhY2NvdW50WydmcmVlJ10sIGFjY291bnRbJ3VzZWQnXSk7XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgbWV0aG9kID0gcFsndHlwZSddICsgJ0dldERlcHRoSWQnO1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgdGhpc1ttZXRob2RdICh0aGlzLmV4dGVuZCAoeyAnaWQnOiBwWydpZCddIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IG9yZGVyYm9va1snYmlkcyddLFxuICAgICAgICAgICAgJ2Fza3MnOiBvcmRlcmJvb2tbJ2Fza3MnXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IG1ldGhvZCA9IHBbJ3R5cGUnXSArICdHZXRUaWNrZXJJZCc7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXNbbWV0aG9kXSAoeyAnaWQnOiBwWydpZCddIH0pO1xuICAgICAgICBsZXQgdGlja2VyID0gcmVzcG9uc2VbJ3RpY2tlciddO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gcGFyc2VJbnQgKHJlc3BvbnNlWyd0aW1lJ10pICogMTAwMDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2J1eSddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3NlbGwnXSksXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogcGFyc2VGbG9hdCAodGlja2VyWydvcGVuJ10pLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xhc3QnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWyd2b2wnXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IG1ldGhvZCA9IHBbJ3R5cGUnXSArICdHZXREZXRhaWxJZCc7XG4gICAgICAgIHJldHVybiB0aGlzW21ldGhvZF0gKHRoaXMuZXh0ZW5kICh7ICdpZCc6IHBbJ2lkJ10gfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCBtZXRob2QgPSAndHJhZGVQb3N0JyArIHRoaXMuY2FwaXRhbGl6ZSAoc2lkZSk7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdjb2luX3R5cGUnOiBwWydjb2luVHlwZSddLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IGFtb3VudCxcbiAgICAgICAgICAgICdtYXJrZXQnOiBwWydxdW90ZSddLnRvTG93ZXJDYXNlICgpLFxuICAgICAgICB9O1xuICAgICAgICBpZiAodHlwZSA9PSAnbGltaXQnKVxuICAgICAgICAgICAgb3JkZXJbJ3ByaWNlJ10gPSBwcmljZTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgbWV0aG9kICs9IHRoaXMuY2FwaXRhbGl6ZSAodHlwZSk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IHRoaXNbbWV0aG9kXSAodGhpcy5leHRlbmQgKG9yZGVyLCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnaWQnXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyYWRlUG9zdENhbmNlbE9yZGVyICh7ICdpZCc6IGlkIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAndHJhZGUnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ107XG4gICAgICAgIGlmIChhcGkgPT0gJ3RyYWRlJykge1xuICAgICAgICAgICAgdXJsICs9ICcvYXBpJyArIHRoaXMudmVyc2lvbjtcbiAgICAgICAgICAgIGxldCBxdWVyeSA9IHRoaXMua2V5c29ydCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICAgICAnbWV0aG9kJzogcGF0aCxcbiAgICAgICAgICAgICAgICAnYWNjZXNzX2tleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgICAgICdjcmVhdGVkJzogdGhpcy5ub25jZSAoKSxcbiAgICAgICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICAgICAgbGV0IHF1ZXJ5U3RyaW5nID0gdGhpcy51cmxlbmNvZGUgKHRoaXMub21pdCAocXVlcnksICdtYXJrZXQnKSk7XG4gICAgICAgICAgICAvLyBzZWNyZXQga2V5IG11c3QgYmUgYXQgdGhlIGVuZCBvZiBxdWVyeSB0byBiZSBzaWduZWRcbiAgICAgICAgICAgIHF1ZXJ5U3RyaW5nICs9ICcmc2VjcmV0X2tleT0nICsgdGhpcy5zZWNyZXQ7XG4gICAgICAgICAgICBxdWVyeVsnc2lnbiddID0gdGhpcy5oYXNoICh0aGlzLmVuY29kZSAocXVlcnlTdHJpbmcpKTtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtTGVuZ3RoJzogYm9keS5sZW5ndGgsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdXJsICs9ICcvJyArIGFwaSArICcvJyArIHRoaXMuaW1wbG9kZVBhcmFtcyAocGF0aCwgcGFyYW1zKSArICdfanNvbi5qcyc7XG4gICAgICAgICAgICBsZXQgcXVlcnkgPSB0aGlzLm9taXQgKHBhcmFtcywgdGhpcy5leHRyYWN0UGFyYW1zIChwYXRoKSk7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHF1ZXJ5KS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChxdWVyeSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgICAgICBpZiAoJ3N0YXR1cycgaW4gcmVzcG9uc2UpXG4gICAgICAgICAgICBpZiAocmVzcG9uc2VbJ3N0YXR1cyddID09ICdlcnJvcicpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgICAgIGlmICgnY29kZScgaW4gcmVzcG9uc2UpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgJyArIHRoaXMuanNvbiAocmVzcG9uc2UpKTtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGl0Yml0ID0ge1xuXG4gICAgJ2lkJzogJ2l0Yml0JyxcbiAgICAnbmFtZSc6ICdpdEJpdCcsXG4gICAgJ2NvdW50cmllcyc6ICdVUycsXG4gICAgJ3JhdGVMaW1pdCc6IDIwMDAsXG4gICAgJ3ZlcnNpb24nOiAndjEnLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3ODIyMTU5LTY2MTUzNjIwLTYwYWQtMTFlNy04OWU3LTAwNWY2ZDdmM2RlMC5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vYXBpLml0Yml0LmNvbScsXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly93d3cuaXRiaXQuY29tJyxcbiAgICAgICAgJ2RvYyc6IFtcbiAgICAgICAgICAgICdodHRwczovL2FwaS5pdGJpdC5jb20vZG9jcycsXG4gICAgICAgICAgICAnaHR0cHM6Ly93d3cuaXRiaXQuY29tL2FwaScsXG4gICAgICAgIF0sXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnbWFya2V0cy97c3ltYm9sfS90aWNrZXInLFxuICAgICAgICAgICAgICAgICdtYXJrZXRzL3tzeW1ib2x9L29yZGVyX2Jvb2snLFxuICAgICAgICAgICAgICAgICdtYXJrZXRzL3tzeW1ib2x9L3RyYWRlcycsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAncHJpdmF0ZSc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ3dhbGxldHMnLFxuICAgICAgICAgICAgICAgICd3YWxsZXRzL3t3YWxsZXRJZH0nLFxuICAgICAgICAgICAgICAgICd3YWxsZXRzL3t3YWxsZXRJZH0vYmFsYW5jZXMve2N1cnJlbmN5Q29kZX0nLFxuICAgICAgICAgICAgICAgICd3YWxsZXRzL3t3YWxsZXRJZH0vZnVuZGluZ19oaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAnd2FsbGV0cy97d2FsbGV0SWR9L3RyYWRlcycsXG4gICAgICAgICAgICAgICAgJ3dhbGxldHMve3dhbGxldElkfS9vcmRlcnMve2lkfScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ3dhbGxldF90cmFuc2ZlcnMnLFxuICAgICAgICAgICAgICAgICd3YWxsZXRzJyxcbiAgICAgICAgICAgICAgICAnd2FsbGV0cy97d2FsbGV0SWR9L2NyeXB0b2N1cnJlbmN5X2RlcG9zaXRzJyxcbiAgICAgICAgICAgICAgICAnd2FsbGV0cy97d2FsbGV0SWR9L2NyeXB0b2N1cnJlbmN5X3dpdGhkcmF3YWxzJyxcbiAgICAgICAgICAgICAgICAnd2FsbGV0cy97d2FsbGV0SWR9L29yZGVycycsXG4gICAgICAgICAgICAgICAgJ3dpcmVfd2l0aGRyYXdhbCcsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ2RlbGV0ZSc6IFtcbiAgICAgICAgICAgICAgICAnd2FsbGV0cy97d2FsbGV0SWR9L29yZGVycy97aWR9JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9VU0QnOiB7ICdpZCc6ICdYQlRVU0QnLCAnc3ltYm9sJzogJ0JUQy9VU0QnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnVVNEJyB9LFxuICAgICAgICAnQlRDL1NHRCc6IHsgJ2lkJzogJ1hCVFNHRCcsICdzeW1ib2wnOiAnQlRDL1NHRCcsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdTR0QnIH0sXG4gICAgICAgICdCVEMvRVVSJzogeyAnaWQnOiAnWEJURVVSJywgJ3N5bWJvbCc6ICdCVEMvRVVSJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ0VVUicgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IGF3YWl0IHRoaXMucHVibGljR2V0TWFya2V0c1N5bWJvbE9yZGVyQm9vayAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAob3JkZXJbMF0pO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBwYXJzZUZsb2F0IChvcmRlclsxXSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3NpZGVdLnB1c2ggKFsgcHJpY2UsIGFtb3VudCBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGxldCB0aWNrZXIgPSBhd2FpdCB0aGlzLnB1YmxpY0dldE1hcmtldHNTeW1ib2xUaWNrZXIgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMucGFyc2U4NjAxICh0aWNrZXJbJ3NlcnZlclRpbWVVVEMnXSk7XG4gICAgICAgIGxldCBiaWQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGxldCBhc2sgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmICgnYmlkJyBpbiB0aWNrZXIpXG4gICAgICAgICAgICBpZiAodGlja2VyWydiaWQnXSlcbiAgICAgICAgICAgICAgICBiaWQgPSBwYXJzZUZsb2F0ICh0aWNrZXJbJ2JpZCddKTtcbiAgICAgICAgaWYgKCdhc2snIGluIHRpY2tlcilcbiAgICAgICAgICAgIGlmICh0aWNrZXJbJ2FzayddKVxuICAgICAgICAgICAgICAgIGFzayA9IHBhcnNlRmxvYXQgKHRpY2tlclsnYXNrJ10pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydoaWdoMjRoJ10pLFxuICAgICAgICAgICAgJ2xvdyc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbG93MjRoJ10pLFxuICAgICAgICAgICAgJ2JpZCc6IGJpZCxcbiAgICAgICAgICAgICdhc2snOiBhc2ssXG4gICAgICAgICAgICAndndhcCc6IHBhcnNlRmxvYXQgKHRpY2tlclsndndhcDI0aCddKSxcbiAgICAgICAgICAgICdvcGVuJzogcGFyc2VGbG9hdCAodGlja2VyWydvcGVuVG9kYXknXSksXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdFByaWNlJ10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndm9sdW1lMjRoJ10pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldE1hcmtldHNTeW1ib2xUcmFkZXMgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnc3ltYm9sJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZUdldEJhbGFuY2VzICgpO1xuICAgICAgICBsZXQgYmFsYW5jZXMgPSByZXNwb25zZVsnYmFsYW5jZXMnXTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiByZXNwb25zZSB9O1xuICAgICAgICBmb3IgKGxldCBiID0gMDsgYiA8IGJhbGFuY2VzLmxlbmd0aDsgYisrKSB7XG4gICAgICAgICAgICBsZXQgYmFsYW5jZSA9IGJhbGFuY2VzW2JdO1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gYmFsYW5jZVsnY3VycmVuY3knXTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogcGFyc2VGbG9hdCAoYmFsYW5jZVsnYXZhaWxhYmxlQmFsYW5jZSddKSxcbiAgICAgICAgICAgICAgICAndXNlZCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAndG90YWwnOiBwYXJzZUZsb2F0IChiYWxhbmNlWyd0b3RhbEJhbGFuY2UnXSksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYWNjb3VudFsndXNlZCddID0gYWNjb3VudFsndG90YWwnXSAtIGFjY291bnRbJ2ZyZWUnXTtcbiAgICAgICAgICAgIHJlc3VsdFtjdXJyZW5jeV0gPSBhY2NvdW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGZldGNoV2FsbGV0cyAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVHZXRXYWxsZXRzICgpO1xuICAgIH0sXG5cbiAgICBub25jZSAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgaWYgKHR5cGUgPT0gJ21hcmtldCcpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgYWxsb3dzIGxpbWl0IG9yZGVycyBvbmx5Jyk7XG4gICAgICAgIGFtb3VudCA9IGFtb3VudC50b1N0cmluZyAoKTtcbiAgICAgICAgcHJpY2UgPSBwcmljZS50b1N0cmluZyAoKTtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IG9yZGVyID0ge1xuICAgICAgICAgICAgJ3NpZGUnOiBzaWRlLFxuICAgICAgICAgICAgJ3R5cGUnOiB0eXBlLFxuICAgICAgICAgICAgJ2N1cnJlbmN5JzogcFsnYmFzZSddLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IGFtb3VudCxcbiAgICAgICAgICAgICdkaXNwbGF5JzogYW1vdW50LFxuICAgICAgICAgICAgJ3ByaWNlJzogcHJpY2UsXG4gICAgICAgICAgICAnaW5zdHJ1bWVudCc6IHBbJ2lkJ10sXG4gICAgICAgIH07XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RUcmFkZUFkZCAodGhpcy5leHRlbmQgKG9yZGVyLCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnaWQnXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlRGVsZXRlV2FsbGV0c1dhbGxldElkT3JkZXJzSWQgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnaWQnOiBpZCxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ10gKyAnLycgKyB0aGlzLnZlcnNpb24gKyAnLycgKyB0aGlzLmltcGxvZGVQYXJhbXMgKHBhdGgsIHBhcmFtcyk7XG4gICAgICAgIGxldCBxdWVyeSA9IHRoaXMub21pdCAocGFyYW1zLCB0aGlzLmV4dHJhY3RQYXJhbXMgKHBhdGgpKTtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChxdWVyeSkubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChxdWVyeSkubGVuZ3RoKVxuICAgICAgICAgICAgICAgIGJvZHkgPSB0aGlzLmpzb24gKHF1ZXJ5KTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBib2R5ID0gJyc7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpLnRvU3RyaW5nICgpO1xuICAgICAgICAgICAgbGV0IHRpbWVzdGFtcCA9IG5vbmNlO1xuICAgICAgICAgICAgbGV0IGF1dGggPSBbIG1ldGhvZCwgdXJsLCBib2R5LCBub25jZSwgdGltZXN0YW1wIF07XG4gICAgICAgICAgICBsZXQgbWVzc2FnZSA9IG5vbmNlICsgdGhpcy5qc29uIChhdXRoKTtcbiAgICAgICAgICAgIGxldCBoYXNoID0gdGhpcy5oYXNoICh0aGlzLmVuY29kZSAobWVzc2FnZSksICdzaGEyNTYnLCAnYmluYXJ5Jyk7XG4gICAgICAgICAgICBsZXQgYmluaGFzaCA9IHRoaXMuYmluYXJ5Q29uY2F0ICh1cmwsIGhhc2gpO1xuICAgICAgICAgICAgbGV0IHNpZ25hdHVyZSA9IHRoaXMuaG1hYyAoYmluaGFzaCwgdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSwgJ3NoYTUxMicsICdiYXNlNjQnKTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0F1dGhvcml6YXRpb24nOiBzZWxmLmFwaUtleSArICc6JyArIHNpZ25hdHVyZSxcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICdYLUF1dGgtVGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgICAgICdYLUF1dGgtTm9uY2UnOiBub25jZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgICAgICBpZiAoJ2NvZGUnIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBqdWJpID0ge1xuXG4gICAgJ2lkJzogJ2p1YmknLFxuICAgICduYW1lJzogJ2p1YmkuY29tJyxcbiAgICAnY291bnRyaWVzJzogJ0NOJyxcbiAgICAncmF0ZUxpbWl0JzogMTUwMCxcbiAgICAndmVyc2lvbic6ICd2MScsXG4gICAgJ2hhc0ZldGNoVGlja2Vycyc6IHRydWUsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc3NjY1ODEtOWQzOTdkOWEtNWVkZC0xMWU3LThmYjktNWQ4MjM2YzBlNjkyLmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly93d3cuanViaS5jb20vYXBpJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy5qdWJpLmNvbScsXG4gICAgICAgICdkb2MnOiAnaHR0cHM6Ly93d3cuanViaS5jb20vaGVscC9hcGkuaHRtbCcsXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnZGVwdGgnLFxuICAgICAgICAgICAgICAgICdvcmRlcnMnLFxuICAgICAgICAgICAgICAgICd0aWNrZXInLFxuICAgICAgICAgICAgICAgICdhbGx0aWNrZXInLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnYmFsYW5jZScsXG4gICAgICAgICAgICAgICAgJ3RyYWRlX2FkZCcsXG4gICAgICAgICAgICAgICAgJ3RyYWRlX2NhbmNlbCcsXG4gICAgICAgICAgICAgICAgJ3RyYWRlX2xpc3QnLFxuICAgICAgICAgICAgICAgICd0cmFkZV92aWV3JyxcbiAgICAgICAgICAgICAgICAnd2FsbGV0JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoTWFya2V0cyAoKSB7XG4gICAgICAgIGxldCBtYXJrZXRzID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRBbGx0aWNrZXIgKCk7XG4gICAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMgKG1hcmtldHMpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwga2V5cy5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgbGV0IGlkID0ga2V5c1twXTtcbiAgICAgICAgICAgIGxldCBiYXNlID0gaWQudG9VcHBlckNhc2UgKCk7XG4gICAgICAgICAgICBsZXQgcXVvdGUgPSAnQ05ZJztcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBiYXNlICsgJy8nICsgcXVvdGU7XG4gICAgICAgICAgICBiYXNlID0gdGhpcy5jb21tb25DdXJyZW5jeUNvZGUgKGJhc2UpO1xuICAgICAgICAgICAgcXVvdGUgPSB0aGlzLmNvbW1vbkN1cnJlbmN5Q29kZSAocXVvdGUpO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2ggKHtcbiAgICAgICAgICAgICAgICAnaWQnOiBpZCxcbiAgICAgICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgICAgICdiYXNlJzogYmFzZSxcbiAgICAgICAgICAgICAgICAncXVvdGUnOiBxdW90ZSxcbiAgICAgICAgICAgICAgICAnaW5mbyc6IGlkLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdEJhbGFuY2UgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogYmFsYW5jZXMgfTtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCB0aGlzLmN1cnJlbmNpZXMubGVuZ3RoOyBjKyspIHtcbiAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IHRoaXMuY3VycmVuY2llc1tjXTtcbiAgICAgICAgICAgIGxldCBsb3dlcmNhc2UgPSBjdXJyZW5jeS50b0xvd2VyQ2FzZSAoKTtcbiAgICAgICAgICAgIGlmIChsb3dlcmNhc2UgPT0gJ2Rhc2gnKVxuICAgICAgICAgICAgICAgIGxvd2VyY2FzZSA9ICdkcmsnO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGxldCBmcmVlID0gbG93ZXJjYXNlICsgJ19iYWxhbmNlJztcbiAgICAgICAgICAgIGxldCB1c2VkID0gbG93ZXJjYXNlICsgJ19sb2NrJztcbiAgICAgICAgICAgIGlmIChmcmVlIGluIGJhbGFuY2VzKVxuICAgICAgICAgICAgICAgIGFjY291bnRbJ2ZyZWUnXSA9IHBhcnNlRmxvYXQgKGJhbGFuY2VzW2ZyZWVdKTtcbiAgICAgICAgICAgIGlmICh1c2VkIGluIGJhbGFuY2VzKVxuICAgICAgICAgICAgICAgIGFjY291bnRbJ3VzZWQnXSA9IHBhcnNlRmxvYXQgKGJhbGFuY2VzW3VzZWRdKTtcbiAgICAgICAgICAgIGFjY291bnRbJ3RvdGFsJ10gPSB0aGlzLnN1bSAoYWNjb3VudFsnZnJlZSddLCBhY2NvdW50Wyd1c2VkJ10pO1xuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IGF3YWl0IHRoaXMucHVibGljR2V0RGVwdGggKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnY29pbic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IG9yZGVyYm9va1snYmlkcyddLFxuICAgICAgICAgICAgJ2Fza3MnOiBvcmRlcmJvb2tbJ2Fza3MnXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIHJlc3VsdFsnYXNrcyddID0gdGhpcy5zb3J0QnkgKHJlc3VsdFsnYXNrcyddLCAwKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgcGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KSB7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2J1eSddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3NlbGwnXSksXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xhc3QnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWyd2b2wnXSksXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbHVtZSddKSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlcnMgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgdGlja2VycyA9IGF3YWl0IHRoaXMucHVibGljR2V0QWxsdGlja2VyICgpO1xuICAgICAgICBsZXQgaWRzID0gT2JqZWN0LmtleXMgKHRpY2tlcnMpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge307XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgaWQgPSBpZHNbaV07XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gdGhpcy5tYXJrZXRzX2J5X2lkW2lkXTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBtYXJrZXRbJ3N5bWJvbCddO1xuICAgICAgICAgICAgbGV0IHRpY2tlciA9IHRpY2tlcnNbaWRdO1xuICAgICAgICAgICAgcmVzdWx0W3N5bWJvbF0gPSB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIG1hcmtldCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgdGlja2VyID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRUaWNrZXIgKHtcbiAgICAgICAgICAgICdjb2luJzogcFsnaWQnXSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIHApO1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wdWJsaWNHZXRPcmRlcnMgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnY29pbic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0VHJhZGVBZGQgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnYW1vdW50JzogYW1vdW50LFxuICAgICAgICAgICAgJ3ByaWNlJzogcHJpY2UsXG4gICAgICAgICAgICAndHlwZSc6IHNpZGUsXG4gICAgICAgICAgICAnY29pbic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXNwb25zZSxcbiAgICAgICAgICAgICdpZCc6IHJlc3BvbnNlWydpZCddLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVEZWxldGVXYWxsZXRzV2FsbGV0SWRPcmRlcnNJZCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArICcvJyArIHRoaXMudmVyc2lvbiArICcvJyArIHBhdGg7XG4gICAgICAgIGlmIChhcGkgPT0gJ3B1YmxpYycpIHtcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyAocGFyYW1zKS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChwYXJhbXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG5vbmNlID0gdGhpcy5ub25jZSAoKS50b1N0cmluZyAoKTtcbiAgICAgICAgICAgIGxldCBxdWVyeSA9IHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAgICAgJ2tleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgICAgICdub25jZSc6IG5vbmNlLFxuICAgICAgICAgICAgfSwgcGFyYW1zKTtcbiAgICAgICAgICAgIGxldCByZXF1ZXN0ID0gdGhpcy51cmxlbmNvZGUgKHF1ZXJ5KTtcbiAgICAgICAgICAgIGxldCBzZWNyZXQgPSB0aGlzLmhhc2ggKHRoaXMuZW5jb2RlICh0aGlzLnNlY3JldCkpO1xuICAgICAgICAgICAgcXVlcnlbJ3NpZ25hdHVyZSddID0gdGhpcy5obWFjICh0aGlzLmVuY29kZSAocmVxdWVzdCksIHRoaXMuZW5jb2RlIChzZWNyZXQpKTtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtTGVuZ3RoJzogYm9keS5sZW5ndGgsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdyZXN1bHQnIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgaWYgKCFyZXNwb25zZVsncmVzdWx0J10pXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBrcmFrZW4gaXMgYWxzbyBvd25lciBvZiBleC4gQ29pbnNldHRlciAvIENhVmlydEV4IC8gQ2xldmVyY29pblxuXG52YXIga3Jha2VuID0ge1xuXG4gICAgJ2lkJzogJ2tyYWtlbicsXG4gICAgJ25hbWUnOiAnS3Jha2VuJyxcbiAgICAnY291bnRyaWVzJzogJ1VTJyxcbiAgICAndmVyc2lvbic6ICcwJyxcbiAgICAncmF0ZUxpbWl0JzogMTUwMCxcbiAgICAnaGFzRmV0Y2hUaWNrZXJzJzogdHJ1ZSxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yNzc2NjU5OS0yMjcwOTMwNC01ZWRlLTExZTctOWRlMS05ZjMzNzMyZTE1MDkuanBnJyxcbiAgICAgICAgJ2FwaSc6ICdodHRwczovL2FwaS5rcmFrZW4uY29tJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy5rcmFrZW4uY29tJyxcbiAgICAgICAgJ2RvYyc6IFtcbiAgICAgICAgICAgICdodHRwczovL3d3dy5rcmFrZW4uY29tL2VuLXVzL2hlbHAvYXBpJyxcbiAgICAgICAgICAgICdodHRwczovL2dpdGh1Yi5jb20vbm90aGluZ2lzZGVhZC9ucG0ta3Jha2VuLWFwaScsXG4gICAgICAgIF0sXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnQXNzZXRzJyxcbiAgICAgICAgICAgICAgICAnQXNzZXRQYWlycycsXG4gICAgICAgICAgICAgICAgJ0RlcHRoJyxcbiAgICAgICAgICAgICAgICAnT0hMQycsXG4gICAgICAgICAgICAgICAgJ1NwcmVhZCcsXG4gICAgICAgICAgICAgICAgJ1RpY2tlcicsXG4gICAgICAgICAgICAgICAgJ1RpbWUnLFxuICAgICAgICAgICAgICAgICdUcmFkZXMnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnQWRkT3JkZXInLFxuICAgICAgICAgICAgICAgICdCYWxhbmNlJyxcbiAgICAgICAgICAgICAgICAnQ2FuY2VsT3JkZXInLFxuICAgICAgICAgICAgICAgICdDbG9zZWRPcmRlcnMnLFxuICAgICAgICAgICAgICAgICdEZXBvc2l0QWRkcmVzc2VzJyxcbiAgICAgICAgICAgICAgICAnRGVwb3NpdE1ldGhvZHMnLFxuICAgICAgICAgICAgICAgICdEZXBvc2l0U3RhdHVzJyxcbiAgICAgICAgICAgICAgICAnTGVkZ2VycycsXG4gICAgICAgICAgICAgICAgJ09wZW5PcmRlcnMnLFxuICAgICAgICAgICAgICAgICdPcGVuUG9zaXRpb25zJyxcbiAgICAgICAgICAgICAgICAnUXVlcnlMZWRnZXJzJyxcbiAgICAgICAgICAgICAgICAnUXVlcnlPcmRlcnMnLFxuICAgICAgICAgICAgICAgICdRdWVyeVRyYWRlcycsXG4gICAgICAgICAgICAgICAgJ1RyYWRlQmFsYW5jZScsXG4gICAgICAgICAgICAgICAgJ1RyYWRlc0hpc3RvcnknLFxuICAgICAgICAgICAgICAgICdUcmFkZVZvbHVtZScsXG4gICAgICAgICAgICAgICAgJ1dpdGhkcmF3JyxcbiAgICAgICAgICAgICAgICAnV2l0aGRyYXdDYW5jZWwnLFxuICAgICAgICAgICAgICAgICdXaXRoZHJhd0luZm8nLFxuICAgICAgICAgICAgICAgICdXaXRoZHJhd1N0YXR1cycsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE1hcmtldHMgKCkge1xuICAgICAgICBsZXQgbWFya2V0cyA9IGF3YWl0IHRoaXMucHVibGljR2V0QXNzZXRQYWlycyAoKTtcbiAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyAobWFya2V0c1sncmVzdWx0J10pO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwga2V5cy5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgbGV0IGlkID0ga2V5c1twXTtcbiAgICAgICAgICAgIGxldCBtYXJrZXQgPSBtYXJrZXRzWydyZXN1bHQnXVtpZF07XG4gICAgICAgICAgICBsZXQgYmFzZSA9IG1hcmtldFsnYmFzZSddO1xuICAgICAgICAgICAgbGV0IHF1b3RlID0gbWFya2V0WydxdW90ZSddO1xuICAgICAgICAgICAgaWYgKChiYXNlWzBdID09ICdYJykgfHwgKGJhc2VbMF0gPT0gJ1onKSlcbiAgICAgICAgICAgICAgICBiYXNlID0gYmFzZS5zbGljZSAoMSk7XG4gICAgICAgICAgICBpZiAoKHF1b3RlWzBdID09ICdYJykgfHwgKHF1b3RlWzBdID09ICdaJykpXG4gICAgICAgICAgICAgICAgcXVvdGUgPSBxdW90ZS5zbGljZSAoMSk7XG4gICAgICAgICAgICBiYXNlID0gdGhpcy5jb21tb25DdXJyZW5jeUNvZGUgKGJhc2UpO1xuICAgICAgICAgICAgcXVvdGUgPSB0aGlzLmNvbW1vbkN1cnJlbmN5Q29kZSAocXVvdGUpO1xuICAgICAgICAgICAgbGV0IGRhcmtwb29sID0gaWQuaW5kZXhPZiAoJy5kJykgPj0gMDtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBkYXJrcG9vbCA/IG1hcmtldFsnYWx0bmFtZSddIDogKGJhc2UgKyAnLycgKyBxdW90ZSk7XG4gICAgICAgICAgICByZXN1bHQucHVzaCAoe1xuICAgICAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICAgICAgICAgICdzeW1ib2wnOiBzeW1ib2wsXG4gICAgICAgICAgICAgICAgJ2Jhc2UnOiBiYXNlLFxuICAgICAgICAgICAgICAgICdxdW90ZSc6IHF1b3RlLFxuICAgICAgICAgICAgICAgICdkYXJrcG9vbCc6IGRhcmtwb29sLFxuICAgICAgICAgICAgICAgICdpbmZvJzogbWFya2V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IGRhcmtwb29sID0gbWFya2V0LmluZGV4T2YgKCcuZCcpID49IDA7XG4gICAgICAgIGlmIChkYXJrcG9vbClcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyBkb2VzIG5vdCBwcm92aWRlIGFuIG9yZGVyIGJvb2sgZm9yIGRhcmtwb29sIHN5bWJvbCAnICsgbWFya2V0KTtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXREZXB0aCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdwYWlyJzogcFsnaWQnXSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSByZXNwb25zZVsncmVzdWx0J11bcFsnaWQnXV07XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdiaWRzJzogW10sXG4gICAgICAgICAgICAnYXNrcyc6IFtdLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHNpZGVzID0gWyAnYmlkcycsICdhc2tzJyBdO1xuICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IHNpZGVzLmxlbmd0aDsgcysrKSB7XG4gICAgICAgICAgICBsZXQgc2lkZSA9IHNpZGVzW3NdO1xuICAgICAgICAgICAgbGV0IG9yZGVycyA9IG9yZGVyYm9va1tzaWRlXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9yZGVyID0gb3JkZXJzW2ldO1xuICAgICAgICAgICAgICAgIGxldCBwcmljZSA9IHBhcnNlRmxvYXQgKG9yZGVyWzBdKTtcbiAgICAgICAgICAgICAgICBsZXQgYW1vdW50ID0gcGFyc2VGbG9hdCAob3JkZXJbMV0pO1xuICAgICAgICAgICAgICAgIGxldCB0aW1lc3RhbXAgPSBvcmRlclsyXSAqIDEwMDA7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3NpZGVdLnB1c2ggKFsgcHJpY2UsIGFtb3VudCwgdGltZXN0YW1wIF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIHBhcnNlVGlja2VyICh0aWNrZXIsIG1hcmtldCkge1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2gnXVsxXSksXG4gICAgICAgICAgICAnbG93JzogcGFyc2VGbG9hdCAodGlja2VyWydsJ11bMV0pLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYiddWzBdKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2EnXVswXSksXG4gICAgICAgICAgICAndndhcCc6IHBhcnNlRmxvYXQgKHRpY2tlclsncCddWzFdKSxcbiAgICAgICAgICAgICdvcGVuJzogcGFyc2VGbG9hdCAodGlja2VyWydvJ10pLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2MnXVswXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWyd2J11bMV0pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VycyAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBwYWlycyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IHRoaXMuc3ltYm9scy5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgbGV0IHN5bWJvbCA9IHRoaXMuc3ltYm9sc1tzXTtcbiAgICAgICAgICAgIGxldCBtYXJrZXQgPSB0aGlzLm1hcmtldHNbc3ltYm9sXTtcbiAgICAgICAgICAgIGlmICghbWFya2V0WydkYXJrcG9vbCddKVxuICAgICAgICAgICAgICAgIHBhaXJzLnB1c2ggKG1hcmtldFsnaWQnXSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGZpbHRlciA9IHBhaXJzLmpvaW4gKCcsJyk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0VGlja2VyICh7XG4gICAgICAgICAgICAncGFpcic6IGZpbHRlcixcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aWNrZXJzID0gcmVzcG9uc2VbJ3Jlc3VsdCddO1xuICAgICAgICBsZXQgaWRzID0gT2JqZWN0LmtleXMgKHRpY2tlcnMpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge307XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgaWQgPSBpZHNbaV07XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gdGhpcy5tYXJrZXRzX2J5X2lkW2lkXTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBtYXJrZXRbJ3N5bWJvbCddO1xuICAgICAgICAgICAgbGV0IHRpY2tlciA9IHRpY2tlcnNbaWRdO1xuICAgICAgICAgICAgcmVzdWx0W3N5bWJvbF0gPSB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIG1hcmtldCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgZGFya3Bvb2wgPSBtYXJrZXQuaW5kZXhPZiAoJy5kJykgPj0gMDtcbiAgICAgICAgaWYgKGRhcmtwb29sKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnIGRvZXMgbm90IHByb3ZpZGUgYSB0aWNrZXIgZm9yIGRhcmtwb29sIHN5bWJvbCAnICsgbWFya2V0KTtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRUaWNrZXIgKHtcbiAgICAgICAgICAgICdwYWlyJzogcFsnaWQnXSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aWNrZXIgPSByZXNwb25zZVsncmVzdWx0J11bcFsnaWQnXV07XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIHApO1xuICAgIH0sXG5cbiAgICBwYXJzZVRyYWRlICh0cmFkZSwgbWFya2V0KSB7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSBwYXJzZUludCAodHJhZGVbMl0gKiAxMDAwKTtcbiAgICAgICAgbGV0IHNpZGUgPSAodHJhZGVbM10gPT0gJ3MnKSA/ICdzZWxsJyA6ICdidXknO1xuICAgICAgICBsZXQgdHlwZSA9ICh0cmFkZVs0XSA9PSAnbCcpID8gJ2xpbWl0JyA6ICdtYXJrZXQnO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiB0cmFkZSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnc3ltYm9sJzogbWFya2V0WydzeW1ib2wnXSxcbiAgICAgICAgICAgICd0eXBlJzogdHlwZSxcbiAgICAgICAgICAgICdzaWRlJzogc2lkZSxcbiAgICAgICAgICAgICdwcmljZSc6IHBhcnNlRmxvYXQgKHRyYWRlWzBdKSxcbiAgICAgICAgICAgICdhbW91bnQnOiBwYXJzZUZsb2F0ICh0cmFkZVsxXSksXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIHBhcnNlT0hMQ1YgKG9obGN2LCBtYXJrZXQgPSB1bmRlZmluZWQsIHRpbWVmcmFtZSA9IDYwLCBzaW5jZSA9IHVuZGVmaW5lZCwgbGltaXQgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG9obGN2WzBdLFxuICAgICAgICAgICAgb2hsY3ZbMV0sXG4gICAgICAgICAgICBvaGxjdlsyXSxcbiAgICAgICAgICAgIG9obGN2WzNdLFxuICAgICAgICAgICAgb2hsY3ZbNF0sXG4gICAgICAgICAgICBvaGxjdls2XSxcbiAgICAgICAgXTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPSExDViAobWFya2V0LCB0aW1lZnJhbWUgPSA2MCwgc2luY2UgPSB1bmRlZmluZWQsIGxpbWl0ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCBtID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0T0hMQyAoe1xuICAgICAgICAgICAgJ3BhaXInOiBtWydpZCddLFxuICAgICAgICAgICAgJ2ludGVydmFsJzogcGFyc2VJbnQgKHRpbWVmcmFtZSAvIDYwKSxcbiAgICAgICAgICAgICdzaW5jZSc6IHNpbmNlLFxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IG9obGN2cyA9IHJlc3BvbnNlW21bJ2lkJ11dO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZU9ITENWcyAobSwgb2hsY3ZzLCB0aW1lZnJhbWUsIHNpbmNlLCBsaW1pdCk7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBtID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCBpZCA9IG1bJ2lkJ107XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0VHJhZGVzICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ3BhaXInOiBpZCxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCB0cmFkZXMgPSByZXNwb25zZVsncmVzdWx0J11baWRdO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVRyYWRlcyAodHJhZGVzLCBtKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdEJhbGFuY2UgKCk7XG4gICAgICAgIGxldCBiYWxhbmNlcyA9IHJlc3BvbnNlWydyZXN1bHQnXTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiBiYWxhbmNlcyB9O1xuICAgICAgICBsZXQgY3VycmVuY2llcyA9IE9iamVjdC5rZXlzIChiYWxhbmNlcyk7XG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgY3VycmVuY2llcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gY3VycmVuY2llc1tjXTtcbiAgICAgICAgICAgIGxldCBjb2RlID0gY3VycmVuY3k7XG4gICAgICAgICAgICAvLyBYLUlTTzQyMTctQTMgc3RhbmRhcmQgY3VycmVuY3kgY29kZXNcbiAgICAgICAgICAgIGlmIChjb2RlWzBdID09ICdYJykge1xuICAgICAgICAgICAgICAgIGNvZGUgPSBjb2RlLnNsaWNlICgxKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29kZVswXSA9PSAnWicpIHtcbiAgICAgICAgICAgICAgICBjb2RlID0gY29kZS5zbGljZSAoMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb2RlID0gdGhpcy5jb21tb25DdXJyZW5jeUNvZGUgKGNvZGUpO1xuICAgICAgICAgICAgbGV0IGJhbGFuY2UgPSBwYXJzZUZsb2F0IChiYWxhbmNlc1tjdXJyZW5jeV0pO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiBiYWxhbmNlLFxuICAgICAgICAgICAgICAgICd1c2VkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IGJhbGFuY2UsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVzdWx0W2NvZGVdID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAncGFpcic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgICAgICAndHlwZSc6IHNpZGUsXG4gICAgICAgICAgICAnb3JkZXJ0eXBlJzogdHlwZSxcbiAgICAgICAgICAgICd2b2x1bWUnOiBhbW91bnQsXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlID09ICdsaW1pdCcpXG4gICAgICAgICAgICBvcmRlclsncHJpY2UnXSA9IHByaWNlO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0QWRkT3JkZXIgKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIGxldCBsZW5ndGggPSByZXNwb25zZVsncmVzdWx0J11bJ3R4aWQnXS5sZW5ndGg7XG4gICAgICAgIGxldCBpZCA9IChsZW5ndGggPiAxKSA/IHJlc3BvbnNlWydyZXN1bHQnXVsndHhpZCddIDogcmVzcG9uc2VbJ3Jlc3VsdCddWyd0eGlkJ11bMF07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdENhbmNlbE9yZGVyICh7ICd0eGlkJzogaWQgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9ICcvJyArIHRoaXMudmVyc2lvbiArICcvJyArIGFwaSArICcvJyArIHBhdGg7XG4gICAgICAgIGlmIChhcGkgPT0gJ3B1YmxpYycpIHtcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyAocGFyYW1zKS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChwYXJhbXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG5vbmNlID0gdGhpcy5ub25jZSAoKS50b1N0cmluZyAoKTtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLnVybGVuY29kZSAodGhpcy5leHRlbmQgKHsgJ25vbmNlJzogbm9uY2UgfSwgcGFyYW1zKSk7XG4gICAgICAgICAgICBsZXQgYXV0aCA9IHRoaXMuZW5jb2RlIChub25jZSArIGJvZHkpO1xuICAgICAgICAgICAgbGV0IGhhc2ggPSB0aGlzLmhhc2ggKGF1dGgsICdzaGEyNTYnLCAnYmluYXJ5Jyk7XG4gICAgICAgICAgICBsZXQgYmluYXJ5ID0gdGhpcy5zdHJpbmdUb0JpbmFyeSAodGhpcy5lbmNvZGUgKHVybCkpO1xuICAgICAgICAgICAgbGV0IGJpbmhhc2ggPSB0aGlzLmJpbmFyeUNvbmNhdCAoYmluYXJ5LCBoYXNoKTtcbiAgICAgICAgICAgIGxldCBzZWNyZXQgPSB0aGlzLmJhc2U2NFRvQmluYXJ5ICh0aGlzLnNlY3JldCk7XG4gICAgICAgICAgICBsZXQgc2lnbmF0dXJlID0gdGhpcy5obWFjIChiaW5oYXNoLCBzZWNyZXQsICdzaGE1MTInLCAnYmFzZTY0Jyk7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdBUEktS2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ0FQSS1TaWduJzogdGhpcy5kZWNvZGUgKHNpZ25hdHVyZSksXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgdXJsO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgICAgIGlmICgnZXJyb3InIGluIHJlc3BvbnNlKSB7XG4gICAgICAgICAgICBsZXQgbnVtRXJyb3JzID0gcmVzcG9uc2VbJ2Vycm9yJ10ubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKG51bUVycm9ycylcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgJyArIHRoaXMuanNvbiAocmVzcG9uc2UpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgbGFrZWJ0YyA9IHtcblxuICAgICdpZCc6ICdsYWtlYnRjJyxcbiAgICAnbmFtZSc6ICdMYWtlQlRDJyxcbiAgICAnY291bnRyaWVzJzogJ1VTJyxcbiAgICAndmVyc2lvbic6ICdhcGlfdjInLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI4MDc0MTIwLTcyYjdjMzhhLTY2NjAtMTFlNy05MmQ5LWQ5MDI3NTAyMjgxZC5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vYXBpLmxha2VidGMuY29tJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy5sYWtlYnRjLmNvbScsXG4gICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAnaHR0cHM6Ly93d3cubGFrZWJ0Yy5jb20vcy9hcGknLFxuICAgICAgICAgICAgJ2h0dHBzOi8vd3d3Lmxha2VidGMuY29tL3MvYXBpX3YyJyxcbiAgICAgICAgXSxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdiY29yZGVyYm9vaycsXG4gICAgICAgICAgICAgICAgJ2JjdHJhZGVzJyxcbiAgICAgICAgICAgICAgICAndGlja2VyJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2J1eU9yZGVyJyxcbiAgICAgICAgICAgICAgICAnY2FuY2VsT3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnZ2V0QWNjb3VudEluZm8nLFxuICAgICAgICAgICAgICAgICdnZXRFeHRlcm5hbEFjY291bnRzJyxcbiAgICAgICAgICAgICAgICAnZ2V0T3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnZ2V0VHJhZGVzJyxcbiAgICAgICAgICAgICAgICAnb3Blbk9yZGVycycsXG4gICAgICAgICAgICAgICAgJ3NlbGxPcmRlcicsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE1hcmtldHMgKCkge1xuICAgICAgICBsZXQgbWFya2V0cyA9IGF3YWl0IHRoaXMucHVibGljR2V0VGlja2VyICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMgKG1hcmtldHMpO1xuICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGtleXMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgIGxldCBpZCA9IGtleXNba107XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gbWFya2V0c1tpZF07XG4gICAgICAgICAgICBsZXQgYmFzZSA9IGlkLnNsaWNlICgwLCAzKTtcbiAgICAgICAgICAgIGxldCBxdW90ZSA9IGlkLnNsaWNlICgzLCA2KTtcbiAgICAgICAgICAgIGJhc2UgPSBiYXNlLnRvVXBwZXJDYXNlICgpO1xuICAgICAgICAgICAgcXVvdGUgPSBxdW90ZS50b1VwcGVyQ2FzZSAoKTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBiYXNlICsgJy8nICsgcXVvdGU7XG4gICAgICAgICAgICByZXN1bHQucHVzaCAoe1xuICAgICAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICAgICAgICAgICdzeW1ib2wnOiBzeW1ib2wsXG4gICAgICAgICAgICAgICAgJ2Jhc2UnOiBiYXNlLFxuICAgICAgICAgICAgICAgICdxdW90ZSc6IHF1b3RlLFxuICAgICAgICAgICAgICAgICdpbmZvJzogbWFya2V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdEdldEFjY291bnRJbmZvICgpO1xuICAgICAgICBsZXQgYmFsYW5jZXMgPSByZXNwb25zZVsnYmFsYW5jZSddO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IHJlc3BvbnNlIH07XG4gICAgICAgIGxldCBjdXJyZW5jaWVzID0gT2JqZWN0LmtleXMgKGJhbGFuY2VzKTtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBjdXJyZW5jaWVzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBjdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IGJhbGFuY2UgPSBwYXJzZUZsb2F0IChiYWxhbmNlc1tjdXJyZW5jeV0pO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiBiYWxhbmNlLFxuICAgICAgICAgICAgICAgICd1c2VkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IGJhbGFuY2UsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IGF3YWl0IHRoaXMucHVibGljR2V0QmNvcmRlcmJvb2sgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnc3ltYm9sJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdiaWRzJzogW10sXG4gICAgICAgICAgICAnYXNrcyc6IFtdLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHNpZGVzID0gWyAnYmlkcycsICdhc2tzJyBdO1xuICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IHNpZGVzLmxlbmd0aDsgcysrKSB7XG4gICAgICAgICAgICBsZXQgc2lkZSA9IHNpZGVzW3NdO1xuICAgICAgICAgICAgbGV0IG9yZGVycyA9IG9yZGVyYm9va1tzaWRlXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9yZGVyID0gb3JkZXJzW2ldO1xuICAgICAgICAgICAgICAgIGxldCBwcmljZSA9IHBhcnNlRmxvYXQgKG9yZGVyWzBdKTtcbiAgICAgICAgICAgICAgICBsZXQgYW1vdW50ID0gcGFyc2VGbG9hdCAob3JkZXJbMV0pO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtzaWRlXS5wdXNoIChbIHByaWNlLCBhbW91bnQgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgdGlja2VycyA9IGF3YWl0IHRoaXMucHVibGljR2V0VGlja2VyICh7XG4gICAgICAgICAgICAnc3ltYm9sJzogcFsnaWQnXSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aWNrZXIgPSB0aWNrZXJzW3BbJ2lkJ11dO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2hpZ2gnXSksXG4gICAgICAgICAgICAnbG93JzogcGFyc2VGbG9hdCAodGlja2VyWydsb3cnXSksXG4gICAgICAgICAgICAnYmlkJzogcGFyc2VGbG9hdCAodGlja2VyWydiaWQnXSksXG4gICAgICAgICAgICAnYXNrJzogcGFyc2VGbG9hdCAodGlja2VyWydhc2snXSksXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xhc3QnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWyd2b2x1bWUnXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0QmN0cmFkZXMgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnc3ltYm9sJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGlmICh0eXBlID09ICdtYXJrZXQnKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnIGFsbG93cyBsaW1pdCBvcmRlcnMgb25seScpO1xuICAgICAgICBsZXQgbWV0aG9kID0gJ3ByaXZhdGVQb3N0JyArIHRoaXMuY2FwaXRhbGl6ZSAoc2lkZSkgKyAnT3JkZXInO1xuICAgICAgICBsZXQgbWFya2V0SWQgPSB0aGlzLm1hcmtldElkIChtYXJrZXQpO1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAncGFyYW1zJzogWyBwcmljZSwgYW1vdW50LCBtYXJrZXRJZCBdLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzW21ldGhvZF0gKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ2lkJzogcmVzcG9uc2VbJ2lkJ10udG9TdHJpbmcgKCksXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdENhbmNlbE9yZGVyICh7ICdwYXJhbXMnOiBpZCB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArICcvJyArIHRoaXMudmVyc2lvbjtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgdXJsICs9ICcvJyArIHBhdGg7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHBhcmFtcykubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocGFyYW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCk7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHBhcmFtcykubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHBhcmFtcyA9IHBhcmFtcy5qb2luICgnLCcpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHBhcmFtcyA9ICcnO1xuICAgICAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy51cmxlbmNvZGUgKHtcbiAgICAgICAgICAgICAgICAndG9uY2UnOiBub25jZSxcbiAgICAgICAgICAgICAgICAnYWNjZXNza2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ3JlcXVlc3RtZXRob2QnOiBtZXRob2QudG9Mb3dlckNhc2UgKCksXG4gICAgICAgICAgICAgICAgJ2lkJzogbm9uY2UsXG4gICAgICAgICAgICAgICAgJ21ldGhvZCc6IHBhdGgsXG4gICAgICAgICAgICAgICAgJ3BhcmFtcyc6IHBhcmFtcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYm9keSA9IHRoaXMuanNvbiAoe1xuICAgICAgICAgICAgICAgICdtZXRob2QnOiBwYXRoLFxuICAgICAgICAgICAgICAgICdwYXJhbXMnOiBwYXJhbXMsXG4gICAgICAgICAgICAgICAgJ2lkJzogbm9uY2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxldCBzaWduYXR1cmUgPSB0aGlzLmhtYWMgKHRoaXMuZW5jb2RlIChxdWVyeSksIHRoaXMuc2VjcmV0LCAnc2hhMScsICdiYXNlNjQnKTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0pzb24tUnBjLVRvbmNlJzogbm9uY2UsXG4gICAgICAgICAgICAgICAgJ0F1dGhvcml6YXRpb24nOiBcIkJhc2ljIFwiICsgdGhpcy5hcGlLZXkgKyAnOicgKyBzaWduYXR1cmUsXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtTGVuZ3RoJzogYm9keS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgICAgICBpZiAoJ2Vycm9yJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgbGl2ZWNvaW4gPSB7XG5cbiAgICAnaWQnOiAnbGl2ZWNvaW4nLFxuICAgICduYW1lJzogJ0xpdmVDb2luJyxcbiAgICAnY291bnRyaWVzJzogWyAnVVMnLCAnVUsnLCAnUlUnIF0sXG4gICAgJ3JhdGVMaW1pdCc6IDEwMDAsXG4gICAgJ2hhc0ZldGNoVGlja2Vycyc6IHRydWUsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc5ODA3NjgtZjIyZmM0MjQtNjM4YS0xMWU3LTg5YzktNjAxMGE1NGZmOWJlLmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly9hcGkubGl2ZWNvaW4ubmV0JyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy5saXZlY29pbi5uZXQnLFxuICAgICAgICAnZG9jJzogJ2h0dHBzOi8vd3d3LmxpdmVjb2luLm5ldC9hcGk/bGFuZz1lbicsXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnZXhjaGFuZ2UvYWxsL29yZGVyX2Jvb2snLFxuICAgICAgICAgICAgICAgICdleGNoYW5nZS9sYXN0X3RyYWRlcycsXG4gICAgICAgICAgICAgICAgJ2V4Y2hhbmdlL21heGJpZF9taW5hc2snLFxuICAgICAgICAgICAgICAgICdleGNoYW5nZS9vcmRlcl9ib29rJyxcbiAgICAgICAgICAgICAgICAnZXhjaGFuZ2UvcmVzdHJpY3Rpb25zJyxcbiAgICAgICAgICAgICAgICAnZXhjaGFuZ2UvdGlja2VyJywgLy8gb21pdCBwYXJhbXMgdG8gZ2V0IGFsbCB0aWNrZXJzIGF0IG9uY2VcbiAgICAgICAgICAgICAgICAnaW5mby9jb2luSW5mbycsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAncHJpdmF0ZSc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ2V4Y2hhbmdlL2NsaWVudF9vcmRlcnMnLFxuICAgICAgICAgICAgICAgICdleGNoYW5nZS9vcmRlcicsXG4gICAgICAgICAgICAgICAgJ2V4Y2hhbmdlL3RyYWRlcycsXG4gICAgICAgICAgICAgICAgJ2V4Y2hhbmdlL2NvbW1pc3Npb24nLFxuICAgICAgICAgICAgICAgICdleGNoYW5nZS9jb21taXNzaW9uQ29tbW9uSW5mbycsXG4gICAgICAgICAgICAgICAgJ3BheW1lbnQvYmFsYW5jZXMnLFxuICAgICAgICAgICAgICAgICdwYXltZW50L2JhbGFuY2UnLFxuICAgICAgICAgICAgICAgICdwYXltZW50L2dldC9hZGRyZXNzJyxcbiAgICAgICAgICAgICAgICAncGF5bWVudC9oaXN0b3J5L3NpemUnLFxuICAgICAgICAgICAgICAgICdwYXltZW50L2hpc3RvcnkvdHJhbnNhY3Rpb25zJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnZXhjaGFuZ2UvYnV5bGltaXQnLFxuICAgICAgICAgICAgICAgICdleGNoYW5nZS9idXltYXJrZXQnLFxuICAgICAgICAgICAgICAgICdleGNoYW5nZS9jYW5jZWxsaW1pdCcsXG4gICAgICAgICAgICAgICAgJ2V4Y2hhbmdlL3NlbGxsaW1pdCcsXG4gICAgICAgICAgICAgICAgJ2V4Y2hhbmdlL3NlbGxtYXJrZXQnLFxuICAgICAgICAgICAgICAgICdwYXltZW50L291dC9jYXBpdGFsaXN0JyxcbiAgICAgICAgICAgICAgICAncGF5bWVudC9vdXQvY2FyZCcsXG4gICAgICAgICAgICAgICAgJ3BheW1lbnQvb3V0L2NvaW4nLFxuICAgICAgICAgICAgICAgICdwYXltZW50L291dC9va3BheScsXG4gICAgICAgICAgICAgICAgJ3BheW1lbnQvb3V0L3BheWVlcicsXG4gICAgICAgICAgICAgICAgJ3BheW1lbnQvb3V0L3BlcmZlY3Rtb25leScsXG4gICAgICAgICAgICAgICAgJ3BheW1lbnQvdm91Y2hlci9hbW91bnQnLFxuICAgICAgICAgICAgICAgICdwYXltZW50L3ZvdWNoZXIvbWFrZScsXG4gICAgICAgICAgICAgICAgJ3BheW1lbnQvdm91Y2hlci9yZWRlZW0nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hNYXJrZXRzICgpIHtcbiAgICAgICAgbGV0IG1hcmtldHMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldEV4Y2hhbmdlVGlja2VyICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgbWFya2V0cy5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IG1hcmtldHNbcF07XG4gICAgICAgICAgICBsZXQgaWQgPSBtYXJrZXRbJ3N5bWJvbCddO1xuICAgICAgICAgICAgbGV0IHN5bWJvbCA9IGlkO1xuICAgICAgICAgICAgbGV0IFsgYmFzZSwgcXVvdGUgXSA9IHN5bWJvbC5zcGxpdCAoJy8nKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoICh7XG4gICAgICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgICAgICAgICAgJ3N5bWJvbCc6IHN5bWJvbCxcbiAgICAgICAgICAgICAgICAnYmFzZSc6IGJhc2UsXG4gICAgICAgICAgICAgICAgJ3F1b3RlJzogcXVvdGUsXG4gICAgICAgICAgICAgICAgJ2luZm8nOiBtYXJrZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgYmFsYW5jZXMgPSBhd2FpdCB0aGlzLnByaXZhdGVHZXRQYXltZW50QmFsYW5jZXMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogYmFsYW5jZXMgfTtcbiAgICAgICAgZm9yIChsZXQgYiA9IDA7IGIgPCB0aGlzLmN1cnJlbmNpZXMubGVuZ3RoOyBiKyspIHtcbiAgICAgICAgICAgIGxldCBiYWxhbmNlID0gYmFsYW5jZXNbYl07XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBiYWxhbmNlWydjdXJyZW5jeSddO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAoY3VycmVuY3kgaW4gcmVzdWx0KVxuICAgICAgICAgICAgICAgIGFjY291bnQgPSByZXN1bHRbY3VycmVuY3ldO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgICAgICdmcmVlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAndXNlZCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgJ3RvdGFsJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoYmFsYW5jZVsndHlwZSddID09ICd0b3RhbCcpXG4gICAgICAgICAgICAgICAgYWNjb3VudFsndG90YWwnXSA9IHBhcnNlRmxvYXQgKGJhbGFuY2VbJ3ZhbHVlJ10pO1xuICAgICAgICAgICAgaWYgKGJhbGFuY2VbJ3R5cGUnXSA9PSAnYXZhaWxhYmxlJylcbiAgICAgICAgICAgICAgICBhY2NvdW50WydmcmVlJ10gPSBwYXJzZUZsb2F0IChiYWxhbmNlWyd2YWx1ZSddKTtcbiAgICAgICAgICAgIGlmIChiYWxhbmNlWyd0eXBlJ10gPT0gJ3RyYWRlJylcbiAgICAgICAgICAgICAgICBhY2NvdW50Wyd1c2VkJ10gPSBwYXJzZUZsb2F0IChiYWxhbmNlWyd2YWx1ZSddKTtcbiAgICAgICAgICAgIHJlc3VsdFtjdXJyZW5jeV0gPSBhY2NvdW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSBhd2FpdCB0aGlzLnB1YmxpY0dldEV4Y2hhbmdlT3JkZXJCb29rICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2N1cnJlbmN5UGFpcic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgICAgICAnZ3JvdXBCeVByaWNlJzogJ2ZhbHNlJyxcbiAgICAgICAgICAgICdkZXB0aCc6IDEwMCxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSBvcmRlcmJvb2tbJ3RpbWVzdGFtcCddO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAob3JkZXJbMF0pO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBwYXJzZUZsb2F0IChvcmRlclsxXSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3NpZGVdLnB1c2ggKFsgcHJpY2UsIGFtb3VudCBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBwYXJzZVRpY2tlciAodGlja2VyLCBtYXJrZXQpIHtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydoaWdoJ10pLFxuICAgICAgICAgICAgJ2xvdyc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbG93J10pLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYmVzdF9iaWQnXSksXG4gICAgICAgICAgICAnYXNrJzogcGFyc2VGbG9hdCAodGlja2VyWydiZXN0X2FzayddKSxcbiAgICAgICAgICAgICd2d2FwJzogcGFyc2VGbG9hdCAodGlja2VyWyd2d2FwJ10pLFxuICAgICAgICAgICAgJ29wZW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdCddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbHVtZSddKSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlcnMgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldEV4Y2hhbmdlVGlja2VyICgpO1xuICAgICAgICBsZXQgdGlja2VycyA9IHRoaXMuaW5kZXhCeSAocmVzcG9uc2UsICdzeW1ib2wnKTtcbiAgICAgICAgbGV0IGlkcyA9IE9iamVjdC5rZXlzICh0aWNrZXJzKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHt9O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IGlkID0gaWRzW2ldO1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IHRoaXMubWFya2V0c19ieV9pZFtpZF07XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gbWFya2V0WydzeW1ib2wnXTtcbiAgICAgICAgICAgIGxldCB0aWNrZXIgPSB0aWNrZXJzW2lkXTtcbiAgICAgICAgICAgIHJlc3VsdFtzeW1ib2xdID0gdGhpcy5wYXJzZVRpY2tlciAodGlja2VyLCBtYXJrZXQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHRpY2tlciA9IGF3YWl0IHRoaXMucHVibGljR2V0RXhjaGFuZ2VUaWNrZXIgKHtcbiAgICAgICAgICAgICdjdXJyZW5jeVBhaXInOiBwWydpZCddLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VUaWNrZXIgKHRpY2tlciwgcCk7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldEV4Y2hhbmdlTGFzdFRyYWRlcyAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdjdXJyZW5jeVBhaXInOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG1ldGhvZCA9ICdwcml2YXRlUG9zdEV4Y2hhbmdlJyArIHRoaXMuY2FwaXRhbGl6ZSAoc2lkZSkgKyB0eXBlO1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAnY3VycmVuY3lQYWlyJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICdxdWFudGl0eSc6IGFtb3VudCxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHR5cGUgPT0gJ2xpbWl0JylcbiAgICAgICAgICAgIG9yZGVyWydwcmljZSddID0gcHJpY2U7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXNbbWV0aG9kXSAodGhpcy5leHRlbmQgKG9yZGVyLCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnaWQnXS50b1N0cmluZyAoKSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdEV4Y2hhbmdlQ2FuY2VsbGltaXQgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnb3JkZXJJZCc6IGlkLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArICcvJyArIHBhdGg7XG4gICAgICAgIGlmIChhcGkgPT0gJ3B1YmxpYycpIHtcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyAocGFyYW1zKS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChwYXJhbXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy51cmxlbmNvZGUgKHRoaXMua2V5c29ydCAocGFyYW1zKSk7XG4gICAgICAgICAgICBpZiAobWV0aG9kID09ICdHRVQnKVxuICAgICAgICAgICAgICAgIGlmIChxdWVyeSlcbiAgICAgICAgICAgICAgICAgICAgdXJsICs9ICc/JyArIHF1ZXJ5O1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGlmIChxdWVyeSlcbiAgICAgICAgICAgICAgICAgICAgYm9keSA9IHF1ZXJ5O1xuICAgICAgICAgICAgbGV0IHNpZ25hdHVyZSA9IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKHF1ZXJ5KSwgdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSwgJ3NoYTI1NicpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQXBpLUtleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgICAgICdTaWduJzogc2lnbmF0dXJlLnRvVXBwZXJDYXNlICgpLFxuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgICAgICBpZiAoJ3N1Y2Nlc3MnIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgaWYgKCFyZXNwb25zZVsnc3VjY2VzcyddKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgbGlxdWkgPSBleHRlbmQgKGJ0Y2UsIHtcbiAgICAnaWQnOiAnbGlxdWknLFxuICAgICduYW1lJzogJ0xpcXVpJyxcbiAgICAnY291bnRyaWVzJzogJ1VBJyxcbiAgICAncmF0ZUxpbWl0JzogMTAwMCxcbiAgICAndmVyc2lvbic6ICczJyxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yNzk4MjAyMi03NWFlYTgyOC02M2EwLTExZTctOTUxMS1jYTU4NGE4ZWRkNzQuanBnJyxcbiAgICAgICAgJ2FwaSc6IHtcbiAgICAgICAgICAgICdwdWJsaWMnOiAnaHR0cHM6Ly9hcGkubGlxdWkuaW8vYXBpJyxcbiAgICAgICAgICAgICdwcml2YXRlJzogJ2h0dHBzOi8vYXBpLmxpcXVpLmlvL3RhcGknLFxuICAgICAgICB9LFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vbGlxdWkuaW8nLFxuICAgICAgICAnZG9jJzogJ2h0dHBzOi8vbGlxdWkuaW8vYXBpJyxcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXVthcGldO1xuICAgICAgICBsZXQgcXVlcnkgPSB0aGlzLm9taXQgKHBhcmFtcywgdGhpcy5leHRyYWN0UGFyYW1zIChwYXRoKSk7XG4gICAgICAgIGlmIChhcGkgPT0gJ3B1YmxpYycpIHtcbiAgICAgICAgICAgIHVybCArPSAgJy8nICsgdGhpcy52ZXJzaW9uICsgJy8nICsgdGhpcy5pbXBsb2RlUGFyYW1zIChwYXRoLCBwYXJhbXMpO1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChxdWVyeSkubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG5vbmNlID0gdGhpcy5ub25jZSAoKTtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLnVybGVuY29kZSAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICAgICAnbm9uY2UnOiBub25jZSxcbiAgICAgICAgICAgICAgICAnbWV0aG9kJzogcGF0aCxcbiAgICAgICAgICAgIH0sIHF1ZXJ5KSk7XG4gICAgICAgICAgICBsZXQgc2lnbmF0dXJlID0gdGhpcy5obWFjICh0aGlzLmVuY29kZSAoYm9keSksIHRoaXMuZW5jb2RlICh0aGlzLnNlY3JldCksICdzaGE1MTInKTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgICAgICAgICdDb250ZW50LUxlbmd0aCc6IGJvZHkubGVuZ3RoLnRvU3RyaW5nICgpLFxuICAgICAgICAgICAgICAgICdLZXknOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgICAgICAnU2lnbic6IHNpZ25hdHVyZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgICAgICBpZiAoJ3N1Y2Nlc3MnIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgaWYgKCFyZXNwb25zZVsnc3VjY2VzcyddKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSxcbn0pXG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGx1bm8gPSB7XG5cbiAgICAnaWQnOiAnbHVubycsXG4gICAgJ25hbWUnOiAnbHVubycsXG4gICAgJ2NvdW50cmllcyc6IFsgJ0dCJywgJ1NHJywgJ1pBJyBdLFxuICAgICdyYXRlTGltaXQnOiAzMDAwLFxuICAgICd2ZXJzaW9uJzogJzEnLFxuICAgICdoYXNGZXRjaFRpY2tlcnMnOiB0cnVlLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2NjA3LThjMWE2OWQ4LTVlZGUtMTFlNy05MzBjLTU0MGI1ZWI5YmUyNC5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vYXBpLm15Yml0eC5jb20vYXBpJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy5sdW5vLmNvbScsXG4gICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAnaHR0cHM6Ly93d3cubHVuby5jb20vZW4vYXBpJyxcbiAgICAgICAgICAgICdodHRwczovL25wbWpzLm9yZy9wYWNrYWdlL2JpdHgnLFxuICAgICAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS9iYXVzbWVpZXIvbm9kZS1iaXR4JyxcbiAgICAgICAgXSxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdvcmRlcmJvb2snLFxuICAgICAgICAgICAgICAgICd0aWNrZXInLFxuICAgICAgICAgICAgICAgICd0aWNrZXJzJyxcbiAgICAgICAgICAgICAgICAndHJhZGVzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnYWNjb3VudHMve2lkfS9wZW5kaW5nJyxcbiAgICAgICAgICAgICAgICAnYWNjb3VudHMve2lkfS90cmFuc2FjdGlvbnMnLFxuICAgICAgICAgICAgICAgICdiYWxhbmNlJyxcbiAgICAgICAgICAgICAgICAnZmVlX2luZm8nLFxuICAgICAgICAgICAgICAgICdmdW5kaW5nX2FkZHJlc3MnLFxuICAgICAgICAgICAgICAgICdsaXN0b3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnbGlzdHRyYWRlcycsXG4gICAgICAgICAgICAgICAgJ29yZGVycy97aWR9JyxcbiAgICAgICAgICAgICAgICAncXVvdGVzL3tpZH0nLFxuICAgICAgICAgICAgICAgICd3aXRoZHJhd2FscycsXG4gICAgICAgICAgICAgICAgJ3dpdGhkcmF3YWxzL3tpZH0nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICdwb3N0JzogW1xuICAgICAgICAgICAgICAgICdhY2NvdW50cycsXG4gICAgICAgICAgICAgICAgJ3Bvc3RvcmRlcicsXG4gICAgICAgICAgICAgICAgJ21hcmtldG9yZGVyJyxcbiAgICAgICAgICAgICAgICAnc3RvcG9yZGVyJyxcbiAgICAgICAgICAgICAgICAnZnVuZGluZ19hZGRyZXNzJyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXdhbHMnLFxuICAgICAgICAgICAgICAgICdzZW5kJyxcbiAgICAgICAgICAgICAgICAncXVvdGVzJyxcbiAgICAgICAgICAgICAgICAnb2F1dGgyL2dyYW50JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAncHV0JzogW1xuICAgICAgICAgICAgICAgICdxdW90ZXMve2lkfScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ2RlbGV0ZSc6IFtcbiAgICAgICAgICAgICAgICAncXVvdGVzL3tpZH0nLFxuICAgICAgICAgICAgICAgICd3aXRoZHJhd2Fscy97aWR9JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoTWFya2V0cyAoKSB7XG4gICAgICAgIGxldCBtYXJrZXRzID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRUaWNrZXJzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgbWFya2V0c1sndGlja2VycyddLmxlbmd0aDsgcCsrKSB7XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gbWFya2V0c1sndGlja2VycyddW3BdO1xuICAgICAgICAgICAgbGV0IGlkID0gbWFya2V0WydwYWlyJ107XG4gICAgICAgICAgICBsZXQgYmFzZSA9IGlkLnNsaWNlICgwLCAzKTtcbiAgICAgICAgICAgIGxldCBxdW90ZSA9IGlkLnNsaWNlICgzLCA2KTtcbiAgICAgICAgICAgIGJhc2UgPSB0aGlzLmNvbW1vbkN1cnJlbmN5Q29kZSAoYmFzZSk7XG4gICAgICAgICAgICBxdW90ZSA9IHRoaXMuY29tbW9uQ3VycmVuY3lDb2RlIChxdW90ZSk7XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gYmFzZSArICcvJyArIHF1b3RlO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2ggKHtcbiAgICAgICAgICAgICAgICAnaWQnOiBpZCxcbiAgICAgICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgICAgICdiYXNlJzogYmFzZSxcbiAgICAgICAgICAgICAgICAncXVvdGUnOiBxdW90ZSxcbiAgICAgICAgICAgICAgICAnaW5mbyc6IG1hcmtldCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZUdldEJhbGFuY2UgKCk7XG4gICAgICAgIGxldCBiYWxhbmNlcyA9IHJlc3BvbnNlWydiYWxhbmNlJ107XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogcmVzcG9uc2UgfTtcbiAgICAgICAgZm9yIChsZXQgYiA9IDA7IGIgPCBiYWxhbmNlcy5sZW5ndGg7IGIrKykge1xuICAgICAgICAgICAgbGV0IGJhbGFuY2UgPSBiYWxhbmNlc1tiXTtcbiAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IHRoaXMuY29tbW9uQ3VycmVuY3lDb2RlIChiYWxhbmNlWydhc3NldCddKTtcbiAgICAgICAgICAgIGxldCByZXNlcnZlZCA9IHBhcnNlRmxvYXQgKGJhbGFuY2VbJ3Jlc2VydmVkJ10pO1xuICAgICAgICAgICAgbGV0IHVuY29uZmlybWVkID0gcGFyc2VGbG9hdCAoYmFsYW5jZVsndW5jb25maXJtZWQnXSk7XG4gICAgICAgICAgICBsZXQgYWNjb3VudCA9IHtcbiAgICAgICAgICAgICAgICAnZnJlZSc6IHBhcnNlRmxvYXQgKGJhbGFuY2VbJ2JhbGFuY2UnXSksXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB0aGlzLnN1bSAocmVzZXJ2ZWQsIHVuY29uZmlybWVkKSxcbiAgICAgICAgICAgICAgICAndG90YWwnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYWNjb3VudFsndG90YWwnXSA9IHRoaXMuc3VtIChhY2NvdW50WydmcmVlJ10sIGFjY291bnRbJ3VzZWQnXSk7XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRPcmRlcmJvb2sgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAncGFpcic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gb3JkZXJib29rWyd0aW1lc3RhbXAnXTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdiaWRzJzogW10sXG4gICAgICAgICAgICAnYXNrcyc6IFtdLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHNpZGVzID0gWyAnYmlkcycsICdhc2tzJyBdO1xuICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IHNpZGVzLmxlbmd0aDsgcysrKSB7XG4gICAgICAgICAgICBsZXQgc2lkZSA9IHNpZGVzW3NdO1xuICAgICAgICAgICAgbGV0IG9yZGVycyA9IG9yZGVyYm9va1tzaWRlXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9yZGVyID0gb3JkZXJzW2ldO1xuICAgICAgICAgICAgICAgIGxldCBwcmljZSA9IHBhcnNlRmxvYXQgKG9yZGVyWydwcmljZSddKTtcbiAgICAgICAgICAgICAgICBsZXQgYW1vdW50ID0gcGFyc2VGbG9hdCAob3JkZXJbJ3ZvbHVtZSddKTtcbiAgICAgICAgICAgICAgICAvLyBsZXQgdGltZXN0YW1wID0gb3JkZXJbMl0gKiAxMDAwO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtzaWRlXS5wdXNoIChbIHByaWNlLCBhbW91bnQgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgcGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KSB7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aWNrZXJbJ3RpbWVzdGFtcCddO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xvdyc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2JpZCddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2FzayddKSxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdF90cmFkZSddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3JvbGxpbmdfMjRfaG91cl92b2x1bWUnXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXJzICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRUaWNrZXJzICgpO1xuICAgICAgICBsZXQgdGlja2VycyA9IHRoaXMuaW5kZXhCeSAocmVzcG9uc2VbJ3RpY2tlcnMnXSwgJ3BhaXInKTtcbiAgICAgICAgbGV0IGlkcyA9IE9iamVjdC5rZXlzICh0aWNrZXJzKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHt9O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IGlkID0gaWRzW2ldO1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IHRoaXMubWFya2V0c19ieV9pZFtpZF07XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gbWFya2V0WydzeW1ib2wnXTtcbiAgICAgICAgICAgIGxldCB0aWNrZXIgPSB0aWNrZXJzW2lkXTtcbiAgICAgICAgICAgIHJlc3VsdFtzeW1ib2xdID0gdGhpcy5wYXJzZVRpY2tlciAodGlja2VyLCBtYXJrZXQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHRpY2tlciA9IGF3YWl0IHRoaXMucHVibGljR2V0VGlja2VyICh7XG4gICAgICAgICAgICAncGFpcic6IHBbJ2lkJ10sXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVRpY2tlciAodGlja2VyLCBwKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0VHJhZGVzICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ3BhaXInOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG1ldGhvZCA9ICdwcml2YXRlUG9zdCc7XG4gICAgICAgIGxldCBvcmRlciA9IHsgJ3BhaXInOiB0aGlzLm1hcmtldElkIChtYXJrZXQpIH07XG4gICAgICAgIGlmICh0eXBlID09ICdtYXJrZXQnKSB7XG4gICAgICAgICAgICBtZXRob2QgKz0gJ01hcmtldG9yZGVyJztcbiAgICAgICAgICAgIG9yZGVyWyd0eXBlJ10gPSBzaWRlLnRvVXBwZXJDYXNlICgpO1xuICAgICAgICAgICAgaWYgKHNpZGUgPT0gJ2J1eScpXG4gICAgICAgICAgICAgICAgb3JkZXJbJ2NvdW50ZXJfdm9sdW1lJ10gPSBhbW91bnQ7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgb3JkZXJbJ2Jhc2Vfdm9sdW1lJ10gPSBhbW91bnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtZXRob2QgKz0gJ09yZGVyJztcbiAgICAgICAgICAgIG9yZGVyWyd2b2x1bWUnXSA9IGFtb3VudDtcbiAgICAgICAgICAgIG9yZGVyWydwcmljZSddID0gcHJpY2U7XG4gICAgICAgICAgICBpZiAoc2lkZSA9PSAnYnV5JylcbiAgICAgICAgICAgICAgICBvcmRlclsndHlwZSddID0gJ0JJRCc7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgb3JkZXJbJ3R5cGUnXSA9ICdBU0snO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXNbbWV0aG9kXSAodGhpcy5leHRlbmQgKG9yZGVyLCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnb3JkZXJfaWQnXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0U3RvcG9yZGVyICh7ICdvcmRlcl9pZCc6IGlkIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgJy8nICsgdGhpcy52ZXJzaW9uICsgJy8nICsgdGhpcy5pbXBsb2RlUGFyYW1zIChwYXRoLCBwYXJhbXMpO1xuICAgICAgICBsZXQgcXVlcnkgPSB0aGlzLm9taXQgKHBhcmFtcywgdGhpcy5leHRyYWN0UGFyYW1zIChwYXRoKSk7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyAocXVlcnkpLmxlbmd0aClcbiAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICBpZiAoYXBpID09ICdwcml2YXRlJykge1xuICAgICAgICAgICAgbGV0IGF1dGggPSB0aGlzLmVuY29kZSAodGhpcy5hcGlLZXkgKyAnOicgKyB0aGlzLnNlY3JldCk7XG4gICAgICAgICAgICBhdXRoID0gdGhpcy5zdHJpbmdUb0Jhc2U2NCAoYXV0aCk7XG4gICAgICAgICAgICBoZWFkZXJzID0geyAnQXV0aG9yaXphdGlvbic6ICdCYXNpYyAnICsgdGhpcy5kZWNvZGUgKGF1dGgpIH07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgICAgICBpZiAoJ2Vycm9yJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgbWVyY2FkbyA9IHtcblxuICAgICdpZCc6ICdtZXJjYWRvJyxcbiAgICAnbmFtZSc6ICdNZXJjYWRvIEJpdGNvaW4nLFxuICAgICdjb3VudHJpZXMnOiAnQlInLCAvLyBCcmF6aWxcbiAgICAncmF0ZUxpbWl0JzogMTAwMCxcbiAgICAndmVyc2lvbic6ICd2MycsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc4MzcwNjAtZTdjNTg3MTQtNjBlYS0xMWU3LTkxOTItZjA1ZTg2YWRiODNmLmpwZycsXG4gICAgICAgICdhcGknOiB7XG4gICAgICAgICAgICAncHVibGljJzogJ2h0dHBzOi8vd3d3Lm1lcmNhZG9iaXRjb2luLm5ldC9hcGknLFxuICAgICAgICAgICAgJ3ByaXZhdGUnOiAnaHR0cHM6Ly93d3cubWVyY2Fkb2JpdGNvaW4ubmV0L3RhcGknLFxuICAgICAgICB9LFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vd3d3Lm1lcmNhZG9iaXRjb2luLmNvbS5icicsXG4gICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAnaHR0cHM6Ly93d3cubWVyY2Fkb2JpdGNvaW4uY29tLmJyL2FwaS1kb2MnLFxuICAgICAgICAgICAgJ2h0dHBzOi8vd3d3Lm1lcmNhZG9iaXRjb2luLmNvbS5ici90cmFkZS1hcGknLFxuICAgICAgICBdLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbIC8vIGxhc3Qgc2xhc2ggY3JpdGljYWxcbiAgICAgICAgICAgICAgICAnb3JkZXJib29rLycsXG4gICAgICAgICAgICAgICAgJ29yZGVyYm9va19saXRlY29pbi8nLFxuICAgICAgICAgICAgICAgICd0aWNrZXIvJyxcbiAgICAgICAgICAgICAgICAndGlja2VyX2xpdGVjb2luLycsXG4gICAgICAgICAgICAgICAgJ3RyYWRlcy8nLFxuICAgICAgICAgICAgICAgICd0cmFkZXNfbGl0ZWNvaW4vJyxcbiAgICAgICAgICAgICAgICAndjIvdGlja2VyLycsXG4gICAgICAgICAgICAgICAgJ3YyL3RpY2tlcl9saXRlY29pbi8nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnY2FuY2VsX29yZGVyJyxcbiAgICAgICAgICAgICAgICAnZ2V0X2FjY291bnRfaW5mbycsXG4gICAgICAgICAgICAgICAgJ2dldF9vcmRlcicsXG4gICAgICAgICAgICAgICAgJ2dldF93aXRoZHJhd2FsJyxcbiAgICAgICAgICAgICAgICAnbGlzdF9zeXN0ZW1fbWVzc2FnZXMnLFxuICAgICAgICAgICAgICAgICdsaXN0X29yZGVycycsXG4gICAgICAgICAgICAgICAgJ2xpc3Rfb3JkZXJib29rJyxcbiAgICAgICAgICAgICAgICAncGxhY2VfYnV5X29yZGVyJyxcbiAgICAgICAgICAgICAgICAncGxhY2Vfc2VsbF9vcmRlcicsXG4gICAgICAgICAgICAgICAgJ3dpdGhkcmF3X2NvaW4nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgICdtYXJrZXRzJzoge1xuICAgICAgICAnQlRDL0JSTCc6IHsgJ2lkJzogJ0JSTEJUQycsICdzeW1ib2wnOiAnQlRDL0JSTCcsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdCUkwnLCAnc3VmZml4JzogJycgfSxcbiAgICAgICAgJ0xUQy9CUkwnOiB7ICdpZCc6ICdCUkxMVEMnLCAnc3ltYm9sJzogJ0xUQy9CUkwnLCAnYmFzZSc6ICdMVEMnLCAncXVvdGUnOiAnQlJMJywgJ3N1ZmZpeCc6ICdMaXRlY29pbicgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IG1ldGhvZCA9ICdwdWJsaWNHZXRPcmRlcmJvb2snICsgdGhpcy5jYXBpdGFsaXplIChwWydzdWZmaXgnXSk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSBhd2FpdCB0aGlzW21ldGhvZF0gKHBhcmFtcyk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdiaWRzJzogb3JkZXJib29rWydiaWRzJ10sXG4gICAgICAgICAgICAnYXNrcyc6IG9yZGVyYm9va1snYXNrcyddLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgbWV0aG9kID0gJ3B1YmxpY0dldFYyVGlja2VyJyArIHRoaXMuY2FwaXRhbGl6ZSAocFsnc3VmZml4J10pO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzW21ldGhvZF0gKCk7XG4gICAgICAgIGxldCB0aWNrZXIgPSByZXNwb25zZVsndGlja2VyJ107XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSBwYXJzZUludCAodGlja2VyWydkYXRlJ10pICogMTAwMDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2J1eSddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3NlbGwnXSksXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xhc3QnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWyd2b2wnXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IG1ldGhvZCA9ICdwdWJsaWNHZXRUcmFkZXMnICsgdGhpcy5jYXBpdGFsaXplIChwWydzdWZmaXgnXSk7XG4gICAgICAgIHJldHVybiB0aGlzW21ldGhvZF0gKHBhcmFtcyk7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RHZXRBY2NvdW50SW5mbyAoKTtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gcmVzcG9uc2VbJ2JhbGFuY2UnXTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiByZXNwb25zZSB9O1xuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IHRoaXMuY3VycmVuY2llcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gdGhpcy5jdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IGxvd2VyY2FzZSA9IGN1cnJlbmN5LnRvTG93ZXJDYXNlICgpO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChsb3dlcmNhc2UgaW4gYmFsYW5jZXMpIHtcbiAgICAgICAgICAgICAgICBhY2NvdW50WydmcmVlJ10gPSBwYXJzZUZsb2F0IChiYWxhbmNlc1tsb3dlcmNhc2VdWydhdmFpbGFibGUnXSk7XG4gICAgICAgICAgICAgICAgYWNjb3VudFsndG90YWwnXSA9IHBhcnNlRmxvYXQgKGJhbGFuY2VzW2xvd2VyY2FzZV1bJ3RvdGFsJ10pO1xuICAgICAgICAgICAgICAgIGFjY291bnRbJ3VzZWQnXSA9IGFjY291bnRbJ3RvdGFsJ10gLSBhY2NvdW50WydmcmVlJ107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBpZiAodHlwZSA9PSAnbWFya2V0JylcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyBhbGxvd3MgbGltaXQgb3JkZXJzIG9ubHknKTtcbiAgICAgICAgbGV0IG1ldGhvZCA9ICdwcml2YXRlUG9zdFBsYWNlJyArIHRoaXMuY2FwaXRhbGl6ZSAoc2lkZSkgKyAnT3JkZXInO1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAnY29pbl9wYWlyJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICdxdWFudGl0eSc6IGFtb3VudCxcbiAgICAgICAgICAgICdsaW1pdF9wcmljZSc6IHByaWNlLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzW21ldGhvZF0gKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ2lkJzogcmVzcG9uc2VbJ3Jlc3BvbnNlX2RhdGEnXVsnb3JkZXInXVsnb3JkZXJfaWQnXS50b1N0cmluZyAoKSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdENhbmNlbE9yZGVyICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ29yZGVyX2lkJzogaWQsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddW2FwaV0gKyAnLyc7XG4gICAgICAgIGlmIChhcGkgPT0gJ3B1YmxpYycpIHtcbiAgICAgICAgICAgIHVybCArPSBwYXRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdXJsICs9IHRoaXMudmVyc2lvbiArICcvJztcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCk7XG4gICAgICAgICAgICBib2R5ID0gdGhpcy51cmxlbmNvZGUgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAgICAgJ3RhcGlfbWV0aG9kJzogcGF0aCxcbiAgICAgICAgICAgICAgICAndGFwaV9ub25jZSc6IG5vbmNlLFxuICAgICAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgICAgICBsZXQgYXV0aCA9ICcvdGFwaS8nICsgdGhpcy52ZXJzaW9uICsgJy8nICsgJz8nICsgYm9keTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgICAgICAgICdUQVBJLUlEJzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ1RBUEktTUFDJzogdGhpcy5obWFjICh0aGlzLmVuY29kZSAoYXV0aCksIHRoaXMuc2VjcmV0LCAnc2hhNTEyJyksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdlcnJvcl9tZXNzYWdlJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gT0tDb2luXG4vLyBDaGluYVxuLy8gaHR0cHM6Ly93d3cub2tjb2luLmNvbS9cbi8vIGh0dHBzOi8vd3d3Lm9rY29pbi5jb20vcmVzdF9nZXRTdGFydGVkLmh0bWxcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9PS0NvaW4vd2Vic29ja2V0XG4vLyBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9va2NvaW4uY29tXG4vLyBodHRwczovL3d3dy5va2NvaW4uY25cbi8vIGh0dHBzOi8vd3d3Lm9rY29pbi5jbi9yZXN0X2dldFN0YXJ0ZWQuaHRtbFxuXG52YXIgb2tjb2luID0ge1xuXG4gICAgJ3ZlcnNpb24nOiAndjEnLFxuICAgICdyYXRlTGltaXQnOiAxMDAwLCAvLyB1cCB0byAzMDAwIHJlcXVlc3RzIHBlciA1IG1pbnV0ZXMg4omIIDYwMCByZXF1ZXN0cyBwZXIgbWludXRlIOKJiCAxMCByZXF1ZXN0cyBwZXIgc2Vjb25kIOKJiCAxMDAgbXNcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnZGVwdGgnLFxuICAgICAgICAgICAgICAgICdleGNoYW5nZV9yYXRlJyxcbiAgICAgICAgICAgICAgICAnZnV0dXJlX2RlcHRoJyxcbiAgICAgICAgICAgICAgICAnZnV0dXJlX2VzdGltYXRlZF9wcmljZScsXG4gICAgICAgICAgICAgICAgJ2Z1dHVyZV9ob2xkX2Ftb3VudCcsXG4gICAgICAgICAgICAgICAgJ2Z1dHVyZV9pbmRleCcsXG4gICAgICAgICAgICAgICAgJ2Z1dHVyZV9rbGluZScsXG4gICAgICAgICAgICAgICAgJ2Z1dHVyZV9wcmljZV9saW1pdCcsXG4gICAgICAgICAgICAgICAgJ2Z1dHVyZV90aWNrZXInLFxuICAgICAgICAgICAgICAgICdmdXR1cmVfdHJhZGVzJyxcbiAgICAgICAgICAgICAgICAna2xpbmUnLFxuICAgICAgICAgICAgICAgICdvdGNzJyxcbiAgICAgICAgICAgICAgICAndGlja2VyJyxcbiAgICAgICAgICAgICAgICAndHJhZGVzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2FjY291bnRfcmVjb3JkcycsXG4gICAgICAgICAgICAgICAgJ2JhdGNoX3RyYWRlJyxcbiAgICAgICAgICAgICAgICAnYm9ycm93X21vbmV5JyxcbiAgICAgICAgICAgICAgICAnYm9ycm93X29yZGVyX2luZm8nLFxuICAgICAgICAgICAgICAgICdib3Jyb3dzX2luZm8nLFxuICAgICAgICAgICAgICAgICdjYW5jZWxfYm9ycm93JyxcbiAgICAgICAgICAgICAgICAnY2FuY2VsX29yZGVyJyxcbiAgICAgICAgICAgICAgICAnY2FuY2VsX290Y19vcmRlcicsXG4gICAgICAgICAgICAgICAgJ2NhbmNlbF93aXRoZHJhdycsXG4gICAgICAgICAgICAgICAgJ2Z1dHVyZV9iYXRjaF90cmFkZScsXG4gICAgICAgICAgICAgICAgJ2Z1dHVyZV9jYW5jZWwnLFxuICAgICAgICAgICAgICAgICdmdXR1cmVfZGV2b2x2ZScsXG4gICAgICAgICAgICAgICAgJ2Z1dHVyZV9leHBsb3NpdmUnLFxuICAgICAgICAgICAgICAgICdmdXR1cmVfb3JkZXJfaW5mbycsXG4gICAgICAgICAgICAgICAgJ2Z1dHVyZV9vcmRlcnNfaW5mbycsXG4gICAgICAgICAgICAgICAgJ2Z1dHVyZV9wb3NpdGlvbicsXG4gICAgICAgICAgICAgICAgJ2Z1dHVyZV9wb3NpdGlvbl80Zml4JyxcbiAgICAgICAgICAgICAgICAnZnV0dXJlX3RyYWRlJyxcbiAgICAgICAgICAgICAgICAnZnV0dXJlX3RyYWRlc19oaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAnZnV0dXJlX3VzZXJpbmZvJyxcbiAgICAgICAgICAgICAgICAnZnV0dXJlX3VzZXJpbmZvXzRmaXgnLFxuICAgICAgICAgICAgICAgICdsZW5kX2RlcHRoJyxcbiAgICAgICAgICAgICAgICAnb3JkZXJfZmVlJyxcbiAgICAgICAgICAgICAgICAnb3JkZXJfaGlzdG9yeScsXG4gICAgICAgICAgICAgICAgJ29yZGVyX2luZm8nLFxuICAgICAgICAgICAgICAgICdvcmRlcnNfaW5mbycsXG4gICAgICAgICAgICAgICAgJ290Y19vcmRlcl9oaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAnb3RjX29yZGVyX2luZm8nLFxuICAgICAgICAgICAgICAgICdyZXBheW1lbnQnLFxuICAgICAgICAgICAgICAgICdzdWJtaXRfb3RjX29yZGVyJyxcbiAgICAgICAgICAgICAgICAndHJhZGUnLFxuICAgICAgICAgICAgICAgICd0cmFkZV9oaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAndHJhZGVfb3RjX29yZGVyJyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXcnLFxuICAgICAgICAgICAgICAgICd3aXRoZHJhd19pbmZvJyxcbiAgICAgICAgICAgICAgICAndW5yZXBheW1lbnRzX2luZm8nLFxuICAgICAgICAgICAgICAgICd1c2VyaW5mbycsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgdGhpcy5wdWJsaWNHZXREZXB0aCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBvcmRlcmJvb2tbJ2JpZHMnXSxcbiAgICAgICAgICAgICdhc2tzJzogdGhpcy5zb3J0QnkgKG9yZGVyYm9va1snYXNrcyddLCAwKSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRUaWNrZXIgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IHRpY2tlciA9IHJlc3BvbnNlWyd0aWNrZXInXTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHBhcnNlSW50IChyZXNwb25zZVsnZGF0ZSddKSAqIDEwMDA7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2hpZ2gnXSksXG4gICAgICAgICAgICAnbG93JzogcGFyc2VGbG9hdCAodGlja2VyWydsb3cnXSksXG4gICAgICAgICAgICAnYmlkJzogcGFyc2VGbG9hdCAodGlja2VyWydidXknXSksXG4gICAgICAgICAgICAnYXNrJzogcGFyc2VGbG9hdCAodGlja2VyWydzZWxsJ10pLFxuICAgICAgICAgICAgJ3Z3YXAnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnb3Blbic6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjbG9zZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdmaXJzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsYXN0JzogcGFyc2VGbG9hdCAodGlja2VyWydsYXN0J10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndm9sJ10pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldFRyYWRlcyAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPSExDViAobWFya2V0LCB0aW1lZnJhbWUgPSA2MCwgc2luY2UgPSB1bmRlZmluZWQsIGxpbWl0ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCBtID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0S2xpbmUgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiBtWydpZCddLFxuICAgICAgICAgICAgJ3R5cGUnOiAnMW1pbicsXG4gICAgICAgICAgICAnc2luY2UnOiBzaW5jZSxcbiAgICAgICAgICAgICdzaXplJzogcGFyc2VJbnQgKGxpbWl0KSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlT0hMQ1ZzIChtLCByZXNwb25zZSwgdGltZWZyYW1lLCBzaW5jZSwgbGltaXQpO1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0VXNlcmluZm8gKCk7XG4gICAgICAgIGxldCBiYWxhbmNlcyA9IHJlc3BvbnNlWydpbmZvJ11bJ2Z1bmRzJ107XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogcmVzcG9uc2UgfTtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCB0aGlzLmN1cnJlbmNpZXMubGVuZ3RoOyBjKyspIHtcbiAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IHRoaXMuY3VycmVuY2llc1tjXTtcbiAgICAgICAgICAgIGxldCBsb3dlcmNhc2UgPSBjdXJyZW5jeS50b0xvd2VyQ2FzZSAoKTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd1c2VkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAobG93ZXJjYXNlIGluIGJhbGFuY2VzWydmcmVlJ10pXG4gICAgICAgICAgICAgICAgYWNjb3VudFsnZnJlZSddID0gcGFyc2VGbG9hdCAoYmFsYW5jZXNbJ2ZyZWUnXVtsb3dlcmNhc2VdKTtcbiAgICAgICAgICAgIGlmIChsb3dlcmNhc2UgaW4gYmFsYW5jZXNbJ2ZyZWV6ZWQnXSlcbiAgICAgICAgICAgICAgICBhY2NvdW50Wyd1c2VkJ10gPSBwYXJzZUZsb2F0IChiYWxhbmNlc1snZnJlZXplZCddW2xvd2VyY2FzZV0pO1xuICAgICAgICAgICAgYWNjb3VudFsndG90YWwnXSA9IHRoaXMuc3VtIChhY2NvdW50WydmcmVlJ10sIGFjY291bnRbJ3VzZWQnXSk7XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAnc3ltYm9sJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICd0eXBlJzogc2lkZSxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHR5cGUgPT0gJ2xpbWl0Jykge1xuICAgICAgICAgICAgb3JkZXJbJ3ByaWNlJ10gPSBwcmljZTtcbiAgICAgICAgICAgIG9yZGVyWydhbW91bnQnXSA9IGFtb3VudDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChzaWRlID09ICdidXknKSB7XG4gICAgICAgICAgICAgICAgb3JkZXJbJ3ByaWNlJ10gPSBwYXJhbXM7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG9yZGVyWydhbW91bnQnXSA9IGFtb3VudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9yZGVyWyd0eXBlJ10gKz0gJ19tYXJrZXQnO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RUcmFkZSAodGhpcy5leHRlbmQgKG9yZGVyLCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnb3JkZXJfaWQnXS50b1N0cmluZyAoKSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdENhbmNlbE9yZGVyICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ29yZGVyX2lkJzogaWQsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSAnLycgKyAnYXBpJyArICcvJyArIHRoaXMudmVyc2lvbiArICcvJyArIHBhdGggKyAnLmRvJztcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChwYXJhbXMpLmxlbmd0aClcbiAgICAgICAgICAgICAgICB1cmwgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHBhcmFtcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgcXVlcnkgPSB0aGlzLmtleXNvcnQgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAgICAgJ2FwaV9rZXknOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICAgICAgLy8gc2VjcmV0IGtleSBtdXN0IGJlIGF0IHRoZSBlbmQgb2YgcXVlcnlcbiAgICAgICAgICAgIGxldCBxdWVyeVN0cmluZyA9IHRoaXMudXJsZW5jb2RlIChxdWVyeSkgKyAnJnNlY3JldF9rZXk9JyArIHRoaXMuc2VjcmV0O1xuICAgICAgICAgICAgcXVlcnlbJ3NpZ24nXSA9IHRoaXMuaGFzaCAodGhpcy5lbmNvZGUgKHF1ZXJ5U3RyaW5nKSkudG9VcHBlckNhc2UgKCk7XG4gICAgICAgICAgICBib2R5ID0gdGhpcy51cmxlbmNvZGUgKHF1ZXJ5KTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyB9O1xuICAgICAgICB9XG4gICAgICAgIHVybCA9IHRoaXMudXJsc1snYXBpJ10gKyB1cmw7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdyZXN1bHQnIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgaWYgKCFyZXNwb25zZVsncmVzdWx0J10pXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBva2NvaW5jbnkgPSBleHRlbmQgKG9rY29pbiwge1xuICAgICdpZCc6ICdva2NvaW5jbnknLFxuICAgICduYW1lJzogJ09LQ29pbiBDTlknLFxuICAgICdjb3VudHJpZXMnOiAnQ04nLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2NzkyLThiZTkxNTdhLTVlZTUtMTFlNy05MjZjLTZkNjliOGQzMzc4ZC5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vd3d3Lm9rY29pbi5jbicsXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly93d3cub2tjb2luLmNuJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL3d3dy5va2NvaW4uY24vcmVzdF9nZXRTdGFydGVkLmh0bWwnLFxuICAgIH0sXG4gICAgJ21hcmtldHMnOiB7XG4gICAgICAgICdCVEMvQ05ZJzogeyAnaWQnOiAnYnRjX2NueScsICdzeW1ib2wnOiAnQlRDL0NOWScsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdDTlknIH0sXG4gICAgICAgICdMVEMvQ05ZJzogeyAnaWQnOiAnbHRjX2NueScsICdzeW1ib2wnOiAnTFRDL0NOWScsICdiYXNlJzogJ0xUQycsICdxdW90ZSc6ICdDTlknIH0sXG4gICAgfSxcbn0pXG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIG9rY29pbnVzZCA9IGV4dGVuZCAob2tjb2luLCB7XG4gICAgJ2lkJzogJ29rY29pbnVzZCcsXG4gICAgJ25hbWUnOiAnT0tDb2luIFVTRCcsXG4gICAgJ2NvdW50cmllcyc6IFsgJ0NOJywgJ1VTJyBdLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2NzkxLTg5ZmZiNTAyLTVlZTUtMTFlNy04YTViLWM1OTUwYjY4YWM2NS5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vd3d3Lm9rY29pbi5jb20nLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vd3d3Lm9rY29pbi5jb20nLFxuICAgICAgICAnZG9jJzogW1xuICAgICAgICAgICAgJ2h0dHBzOi8vd3d3Lm9rY29pbi5jb20vcmVzdF9nZXRTdGFydGVkLmh0bWwnLFxuICAgICAgICAgICAgJ2h0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL29rY29pbi5jb20nLFxuICAgICAgICBdLFxuICAgIH0sXG4gICAgJ21hcmtldHMnOiB7XG4gICAgICAgICdCVEMvVVNEJzogeyAnaWQnOiAnYnRjX3VzZCcsICdzeW1ib2wnOiAnQlRDL1VTRCcsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdVU0QnIH0sXG4gICAgICAgICdMVEMvVVNEJzogeyAnaWQnOiAnbHRjX3VzZCcsICdzeW1ib2wnOiAnTFRDL1VTRCcsICdiYXNlJzogJ0xUQycsICdxdW90ZSc6ICdVU0QnIH0sXG4gICAgICAgICdFVEgvVVNEJzogeyAnaWQnOiAnZXRoX3VzZCcsICdzeW1ib2wnOiAnRVRIL1VTRCcsICdiYXNlJzogJ0VUSCcsICdxdW90ZSc6ICdVU0QnIH0sXG4gICAgICAgICdFVEMvVVNEJzogeyAnaWQnOiAnZXRjX3VzZCcsICdzeW1ib2wnOiAnRVRDL1VTRCcsICdiYXNlJzogJ0VUQycsICdxdW90ZSc6ICdVU0QnIH0sXG4gICAgfSxcbn0pXG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIG9rZXggPSBleHRlbmQgKG9rY29pbiwge1xuICAgICdpZCc6ICdva2V4JyxcbiAgICAnbmFtZSc6ICdPS0VYJyxcbiAgICAnY291bnRyaWVzJzogWyAnQ04nLCAnVVMnIF0sXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjk1NjI1OTMtOTAzOGE5YmMtODc0Mi0xMWU3LTkxY2MtODIwMWY4NDViZmMxLmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly93d3cub2tleC5jb20nLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vd3d3Lm9rZXguY29tJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL3d3dy5va2V4LmNvbS9yZXN0X2dldFN0YXJ0ZWQuaHRtbCcsXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0xUQy9CVEMnOiB7ICdpZCc6ICdsdGNfYnRjJywgJ3N5bWJvbCc6ICdMVEMvQlRDJywgJ2Jhc2UnOiAnTFRDJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ0VUSC9CVEMnOiB7ICdpZCc6ICdldGhfYnRjJywgJ3N5bWJvbCc6ICdFVEgvQlRDJywgJ2Jhc2UnOiAnRVRIJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ0VUQy9CVEMnOiB7ICdpZCc6ICdldGNfYnRjJywgJ3N5bWJvbCc6ICdFVEMvQlRDJywgJ2Jhc2UnOiAnRVRDJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ0JDSC9CVEMnOiB7ICdpZCc6ICdiY2NfYnRjJywgJ3N5bWJvbCc6ICdCQ0gvQlRDJywgJ2Jhc2UnOiAnQkNIJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICB9LFxufSlcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgcGF5bWl1bSA9IHtcblxuICAgICdpZCc6ICdwYXltaXVtJyxcbiAgICAnbmFtZSc6ICdQYXltaXVtJyxcbiAgICAnY291bnRyaWVzJzogWyAnRlInLCAnRVUnIF0sXG4gICAgJ3JhdGVMaW1pdCc6IDIwMDAsXG4gICAgJ3ZlcnNpb24nOiAndjEnLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzkwNTY0LWE5NDVhOWQ0LTVmZjktMTFlNy05ZDJkLWI2MzU3NjNmMmYyNC5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vcGF5bWl1bS5jb20vYXBpJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy5wYXltaXVtLmNvbScsXG4gICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAnaHR0cHM6Ly9naXRodWIuY29tL1BheW1pdW0vYXBpLWRvY3VtZW50YXRpb24nLFxuICAgICAgICAgICAgJ2h0dHBzOi8vd3d3LnBheW1pdW0uY29tL3BhZ2UvZGV2ZWxvcGVycycsXG4gICAgICAgIF0sXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnY291bnRyaWVzJyxcbiAgICAgICAgICAgICAgICAnZGF0YS97aWR9L3RpY2tlcicsXG4gICAgICAgICAgICAgICAgJ2RhdGEve2lkfS90cmFkZXMnLFxuICAgICAgICAgICAgICAgICdkYXRhL3tpZH0vZGVwdGgnLFxuICAgICAgICAgICAgICAgICdiaXRjb2luX2NoYXJ0cy97aWR9L3RyYWRlcycsXG4gICAgICAgICAgICAgICAgJ2JpdGNvaW5fY2hhcnRzL3tpZH0vZGVwdGgnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdtZXJjaGFudC9nZXRfcGF5bWVudC97VVVJRH0nLFxuICAgICAgICAgICAgICAgICd1c2VyJyxcbiAgICAgICAgICAgICAgICAndXNlci9hZGRyZXNzZXMnLFxuICAgICAgICAgICAgICAgICd1c2VyL2FkZHJlc3Nlcy97YnRjX2FkZHJlc3N9JyxcbiAgICAgICAgICAgICAgICAndXNlci9vcmRlcnMnLFxuICAgICAgICAgICAgICAgICd1c2VyL29yZGVycy97VVVJRH0nLFxuICAgICAgICAgICAgICAgICd1c2VyL3ByaWNlX2FsZXJ0cycsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ3VzZXIvb3JkZXJzJyxcbiAgICAgICAgICAgICAgICAndXNlci9hZGRyZXNzZXMnLFxuICAgICAgICAgICAgICAgICd1c2VyL3BheW1lbnRfcmVxdWVzdHMnLFxuICAgICAgICAgICAgICAgICd1c2VyL3ByaWNlX2FsZXJ0cycsXG4gICAgICAgICAgICAgICAgJ21lcmNoYW50L2NyZWF0ZV9wYXltZW50JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAnZGVsZXRlJzogW1xuICAgICAgICAgICAgICAgICd1c2VyL29yZGVycy97VVVJRH0vY2FuY2VsJyxcbiAgICAgICAgICAgICAgICAndXNlci9wcmljZV9hbGVydHMve2lkfScsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgJ21hcmtldHMnOiB7XG4gICAgICAgICdCVEMvRVVSJzogeyAnaWQnOiAnZXVyJywgJ3N5bWJvbCc6ICdCVEMvRVVSJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ0VVUicgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gYXdhaXQgdGhpcy5wcml2YXRlR2V0VXNlciAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiBiYWxhbmNlcyB9O1xuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IHRoaXMuY3VycmVuY2llcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gdGhpcy5jdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IGxvd2VyY2FzZSA9IGN1cnJlbmN5LnRvTG93ZXJDYXNlICgpO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGxldCBiYWxhbmNlID0gJ2JhbGFuY2VfJyArIGxvd2VyY2FzZTtcbiAgICAgICAgICAgIGxldCBsb2NrZWQgPSAnbG9ja2VkXycgKyBsb3dlcmNhc2U7XG4gICAgICAgICAgICBpZiAoYmFsYW5jZSBpbiBiYWxhbmNlcylcbiAgICAgICAgICAgICAgICBhY2NvdW50WydmcmVlJ10gPSBiYWxhbmNlc1tiYWxhbmNlXTtcbiAgICAgICAgICAgIGlmIChsb2NrZWQgaW4gYmFsYW5jZXMpXG4gICAgICAgICAgICAgICAgYWNjb3VudFsndXNlZCddID0gYmFsYW5jZXNbbG9ja2VkXTtcbiAgICAgICAgICAgIGFjY291bnRbJ3RvdGFsJ10gPSB0aGlzLnN1bSAoYWNjb3VudFsnZnJlZSddLCBhY2NvdW50Wyd1c2VkJ10pO1xuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IGF3YWl0IHRoaXMucHVibGljR2V0RGF0YUlkRGVwdGggKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnaWQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gb3JkZXJbJ3ByaWNlJ107XG4gICAgICAgICAgICAgICAgbGV0IGFtb3VudCA9IG9yZGVyWydhbW91bnQnXTtcbiAgICAgICAgICAgICAgICBsZXQgdGltZXN0YW1wID0gb3JkZXJbJ3RpbWVzdGFtcCddICogMTAwMDtcbiAgICAgICAgICAgICAgICByZXN1bHRbc2lkZV0ucHVzaCAoWyBwcmljZSwgYW1vdW50LCB0aW1lc3RhbXAgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0WydiaWRzJ10gPSB0aGlzLnNvcnRCeSAocmVzdWx0WydiaWRzJ10sIDAsIHRydWUpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGxldCB0aWNrZXIgPSBhd2FpdCB0aGlzLnB1YmxpY0dldERhdGFJZFRpY2tlciAoe1xuICAgICAgICAgICAgJ2lkJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aWNrZXJbJ2F0J10gKiAxMDAwO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydoaWdoJ10pLFxuICAgICAgICAgICAgJ2xvdyc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbG93J10pLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYmlkJ10pLFxuICAgICAgICAgICAgJ2Fzayc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYXNrJ10pLFxuICAgICAgICAgICAgJ3Z3YXAnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3Z3YXAnXSksXG4gICAgICAgICAgICAnb3Blbic6IHBhcnNlRmxvYXQgKHRpY2tlclsnb3BlbiddKSxcbiAgICAgICAgICAgICdjbG9zZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdmaXJzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsYXN0JzogcGFyc2VGbG9hdCAodGlja2VyWydwcmljZSddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndmFyaWF0aW9uJ10pLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndm9sdW1lJ10pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldERhdGFJZFRyYWRlcyAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdpZCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAndHlwZSc6IHRoaXMuY2FwaXRhbGl6ZSAodHlwZSkgKyAnT3JkZXInLFxuICAgICAgICAgICAgJ2N1cnJlbmN5JzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICdkaXJlY3Rpb24nOiBzaWRlLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IGFtb3VudCxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHR5cGUgPT0gJ21hcmtldCcpXG4gICAgICAgICAgICBvcmRlclsncHJpY2UnXSA9IHByaWNlO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0VXNlck9yZGVycyAodGhpcy5leHRlbmQgKG9yZGVyLCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsndXVpZCddLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0Q2FuY2VsT3JkZXIgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnb3JkZXJOdW1iZXInOiBpZCxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ10gKyAnLycgKyB0aGlzLnZlcnNpb24gKyAnLycgKyB0aGlzLmltcGxvZGVQYXJhbXMgKHBhdGgsIHBhcmFtcyk7XG4gICAgICAgIGxldCBxdWVyeSA9IHRoaXMub21pdCAocGFyYW1zLCB0aGlzLmV4dHJhY3RQYXJhbXMgKHBhdGgpKTtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChxdWVyeSkubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYm9keSA9IHRoaXMuanNvbiAocGFyYW1zKTtcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCkudG9TdHJpbmcgKCk7XG4gICAgICAgICAgICBsZXQgYXV0aCA9IG5vbmNlICsgdXJsICsgYm9keTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0FwaS1LZXknOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgICAgICAnQXBpLVNpZ25hdHVyZSc6IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKGF1dGgpLCB0aGlzLnNlY3JldCksXG4gICAgICAgICAgICAgICAgJ0FwaS1Ob25jZSc6IG5vbmNlLFxuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdlcnJvcnMnIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBwb2xvbmlleCA9IHtcblxuICAgICdpZCc6ICdwb2xvbmlleCcsXG4gICAgJ25hbWUnOiAnUG9sb25pZXgnLFxuICAgICdjb3VudHJpZXMnOiAnVVMnLFxuICAgICdyYXRlTGltaXQnOiA1MDAsIC8vIDYgY2FsbHMgcGVyIHNlY29uZFxuICAgICdoYXNGZXRjaFRpY2tlcnMnOiB0cnVlLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2ODE3LWU5NDU2MzEyLTVlZTYtMTFlNy05YjNjLWI2MjhjYTU2MjZhNS5qcGcnLFxuICAgICAgICAnYXBpJzoge1xuICAgICAgICAgICAgJ3B1YmxpYyc6ICdodHRwczovL3BvbG9uaWV4LmNvbS9wdWJsaWMnLFxuICAgICAgICAgICAgJ3ByaXZhdGUnOiAnaHR0cHM6Ly9wb2xvbmlleC5jb20vdHJhZGluZ0FwaScsXG4gICAgICAgIH0sXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly9wb2xvbmlleC5jb20nLFxuICAgICAgICAnZG9jJzogW1xuICAgICAgICAgICAgJ2h0dHBzOi8vcG9sb25pZXguY29tL3N1cHBvcnQvYXBpLycsXG4gICAgICAgICAgICAnaHR0cDovL3Bhc3RlYmluLmNvbS9kTVg3bVpFMCcsXG4gICAgICAgIF0sXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAncmV0dXJuMjRoVm9sdW1lJyxcbiAgICAgICAgICAgICAgICAncmV0dXJuQ2hhcnREYXRhJyxcbiAgICAgICAgICAgICAgICAncmV0dXJuQ3VycmVuY2llcycsXG4gICAgICAgICAgICAgICAgJ3JldHVybkxvYW5PcmRlcnMnLFxuICAgICAgICAgICAgICAgICdyZXR1cm5PcmRlckJvb2snLFxuICAgICAgICAgICAgICAgICdyZXR1cm5UaWNrZXInLFxuICAgICAgICAgICAgICAgICdyZXR1cm5UcmFkZUhpc3RvcnknLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnYnV5JyxcbiAgICAgICAgICAgICAgICAnY2FuY2VsTG9hbk9mZmVyJyxcbiAgICAgICAgICAgICAgICAnY2FuY2VsT3JkZXInLFxuICAgICAgICAgICAgICAgICdjbG9zZU1hcmdpblBvc2l0aW9uJyxcbiAgICAgICAgICAgICAgICAnY3JlYXRlTG9hbk9mZmVyJyxcbiAgICAgICAgICAgICAgICAnZ2VuZXJhdGVOZXdBZGRyZXNzJyxcbiAgICAgICAgICAgICAgICAnZ2V0TWFyZ2luUG9zaXRpb24nLFxuICAgICAgICAgICAgICAgICdtYXJnaW5CdXknLFxuICAgICAgICAgICAgICAgICdtYXJnaW5TZWxsJyxcbiAgICAgICAgICAgICAgICAnbW92ZU9yZGVyJyxcbiAgICAgICAgICAgICAgICAncmV0dXJuQWN0aXZlTG9hbnMnLFxuICAgICAgICAgICAgICAgICdyZXR1cm5BdmFpbGFibGVBY2NvdW50QmFsYW5jZXMnLFxuICAgICAgICAgICAgICAgICdyZXR1cm5CYWxhbmNlcycsXG4gICAgICAgICAgICAgICAgJ3JldHVybkNvbXBsZXRlQmFsYW5jZXMnLFxuICAgICAgICAgICAgICAgICdyZXR1cm5EZXBvc2l0QWRkcmVzc2VzJyxcbiAgICAgICAgICAgICAgICAncmV0dXJuRGVwb3NpdHNXaXRoZHJhd2FscycsXG4gICAgICAgICAgICAgICAgJ3JldHVybkZlZUluZm8nLFxuICAgICAgICAgICAgICAgICdyZXR1cm5MZW5kaW5nSGlzdG9yeScsXG4gICAgICAgICAgICAgICAgJ3JldHVybk1hcmdpbkFjY291bnRTdW1tYXJ5JyxcbiAgICAgICAgICAgICAgICAncmV0dXJuT3BlbkxvYW5PZmZlcnMnLFxuICAgICAgICAgICAgICAgICdyZXR1cm5PcGVuT3JkZXJzJyxcbiAgICAgICAgICAgICAgICAncmV0dXJuT3JkZXJUcmFkZXMnLFxuICAgICAgICAgICAgICAgICdyZXR1cm5UcmFkYWJsZUJhbGFuY2VzJyxcbiAgICAgICAgICAgICAgICAncmV0dXJuVHJhZGVIaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAnc2VsbCcsXG4gICAgICAgICAgICAgICAgJ3RvZ2dsZUF1dG9SZW5ldycsXG4gICAgICAgICAgICAgICAgJ3RyYW5zZmVyQmFsYW5jZScsXG4gICAgICAgICAgICAgICAgJ3dpdGhkcmF3JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoTWFya2V0cyAoKSB7XG4gICAgICAgIGxldCBtYXJrZXRzID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRSZXR1cm5UaWNrZXIgKCk7XG4gICAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMgKG1hcmtldHMpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwga2V5cy5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgbGV0IGlkID0ga2V5c1twXTtcbiAgICAgICAgICAgIGxldCBtYXJrZXQgPSBtYXJrZXRzW2lkXTtcbiAgICAgICAgICAgIGxldCBbIHF1b3RlLCBiYXNlIF0gPSBpZC5zcGxpdCAoJ18nKTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBiYXNlICsgJy8nICsgcXVvdGU7XG4gICAgICAgICAgICByZXN1bHQucHVzaCAoe1xuICAgICAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICAgICAgICAgICdzeW1ib2wnOiBzeW1ib2wsXG4gICAgICAgICAgICAgICAgJ2Jhc2UnOiBiYXNlLFxuICAgICAgICAgICAgICAgICdxdW90ZSc6IHF1b3RlLFxuICAgICAgICAgICAgICAgICdpbmZvJzogbWFya2V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdFJldHVybkNvbXBsZXRlQmFsYW5jZXMgKHtcbiAgICAgICAgICAgICdhY2NvdW50JzogJ2FsbCcsXG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGJhbGFuY2VzIH07XG4gICAgICAgIGxldCBjdXJyZW5jaWVzID0gT2JqZWN0LmtleXMgKGJhbGFuY2VzKTtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBjdXJyZW5jaWVzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBjdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IGJhbGFuY2UgPSBiYWxhbmNlc1tjdXJyZW5jeV07XG4gICAgICAgICAgICBsZXQgYWNjb3VudCA9IHtcbiAgICAgICAgICAgICAgICAnZnJlZSc6IHBhcnNlRmxvYXQgKGJhbGFuY2VbJ2F2YWlsYWJsZSddKSxcbiAgICAgICAgICAgICAgICAndXNlZCc6IHBhcnNlRmxvYXQgKGJhbGFuY2VbJ29uT3JkZXJzJ10pLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhY2NvdW50Wyd0b3RhbCddID0gdGhpcy5zdW0gKGFjY291bnRbJ2ZyZWUnXSwgYWNjb3VudFsndXNlZCddKTtcbiAgICAgICAgICAgIHJlc3VsdFtjdXJyZW5jeV0gPSBhY2NvdW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIHBhcnNlQmlkQXNrIChiaWRhc2spIHtcbiAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAoYmlkYXNrWzBdKTtcbiAgICAgICAgbGV0IGFtb3VudCA9IHBhcnNlRmxvYXQgKGJpZGFza1sxXSk7XG4gICAgICAgIHJldHVybiBbIHByaWNlLCBhbW91bnQgXTtcbiAgICB9LFxuXG4gICAgcGFyc2VCaWRBc2tzIChiaWRhc2tzKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiaWRhc2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCAodGhpcy5wYXJzZUJpZEFzayAoYmlkYXNrc1tpXSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFJldHVybk9yZGVyQm9vayAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdjdXJyZW5jeVBhaXInOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICByZXN1bHRbc2lkZV0gPSB0aGlzLnBhcnNlQmlkQXNrcyAob3JkZXJib29rW3NpZGVdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBwYXJzZVRpY2tlciAodGlja2VyLCBtYXJrZXQpIHtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydoaWdoMjRociddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdzI0aHInXSksXG4gICAgICAgICAgICAnYmlkJzogcGFyc2VGbG9hdCAodGlja2VyWydoaWdoZXN0QmlkJ10pLFxuICAgICAgICAgICAgJ2Fzayc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbG93ZXN0QXNrJ10pLFxuICAgICAgICAgICAgJ3Z3YXAnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnb3Blbic6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjbG9zZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdmaXJzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsYXN0JzogcGFyc2VGbG9hdCAodGlja2VyWydsYXN0J10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsncGVyY2VudENoYW5nZSddKSxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYmFzZVZvbHVtZSddKSxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsncXVvdGVWb2x1bWUnXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXJzICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHRpY2tlcnMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFJldHVyblRpY2tlciAoKTtcbiAgICAgICAgbGV0IGlkcyA9IE9iamVjdC5rZXlzICh0aWNrZXJzKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHt9O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IGlkID0gaWRzW2ldO1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IHRoaXMubWFya2V0c19ieV9pZFtpZF07XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gbWFya2V0WydzeW1ib2wnXTtcbiAgICAgICAgICAgIGxldCB0aWNrZXIgPSB0aWNrZXJzW2lkXTtcbiAgICAgICAgICAgIHJlc3VsdFtzeW1ib2xdID0gdGhpcy5wYXJzZVRpY2tlciAodGlja2VyLCBtYXJrZXQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG0gPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHRpY2tlcnMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFJldHVyblRpY2tlciAoKTtcbiAgICAgICAgbGV0IHRpY2tlciA9IHRpY2tlcnNbbVsnaWQnXV07XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIG0pO1xuICAgIH0sXG5cbiAgICBwYXJzZVRyYWRlICh0cmFkZSwgbWFya2V0ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLnBhcnNlODYwMSAodHJhZGVbJ2RhdGUnXSk7XG4gICAgICAgIGxldCBpZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IG9yZGVyID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoJ3RyYWRlSUQnIGluIHRyYWRlKVxuICAgICAgICAgICAgaWQgPSB0cmFkZVsndHJhZGVJRCddO1xuICAgICAgICBpZiAoJ29yZGVyTnVtYmVyJyBpbiB0cmFkZSlcbiAgICAgICAgICAgIG9yZGVyID0gdHJhZGVbJ29yZGVyTnVtYmVyJ107XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHRyYWRlLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdzeW1ib2wnOiBtYXJrZXRbJ3N5bWJvbCddLFxuICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgICAgICAnb3JkZXInOiBvcmRlcixcbiAgICAgICAgICAgICd0eXBlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3NpZGUnOiB0cmFkZVsndHlwZSddLFxuICAgICAgICAgICAgJ3ByaWNlJzogcGFyc2VGbG9hdCAodHJhZGVbJ3JhdGUnXSksXG4gICAgICAgICAgICAnYW1vdW50JzogcGFyc2VGbG9hdCAodHJhZGVbJ2Ftb3VudCddKSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG0gPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHRyYWRlcyA9IGF3YWl0IHRoaXMucHVibGljR2V0UmV0dXJuVHJhZGVIaXN0b3J5ICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2N1cnJlbmN5UGFpcic6IG1bJ2lkJ10sXG4gICAgICAgICAgICAnZW5kJzogdGhpcy5zZWNvbmRzICgpLCAvLyBsYXN0IDUwMDAwIHRyYWRlcyBieSBkZWZhdWx0XG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVRyYWRlcyAodHJhZGVzLCBtKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hNeVRyYWRlcyAobWFya2V0ID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgbm93ID0gdGhpcy5zZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVxdWVzdCA9IHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnY3VycmVuY3lQYWlyJzogJ2FsbCcsXG4gICAgICAgICAgICAnZW5kJzogdGhpcy5zZWNvbmRzICgpLCAvLyBsYXN0IDUwMDAwIHRyYWRlcyBieSBkZWZhdWx0XG4gICAgICAgIH0sIHBhcmFtcyk7XG4gICAgICAgIGlmIChtYXJrZXQpIHtcbiAgICAgICAgICAgIGxldCBtID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgICAgICByZXF1ZXN0WydjdXJyZW5jeVBhaXInXSA9IG1bJ2lkJ107XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHRyYWRlcyA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RSZXR1cm5UcmFkZUhpc3RvcnkgKHJlcXVlc3QpO1xuICAgICAgICBpZiAobWFya2V0KVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VUcmFkZXMgKHRyYWRlcywgbSk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogdHJhZGVzIH07XG4gICAgICAgIGxldCBpZHMgPSBPYmplY3Qua2V5cyAodHJhZGVzKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCBpZCA9IGlkc1tpXTtcbiAgICAgICAgICAgIGxldCB0cmFkZXMgPSB0cmFkZXNbaWRdO1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IHRoaXMubWFya2V0c19ieV9pZFtpZF07XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gbWFya2V0WydzeW1ib2wnXTtcbiAgICAgICAgICAgIHJlc3VsdFtzeW1ib2xdID0gdGhpcy5wYXJzZVRyYWRlcyAodHJhZGVzLCBtYXJrZXQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIHBhcnNlT3JkZXIgKG9yZGVyLCBtYXJrZXQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpZCc6IG9yZGVyWydvcmRlck51bWJlciddLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IG9yZGVyWyd0aW1lc3RhbXAnXSxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAob3JkZXJbJ3RpbWVzdGFtcCddKSxcbiAgICAgICAgICAgICdzdGF0dXMnOiBvcmRlclsnc3RhdHVzJ10sXG4gICAgICAgICAgICAnc3ltYm9sJzogbWFya2V0WydzeW1ib2wnXSxcbiAgICAgICAgICAgICd0eXBlJzogb3JkZXJbJ3R5cGUnXSxcbiAgICAgICAgICAgICdzaWRlJzogb3JkZXJbJ3NpZGUnXSxcbiAgICAgICAgICAgICdwcmljZSc6IG9yZGVyWydwcmljZSddLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IG9yZGVyWydhbW91bnQnXSxcbiAgICAgICAgICAgICd0cmFkZXMnOiB0aGlzLnBhcnNlVHJhZGVzIChvcmRlclsncmVzdWx0aW5nVHJhZGVzJ10sIG1hcmtldCksXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoTXlPcGVuT3JkZXJzIChtYXJrZXQgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBtID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAobWFya2V0KVxuICAgICAgICAgICAgbSA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgcGFpciA9IG0gPyBtWydpZCddIDogJ2FsbCc7XG4gICAgICAgIGxldCBvcmRlcnMgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0UmV0dXJuT3Blbk9yZGVycyAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdjdXJyZW5jeVBhaXInOiBwYWlyLFxuICAgICAgICB9KSk7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlT3JkZXJzIChvcmRlcnMsIG0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBpZiAodHlwZSA9PSAnbWFya2V0JylcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyBhbGxvd3MgbGltaXQgb3JkZXJzIG9ubHknKTtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG1ldGhvZCA9ICdwcml2YXRlUG9zdCcgKyB0aGlzLmNhcGl0YWxpemUgKHNpZGUpO1xuICAgICAgICBsZXQgbSA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzW21ldGhvZF0gKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnY3VycmVuY3lQYWlyJzogbVsnaWQnXSxcbiAgICAgICAgICAgICdyYXRlJzogcHJpY2UsXG4gICAgICAgICAgICAnYW1vdW50JzogYW1vdW50LFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgb3JkZXIgPSB0aGlzLnBhcnNlT3JkZXIgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ3N0YXR1cyc6ICdvcGVuJyxcbiAgICAgICAgICAgICd0eXBlJzogdHlwZSxcbiAgICAgICAgICAgICdzaWRlJzogc2lkZSxcbiAgICAgICAgICAgICdwcmljZSc6IHByaWNlLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IGFtb3VudCxcbiAgICAgICAgfSwgcmVzcG9uc2UpLCBtKTtcbiAgICAgICAgbGV0IGlkID0gb3JkZXJbJ2lkJ107XG4gICAgICAgIHRoaXMub3JkZXJzW2lkXSA9IG9yZGVyO1xuICAgICAgICByZXR1cm4gdGhpcy5leHRlbmQgKHsgJ2luZm8nOiByZXNwb25zZSB9LCBvcmRlcik7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXIgKGlkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBvcmRlcnMgPSBhd2FpdCB0aGlzLmZldGNoTXlPcGVuT3JkZXJzICgpO1xuICAgICAgICBsZXQgaW5kZXggPSB0aGlzLmluZGV4QnkgKG9yZGVycywgJ2lkJyk7XG4gICAgICAgIGlmIChpZCBpbiBpbmRleCkge1xuICAgICAgICAgICAgdGhpcy5vcmRlcnNbaWRdID0gaW5kZXhbaWRdO1xuICAgICAgICAgICAgcmV0dXJuIGluZGV4W2lkXTtcbiAgICAgICAgfSBlbHNlIGlmIChpZCBpbiB0aGlzLm9yZGVycykge1xuICAgICAgICAgICAgdGhpcy5vcmRlcnNbaWRdWydzdGF0dXMnXSA9ICdjbG9zZWQnO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMub3JkZXJzW2lkXTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgb3JkZXIgJyArIGlkICsgJyBub3QgZm91bmQnKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlclRyYWRlcyAoaWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCB0cmFkZXMgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0UmV0dXJuT3JkZXJUcmFkZXMgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnb3JkZXJOdW1iZXInOiBpZCxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlVHJhZGVzICh0cmFkZXMpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0Q2FuY2VsT3JkZXIgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnb3JkZXJOdW1iZXInOiBpZCxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ11bYXBpXTtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5leHRlbmQgKHsgJ2NvbW1hbmQnOiBwYXRoIH0sIHBhcmFtcyk7XG4gICAgICAgIGlmIChhcGkgPT0gJ3B1YmxpYycpIHtcbiAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcXVlcnlbJ25vbmNlJ10gPSB0aGlzLm5vbmNlICgpO1xuICAgICAgICAgICAgYm9keSA9IHRoaXMudXJsZW5jb2RlIChxdWVyeSk7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICAgICAgICAnS2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ1NpZ24nOiB0aGlzLmhtYWMgKHRoaXMuZW5jb2RlIChib2R5KSwgdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSwgJ3NoYTUxMicpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgICAgIGlmICgnZXJyb3InIGluIHJlc3BvbnNlKSB7XG4gICAgICAgICAgICBsZXQgZXJyb3IgPSB0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSk7XG4gICAgICAgICAgICBsZXQgZmFpbGVkID0gcmVzcG9uc2VbJ2Vycm9yJ10uaW5kZXhPZiAoJ05vdCBlbm91Z2gnKSA+PSAwO1xuICAgICAgICAgICAgaWYgKGZhaWxlZClcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW5zdWZmaWNpZW50RnVuZHMgKGVycm9yKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yIChlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIHF1YWRyaWdhY3ggPSB7XG5cbiAgICAnaWQnOiAncXVhZHJpZ2FjeCcsXG4gICAgJ25hbWUnOiAnUXVhZHJpZ2FDWCcsXG4gICAgJ2NvdW50cmllcyc6ICdDQScsXG4gICAgJ3JhdGVMaW1pdCc6IDEwMDAsXG4gICAgJ3ZlcnNpb24nOiAndjInLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2ODI1LTk4YTZkMGRlLTVlZTctMTFlNy05ZmE0LTM4ZTExYTJjNmY1Mi5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vYXBpLnF1YWRyaWdhY3guY29tJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy5xdWFkcmlnYWN4LmNvbScsXG4gICAgICAgICdkb2MnOiAnaHR0cHM6Ly93d3cucXVhZHJpZ2FjeC5jb20vYXBpX2luZm8nLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ29yZGVyX2Jvb2snLFxuICAgICAgICAgICAgICAgICd0aWNrZXInLFxuICAgICAgICAgICAgICAgICd0cmFuc2FjdGlvbnMnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnYmFsYW5jZScsXG4gICAgICAgICAgICAgICAgJ2JpdGNvaW5fZGVwb3NpdF9hZGRyZXNzJyxcbiAgICAgICAgICAgICAgICAnYml0Y29pbl93aXRoZHJhd2FsJyxcbiAgICAgICAgICAgICAgICAnYnV5JyxcbiAgICAgICAgICAgICAgICAnY2FuY2VsX29yZGVyJyxcbiAgICAgICAgICAgICAgICAnZXRoZXJfZGVwb3NpdF9hZGRyZXNzJyxcbiAgICAgICAgICAgICAgICAnZXRoZXJfd2l0aGRyYXdhbCcsXG4gICAgICAgICAgICAgICAgJ2xvb2t1cF9vcmRlcicsXG4gICAgICAgICAgICAgICAgJ29wZW5fb3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnc2VsbCcsXG4gICAgICAgICAgICAgICAgJ3VzZXJfdHJhbnNhY3Rpb25zJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9DQUQnOiB7ICdpZCc6ICdidGNfY2FkJywgJ3N5bWJvbCc6ICdCVEMvQ0FEJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ0NBRCcgfSxcbiAgICAgICAgJ0JUQy9VU0QnOiB7ICdpZCc6ICdidGNfdXNkJywgJ3N5bWJvbCc6ICdCVEMvVVNEJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ1VTRCcgfSxcbiAgICAgICAgJ0VUSC9CVEMnOiB7ICdpZCc6ICdldGhfYnRjJywgJ3N5bWJvbCc6ICdFVEgvQlRDJywgJ2Jhc2UnOiAnRVRIJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ0VUSC9DQUQnOiB7ICdpZCc6ICdldGhfY2FkJywgJ3N5bWJvbCc6ICdFVEgvQ0FEJywgJ2Jhc2UnOiAnRVRIJywgJ3F1b3RlJzogJ0NBRCcgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdEJhbGFuY2UgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogYmFsYW5jZXMgfTtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCB0aGlzLmN1cnJlbmNpZXMubGVuZ3RoOyBjKyspIHtcbiAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IHRoaXMuY3VycmVuY2llc1tjXTtcbiAgICAgICAgICAgIGxldCBsb3dlcmNhc2UgPSBjdXJyZW5jeS50b0xvd2VyQ2FzZSAoKTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogcGFyc2VGbG9hdCAoYmFsYW5jZXNbbG93ZXJjYXNlICsgJ19hdmFpbGFibGUnXSksXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiBwYXJzZUZsb2F0IChiYWxhbmNlc1tsb3dlcmNhc2UgKyAnX3Jlc2VydmVkJ10pLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHBhcnNlRmxvYXQgKGJhbGFuY2VzW2xvd2VyY2FzZSArICdfYmFsYW5jZSddKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRPcmRlckJvb2sgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnYm9vayc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gcGFyc2VJbnQgKG9yZGVyYm9va1sndGltZXN0YW1wJ10pICogMTAwMDtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdiaWRzJzogW10sXG4gICAgICAgICAgICAnYXNrcyc6IFtdLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHNpZGVzID0gWyAnYmlkcycsICdhc2tzJyBdO1xuICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IHNpZGVzLmxlbmd0aDsgcysrKSB7XG4gICAgICAgICAgICBsZXQgc2lkZSA9IHNpZGVzW3NdO1xuICAgICAgICAgICAgbGV0IG9yZGVycyA9IG9yZGVyYm9va1tzaWRlXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9yZGVyID0gb3JkZXJzW2ldO1xuICAgICAgICAgICAgICAgIGxldCBwcmljZSA9IHBhcnNlRmxvYXQgKG9yZGVyWzBdKTtcbiAgICAgICAgICAgICAgICBsZXQgYW1vdW50ID0gcGFyc2VGbG9hdCAob3JkZXJbMV0pO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtzaWRlXS5wdXNoIChbIHByaWNlLCBhbW91bnQgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBsZXQgdGlja2VyID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRUaWNrZXIgKHtcbiAgICAgICAgICAgICdib29rJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSBwYXJzZUludCAodGlja2VyWyd0aW1lc3RhbXAnXSkgKiAxMDAwO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydoaWdoJ10pLFxuICAgICAgICAgICAgJ2xvdyc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbG93J10pLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYmlkJ10pLFxuICAgICAgICAgICAgJ2Fzayc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYXNrJ10pLFxuICAgICAgICAgICAgJ3Z3YXAnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3Z3YXAnXSksXG4gICAgICAgICAgICAnb3Blbic6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjbG9zZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdmaXJzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsYXN0JzogcGFyc2VGbG9hdCAodGlja2VyWydsYXN0J10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndm9sdW1lJ10pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldFRyYW5zYWN0aW9ucyAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdib29rJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBtZXRob2QgPSAncHJpdmF0ZVBvc3QnICsgdGhpcy5jYXBpdGFsaXplIChzaWRlKTtcbiAgICAgICAgbGV0IG9yZGVyID0ge1xuICAgICAgICAgICAgJ2Ftb3VudCc6IGFtb3VudCxcbiAgICAgICAgICAgICdib29rJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHR5cGUgPT0gJ2xpbWl0JylcbiAgICAgICAgICAgIG9yZGVyWydwcmljZSddID0gcHJpY2U7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXNbbWV0aG9kXSAodGhpcy5leHRlbmQgKG9yZGVyLCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnaWQnXS50b1N0cmluZyAoKSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdENhbmNlbE9yZGVyICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgJy8nICsgdGhpcy52ZXJzaW9uICsgJy8nICsgcGF0aDtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChwYXJhbXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnVpZClcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXV0aGVudGljYXRpb25FcnJvciAodGhpcy5pZCArICcgcmVxdWlyZXMgYCcgKyB0aGlzLmlkICsgJy51aWRgIHByb3BlcnR5IGZvciBhdXRoZW50aWNhdGlvbicpO1xuICAgICAgICAgICAgbGV0IG5vbmNlID0gdGhpcy5ub25jZSAoKTtcbiAgICAgICAgICAgIGxldCByZXF1ZXN0ID0gWyBub25jZS50b1N0cmluZyAoKSwgdGhpcy51aWQsIHRoaXMuYXBpS2V5IF0uam9pbiAoJycpO1xuICAgICAgICAgICAgbGV0IHNpZ25hdHVyZSA9IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKHJlcXVlc3QpLCB0aGlzLmVuY29kZSAodGhpcy5zZWNyZXQpKTtcbiAgICAgICAgICAgIGxldCBxdWVyeSA9IHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAgICAgJ2tleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgICAgICdub25jZSc6IG5vbmNlLFxuICAgICAgICAgICAgICAgICdzaWduYXR1cmUnOiBzaWduYXR1cmUsXG4gICAgICAgICAgICB9LCBwYXJhbXMpO1xuICAgICAgICAgICAgYm9keSA9IHRoaXMuanNvbiAocXVlcnkpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICdDb250ZW50LUxlbmd0aCc6IGJvZHkubGVuZ3RoLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgICAgIGlmICgnZXJyb3InIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBxdW9pbmUgPSB7XG5cbiAgICAnaWQnOiAncXVvaW5lJyxcbiAgICAnbmFtZSc6ICdRVU9JTkUnLFxuICAgICdjb3VudHJpZXMnOiBbICdKUCcsICdTRycsICdWTicgXSxcbiAgICAndmVyc2lvbic6ICcyJyxcbiAgICAncmF0ZUxpbWl0JzogMTAwMCxcbiAgICAnaGFzRmV0Y2hUaWNrZXJzJzogdHJ1ZSxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yNzc2Njg0NC05NjE1YTRlOC01ZWU4LTExZTctODgxNC1mY2QwMDRkYjhjZGQuanBnJyxcbiAgICAgICAgJ2FwaSc6ICdodHRwczovL2FwaS5xdW9pbmUuY29tJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy5xdW9pbmUuY29tJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL2RldmVsb3BlcnMucXVvaW5lLmNvbScsXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAncHJvZHVjdHMnLFxuICAgICAgICAgICAgICAgICdwcm9kdWN0cy97aWR9JyxcbiAgICAgICAgICAgICAgICAncHJvZHVjdHMve2lkfS9wcmljZV9sZXZlbHMnLFxuICAgICAgICAgICAgICAgICdleGVjdXRpb25zJyxcbiAgICAgICAgICAgICAgICAnaXJfbGFkZGVycy97Y3VycmVuY3l9JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnYWNjb3VudHMvYmFsYW5jZScsXG4gICAgICAgICAgICAgICAgJ2NyeXB0b19hY2NvdW50cycsXG4gICAgICAgICAgICAgICAgJ2V4ZWN1dGlvbnMvbWUnLFxuICAgICAgICAgICAgICAgICdmaWF0X2FjY291bnRzJyxcbiAgICAgICAgICAgICAgICAnbG9hbl9iaWRzJyxcbiAgICAgICAgICAgICAgICAnbG9hbnMnLFxuICAgICAgICAgICAgICAgICdvcmRlcnMnLFxuICAgICAgICAgICAgICAgICdvcmRlcnMve2lkfScsXG4gICAgICAgICAgICAgICAgJ29yZGVycy97aWR9L3RyYWRlcycsXG4gICAgICAgICAgICAgICAgJ3RyYWRlcycsXG4gICAgICAgICAgICAgICAgJ3RyYWRlcy97aWR9L2xvYW5zJyxcbiAgICAgICAgICAgICAgICAndHJhZGluZ19hY2NvdW50cycsXG4gICAgICAgICAgICAgICAgJ3RyYWRpbmdfYWNjb3VudHMve2lkfScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2ZpYXRfYWNjb3VudHMnLFxuICAgICAgICAgICAgICAgICdsb2FuX2JpZHMnLFxuICAgICAgICAgICAgICAgICdvcmRlcnMnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICdwdXQnOiBbXG4gICAgICAgICAgICAgICAgJ2xvYW5fYmlkcy97aWR9L2Nsb3NlJyxcbiAgICAgICAgICAgICAgICAnbG9hbnMve2lkfScsXG4gICAgICAgICAgICAgICAgJ29yZGVycy97aWR9JyxcbiAgICAgICAgICAgICAgICAnb3JkZXJzL3tpZH0vY2FuY2VsJyxcbiAgICAgICAgICAgICAgICAndHJhZGVzL3tpZH0nLFxuICAgICAgICAgICAgICAgICd0cmFkZXMve2lkfS9jbG9zZScsXG4gICAgICAgICAgICAgICAgJ3RyYWRlcy9jbG9zZV9hbGwnLFxuICAgICAgICAgICAgICAgICd0cmFkaW5nX2FjY291bnRzL3tpZH0nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hNYXJrZXRzICgpIHtcbiAgICAgICAgbGV0IG1hcmtldHMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFByb2R1Y3RzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgbWFya2V0cy5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IG1hcmtldHNbcF07XG4gICAgICAgICAgICBsZXQgaWQgPSBtYXJrZXRbJ2lkJ107XG4gICAgICAgICAgICBsZXQgYmFzZSA9IG1hcmtldFsnYmFzZV9jdXJyZW5jeSddO1xuICAgICAgICAgICAgbGV0IHF1b3RlID0gbWFya2V0WydxdW90ZWRfY3VycmVuY3knXTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBiYXNlICsgJy8nICsgcXVvdGU7XG4gICAgICAgICAgICByZXN1bHQucHVzaCAoe1xuICAgICAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICAgICAgICAgICdzeW1ib2wnOiBzeW1ib2wsXG4gICAgICAgICAgICAgICAgJ2Jhc2UnOiBiYXNlLFxuICAgICAgICAgICAgICAgICdxdW90ZSc6IHF1b3RlLFxuICAgICAgICAgICAgICAgICdpbmZvJzogbWFya2V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gYXdhaXQgdGhpcy5wcml2YXRlR2V0QWNjb3VudHNCYWxhbmNlICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGJhbGFuY2VzIH07XG4gICAgICAgIGZvciAobGV0IGIgPSAwOyBiIDwgYmFsYW5jZXMubGVuZ3RoOyBiKyspIHtcbiAgICAgICAgICAgIGxldCBiYWxhbmNlID0gYmFsYW5jZXNbYl07XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBiYWxhbmNlWydjdXJyZW5jeSddO1xuICAgICAgICAgICAgbGV0IHRvdGFsID0gcGFyc2VGbG9hdCAoYmFsYW5jZVsnYmFsYW5jZSddKTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogdG90YWwsXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogdG90YWwsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IGF3YWl0IHRoaXMucHVibGljR2V0UHJvZHVjdHNJZFByaWNlTGV2ZWxzICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2lkJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdiaWRzJzogW10sXG4gICAgICAgICAgICAnYXNrcyc6IFtdLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHNpZGVzID0geyAnYmlkcyc6ICdidXlfcHJpY2VfbGV2ZWxzJywgJ2Fza3MnOiAnc2VsbF9wcmljZV9sZXZlbHMnIH07XG4gICAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMgKHNpZGVzKTtcbiAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBrZXlzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICBsZXQga2V5ID0ga2V5c1trXTtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNba2V5XTtcbiAgICAgICAgICAgIGxldCBvcmRlcnMgPSBvcmRlcmJvb2tbc2lkZV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBvcmRlciA9IG9yZGVyc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgcHJpY2UgPSBwYXJzZUZsb2F0IChvcmRlclswXSk7XG4gICAgICAgICAgICAgICAgbGV0IGFtb3VudCA9IHBhcnNlRmxvYXQgKG9yZGVyWzFdKTtcbiAgICAgICAgICAgICAgICByZXN1bHRba2V5XS5wdXNoIChbIHByaWNlLCBhbW91bnQgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgcGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KSB7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgbGV0IGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmICgnbGFzdF90cmFkZWRfcHJpY2UnIGluIHRpY2tlcikge1xuICAgICAgICAgICAgaWYgKHRpY2tlclsnbGFzdF90cmFkZWRfcHJpY2UnXSkge1xuICAgICAgICAgICAgICAgIGxldCBsZW5ndGggPSB0aWNrZXJbJ2xhc3RfdHJhZGVkX3ByaWNlJ10ubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGlmIChsZW5ndGggPiAwKVxuICAgICAgICAgICAgICAgICAgICBsYXN0ID0gcGFyc2VGbG9hdCAodGlja2VyWydsYXN0X3RyYWRlZF9wcmljZSddKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydoaWdoX21hcmtldF9hc2snXSksXG4gICAgICAgICAgICAnbG93JzogcGFyc2VGbG9hdCAodGlja2VyWydsb3dfbWFya2V0X2JpZCddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ21hcmtldF9iaWQnXSksXG4gICAgICAgICAgICAnYXNrJzogcGFyc2VGbG9hdCAodGlja2VyWydtYXJrZXRfYXNrJ10pLFxuICAgICAgICAgICAgJ3Z3YXAnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnb3Blbic6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjbG9zZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdmaXJzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsYXN0JzogbGFzdCxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbHVtZV8yNGgnXSksXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXJzICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHRpY2tlcnMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFByb2R1Y3RzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge307XG4gICAgICAgIGZvciAobGV0IHQgPSAwOyB0IDwgdGlja2Vycy5sZW5ndGg7IHQrKykge1xuICAgICAgICAgICAgbGV0IHRpY2tlciA9IHRpY2tlcnNbdF07XG4gICAgICAgICAgICBsZXQgYmFzZSA9IHRpY2tlclsnYmFzZV9jdXJyZW5jeSddO1xuICAgICAgICAgICAgbGV0IHF1b3RlID0gdGlja2VyWydxdW90ZWRfY3VycmVuY3knXTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBiYXNlICsgJy8nICsgcXVvdGU7XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gdGhpcy5tYXJrZXRzW3N5bWJvbF07XG4gICAgICAgICAgICByZXN1bHRbc3ltYm9sXSA9IHRoaXMucGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCB0aWNrZXIgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFByb2R1Y3RzSWQgKHtcbiAgICAgICAgICAgICdpZCc6IHBbJ2lkJ10sXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVRpY2tlciAodGlja2VyLCBwKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0RXhlY3V0aW9ucyAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdwcm9kdWN0X2lkJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdvcmRlcl90eXBlJzogdHlwZSxcbiAgICAgICAgICAgICdwcm9kdWN0X2lkJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICdzaWRlJzogc2lkZSxcbiAgICAgICAgICAgICdxdWFudGl0eSc6IGFtb3VudCxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHR5cGUgPT0gJ2xpbWl0JylcbiAgICAgICAgICAgIG9yZGVyWydwcmljZSddID0gcHJpY2U7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RPcmRlcnMgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnb3JkZXInOiBvcmRlcixcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ2lkJzogcmVzcG9uc2VbJ2lkJ10udG9TdHJpbmcgKCksXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJpdmF0ZVB1dE9yZGVyc0lkQ2FuY2VsICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSAnLycgKyB0aGlzLmltcGxvZGVQYXJhbXMgKHBhdGgsIHBhcmFtcyk7XG4gICAgICAgIGxldCBxdWVyeSA9IHRoaXMub21pdCAocGFyYW1zLCB0aGlzLmV4dHJhY3RQYXJhbXMgKHBhdGgpKTtcbiAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICdYLVF1b2luZS1BUEktVmVyc2lvbic6IHRoaXMudmVyc2lvbixcbiAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgIH07XG4gICAgICAgIGlmIChhcGkgPT0gJ3B1YmxpYycpIHtcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyAocXVlcnkpLmxlbmd0aClcbiAgICAgICAgICAgICAgICB1cmwgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHF1ZXJ5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCk7XG4gICAgICAgICAgICBsZXQgcmVxdWVzdCA9IHtcbiAgICAgICAgICAgICAgICAncGF0aCc6IHVybCxcbiAgICAgICAgICAgICAgICAnbm9uY2UnOiBub25jZSxcbiAgICAgICAgICAgICAgICAndG9rZW5faWQnOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgICAgICAnaWF0JzogTWF0aC5mbG9vciAobm9uY2UgLyAxMDAwKSwgLy8gaXNzdWVkIGF0XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChxdWVyeSkubGVuZ3RoKVxuICAgICAgICAgICAgICAgIGJvZHkgPSB0aGlzLmpzb24gKHF1ZXJ5KTtcbiAgICAgICAgICAgIGhlYWRlcnNbJ1gtUXVvaW5lLUF1dGgnXSA9IHRoaXMuand0IChyZXF1ZXN0LCB0aGlzLnNlY3JldCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCAodGhpcy51cmxzWydhcGknXSArIHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdtZXNzYWdlJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgc291dGh4Y2hhbmdlID0ge1xuXG4gICAgJ2lkJzogJ3NvdXRoeGNoYW5nZScsXG4gICAgJ25hbWUnOiAnU291dGhYY2hhbmdlJyxcbiAgICAnY291bnRyaWVzJzogJ0FSJywgLy8gQXJnZW50aW5hXG4gICAgJ3JhdGVMaW1pdCc6IDEwMDAsXG4gICAgJ2hhc0ZldGNoVGlja2Vycyc6IHRydWUsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc4Mzg5MTItNGY5NGVjOGEtNjBmNi0xMWU3LTllNWQtYmJmOWJkNTBhNTU5LmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly93d3cuc291dGh4Y2hhbmdlLmNvbS9hcGknLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vd3d3LnNvdXRoeGNoYW5nZS5jb20nLFxuICAgICAgICAnZG9jJzogJ2h0dHBzOi8vd3d3LnNvdXRoeGNoYW5nZS5jb20vSG9tZS9BcGknLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ21hcmtldHMnLFxuICAgICAgICAgICAgICAgICdwcmljZS97c3ltYm9sfScsXG4gICAgICAgICAgICAgICAgJ3ByaWNlcycsXG4gICAgICAgICAgICAgICAgJ2Jvb2sve3N5bWJvbH0nLFxuICAgICAgICAgICAgICAgICd0cmFkZXMve3N5bWJvbH0nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnY2FuY2VsTWFya2V0T3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnY2FuY2VsT3JkZXInLFxuICAgICAgICAgICAgICAgICdnZW5lcmF0ZW5ld2FkZHJlc3MnLFxuICAgICAgICAgICAgICAgICdsaXN0T3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnbGlzdEJhbGFuY2VzJyxcbiAgICAgICAgICAgICAgICAncGxhY2VPcmRlcicsXG4gICAgICAgICAgICAgICAgJ3dpdGhkcmF3JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoTWFya2V0cyAoKSB7XG4gICAgICAgIGxldCBtYXJrZXRzID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgbWFya2V0cy5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IG1hcmtldHNbcF07XG4gICAgICAgICAgICBsZXQgYmFzZSA9IG1hcmtldFswXTtcbiAgICAgICAgICAgIGxldCBxdW90ZSA9IG1hcmtldFsxXTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBiYXNlICsgJy8nICsgcXVvdGU7XG4gICAgICAgICAgICBsZXQgaWQgPSBzeW1ib2w7XG4gICAgICAgICAgICByZXN1bHQucHVzaCAoe1xuICAgICAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICAgICAgICAgICdzeW1ib2wnOiBzeW1ib2wsXG4gICAgICAgICAgICAgICAgJ2Jhc2UnOiBiYXNlLFxuICAgICAgICAgICAgICAgICdxdW90ZSc6IHF1b3RlLFxuICAgICAgICAgICAgICAgICdpbmZvJzogbWFya2V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdExpc3RCYWxhbmNlcyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiBiYWxhbmNlcyB9O1xuICAgICAgICBmb3IgKGxldCBiID0gMDsgYiA8IGJhbGFuY2VzLmxlbmd0aDsgYisrKSB7XG4gICAgICAgICAgICBsZXQgYmFsYW5jZSA9IGJhbGFuY2VzW2JdO1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gYmFsYW5jZVsnQ3VycmVuY3knXTtcbiAgICAgICAgICAgIGxldCB1cHBlcmNhc2UgPSBjdXJyZW5jeS51cHBlcmNhc2U7XG4gICAgICAgICAgICBsZXQgZnJlZSA9IHBhcnNlRmxvYXQgKGJhbGFuY2VbJ0F2YWlsYWJsZSddKTtcbiAgICAgICAgICAgIGxldCB1c2VkID0gcGFyc2VGbG9hdCAoYmFsYW5jZVsnVW5jb25maXJtZWQnXSk7XG4gICAgICAgICAgICBsZXQgdG90YWwgPSB0aGlzLnN1bSAoZnJlZSwgdXNlZCk7XG4gICAgICAgICAgICBsZXQgYWNjb3VudCA9IHtcbiAgICAgICAgICAgICAgICAnZnJlZSc6IGZyZWUsXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1c2VkLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHRvdGFsLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlc3VsdFtjdXJyZW5jeV0gPSBhY2NvdW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSBhd2FpdCB0aGlzLnB1YmxpY0dldEJvb2tTeW1ib2wgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnc3ltYm9sJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdiaWRzJzogW10sXG4gICAgICAgICAgICAnYXNrcyc6IFtdLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHNpZGVzID0geyAnYmlkcyc6ICdCdXlPcmRlcnMnLCAnYXNrcyc6ICdTZWxsT3JkZXJzJyB9O1xuICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzIChzaWRlcyk7XG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwga2V5cy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgbGV0IGtleSA9IGtleXNba107XG4gICAgICAgICAgICBsZXQgc2lkZSA9IHNpZGVzW2tleV07XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAob3JkZXJbJ1ByaWNlJ10pO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBwYXJzZUZsb2F0IChvcmRlclsnQW1vdW50J10pO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldLnB1c2ggKFsgcHJpY2UsIGFtb3VudCBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBwYXJzZVRpY2tlciAodGlja2VyLCBtYXJrZXQpIHtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgYmlkID0gdW5kZWZpbmVkO1xuICAgICAgICBsZXQgYXNrID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoJ0JpZCcgaW4gdGlja2VyKVxuICAgICAgICAgICAgaWYgKHRpY2tlclsnQmlkJ10pXG4gICAgICAgICAgICAgICAgYmlkID0gcGFyc2VGbG9hdCAodGlja2VyWydCaWQnXSk7XG4gICAgICAgIGlmICgnQXNrJyBpbiB0aWNrZXIpXG4gICAgICAgICAgICBpZiAodGlja2VyWydBc2snXSlcbiAgICAgICAgICAgICAgICBhc2sgPSBwYXJzZUZsb2F0ICh0aWNrZXJbJ0FzayddKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsb3cnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmlkJzogYmlkLFxuICAgICAgICAgICAgJ2Fzayc6IGFzayxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnTGFzdCddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ1ZhcmlhdGlvbjI0SHInXSksXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ1ZvbHVtZTI0SHInXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXJzICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRQcmljZXMgKCk7XG4gICAgICAgIGxldCB0aWNrZXJzID0gdGhpcy5pbmRleEJ5IChyZXNwb25zZSwgJ01hcmtldCcpO1xuICAgICAgICBsZXQgaWRzID0gT2JqZWN0LmtleXMgKHRpY2tlcnMpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge307XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgaWQgPSBpZHNbaV07XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gdGhpcy5tYXJrZXRzX2J5X2lkW2lkXTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBtYXJrZXRbJ3N5bWJvbCddO1xuICAgICAgICAgICAgbGV0IHRpY2tlciA9IHRpY2tlcnNbaWRdO1xuICAgICAgICAgICAgcmVzdWx0W3N5bWJvbF0gPSB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIG1hcmtldCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgdGlja2VyID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRQcmljZVN5bWJvbCAoe1xuICAgICAgICAgICAgJ3N5bWJvbCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVRpY2tlciAodGlja2VyLCBwKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0VHJhZGVzU3ltYm9sICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ3N5bWJvbCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAnbGlzdGluZ0N1cnJlbmN5JzogcFsnYmFzZSddLFxuICAgICAgICAgICAgJ3JlZmVyZW5jZUN1cnJlbmN5JzogcFsncXVvdGUnXSxcbiAgICAgICAgICAgICd0eXBlJzogc2lkZSxcbiAgICAgICAgICAgICdhbW91bnQnOiBhbW91bnQsXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlID09ICdsaW1pdCcpXG4gICAgICAgICAgICBvcmRlclsnbGltaXRQcmljZSddID0gcHJpY2U7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RQbGFjZU9yZGVyICh0aGlzLmV4dGVuZCAob3JkZXIsIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXNwb25zZSxcbiAgICAgICAgICAgICdpZCc6IHJlc3BvbnNlLnRvU3RyaW5nICgpLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0Q2FuY2VsT3JkZXIgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnb3JkZXJDb2RlJzogaWQsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgJy8nICsgdGhpcy5pbXBsb2RlUGFyYW1zIChwYXRoLCBwYXJhbXMpO1xuICAgICAgICBsZXQgcXVlcnkgPSB0aGlzLm9taXQgKHBhcmFtcywgdGhpcy5leHRyYWN0UGFyYW1zIChwYXRoKSk7XG4gICAgICAgIGlmIChhcGkgPT0gJ3ByaXZhdGUnKSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpO1xuICAgICAgICAgICAgcXVlcnkgPSB0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgICAgICdrZXknOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgICAgICAnbm9uY2UnOiBub25jZSxcbiAgICAgICAgICAgIH0sIHF1ZXJ5KTtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLmpzb24gKHF1ZXJ5KTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAnSGFzaCc6IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKGJvZHkpLCB0aGlzLmVuY29kZSAodGhpcy5zZWNyZXQpLCAnc2hhNTEyJyksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgLy8gaWYgKCFyZXNwb25zZSlcbiAgICAgICAgLy8gICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgc3VyYml0Y29pbiA9IGV4dGVuZCAoYmxpbmt0cmFkZSwge1xuICAgICdpZCc6ICdzdXJiaXRjb2luJyxcbiAgICAnbmFtZSc6ICdTdXJCaXRjb2luJyxcbiAgICAnY291bnRyaWVzJzogJ1ZFJyxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yNzk5MTUxMS1mMGE1MDE5NC02NDgxLTExZTctOTliNS04ZjAyOTMyNDI0Y2MuanBnJyxcbiAgICAgICAgJ2FwaSc6IHtcbiAgICAgICAgICAgICdwdWJsaWMnOiAnaHR0cHM6Ly9hcGkuYmxpbmt0cmFkZS5jb20vYXBpJyxcbiAgICAgICAgICAgICdwcml2YXRlJzogJ2h0dHBzOi8vYXBpLmJsaW5rdHJhZGUuY29tL3RhcGknLFxuICAgICAgICB9LFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vc3VyYml0Y29pbi5jb20nLFxuICAgICAgICAnZG9jJzogJ2h0dHBzOi8vYmxpbmt0cmFkZS5jb20vZG9jcycsXG4gICAgfSxcbiAgICAnY29tbWVudCc6ICdCbGlua3RyYWRlIEFQSScsXG4gICAgJ21hcmtldHMnOiB7XG4gICAgICAgICdCVEMvVkVGJzogeyAnaWQnOiAnQlRDVkVGJywgJ3N5bWJvbCc6ICdCVEMvVkVGJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ1ZFRicsICdicm9rZXJJZCc6IDEsICdicm9rZXInOiAnU3VyQml0Y29pbicgfSxcbiAgICB9LFxufSlcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgdGhlcm9jayA9IHtcblxuICAgICdpZCc6ICd0aGVyb2NrJyxcbiAgICAnbmFtZSc6ICdUaGVSb2NrVHJhZGluZycsXG4gICAgJ2NvdW50cmllcyc6ICdNVCcsXG4gICAgJ3JhdGVMaW1pdCc6IDEwMDAsXG4gICAgJ3ZlcnNpb24nOiAndjEnLFxuICAgICdoYXNGZXRjaFRpY2tlcnMnOiB0cnVlLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2ODY5LTc1MDU3ZmEyLTVlZTktMTFlNy05YTZmLTEzZTY0MWZhNDcwNy5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vYXBpLnRoZXJvY2t0cmFkaW5nLmNvbScsXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly90aGVyb2NrdHJhZGluZy5jb20nLFxuICAgICAgICAnZG9jJzogW1xuICAgICAgICAgICAgJ2h0dHBzOi8vYXBpLnRoZXJvY2t0cmFkaW5nLmNvbS9kb2MvdjEvaW5kZXguaHRtbCcsXG4gICAgICAgICAgICAnaHR0cHM6Ly9hcGkudGhlcm9ja3RyYWRpbmcuY29tL2RvYy8nLFxuICAgICAgICBdLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ2Z1bmRzL3tpZH0vb3JkZXJib29rJyxcbiAgICAgICAgICAgICAgICAnZnVuZHMve2lkfS90aWNrZXInLFxuICAgICAgICAgICAgICAgICdmdW5kcy97aWR9L3RyYWRlcycsXG4gICAgICAgICAgICAgICAgJ2Z1bmRzL3RpY2tlcnMnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdiYWxhbmNlcycsXG4gICAgICAgICAgICAgICAgJ2JhbGFuY2VzL3tpZH0nLFxuICAgICAgICAgICAgICAgICdkaXNjb3VudHMnLFxuICAgICAgICAgICAgICAgICdkaXNjb3VudHMve2lkfScsXG4gICAgICAgICAgICAgICAgJ2Z1bmRzJyxcbiAgICAgICAgICAgICAgICAnZnVuZHMve2lkfScsXG4gICAgICAgICAgICAgICAgJ2Z1bmRzL3tpZH0vdHJhZGVzJyxcbiAgICAgICAgICAgICAgICAnZnVuZHMve2Z1bmRfaWR9L29yZGVycycsXG4gICAgICAgICAgICAgICAgJ2Z1bmRzL3tmdW5kX2lkfS9vcmRlcnMve2lkfScsXG4gICAgICAgICAgICAgICAgJ2Z1bmRzL3tmdW5kX2lkfS9wb3NpdGlvbl9iYWxhbmNlcycsXG4gICAgICAgICAgICAgICAgJ2Z1bmRzL3tmdW5kX2lkfS9wb3NpdGlvbnMnLFxuICAgICAgICAgICAgICAgICdmdW5kcy97ZnVuZF9pZH0vcG9zaXRpb25zL3tpZH0nLFxuICAgICAgICAgICAgICAgICd0cmFuc2FjdGlvbnMnLFxuICAgICAgICAgICAgICAgICd0cmFuc2FjdGlvbnMve2lkfScsXG4gICAgICAgICAgICAgICAgJ3dpdGhkcmF3X2xpbWl0cy97aWR9JyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXdfbGltaXRzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnYXRtcy93aXRoZHJhdycsXG4gICAgICAgICAgICAgICAgJ2Z1bmRzL3tmdW5kX2lkfS9vcmRlcnMnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICdkZWxldGUnOiBbXG4gICAgICAgICAgICAgICAgJ2Z1bmRzL3tmdW5kX2lkfS9vcmRlcnMve2lkfScsXG4gICAgICAgICAgICAgICAgJ2Z1bmRzL3tmdW5kX2lkfS9vcmRlcnMvcmVtb3ZlX2FsbCcsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE1hcmtldHMgKCkge1xuICAgICAgICBsZXQgbWFya2V0cyA9IGF3YWl0IHRoaXMucHVibGljR2V0RnVuZHNUaWNrZXJzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgbWFya2V0c1sndGlja2VycyddLmxlbmd0aDsgcCsrKSB7XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gbWFya2V0c1sndGlja2VycyddW3BdO1xuICAgICAgICAgICAgbGV0IGlkID0gbWFya2V0WydmdW5kX2lkJ107XG4gICAgICAgICAgICBsZXQgYmFzZSA9IGlkLnNsaWNlICgwLCAzKTtcbiAgICAgICAgICAgIGxldCBxdW90ZSA9IGlkLnNsaWNlICgzLCA2KTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBiYXNlICsgJy8nICsgcXVvdGU7XG4gICAgICAgICAgICByZXN1bHQucHVzaCAoe1xuICAgICAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICAgICAgICAgICdzeW1ib2wnOiBzeW1ib2wsXG4gICAgICAgICAgICAgICAgJ2Jhc2UnOiBiYXNlLFxuICAgICAgICAgICAgICAgICdxdW90ZSc6IHF1b3RlLFxuICAgICAgICAgICAgICAgICdpbmZvJzogbWFya2V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlR2V0QmFsYW5jZXMgKCk7XG4gICAgICAgIGxldCBiYWxhbmNlcyA9IHJlc3BvbnNlWydiYWxhbmNlcyddO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IHJlc3BvbnNlIH07XG4gICAgICAgIGZvciAobGV0IGIgPSAwOyBiIDwgYmFsYW5jZXMubGVuZ3RoOyBiKyspIHtcbiAgICAgICAgICAgIGxldCBiYWxhbmNlID0gYmFsYW5jZXNbYl07XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBiYWxhbmNlWydjdXJyZW5jeSddO1xuICAgICAgICAgICAgbGV0IGZyZWUgPSBiYWxhbmNlWyd0cmFkaW5nX2JhbGFuY2UnXTtcbiAgICAgICAgICAgIGxldCB0b3RhbCA9IGJhbGFuY2VbJ2JhbGFuY2UnXTtcbiAgICAgICAgICAgIGxldCB1c2VkID0gdG90YWwgLSBmcmVlO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiBmcmVlLFxuICAgICAgICAgICAgICAgICd1c2VkJzogdXNlZCxcbiAgICAgICAgICAgICAgICAndG90YWwnOiB0b3RhbCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRGdW5kc0lkT3JkZXJib29rICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2lkJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLnBhcnNlODYwMSAob3JkZXJib29rWydkYXRlJ10pO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAob3JkZXJbJ3ByaWNlJ10pO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBwYXJzZUZsb2F0IChvcmRlclsnYW1vdW50J10pO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtzaWRlXS5wdXNoIChbIHByaWNlLCBhbW91bnQgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgcGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KSB7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLnBhcnNlODYwMSAodGlja2VyWydkYXRlJ10pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydoaWdoJ10pLFxuICAgICAgICAgICAgJ2xvdyc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbG93J10pLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYmlkJ10pLFxuICAgICAgICAgICAgJ2Fzayc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYXNrJ10pLFxuICAgICAgICAgICAgJ3Z3YXAnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnb3Blbic6IHBhcnNlRmxvYXQgKHRpY2tlclsnb3BlbiddKSxcbiAgICAgICAgICAgICdjbG9zZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsnY2xvc2UnXSksXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdCddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbHVtZV90cmFkZWQnXSksXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbHVtZSddKSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlcnMgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldEZ1bmRzVGlja2VycyAoKTtcbiAgICAgICAgbGV0IHRpY2tlcnMgPSB0aGlzLmluZGV4QnkgKHJlc3BvbnNlWyd0aWNrZXJzJ10sICdmdW5kX2lkJyk7XG4gICAgICAgIGxldCBpZHMgPSBPYmplY3Qua2V5cyAodGlja2Vycyk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7fTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCBpZCA9IGlkc1tpXTtcbiAgICAgICAgICAgIGxldCBtYXJrZXQgPSB0aGlzLm1hcmtldHNfYnlfaWRbaWRdO1xuICAgICAgICAgICAgbGV0IHN5bWJvbCA9IG1hcmtldFsnc3ltYm9sJ107XG4gICAgICAgICAgICBsZXQgdGlja2VyID0gdGlja2Vyc1tpZF07XG4gICAgICAgICAgICByZXN1bHRbc3ltYm9sXSA9IHRoaXMucGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCB0aWNrZXIgPSBhd2FpdCB0aGlzLnB1YmxpY0dldEZ1bmRzSWRUaWNrZXIgKHtcbiAgICAgICAgICAgICdpZCc6IHBbJ2lkJ10sXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVRpY2tlciAodGlja2VyLCBwKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0RnVuZHNJZFRyYWRlcyAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdpZCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBpZiAodHlwZSA9PSAnbWFya2V0JylcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyBhbGxvd3MgbGltaXQgb3JkZXJzIG9ubHknKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdEZ1bmRzRnVuZElkT3JkZXJzICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2Z1bmRfaWQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICAgICAgJ3NpZGUnOiBzaWRlLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IGFtb3VudCxcbiAgICAgICAgICAgICdwcmljZSc6IHByaWNlLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnaWQnXS50b1N0cmluZyAoKSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlRGVsZXRlRnVuZHNGdW5kSWRPcmRlcnNJZCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArICcvJyArIHRoaXMudmVyc2lvbiArICcvJyArIHRoaXMuaW1wbG9kZVBhcmFtcyAocGF0aCwgcGFyYW1zKTtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5vbWl0IChwYXJhbXMsIHRoaXMuZXh0cmFjdFBhcmFtcyAocGF0aCkpO1xuICAgICAgICBpZiAoYXBpID09ICdwcml2YXRlJykge1xuICAgICAgICAgICAgbGV0IG5vbmNlID0gdGhpcy5ub25jZSAoKS50b1N0cmluZyAoKTtcbiAgICAgICAgICAgIGxldCBhdXRoID0gbm9uY2UgKyB1cmw7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdYLVRSVC1LRVknOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgICAgICAnWC1UUlQtTk9OQ0UnOiBub25jZSxcbiAgICAgICAgICAgICAgICAnWC1UUlQtU0lHTic6IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKGF1dGgpLCB0aGlzLmVuY29kZSAodGhpcy5zZWNyZXQpLCAnc2hhNTEyJyksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChxdWVyeSkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgYm9keSA9IHRoaXMuanNvbiAocXVlcnkpO1xuICAgICAgICAgICAgICAgIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gJ2FwcGxpY2F0aW9uL2pzb24nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdlcnJvcnMnIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciB1cmR1Yml0ID0gZXh0ZW5kIChibGlua3RyYWRlLCB7XG4gICAgJ2lkJzogJ3VyZHViaXQnLFxuICAgICduYW1lJzogJ1VyZHVCaXQnLFxuICAgICdjb3VudHJpZXMnOiAnUEsnLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3OTkxNDUzLTE1NmJmM2FlLTY0ODAtMTFlNy04MmViLTcyOTVmZTFiNWJiNC5qcGcnLFxuICAgICAgICAnYXBpJzoge1xuICAgICAgICAgICAgJ3B1YmxpYyc6ICdodHRwczovL2FwaS5ibGlua3RyYWRlLmNvbS9hcGknLFxuICAgICAgICAgICAgJ3ByaXZhdGUnOiAnaHR0cHM6Ly9hcGkuYmxpbmt0cmFkZS5jb20vdGFwaScsXG4gICAgICAgIH0sXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly91cmR1Yml0LmNvbScsXG4gICAgICAgICdkb2MnOiAnaHR0cHM6Ly9ibGlua3RyYWRlLmNvbS9kb2NzJyxcbiAgICB9LFxuICAgICdjb21tZW50JzogJ0JsaW5rdHJhZGUgQVBJJyxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9QS1InOiB7ICdpZCc6ICdCVENQS1InLCAnc3ltYm9sJzogJ0JUQy9QS1InLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnUEtSJywgJ2Jyb2tlcklkJzogOCwgJ2Jyb2tlcic6ICdVcmR1Qml0JyB9LFxuICAgIH0sXG59KVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciB2YXVsdG9ybyA9IHtcblxuICAgICdpZCc6ICd2YXVsdG9ybycsXG4gICAgJ25hbWUnOiAnVmF1bHRvcm8nLFxuICAgICdjb3VudHJpZXMnOiAnQ0gnLFxuICAgICdyYXRlTGltaXQnOiAxMDAwLFxuICAgICd2ZXJzaW9uJzogJzEnLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2ODgwLWYyMDVlODcwLTVlZTktMTFlNy04ZmUyLTBkNWIxNTg4MDc1Mi5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vYXBpLnZhdWx0b3JvLmNvbScsXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly93d3cudmF1bHRvcm8uY29tJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL2FwaS52YXVsdG9yby5jb20nLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ2JpZGFuZGFzaycsXG4gICAgICAgICAgICAgICAgJ2J1eW9yZGVycycsXG4gICAgICAgICAgICAgICAgJ2xhdGVzdCcsXG4gICAgICAgICAgICAgICAgJ2xhdGVzdHRyYWRlcycsXG4gICAgICAgICAgICAgICAgJ21hcmtldHMnLFxuICAgICAgICAgICAgICAgICdvcmRlcmJvb2snLFxuICAgICAgICAgICAgICAgICdzZWxsb3JkZXJzJyxcbiAgICAgICAgICAgICAgICAndHJhbnNhY3Rpb25zL2RheScsXG4gICAgICAgICAgICAgICAgJ3RyYW5zYWN0aW9ucy9ob3VyJyxcbiAgICAgICAgICAgICAgICAndHJhbnNhY3Rpb25zL21vbnRoJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnYmFsYW5jZScsXG4gICAgICAgICAgICAgICAgJ215dHJhZGVzJyxcbiAgICAgICAgICAgICAgICAnb3JkZXJzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnYnV5L3tzeW1ib2x9L3t0eXBlfScsXG4gICAgICAgICAgICAgICAgJ2NhbmNlbC97aWR9JyxcbiAgICAgICAgICAgICAgICAnc2VsbC97c3ltYm9sfS97dHlwZX0nLFxuICAgICAgICAgICAgICAgICd3aXRoZHJhdycsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE1hcmtldHMgKCkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGxldCBtYXJrZXRzID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgbWFya2V0ID0gbWFya2V0c1snZGF0YSddO1xuICAgICAgICBsZXQgYmFzZSA9IG1hcmtldFsnQmFzZUN1cnJlbmN5J107XG4gICAgICAgIGxldCBxdW90ZSA9IG1hcmtldFsnTWFya2V0Q3VycmVuY3knXTtcbiAgICAgICAgbGV0IHN5bWJvbCA9IGJhc2UgKyAnLycgKyBxdW90ZTtcbiAgICAgICAgbGV0IGJhc2VJZCA9IGJhc2U7XG4gICAgICAgIGxldCBxdW90ZUlkID0gcXVvdGU7XG4gICAgICAgIGxldCBpZCA9IG1hcmtldFsnTWFya2V0TmFtZSddO1xuICAgICAgICByZXN1bHQucHVzaCAoe1xuICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgJ2Jhc2UnOiBiYXNlLFxuICAgICAgICAgICAgJ3F1b3RlJzogcXVvdGUsXG4gICAgICAgICAgICAnYmFzZUlkJzogYmFzZUlkLFxuICAgICAgICAgICAgJ3F1b3RlSWQnOiBxdW90ZUlkLFxuICAgICAgICAgICAgJ2luZm8nOiBtYXJrZXQsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVHZXRCYWxhbmNlICgpO1xuICAgICAgICBsZXQgYmFsYW5jZXMgPSByZXNwb25zZVsnZGF0YSddO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGJhbGFuY2VzIH07XG4gICAgICAgIGZvciAobGV0IGIgPSAwOyBiIDwgYmFsYW5jZXMubGVuZ3RoOyBiKyspIHtcbiAgICAgICAgICAgIGxldCBiYWxhbmNlID0gYmFsYW5jZXNbYl07XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBiYWxhbmNlWydjdXJyZW5jeV9jb2RlJ107XG4gICAgICAgICAgICBsZXQgdXBwZXJjYXNlID0gY3VycmVuY3kudG9VcHBlckNhc2UgKCk7XG4gICAgICAgICAgICBsZXQgZnJlZSA9IGJhbGFuY2VbJ2Nhc2gnXTtcbiAgICAgICAgICAgIGxldCB1c2VkID0gYmFsYW5jZVsncmVzZXJ2ZWQnXTtcbiAgICAgICAgICAgIGxldCB0b3RhbCA9IHRoaXMuc3VtIChmcmVlLCB1c2VkKTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogZnJlZSxcbiAgICAgICAgICAgICAgICAndXNlZCc6IHVzZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogdG90YWwsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRPcmRlcmJvb2sgKHBhcmFtcyk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IHJlc3BvbnNlWydkYXRhJ11bMF1bJ2InXSxcbiAgICAgICAgICAgICdhc2tzJzogcmVzcG9uc2VbJ2RhdGEnXVsxXVsncyddLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IFtdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaWRlcyA9IFsgJ2JpZHMnLCAnYXNrcycgXTtcbiAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBzaWRlcy5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1tzXTtcbiAgICAgICAgICAgIGxldCBvcmRlcnMgPSBvcmRlcmJvb2tbc2lkZV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBvcmRlciA9IG9yZGVyc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgcHJpY2UgPSBvcmRlclsnR29sZF9QcmljZSddO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBvcmRlclsnR29sZF9BbW91bnQnXTtcbiAgICAgICAgICAgICAgICByZXN1bHRbc2lkZV0ucHVzaCAoWyBwcmljZSwgYW1vdW50IF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlc3VsdFsnYmlkcyddID0gdGhpcy5zb3J0QnkgKHJlc3VsdFsnYmlkcyddLCAwLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcXVvdGUgPSBhd2FpdCB0aGlzLnB1YmxpY0dldEJpZGFuZGFzayAoKTtcbiAgICAgICAgbGV0IGJpZHNMZW5ndGggPSBxdW90ZVsnYmlkcyddLmxlbmd0aDtcbiAgICAgICAgbGV0IGJpZCA9IHF1b3RlWydiaWRzJ11bYmlkc0xlbmd0aCAtIDFdO1xuICAgICAgICBsZXQgYXNrID0gcXVvdGVbJ2Fza3MnXVswXTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgdGlja2VyID0gcmVzcG9uc2VbJ2RhdGEnXTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWycyNGhIaWdoJ10pLFxuICAgICAgICAgICAgJ2xvdyc6IHBhcnNlRmxvYXQgKHRpY2tlclsnMjRoTG93J10pLFxuICAgICAgICAgICAgJ2JpZCc6IGJpZFswXSxcbiAgICAgICAgICAgICdhc2snOiBhc2tbMF0sXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ0xhc3RQcmljZSddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJzI0aFZvbHVtZSddKSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wdWJsaWNHZXRUcmFuc2FjdGlvbnNEYXkgKHBhcmFtcyk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCBtZXRob2QgPSAncHJpdmF0ZVBvc3QnICsgdGhpcy5jYXBpdGFsaXplIChzaWRlKSArICdTeW1ib2xUeXBlJztcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpc1ttZXRob2RdICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ3N5bWJvbCc6IHBbJ3F1b3RlSWQnXS50b0xvd2VyQ2FzZSAoKSxcbiAgICAgICAgICAgICd0eXBlJzogdHlwZSxcbiAgICAgICAgICAgICdnbGQnOiBhbW91bnQsXG4gICAgICAgICAgICAncHJpY2UnOiBwcmljZSB8fCAxLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnZGF0YSddWydPcmRlcl9JRCddLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0Q2FuY2VsSWQgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnaWQnOiBpZCxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ10gKyAnLyc7XG4gICAgICAgIGlmIChhcGkgPT0gJ3B1YmxpYycpIHtcbiAgICAgICAgICAgIHVybCArPSBwYXRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG5vbmNlID0gdGhpcy5ub25jZSAoKTtcbiAgICAgICAgICAgIHVybCArPSB0aGlzLnZlcnNpb24gKyAnLycgKyB0aGlzLmltcGxvZGVQYXJhbXMgKHBhdGgsIHBhcmFtcyk7XG4gICAgICAgICAgICBsZXQgcXVlcnkgPSB0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgICAgICdub25jZSc6IG5vbmNlLFxuICAgICAgICAgICAgICAgICdhcGlrZXknOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgIH0sIHRoaXMub21pdCAocGFyYW1zLCB0aGlzLmV4dHJhY3RQYXJhbXMgKHBhdGgpKSk7XG4gICAgICAgICAgICB1cmwgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHF1ZXJ5KTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAnWC1TaWduYXR1cmUnOiB0aGlzLmhtYWMgKHRoaXMuZW5jb2RlICh1cmwpLCB0aGlzLmVuY29kZSAodGhpcy5zZWNyZXQpKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIHZidGMgPSBleHRlbmQgKGJsaW5rdHJhZGUsIHtcbiAgICAnaWQnOiAndmJ0YycsXG4gICAgJ25hbWUnOiAnVkJUQycsXG4gICAgJ2NvdW50cmllcyc6ICdWTicsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc5OTE0ODEtMWY1M2QxZDgtNjQ4MS0xMWU3LTg4NGUtMjFkMTdlNzkzOWRiLmpwZycsXG4gICAgICAgICdhcGknOiB7XG4gICAgICAgICAgICAncHVibGljJzogJ2h0dHBzOi8vYXBpLmJsaW5rdHJhZGUuY29tL2FwaScsXG4gICAgICAgICAgICAncHJpdmF0ZSc6ICdodHRwczovL2FwaS5ibGlua3RyYWRlLmNvbS90YXBpJyxcbiAgICAgICAgfSxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3ZidGMuZXhjaGFuZ2UnLFxuICAgICAgICAnZG9jJzogJ2h0dHBzOi8vYmxpbmt0cmFkZS5jb20vZG9jcycsXG4gICAgfSxcbiAgICAnY29tbWVudCc6ICdCbGlua3RyYWRlIEFQSScsXG4gICAgJ21hcmtldHMnOiB7XG4gICAgICAgICdCVEMvVk5EJzogeyAnaWQnOiAnQlRDVk5EJywgJ3N5bWJvbCc6ICdCVEMvVk5EJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ1ZORCcsICdicm9rZXJJZCc6IDMsICdicm9rZXInOiAnVkJUQycgfSxcbiAgICB9LFxufSlcblxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciB2aXJ3b3ggPSB7XG5cbiAgICAnaWQnOiAndmlyd294JyxcbiAgICAnbmFtZSc6ICdWaXJXb1gnLFxuICAgICdjb3VudHJpZXMnOiAnQVQnLFxuICAgICdyYXRlTGltaXQnOiAxMDAwLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2ODk0LTZkYTlkMzYwLTVlZWEtMTFlNy05MGFhLTQxZjI3MTFiNzQwNS5qcGcnLFxuICAgICAgICAnYXBpJzoge1xuICAgICAgICAgICAgJ3B1YmxpYyc6ICdodHRwOi8vYXBpLnZpcndveC5jb20vYXBpL2pzb24ucGhwJyxcbiAgICAgICAgICAgICdwcml2YXRlJzogJ2h0dHBzOi8vd3d3LnZpcndveC5jb20vYXBpL3RyYWRpbmcucGhwJyxcbiAgICAgICAgfSxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy52aXJ3b3guY29tJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL3d3dy52aXJ3b3guY29tL2RldmVsb3BlcnMucGhwJyxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdnZXRJbnN0cnVtZW50cycsXG4gICAgICAgICAgICAgICAgJ2dldEJlc3RQcmljZXMnLFxuICAgICAgICAgICAgICAgICdnZXRNYXJrZXREZXB0aCcsXG4gICAgICAgICAgICAgICAgJ2VzdGltYXRlTWFya2V0T3JkZXInLFxuICAgICAgICAgICAgICAgICdnZXRUcmFkZWRQcmljZVZvbHVtZScsXG4gICAgICAgICAgICAgICAgJ2dldFJhd1RyYWRlRGF0YScsXG4gICAgICAgICAgICAgICAgJ2dldFN0YXRpc3RpY3MnLFxuICAgICAgICAgICAgICAgICdnZXRUZXJtaW5hbExpc3QnLFxuICAgICAgICAgICAgICAgICdnZXRHcmlkTGlzdCcsXG4gICAgICAgICAgICAgICAgJ2dldEdyaWRTdGF0aXN0aWNzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnZ2V0SW5zdHJ1bWVudHMnLFxuICAgICAgICAgICAgICAgICdnZXRCZXN0UHJpY2VzJyxcbiAgICAgICAgICAgICAgICAnZ2V0TWFya2V0RGVwdGgnLFxuICAgICAgICAgICAgICAgICdlc3RpbWF0ZU1hcmtldE9yZGVyJyxcbiAgICAgICAgICAgICAgICAnZ2V0VHJhZGVkUHJpY2VWb2x1bWUnLFxuICAgICAgICAgICAgICAgICdnZXRSYXdUcmFkZURhdGEnLFxuICAgICAgICAgICAgICAgICdnZXRTdGF0aXN0aWNzJyxcbiAgICAgICAgICAgICAgICAnZ2V0VGVybWluYWxMaXN0JyxcbiAgICAgICAgICAgICAgICAnZ2V0R3JpZExpc3QnLFxuICAgICAgICAgICAgICAgICdnZXRHcmlkU3RhdGlzdGljcycsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAncHJpdmF0ZSc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ2NhbmNlbE9yZGVyJyxcbiAgICAgICAgICAgICAgICAnZ2V0QmFsYW5jZXMnLFxuICAgICAgICAgICAgICAgICdnZXRDb21taXNzaW9uRGlzY291bnQnLFxuICAgICAgICAgICAgICAgICdnZXRPcmRlcnMnLFxuICAgICAgICAgICAgICAgICdnZXRUcmFuc2FjdGlvbnMnLFxuICAgICAgICAgICAgICAgICdwbGFjZU9yZGVyJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnY2FuY2VsT3JkZXInLFxuICAgICAgICAgICAgICAgICdnZXRCYWxhbmNlcycsXG4gICAgICAgICAgICAgICAgJ2dldENvbW1pc3Npb25EaXNjb3VudCcsXG4gICAgICAgICAgICAgICAgJ2dldE9yZGVycycsXG4gICAgICAgICAgICAgICAgJ2dldFRyYW5zYWN0aW9ucycsXG4gICAgICAgICAgICAgICAgJ3BsYWNlT3JkZXInLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hNYXJrZXRzICgpIHtcbiAgICAgICAgbGV0IG1hcmtldHMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldEluc3RydW1lbnRzICgpO1xuICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzIChtYXJrZXRzWydyZXN1bHQnXSk7XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgcCA9IDA7IHAgPCBrZXlzLmxlbmd0aDsgcCsrKSB7XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gbWFya2V0c1sncmVzdWx0J11ba2V5c1twXV07XG4gICAgICAgICAgICBsZXQgaWQgPSBtYXJrZXRbJ2luc3RydW1lbnRJRCddO1xuICAgICAgICAgICAgbGV0IHN5bWJvbCA9IG1hcmtldFsnc3ltYm9sJ107XG4gICAgICAgICAgICBsZXQgYmFzZSA9IG1hcmtldFsnbG9uZ0N1cnJlbmN5J107XG4gICAgICAgICAgICBsZXQgcXVvdGUgPSBtYXJrZXRbJ3Nob3J0Q3VycmVuY3knXTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoICh7XG4gICAgICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgICAgICAgICAgJ3N5bWJvbCc6IHN5bWJvbCxcbiAgICAgICAgICAgICAgICAnYmFzZSc6IGJhc2UsXG4gICAgICAgICAgICAgICAgJ3F1b3RlJzogcXVvdGUsXG4gICAgICAgICAgICAgICAgJ2luZm8nOiBtYXJrZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0R2V0QmFsYW5jZXMgKCk7XG4gICAgICAgIGxldCBiYWxhbmNlcyA9IHJlc3BvbnNlWydyZXN1bHQnXVsnYWNjb3VudExpc3QnXTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiBiYWxhbmNlcyB9O1xuICAgICAgICBmb3IgKGxldCBiID0gMDsgYiA8IGJhbGFuY2VzLmxlbmd0aDsgYisrKSB7XG4gICAgICAgICAgICBsZXQgYmFsYW5jZSA9IGJhbGFuY2VzW2JdO1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gYmFsYW5jZVsnY3VycmVuY3knXTtcbiAgICAgICAgICAgIGxldCB0b3RhbCA9IGJhbGFuY2VbJ2JhbGFuY2UnXTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogdG90YWwsXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogdG90YWwsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCZXN0UHJpY2VzIChtYXJrZXQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljUG9zdEdldEJlc3RQcmljZXMgKHtcbiAgICAgICAgICAgICdzeW1ib2xzJzogWyB0aGlzLnN5bWJvbCAobWFya2V0KSBdLFxuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNQb3N0R2V0TWFya2V0RGVwdGggKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnc3ltYm9scyc6IFsgdGhpcy5zeW1ib2wgKG1hcmtldCkgXSxcbiAgICAgICAgICAgICdidXlEZXB0aCc6IDEwMCxcbiAgICAgICAgICAgICdzZWxsRGVwdGgnOiAxMDAsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgb3JkZXJib29rID0gcmVzcG9uc2VbJ3Jlc3VsdCddWzBdO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IFtdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaWRlcyA9IHsgJ2JpZHMnOiAnYnV5JywgJ2Fza3MnOiAnc2VsbCcgfTtcbiAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyAoc2lkZXMpO1xuICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGtleXMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgIGxldCBrZXkgPSBrZXlzW2tdO1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1trZXldO1xuICAgICAgICAgICAgbGV0IG9yZGVycyA9IG9yZGVyYm9va1tzaWRlXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9yZGVyID0gb3JkZXJzW2ldO1xuICAgICAgICAgICAgICAgIGxldCBwcmljZSA9IHBhcnNlRmxvYXQgKG9yZGVyWydwcmljZSddKTtcbiAgICAgICAgICAgICAgICBsZXQgYW1vdW50ID0gcGFyc2VGbG9hdCAob3JkZXJbJ3ZvbHVtZSddKTtcbiAgICAgICAgICAgICAgICByZXN1bHRba2V5XS5wdXNoIChbIHByaWNlLCBhbW91bnQgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgZW5kID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCBzdGFydCA9IGVuZCAtIDg2NDAwMDAwO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFRyYWRlZFByaWNlVm9sdW1lICh7XG4gICAgICAgICAgICAnaW5zdHJ1bWVudCc6IHRoaXMuc3ltYm9sIChtYXJrZXQpLFxuICAgICAgICAgICAgJ2VuZERhdGUnOiB0aGlzLnl5eXltbWRkaGhtbXNzIChlbmQpLFxuICAgICAgICAgICAgJ3N0YXJ0RGF0ZSc6IHRoaXMueXl5eW1tZGRoaG1tc3MgKHN0YXJ0KSxcbiAgICAgICAgICAgICdITE9DJzogMSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aWNrZXJzID0gcmVzcG9uc2VbJ3Jlc3VsdCddWydwcmljZVZvbHVtZUxpc3QnXTtcbiAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyAodGlja2Vycyk7XG4gICAgICAgIGxldCBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgbGV0IGxhc3RLZXkgPSBrZXlzW2xlbmd0aCAtIDFdO1xuICAgICAgICBsZXQgdGlja2VyID0gdGlja2Vyc1tsYXN0S2V5XTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydoaWdoJ10pLFxuICAgICAgICAgICAgJ2xvdyc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbG93J10pLFxuICAgICAgICAgICAgJ2JpZCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhc2snOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogcGFyc2VGbG9hdCAodGlja2VyWydvcGVuJ10pLFxuICAgICAgICAgICAgJ2Nsb3NlJzogcGFyc2VGbG9hdCAodGlja2VyWydjbG9zZSddKSxcbiAgICAgICAgICAgICdmaXJzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsYXN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbG9uZ1ZvbHVtZSddKSxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsnc2hvcnRWb2x1bWUnXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0UmF3VHJhZGVEYXRhKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnaW5zdHJ1bWVudCc6IHRoaXMuc3ltYm9sIChtYXJrZXQpLFxuICAgICAgICAgICAgJ3RpbWVzcGFuJzogMzYwMCxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdpbnN0cnVtZW50JzogdGhpcy5zeW1ib2wgKG1hcmtldCksXG4gICAgICAgICAgICAnb3JkZXJUeXBlJzogc2lkZS50b1VwcGVyQ2FzZSAoKSxcbiAgICAgICAgICAgICdhbW91bnQnOiBhbW91bnQsXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlID09ICdsaW1pdCcpXG4gICAgICAgICAgICBvcmRlclsncHJpY2UnXSA9IHByaWNlO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0UGxhY2VPcmRlciAodGhpcy5leHRlbmQgKG9yZGVyLCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnb3JkZXJJRCddLnRvU3RyaW5nICgpLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0Q2FuY2VsT3JkZXIgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnb3JkZXJJRCc6IGlkLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXVthcGldO1xuICAgICAgICBsZXQgYXV0aCA9IHt9O1xuICAgICAgICBpZiAoYXBpID09ICdwcml2YXRlJykge1xuICAgICAgICAgICAgYXV0aFsna2V5J10gPSB0aGlzLmFwaUtleTtcbiAgICAgICAgICAgIGF1dGhbJ3VzZXInXSA9IHRoaXMubG9naW47XG4gICAgICAgICAgICBhdXRoWydwYXNzJ10gPSB0aGlzLnBhc3N3b3JkO1xuICAgICAgICB9XG4gICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCk7XG4gICAgICAgIGlmIChtZXRob2QgPT0gJ0dFVCcpIHtcbiAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICAgICAnbWV0aG9kJzogcGF0aCxcbiAgICAgICAgICAgICAgICAnaWQnOiBub25jZSxcbiAgICAgICAgICAgIH0sIGF1dGgsIHBhcmFtcykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaGVhZGVycyA9IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9O1xuICAgICAgICAgICAgYm9keSA9IHRoaXMuanNvbiAoe1xuICAgICAgICAgICAgICAgICdtZXRob2QnOiBwYXRoLFxuICAgICAgICAgICAgICAgICdwYXJhbXMnOiB0aGlzLmV4dGVuZCAoYXV0aCwgcGFyYW1zKSxcbiAgICAgICAgICAgICAgICAnaWQnOiBub25jZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdlcnJvcicgaW4gcmVzcG9uc2UpXG4gICAgICAgICAgICBpZiAocmVzcG9uc2VbJ2Vycm9yJ10pXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciB4YnRjZSA9IHtcblxuICAgICdpZCc6ICd4YnRjZScsXG4gICAgJ25hbWUnOiAneEJUQ2UnLFxuICAgICdjb3VudHJpZXMnOiAnUlUnLFxuICAgICdyYXRlTGltaXQnOiAyMDAwLCAvLyByZXNwb25zZXMgYXJlIGNhY2hlZCBldmVyeSAyIHNlY29uZHNcbiAgICAndmVyc2lvbic6ICd2MScsXG4gICAgJ2hhc0ZldGNoVGlja2Vycyc6IHRydWUsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjgwNTk0MTQtZTIzNTk3MGMtNjYyYy0xMWU3LThjM2EtMDhlMzFmNzg2ODRiLmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly9jcnlwdG90dGxpdmV3ZWJhcGkueGJ0Y2UubmV0Ojg0NDMvYXBpJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy54YnRjZS5jb20nLFxuICAgICAgICAnZG9jJzogW1xuICAgICAgICAgICAgJ2h0dHBzOi8vd3d3LnhidGNlLmNvbS90cmFkZWFwaScsXG4gICAgICAgICAgICAnaHR0cHM6Ly9zdXBwb3J0LnhidGNlLmluZm8vS25vd2xlZGdlYmFzZS9BcnRpY2xlL1ZpZXcvNTIvMjUveGJ0Y2UtZXhjaGFuZ2UtYXBpJyxcbiAgICAgICAgXSxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdjdXJyZW5jeScsXG4gICAgICAgICAgICAgICAgJ2N1cnJlbmN5L3tmaWx0ZXJ9JyxcbiAgICAgICAgICAgICAgICAnbGV2ZWwyJyxcbiAgICAgICAgICAgICAgICAnbGV2ZWwyL3tmaWx0ZXJ9JyxcbiAgICAgICAgICAgICAgICAncXVvdGVoaXN0b3J5L3tzeW1ib2x9L3twZXJpb2RpY2l0eX0vYmFycy9hc2snLFxuICAgICAgICAgICAgICAgICdxdW90ZWhpc3Rvcnkve3N5bWJvbH0ve3BlcmlvZGljaXR5fS9iYXJzL2JpZCcsXG4gICAgICAgICAgICAgICAgJ3F1b3RlaGlzdG9yeS97c3ltYm9sfS9sZXZlbDInLFxuICAgICAgICAgICAgICAgICdxdW90ZWhpc3Rvcnkve3N5bWJvbH0vdGlja3MnLFxuICAgICAgICAgICAgICAgICdzeW1ib2wnLFxuICAgICAgICAgICAgICAgICdzeW1ib2wve2ZpbHRlcn0nLFxuICAgICAgICAgICAgICAgICd0aWNrJyxcbiAgICAgICAgICAgICAgICAndGljay97ZmlsdGVyfScsXG4gICAgICAgICAgICAgICAgJ3RpY2tlcicsXG4gICAgICAgICAgICAgICAgJ3RpY2tlci97ZmlsdGVyfScsXG4gICAgICAgICAgICAgICAgJ3RyYWRlc2Vzc2lvbicsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAncHJpdmF0ZSc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ3RyYWRlc2VydmVyaW5mbycsXG4gICAgICAgICAgICAgICAgJ3RyYWRlc2Vzc2lvbicsXG4gICAgICAgICAgICAgICAgJ2N1cnJlbmN5JyxcbiAgICAgICAgICAgICAgICAnY3VycmVuY3kve2ZpbHRlcn0nLFxuICAgICAgICAgICAgICAgICdsZXZlbDInLFxuICAgICAgICAgICAgICAgICdsZXZlbDIve2ZpbHRlcn0nLFxuICAgICAgICAgICAgICAgICdzeW1ib2wnLFxuICAgICAgICAgICAgICAgICdzeW1ib2wve2ZpbHRlcn0nLFxuICAgICAgICAgICAgICAgICd0aWNrJyxcbiAgICAgICAgICAgICAgICAndGljay97ZmlsdGVyfScsXG4gICAgICAgICAgICAgICAgJ2FjY291bnQnLFxuICAgICAgICAgICAgICAgICdhc3NldCcsXG4gICAgICAgICAgICAgICAgJ2Fzc2V0L3tpZH0nLFxuICAgICAgICAgICAgICAgICdwb3NpdGlvbicsXG4gICAgICAgICAgICAgICAgJ3Bvc2l0aW9uL3tpZH0nLFxuICAgICAgICAgICAgICAgICd0cmFkZScsXG4gICAgICAgICAgICAgICAgJ3RyYWRlL3tpZH0nLFxuICAgICAgICAgICAgICAgICdxdW90ZWhpc3Rvcnkve3N5bWJvbH0ve3BlcmlvZGljaXR5fS9iYXJzL2FzaycsXG4gICAgICAgICAgICAgICAgJ3F1b3RlaGlzdG9yeS97c3ltYm9sfS97cGVyaW9kaWNpdHl9L2JhcnMvYXNrL2luZm8nLFxuICAgICAgICAgICAgICAgICdxdW90ZWhpc3Rvcnkve3N5bWJvbH0ve3BlcmlvZGljaXR5fS9iYXJzL2JpZCcsXG4gICAgICAgICAgICAgICAgJ3F1b3RlaGlzdG9yeS97c3ltYm9sfS97cGVyaW9kaWNpdHl9L2JhcnMvYmlkL2luZm8nLFxuICAgICAgICAgICAgICAgICdxdW90ZWhpc3Rvcnkve3N5bWJvbH0vbGV2ZWwyJyxcbiAgICAgICAgICAgICAgICAncXVvdGVoaXN0b3J5L3tzeW1ib2x9L2xldmVsMi9pbmZvJyxcbiAgICAgICAgICAgICAgICAncXVvdGVoaXN0b3J5L3tzeW1ib2x9L3BlcmlvZGljaXRpZXMnLFxuICAgICAgICAgICAgICAgICdxdW90ZWhpc3Rvcnkve3N5bWJvbH0vdGlja3MnLFxuICAgICAgICAgICAgICAgICdxdW90ZWhpc3Rvcnkve3N5bWJvbH0vdGlja3MvaW5mbycsXG4gICAgICAgICAgICAgICAgJ3F1b3RlaGlzdG9yeS9jYWNoZS97c3ltYm9sfS97cGVyaW9kaWNpdHl9L2JhcnMvYXNrJyxcbiAgICAgICAgICAgICAgICAncXVvdGVoaXN0b3J5L2NhY2hlL3tzeW1ib2x9L3twZXJpb2RpY2l0eX0vYmFycy9iaWQnLFxuICAgICAgICAgICAgICAgICdxdW90ZWhpc3RvcnkvY2FjaGUve3N5bWJvbH0vbGV2ZWwyJyxcbiAgICAgICAgICAgICAgICAncXVvdGVoaXN0b3J5L2NhY2hlL3tzeW1ib2x9L3RpY2tzJyxcbiAgICAgICAgICAgICAgICAncXVvdGVoaXN0b3J5L3N5bWJvbHMnLFxuICAgICAgICAgICAgICAgICdxdW90ZWhpc3RvcnkvdmVyc2lvbicsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ3RyYWRlJyxcbiAgICAgICAgICAgICAgICAndHJhZGVoaXN0b3J5JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAncHV0JzogW1xuICAgICAgICAgICAgICAgICd0cmFkZScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ2RlbGV0ZSc6IFtcbiAgICAgICAgICAgICAgICAndHJhZGUnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hNYXJrZXRzICgpIHtcbiAgICAgICAgbGV0IG1hcmtldHMgPSBhd2FpdCB0aGlzLnByaXZhdGVHZXRTeW1ib2wgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgcCA9IDA7IHAgPCBtYXJrZXRzLmxlbmd0aDsgcCsrKSB7XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gbWFya2V0c1twXTtcbiAgICAgICAgICAgIGxldCBpZCA9IG1hcmtldFsnU3ltYm9sJ107XG4gICAgICAgICAgICBsZXQgYmFzZSA9IG1hcmtldFsnTWFyZ2luQ3VycmVuY3knXTtcbiAgICAgICAgICAgIGxldCBxdW90ZSA9IG1hcmtldFsnUHJvZml0Q3VycmVuY3knXTtcbiAgICAgICAgICAgIGlmIChiYXNlID09ICdEU0gnKVxuICAgICAgICAgICAgICAgIGJhc2UgPSAnREFTSCc7XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gYmFzZSArICcvJyArIHF1b3RlO1xuICAgICAgICAgICAgc3ltYm9sID0gbWFya2V0WydJc1RyYWRlQWxsb3dlZCddID8gc3ltYm9sIDogaWQ7XG4gICAgICAgICAgICByZXN1bHQucHVzaCAoe1xuICAgICAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICAgICAgICAgICdzeW1ib2wnOiBzeW1ib2wsXG4gICAgICAgICAgICAgICAgJ2Jhc2UnOiBiYXNlLFxuICAgICAgICAgICAgICAgICdxdW90ZSc6IHF1b3RlLFxuICAgICAgICAgICAgICAgICdpbmZvJzogbWFya2V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gYXdhaXQgdGhpcy5wcml2YXRlR2V0QXNzZXQgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogYmFsYW5jZXMgfTtcbiAgICAgICAgZm9yIChsZXQgYiA9IDA7IGIgPCBiYWxhbmNlcy5sZW5ndGg7IGIrKykge1xuICAgICAgICAgICAgbGV0IGJhbGFuY2UgPSBiYWxhbmNlc1tiXTtcbiAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IGJhbGFuY2VbJ0N1cnJlbmN5J107XG4gICAgICAgICAgICBsZXQgdXBwZXJjYXNlID0gY3VycmVuY3kudG9VcHBlckNhc2UgKCk7XG4gICAgICAgICAgICAvLyB4YnRjZSBuYW1lcyBEQVNIIGluY29ycmVjdGx5IGFzIERTSFxuICAgICAgICAgICAgaWYgKHVwcGVyY2FzZSA9PSAnRFNIJylcbiAgICAgICAgICAgICAgICB1cHBlcmNhc2UgPSAnREFTSCc7XG4gICAgICAgICAgICBsZXQgdG90YWwgPSBiYWxhbmNlWydiYWxhbmNlJ107XG4gICAgICAgICAgICBsZXQgYWNjb3VudCA9IHtcbiAgICAgICAgICAgICAgICAnZnJlZSc6IGJhbGFuY2VbJ0ZyZWVBbW91bnQnXSxcbiAgICAgICAgICAgICAgICAndXNlZCc6IGJhbGFuY2VbJ0xvY2tlZEFtb3VudCddLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IGJhbGFuY2VbJ0Ftb3VudCddLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlc3VsdFt1cHBlcmNhc2VdID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgdGhpcy5wcml2YXRlR2V0TGV2ZWwyRmlsdGVyICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2ZpbHRlcic6IHBbJ2lkJ10sXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBvcmRlcmJvb2sgPSBvcmRlcmJvb2tbMF07XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSBvcmRlcmJvb2tbJ1RpbWVzdGFtcCddO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICBsZXQgU2lkZSA9IHRoaXMuY2FwaXRhbGl6ZSAoc2lkZSk7XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW1NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAob3JkZXJbJ1ByaWNlJ10pO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBwYXJzZUZsb2F0IChvcmRlclsnVm9sdW1lJ10pO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtzaWRlXS5wdXNoIChbIHByaWNlLCBhbW91bnQgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgcGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KSB7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSAwO1xuICAgICAgICBsZXQgbGFzdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKCdMYXN0QnV5VGltZXN0YW1wJyBpbiB0aWNrZXIpXG4gICAgICAgICAgICBpZiAodGltZXN0YW1wIDwgdGlja2VyWydMYXN0QnV5VGltZXN0YW1wJ10pIHtcbiAgICAgICAgICAgICAgICB0aW1lc3RhbXAgPSB0aWNrZXJbJ0xhc3RCdXlUaW1lc3RhbXAnXTtcbiAgICAgICAgICAgICAgICBsYXN0ID0gdGlja2VyWydMYXN0QnV5UHJpY2UnXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgaWYgKCdMYXN0U2VsbFRpbWVzdGFtcCcgaW4gdGlja2VyKVxuICAgICAgICAgICAgaWYgKHRpbWVzdGFtcCA8IHRpY2tlclsnTGFzdFNlbGxUaW1lc3RhbXAnXSkge1xuICAgICAgICAgICAgICAgIHRpbWVzdGFtcCA9IHRpY2tlclsnTGFzdFNlbGxUaW1lc3RhbXAnXTtcbiAgICAgICAgICAgICAgICBsYXN0ID0gdGlja2VyWydMYXN0U2VsbFByaWNlJ107XG4gICAgICAgICAgICB9XG4gICAgICAgIGlmICghdGltZXN0YW1wKVxuICAgICAgICAgICAgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiB0aWNrZXJbJ0RhaWx5QmVzdEJ1eVByaWNlJ10sXG4gICAgICAgICAgICAnbG93JzogdGlja2VyWydEYWlseUJlc3RTZWxsUHJpY2UnXSxcbiAgICAgICAgICAgICdiaWQnOiB0aWNrZXJbJ0Jlc3RCaWQnXSxcbiAgICAgICAgICAgICdhc2snOiB0aWNrZXJbJ0Jlc3RBc2snXSxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IGxhc3QsXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogdGlja2VyWydEYWlseVRyYWRlZFRvdGFsVm9sdW1lJ10sXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXJzICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHRpY2tlcnMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFRpY2tlciAoKTtcbiAgICAgICAgdGlja2VycyA9IHRoaXMuaW5kZXhCeSAodGlja2VycywgJ1N5bWJvbCcpO1xuICAgICAgICBsZXQgaWRzID0gT2JqZWN0LmtleXMgKHRpY2tlcnMpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge307XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgaWQgPSBpZHNbaV07XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgbGV0IHN5bWJvbCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmIChpZCBpbiB0aGlzLm1hcmtldHNfYnlfaWQpIHtcbiAgICAgICAgICAgICAgICBtYXJrZXQgPSB0aGlzLm1hcmtldHNfYnlfaWRbaWRdO1xuICAgICAgICAgICAgICAgIHN5bWJvbCA9IG1hcmtldFsnc3ltYm9sJ107XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCBiYXNlID0gaWQuc2xpY2UgKDAsIDMpO1xuICAgICAgICAgICAgICAgIGxldCBxdW90ZSA9IGlkLnNsaWNlICgzLCA2KTtcbiAgICAgICAgICAgICAgICBpZiAoYmFzZSA9PSAnRFNIJylcbiAgICAgICAgICAgICAgICAgICAgYmFzZSA9ICdEQVNIJztcbiAgICAgICAgICAgICAgICBpZiAocXVvdGUgPT0gJ0RTSCcpXG4gICAgICAgICAgICAgICAgICAgIHF1b3RlID0gJ0RBU0gnO1xuICAgICAgICAgICAgICAgIHN5bWJvbCA9IGJhc2UgKyAnLycgKyBxdW90ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCB0aWNrZXIgPSB0aWNrZXJzW2lkXTtcbiAgICAgICAgICAgIHJlc3VsdFtzeW1ib2xdID0gdGhpcy5wYXJzZVRpY2tlciAodGlja2VyLCBtYXJrZXQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHRpY2tlcnMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFRpY2tlckZpbHRlciAoe1xuICAgICAgICAgICAgJ2ZpbHRlcic6IHBbJ2lkJ10sXG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgbGVuZ3RoID0gdGlja2Vycy5sZW5ndGg7XG4gICAgICAgIGlmIChsZW5ndGggPCAxKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnIGZldGNoVGlja2VyIHJldHVybmVkIGVtcHR5IHJlc3BvbnNlLCB4QlRDZSBwdWJsaWMgQVBJIGVycm9yJyk7XG4gICAgICAgIHRpY2tlcnMgPSB0aGlzLmluZGV4QnkgKHRpY2tlcnMsICdTeW1ib2wnKTtcbiAgICAgICAgbGV0IHRpY2tlciA9IHRpY2tlcnNbcFsnaWQnXV07XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIHApO1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICAvLyBubyBtZXRob2QgZm9yIHRyYWRlcz9cbiAgICAgICAgcmV0dXJuIHRoaXMucHJpdmF0ZUdldFRyYWRlIChwYXJhbXMpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBpZiAodHlwZSA9PSAnbWFya2V0JylcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyBhbGxvd3MgbGltaXQgb3JkZXJzIG9ubHknKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy50YXBpUG9zdFRyYWRlICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ3BhaXInOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICAgICAgJ3R5cGUnOiBzaWRlLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IGFtb3VudCxcbiAgICAgICAgICAgICdyYXRlJzogcHJpY2UsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXNwb25zZSxcbiAgICAgICAgICAgICdpZCc6IHJlc3BvbnNlWydJZCddLnRvU3RyaW5nICgpLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVEZWxldGVUcmFkZSAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdUeXBlJzogJ0NhbmNlbCcsXG4gICAgICAgICAgICAnSWQnOiBpZCxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIG5vbmNlICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgIH0sXG5cbiAgICByZXF1ZXN0IChwYXRoLCBhcGkgPSAnYXBpJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICghdGhpcy5hcGlLZXkpXG4gICAgICAgICAgICB0aHJvdyBuZXcgQXV0aGVudGljYXRpb25FcnJvciAodGhpcy5pZCArICcgcmVxdWlyZXMgYXBpS2V5IGZvciBhbGwgcmVxdWVzdHMsIHRoZWlyIHB1YmxpYyBBUEkgaXMgYWx3YXlzIGJ1c3knKTtcbiAgICAgICAgaWYgKCF0aGlzLnVpZClcbiAgICAgICAgICAgIHRocm93IG5ldyBBdXRoZW50aWNhdGlvbkVycm9yICh0aGlzLmlkICsgJyByZXF1aXJlcyB1aWQgcHJvcGVydHkgZm9yIGF1dGhlbnRpY2F0aW9uIGFuZCB0cmFkaW5nJyk7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgJy8nICsgdGhpcy52ZXJzaW9uO1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKVxuICAgICAgICAgICAgdXJsICs9ICcvJyArIGFwaTtcbiAgICAgICAgdXJsICs9ICcvJyArIHRoaXMuaW1wbG9kZVBhcmFtcyAocGF0aCwgcGFyYW1zKTtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5vbWl0IChwYXJhbXMsIHRoaXMuZXh0cmFjdFBhcmFtcyAocGF0aCkpO1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHF1ZXJ5KS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChxdWVyeSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBoZWFkZXJzID0geyAnQWNjZXB0LUVuY29kaW5nJzogJ2d6aXAsIGRlZmxhdGUnIH07XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpLnRvU3RyaW5nICgpO1xuICAgICAgICAgICAgaWYgKG1ldGhvZCA9PSAnUE9TVCcpIHtcbiAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHF1ZXJ5KS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSAnYXBwbGljYXRpb24vanNvbic7XG4gICAgICAgICAgICAgICAgICAgIGJvZHkgPSB0aGlzLmpzb24gKHF1ZXJ5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB1cmwgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHF1ZXJ5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBhdXRoID0gbm9uY2UgKyB0aGlzLnVpZCArIHRoaXMuYXBpS2V5ICsgbWV0aG9kICsgdXJsO1xuICAgICAgICAgICAgaWYgKGJvZHkpXG4gICAgICAgICAgICAgICAgYXV0aCArPSBib2R5O1xuICAgICAgICAgICAgbGV0IHNpZ25hdHVyZSA9IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKGF1dGgpLCB0aGlzLmVuY29kZSAodGhpcy5zZWNyZXQpLCAnc2hhMjU2JywgJ2Jhc2U2NCcpO1xuICAgICAgICAgICAgbGV0IGNyZWRlbnRpYWxzID0gdGhpcy51aWQgKyAnOicgKyB0aGlzLmFwaUtleSArICc6JyArIG5vbmNlICsgJzonICsgdGhpcy5iaW5hcnlUb1N0cmluZyAoc2lnbmF0dXJlKTtcbiAgICAgICAgICAgIGhlYWRlcnNbJ0F1dGhvcml6YXRpb24nXSA9ICdITUFDICcgKyBjcmVkZW50aWFscztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIHlvYml0ID0ge1xuXG4gICAgJ2lkJzogJ3lvYml0JyxcbiAgICAnbmFtZSc6ICdZb0JpdCcsXG4gICAgJ2NvdW50cmllcyc6ICdSVScsXG4gICAgJ3JhdGVMaW1pdCc6IDIwMDAsIC8vIHJlc3BvbnNlcyBhcmUgY2FjaGVkIGV2ZXJ5IDIgc2Vjb25kc1xuICAgICd2ZXJzaW9uJzogJzMnLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2OTEwLWNkY2JmZGFlLTVlZWEtMTFlNy05ODU5LTAzZmVhODczMjcyZC5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8veW9iaXQubmV0JyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy55b2JpdC5uZXQnLFxuICAgICAgICAnZG9jJzogJ2h0dHBzOi8vd3d3LnlvYml0Lm5ldC9lbi9hcGkvJyxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdhcGknOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdkZXB0aC97cGFpcnN9JyxcbiAgICAgICAgICAgICAgICAnaW5mbycsXG4gICAgICAgICAgICAgICAgJ3RpY2tlci97cGFpcnN9JyxcbiAgICAgICAgICAgICAgICAndHJhZGVzL3twYWlyc30nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3RhcGknOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnQWN0aXZlT3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnQ2FuY2VsT3JkZXInLFxuICAgICAgICAgICAgICAgICdHZXREZXBvc2l0QWRkcmVzcycsXG4gICAgICAgICAgICAgICAgJ2dldEluZm8nLFxuICAgICAgICAgICAgICAgICdPcmRlckluZm8nLFxuICAgICAgICAgICAgICAgICdUcmFkZScsXG4gICAgICAgICAgICAgICAgJ1RyYWRlSGlzdG9yeScsXG4gICAgICAgICAgICAgICAgJ1dpdGhkcmF3Q29pbnNUb0FkZHJlc3MnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hNYXJrZXRzICgpIHtcbiAgICAgICAgbGV0IG1hcmtldHMgPSBhd2FpdCB0aGlzLmFwaUdldEluZm8gKCk7XG4gICAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMgKG1hcmtldHNbJ3BhaXJzJ10pO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwga2V5cy5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgbGV0IGlkID0ga2V5c1twXTtcbiAgICAgICAgICAgIGxldCBtYXJrZXQgPSBtYXJrZXRzWydwYWlycyddW2lkXTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBpZC50b1VwcGVyQ2FzZSAoKS5yZXBsYWNlICgnXycsICcvJyk7XG4gICAgICAgICAgICBsZXQgWyBiYXNlLCBxdW90ZSBdID0gc3ltYm9sLnNwbGl0ICgnLycpO1xuICAgICAgICAgICAgYmFzZSA9IHRoaXMuY29tbW9uQ3VycmVuY3lDb2RlIChiYXNlKTtcbiAgICAgICAgICAgIHF1b3RlID0gdGhpcy5jb21tb25DdXJyZW5jeUNvZGUgKHF1b3RlKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoICh7XG4gICAgICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgICAgICAgICAgJ3N5bWJvbCc6IHN5bWJvbCxcbiAgICAgICAgICAgICAgICAnYmFzZSc6IGJhc2UsXG4gICAgICAgICAgICAgICAgJ3F1b3RlJzogcXVvdGUsXG4gICAgICAgICAgICAgICAgJ2luZm8nOiBtYXJrZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnRhcGlQb3N0R2V0SW5mbyAoKTtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gcmVzcG9uc2VbJ3JldHVybiddO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGJhbGFuY2VzIH07XG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgdGhpcy5jdXJyZW5jaWVzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSB0aGlzLmN1cnJlbmNpZXNbY107XG4gICAgICAgICAgICBsZXQgbG93ZXJjYXNlID0gY3VycmVuY3kudG9Mb3dlckNhc2UgKCk7XG4gICAgICAgICAgICBsZXQgYWNjb3VudCA9IHtcbiAgICAgICAgICAgICAgICAnZnJlZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAndXNlZCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAndG90YWwnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKCdmdW5kcycgaW4gYmFsYW5jZXMpXG4gICAgICAgICAgICAgICAgaWYgKGxvd2VyY2FzZSBpbiBiYWxhbmNlc1snZnVuZHMnXSlcbiAgICAgICAgICAgICAgICAgICAgYWNjb3VudFsnZnJlZSddID0gYmFsYW5jZXNbJ2Z1bmRzJ11bbG93ZXJjYXNlXTtcbiAgICAgICAgICAgIGlmICgnZnVuZHNfaW5jbF9vcmRlcnMnIGluIGJhbGFuY2VzKVxuICAgICAgICAgICAgICAgIGlmIChsb3dlcmNhc2UgaW4gYmFsYW5jZXNbJ2Z1bmRzX2luY2xfb3JkZXJzJ10pXG4gICAgICAgICAgICAgICAgICAgIGFjY291bnRbJ3RvdGFsJ10gPSBiYWxhbmNlc1snZnVuZHNfaW5jbF9vcmRlcnMnXVtsb3dlcmNhc2VdO1xuICAgICAgICAgICAgaWYgKGFjY291bnRbJ3RvdGFsJ10gJiYgYWNjb3VudFsnZnJlZSddKVxuICAgICAgICAgICAgICAgIGFjY291bnRbJ3VzZWQnXSA9IGFjY291bnRbJ3RvdGFsJ10gLSBhY2NvdW50WydmcmVlJ107XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmFwaUdldERlcHRoUGFpcnMgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAncGFpcnMnOiBwWydpZCddLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IHJlc3BvbnNlW3BbJ2lkJ11dO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCBiaWRzID0gKCdiaWRzJyBpbiBvcmRlcmJvb2spID8gb3JkZXJib29rWydiaWRzJ10gOiBbXTtcbiAgICAgICAgbGV0IGFza3MgPSAoJ2Fza3MnIGluIG9yZGVyYm9vaykgPyBvcmRlcmJvb2tbJ2Fza3MnXSA6IFtdO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBiaWRzLFxuICAgICAgICAgICAgJ2Fza3MnOiBhc2tzLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgdGlja2VycyA9IGF3YWl0IHRoaXMuYXBpR2V0VGlja2VyUGFpcnMgKHtcbiAgICAgICAgICAgICdwYWlycyc6IHBbJ2lkJ10sXG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgdGlja2VyID0gdGlja2Vyc1twWydpZCddXTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRpY2tlclsndXBkYXRlZCddICogMTAwMDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2J1eSddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3NlbGwnXSksXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xhc3QnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYXZnJ10pLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbF9jdXInXSksXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbCddKSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5hcGlHZXRUcmFkZXNQYWlycyAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdwYWlycyc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBpZiAodHlwZSA9PSAnbWFya2V0JylcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyBhbGxvd3MgbGltaXQgb3JkZXJzIG9ubHknKTtcbiAgICAgICAgbGV0IHJhdGUgPSBwcmljZS50b1N0cmluZyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy50YXBpUG9zdFRyYWRlICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ3BhaXInOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICAgICAgJ3R5cGUnOiBzaWRlLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IGFtb3VudCxcbiAgICAgICAgICAgICdyYXRlJzogJyUuOGYnLnNwcmludGYgKHByaWNlKSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ2lkJzogcmVzcG9uc2VbJ3JldHVybiddWydvcmRlcl9pZCddLnRvU3RyaW5nICgpLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnRhcGlQb3N0Q2FuY2VsT3JkZXIgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnb3JkZXJfaWQnOiBpZCxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdhcGknLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ10gKyAnLycgKyBhcGk7XG4gICAgICAgIGlmIChhcGkgPT0gJ2FwaScpIHtcbiAgICAgICAgICAgIHVybCArPSAnLycgKyB0aGlzLnZlcnNpb24gKyAnLycgKyB0aGlzLmltcGxvZGVQYXJhbXMgKHBhdGgsIHBhcmFtcyk7XG4gICAgICAgICAgICBsZXQgcXVlcnkgPSB0aGlzLm9taXQgKHBhcmFtcywgdGhpcy5leHRyYWN0UGFyYW1zIChwYXRoKSk7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHF1ZXJ5KS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChxdWVyeSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpO1xuICAgICAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5leHRlbmQgKHsgJ21ldGhvZCc6IHBhdGgsICdub25jZSc6IG5vbmNlIH0sIHBhcmFtcyk7XG4gICAgICAgICAgICBib2R5ID0gdGhpcy51cmxlbmNvZGUgKHF1ZXJ5KTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgICAgICAgICdrZXknOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgICAgICAnc2lnbic6IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKGJvZHkpLCB0aGlzLmVuY29kZSAodGhpcy5zZWNyZXQpLCAnc2hhNTEyJyksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdlcnJvcicgaW4gcmVzcG9uc2UpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgJyArIHRoaXMuanNvbiAocmVzcG9uc2UpKTtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIHl1bmJpID0ge1xuXG4gICAgJ2lkJzogJ3l1bmJpJyxcbiAgICAnbmFtZSc6ICdZVU5CSScsXG4gICAgJ2NvdW50cmllcyc6ICdDTicsXG4gICAgJ3JhdGVMaW1pdCc6IDEwMDAsXG4gICAgJ3ZlcnNpb24nOiAndjInLFxuICAgICdoYXNGZXRjaFRpY2tlcnMnOiB0cnVlLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI4NTcwNTQ4LTRkNjQ2YzQwLTcxNDctMTFlNy05Y2Y2LTgzOWI5M2U2ZDYyMi5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8veXVuYmkuY29tJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3l1bmJpLmNvbScsXG4gICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAnaHR0cHM6Ly95dW5iaS5jb20vZG9jdW1lbnRzL2FwaS9ndWlkZScsXG4gICAgICAgICAgICAnaHR0cHM6Ly95dW5iaS5jb20vc3dhZ2dlci8nLFxuICAgICAgICBdLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ3RpY2tlcnMnLFxuICAgICAgICAgICAgICAgICd0aWNrZXJzL3ttYXJrZXR9JyxcbiAgICAgICAgICAgICAgICAnbWFya2V0cycsXG4gICAgICAgICAgICAgICAgJ29yZGVyX2Jvb2snLFxuICAgICAgICAgICAgICAgICdrJyxcbiAgICAgICAgICAgICAgICAnZGVwdGgnLFxuICAgICAgICAgICAgICAgICd0cmFkZXMnLFxuICAgICAgICAgICAgICAgICdrX3dpdGhfcGVuZGluZ190cmFkZXMnLFxuICAgICAgICAgICAgICAgICd0aW1lc3RhbXAnLFxuICAgICAgICAgICAgICAgICdhZGRyZXNzZXMve2FkZHJlc3N9JyxcbiAgICAgICAgICAgICAgICAncGFydG5lcnMvb3JkZXJzL3tpZH0vdHJhZGVzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnZGVwb3NpdHMnLFxuICAgICAgICAgICAgICAgICdtZW1iZXJzL21lJyxcbiAgICAgICAgICAgICAgICAnZGVwb3NpdCcsXG4gICAgICAgICAgICAgICAgJ2RlcG9zaXRfYWRkcmVzcycsXG4gICAgICAgICAgICAgICAgJ29yZGVyJyxcbiAgICAgICAgICAgICAgICAnb3JkZXJzJyxcbiAgICAgICAgICAgICAgICAndHJhZGVzL215JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnb3JkZXIvZGVsZXRlJyxcbiAgICAgICAgICAgICAgICAnb3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnb3JkZXJzL211bHRpJyxcbiAgICAgICAgICAgICAgICAnb3JkZXJzL2NsZWFyJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoTWFya2V0cyAoKSB7XG4gICAgICAgIGxldCBtYXJrZXRzID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgbWFya2V0cy5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IG1hcmtldHNbcF07XG4gICAgICAgICAgICBsZXQgaWQgPSBtYXJrZXRbJ2lkJ107XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gbWFya2V0WyduYW1lJ107XG4gICAgICAgICAgICBsZXQgWyBiYXNlLCBxdW90ZSBdID0gc3ltYm9sLnNwbGl0ICgnLycpO1xuICAgICAgICAgICAgYmFzZSA9IHRoaXMuY29tbW9uQ3VycmVuY3lDb2RlIChiYXNlKTtcbiAgICAgICAgICAgIHF1b3RlID0gdGhpcy5jb21tb25DdXJyZW5jeUNvZGUgKHF1b3RlKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoICh7XG4gICAgICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgICAgICAgICAgJ3N5bWJvbCc6IHN5bWJvbCxcbiAgICAgICAgICAgICAgICAnYmFzZSc6IGJhc2UsXG4gICAgICAgICAgICAgICAgJ3F1b3RlJzogcXVvdGUsXG4gICAgICAgICAgICAgICAgJ2luZm8nOiBtYXJrZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVHZXRNZW1iZXJzTWUgKCk7XG4gICAgICAgIGxldCBiYWxhbmNlcyA9IHJlc3BvbnNlWydhY2NvdW50cyddO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGJhbGFuY2VzIH07XG4gICAgICAgIGZvciAobGV0IGIgPSAwOyBiIDwgYmFsYW5jZXMubGVuZ3RoOyBiKyspIHtcbiAgICAgICAgICAgIGxldCBiYWxhbmNlID0gYmFsYW5jZXNbYl07XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBiYWxhbmNlWydjdXJyZW5jeSddO1xuICAgICAgICAgICAgbGV0IHVwcGVyY2FzZSA9IGN1cnJlbmN5LnRvVXBwZXJDYXNlICgpO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiBwYXJzZUZsb2F0IChiYWxhbmNlWydiYWxhbmNlJ10pLFxuICAgICAgICAgICAgICAgICd1c2VkJzogcGFyc2VGbG9hdCAoYmFsYW5jZVsnbG9ja2VkJ10pLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhY2NvdW50Wyd0b3RhbCddID0gdGhpcy5zdW0gKGFjY291bnRbJ2ZyZWUnXSwgYWNjb3VudFsndXNlZCddKTtcbiAgICAgICAgICAgIHJlc3VsdFt1cHBlcmNhc2VdID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgdGhpcy5wdWJsaWNHZXREZXB0aCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdtYXJrZXQnOiBwWydpZCddLFxuICAgICAgICAgICAgJ2xpbWl0JzogMzAwLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IG9yZGVyYm9va1sndGltZXN0YW1wJ10gKiAxMDAwO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAob3JkZXJbMF0pO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBwYXJzZUZsb2F0IChvcmRlclsxXSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3NpZGVdLnB1c2ggKFsgcHJpY2UsIGFtb3VudCBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXN1bHRbJ2JpZHMnXSA9IHRoaXMuc29ydEJ5IChyZXN1bHRbJ2JpZHMnXSwgMCwgdHJ1ZSk7XG4gICAgICAgIHJlc3VsdFsnYXNrcyddID0gdGhpcy5zb3J0QnkgKHJlc3VsdFsnYXNrcyddLCAwKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgcGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KSB7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aWNrZXJbJ2F0J10gKiAxMDAwO1xuICAgICAgICB0aWNrZXIgPSB0aWNrZXJbJ3RpY2tlciddO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydoaWdoJ10pLFxuICAgICAgICAgICAgJ2xvdyc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbG93J10pLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYnV5J10pLFxuICAgICAgICAgICAgJ2Fzayc6IHBhcnNlRmxvYXQgKHRpY2tlclsnc2VsbCddKSxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdCddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbCddKSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlcnMgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgdGlja2VycyA9IGF3YWl0IHRoaXMucHVibGljR2V0VGlja2VycyAoKTtcbiAgICAgICAgbGV0IGlkcyA9IE9iamVjdC5rZXlzICh0aWNrZXJzKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHt9O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IGlkID0gaWRzW2ldO1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBpZDtcbiAgICAgICAgICAgIGlmIChpZCBpbiB0aGlzLm1hcmtldHNfYnlfaWQpIHtcbiAgICAgICAgICAgICAgICBtYXJrZXQgPSB0aGlzLm1hcmtldHNfYnlfaWRbaWRdO1xuICAgICAgICAgICAgICAgIHN5bWJvbCA9IG1hcmtldFsnc3ltYm9sJ107XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCBiYXNlID0gaWQuc2xpY2UgKDAsIDMpO1xuICAgICAgICAgICAgICAgIGxldCBxdW90ZSA9IGlkLnNsaWNlICgzLCA2KTtcbiAgICAgICAgICAgICAgICBiYXNlID0gYmFzZS50b1VwcGVyQ2FzZSAoKTtcbiAgICAgICAgICAgICAgICBxdW90ZSA9IHF1b3RlLnRvVXBwZXJDYXNlICgpO1xuICAgICAgICAgICAgICAgIGJhc2UgPSB0aGlzLmNvbW1vbkN1cnJlbmN5Q29kZSAoYmFzZSk7XG4gICAgICAgICAgICAgICAgcXVvdGUgPSB0aGlzLmNvbW1vbkN1cnJlbmN5Q29kZSAocXVvdGUpO1xuICAgICAgICAgICAgICAgIGxldCBzeW1ib2wgPSBiYXNlICsgJy8nICsgcXVvdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgdGlja2VyID0gdGlja2Vyc1tpZF07XG4gICAgICAgICAgICByZXN1bHRbc3ltYm9sXSA9IHRoaXMucGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0VGlja2Vyc01hcmtldCAoe1xuICAgICAgICAgICAgJ21hcmtldCc6IHBbJ2lkJ10sXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVRpY2tlciAocmVzcG9uc2UsIHApO1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgbSA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICByZXR1cm4gdGhpcy5wdWJsaWNHZXRUcmFkZXMgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnbWFya2V0JzogbVsnaWQnXSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdtYXJrZXQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICAgICAgJ3NpZGUnOiBzaWRlLFxuICAgICAgICAgICAgJ3ZvbHVtZSc6IGFtb3VudC50b1N0cmluZyAoKSxcbiAgICAgICAgICAgICdvcmRfdHlwZSc6IHR5cGUsXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlID09ICdsaW1pdCcpIHtcbiAgICAgICAgICAgIG9yZGVyWydwcmljZSddID0gcHJpY2UudG9TdHJpbmcgKCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdE9yZGVycyAodGhpcy5leHRlbmQgKG9yZGVyLCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnaWQnXS50b1N0cmluZyAoKSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0T3JkZXJEZWxldGUgKHsgJ2lkJzogaWQgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHJlcXVlc3QgPSAnL2FwaS8nICsgdGhpcy52ZXJzaW9uICsgJy8nICsgdGhpcy5pbXBsb2RlUGFyYW1zIChwYXRoLCBwYXJhbXMpICsgJy5qc29uJztcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5vbWl0IChwYXJhbXMsIHRoaXMuZXh0cmFjdFBhcmFtcyAocGF0aCkpO1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArIHJlcXVlc3Q7XG4gICAgICAgIGlmIChhcGkgPT0gJ3B1YmxpYycpIHtcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyAocXVlcnkpLmxlbmd0aClcbiAgICAgICAgICAgICAgICB1cmwgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHF1ZXJ5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCkudG9TdHJpbmcgKCk7XG4gICAgICAgICAgICBsZXQgcXVlcnkgPSB0aGlzLnVybGVuY29kZSAodGhpcy5rZXlzb3J0ICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgICAgICdhY2Nlc3Nfa2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ3RvbmNlJzogbm9uY2UsXG4gICAgICAgICAgICB9LCBwYXJhbXMpKSk7XG4gICAgICAgICAgICBsZXQgYXV0aCA9IG1ldGhvZCArICd8JyArIHJlcXVlc3QgKyAnfCcgKyBxdWVyeTtcbiAgICAgICAgICAgIGxldCBzaWduYXR1cmUgPSB0aGlzLmhtYWMgKHRoaXMuZW5jb2RlIChhdXRoKSwgdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSk7XG4gICAgICAgICAgICBsZXQgc3VmZml4ID0gcXVlcnkgKyAnJnNpZ25hdHVyZT0nICsgc2lnbmF0dXJlO1xuICAgICAgICAgICAgaWYgKG1ldGhvZCA9PSAnR0VUJykge1xuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyBzdWZmaXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGJvZHkgPSBzdWZmaXg7XG4gICAgICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1MZW5ndGgnOiBib2R5Lmxlbmd0aCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdlcnJvcicgaW4gcmVzcG9uc2UpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgJyArIHRoaXMuanNvbiAocmVzcG9uc2UpKTtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIHphaWYgPSB7XG5cbiAgICAnaWQnOiAnemFpZicsXG4gICAgJ25hbWUnOiAnWmFpZicsXG4gICAgJ2NvdW50cmllcyc6ICdKUCcsXG4gICAgJ3JhdGVMaW1pdCc6IDIwMDAsXG4gICAgJ3ZlcnNpb24nOiAnMScsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc3NjY5MjctMzljYTJhZGEtNWVlYi0xMWU3LTk3MmYtMWI0MTk5NTE4Y2E2LmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly9hcGkuemFpZi5qcCcsXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly96YWlmLmpwJyxcbiAgICAgICAgJ2RvYyc6IFtcbiAgICAgICAgICAgICdodHRwOi8vdGVjaGJ1cmVhdS1hcGktZG9jdW1lbnQucmVhZHRoZWRvY3MuaW8vamEvbGF0ZXN0L2luZGV4Lmh0bWwnLFxuICAgICAgICAgICAgJ2h0dHBzOi8vY29ycC56YWlmLmpwL2FwaS1kb2NzJyxcbiAgICAgICAgICAgICdodHRwczovL2NvcnAuemFpZi5qcC9hcGktZG9jcy9hcGlfbGlua3MnLFxuICAgICAgICAgICAgJ2h0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL3phaWYuanAnLFxuICAgICAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS95b3UyMTk3OS9ub2RlLXphaWYnLFxuICAgICAgICBdLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ2FwaSc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ2RlcHRoL3twYWlyfScsXG4gICAgICAgICAgICAgICAgJ2N1cnJlbmNpZXMve3BhaXJ9JyxcbiAgICAgICAgICAgICAgICAnY3VycmVuY2llcy9hbGwnLFxuICAgICAgICAgICAgICAgICdjdXJyZW5jeV9wYWlycy97cGFpcn0nLFxuICAgICAgICAgICAgICAgICdjdXJyZW5jeV9wYWlycy9hbGwnLFxuICAgICAgICAgICAgICAgICdsYXN0X3ByaWNlL3twYWlyfScsXG4gICAgICAgICAgICAgICAgJ3RpY2tlci97cGFpcn0nLFxuICAgICAgICAgICAgICAgICd0cmFkZXMve3BhaXJ9JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICd0YXBpJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2FjdGl2ZV9vcmRlcnMnLFxuICAgICAgICAgICAgICAgICdjYW5jZWxfb3JkZXInLFxuICAgICAgICAgICAgICAgICdkZXBvc2l0X2hpc3RvcnknLFxuICAgICAgICAgICAgICAgICdnZXRfaWRfaW5mbycsXG4gICAgICAgICAgICAgICAgJ2dldF9pbmZvJyxcbiAgICAgICAgICAgICAgICAnZ2V0X2luZm8yJyxcbiAgICAgICAgICAgICAgICAnZ2V0X3BlcnNvbmFsX2luZm8nLFxuICAgICAgICAgICAgICAgICd0cmFkZScsXG4gICAgICAgICAgICAgICAgJ3RyYWRlX2hpc3RvcnknLFxuICAgICAgICAgICAgICAgICd3aXRoZHJhdycsXG4gICAgICAgICAgICAgICAgJ3dpdGhkcmF3X2hpc3RvcnknLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ2VjYXBpJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2NyZWF0ZUludm9pY2UnLFxuICAgICAgICAgICAgICAgICdnZXRJbnZvaWNlJyxcbiAgICAgICAgICAgICAgICAnZ2V0SW52b2ljZUlkc0J5T3JkZXJOdW1iZXInLFxuICAgICAgICAgICAgICAgICdjYW5jZWxJbnZvaWNlJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoTWFya2V0cyAoKSB7XG4gICAgICAgIGxldCBtYXJrZXRzID0gYXdhaXQgdGhpcy5hcGlHZXRDdXJyZW5jeVBhaXJzQWxsICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgbWFya2V0cy5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IG1hcmtldHNbcF07XG4gICAgICAgICAgICBsZXQgaWQgPSBtYXJrZXRbJ2N1cnJlbmN5X3BhaXInXTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBtYXJrZXRbJ25hbWUnXTtcbiAgICAgICAgICAgIGxldCBbIGJhc2UsIHF1b3RlIF0gPSBzeW1ib2wuc3BsaXQgKCcvJyk7XG4gICAgICAgICAgICByZXN1bHQucHVzaCAoe1xuICAgICAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICAgICAgICAgICdzeW1ib2wnOiBzeW1ib2wsXG4gICAgICAgICAgICAgICAgJ2Jhc2UnOiBiYXNlLFxuICAgICAgICAgICAgICAgICdxdW90ZSc6IHF1b3RlLFxuICAgICAgICAgICAgICAgICdpbmZvJzogbWFya2V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy50YXBpUG9zdEdldEluZm8gKCk7XG4gICAgICAgIGxldCBiYWxhbmNlcyA9IHJlc3BvbnNlWydyZXR1cm4nXTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiBiYWxhbmNlcyB9O1xuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IHRoaXMuY3VycmVuY2llcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gdGhpcy5jdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IGxvd2VyY2FzZSA9IGN1cnJlbmN5LnRvTG93ZXJDYXNlICgpO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmICgnZnVuZHMnIGluIGJhbGFuY2VzKVxuICAgICAgICAgICAgICAgIGlmIChsb3dlcmNhc2UgaW4gYmFsYW5jZXNbJ2Z1bmRzJ10pXG4gICAgICAgICAgICAgICAgICAgIGFjY291bnRbJ2ZyZWUnXSA9IGJhbGFuY2VzWydmdW5kcyddW2xvd2VyY2FzZV07XG4gICAgICAgICAgICBpZiAoJ2Z1bmRzX2luY2xfb3JkZXJzJyBpbiBiYWxhbmNlcylcbiAgICAgICAgICAgICAgICBpZiAobG93ZXJjYXNlIGluIGJhbGFuY2VzWydmdW5kc19pbmNsX29yZGVycyddKVxuICAgICAgICAgICAgICAgICAgICBhY2NvdW50Wyd0b3RhbCddID0gYmFsYW5jZXNbJ2Z1bmRzX2luY2xfb3JkZXJzJ11bbG93ZXJjYXNlXTtcbiAgICAgICAgICAgIGlmIChhY2NvdW50Wyd0b3RhbCddICYmIGFjY291bnRbJ2ZyZWUnXSlcbiAgICAgICAgICAgICAgICBhY2NvdW50Wyd1c2VkJ10gPSBhY2NvdW50Wyd0b3RhbCddIC0gYWNjb3VudFsnZnJlZSddO1xuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IGF3YWl0IHRoaXMuYXBpR2V0RGVwdGhQYWlyICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ3BhaXInOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBvcmRlcmJvb2tbJ2JpZHMnXSxcbiAgICAgICAgICAgICdhc2tzJzogb3JkZXJib29rWydhc2tzJ10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCB0aWNrZXIgPSBhd2FpdCB0aGlzLmFwaUdldFRpY2tlclBhaXIgKHtcbiAgICAgICAgICAgICdwYWlyJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHRpY2tlclsnaGlnaCddLFxuICAgICAgICAgICAgJ2xvdyc6IHRpY2tlclsnbG93J10sXG4gICAgICAgICAgICAnYmlkJzogdGlja2VyWydiaWQnXSxcbiAgICAgICAgICAgICdhc2snOiB0aWNrZXJbJ2FzayddLFxuICAgICAgICAgICAgJ3Z3YXAnOiB0aWNrZXJbJ3Z3YXAnXSxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiB0aWNrZXJbJ2xhc3QnXSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiB0aWNrZXJbJ3ZvbHVtZSddLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaUdldFRyYWRlc1BhaXIgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAncGFpcic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBpZiAodHlwZSA9PSAnbWFya2V0JylcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyBhbGxvd3MgbGltaXQgb3JkZXJzIG9ubHknKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy50YXBpUG9zdFRyYWRlICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2N1cnJlbmN5X3BhaXInOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICAgICAgJ2FjdGlvbic6IChzaWRlID09ICdidXknKSA/ICdiaWQnIDogJ2FzaycsXG4gICAgICAgICAgICAnYW1vdW50JzogYW1vdW50LFxuICAgICAgICAgICAgJ3ByaWNlJzogcHJpY2UsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXNwb25zZSxcbiAgICAgICAgICAgICdpZCc6IHJlc3BvbnNlWydyZXR1cm4nXVsnb3JkZXJfaWQnXS50b1N0cmluZyAoKSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy50YXBpUG9zdENhbmNlbE9yZGVyICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ29yZGVyX2lkJzogaWQsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAnYXBpJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgJy8nICsgYXBpO1xuICAgICAgICBpZiAoYXBpID09ICdhcGknKSB7XG4gICAgICAgICAgICB1cmwgKz0gJy8nICsgdGhpcy52ZXJzaW9uICsgJy8nICsgdGhpcy5pbXBsb2RlUGFyYW1zIChwYXRoLCBwYXJhbXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG5vbmNlID0gdGhpcy5ub25jZSAoKTtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLnVybGVuY29kZSAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICAgICAnbWV0aG9kJzogcGF0aCxcbiAgICAgICAgICAgICAgICAnbm9uY2UnOiBub25jZSxcbiAgICAgICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtTGVuZ3RoJzogYm9keS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgJ0tleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgICAgICdTaWduJzogdGhpcy5obWFjICh0aGlzLmVuY29kZSAoYm9keSksIHRoaXMuZW5jb2RlICh0aGlzLnNlY3JldCksICdzaGE1MTInKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgICAgICBpZiAoJ2Vycm9yJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgcmVzcG9uc2VbJ2Vycm9yJ10pO1xuICAgICAgICBpZiAoJ3N1Y2Nlc3MnIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgaWYgKCFyZXNwb25zZVsnc3VjY2VzcyddKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSxcbn1cblxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG52YXIgZXhjaGFuZ2VzID0ge1xuXG4gICAgJ18xYnJva2VyJzogICAgICBfMWJyb2tlcixcbiAgICAnXzFidGN4ZSc6ICAgICAgIF8xYnRjeGUsXG4gICAgJ2FueHBybyc6ICAgICAgICBhbnhwcm8sXG4gICAgJ2JpbmFuY2UnOiAgICAgICBiaW5hbmNlLFxuICAgICdiaXQyYyc6ICAgICAgICAgYml0MmMsXG4gICAgJ2JpdGJheSc6ICAgICAgICBiaXRiYXksXG4gICAgJ2JpdGJheXMnOiAgICAgICBiaXRiYXlzLFxuICAgICdiaXRjb2luY29pZCc6ICAgYml0Y29pbmNvaWQsXG4gICAgJ2JpdGZpbmV4JzogICAgICBiaXRmaW5leCxcbiAgICAnYml0Zmx5ZXInOiAgICAgIGJpdGZseWVyLFxuICAgICdiaXRsaXNoJzogICAgICAgYml0bGlzaCxcbiAgICAnYml0bWFya2V0JzogICAgIGJpdG1hcmtldCxcbiAgICAnYml0bWV4JzogICAgICAgIGJpdG1leCxcbiAgICAnYml0c28nOiAgICAgICAgIGJpdHNvLFxuICAgICdiaXRzdGFtcCc6ICAgICAgYml0c3RhbXAsXG4gICAgJ2JpdHRyZXgnOiAgICAgICBiaXR0cmV4LFxuICAgICdibDNwJzogICAgICAgICAgYmwzcCxcbiAgICAnYnRjY2hpbmEnOiAgICAgIGJ0Y2NoaW5hLFxuICAgICdidGNlJzogICAgICAgICAgYnRjZSxcbiAgICAnYnRjZXhjaGFuZ2UnOiAgIGJ0Y2V4Y2hhbmdlLFxuICAgICdidGNtYXJrZXRzJzogICAgYnRjbWFya2V0cyxcbiAgICAnYnRjdHJhZGV1YSc6ICAgIGJ0Y3RyYWRldWEsXG4gICAgJ2J0Y3R1cmsnOiAgICAgICBidGN0dXJrLFxuICAgICdidGN4JzogICAgICAgICAgYnRjeCxcbiAgICAnYnRlcic6ICAgICAgICAgIGJ0ZXIsXG4gICAgJ2J4aW50aCc6ICAgICAgICBieGludGgsXG4gICAgJ2NjZXgnOiAgICAgICAgICBjY2V4LFxuICAgICdjZXgnOiAgICAgICAgICAgY2V4LFxuICAgICdjaGJ0Yyc6ICAgICAgICAgY2hidGMsXG4gICAgJ2NoaWxlYml0JzogICAgICBjaGlsZWJpdCxcbiAgICAnY29pbmNoZWNrJzogICAgIGNvaW5jaGVjayxcbiAgICAnY29pbmZsb29yJzogICAgIGNvaW5mbG9vcixcbiAgICAnY29pbmdpJzogICAgICAgIGNvaW5naSxcbiAgICAnY29pbm1hcmtldGNhcCc6IGNvaW5tYXJrZXRjYXAsXG4gICAgJ2NvaW5tYXRlJzogICAgICBjb2lubWF0ZSxcbiAgICAnY29pbnNlY3VyZSc6ICAgIGNvaW5zZWN1cmUsXG4gICAgJ2NvaW5zcG90JzogICAgICBjb2luc3BvdCxcbiAgICAnY3J5cHRvcGlhJzogICAgIGNyeXB0b3BpYSxcbiAgICAnZHN4JzogICAgICAgICAgIGRzeCxcbiAgICAnZXhtbyc6ICAgICAgICAgIGV4bW8sXG4gICAgJ2Zsb3didGMnOiAgICAgICBmbG93YnRjLFxuICAgICdmb3hiaXQnOiAgICAgICAgZm94Yml0LFxuICAgICdmeWJzZSc6ICAgICAgICAgZnlic2UsXG4gICAgJ2Z5YnNnJzogICAgICAgICBmeWJzZyxcbiAgICAnZ2F0ZWNvaW4nOiAgICAgIGdhdGVjb2luLFxuICAgICdnZGF4JzogICAgICAgICAgZ2RheCxcbiAgICAnZ2VtaW5pJzogICAgICAgIGdlbWluaSxcbiAgICAnaGl0YnRjJzogICAgICAgIGhpdGJ0YyxcbiAgICAnaHVvYmknOiAgICAgICAgIGh1b2JpLFxuICAgICdpdGJpdCc6ICAgICAgICAgaXRiaXQsXG4gICAgJ2p1YmknOiAgICAgICAgICBqdWJpLFxuICAgICdrcmFrZW4nOiAgICAgICAga3Jha2VuLFxuICAgICdsYWtlYnRjJzogICAgICAgbGFrZWJ0YyxcbiAgICAnbGl2ZWNvaW4nOiAgICAgIGxpdmVjb2luLFxuICAgICdsaXF1aSc6ICAgICAgICAgbGlxdWksXG4gICAgJ2x1bm8nOiAgICAgICAgICBsdW5vLFxuICAgICdtZXJjYWRvJzogICAgICAgbWVyY2FkbyxcbiAgICAnb2tjb2luY255JzogICAgIG9rY29pbmNueSxcbiAgICAnb2tjb2ludXNkJzogICAgIG9rY29pbnVzZCxcbiAgICAnb2tleCc6ICAgICAgICAgIG9rZXgsXG4gICAgJ3BheW1pdW0nOiAgICAgICBwYXltaXVtLFxuICAgICdwb2xvbmlleCc6ICAgICAgcG9sb25pZXgsXG4gICAgJ3F1YWRyaWdhY3gnOiAgICBxdWFkcmlnYWN4LFxuICAgICdxdW9pbmUnOiAgICAgICAgcXVvaW5lLFxuICAgICdzb3V0aHhjaGFuZ2UnOiAgc291dGh4Y2hhbmdlLFxuICAgICdzdXJiaXRjb2luJzogICAgc3VyYml0Y29pbixcbiAgICAndGhlcm9jayc6ICAgICAgIHRoZXJvY2ssXG4gICAgJ3VyZHViaXQnOiAgICAgICB1cmR1Yml0LFxuICAgICd2YXVsdG9ybyc6ICAgICAgdmF1bHRvcm8sXG4gICAgJ3ZidGMnOiAgICAgICAgICB2YnRjLFxuICAgICd2aXJ3b3gnOiAgICAgICAgdmlyd294LFxuICAgICd4YnRjZSc6ICAgICAgICAgeGJ0Y2UsXG4gICAgJ3lvYml0JzogICAgICAgICB5b2JpdCxcbiAgICAneXVuYmknOiAgICAgICAgIHl1bmJpLFxuICAgICd6YWlmJzogICAgICAgICAgemFpZixcbn1cblxubGV0IGRlZmluZUFsbEV4Y2hhbmdlcyA9IGZ1bmN0aW9uIChleGNoYW5nZXMpIHtcbiAgICBsZXQgcmVzdWx0ID0ge31cbiAgICBmb3IgKGxldCBpZCBpbiBleGNoYW5nZXMpXG4gICAgICAgIHJlc3VsdFtpZF0gPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEV4Y2hhbmdlIChleHRlbmQgKGV4Y2hhbmdlc1tpZF0sIHBhcmFtcykpXG4gICAgICAgIH1cbiAgICByZXN1bHQuZXhjaGFuZ2VzID0gT2JqZWN0LmtleXMgKGV4Y2hhbmdlcylcbiAgICByZXR1cm4gcmVzdWx0XG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuY29uc3QgY2N4dCA9IE9iamVjdC5hc3NpZ24gKGRlZmluZUFsbEV4Y2hhbmdlcyAoZXhjaGFuZ2VzKSwge1xuXG4gICAgdmVyc2lvbixcblxuICAgIC8vIGV4Y2VwdGlvbnNcblxuICAgIENDWFRFcnJvcixcbiAgICBFeGNoYW5nZUVycm9yLFxuICAgIE5vdFN1cHBvcnRlZCxcbiAgICBBdXRoZW50aWNhdGlvbkVycm9yLFxuICAgIEluc3VmZmljaWVudEZ1bmRzLFxuICAgIE5ldHdvcmtFcnJvcixcbiAgICBERG9TUHJvdGVjdGlvbixcbiAgICBSZXF1ZXN0VGltZW91dCxcbiAgICBFeGNoYW5nZU5vdEF2YWlsYWJsZSxcblxuICAgIC8vIGNvbW1vbiB1dGlsaXR5IGZ1bmN0aW9uc1xuXG4gICAgc2xlZXAsXG4gICAgdGltZW91dCxcbiAgICBjYXBpdGFsaXplLFxuICAgIGtleXNvcnQsXG4gICAgZXh0ZW5kLFxuICAgIG9taXQsXG4gICAgaW5kZXhCeSxcbiAgICBzb3J0QnksXG4gICAgZmxhdHRlbixcbiAgICB1bmlxdWUsXG4gICAgcGx1Y2ssXG4gICAgdXJsZW5jb2RlLFxuICAgIHN1bSxcbiAgICBkZWNpbWFsLFxuXG4gICAgLy8gdW5kZXJzY29yZSBhbGlhc2VzXG5cbiAgICBpbmRleF9ieTogaW5kZXhCeSxcbiAgICBzb3J0X2J5OiBzb3J0QnksXG5cbiAgICAvLyBjcnlwdG8gZnVuY3Rpb25zXG5cbiAgICBiaW5hcnlDb25jYXQsXG4gICAgc3RyaW5nVG9CaW5hcnksXG4gICAgYmluYXJ5VG9TdHJpbmcsXG4gICAgc3RyaW5nVG9CYXNlNjQsXG4gICAgdXRmMTZUb0Jhc2U2NCxcbiAgICBiYXNlNjRUb0JpbmFyeSxcbiAgICBiYXNlNjRUb1N0cmluZyxcbiAgICB1cmxlbmNvZGVCYXNlNjQsXG4gICAgaGFzaCxcbiAgICBobWFjLFxuICAgIGp3dCxcblxufSlcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5pZiAoaXNDb21tb25KUykge1xuXG4gICAgbW9kdWxlLmV4cG9ydHMgPSBjY3h0XG5cbn0gZWxzZSB7XG5cbiAgICB3aW5kb3cuY2N4dCA9IGNjeHRcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG59KSAoKSAvLyBlbmQgb2YgbmFtZXNwYWNlXG4iLCIvKiAgQSBlbnRyeSBwb2ludCBmb3IgdGhlIGJyb3dzZXIgYnVuZGxlIHZlcnNpb24uIFRoaXMgZ2V0cyBjb21waWxlZCBieTpcbiAgICAgICAgXG4gICAgICAgIGJyb3dzZXJpZnkgLS1kZWJ1ZyAuL2NjeHQuYnJvd3Nlci5qcyA+IC4vYnVpbGQvY2N4dC5icm93c2VyLmpzXG4gKi9cblxud2luZG93LmNjeHQgPSByZXF1aXJlICgnLi9idWlsZC9jY3h0LmVzNScpIiwiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSwgdW5kZWYpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIiksIHJlcXVpcmUoXCIuL2VuYy1iYXNlNjRcIiksIHJlcXVpcmUoXCIuL21kNVwiKSwgcmVxdWlyZShcIi4vZXZwa2RmXCIpLCByZXF1aXJlKFwiLi9jaXBoZXItY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi9lbmMtYmFzZTY0XCIsIFwiLi9tZDVcIiwgXCIuL2V2cGtkZlwiLCBcIi4vY2lwaGVyLWNvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdChmdW5jdGlvbiAoKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBCbG9ja0NpcGhlciA9IENfbGliLkJsb2NrQ2lwaGVyO1xuXHQgICAgdmFyIENfYWxnbyA9IEMuYWxnbztcblxuXHQgICAgLy8gTG9va3VwIHRhYmxlc1xuXHQgICAgdmFyIFNCT1ggPSBbXTtcblx0ICAgIHZhciBJTlZfU0JPWCA9IFtdO1xuXHQgICAgdmFyIFNVQl9NSVhfMCA9IFtdO1xuXHQgICAgdmFyIFNVQl9NSVhfMSA9IFtdO1xuXHQgICAgdmFyIFNVQl9NSVhfMiA9IFtdO1xuXHQgICAgdmFyIFNVQl9NSVhfMyA9IFtdO1xuXHQgICAgdmFyIElOVl9TVUJfTUlYXzAgPSBbXTtcblx0ICAgIHZhciBJTlZfU1VCX01JWF8xID0gW107XG5cdCAgICB2YXIgSU5WX1NVQl9NSVhfMiA9IFtdO1xuXHQgICAgdmFyIElOVl9TVUJfTUlYXzMgPSBbXTtcblxuXHQgICAgLy8gQ29tcHV0ZSBsb29rdXAgdGFibGVzXG5cdCAgICAoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIC8vIENvbXB1dGUgZG91YmxlIHRhYmxlXG5cdCAgICAgICAgdmFyIGQgPSBbXTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDI1NjsgaSsrKSB7XG5cdCAgICAgICAgICAgIGlmIChpIDwgMTI4KSB7XG5cdCAgICAgICAgICAgICAgICBkW2ldID0gaSA8PCAxO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgZFtpXSA9IChpIDw8IDEpIF4gMHgxMWI7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cblx0ICAgICAgICAvLyBXYWxrIEdGKDJeOClcblx0ICAgICAgICB2YXIgeCA9IDA7XG5cdCAgICAgICAgdmFyIHhpID0gMDtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDI1NjsgaSsrKSB7XG5cdCAgICAgICAgICAgIC8vIENvbXB1dGUgc2JveFxuXHQgICAgICAgICAgICB2YXIgc3ggPSB4aSBeICh4aSA8PCAxKSBeICh4aSA8PCAyKSBeICh4aSA8PCAzKSBeICh4aSA8PCA0KTtcblx0ICAgICAgICAgICAgc3ggPSAoc3ggPj4+IDgpIF4gKHN4ICYgMHhmZikgXiAweDYzO1xuXHQgICAgICAgICAgICBTQk9YW3hdID0gc3g7XG5cdCAgICAgICAgICAgIElOVl9TQk9YW3N4XSA9IHg7XG5cblx0ICAgICAgICAgICAgLy8gQ29tcHV0ZSBtdWx0aXBsaWNhdGlvblxuXHQgICAgICAgICAgICB2YXIgeDIgPSBkW3hdO1xuXHQgICAgICAgICAgICB2YXIgeDQgPSBkW3gyXTtcblx0ICAgICAgICAgICAgdmFyIHg4ID0gZFt4NF07XG5cblx0ICAgICAgICAgICAgLy8gQ29tcHV0ZSBzdWIgYnl0ZXMsIG1peCBjb2x1bW5zIHRhYmxlc1xuXHQgICAgICAgICAgICB2YXIgdCA9IChkW3N4XSAqIDB4MTAxKSBeIChzeCAqIDB4MTAxMDEwMCk7XG5cdCAgICAgICAgICAgIFNVQl9NSVhfMFt4XSA9ICh0IDw8IDI0KSB8ICh0ID4+PiA4KTtcblx0ICAgICAgICAgICAgU1VCX01JWF8xW3hdID0gKHQgPDwgMTYpIHwgKHQgPj4+IDE2KTtcblx0ICAgICAgICAgICAgU1VCX01JWF8yW3hdID0gKHQgPDwgOCkgIHwgKHQgPj4+IDI0KTtcblx0ICAgICAgICAgICAgU1VCX01JWF8zW3hdID0gdDtcblxuXHQgICAgICAgICAgICAvLyBDb21wdXRlIGludiBzdWIgYnl0ZXMsIGludiBtaXggY29sdW1ucyB0YWJsZXNcblx0ICAgICAgICAgICAgdmFyIHQgPSAoeDggKiAweDEwMTAxMDEpIF4gKHg0ICogMHgxMDAwMSkgXiAoeDIgKiAweDEwMSkgXiAoeCAqIDB4MTAxMDEwMCk7XG5cdCAgICAgICAgICAgIElOVl9TVUJfTUlYXzBbc3hdID0gKHQgPDwgMjQpIHwgKHQgPj4+IDgpO1xuXHQgICAgICAgICAgICBJTlZfU1VCX01JWF8xW3N4XSA9ICh0IDw8IDE2KSB8ICh0ID4+PiAxNik7XG5cdCAgICAgICAgICAgIElOVl9TVUJfTUlYXzJbc3hdID0gKHQgPDwgOCkgIHwgKHQgPj4+IDI0KTtcblx0ICAgICAgICAgICAgSU5WX1NVQl9NSVhfM1tzeF0gPSB0O1xuXG5cdCAgICAgICAgICAgIC8vIENvbXB1dGUgbmV4dCBjb3VudGVyXG5cdCAgICAgICAgICAgIGlmICgheCkge1xuXHQgICAgICAgICAgICAgICAgeCA9IHhpID0gMTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHggPSB4MiBeIGRbZFtkW3g4IF4geDJdXV07XG5cdCAgICAgICAgICAgICAgICB4aSBePSBkW2RbeGldXTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0oKSk7XG5cblx0ICAgIC8vIFByZWNvbXB1dGVkIFJjb24gbG9va3VwXG5cdCAgICB2YXIgUkNPTiA9IFsweDAwLCAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDFiLCAweDM2XTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBBRVMgYmxvY2sgY2lwaGVyIGFsZ29yaXRobS5cblx0ICAgICAqL1xuXHQgICAgdmFyIEFFUyA9IENfYWxnby5BRVMgPSBCbG9ja0NpcGhlci5leHRlbmQoe1xuXHQgICAgICAgIF9kb1Jlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vIFNraXAgcmVzZXQgb2YgblJvdW5kcyBoYXMgYmVlbiBzZXQgYmVmb3JlIGFuZCBrZXkgZGlkIG5vdCBjaGFuZ2Vcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX25Sb3VuZHMgJiYgdGhpcy5fa2V5UHJpb3JSZXNldCA9PT0gdGhpcy5fa2V5KSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm47XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGtleSA9IHRoaXMuX2tleVByaW9yUmVzZXQgPSB0aGlzLl9rZXk7XG5cdCAgICAgICAgICAgIHZhciBrZXlXb3JkcyA9IGtleS53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIGtleVNpemUgPSBrZXkuc2lnQnl0ZXMgLyA0O1xuXG5cdCAgICAgICAgICAgIC8vIENvbXB1dGUgbnVtYmVyIG9mIHJvdW5kc1xuXHQgICAgICAgICAgICB2YXIgblJvdW5kcyA9IHRoaXMuX25Sb3VuZHMgPSBrZXlTaXplICsgNjtcblxuXHQgICAgICAgICAgICAvLyBDb21wdXRlIG51bWJlciBvZiBrZXkgc2NoZWR1bGUgcm93c1xuXHQgICAgICAgICAgICB2YXIga3NSb3dzID0gKG5Sb3VuZHMgKyAxKSAqIDQ7XG5cblx0ICAgICAgICAgICAgLy8gQ29tcHV0ZSBrZXkgc2NoZWR1bGVcblx0ICAgICAgICAgICAgdmFyIGtleVNjaGVkdWxlID0gdGhpcy5fa2V5U2NoZWR1bGUgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIga3NSb3cgPSAwOyBrc1JvdyA8IGtzUm93czsga3NSb3crKykge1xuXHQgICAgICAgICAgICAgICAgaWYgKGtzUm93IDwga2V5U2l6ZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIGtleVNjaGVkdWxlW2tzUm93XSA9IGtleVdvcmRzW2tzUm93XTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIHQgPSBrZXlTY2hlZHVsZVtrc1JvdyAtIDFdO1xuXG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKCEoa3NSb3cgJSBrZXlTaXplKSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAvLyBSb3Qgd29yZFxuXHQgICAgICAgICAgICAgICAgICAgICAgICB0ID0gKHQgPDwgOCkgfCAodCA+Pj4gMjQpO1xuXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN1YiB3b3JkXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHQgPSAoU0JPWFt0ID4+PiAyNF0gPDwgMjQpIHwgKFNCT1hbKHQgPj4+IDE2KSAmIDB4ZmZdIDw8IDE2KSB8IChTQk9YWyh0ID4+PiA4KSAmIDB4ZmZdIDw8IDgpIHwgU0JPWFt0ICYgMHhmZl07XG5cblx0ICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWl4IFJjb25cblx0ICAgICAgICAgICAgICAgICAgICAgICAgdCBePSBSQ09OWyhrc1JvdyAvIGtleVNpemUpIHwgMF0gPDwgMjQ7XG5cdCAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChrZXlTaXplID4gNiAmJiBrc1JvdyAlIGtleVNpemUgPT0gNCkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdWIgd29yZFxuXHQgICAgICAgICAgICAgICAgICAgICAgICB0ID0gKFNCT1hbdCA+Pj4gMjRdIDw8IDI0KSB8IChTQk9YWyh0ID4+PiAxNikgJiAweGZmXSA8PCAxNikgfCAoU0JPWFsodCA+Pj4gOCkgJiAweGZmXSA8PCA4KSB8IFNCT1hbdCAmIDB4ZmZdO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAgICAgICAgIGtleVNjaGVkdWxlW2tzUm93XSA9IGtleVNjaGVkdWxlW2tzUm93IC0ga2V5U2l6ZV0gXiB0O1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gQ29tcHV0ZSBpbnYga2V5IHNjaGVkdWxlXG5cdCAgICAgICAgICAgIHZhciBpbnZLZXlTY2hlZHVsZSA9IHRoaXMuX2ludktleVNjaGVkdWxlID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGludktzUm93ID0gMDsgaW52S3NSb3cgPCBrc1Jvd3M7IGludktzUm93KyspIHtcblx0ICAgICAgICAgICAgICAgIHZhciBrc1JvdyA9IGtzUm93cyAtIGludktzUm93O1xuXG5cdCAgICAgICAgICAgICAgICBpZiAoaW52S3NSb3cgJSA0KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIHQgPSBrZXlTY2hlZHVsZVtrc1Jvd107XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciB0ID0ga2V5U2NoZWR1bGVba3NSb3cgLSA0XTtcblx0ICAgICAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAgICAgaWYgKGludktzUm93IDwgNCB8fCBrc1JvdyA8PSA0KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgaW52S2V5U2NoZWR1bGVbaW52S3NSb3ddID0gdDtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgaW52S2V5U2NoZWR1bGVbaW52S3NSb3ddID0gSU5WX1NVQl9NSVhfMFtTQk9YW3QgPj4+IDI0XV0gXiBJTlZfU1VCX01JWF8xW1NCT1hbKHQgPj4+IDE2KSAmIDB4ZmZdXSBeXG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5WX1NVQl9NSVhfMltTQk9YWyh0ID4+PiA4KSAmIDB4ZmZdXSBeIElOVl9TVUJfTUlYXzNbU0JPWFt0ICYgMHhmZl1dO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGVuY3J5cHRCbG9jazogZnVuY3Rpb24gKE0sIG9mZnNldCkge1xuXHQgICAgICAgICAgICB0aGlzLl9kb0NyeXB0QmxvY2soTSwgb2Zmc2V0LCB0aGlzLl9rZXlTY2hlZHVsZSwgU1VCX01JWF8wLCBTVUJfTUlYXzEsIFNVQl9NSVhfMiwgU1VCX01JWF8zLCBTQk9YKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgZGVjcnlwdEJsb2NrOiBmdW5jdGlvbiAoTSwgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIC8vIFN3YXAgMm5kIGFuZCA0dGggcm93c1xuXHQgICAgICAgICAgICB2YXIgdCA9IE1bb2Zmc2V0ICsgMV07XG5cdCAgICAgICAgICAgIE1bb2Zmc2V0ICsgMV0gPSBNW29mZnNldCArIDNdO1xuXHQgICAgICAgICAgICBNW29mZnNldCArIDNdID0gdDtcblxuXHQgICAgICAgICAgICB0aGlzLl9kb0NyeXB0QmxvY2soTSwgb2Zmc2V0LCB0aGlzLl9pbnZLZXlTY2hlZHVsZSwgSU5WX1NVQl9NSVhfMCwgSU5WX1NVQl9NSVhfMSwgSU5WX1NVQl9NSVhfMiwgSU5WX1NVQl9NSVhfMywgSU5WX1NCT1gpO1xuXG5cdCAgICAgICAgICAgIC8vIEludiBzd2FwIDJuZCBhbmQgNHRoIHJvd3Ncblx0ICAgICAgICAgICAgdmFyIHQgPSBNW29mZnNldCArIDFdO1xuXHQgICAgICAgICAgICBNW29mZnNldCArIDFdID0gTVtvZmZzZXQgKyAzXTtcblx0ICAgICAgICAgICAgTVtvZmZzZXQgKyAzXSA9IHQ7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb0NyeXB0QmxvY2s6IGZ1bmN0aW9uIChNLCBvZmZzZXQsIGtleVNjaGVkdWxlLCBTVUJfTUlYXzAsIFNVQl9NSVhfMSwgU1VCX01JWF8yLCBTVUJfTUlYXzMsIFNCT1gpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgdmFyIG5Sb3VuZHMgPSB0aGlzLl9uUm91bmRzO1xuXG5cdCAgICAgICAgICAgIC8vIEdldCBpbnB1dCwgYWRkIHJvdW5kIGtleVxuXHQgICAgICAgICAgICB2YXIgczAgPSBNW29mZnNldF0gICAgIF4ga2V5U2NoZWR1bGVbMF07XG5cdCAgICAgICAgICAgIHZhciBzMSA9IE1bb2Zmc2V0ICsgMV0gXiBrZXlTY2hlZHVsZVsxXTtcblx0ICAgICAgICAgICAgdmFyIHMyID0gTVtvZmZzZXQgKyAyXSBeIGtleVNjaGVkdWxlWzJdO1xuXHQgICAgICAgICAgICB2YXIgczMgPSBNW29mZnNldCArIDNdIF4ga2V5U2NoZWR1bGVbM107XG5cblx0ICAgICAgICAgICAgLy8gS2V5IHNjaGVkdWxlIHJvdyBjb3VudGVyXG5cdCAgICAgICAgICAgIHZhciBrc1JvdyA9IDQ7XG5cblx0ICAgICAgICAgICAgLy8gUm91bmRzXG5cdCAgICAgICAgICAgIGZvciAodmFyIHJvdW5kID0gMTsgcm91bmQgPCBuUm91bmRzOyByb3VuZCsrKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBTaGlmdCByb3dzLCBzdWIgYnl0ZXMsIG1peCBjb2x1bW5zLCBhZGQgcm91bmQga2V5XG5cdCAgICAgICAgICAgICAgICB2YXIgdDAgPSBTVUJfTUlYXzBbczAgPj4+IDI0XSBeIFNVQl9NSVhfMVsoczEgPj4+IDE2KSAmIDB4ZmZdIF4gU1VCX01JWF8yWyhzMiA+Pj4gOCkgJiAweGZmXSBeIFNVQl9NSVhfM1tzMyAmIDB4ZmZdIF4ga2V5U2NoZWR1bGVba3NSb3crK107XG5cdCAgICAgICAgICAgICAgICB2YXIgdDEgPSBTVUJfTUlYXzBbczEgPj4+IDI0XSBeIFNVQl9NSVhfMVsoczIgPj4+IDE2KSAmIDB4ZmZdIF4gU1VCX01JWF8yWyhzMyA+Pj4gOCkgJiAweGZmXSBeIFNVQl9NSVhfM1tzMCAmIDB4ZmZdIF4ga2V5U2NoZWR1bGVba3NSb3crK107XG5cdCAgICAgICAgICAgICAgICB2YXIgdDIgPSBTVUJfTUlYXzBbczIgPj4+IDI0XSBeIFNVQl9NSVhfMVsoczMgPj4+IDE2KSAmIDB4ZmZdIF4gU1VCX01JWF8yWyhzMCA+Pj4gOCkgJiAweGZmXSBeIFNVQl9NSVhfM1tzMSAmIDB4ZmZdIF4ga2V5U2NoZWR1bGVba3NSb3crK107XG5cdCAgICAgICAgICAgICAgICB2YXIgdDMgPSBTVUJfTUlYXzBbczMgPj4+IDI0XSBeIFNVQl9NSVhfMVsoczAgPj4+IDE2KSAmIDB4ZmZdIF4gU1VCX01JWF8yWyhzMSA+Pj4gOCkgJiAweGZmXSBeIFNVQl9NSVhfM1tzMiAmIDB4ZmZdIF4ga2V5U2NoZWR1bGVba3NSb3crK107XG5cblx0ICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBzdGF0ZVxuXHQgICAgICAgICAgICAgICAgczAgPSB0MDtcblx0ICAgICAgICAgICAgICAgIHMxID0gdDE7XG5cdCAgICAgICAgICAgICAgICBzMiA9IHQyO1xuXHQgICAgICAgICAgICAgICAgczMgPSB0Mztcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIFNoaWZ0IHJvd3MsIHN1YiBieXRlcywgYWRkIHJvdW5kIGtleVxuXHQgICAgICAgICAgICB2YXIgdDAgPSAoKFNCT1hbczAgPj4+IDI0XSA8PCAyNCkgfCAoU0JPWFsoczEgPj4+IDE2KSAmIDB4ZmZdIDw8IDE2KSB8IChTQk9YWyhzMiA+Pj4gOCkgJiAweGZmXSA8PCA4KSB8IFNCT1hbczMgJiAweGZmXSkgXiBrZXlTY2hlZHVsZVtrc1JvdysrXTtcblx0ICAgICAgICAgICAgdmFyIHQxID0gKChTQk9YW3MxID4+PiAyNF0gPDwgMjQpIHwgKFNCT1hbKHMyID4+PiAxNikgJiAweGZmXSA8PCAxNikgfCAoU0JPWFsoczMgPj4+IDgpICYgMHhmZl0gPDwgOCkgfCBTQk9YW3MwICYgMHhmZl0pIF4ga2V5U2NoZWR1bGVba3NSb3crK107XG5cdCAgICAgICAgICAgIHZhciB0MiA9ICgoU0JPWFtzMiA+Pj4gMjRdIDw8IDI0KSB8IChTQk9YWyhzMyA+Pj4gMTYpICYgMHhmZl0gPDwgMTYpIHwgKFNCT1hbKHMwID4+PiA4KSAmIDB4ZmZdIDw8IDgpIHwgU0JPWFtzMSAmIDB4ZmZdKSBeIGtleVNjaGVkdWxlW2tzUm93KytdO1xuXHQgICAgICAgICAgICB2YXIgdDMgPSAoKFNCT1hbczMgPj4+IDI0XSA8PCAyNCkgfCAoU0JPWFsoczAgPj4+IDE2KSAmIDB4ZmZdIDw8IDE2KSB8IChTQk9YWyhzMSA+Pj4gOCkgJiAweGZmXSA8PCA4KSB8IFNCT1hbczIgJiAweGZmXSkgXiBrZXlTY2hlZHVsZVtrc1JvdysrXTtcblxuXHQgICAgICAgICAgICAvLyBTZXQgb3V0cHV0XG5cdCAgICAgICAgICAgIE1bb2Zmc2V0XSAgICAgPSB0MDtcblx0ICAgICAgICAgICAgTVtvZmZzZXQgKyAxXSA9IHQxO1xuXHQgICAgICAgICAgICBNW29mZnNldCArIDJdID0gdDI7XG5cdCAgICAgICAgICAgIE1bb2Zmc2V0ICsgM10gPSB0Mztcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAga2V5U2l6ZTogMjU2LzMyXG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbnMgdG8gdGhlIGNpcGhlcidzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQGV4YW1wbGVcblx0ICAgICAqXG5cdCAgICAgKiAgICAgdmFyIGNpcGhlcnRleHQgPSBDcnlwdG9KUy5BRVMuZW5jcnlwdChtZXNzYWdlLCBrZXksIGNmZyk7XG5cdCAgICAgKiAgICAgdmFyIHBsYWludGV4dCAgPSBDcnlwdG9KUy5BRVMuZGVjcnlwdChjaXBoZXJ0ZXh0LCBrZXksIGNmZyk7XG5cdCAgICAgKi9cblx0ICAgIEMuQUVTID0gQmxvY2tDaXBoZXIuX2NyZWF0ZUhlbHBlcihBRVMpO1xuXHR9KCkpO1xuXG5cblx0cmV0dXJuIENyeXB0b0pTLkFFUztcblxufSkpOyIsIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnksIHVuZGVmKSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpLCByZXF1aXJlKFwiLi9ldnBrZGZcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiLCBcIi4vZXZwa2RmXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQvKipcblx0ICogQ2lwaGVyIGNvcmUgY29tcG9uZW50cy5cblx0ICovXG5cdENyeXB0b0pTLmxpYi5DaXBoZXIgfHwgKGZ1bmN0aW9uICh1bmRlZmluZWQpIHtcblx0ICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgdmFyIEMgPSBDcnlwdG9KUztcblx0ICAgIHZhciBDX2xpYiA9IEMubGliO1xuXHQgICAgdmFyIEJhc2UgPSBDX2xpYi5CYXNlO1xuXHQgICAgdmFyIFdvcmRBcnJheSA9IENfbGliLldvcmRBcnJheTtcblx0ICAgIHZhciBCdWZmZXJlZEJsb2NrQWxnb3JpdGhtID0gQ19saWIuQnVmZmVyZWRCbG9ja0FsZ29yaXRobTtcblx0ICAgIHZhciBDX2VuYyA9IEMuZW5jO1xuXHQgICAgdmFyIFV0ZjggPSBDX2VuYy5VdGY4O1xuXHQgICAgdmFyIEJhc2U2NCA9IENfZW5jLkJhc2U2NDtcblx0ICAgIHZhciBDX2FsZ28gPSBDLmFsZ287XG5cdCAgICB2YXIgRXZwS0RGID0gQ19hbGdvLkV2cEtERjtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBBYnN0cmFjdCBiYXNlIGNpcGhlciB0ZW1wbGF0ZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcHJvcGVydHkge251bWJlcn0ga2V5U2l6ZSBUaGlzIGNpcGhlcidzIGtleSBzaXplLiBEZWZhdWx0OiA0ICgxMjggYml0cylcblx0ICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBpdlNpemUgVGhpcyBjaXBoZXIncyBJViBzaXplLiBEZWZhdWx0OiA0ICgxMjggYml0cylcblx0ICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBfRU5DX1hGT1JNX01PREUgQSBjb25zdGFudCByZXByZXNlbnRpbmcgZW5jcnlwdGlvbiBtb2RlLlxuXHQgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IF9ERUNfWEZPUk1fTU9ERSBBIGNvbnN0YW50IHJlcHJlc2VudGluZyBkZWNyeXB0aW9uIG1vZGUuXG5cdCAgICAgKi9cblx0ICAgIHZhciBDaXBoZXIgPSBDX2xpYi5DaXBoZXIgPSBCdWZmZXJlZEJsb2NrQWxnb3JpdGhtLmV4dGVuZCh7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29uZmlndXJhdGlvbiBvcHRpb25zLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHByb3BlcnR5IHtXb3JkQXJyYXl9IGl2IFRoZSBJViB0byB1c2UgZm9yIHRoaXMgb3BlcmF0aW9uLlxuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGNmZzogQmFzZS5leHRlbmQoKSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENyZWF0ZXMgdGhpcyBjaXBoZXIgaW4gZW5jcnlwdGlvbiBtb2RlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl9IGtleSBUaGUga2V5LlxuXHQgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjZmcgKE9wdGlvbmFsKSBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHVzZSBmb3IgdGhpcyBvcGVyYXRpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtDaXBoZXJ9IEEgY2lwaGVyIGluc3RhbmNlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgY2lwaGVyID0gQ3J5cHRvSlMuYWxnby5BRVMuY3JlYXRlRW5jcnlwdG9yKGtleVdvcmRBcnJheSwgeyBpdjogaXZXb3JkQXJyYXkgfSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY3JlYXRlRW5jcnlwdG9yOiBmdW5jdGlvbiAoa2V5LCBjZmcpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlKHRoaXMuX0VOQ19YRk9STV9NT0RFLCBrZXksIGNmZyk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENyZWF0ZXMgdGhpcyBjaXBoZXIgaW4gZGVjcnlwdGlvbiBtb2RlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl9IGtleSBUaGUga2V5LlxuXHQgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjZmcgKE9wdGlvbmFsKSBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHVzZSBmb3IgdGhpcyBvcGVyYXRpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtDaXBoZXJ9IEEgY2lwaGVyIGluc3RhbmNlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgY2lwaGVyID0gQ3J5cHRvSlMuYWxnby5BRVMuY3JlYXRlRGVjcnlwdG9yKGtleVdvcmRBcnJheSwgeyBpdjogaXZXb3JkQXJyYXkgfSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY3JlYXRlRGVjcnlwdG9yOiBmdW5jdGlvbiAoa2V5LCBjZmcpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlKHRoaXMuX0RFQ19YRk9STV9NT0RFLCBrZXksIGNmZyk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEluaXRpYWxpemVzIGEgbmV3bHkgY3JlYXRlZCBjaXBoZXIuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0geGZvcm1Nb2RlIEVpdGhlciB0aGUgZW5jcnlwdGlvbiBvciBkZWNyeXB0aW9uIHRyYW5zb3JtYXRpb24gbW9kZSBjb25zdGFudC5cblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheX0ga2V5IFRoZSBrZXkuXG5cdCAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNmZyAoT3B0aW9uYWwpIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gdXNlIGZvciB0aGlzIG9wZXJhdGlvbi5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGNpcGhlciA9IENyeXB0b0pTLmFsZ28uQUVTLmNyZWF0ZShDcnlwdG9KUy5hbGdvLkFFUy5fRU5DX1hGT1JNX01PREUsIGtleVdvcmRBcnJheSwgeyBpdjogaXZXb3JkQXJyYXkgfSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgaW5pdDogZnVuY3Rpb24gKHhmb3JtTW9kZSwga2V5LCBjZmcpIHtcblx0ICAgICAgICAgICAgLy8gQXBwbHkgY29uZmlnIGRlZmF1bHRzXG5cdCAgICAgICAgICAgIHRoaXMuY2ZnID0gdGhpcy5jZmcuZXh0ZW5kKGNmZyk7XG5cblx0ICAgICAgICAgICAgLy8gU3RvcmUgdHJhbnNmb3JtIG1vZGUgYW5kIGtleVxuXHQgICAgICAgICAgICB0aGlzLl94Zm9ybU1vZGUgPSB4Zm9ybU1vZGU7XG5cdCAgICAgICAgICAgIHRoaXMuX2tleSA9IGtleTtcblxuXHQgICAgICAgICAgICAvLyBTZXQgaW5pdGlhbCB2YWx1ZXNcblx0ICAgICAgICAgICAgdGhpcy5yZXNldCgpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBSZXNldHMgdGhpcyBjaXBoZXIgdG8gaXRzIGluaXRpYWwgc3RhdGUuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIGNpcGhlci5yZXNldCgpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHJlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vIFJlc2V0IGRhdGEgYnVmZmVyXG5cdCAgICAgICAgICAgIEJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0ucmVzZXQuY2FsbCh0aGlzKTtcblxuXHQgICAgICAgICAgICAvLyBQZXJmb3JtIGNvbmNyZXRlLWNpcGhlciBsb2dpY1xuXHQgICAgICAgICAgICB0aGlzLl9kb1Jlc2V0KCk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEFkZHMgZGF0YSB0byBiZSBlbmNyeXB0ZWQgb3IgZGVjcnlwdGVkLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBkYXRhVXBkYXRlIFRoZSBkYXRhIHRvIGVuY3J5cHQgb3IgZGVjcnlwdC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIGRhdGEgYWZ0ZXIgcHJvY2Vzc2luZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGVuY3J5cHRlZCA9IGNpcGhlci5wcm9jZXNzKCdkYXRhJyk7XG5cdCAgICAgICAgICogICAgIHZhciBlbmNyeXB0ZWQgPSBjaXBoZXIucHJvY2Vzcyh3b3JkQXJyYXkpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHByb2Nlc3M6IGZ1bmN0aW9uIChkYXRhVXBkYXRlKSB7XG5cdCAgICAgICAgICAgIC8vIEFwcGVuZFxuXHQgICAgICAgICAgICB0aGlzLl9hcHBlbmQoZGF0YVVwZGF0ZSk7XG5cblx0ICAgICAgICAgICAgLy8gUHJvY2VzcyBhdmFpbGFibGUgYmxvY2tzXG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wcm9jZXNzKCk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEZpbmFsaXplcyB0aGUgZW5jcnlwdGlvbiBvciBkZWNyeXB0aW9uIHByb2Nlc3MuXG5cdCAgICAgICAgICogTm90ZSB0aGF0IHRoZSBmaW5hbGl6ZSBvcGVyYXRpb24gaXMgZWZmZWN0aXZlbHkgYSBkZXN0cnVjdGl2ZSwgcmVhZC1vbmNlIG9wZXJhdGlvbi5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gZGF0YVVwZGF0ZSBUaGUgZmluYWwgZGF0YSB0byBlbmNyeXB0IG9yIGRlY3J5cHQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBkYXRhIGFmdGVyIGZpbmFsIHByb2Nlc3NpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBlbmNyeXB0ZWQgPSBjaXBoZXIuZmluYWxpemUoKTtcblx0ICAgICAgICAgKiAgICAgdmFyIGVuY3J5cHRlZCA9IGNpcGhlci5maW5hbGl6ZSgnZGF0YScpO1xuXHQgICAgICAgICAqICAgICB2YXIgZW5jcnlwdGVkID0gY2lwaGVyLmZpbmFsaXplKHdvcmRBcnJheSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgZmluYWxpemU6IGZ1bmN0aW9uIChkYXRhVXBkYXRlKSB7XG5cdCAgICAgICAgICAgIC8vIEZpbmFsIGRhdGEgdXBkYXRlXG5cdCAgICAgICAgICAgIGlmIChkYXRhVXBkYXRlKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9hcHBlbmQoZGF0YVVwZGF0ZSk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBQZXJmb3JtIGNvbmNyZXRlLWNpcGhlciBsb2dpY1xuXHQgICAgICAgICAgICB2YXIgZmluYWxQcm9jZXNzZWREYXRhID0gdGhpcy5fZG9GaW5hbGl6ZSgpO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBmaW5hbFByb2Nlc3NlZERhdGE7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGtleVNpemU6IDEyOC8zMixcblxuXHQgICAgICAgIGl2U2l6ZTogMTI4LzMyLFxuXG5cdCAgICAgICAgX0VOQ19YRk9STV9NT0RFOiAxLFxuXG5cdCAgICAgICAgX0RFQ19YRk9STV9NT0RFOiAyLFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ3JlYXRlcyBzaG9ydGN1dCBmdW5jdGlvbnMgdG8gYSBjaXBoZXIncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtDaXBoZXJ9IGNpcGhlciBUaGUgY2lwaGVyIHRvIGNyZWF0ZSBhIGhlbHBlciBmb3IuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtPYmplY3R9IEFuIG9iamVjdCB3aXRoIGVuY3J5cHQgYW5kIGRlY3J5cHQgc2hvcnRjdXQgZnVuY3Rpb25zLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgQUVTID0gQ3J5cHRvSlMubGliLkNpcGhlci5fY3JlYXRlSGVscGVyKENyeXB0b0pTLmFsZ28uQUVTKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBfY3JlYXRlSGVscGVyOiAoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBmdW5jdGlvbiBzZWxlY3RDaXBoZXJTdHJhdGVneShrZXkpIHtcblx0ICAgICAgICAgICAgICAgIGlmICh0eXBlb2Yga2V5ID09ICdzdHJpbmcnKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBhc3N3b3JkQmFzZWRDaXBoZXI7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiBTZXJpYWxpemFibGVDaXBoZXI7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGNpcGhlcikge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHtcblx0ICAgICAgICAgICAgICAgICAgICBlbmNyeXB0OiBmdW5jdGlvbiAobWVzc2FnZSwga2V5LCBjZmcpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGVjdENpcGhlclN0cmF0ZWd5KGtleSkuZW5jcnlwdChjaXBoZXIsIG1lc3NhZ2UsIGtleSwgY2ZnKTtcblx0ICAgICAgICAgICAgICAgICAgICB9LFxuXG5cdCAgICAgICAgICAgICAgICAgICAgZGVjcnlwdDogZnVuY3Rpb24gKGNpcGhlcnRleHQsIGtleSwgY2ZnKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxlY3RDaXBoZXJTdHJhdGVneShrZXkpLmRlY3J5cHQoY2lwaGVyLCBjaXBoZXJ0ZXh0LCBrZXksIGNmZyk7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfTtcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9KCkpXG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBBYnN0cmFjdCBiYXNlIHN0cmVhbSBjaXBoZXIgdGVtcGxhdGUuXG5cdCAgICAgKlxuXHQgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IGJsb2NrU2l6ZSBUaGUgbnVtYmVyIG9mIDMyLWJpdCB3b3JkcyB0aGlzIGNpcGhlciBvcGVyYXRlcyBvbi4gRGVmYXVsdDogMSAoMzIgYml0cylcblx0ICAgICAqL1xuXHQgICAgdmFyIFN0cmVhbUNpcGhlciA9IENfbGliLlN0cmVhbUNpcGhlciA9IENpcGhlci5leHRlbmQoe1xuXHQgICAgICAgIF9kb0ZpbmFsaXplOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vIFByb2Nlc3MgcGFydGlhbCBibG9ja3Ncblx0ICAgICAgICAgICAgdmFyIGZpbmFsUHJvY2Vzc2VkQmxvY2tzID0gdGhpcy5fcHJvY2VzcyghISdmbHVzaCcpO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBmaW5hbFByb2Nlc3NlZEJsb2Nrcztcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgYmxvY2tTaXplOiAxXG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBNb2RlIG5hbWVzcGFjZS5cblx0ICAgICAqL1xuXHQgICAgdmFyIENfbW9kZSA9IEMubW9kZSA9IHt9O1xuXG5cdCAgICAvKipcblx0ICAgICAqIEFic3RyYWN0IGJhc2UgYmxvY2sgY2lwaGVyIG1vZGUgdGVtcGxhdGUuXG5cdCAgICAgKi9cblx0ICAgIHZhciBCbG9ja0NpcGhlck1vZGUgPSBDX2xpYi5CbG9ja0NpcGhlck1vZGUgPSBCYXNlLmV4dGVuZCh7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ3JlYXRlcyB0aGlzIG1vZGUgZm9yIGVuY3J5cHRpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge0NpcGhlcn0gY2lwaGVyIEEgYmxvY2sgY2lwaGVyIGluc3RhbmNlLlxuXHQgICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IGl2IFRoZSBJViB3b3Jkcy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIG1vZGUgPSBDcnlwdG9KUy5tb2RlLkNCQy5jcmVhdGVFbmNyeXB0b3IoY2lwaGVyLCBpdi53b3Jkcyk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY3JlYXRlRW5jcnlwdG9yOiBmdW5jdGlvbiAoY2lwaGVyLCBpdikge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5FbmNyeXB0b3IuY3JlYXRlKGNpcGhlciwgaXYpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDcmVhdGVzIHRoaXMgbW9kZSBmb3IgZGVjcnlwdGlvbi5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7Q2lwaGVyfSBjaXBoZXIgQSBibG9jayBjaXBoZXIgaW5zdGFuY2UuXG5cdCAgICAgICAgICogQHBhcmFtIHtBcnJheX0gaXYgVGhlIElWIHdvcmRzLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgbW9kZSA9IENyeXB0b0pTLm1vZGUuQ0JDLmNyZWF0ZURlY3J5cHRvcihjaXBoZXIsIGl2LndvcmRzKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjcmVhdGVEZWNyeXB0b3I6IGZ1bmN0aW9uIChjaXBoZXIsIGl2KSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLkRlY3J5cHRvci5jcmVhdGUoY2lwaGVyLCBpdik7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEluaXRpYWxpemVzIGEgbmV3bHkgY3JlYXRlZCBtb2RlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtDaXBoZXJ9IGNpcGhlciBBIGJsb2NrIGNpcGhlciBpbnN0YW5jZS5cblx0ICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBpdiBUaGUgSVYgd29yZHMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBtb2RlID0gQ3J5cHRvSlMubW9kZS5DQkMuRW5jcnlwdG9yLmNyZWF0ZShjaXBoZXIsIGl2LndvcmRzKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBpbml0OiBmdW5jdGlvbiAoY2lwaGVyLCBpdikge1xuXHQgICAgICAgICAgICB0aGlzLl9jaXBoZXIgPSBjaXBoZXI7XG5cdCAgICAgICAgICAgIHRoaXMuX2l2ID0gaXY7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogQ2lwaGVyIEJsb2NrIENoYWluaW5nIG1vZGUuXG5cdCAgICAgKi9cblx0ICAgIHZhciBDQkMgPSBDX21vZGUuQ0JDID0gKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBBYnN0cmFjdCBiYXNlIENCQyBtb2RlLlxuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHZhciBDQkMgPSBCbG9ja0NpcGhlck1vZGUuZXh0ZW5kKCk7XG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDQkMgZW5jcnlwdG9yLlxuXHQgICAgICAgICAqL1xuXHQgICAgICAgIENCQy5FbmNyeXB0b3IgPSBDQkMuZXh0ZW5kKHtcblx0ICAgICAgICAgICAgLyoqXG5cdCAgICAgICAgICAgICAqIFByb2Nlc3NlcyB0aGUgZGF0YSBibG9jayBhdCBvZmZzZXQuXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IHdvcmRzIFRoZSBkYXRhIHdvcmRzIHRvIG9wZXJhdGUgb24uXG5cdCAgICAgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXQgVGhlIG9mZnNldCB3aGVyZSB0aGUgYmxvY2sgc3RhcnRzLlxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiAgICAgbW9kZS5wcm9jZXNzQmxvY2soZGF0YS53b3Jkcywgb2Zmc2V0KTtcblx0ICAgICAgICAgICAgICovXG5cdCAgICAgICAgICAgIHByb2Nlc3NCbG9jazogZnVuY3Rpb24gKHdvcmRzLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICAgICAgdmFyIGNpcGhlciA9IHRoaXMuX2NpcGhlcjtcblx0ICAgICAgICAgICAgICAgIHZhciBibG9ja1NpemUgPSBjaXBoZXIuYmxvY2tTaXplO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBYT1IgYW5kIGVuY3J5cHRcblx0ICAgICAgICAgICAgICAgIHhvckJsb2NrLmNhbGwodGhpcywgd29yZHMsIG9mZnNldCwgYmxvY2tTaXplKTtcblx0ICAgICAgICAgICAgICAgIGNpcGhlci5lbmNyeXB0QmxvY2sod29yZHMsIG9mZnNldCk7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFJlbWVtYmVyIHRoaXMgYmxvY2sgdG8gdXNlIHdpdGggbmV4dCBibG9ja1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fcHJldkJsb2NrID0gd29yZHMuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBibG9ja1NpemUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSk7XG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDQkMgZGVjcnlwdG9yLlxuXHQgICAgICAgICAqL1xuXHQgICAgICAgIENCQy5EZWNyeXB0b3IgPSBDQkMuZXh0ZW5kKHtcblx0ICAgICAgICAgICAgLyoqXG5cdCAgICAgICAgICAgICAqIFByb2Nlc3NlcyB0aGUgZGF0YSBibG9jayBhdCBvZmZzZXQuXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IHdvcmRzIFRoZSBkYXRhIHdvcmRzIHRvIG9wZXJhdGUgb24uXG5cdCAgICAgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXQgVGhlIG9mZnNldCB3aGVyZSB0aGUgYmxvY2sgc3RhcnRzLlxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiAgICAgbW9kZS5wcm9jZXNzQmxvY2soZGF0YS53b3Jkcywgb2Zmc2V0KTtcblx0ICAgICAgICAgICAgICovXG5cdCAgICAgICAgICAgIHByb2Nlc3NCbG9jazogZnVuY3Rpb24gKHdvcmRzLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICAgICAgdmFyIGNpcGhlciA9IHRoaXMuX2NpcGhlcjtcblx0ICAgICAgICAgICAgICAgIHZhciBibG9ja1NpemUgPSBjaXBoZXIuYmxvY2tTaXplO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBSZW1lbWJlciB0aGlzIGJsb2NrIHRvIHVzZSB3aXRoIG5leHQgYmxvY2tcblx0ICAgICAgICAgICAgICAgIHZhciB0aGlzQmxvY2sgPSB3b3Jkcy5zbGljZShvZmZzZXQsIG9mZnNldCArIGJsb2NrU2l6ZSk7XG5cblx0ICAgICAgICAgICAgICAgIC8vIERlY3J5cHQgYW5kIFhPUlxuXHQgICAgICAgICAgICAgICAgY2lwaGVyLmRlY3J5cHRCbG9jayh3b3Jkcywgb2Zmc2V0KTtcblx0ICAgICAgICAgICAgICAgIHhvckJsb2NrLmNhbGwodGhpcywgd29yZHMsIG9mZnNldCwgYmxvY2tTaXplKTtcblxuXHQgICAgICAgICAgICAgICAgLy8gVGhpcyBibG9jayBiZWNvbWVzIHRoZSBwcmV2aW91cyBibG9ja1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fcHJldkJsb2NrID0gdGhpc0Jsb2NrO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSk7XG5cblx0ICAgICAgICBmdW5jdGlvbiB4b3JCbG9jayh3b3Jkcywgb2Zmc2V0LCBibG9ja1NpemUpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgdmFyIGl2ID0gdGhpcy5faXY7XG5cblx0ICAgICAgICAgICAgLy8gQ2hvb3NlIG1peGluZyBibG9ja1xuXHQgICAgICAgICAgICBpZiAoaXYpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBibG9jayA9IGl2O1xuXG5cdCAgICAgICAgICAgICAgICAvLyBSZW1vdmUgSVYgZm9yIHN1YnNlcXVlbnQgYmxvY2tzXG5cdCAgICAgICAgICAgICAgICB0aGlzLl9pdiA9IHVuZGVmaW5lZDtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHZhciBibG9jayA9IHRoaXMuX3ByZXZCbG9jaztcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIFhPUiBibG9ja3Ncblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBibG9ja1NpemU7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgd29yZHNbb2Zmc2V0ICsgaV0gXj0gYmxvY2tbaV07XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cblx0ICAgICAgICByZXR1cm4gQ0JDO1xuXHQgICAgfSgpKTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBQYWRkaW5nIG5hbWVzcGFjZS5cblx0ICAgICAqL1xuXHQgICAgdmFyIENfcGFkID0gQy5wYWQgPSB7fTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBQS0NTICM1LzcgcGFkZGluZyBzdHJhdGVneS5cblx0ICAgICAqL1xuXHQgICAgdmFyIFBrY3M3ID0gQ19wYWQuUGtjczcgPSB7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogUGFkcyBkYXRhIHVzaW5nIHRoZSBhbGdvcml0aG0gZGVmaW5lZCBpbiBQS0NTICM1LzcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheX0gZGF0YSBUaGUgZGF0YSB0byBwYWQuXG5cdCAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IGJsb2NrU2l6ZSBUaGUgbXVsdGlwbGUgdGhhdCB0aGUgZGF0YSBzaG91bGQgYmUgcGFkZGVkIHRvLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICBDcnlwdG9KUy5wYWQuUGtjczcucGFkKHdvcmRBcnJheSwgNCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgcGFkOiBmdW5jdGlvbiAoZGF0YSwgYmxvY2tTaXplKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgIHZhciBibG9ja1NpemVCeXRlcyA9IGJsb2NrU2l6ZSAqIDQ7XG5cblx0ICAgICAgICAgICAgLy8gQ291bnQgcGFkZGluZyBieXRlc1xuXHQgICAgICAgICAgICB2YXIgblBhZGRpbmdCeXRlcyA9IGJsb2NrU2l6ZUJ5dGVzIC0gZGF0YS5zaWdCeXRlcyAlIGJsb2NrU2l6ZUJ5dGVzO1xuXG5cdCAgICAgICAgICAgIC8vIENyZWF0ZSBwYWRkaW5nIHdvcmRcblx0ICAgICAgICAgICAgdmFyIHBhZGRpbmdXb3JkID0gKG5QYWRkaW5nQnl0ZXMgPDwgMjQpIHwgKG5QYWRkaW5nQnl0ZXMgPDwgMTYpIHwgKG5QYWRkaW5nQnl0ZXMgPDwgOCkgfCBuUGFkZGluZ0J5dGVzO1xuXG5cdCAgICAgICAgICAgIC8vIENyZWF0ZSBwYWRkaW5nXG5cdCAgICAgICAgICAgIHZhciBwYWRkaW5nV29yZHMgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuUGFkZGluZ0J5dGVzOyBpICs9IDQpIHtcblx0ICAgICAgICAgICAgICAgIHBhZGRpbmdXb3Jkcy5wdXNoKHBhZGRpbmdXb3JkKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB2YXIgcGFkZGluZyA9IFdvcmRBcnJheS5jcmVhdGUocGFkZGluZ1dvcmRzLCBuUGFkZGluZ0J5dGVzKTtcblxuXHQgICAgICAgICAgICAvLyBBZGQgcGFkZGluZ1xuXHQgICAgICAgICAgICBkYXRhLmNvbmNhdChwYWRkaW5nKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogVW5wYWRzIGRhdGEgdGhhdCBoYWQgYmVlbiBwYWRkZWQgdXNpbmcgdGhlIGFsZ29yaXRobSBkZWZpbmVkIGluIFBLQ1MgIzUvNy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fSBkYXRhIFRoZSBkYXRhIHRvIHVucGFkLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICBDcnlwdG9KUy5wYWQuUGtjczcudW5wYWQod29yZEFycmF5KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICB1bnBhZDogZnVuY3Rpb24gKGRhdGEpIHtcblx0ICAgICAgICAgICAgLy8gR2V0IG51bWJlciBvZiBwYWRkaW5nIGJ5dGVzIGZyb20gbGFzdCBieXRlXG5cdCAgICAgICAgICAgIHZhciBuUGFkZGluZ0J5dGVzID0gZGF0YS53b3Jkc1soZGF0YS5zaWdCeXRlcyAtIDEpID4+PiAyXSAmIDB4ZmY7XG5cblx0ICAgICAgICAgICAgLy8gUmVtb3ZlIHBhZGRpbmdcblx0ICAgICAgICAgICAgZGF0YS5zaWdCeXRlcyAtPSBuUGFkZGluZ0J5dGVzO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cblx0ICAgIC8qKlxuXHQgICAgICogQWJzdHJhY3QgYmFzZSBibG9jayBjaXBoZXIgdGVtcGxhdGUuXG5cdCAgICAgKlxuXHQgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IGJsb2NrU2l6ZSBUaGUgbnVtYmVyIG9mIDMyLWJpdCB3b3JkcyB0aGlzIGNpcGhlciBvcGVyYXRlcyBvbi4gRGVmYXVsdDogNCAoMTI4IGJpdHMpXG5cdCAgICAgKi9cblx0ICAgIHZhciBCbG9ja0NpcGhlciA9IENfbGliLkJsb2NrQ2lwaGVyID0gQ2lwaGVyLmV4dGVuZCh7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29uZmlndXJhdGlvbiBvcHRpb25zLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHByb3BlcnR5IHtNb2RlfSBtb2RlIFRoZSBibG9jayBtb2RlIHRvIHVzZS4gRGVmYXVsdDogQ0JDXG5cdCAgICAgICAgICogQHByb3BlcnR5IHtQYWRkaW5nfSBwYWRkaW5nIFRoZSBwYWRkaW5nIHN0cmF0ZWd5IHRvIHVzZS4gRGVmYXVsdDogUGtjczdcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjZmc6IENpcGhlci5jZmcuZXh0ZW5kKHtcblx0ICAgICAgICAgICAgbW9kZTogQ0JDLFxuXHQgICAgICAgICAgICBwYWRkaW5nOiBQa2NzN1xuXHQgICAgICAgIH0pLFxuXG5cdCAgICAgICAgcmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gUmVzZXQgY2lwaGVyXG5cdCAgICAgICAgICAgIENpcGhlci5yZXNldC5jYWxsKHRoaXMpO1xuXG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgY2ZnID0gdGhpcy5jZmc7XG5cdCAgICAgICAgICAgIHZhciBpdiA9IGNmZy5pdjtcblx0ICAgICAgICAgICAgdmFyIG1vZGUgPSBjZmcubW9kZTtcblxuXHQgICAgICAgICAgICAvLyBSZXNldCBibG9jayBtb2RlXG5cdCAgICAgICAgICAgIGlmICh0aGlzLl94Zm9ybU1vZGUgPT0gdGhpcy5fRU5DX1hGT1JNX01PREUpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBtb2RlQ3JlYXRvciA9IG1vZGUuY3JlYXRlRW5jcnlwdG9yO1xuXHQgICAgICAgICAgICB9IGVsc2UgLyogaWYgKHRoaXMuX3hmb3JtTW9kZSA9PSB0aGlzLl9ERUNfWEZPUk1fTU9ERSkgKi8ge1xuXHQgICAgICAgICAgICAgICAgdmFyIG1vZGVDcmVhdG9yID0gbW9kZS5jcmVhdGVEZWNyeXB0b3I7XG5cdCAgICAgICAgICAgICAgICAvLyBLZWVwIGF0IGxlYXN0IG9uZSBibG9jayBpbiB0aGUgYnVmZmVyIGZvciB1bnBhZGRpbmdcblx0ICAgICAgICAgICAgICAgIHRoaXMuX21pbkJ1ZmZlclNpemUgPSAxO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgaWYgKHRoaXMuX21vZGUgJiYgdGhpcy5fbW9kZS5fX2NyZWF0b3IgPT0gbW9kZUNyZWF0b3IpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX21vZGUuaW5pdCh0aGlzLCBpdiAmJiBpdi53b3Jkcyk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9tb2RlID0gbW9kZUNyZWF0b3IuY2FsbChtb2RlLCB0aGlzLCBpdiAmJiBpdi53b3Jkcyk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9tb2RlLl9fY3JlYXRvciA9IG1vZGVDcmVhdG9yO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb1Byb2Nlc3NCbG9jazogZnVuY3Rpb24gKHdvcmRzLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbW9kZS5wcm9jZXNzQmxvY2sod29yZHMsIG9mZnNldCk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb0ZpbmFsaXplOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgIHZhciBwYWRkaW5nID0gdGhpcy5jZmcucGFkZGluZztcblxuXHQgICAgICAgICAgICAvLyBGaW5hbGl6ZVxuXHQgICAgICAgICAgICBpZiAodGhpcy5feGZvcm1Nb2RlID09IHRoaXMuX0VOQ19YRk9STV9NT0RFKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBQYWQgZGF0YVxuXHQgICAgICAgICAgICAgICAgcGFkZGluZy5wYWQodGhpcy5fZGF0YSwgdGhpcy5ibG9ja1NpemUpO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBQcm9jZXNzIGZpbmFsIGJsb2Nrc1xuXHQgICAgICAgICAgICAgICAgdmFyIGZpbmFsUHJvY2Vzc2VkQmxvY2tzID0gdGhpcy5fcHJvY2VzcyghISdmbHVzaCcpO1xuXHQgICAgICAgICAgICB9IGVsc2UgLyogaWYgKHRoaXMuX3hmb3JtTW9kZSA9PSB0aGlzLl9ERUNfWEZPUk1fTU9ERSkgKi8ge1xuXHQgICAgICAgICAgICAgICAgLy8gUHJvY2VzcyBmaW5hbCBibG9ja3Ncblx0ICAgICAgICAgICAgICAgIHZhciBmaW5hbFByb2Nlc3NlZEJsb2NrcyA9IHRoaXMuX3Byb2Nlc3MoISEnZmx1c2gnKTtcblxuXHQgICAgICAgICAgICAgICAgLy8gVW5wYWQgZGF0YVxuXHQgICAgICAgICAgICAgICAgcGFkZGluZy51bnBhZChmaW5hbFByb2Nlc3NlZEJsb2Nrcyk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gZmluYWxQcm9jZXNzZWRCbG9ja3M7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGJsb2NrU2l6ZTogMTI4LzMyXG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBBIGNvbGxlY3Rpb24gb2YgY2lwaGVyIHBhcmFtZXRlcnMuXG5cdCAgICAgKlxuXHQgICAgICogQHByb3BlcnR5IHtXb3JkQXJyYXl9IGNpcGhlcnRleHQgVGhlIHJhdyBjaXBoZXJ0ZXh0LlxuXHQgICAgICogQHByb3BlcnR5IHtXb3JkQXJyYXl9IGtleSBUaGUga2V5IHRvIHRoaXMgY2lwaGVydGV4dC5cblx0ICAgICAqIEBwcm9wZXJ0eSB7V29yZEFycmF5fSBpdiBUaGUgSVYgdXNlZCBpbiB0aGUgY2lwaGVyaW5nIG9wZXJhdGlvbi5cblx0ICAgICAqIEBwcm9wZXJ0eSB7V29yZEFycmF5fSBzYWx0IFRoZSBzYWx0IHVzZWQgd2l0aCBhIGtleSBkZXJpdmF0aW9uIGZ1bmN0aW9uLlxuXHQgICAgICogQHByb3BlcnR5IHtDaXBoZXJ9IGFsZ29yaXRobSBUaGUgY2lwaGVyIGFsZ29yaXRobS5cblx0ICAgICAqIEBwcm9wZXJ0eSB7TW9kZX0gbW9kZSBUaGUgYmxvY2sgbW9kZSB1c2VkIGluIHRoZSBjaXBoZXJpbmcgb3BlcmF0aW9uLlxuXHQgICAgICogQHByb3BlcnR5IHtQYWRkaW5nfSBwYWRkaW5nIFRoZSBwYWRkaW5nIHNjaGVtZSB1c2VkIGluIHRoZSBjaXBoZXJpbmcgb3BlcmF0aW9uLlxuXHQgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IGJsb2NrU2l6ZSBUaGUgYmxvY2sgc2l6ZSBvZiB0aGUgY2lwaGVyLlxuXHQgICAgICogQHByb3BlcnR5IHtGb3JtYXR9IGZvcm1hdHRlciBUaGUgZGVmYXVsdCBmb3JtYXR0aW5nIHN0cmF0ZWd5IHRvIGNvbnZlcnQgdGhpcyBjaXBoZXIgcGFyYW1zIG9iamVjdCB0byBhIHN0cmluZy5cblx0ICAgICAqL1xuXHQgICAgdmFyIENpcGhlclBhcmFtcyA9IENfbGliLkNpcGhlclBhcmFtcyA9IEJhc2UuZXh0ZW5kKHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBJbml0aWFsaXplcyBhIG5ld2x5IGNyZWF0ZWQgY2lwaGVyIHBhcmFtcyBvYmplY3QuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY2lwaGVyUGFyYW1zIEFuIG9iamVjdCB3aXRoIGFueSBvZiB0aGUgcG9zc2libGUgY2lwaGVyIHBhcmFtZXRlcnMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBjaXBoZXJQYXJhbXMgPSBDcnlwdG9KUy5saWIuQ2lwaGVyUGFyYW1zLmNyZWF0ZSh7XG5cdCAgICAgICAgICogICAgICAgICBjaXBoZXJ0ZXh0OiBjaXBoZXJ0ZXh0V29yZEFycmF5LFxuXHQgICAgICAgICAqICAgICAgICAga2V5OiBrZXlXb3JkQXJyYXksXG5cdCAgICAgICAgICogICAgICAgICBpdjogaXZXb3JkQXJyYXksXG5cdCAgICAgICAgICogICAgICAgICBzYWx0OiBzYWx0V29yZEFycmF5LFxuXHQgICAgICAgICAqICAgICAgICAgYWxnb3JpdGhtOiBDcnlwdG9KUy5hbGdvLkFFUyxcblx0ICAgICAgICAgKiAgICAgICAgIG1vZGU6IENyeXB0b0pTLm1vZGUuQ0JDLFxuXHQgICAgICAgICAqICAgICAgICAgcGFkZGluZzogQ3J5cHRvSlMucGFkLlBLQ1M3LFxuXHQgICAgICAgICAqICAgICAgICAgYmxvY2tTaXplOiA0LFxuXHQgICAgICAgICAqICAgICAgICAgZm9ybWF0dGVyOiBDcnlwdG9KUy5mb3JtYXQuT3BlblNTTFxuXHQgICAgICAgICAqICAgICB9KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBpbml0OiBmdW5jdGlvbiAoY2lwaGVyUGFyYW1zKSB7XG5cdCAgICAgICAgICAgIHRoaXMubWl4SW4oY2lwaGVyUGFyYW1zKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgdGhpcyBjaXBoZXIgcGFyYW1zIG9iamVjdCB0byBhIHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7Rm9ybWF0fSBmb3JtYXR0ZXIgKE9wdGlvbmFsKSBUaGUgZm9ybWF0dGluZyBzdHJhdGVneSB0byB1c2UuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBzdHJpbmdpZmllZCBjaXBoZXIgcGFyYW1zLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHRocm93cyBFcnJvciBJZiBuZWl0aGVyIHRoZSBmb3JtYXR0ZXIgbm9yIHRoZSBkZWZhdWx0IGZvcm1hdHRlciBpcyBzZXQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBzdHJpbmcgPSBjaXBoZXJQYXJhbXMgKyAnJztcblx0ICAgICAgICAgKiAgICAgdmFyIHN0cmluZyA9IGNpcGhlclBhcmFtcy50b1N0cmluZygpO1xuXHQgICAgICAgICAqICAgICB2YXIgc3RyaW5nID0gY2lwaGVyUGFyYW1zLnRvU3RyaW5nKENyeXB0b0pTLmZvcm1hdC5PcGVuU1NMKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICB0b1N0cmluZzogZnVuY3Rpb24gKGZvcm1hdHRlcikge1xuXHQgICAgICAgICAgICByZXR1cm4gKGZvcm1hdHRlciB8fCB0aGlzLmZvcm1hdHRlcikuc3RyaW5naWZ5KHRoaXMpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIEZvcm1hdCBuYW1lc3BhY2UuXG5cdCAgICAgKi9cblx0ICAgIHZhciBDX2Zvcm1hdCA9IEMuZm9ybWF0ID0ge307XG5cblx0ICAgIC8qKlxuXHQgICAgICogT3BlblNTTCBmb3JtYXR0aW5nIHN0cmF0ZWd5LlxuXHQgICAgICovXG5cdCAgICB2YXIgT3BlblNTTEZvcm1hdHRlciA9IENfZm9ybWF0Lk9wZW5TU0wgPSB7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSBjaXBoZXIgcGFyYW1zIG9iamVjdCB0byBhbiBPcGVuU1NMLWNvbXBhdGlibGUgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtDaXBoZXJQYXJhbXN9IGNpcGhlclBhcmFtcyBUaGUgY2lwaGVyIHBhcmFtcyBvYmplY3QuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBPcGVuU1NMLWNvbXBhdGlibGUgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgb3BlblNTTFN0cmluZyA9IENyeXB0b0pTLmZvcm1hdC5PcGVuU1NMLnN0cmluZ2lmeShjaXBoZXJQYXJhbXMpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHN0cmluZ2lmeTogZnVuY3Rpb24gKGNpcGhlclBhcmFtcykge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGNpcGhlcnRleHQgPSBjaXBoZXJQYXJhbXMuY2lwaGVydGV4dDtcblx0ICAgICAgICAgICAgdmFyIHNhbHQgPSBjaXBoZXJQYXJhbXMuc2FsdDtcblxuXHQgICAgICAgICAgICAvLyBGb3JtYXRcblx0ICAgICAgICAgICAgaWYgKHNhbHQpIHtcblx0ICAgICAgICAgICAgICAgIHZhciB3b3JkQXJyYXkgPSBXb3JkQXJyYXkuY3JlYXRlKFsweDUzNjE2Yzc0LCAweDY1NjQ1ZjVmXSkuY29uY2F0KHNhbHQpLmNvbmNhdChjaXBoZXJ0ZXh0KTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHZhciB3b3JkQXJyYXkgPSBjaXBoZXJ0ZXh0O1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIHdvcmRBcnJheS50b1N0cmluZyhCYXNlNjQpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyBhbiBPcGVuU1NMLWNvbXBhdGlibGUgc3RyaW5nIHRvIGEgY2lwaGVyIHBhcmFtcyBvYmplY3QuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gb3BlblNTTFN0ciBUaGUgT3BlblNTTC1jb21wYXRpYmxlIHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge0NpcGhlclBhcmFtc30gVGhlIGNpcGhlciBwYXJhbXMgb2JqZWN0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgY2lwaGVyUGFyYW1zID0gQ3J5cHRvSlMuZm9ybWF0Lk9wZW5TU0wucGFyc2Uob3BlblNTTFN0cmluZyk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgcGFyc2U6IGZ1bmN0aW9uIChvcGVuU1NMU3RyKSB7XG5cdCAgICAgICAgICAgIC8vIFBhcnNlIGJhc2U2NFxuXHQgICAgICAgICAgICB2YXIgY2lwaGVydGV4dCA9IEJhc2U2NC5wYXJzZShvcGVuU1NMU3RyKTtcblxuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgY2lwaGVydGV4dFdvcmRzID0gY2lwaGVydGV4dC53b3JkcztcblxuXHQgICAgICAgICAgICAvLyBUZXN0IGZvciBzYWx0XG5cdCAgICAgICAgICAgIGlmIChjaXBoZXJ0ZXh0V29yZHNbMF0gPT0gMHg1MzYxNmM3NCAmJiBjaXBoZXJ0ZXh0V29yZHNbMV0gPT0gMHg2NTY0NWY1Zikge1xuXHQgICAgICAgICAgICAgICAgLy8gRXh0cmFjdCBzYWx0XG5cdCAgICAgICAgICAgICAgICB2YXIgc2FsdCA9IFdvcmRBcnJheS5jcmVhdGUoY2lwaGVydGV4dFdvcmRzLnNsaWNlKDIsIDQpKTtcblxuXHQgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHNhbHQgZnJvbSBjaXBoZXJ0ZXh0XG5cdCAgICAgICAgICAgICAgICBjaXBoZXJ0ZXh0V29yZHMuc3BsaWNlKDAsIDQpO1xuXHQgICAgICAgICAgICAgICAgY2lwaGVydGV4dC5zaWdCeXRlcyAtPSAxNjtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIHJldHVybiBDaXBoZXJQYXJhbXMuY3JlYXRlKHsgY2lwaGVydGV4dDogY2lwaGVydGV4dCwgc2FsdDogc2FsdCB9KTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXG5cdCAgICAvKipcblx0ICAgICAqIEEgY2lwaGVyIHdyYXBwZXIgdGhhdCByZXR1cm5zIGNpcGhlcnRleHQgYXMgYSBzZXJpYWxpemFibGUgY2lwaGVyIHBhcmFtcyBvYmplY3QuXG5cdCAgICAgKi9cblx0ICAgIHZhciBTZXJpYWxpemFibGVDaXBoZXIgPSBDX2xpYi5TZXJpYWxpemFibGVDaXBoZXIgPSBCYXNlLmV4dGVuZCh7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29uZmlndXJhdGlvbiBvcHRpb25zLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHByb3BlcnR5IHtGb3JtYXR0ZXJ9IGZvcm1hdCBUaGUgZm9ybWF0dGluZyBzdHJhdGVneSB0byBjb252ZXJ0IGNpcGhlciBwYXJhbSBvYmplY3RzIHRvIGFuZCBmcm9tIGEgc3RyaW5nLiBEZWZhdWx0OiBPcGVuU1NMXG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY2ZnOiBCYXNlLmV4dGVuZCh7XG5cdCAgICAgICAgICAgIGZvcm1hdDogT3BlblNTTEZvcm1hdHRlclxuXHQgICAgICAgIH0pLFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogRW5jcnlwdHMgYSBtZXNzYWdlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtDaXBoZXJ9IGNpcGhlciBUaGUgY2lwaGVyIGFsZ29yaXRobSB0byB1c2UuXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGVuY3J5cHQuXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl9IGtleSBUaGUga2V5LlxuXHQgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjZmcgKE9wdGlvbmFsKSBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHVzZSBmb3IgdGhpcyBvcGVyYXRpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtDaXBoZXJQYXJhbXN9IEEgY2lwaGVyIHBhcmFtcyBvYmplY3QuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBjaXBoZXJ0ZXh0UGFyYW1zID0gQ3J5cHRvSlMubGliLlNlcmlhbGl6YWJsZUNpcGhlci5lbmNyeXB0KENyeXB0b0pTLmFsZ28uQUVTLCBtZXNzYWdlLCBrZXkpO1xuXHQgICAgICAgICAqICAgICB2YXIgY2lwaGVydGV4dFBhcmFtcyA9IENyeXB0b0pTLmxpYi5TZXJpYWxpemFibGVDaXBoZXIuZW5jcnlwdChDcnlwdG9KUy5hbGdvLkFFUywgbWVzc2FnZSwga2V5LCB7IGl2OiBpdiB9KTtcblx0ICAgICAgICAgKiAgICAgdmFyIGNpcGhlcnRleHRQYXJhbXMgPSBDcnlwdG9KUy5saWIuU2VyaWFsaXphYmxlQ2lwaGVyLmVuY3J5cHQoQ3J5cHRvSlMuYWxnby5BRVMsIG1lc3NhZ2UsIGtleSwgeyBpdjogaXYsIGZvcm1hdDogQ3J5cHRvSlMuZm9ybWF0Lk9wZW5TU0wgfSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgZW5jcnlwdDogZnVuY3Rpb24gKGNpcGhlciwgbWVzc2FnZSwga2V5LCBjZmcpIHtcblx0ICAgICAgICAgICAgLy8gQXBwbHkgY29uZmlnIGRlZmF1bHRzXG5cdCAgICAgICAgICAgIGNmZyA9IHRoaXMuY2ZnLmV4dGVuZChjZmcpO1xuXG5cdCAgICAgICAgICAgIC8vIEVuY3J5cHRcblx0ICAgICAgICAgICAgdmFyIGVuY3J5cHRvciA9IGNpcGhlci5jcmVhdGVFbmNyeXB0b3Ioa2V5LCBjZmcpO1xuXHQgICAgICAgICAgICB2YXIgY2lwaGVydGV4dCA9IGVuY3J5cHRvci5maW5hbGl6ZShtZXNzYWdlKTtcblxuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgY2lwaGVyQ2ZnID0gZW5jcnlwdG9yLmNmZztcblxuXHQgICAgICAgICAgICAvLyBDcmVhdGUgYW5kIHJldHVybiBzZXJpYWxpemFibGUgY2lwaGVyIHBhcmFtc1xuXHQgICAgICAgICAgICByZXR1cm4gQ2lwaGVyUGFyYW1zLmNyZWF0ZSh7XG5cdCAgICAgICAgICAgICAgICBjaXBoZXJ0ZXh0OiBjaXBoZXJ0ZXh0LFxuXHQgICAgICAgICAgICAgICAga2V5OiBrZXksXG5cdCAgICAgICAgICAgICAgICBpdjogY2lwaGVyQ2ZnLml2LFxuXHQgICAgICAgICAgICAgICAgYWxnb3JpdGhtOiBjaXBoZXIsXG5cdCAgICAgICAgICAgICAgICBtb2RlOiBjaXBoZXJDZmcubW9kZSxcblx0ICAgICAgICAgICAgICAgIHBhZGRpbmc6IGNpcGhlckNmZy5wYWRkaW5nLFxuXHQgICAgICAgICAgICAgICAgYmxvY2tTaXplOiBjaXBoZXIuYmxvY2tTaXplLFxuXHQgICAgICAgICAgICAgICAgZm9ybWF0dGVyOiBjZmcuZm9ybWF0XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBEZWNyeXB0cyBzZXJpYWxpemVkIGNpcGhlcnRleHQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge0NpcGhlcn0gY2lwaGVyIFRoZSBjaXBoZXIgYWxnb3JpdGhtIHRvIHVzZS5cblx0ICAgICAgICAgKiBAcGFyYW0ge0NpcGhlclBhcmFtc3xzdHJpbmd9IGNpcGhlcnRleHQgVGhlIGNpcGhlcnRleHQgdG8gZGVjcnlwdC5cblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheX0ga2V5IFRoZSBrZXkuXG5cdCAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNmZyAoT3B0aW9uYWwpIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gdXNlIGZvciB0aGlzIG9wZXJhdGlvbi5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIHBsYWludGV4dC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHBsYWludGV4dCA9IENyeXB0b0pTLmxpYi5TZXJpYWxpemFibGVDaXBoZXIuZGVjcnlwdChDcnlwdG9KUy5hbGdvLkFFUywgZm9ybWF0dGVkQ2lwaGVydGV4dCwga2V5LCB7IGl2OiBpdiwgZm9ybWF0OiBDcnlwdG9KUy5mb3JtYXQuT3BlblNTTCB9KTtcblx0ICAgICAgICAgKiAgICAgdmFyIHBsYWludGV4dCA9IENyeXB0b0pTLmxpYi5TZXJpYWxpemFibGVDaXBoZXIuZGVjcnlwdChDcnlwdG9KUy5hbGdvLkFFUywgY2lwaGVydGV4dFBhcmFtcywga2V5LCB7IGl2OiBpdiwgZm9ybWF0OiBDcnlwdG9KUy5mb3JtYXQuT3BlblNTTCB9KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBkZWNyeXB0OiBmdW5jdGlvbiAoY2lwaGVyLCBjaXBoZXJ0ZXh0LCBrZXksIGNmZykge1xuXHQgICAgICAgICAgICAvLyBBcHBseSBjb25maWcgZGVmYXVsdHNcblx0ICAgICAgICAgICAgY2ZnID0gdGhpcy5jZmcuZXh0ZW5kKGNmZyk7XG5cblx0ICAgICAgICAgICAgLy8gQ29udmVydCBzdHJpbmcgdG8gQ2lwaGVyUGFyYW1zXG5cdCAgICAgICAgICAgIGNpcGhlcnRleHQgPSB0aGlzLl9wYXJzZShjaXBoZXJ0ZXh0LCBjZmcuZm9ybWF0KTtcblxuXHQgICAgICAgICAgICAvLyBEZWNyeXB0XG5cdCAgICAgICAgICAgIHZhciBwbGFpbnRleHQgPSBjaXBoZXIuY3JlYXRlRGVjcnlwdG9yKGtleSwgY2ZnKS5maW5hbGl6ZShjaXBoZXJ0ZXh0LmNpcGhlcnRleHQpO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBwbGFpbnRleHQ7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbnZlcnRzIHNlcmlhbGl6ZWQgY2lwaGVydGV4dCB0byBDaXBoZXJQYXJhbXMsXG5cdCAgICAgICAgICogZWxzZSBhc3N1bWVkIENpcGhlclBhcmFtcyBhbHJlYWR5IGFuZCByZXR1cm5zIGNpcGhlcnRleHQgdW5jaGFuZ2VkLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtDaXBoZXJQYXJhbXN8c3RyaW5nfSBjaXBoZXJ0ZXh0IFRoZSBjaXBoZXJ0ZXh0LlxuXHQgICAgICAgICAqIEBwYXJhbSB7Rm9ybWF0dGVyfSBmb3JtYXQgVGhlIGZvcm1hdHRpbmcgc3RyYXRlZ3kgdG8gdXNlIHRvIHBhcnNlIHNlcmlhbGl6ZWQgY2lwaGVydGV4dC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge0NpcGhlclBhcmFtc30gVGhlIHVuc2VyaWFsaXplZCBjaXBoZXJ0ZXh0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgY2lwaGVydGV4dFBhcmFtcyA9IENyeXB0b0pTLmxpYi5TZXJpYWxpemFibGVDaXBoZXIuX3BhcnNlKGNpcGhlcnRleHRTdHJpbmdPclBhcmFtcywgZm9ybWF0KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBfcGFyc2U6IGZ1bmN0aW9uIChjaXBoZXJ0ZXh0LCBmb3JtYXQpIHtcblx0ICAgICAgICAgICAgaWYgKHR5cGVvZiBjaXBoZXJ0ZXh0ID09ICdzdHJpbmcnKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gZm9ybWF0LnBhcnNlKGNpcGhlcnRleHQsIHRoaXMpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGNpcGhlcnRleHQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBLZXkgZGVyaXZhdGlvbiBmdW5jdGlvbiBuYW1lc3BhY2UuXG5cdCAgICAgKi9cblx0ICAgIHZhciBDX2tkZiA9IEMua2RmID0ge307XG5cblx0ICAgIC8qKlxuXHQgICAgICogT3BlblNTTCBrZXkgZGVyaXZhdGlvbiBmdW5jdGlvbi5cblx0ICAgICAqL1xuXHQgICAgdmFyIE9wZW5TU0xLZGYgPSBDX2tkZi5PcGVuU1NMID0ge1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIERlcml2ZXMgYSBrZXkgYW5kIElWIGZyb20gYSBwYXNzd29yZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwYXNzd29yZCBUaGUgcGFzc3dvcmQgdG8gZGVyaXZlIGZyb20uXG5cdCAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IGtleVNpemUgVGhlIHNpemUgaW4gd29yZHMgb2YgdGhlIGtleSB0byBnZW5lcmF0ZS5cblx0ICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gaXZTaXplIFRoZSBzaXplIGluIHdvcmRzIG9mIHRoZSBJViB0byBnZW5lcmF0ZS5cblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IHNhbHQgKE9wdGlvbmFsKSBBIDY0LWJpdCBzYWx0IHRvIHVzZS4gSWYgb21pdHRlZCwgYSBzYWx0IHdpbGwgYmUgZ2VuZXJhdGVkIHJhbmRvbWx5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7Q2lwaGVyUGFyYW1zfSBBIGNpcGhlciBwYXJhbXMgb2JqZWN0IHdpdGggdGhlIGtleSwgSVYsIGFuZCBzYWx0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgZGVyaXZlZFBhcmFtcyA9IENyeXB0b0pTLmtkZi5PcGVuU1NMLmV4ZWN1dGUoJ1Bhc3N3b3JkJywgMjU2LzMyLCAxMjgvMzIpO1xuXHQgICAgICAgICAqICAgICB2YXIgZGVyaXZlZFBhcmFtcyA9IENyeXB0b0pTLmtkZi5PcGVuU1NMLmV4ZWN1dGUoJ1Bhc3N3b3JkJywgMjU2LzMyLCAxMjgvMzIsICdzYWx0c2FsdCcpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGV4ZWN1dGU6IGZ1bmN0aW9uIChwYXNzd29yZCwga2V5U2l6ZSwgaXZTaXplLCBzYWx0KSB7XG5cdCAgICAgICAgICAgIC8vIEdlbmVyYXRlIHJhbmRvbSBzYWx0XG5cdCAgICAgICAgICAgIGlmICghc2FsdCkge1xuXHQgICAgICAgICAgICAgICAgc2FsdCA9IFdvcmRBcnJheS5yYW5kb20oNjQvOCk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBEZXJpdmUga2V5IGFuZCBJVlxuXHQgICAgICAgICAgICB2YXIga2V5ID0gRXZwS0RGLmNyZWF0ZSh7IGtleVNpemU6IGtleVNpemUgKyBpdlNpemUgfSkuY29tcHV0ZShwYXNzd29yZCwgc2FsdCk7XG5cblx0ICAgICAgICAgICAgLy8gU2VwYXJhdGUga2V5IGFuZCBJVlxuXHQgICAgICAgICAgICB2YXIgaXYgPSBXb3JkQXJyYXkuY3JlYXRlKGtleS53b3Jkcy5zbGljZShrZXlTaXplKSwgaXZTaXplICogNCk7XG5cdCAgICAgICAgICAgIGtleS5zaWdCeXRlcyA9IGtleVNpemUgKiA0O1xuXG5cdCAgICAgICAgICAgIC8vIFJldHVybiBwYXJhbXNcblx0ICAgICAgICAgICAgcmV0dXJuIENpcGhlclBhcmFtcy5jcmVhdGUoeyBrZXk6IGtleSwgaXY6IGl2LCBzYWx0OiBzYWx0IH0pO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cblx0ICAgIC8qKlxuXHQgICAgICogQSBzZXJpYWxpemFibGUgY2lwaGVyIHdyYXBwZXIgdGhhdCBkZXJpdmVzIHRoZSBrZXkgZnJvbSBhIHBhc3N3b3JkLFxuXHQgICAgICogYW5kIHJldHVybnMgY2lwaGVydGV4dCBhcyBhIHNlcmlhbGl6YWJsZSBjaXBoZXIgcGFyYW1zIG9iamVjdC5cblx0ICAgICAqL1xuXHQgICAgdmFyIFBhc3N3b3JkQmFzZWRDaXBoZXIgPSBDX2xpYi5QYXNzd29yZEJhc2VkQ2lwaGVyID0gU2VyaWFsaXphYmxlQ2lwaGVyLmV4dGVuZCh7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29uZmlndXJhdGlvbiBvcHRpb25zLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHByb3BlcnR5IHtLREZ9IGtkZiBUaGUga2V5IGRlcml2YXRpb24gZnVuY3Rpb24gdG8gdXNlIHRvIGdlbmVyYXRlIGEga2V5IGFuZCBJViBmcm9tIGEgcGFzc3dvcmQuIERlZmF1bHQ6IE9wZW5TU0xcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjZmc6IFNlcmlhbGl6YWJsZUNpcGhlci5jZmcuZXh0ZW5kKHtcblx0ICAgICAgICAgICAga2RmOiBPcGVuU1NMS2RmXG5cdCAgICAgICAgfSksXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBFbmNyeXB0cyBhIG1lc3NhZ2UgdXNpbmcgYSBwYXNzd29yZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7Q2lwaGVyfSBjaXBoZXIgVGhlIGNpcGhlciBhbGdvcml0aG0gdG8gdXNlLlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBlbmNyeXB0LlxuXHQgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwYXNzd29yZCBUaGUgcGFzc3dvcmQuXG5cdCAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNmZyAoT3B0aW9uYWwpIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gdXNlIGZvciB0aGlzIG9wZXJhdGlvbi5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge0NpcGhlclBhcmFtc30gQSBjaXBoZXIgcGFyYW1zIG9iamVjdC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGNpcGhlcnRleHRQYXJhbXMgPSBDcnlwdG9KUy5saWIuUGFzc3dvcmRCYXNlZENpcGhlci5lbmNyeXB0KENyeXB0b0pTLmFsZ28uQUVTLCBtZXNzYWdlLCAncGFzc3dvcmQnKTtcblx0ICAgICAgICAgKiAgICAgdmFyIGNpcGhlcnRleHRQYXJhbXMgPSBDcnlwdG9KUy5saWIuUGFzc3dvcmRCYXNlZENpcGhlci5lbmNyeXB0KENyeXB0b0pTLmFsZ28uQUVTLCBtZXNzYWdlLCAncGFzc3dvcmQnLCB7IGZvcm1hdDogQ3J5cHRvSlMuZm9ybWF0Lk9wZW5TU0wgfSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgZW5jcnlwdDogZnVuY3Rpb24gKGNpcGhlciwgbWVzc2FnZSwgcGFzc3dvcmQsIGNmZykge1xuXHQgICAgICAgICAgICAvLyBBcHBseSBjb25maWcgZGVmYXVsdHNcblx0ICAgICAgICAgICAgY2ZnID0gdGhpcy5jZmcuZXh0ZW5kKGNmZyk7XG5cblx0ICAgICAgICAgICAgLy8gRGVyaXZlIGtleSBhbmQgb3RoZXIgcGFyYW1zXG5cdCAgICAgICAgICAgIHZhciBkZXJpdmVkUGFyYW1zID0gY2ZnLmtkZi5leGVjdXRlKHBhc3N3b3JkLCBjaXBoZXIua2V5U2l6ZSwgY2lwaGVyLml2U2l6ZSk7XG5cblx0ICAgICAgICAgICAgLy8gQWRkIElWIHRvIGNvbmZpZ1xuXHQgICAgICAgICAgICBjZmcuaXYgPSBkZXJpdmVkUGFyYW1zLml2O1xuXG5cdCAgICAgICAgICAgIC8vIEVuY3J5cHRcblx0ICAgICAgICAgICAgdmFyIGNpcGhlcnRleHQgPSBTZXJpYWxpemFibGVDaXBoZXIuZW5jcnlwdC5jYWxsKHRoaXMsIGNpcGhlciwgbWVzc2FnZSwgZGVyaXZlZFBhcmFtcy5rZXksIGNmZyk7XG5cblx0ICAgICAgICAgICAgLy8gTWl4IGluIGRlcml2ZWQgcGFyYW1zXG5cdCAgICAgICAgICAgIGNpcGhlcnRleHQubWl4SW4oZGVyaXZlZFBhcmFtcyk7XG5cblx0ICAgICAgICAgICAgcmV0dXJuIGNpcGhlcnRleHQ7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIERlY3J5cHRzIHNlcmlhbGl6ZWQgY2lwaGVydGV4dCB1c2luZyBhIHBhc3N3b3JkLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtDaXBoZXJ9IGNpcGhlciBUaGUgY2lwaGVyIGFsZ29yaXRobSB0byB1c2UuXG5cdCAgICAgICAgICogQHBhcmFtIHtDaXBoZXJQYXJhbXN8c3RyaW5nfSBjaXBoZXJ0ZXh0IFRoZSBjaXBoZXJ0ZXh0IHRvIGRlY3J5cHQuXG5cdCAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHBhc3N3b3JkIFRoZSBwYXNzd29yZC5cblx0ICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY2ZnIChPcHRpb25hbCkgVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byB1c2UgZm9yIHRoaXMgb3BlcmF0aW9uLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgcGxhaW50ZXh0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgcGxhaW50ZXh0ID0gQ3J5cHRvSlMubGliLlBhc3N3b3JkQmFzZWRDaXBoZXIuZGVjcnlwdChDcnlwdG9KUy5hbGdvLkFFUywgZm9ybWF0dGVkQ2lwaGVydGV4dCwgJ3Bhc3N3b3JkJywgeyBmb3JtYXQ6IENyeXB0b0pTLmZvcm1hdC5PcGVuU1NMIH0pO1xuXHQgICAgICAgICAqICAgICB2YXIgcGxhaW50ZXh0ID0gQ3J5cHRvSlMubGliLlBhc3N3b3JkQmFzZWRDaXBoZXIuZGVjcnlwdChDcnlwdG9KUy5hbGdvLkFFUywgY2lwaGVydGV4dFBhcmFtcywgJ3Bhc3N3b3JkJywgeyBmb3JtYXQ6IENyeXB0b0pTLmZvcm1hdC5PcGVuU1NMIH0pO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGRlY3J5cHQ6IGZ1bmN0aW9uIChjaXBoZXIsIGNpcGhlcnRleHQsIHBhc3N3b3JkLCBjZmcpIHtcblx0ICAgICAgICAgICAgLy8gQXBwbHkgY29uZmlnIGRlZmF1bHRzXG5cdCAgICAgICAgICAgIGNmZyA9IHRoaXMuY2ZnLmV4dGVuZChjZmcpO1xuXG5cdCAgICAgICAgICAgIC8vIENvbnZlcnQgc3RyaW5nIHRvIENpcGhlclBhcmFtc1xuXHQgICAgICAgICAgICBjaXBoZXJ0ZXh0ID0gdGhpcy5fcGFyc2UoY2lwaGVydGV4dCwgY2ZnLmZvcm1hdCk7XG5cblx0ICAgICAgICAgICAgLy8gRGVyaXZlIGtleSBhbmQgb3RoZXIgcGFyYW1zXG5cdCAgICAgICAgICAgIHZhciBkZXJpdmVkUGFyYW1zID0gY2ZnLmtkZi5leGVjdXRlKHBhc3N3b3JkLCBjaXBoZXIua2V5U2l6ZSwgY2lwaGVyLml2U2l6ZSwgY2lwaGVydGV4dC5zYWx0KTtcblxuXHQgICAgICAgICAgICAvLyBBZGQgSVYgdG8gY29uZmlnXG5cdCAgICAgICAgICAgIGNmZy5pdiA9IGRlcml2ZWRQYXJhbXMuaXY7XG5cblx0ICAgICAgICAgICAgLy8gRGVjcnlwdFxuXHQgICAgICAgICAgICB2YXIgcGxhaW50ZXh0ID0gU2VyaWFsaXphYmxlQ2lwaGVyLmRlY3J5cHQuY2FsbCh0aGlzLCBjaXBoZXIsIGNpcGhlcnRleHQsIGRlcml2ZWRQYXJhbXMua2V5LCBjZmcpO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBwbGFpbnRleHQ7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdH0oKSk7XG5cblxufSkpOyIsIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW10sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRyb290LkNyeXB0b0pTID0gZmFjdG9yeSgpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uICgpIHtcblxuXHQvKipcblx0ICogQ3J5cHRvSlMgY29yZSBjb21wb25lbnRzLlxuXHQgKi9cblx0dmFyIENyeXB0b0pTID0gQ3J5cHRvSlMgfHwgKGZ1bmN0aW9uIChNYXRoLCB1bmRlZmluZWQpIHtcblx0ICAgIC8qXG5cdCAgICAgKiBMb2NhbCBwb2x5ZmlsIG9mIE9iamVjdC5jcmVhdGVcblx0ICAgICAqL1xuXHQgICAgdmFyIGNyZWF0ZSA9IE9iamVjdC5jcmVhdGUgfHwgKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBmdW5jdGlvbiBGKCkge307XG5cblx0ICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaikge1xuXHQgICAgICAgICAgICB2YXIgc3VidHlwZTtcblxuXHQgICAgICAgICAgICBGLnByb3RvdHlwZSA9IG9iajtcblxuXHQgICAgICAgICAgICBzdWJ0eXBlID0gbmV3IEYoKTtcblxuXHQgICAgICAgICAgICBGLnByb3RvdHlwZSA9IG51bGw7XG5cblx0ICAgICAgICAgICAgcmV0dXJuIHN1YnR5cGU7XG5cdCAgICAgICAgfTtcblx0ICAgIH0oKSlcblxuXHQgICAgLyoqXG5cdCAgICAgKiBDcnlwdG9KUyBuYW1lc3BhY2UuXG5cdCAgICAgKi9cblx0ICAgIHZhciBDID0ge307XG5cblx0ICAgIC8qKlxuXHQgICAgICogTGlicmFyeSBuYW1lc3BhY2UuXG5cdCAgICAgKi9cblx0ICAgIHZhciBDX2xpYiA9IEMubGliID0ge307XG5cblx0ICAgIC8qKlxuXHQgICAgICogQmFzZSBvYmplY3QgZm9yIHByb3RvdHlwYWwgaW5oZXJpdGFuY2UuXG5cdCAgICAgKi9cblx0ICAgIHZhciBCYXNlID0gQ19saWIuQmFzZSA9IChmdW5jdGlvbiAoKSB7XG5cblxuXHQgICAgICAgIHJldHVybiB7XG5cdCAgICAgICAgICAgIC8qKlxuXHQgICAgICAgICAgICAgKiBDcmVhdGVzIGEgbmV3IG9iamVjdCB0aGF0IGluaGVyaXRzIGZyb20gdGhpcyBvYmplY3QuXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvdmVycmlkZXMgUHJvcGVydGllcyB0byBjb3B5IGludG8gdGhlIG5ldyBvYmplY3QuXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEByZXR1cm4ge09iamVjdH0gVGhlIG5ldyBvYmplY3QuXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogICAgIHZhciBNeVR5cGUgPSBDcnlwdG9KUy5saWIuQmFzZS5leHRlbmQoe1xuXHQgICAgICAgICAgICAgKiAgICAgICAgIGZpZWxkOiAndmFsdWUnLFxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiAgICAgICAgIG1ldGhvZDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgKiAgICAgICAgIH1cblx0ICAgICAgICAgICAgICogICAgIH0pO1xuXHQgICAgICAgICAgICAgKi9cblx0ICAgICAgICAgICAgZXh0ZW5kOiBmdW5jdGlvbiAob3ZlcnJpZGVzKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBTcGF3blxuXHQgICAgICAgICAgICAgICAgdmFyIHN1YnR5cGUgPSBjcmVhdGUodGhpcyk7XG5cblx0ICAgICAgICAgICAgICAgIC8vIEF1Z21lbnRcblx0ICAgICAgICAgICAgICAgIGlmIChvdmVycmlkZXMpIHtcblx0ICAgICAgICAgICAgICAgICAgICBzdWJ0eXBlLm1peEluKG92ZXJyaWRlcyk7XG5cdCAgICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBkZWZhdWx0IGluaXRpYWxpemVyXG5cdCAgICAgICAgICAgICAgICBpZiAoIXN1YnR5cGUuaGFzT3duUHJvcGVydHkoJ2luaXQnKSB8fCB0aGlzLmluaXQgPT09IHN1YnR5cGUuaW5pdCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHN1YnR5cGUuaW5pdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgc3VidHlwZS4kc3VwZXIuaW5pdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHQgICAgICAgICAgICAgICAgICAgIH07XG5cdCAgICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICAgIC8vIEluaXRpYWxpemVyJ3MgcHJvdG90eXBlIGlzIHRoZSBzdWJ0eXBlIG9iamVjdFxuXHQgICAgICAgICAgICAgICAgc3VidHlwZS5pbml0LnByb3RvdHlwZSA9IHN1YnR5cGU7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFJlZmVyZW5jZSBzdXBlcnR5cGVcblx0ICAgICAgICAgICAgICAgIHN1YnR5cGUuJHN1cGVyID0gdGhpcztcblxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHN1YnR5cGU7XG5cdCAgICAgICAgICAgIH0sXG5cblx0ICAgICAgICAgICAgLyoqXG5cdCAgICAgICAgICAgICAqIEV4dGVuZHMgdGhpcyBvYmplY3QgYW5kIHJ1bnMgdGhlIGluaXQgbWV0aG9kLlxuXHQgICAgICAgICAgICAgKiBBcmd1bWVudHMgdG8gY3JlYXRlKCkgd2lsbCBiZSBwYXNzZWQgdG8gaW5pdCgpLlxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAcmV0dXJuIHtPYmplY3R9IFRoZSBuZXcgb2JqZWN0LlxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqICAgICB2YXIgaW5zdGFuY2UgPSBNeVR5cGUuY3JlYXRlKCk7XG5cdCAgICAgICAgICAgICAqL1xuXHQgICAgICAgICAgICBjcmVhdGU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBpbnN0YW5jZSA9IHRoaXMuZXh0ZW5kKCk7XG5cdCAgICAgICAgICAgICAgICBpbnN0YW5jZS5pbml0LmFwcGx5KGluc3RhbmNlLCBhcmd1bWVudHMpO1xuXG5cdCAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG5cdCAgICAgICAgICAgIH0sXG5cblx0ICAgICAgICAgICAgLyoqXG5cdCAgICAgICAgICAgICAqIEluaXRpYWxpemVzIGEgbmV3bHkgY3JlYXRlZCBvYmplY3QuXG5cdCAgICAgICAgICAgICAqIE92ZXJyaWRlIHRoaXMgbWV0aG9kIHRvIGFkZCBzb21lIGxvZ2ljIHdoZW4geW91ciBvYmplY3RzIGFyZSBjcmVhdGVkLlxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiAgICAgdmFyIE15VHlwZSA9IENyeXB0b0pTLmxpYi5CYXNlLmV4dGVuZCh7XG5cdCAgICAgICAgICAgICAqICAgICAgICAgaW5pdDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgKiAgICAgICAgICAgICAvLyAuLi5cblx0ICAgICAgICAgICAgICogICAgICAgICB9XG5cdCAgICAgICAgICAgICAqICAgICB9KTtcblx0ICAgICAgICAgICAgICovXG5cdCAgICAgICAgICAgIGluaXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgfSxcblxuXHQgICAgICAgICAgICAvKipcblx0ICAgICAgICAgICAgICogQ29waWVzIHByb3BlcnRpZXMgaW50byB0aGlzIG9iamVjdC5cblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BlcnRpZXMgVGhlIHByb3BlcnRpZXMgdG8gbWl4IGluLlxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiAgICAgTXlUeXBlLm1peEluKHtcblx0ICAgICAgICAgICAgICogICAgICAgICBmaWVsZDogJ3ZhbHVlJ1xuXHQgICAgICAgICAgICAgKiAgICAgfSk7XG5cdCAgICAgICAgICAgICAqL1xuXHQgICAgICAgICAgICBtaXhJbjogZnVuY3Rpb24gKHByb3BlcnRpZXMpIHtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5TmFtZSBpbiBwcm9wZXJ0aWVzKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkocHJvcGVydHlOYW1lKSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW3Byb3BlcnR5TmFtZV0gPSBwcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV07XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICAvLyBJRSB3b24ndCBjb3B5IHRvU3RyaW5nIHVzaW5nIHRoZSBsb29wIGFib3ZlXG5cdCAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eSgndG9TdHJpbmcnKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMudG9TdHJpbmcgPSBwcm9wZXJ0aWVzLnRvU3RyaW5nO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9LFxuXG5cdCAgICAgICAgICAgIC8qKlxuXHQgICAgICAgICAgICAgKiBDcmVhdGVzIGEgY29weSBvZiB0aGlzIG9iamVjdC5cblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogQHJldHVybiB7T2JqZWN0fSBUaGUgY2xvbmUuXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqICAgICB2YXIgY2xvbmUgPSBpbnN0YW5jZS5jbG9uZSgpO1xuXHQgICAgICAgICAgICAgKi9cblx0ICAgICAgICAgICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmluaXQucHJvdG90eXBlLmV4dGVuZCh0aGlzKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH07XG5cdCAgICB9KCkpO1xuXG5cdCAgICAvKipcblx0ICAgICAqIEFuIGFycmF5IG9mIDMyLWJpdCB3b3Jkcy5cblx0ICAgICAqXG5cdCAgICAgKiBAcHJvcGVydHkge0FycmF5fSB3b3JkcyBUaGUgYXJyYXkgb2YgMzItYml0IHdvcmRzLlxuXHQgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IHNpZ0J5dGVzIFRoZSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgYnl0ZXMgaW4gdGhpcyB3b3JkIGFycmF5LlxuXHQgICAgICovXG5cdCAgICB2YXIgV29yZEFycmF5ID0gQ19saWIuV29yZEFycmF5ID0gQmFzZS5leHRlbmQoe1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEluaXRpYWxpemVzIGEgbmV3bHkgY3JlYXRlZCB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtBcnJheX0gd29yZHMgKE9wdGlvbmFsKSBBbiBhcnJheSBvZiAzMi1iaXQgd29yZHMuXG5cdCAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IHNpZ0J5dGVzIChPcHRpb25hbCkgVGhlIG51bWJlciBvZiBzaWduaWZpY2FudCBieXRlcyBpbiB0aGUgd29yZHMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB3b3JkQXJyYXkgPSBDcnlwdG9KUy5saWIuV29yZEFycmF5LmNyZWF0ZSgpO1xuXHQgICAgICAgICAqICAgICB2YXIgd29yZEFycmF5ID0gQ3J5cHRvSlMubGliLldvcmRBcnJheS5jcmVhdGUoWzB4MDAwMTAyMDMsIDB4MDQwNTA2MDddKTtcblx0ICAgICAgICAgKiAgICAgdmFyIHdvcmRBcnJheSA9IENyeXB0b0pTLmxpYi5Xb3JkQXJyYXkuY3JlYXRlKFsweDAwMDEwMjAzLCAweDA0MDUwNjA3XSwgNik7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgaW5pdDogZnVuY3Rpb24gKHdvcmRzLCBzaWdCeXRlcykge1xuXHQgICAgICAgICAgICB3b3JkcyA9IHRoaXMud29yZHMgPSB3b3JkcyB8fCBbXTtcblxuXHQgICAgICAgICAgICBpZiAoc2lnQnl0ZXMgIT0gdW5kZWZpbmVkKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLnNpZ0J5dGVzID0gc2lnQnl0ZXM7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLnNpZ0J5dGVzID0gd29yZHMubGVuZ3RoICogNDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyB0aGlzIHdvcmQgYXJyYXkgdG8gYSBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge0VuY29kZXJ9IGVuY29kZXIgKE9wdGlvbmFsKSBUaGUgZW5jb2Rpbmcgc3RyYXRlZ3kgdG8gdXNlLiBEZWZhdWx0OiBDcnlwdG9KUy5lbmMuSGV4XG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBzdHJpbmdpZmllZCB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgc3RyaW5nID0gd29yZEFycmF5ICsgJyc7XG5cdCAgICAgICAgICogICAgIHZhciBzdHJpbmcgPSB3b3JkQXJyYXkudG9TdHJpbmcoKTtcblx0ICAgICAgICAgKiAgICAgdmFyIHN0cmluZyA9IHdvcmRBcnJheS50b1N0cmluZyhDcnlwdG9KUy5lbmMuVXRmOCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uIChlbmNvZGVyKSB7XG5cdCAgICAgICAgICAgIHJldHVybiAoZW5jb2RlciB8fCBIZXgpLnN0cmluZ2lmeSh0aGlzKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29uY2F0ZW5hdGVzIGEgd29yZCBhcnJheSB0byB0aGlzIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheX0gd29yZEFycmF5IFRoZSB3b3JkIGFycmF5IHRvIGFwcGVuZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhpcyB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB3b3JkQXJyYXkxLmNvbmNhdCh3b3JkQXJyYXkyKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjb25jYXQ6IGZ1bmN0aW9uICh3b3JkQXJyYXkpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciB0aGlzV29yZHMgPSB0aGlzLndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgdGhhdFdvcmRzID0gd29yZEFycmF5LndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgdGhpc1NpZ0J5dGVzID0gdGhpcy5zaWdCeXRlcztcblx0ICAgICAgICAgICAgdmFyIHRoYXRTaWdCeXRlcyA9IHdvcmRBcnJheS5zaWdCeXRlcztcblxuXHQgICAgICAgICAgICAvLyBDbGFtcCBleGNlc3MgYml0c1xuXHQgICAgICAgICAgICB0aGlzLmNsYW1wKCk7XG5cblx0ICAgICAgICAgICAgLy8gQ29uY2F0XG5cdCAgICAgICAgICAgIGlmICh0aGlzU2lnQnl0ZXMgJSA0KSB7XG5cdCAgICAgICAgICAgICAgICAvLyBDb3B5IG9uZSBieXRlIGF0IGEgdGltZVxuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGF0U2lnQnl0ZXM7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciB0aGF0Qnl0ZSA9ICh0aGF0V29yZHNbaSA+Pj4gMl0gPj4+ICgyNCAtIChpICUgNCkgKiA4KSkgJiAweGZmO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXNXb3Jkc1sodGhpc1NpZ0J5dGVzICsgaSkgPj4+IDJdIHw9IHRoYXRCeXRlIDw8ICgyNCAtICgodGhpc1NpZ0J5dGVzICsgaSkgJSA0KSAqIDgpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgLy8gQ29weSBvbmUgd29yZCBhdCBhIHRpbWVcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhhdFNpZ0J5dGVzOyBpICs9IDQpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzV29yZHNbKHRoaXNTaWdCeXRlcyArIGkpID4+PiAyXSA9IHRoYXRXb3Jkc1tpID4+PiAyXTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLnNpZ0J5dGVzICs9IHRoYXRTaWdCeXRlcztcblxuXHQgICAgICAgICAgICAvLyBDaGFpbmFibGVcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIFJlbW92ZXMgaW5zaWduaWZpY2FudCBiaXRzLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB3b3JkQXJyYXkuY2xhbXAoKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjbGFtcDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIHdvcmRzID0gdGhpcy53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIHNpZ0J5dGVzID0gdGhpcy5zaWdCeXRlcztcblxuXHQgICAgICAgICAgICAvLyBDbGFtcFxuXHQgICAgICAgICAgICB3b3Jkc1tzaWdCeXRlcyA+Pj4gMl0gJj0gMHhmZmZmZmZmZiA8PCAoMzIgLSAoc2lnQnl0ZXMgJSA0KSAqIDgpO1xuXHQgICAgICAgICAgICB3b3Jkcy5sZW5ndGggPSBNYXRoLmNlaWwoc2lnQnl0ZXMgLyA0KTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ3JlYXRlcyBhIGNvcHkgb2YgdGhpcyB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgY2xvbmUuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBjbG9uZSA9IHdvcmRBcnJheS5jbG9uZSgpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBjbG9uZSA9IEJhc2UuY2xvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAgICAgY2xvbmUud29yZHMgPSB0aGlzLndvcmRzLnNsaWNlKDApO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBjbG9uZTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ3JlYXRlcyBhIHdvcmQgYXJyYXkgZmlsbGVkIHdpdGggcmFuZG9tIGJ5dGVzLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IG5CeXRlcyBUaGUgbnVtYmVyIG9mIHJhbmRvbSBieXRlcyB0byBnZW5lcmF0ZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIHJhbmRvbSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgd29yZEFycmF5ID0gQ3J5cHRvSlMubGliLldvcmRBcnJheS5yYW5kb20oMTYpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHJhbmRvbTogZnVuY3Rpb24gKG5CeXRlcykge1xuXHQgICAgICAgICAgICB2YXIgd29yZHMgPSBbXTtcblxuXHQgICAgICAgICAgICB2YXIgciA9IChmdW5jdGlvbiAobV93KSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgbV93ID0gbV93O1xuXHQgICAgICAgICAgICAgICAgdmFyIG1feiA9IDB4M2FkZTY4YjE7XG5cdCAgICAgICAgICAgICAgICB2YXIgbWFzayA9IDB4ZmZmZmZmZmY7XG5cblx0ICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgbV96ID0gKDB4OTA2OSAqIChtX3ogJiAweEZGRkYpICsgKG1feiA+PiAweDEwKSkgJiBtYXNrO1xuXHQgICAgICAgICAgICAgICAgICAgIG1fdyA9ICgweDQ2NTAgKiAobV93ICYgMHhGRkZGKSArIChtX3cgPj4gMHgxMCkpICYgbWFzaztcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gKChtX3ogPDwgMHgxMCkgKyBtX3cpICYgbWFzaztcblx0ICAgICAgICAgICAgICAgICAgICByZXN1bHQgLz0gMHgxMDAwMDAwMDA7XG5cdCAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IDAuNTtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICogKE1hdGgucmFuZG9tKCkgPiAuNSA/IDEgOiAtMSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0pO1xuXG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCByY2FjaGU7IGkgPCBuQnl0ZXM7IGkgKz0gNCkge1xuXHQgICAgICAgICAgICAgICAgdmFyIF9yID0gcigocmNhY2hlIHx8IE1hdGgucmFuZG9tKCkpICogMHgxMDAwMDAwMDApO1xuXG5cdCAgICAgICAgICAgICAgICByY2FjaGUgPSBfcigpICogMHgzYWRlNjdiNztcblx0ICAgICAgICAgICAgICAgIHdvcmRzLnB1c2goKF9yKCkgKiAweDEwMDAwMDAwMCkgfCAwKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgV29yZEFycmF5LmluaXQod29yZHMsIG5CeXRlcyk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogRW5jb2RlciBuYW1lc3BhY2UuXG5cdCAgICAgKi9cblx0ICAgIHZhciBDX2VuYyA9IEMuZW5jID0ge307XG5cblx0ICAgIC8qKlxuXHQgICAgICogSGV4IGVuY29kaW5nIHN0cmF0ZWd5LlxuXHQgICAgICovXG5cdCAgICB2YXIgSGV4ID0gQ19lbmMuSGV4ID0ge1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbnZlcnRzIGEgd29yZCBhcnJheSB0byBhIGhleCBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheX0gd29yZEFycmF5IFRoZSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgaGV4IHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGhleFN0cmluZyA9IENyeXB0b0pTLmVuYy5IZXguc3RyaW5naWZ5KHdvcmRBcnJheSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgc3RyaW5naWZ5OiBmdW5jdGlvbiAod29yZEFycmF5KSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgd29yZHMgPSB3b3JkQXJyYXkud29yZHM7XG5cdCAgICAgICAgICAgIHZhciBzaWdCeXRlcyA9IHdvcmRBcnJheS5zaWdCeXRlcztcblxuXHQgICAgICAgICAgICAvLyBDb252ZXJ0XG5cdCAgICAgICAgICAgIHZhciBoZXhDaGFycyA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpZ0J5dGVzOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHZhciBiaXRlID0gKHdvcmRzW2kgPj4+IDJdID4+PiAoMjQgLSAoaSAlIDQpICogOCkpICYgMHhmZjtcblx0ICAgICAgICAgICAgICAgIGhleENoYXJzLnB1c2goKGJpdGUgPj4+IDQpLnRvU3RyaW5nKDE2KSk7XG5cdCAgICAgICAgICAgICAgICBoZXhDaGFycy5wdXNoKChiaXRlICYgMHgwZikudG9TdHJpbmcoMTYpKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIHJldHVybiBoZXhDaGFycy5qb2luKCcnKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSBoZXggc3RyaW5nIHRvIGEgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBoZXhTdHIgVGhlIGhleCBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgd29yZEFycmF5ID0gQ3J5cHRvSlMuZW5jLkhleC5wYXJzZShoZXhTdHJpbmcpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHBhcnNlOiBmdW5jdGlvbiAoaGV4U3RyKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgIHZhciBoZXhTdHJMZW5ndGggPSBoZXhTdHIubGVuZ3RoO1xuXG5cdCAgICAgICAgICAgIC8vIENvbnZlcnRcblx0ICAgICAgICAgICAgdmFyIHdvcmRzID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGV4U3RyTGVuZ3RoOyBpICs9IDIpIHtcblx0ICAgICAgICAgICAgICAgIHdvcmRzW2kgPj4+IDNdIHw9IHBhcnNlSW50KGhleFN0ci5zdWJzdHIoaSwgMiksIDE2KSA8PCAoMjQgLSAoaSAlIDgpICogNCk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFdvcmRBcnJheS5pbml0KHdvcmRzLCBoZXhTdHJMZW5ndGggLyAyKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXG5cdCAgICAvKipcblx0ICAgICAqIExhdGluMSBlbmNvZGluZyBzdHJhdGVneS5cblx0ICAgICAqL1xuXHQgICAgdmFyIExhdGluMSA9IENfZW5jLkxhdGluMSA9IHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyBhIHdvcmQgYXJyYXkgdG8gYSBMYXRpbjEgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl9IHdvcmRBcnJheSBUaGUgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIExhdGluMSBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBsYXRpbjFTdHJpbmcgPSBDcnlwdG9KUy5lbmMuTGF0aW4xLnN0cmluZ2lmeSh3b3JkQXJyYXkpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHN0cmluZ2lmeTogZnVuY3Rpb24gKHdvcmRBcnJheSkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIHdvcmRzID0gd29yZEFycmF5LndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgc2lnQnl0ZXMgPSB3b3JkQXJyYXkuc2lnQnl0ZXM7XG5cblx0ICAgICAgICAgICAgLy8gQ29udmVydFxuXHQgICAgICAgICAgICB2YXIgbGF0aW4xQ2hhcnMgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaWdCeXRlczsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgYml0ZSA9ICh3b3Jkc1tpID4+PiAyXSA+Pj4gKDI0IC0gKGkgJSA0KSAqIDgpKSAmIDB4ZmY7XG5cdCAgICAgICAgICAgICAgICBsYXRpbjFDaGFycy5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoYml0ZSkpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIGxhdGluMUNoYXJzLmpvaW4oJycpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyBhIExhdGluMSBzdHJpbmcgdG8gYSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGxhdGluMVN0ciBUaGUgTGF0aW4xIHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB3b3JkQXJyYXkgPSBDcnlwdG9KUy5lbmMuTGF0aW4xLnBhcnNlKGxhdGluMVN0cmluZyk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgcGFyc2U6IGZ1bmN0aW9uIChsYXRpbjFTdHIpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgdmFyIGxhdGluMVN0ckxlbmd0aCA9IGxhdGluMVN0ci5sZW5ndGg7XG5cblx0ICAgICAgICAgICAgLy8gQ29udmVydFxuXHQgICAgICAgICAgICB2YXIgd29yZHMgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXRpbjFTdHJMZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgd29yZHNbaSA+Pj4gMl0gfD0gKGxhdGluMVN0ci5jaGFyQ29kZUF0KGkpICYgMHhmZikgPDwgKDI0IC0gKGkgJSA0KSAqIDgpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBXb3JkQXJyYXkuaW5pdCh3b3JkcywgbGF0aW4xU3RyTGVuZ3RoKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXG5cdCAgICAvKipcblx0ICAgICAqIFVURi04IGVuY29kaW5nIHN0cmF0ZWd5LlxuXHQgICAgICovXG5cdCAgICB2YXIgVXRmOCA9IENfZW5jLlV0ZjggPSB7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSB3b3JkIGFycmF5IHRvIGEgVVRGLTggc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl9IHdvcmRBcnJheSBUaGUgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIFVURi04IHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHV0ZjhTdHJpbmcgPSBDcnlwdG9KUy5lbmMuVXRmOC5zdHJpbmdpZnkod29yZEFycmF5KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBzdHJpbmdpZnk6IGZ1bmN0aW9uICh3b3JkQXJyYXkpIHtcblx0ICAgICAgICAgICAgdHJ5IHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKExhdGluMS5zdHJpbmdpZnkod29yZEFycmF5KSkpO1xuXHQgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG5cdCAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01hbGZvcm1lZCBVVEYtOCBkYXRhJyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSBVVEYtOCBzdHJpbmcgdG8gYSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHV0ZjhTdHIgVGhlIFVURi04IHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB3b3JkQXJyYXkgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZSh1dGY4U3RyaW5nKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBwYXJzZTogZnVuY3Rpb24gKHV0ZjhTdHIpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIExhdGluMS5wYXJzZSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQodXRmOFN0cikpKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXG5cdCAgICAvKipcblx0ICAgICAqIEFic3RyYWN0IGJ1ZmZlcmVkIGJsb2NrIGFsZ29yaXRobSB0ZW1wbGF0ZS5cblx0ICAgICAqXG5cdCAgICAgKiBUaGUgcHJvcGVydHkgYmxvY2tTaXplIG11c3QgYmUgaW1wbGVtZW50ZWQgaW4gYSBjb25jcmV0ZSBzdWJ0eXBlLlxuXHQgICAgICpcblx0ICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBfbWluQnVmZmVyU2l6ZSBUaGUgbnVtYmVyIG9mIGJsb2NrcyB0aGF0IHNob3VsZCBiZSBrZXB0IHVucHJvY2Vzc2VkIGluIHRoZSBidWZmZXIuIERlZmF1bHQ6IDBcblx0ICAgICAqL1xuXHQgICAgdmFyIEJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0gPSBDX2xpYi5CdWZmZXJlZEJsb2NrQWxnb3JpdGhtID0gQmFzZS5leHRlbmQoe1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIFJlc2V0cyB0aGlzIGJsb2NrIGFsZ29yaXRobSdzIGRhdGEgYnVmZmVyIHRvIGl0cyBpbml0aWFsIHN0YXRlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICBidWZmZXJlZEJsb2NrQWxnb3JpdGhtLnJlc2V0KCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgcmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gSW5pdGlhbCB2YWx1ZXNcblx0ICAgICAgICAgICAgdGhpcy5fZGF0YSA9IG5ldyBXb3JkQXJyYXkuaW5pdCgpO1xuXHQgICAgICAgICAgICB0aGlzLl9uRGF0YUJ5dGVzID0gMDtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQWRkcyBuZXcgZGF0YSB0byB0aGlzIGJsb2NrIGFsZ29yaXRobSdzIGJ1ZmZlci5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gZGF0YSBUaGUgZGF0YSB0byBhcHBlbmQuIFN0cmluZ3MgYXJlIGNvbnZlcnRlZCB0byBhIFdvcmRBcnJheSB1c2luZyBVVEYtOC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgYnVmZmVyZWRCbG9ja0FsZ29yaXRobS5fYXBwZW5kKCdkYXRhJyk7XG5cdCAgICAgICAgICogICAgIGJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0uX2FwcGVuZCh3b3JkQXJyYXkpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIF9hcHBlbmQ6IGZ1bmN0aW9uIChkYXRhKSB7XG5cdCAgICAgICAgICAgIC8vIENvbnZlcnQgc3RyaW5nIHRvIFdvcmRBcnJheSwgZWxzZSBhc3N1bWUgV29yZEFycmF5IGFscmVhZHlcblx0ICAgICAgICAgICAgaWYgKHR5cGVvZiBkYXRhID09ICdzdHJpbmcnKSB7XG5cdCAgICAgICAgICAgICAgICBkYXRhID0gVXRmOC5wYXJzZShkYXRhKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIEFwcGVuZFxuXHQgICAgICAgICAgICB0aGlzLl9kYXRhLmNvbmNhdChkYXRhKTtcblx0ICAgICAgICAgICAgdGhpcy5fbkRhdGFCeXRlcyArPSBkYXRhLnNpZ0J5dGVzO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBQcm9jZXNzZXMgYXZhaWxhYmxlIGRhdGEgYmxvY2tzLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogVGhpcyBtZXRob2QgaW52b2tlcyBfZG9Qcm9jZXNzQmxvY2sob2Zmc2V0KSwgd2hpY2ggbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBhIGNvbmNyZXRlIHN1YnR5cGUuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGRvRmx1c2ggV2hldGhlciBhbGwgYmxvY2tzIGFuZCBwYXJ0aWFsIGJsb2NrcyBzaG91bGQgYmUgcHJvY2Vzc2VkLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgcHJvY2Vzc2VkIGRhdGEuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBwcm9jZXNzZWREYXRhID0gYnVmZmVyZWRCbG9ja0FsZ29yaXRobS5fcHJvY2VzcygpO1xuXHQgICAgICAgICAqICAgICB2YXIgcHJvY2Vzc2VkRGF0YSA9IGJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0uX3Byb2Nlc3MoISEnZmx1c2gnKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBfcHJvY2VzczogZnVuY3Rpb24gKGRvRmx1c2gpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5fZGF0YTtcblx0ICAgICAgICAgICAgdmFyIGRhdGFXb3JkcyA9IGRhdGEud29yZHM7XG5cdCAgICAgICAgICAgIHZhciBkYXRhU2lnQnl0ZXMgPSBkYXRhLnNpZ0J5dGVzO1xuXHQgICAgICAgICAgICB2YXIgYmxvY2tTaXplID0gdGhpcy5ibG9ja1NpemU7XG5cdCAgICAgICAgICAgIHZhciBibG9ja1NpemVCeXRlcyA9IGJsb2NrU2l6ZSAqIDQ7XG5cblx0ICAgICAgICAgICAgLy8gQ291bnQgYmxvY2tzIHJlYWR5XG5cdCAgICAgICAgICAgIHZhciBuQmxvY2tzUmVhZHkgPSBkYXRhU2lnQnl0ZXMgLyBibG9ja1NpemVCeXRlcztcblx0ICAgICAgICAgICAgaWYgKGRvRmx1c2gpIHtcblx0ICAgICAgICAgICAgICAgIC8vIFJvdW5kIHVwIHRvIGluY2x1ZGUgcGFydGlhbCBibG9ja3Ncblx0ICAgICAgICAgICAgICAgIG5CbG9ja3NSZWFkeSA9IE1hdGguY2VpbChuQmxvY2tzUmVhZHkpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgLy8gUm91bmQgZG93biB0byBpbmNsdWRlIG9ubHkgZnVsbCBibG9ja3MsXG5cdCAgICAgICAgICAgICAgICAvLyBsZXNzIHRoZSBudW1iZXIgb2YgYmxvY2tzIHRoYXQgbXVzdCByZW1haW4gaW4gdGhlIGJ1ZmZlclxuXHQgICAgICAgICAgICAgICAgbkJsb2Nrc1JlYWR5ID0gTWF0aC5tYXgoKG5CbG9ja3NSZWFkeSB8IDApIC0gdGhpcy5fbWluQnVmZmVyU2l6ZSwgMCk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBDb3VudCB3b3JkcyByZWFkeVxuXHQgICAgICAgICAgICB2YXIgbldvcmRzUmVhZHkgPSBuQmxvY2tzUmVhZHkgKiBibG9ja1NpemU7XG5cblx0ICAgICAgICAgICAgLy8gQ291bnQgYnl0ZXMgcmVhZHlcblx0ICAgICAgICAgICAgdmFyIG5CeXRlc1JlYWR5ID0gTWF0aC5taW4obldvcmRzUmVhZHkgKiA0LCBkYXRhU2lnQnl0ZXMpO1xuXG5cdCAgICAgICAgICAgIC8vIFByb2Nlc3MgYmxvY2tzXG5cdCAgICAgICAgICAgIGlmIChuV29yZHNSZWFkeSkge1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgbldvcmRzUmVhZHk7IG9mZnNldCArPSBibG9ja1NpemUpIHtcblx0ICAgICAgICAgICAgICAgICAgICAvLyBQZXJmb3JtIGNvbmNyZXRlLWFsZ29yaXRobSBsb2dpY1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RvUHJvY2Vzc0Jsb2NrKGRhdGFXb3Jkcywgb2Zmc2V0KTtcblx0ICAgICAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHByb2Nlc3NlZCB3b3Jkc1xuXHQgICAgICAgICAgICAgICAgdmFyIHByb2Nlc3NlZFdvcmRzID0gZGF0YVdvcmRzLnNwbGljZSgwLCBuV29yZHNSZWFkeSk7XG5cdCAgICAgICAgICAgICAgICBkYXRhLnNpZ0J5dGVzIC09IG5CeXRlc1JlYWR5O1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gUmV0dXJuIHByb2Nlc3NlZCB3b3Jkc1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFdvcmRBcnJheS5pbml0KHByb2Nlc3NlZFdvcmRzLCBuQnl0ZXNSZWFkeSk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENyZWF0ZXMgYSBjb3B5IG9mIHRoaXMgb2JqZWN0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7T2JqZWN0fSBUaGUgY2xvbmUuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBjbG9uZSA9IGJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0uY2xvbmUoKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgY2xvbmUgPSBCYXNlLmNsb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgICAgIGNsb25lLl9kYXRhID0gdGhpcy5fZGF0YS5jbG9uZSgpO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBjbG9uZTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX21pbkJ1ZmZlclNpemU6IDBcblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIEFic3RyYWN0IGhhc2hlciB0ZW1wbGF0ZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcHJvcGVydHkge251bWJlcn0gYmxvY2tTaXplIFRoZSBudW1iZXIgb2YgMzItYml0IHdvcmRzIHRoaXMgaGFzaGVyIG9wZXJhdGVzIG9uLiBEZWZhdWx0OiAxNiAoNTEyIGJpdHMpXG5cdCAgICAgKi9cblx0ICAgIHZhciBIYXNoZXIgPSBDX2xpYi5IYXNoZXIgPSBCdWZmZXJlZEJsb2NrQWxnb3JpdGhtLmV4dGVuZCh7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29uZmlndXJhdGlvbiBvcHRpb25zLlxuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGNmZzogQmFzZS5leHRlbmQoKSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEluaXRpYWxpemVzIGEgbmV3bHkgY3JlYXRlZCBoYXNoZXIuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY2ZnIChPcHRpb25hbCkgVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byB1c2UgZm9yIHRoaXMgaGFzaCBjb21wdXRhdGlvbi5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGhhc2hlciA9IENyeXB0b0pTLmFsZ28uU0hBMjU2LmNyZWF0ZSgpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGluaXQ6IGZ1bmN0aW9uIChjZmcpIHtcblx0ICAgICAgICAgICAgLy8gQXBwbHkgY29uZmlnIGRlZmF1bHRzXG5cdCAgICAgICAgICAgIHRoaXMuY2ZnID0gdGhpcy5jZmcuZXh0ZW5kKGNmZyk7XG5cblx0ICAgICAgICAgICAgLy8gU2V0IGluaXRpYWwgdmFsdWVzXG5cdCAgICAgICAgICAgIHRoaXMucmVzZXQoKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogUmVzZXRzIHRoaXMgaGFzaGVyIHRvIGl0cyBpbml0aWFsIHN0YXRlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICBoYXNoZXIucmVzZXQoKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICByZXNldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLyBSZXNldCBkYXRhIGJ1ZmZlclxuXHQgICAgICAgICAgICBCdWZmZXJlZEJsb2NrQWxnb3JpdGhtLnJlc2V0LmNhbGwodGhpcyk7XG5cblx0ICAgICAgICAgICAgLy8gUGVyZm9ybSBjb25jcmV0ZS1oYXNoZXIgbG9naWNcblx0ICAgICAgICAgICAgdGhpcy5fZG9SZXNldCgpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBVcGRhdGVzIHRoaXMgaGFzaGVyIHdpdGggYSBtZXNzYWdlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlVXBkYXRlIFRoZSBtZXNzYWdlIHRvIGFwcGVuZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge0hhc2hlcn0gVGhpcyBoYXNoZXIuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIGhhc2hlci51cGRhdGUoJ21lc3NhZ2UnKTtcblx0ICAgICAgICAgKiAgICAgaGFzaGVyLnVwZGF0ZSh3b3JkQXJyYXkpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHVwZGF0ZTogZnVuY3Rpb24gKG1lc3NhZ2VVcGRhdGUpIHtcblx0ICAgICAgICAgICAgLy8gQXBwZW5kXG5cdCAgICAgICAgICAgIHRoaXMuX2FwcGVuZChtZXNzYWdlVXBkYXRlKTtcblxuXHQgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIGhhc2hcblx0ICAgICAgICAgICAgdGhpcy5fcHJvY2VzcygpO1xuXG5cdCAgICAgICAgICAgIC8vIENoYWluYWJsZVxuXHQgICAgICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogRmluYWxpemVzIHRoZSBoYXNoIGNvbXB1dGF0aW9uLlxuXHQgICAgICAgICAqIE5vdGUgdGhhdCB0aGUgZmluYWxpemUgb3BlcmF0aW9uIGlzIGVmZmVjdGl2ZWx5IGEgZGVzdHJ1Y3RpdmUsIHJlYWQtb25jZSBvcGVyYXRpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2VVcGRhdGUgKE9wdGlvbmFsKSBBIGZpbmFsIG1lc3NhZ2UgdXBkYXRlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgaGFzaC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGhhc2ggPSBoYXNoZXIuZmluYWxpemUoKTtcblx0ICAgICAgICAgKiAgICAgdmFyIGhhc2ggPSBoYXNoZXIuZmluYWxpemUoJ21lc3NhZ2UnKTtcblx0ICAgICAgICAgKiAgICAgdmFyIGhhc2ggPSBoYXNoZXIuZmluYWxpemUod29yZEFycmF5KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBmaW5hbGl6ZTogZnVuY3Rpb24gKG1lc3NhZ2VVcGRhdGUpIHtcblx0ICAgICAgICAgICAgLy8gRmluYWwgbWVzc2FnZSB1cGRhdGVcblx0ICAgICAgICAgICAgaWYgKG1lc3NhZ2VVcGRhdGUpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2FwcGVuZChtZXNzYWdlVXBkYXRlKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIFBlcmZvcm0gY29uY3JldGUtaGFzaGVyIGxvZ2ljXG5cdCAgICAgICAgICAgIHZhciBoYXNoID0gdGhpcy5fZG9GaW5hbGl6ZSgpO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBoYXNoO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBibG9ja1NpemU6IDUxMi8zMixcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENyZWF0ZXMgYSBzaG9ydGN1dCBmdW5jdGlvbiB0byBhIGhhc2hlcidzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge0hhc2hlcn0gaGFzaGVyIFRoZSBoYXNoZXIgdG8gY3JlYXRlIGEgaGVscGVyIGZvci5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge0Z1bmN0aW9ufSBUaGUgc2hvcnRjdXQgZnVuY3Rpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBTSEEyNTYgPSBDcnlwdG9KUy5saWIuSGFzaGVyLl9jcmVhdGVIZWxwZXIoQ3J5cHRvSlMuYWxnby5TSEEyNTYpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIF9jcmVhdGVIZWxwZXI6IGZ1bmN0aW9uIChoYXNoZXIpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChtZXNzYWdlLCBjZmcpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBuZXcgaGFzaGVyLmluaXQoY2ZnKS5maW5hbGl6ZShtZXNzYWdlKTtcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ3JlYXRlcyBhIHNob3J0Y3V0IGZ1bmN0aW9uIHRvIHRoZSBITUFDJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7SGFzaGVyfSBoYXNoZXIgVGhlIGhhc2hlciB0byB1c2UgaW4gdGhpcyBITUFDIGhlbHBlci5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge0Z1bmN0aW9ufSBUaGUgc2hvcnRjdXQgZnVuY3Rpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBIbWFjU0hBMjU2ID0gQ3J5cHRvSlMubGliLkhhc2hlci5fY3JlYXRlSG1hY0hlbHBlcihDcnlwdG9KUy5hbGdvLlNIQTI1Nik7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgX2NyZWF0ZUhtYWNIZWxwZXI6IGZ1bmN0aW9uIChoYXNoZXIpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChtZXNzYWdlLCBrZXkpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ19hbGdvLkhNQUMuaW5pdChoYXNoZXIsIGtleSkuZmluYWxpemUobWVzc2FnZSk7XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogQWxnb3JpdGhtIG5hbWVzcGFjZS5cblx0ICAgICAqL1xuXHQgICAgdmFyIENfYWxnbyA9IEMuYWxnbyA9IHt9O1xuXG5cdCAgICByZXR1cm4gQztcblx0fShNYXRoKSk7XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlM7XG5cbn0pKTsiLCI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXCIuL2NvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdChmdW5jdGlvbiAoKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBXb3JkQXJyYXkgPSBDX2xpYi5Xb3JkQXJyYXk7XG5cdCAgICB2YXIgQ19lbmMgPSBDLmVuYztcblxuXHQgICAgLyoqXG5cdCAgICAgKiBCYXNlNjQgZW5jb2Rpbmcgc3RyYXRlZ3kuXG5cdCAgICAgKi9cblx0ICAgIHZhciBCYXNlNjQgPSBDX2VuYy5CYXNlNjQgPSB7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSB3b3JkIGFycmF5IHRvIGEgQmFzZTY0IHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fSB3b3JkQXJyYXkgVGhlIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBCYXNlNjQgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgYmFzZTY0U3RyaW5nID0gQ3J5cHRvSlMuZW5jLkJhc2U2NC5zdHJpbmdpZnkod29yZEFycmF5KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBzdHJpbmdpZnk6IGZ1bmN0aW9uICh3b3JkQXJyYXkpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciB3b3JkcyA9IHdvcmRBcnJheS53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIHNpZ0J5dGVzID0gd29yZEFycmF5LnNpZ0J5dGVzO1xuXHQgICAgICAgICAgICB2YXIgbWFwID0gdGhpcy5fbWFwO1xuXG5cdCAgICAgICAgICAgIC8vIENsYW1wIGV4Y2VzcyBiaXRzXG5cdCAgICAgICAgICAgIHdvcmRBcnJheS5jbGFtcCgpO1xuXG5cdCAgICAgICAgICAgIC8vIENvbnZlcnRcblx0ICAgICAgICAgICAgdmFyIGJhc2U2NENoYXJzID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2lnQnl0ZXM7IGkgKz0gMykge1xuXHQgICAgICAgICAgICAgICAgdmFyIGJ5dGUxID0gKHdvcmRzW2kgPj4+IDJdICAgICAgID4+PiAoMjQgLSAoaSAlIDQpICogOCkpICAgICAgICYgMHhmZjtcblx0ICAgICAgICAgICAgICAgIHZhciBieXRlMiA9ICh3b3Jkc1soaSArIDEpID4+PiAyXSA+Pj4gKDI0IC0gKChpICsgMSkgJSA0KSAqIDgpKSAmIDB4ZmY7XG5cdCAgICAgICAgICAgICAgICB2YXIgYnl0ZTMgPSAod29yZHNbKGkgKyAyKSA+Pj4gMl0gPj4+ICgyNCAtICgoaSArIDIpICUgNCkgKiA4KSkgJiAweGZmO1xuXG5cdCAgICAgICAgICAgICAgICB2YXIgdHJpcGxldCA9IChieXRlMSA8PCAxNikgfCAoYnl0ZTIgPDwgOCkgfCBieXRlMztcblxuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IChqIDwgNCkgJiYgKGkgKyBqICogMC43NSA8IHNpZ0J5dGVzKTsgaisrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgYmFzZTY0Q2hhcnMucHVzaChtYXAuY2hhckF0KCh0cmlwbGV0ID4+PiAoNiAqICgzIC0gaikpKSAmIDB4M2YpKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIEFkZCBwYWRkaW5nXG5cdCAgICAgICAgICAgIHZhciBwYWRkaW5nQ2hhciA9IG1hcC5jaGFyQXQoNjQpO1xuXHQgICAgICAgICAgICBpZiAocGFkZGluZ0NoYXIpIHtcblx0ICAgICAgICAgICAgICAgIHdoaWxlIChiYXNlNjRDaGFycy5sZW5ndGggJSA0KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgYmFzZTY0Q2hhcnMucHVzaChwYWRkaW5nQ2hhcik7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gYmFzZTY0Q2hhcnMuam9pbignJyk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbnZlcnRzIGEgQmFzZTY0IHN0cmluZyB0byBhIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gYmFzZTY0U3RyIFRoZSBCYXNlNjQgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHdvcmRBcnJheSA9IENyeXB0b0pTLmVuYy5CYXNlNjQucGFyc2UoYmFzZTY0U3RyaW5nKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBwYXJzZTogZnVuY3Rpb24gKGJhc2U2NFN0cikge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGJhc2U2NFN0ckxlbmd0aCA9IGJhc2U2NFN0ci5sZW5ndGg7XG5cdCAgICAgICAgICAgIHZhciBtYXAgPSB0aGlzLl9tYXA7XG5cdCAgICAgICAgICAgIHZhciByZXZlcnNlTWFwID0gdGhpcy5fcmV2ZXJzZU1hcDtcblxuXHQgICAgICAgICAgICBpZiAoIXJldmVyc2VNYXApIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXZlcnNlTWFwID0gdGhpcy5fcmV2ZXJzZU1hcCA9IFtdO1xuXHQgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbWFwLmxlbmd0aDsgaisrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHJldmVyc2VNYXBbbWFwLmNoYXJDb2RlQXQoaildID0gajtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBJZ25vcmUgcGFkZGluZ1xuXHQgICAgICAgICAgICB2YXIgcGFkZGluZ0NoYXIgPSBtYXAuY2hhckF0KDY0KTtcblx0ICAgICAgICAgICAgaWYgKHBhZGRpbmdDaGFyKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgcGFkZGluZ0luZGV4ID0gYmFzZTY0U3RyLmluZGV4T2YocGFkZGluZ0NoYXIpO1xuXHQgICAgICAgICAgICAgICAgaWYgKHBhZGRpbmdJbmRleCAhPT0gLTEpIHtcblx0ICAgICAgICAgICAgICAgICAgICBiYXNlNjRTdHJMZW5ndGggPSBwYWRkaW5nSW5kZXg7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBDb252ZXJ0XG5cdCAgICAgICAgICAgIHJldHVybiBwYXJzZUxvb3AoYmFzZTY0U3RyLCBiYXNlNjRTdHJMZW5ndGgsIHJldmVyc2VNYXApO1xuXG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9tYXA6ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSdcblx0ICAgIH07XG5cblx0ICAgIGZ1bmN0aW9uIHBhcnNlTG9vcChiYXNlNjRTdHIsIGJhc2U2NFN0ckxlbmd0aCwgcmV2ZXJzZU1hcCkge1xuXHQgICAgICB2YXIgd29yZHMgPSBbXTtcblx0ICAgICAgdmFyIG5CeXRlcyA9IDA7XG5cdCAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmFzZTY0U3RyTGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgIGlmIChpICUgNCkge1xuXHQgICAgICAgICAgICAgIHZhciBiaXRzMSA9IHJldmVyc2VNYXBbYmFzZTY0U3RyLmNoYXJDb2RlQXQoaSAtIDEpXSA8PCAoKGkgJSA0KSAqIDIpO1xuXHQgICAgICAgICAgICAgIHZhciBiaXRzMiA9IHJldmVyc2VNYXBbYmFzZTY0U3RyLmNoYXJDb2RlQXQoaSldID4+PiAoNiAtIChpICUgNCkgKiAyKTtcblx0ICAgICAgICAgICAgICB3b3Jkc1tuQnl0ZXMgPj4+IDJdIHw9IChiaXRzMSB8IGJpdHMyKSA8PCAoMjQgLSAobkJ5dGVzICUgNCkgKiA4KTtcblx0ICAgICAgICAgICAgICBuQnl0ZXMrKztcblx0ICAgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgICByZXR1cm4gV29yZEFycmF5LmNyZWF0ZSh3b3JkcywgbkJ5dGVzKTtcblx0ICAgIH1cblx0fSgpKTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5lbmMuQmFzZTY0O1xuXG59KSk7IiwiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQoZnVuY3Rpb24gKCkge1xuXHQgICAgLy8gU2hvcnRjdXRzXG5cdCAgICB2YXIgQyA9IENyeXB0b0pTO1xuXHQgICAgdmFyIENfbGliID0gQy5saWI7XG5cdCAgICB2YXIgV29yZEFycmF5ID0gQ19saWIuV29yZEFycmF5O1xuXHQgICAgdmFyIENfZW5jID0gQy5lbmM7XG5cblx0ICAgIC8qKlxuXHQgICAgICogVVRGLTE2IEJFIGVuY29kaW5nIHN0cmF0ZWd5LlxuXHQgICAgICovXG5cdCAgICB2YXIgVXRmMTZCRSA9IENfZW5jLlV0ZjE2ID0gQ19lbmMuVXRmMTZCRSA9IHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyBhIHdvcmQgYXJyYXkgdG8gYSBVVEYtMTYgQkUgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl9IHdvcmRBcnJheSBUaGUgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIFVURi0xNiBCRSBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB1dGYxNlN0cmluZyA9IENyeXB0b0pTLmVuYy5VdGYxNi5zdHJpbmdpZnkod29yZEFycmF5KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBzdHJpbmdpZnk6IGZ1bmN0aW9uICh3b3JkQXJyYXkpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciB3b3JkcyA9IHdvcmRBcnJheS53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIHNpZ0J5dGVzID0gd29yZEFycmF5LnNpZ0J5dGVzO1xuXG5cdCAgICAgICAgICAgIC8vIENvbnZlcnRcblx0ICAgICAgICAgICAgdmFyIHV0ZjE2Q2hhcnMgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaWdCeXRlczsgaSArPSAyKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgY29kZVBvaW50ID0gKHdvcmRzW2kgPj4+IDJdID4+PiAoMTYgLSAoaSAlIDQpICogOCkpICYgMHhmZmZmO1xuXHQgICAgICAgICAgICAgICAgdXRmMTZDaGFycy5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZVBvaW50KSk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gdXRmMTZDaGFycy5qb2luKCcnKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSBVVEYtMTYgQkUgc3RyaW5nIHRvIGEgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1dGYxNlN0ciBUaGUgVVRGLTE2IEJFIHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB3b3JkQXJyYXkgPSBDcnlwdG9KUy5lbmMuVXRmMTYucGFyc2UodXRmMTZTdHJpbmcpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHBhcnNlOiBmdW5jdGlvbiAodXRmMTZTdHIpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgdmFyIHV0ZjE2U3RyTGVuZ3RoID0gdXRmMTZTdHIubGVuZ3RoO1xuXG5cdCAgICAgICAgICAgIC8vIENvbnZlcnRcblx0ICAgICAgICAgICAgdmFyIHdvcmRzID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdXRmMTZTdHJMZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgd29yZHNbaSA+Pj4gMV0gfD0gdXRmMTZTdHIuY2hhckNvZGVBdChpKSA8PCAoMTYgLSAoaSAlIDIpICogMTYpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIFdvcmRBcnJheS5jcmVhdGUod29yZHMsIHV0ZjE2U3RyTGVuZ3RoICogMik7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBVVEYtMTYgTEUgZW5jb2Rpbmcgc3RyYXRlZ3kuXG5cdCAgICAgKi9cblx0ICAgIENfZW5jLlV0ZjE2TEUgPSB7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSB3b3JkIGFycmF5IHRvIGEgVVRGLTE2IExFIHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fSB3b3JkQXJyYXkgVGhlIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBVVEYtMTYgTEUgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgdXRmMTZTdHIgPSBDcnlwdG9KUy5lbmMuVXRmMTZMRS5zdHJpbmdpZnkod29yZEFycmF5KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBzdHJpbmdpZnk6IGZ1bmN0aW9uICh3b3JkQXJyYXkpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciB3b3JkcyA9IHdvcmRBcnJheS53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIHNpZ0J5dGVzID0gd29yZEFycmF5LnNpZ0J5dGVzO1xuXG5cdCAgICAgICAgICAgIC8vIENvbnZlcnRcblx0ICAgICAgICAgICAgdmFyIHV0ZjE2Q2hhcnMgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaWdCeXRlczsgaSArPSAyKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgY29kZVBvaW50ID0gc3dhcEVuZGlhbigod29yZHNbaSA+Pj4gMl0gPj4+ICgxNiAtIChpICUgNCkgKiA4KSkgJiAweGZmZmYpO1xuXHQgICAgICAgICAgICAgICAgdXRmMTZDaGFycy5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZVBvaW50KSk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gdXRmMTZDaGFycy5qb2luKCcnKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSBVVEYtMTYgTEUgc3RyaW5nIHRvIGEgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1dGYxNlN0ciBUaGUgVVRGLTE2IExFIHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB3b3JkQXJyYXkgPSBDcnlwdG9KUy5lbmMuVXRmMTZMRS5wYXJzZSh1dGYxNlN0cik7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgcGFyc2U6IGZ1bmN0aW9uICh1dGYxNlN0cikge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgdXRmMTZTdHJMZW5ndGggPSB1dGYxNlN0ci5sZW5ndGg7XG5cblx0ICAgICAgICAgICAgLy8gQ29udmVydFxuXHQgICAgICAgICAgICB2YXIgd29yZHMgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1dGYxNlN0ckxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB3b3Jkc1tpID4+PiAxXSB8PSBzd2FwRW5kaWFuKHV0ZjE2U3RyLmNoYXJDb2RlQXQoaSkgPDwgKDE2IC0gKGkgJSAyKSAqIDE2KSk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gV29yZEFycmF5LmNyZWF0ZSh3b3JkcywgdXRmMTZTdHJMZW5ndGggKiAyKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXG5cdCAgICBmdW5jdGlvbiBzd2FwRW5kaWFuKHdvcmQpIHtcblx0ICAgICAgICByZXR1cm4gKCh3b3JkIDw8IDgpICYgMHhmZjAwZmYwMCkgfCAoKHdvcmQgPj4+IDgpICYgMHgwMGZmMDBmZik7XG5cdCAgICB9XG5cdH0oKSk7XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMuZW5jLlV0ZjE2O1xuXG59KSk7IiwiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSwgdW5kZWYpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIiksIHJlcXVpcmUoXCIuL3NoYTFcIiksIHJlcXVpcmUoXCIuL2htYWNcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiLCBcIi4vc2hhMVwiLCBcIi4vaG1hY1wiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0KGZ1bmN0aW9uICgpIHtcblx0ICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgdmFyIEMgPSBDcnlwdG9KUztcblx0ICAgIHZhciBDX2xpYiA9IEMubGliO1xuXHQgICAgdmFyIEJhc2UgPSBDX2xpYi5CYXNlO1xuXHQgICAgdmFyIFdvcmRBcnJheSA9IENfbGliLldvcmRBcnJheTtcblx0ICAgIHZhciBDX2FsZ28gPSBDLmFsZ287XG5cdCAgICB2YXIgTUQ1ID0gQ19hbGdvLk1ENTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBUaGlzIGtleSBkZXJpdmF0aW9uIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGNvbmZvcm0gd2l0aCBFVlBfQnl0ZXNUb0tleS5cblx0ICAgICAqIHd3dy5vcGVuc3NsLm9yZy9kb2NzL2NyeXB0by9FVlBfQnl0ZXNUb0tleS5odG1sXG5cdCAgICAgKi9cblx0ICAgIHZhciBFdnBLREYgPSBDX2FsZ28uRXZwS0RGID0gQmFzZS5leHRlbmQoe1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBrZXlTaXplIFRoZSBrZXkgc2l6ZSBpbiB3b3JkcyB0byBnZW5lcmF0ZS4gRGVmYXVsdDogNCAoMTI4IGJpdHMpXG5cdCAgICAgICAgICogQHByb3BlcnR5IHtIYXNoZXJ9IGhhc2hlciBUaGUgaGFzaCBhbGdvcml0aG0gdG8gdXNlLiBEZWZhdWx0OiBNRDVcblx0ICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcn0gaXRlcmF0aW9ucyBUaGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgdG8gcGVyZm9ybS4gRGVmYXVsdDogMVxuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGNmZzogQmFzZS5leHRlbmQoe1xuXHQgICAgICAgICAgICBrZXlTaXplOiAxMjgvMzIsXG5cdCAgICAgICAgICAgIGhhc2hlcjogTUQ1LFxuXHQgICAgICAgICAgICBpdGVyYXRpb25zOiAxXG5cdCAgICAgICAgfSksXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBJbml0aWFsaXplcyBhIG5ld2x5IGNyZWF0ZWQga2V5IGRlcml2YXRpb24gZnVuY3Rpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY2ZnIChPcHRpb25hbCkgVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byB1c2UgZm9yIHRoZSBkZXJpdmF0aW9uLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIga2RmID0gQ3J5cHRvSlMuYWxnby5FdnBLREYuY3JlYXRlKCk7XG5cdCAgICAgICAgICogICAgIHZhciBrZGYgPSBDcnlwdG9KUy5hbGdvLkV2cEtERi5jcmVhdGUoeyBrZXlTaXplOiA4IH0pO1xuXHQgICAgICAgICAqICAgICB2YXIga2RmID0gQ3J5cHRvSlMuYWxnby5FdnBLREYuY3JlYXRlKHsga2V5U2l6ZTogOCwgaXRlcmF0aW9uczogMTAwMCB9KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBpbml0OiBmdW5jdGlvbiAoY2ZnKSB7XG5cdCAgICAgICAgICAgIHRoaXMuY2ZnID0gdGhpcy5jZmcuZXh0ZW5kKGNmZyk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIERlcml2ZXMgYSBrZXkgZnJvbSBhIHBhc3N3b3JkLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBwYXNzd29yZCBUaGUgcGFzc3dvcmQuXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBzYWx0IEEgc2FsdC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIGRlcml2ZWQga2V5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIga2V5ID0ga2RmLmNvbXB1dGUocGFzc3dvcmQsIHNhbHQpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGNvbXB1dGU6IGZ1bmN0aW9uIChwYXNzd29yZCwgc2FsdCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgY2ZnID0gdGhpcy5jZmc7XG5cblx0ICAgICAgICAgICAgLy8gSW5pdCBoYXNoZXJcblx0ICAgICAgICAgICAgdmFyIGhhc2hlciA9IGNmZy5oYXNoZXIuY3JlYXRlKCk7XG5cblx0ICAgICAgICAgICAgLy8gSW5pdGlhbCB2YWx1ZXNcblx0ICAgICAgICAgICAgdmFyIGRlcml2ZWRLZXkgPSBXb3JkQXJyYXkuY3JlYXRlKCk7XG5cblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBkZXJpdmVkS2V5V29yZHMgPSBkZXJpdmVkS2V5LndvcmRzO1xuXHQgICAgICAgICAgICB2YXIga2V5U2l6ZSA9IGNmZy5rZXlTaXplO1xuXHQgICAgICAgICAgICB2YXIgaXRlcmF0aW9ucyA9IGNmZy5pdGVyYXRpb25zO1xuXG5cdCAgICAgICAgICAgIC8vIEdlbmVyYXRlIGtleVxuXHQgICAgICAgICAgICB3aGlsZSAoZGVyaXZlZEtleVdvcmRzLmxlbmd0aCA8IGtleVNpemUpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChibG9jaykge1xuXHQgICAgICAgICAgICAgICAgICAgIGhhc2hlci51cGRhdGUoYmxvY2spO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgdmFyIGJsb2NrID0gaGFzaGVyLnVwZGF0ZShwYXNzd29yZCkuZmluYWxpemUoc2FsdCk7XG5cdCAgICAgICAgICAgICAgICBoYXNoZXIucmVzZXQoKTtcblxuXHQgICAgICAgICAgICAgICAgLy8gSXRlcmF0aW9uc1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBpdGVyYXRpb25zOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICBibG9jayA9IGhhc2hlci5maW5hbGl6ZShibG9jayk7XG5cdCAgICAgICAgICAgICAgICAgICAgaGFzaGVyLnJlc2V0KCk7XG5cdCAgICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICAgIGRlcml2ZWRLZXkuY29uY2F0KGJsb2NrKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBkZXJpdmVkS2V5LnNpZ0J5dGVzID0ga2V5U2l6ZSAqIDQ7XG5cblx0ICAgICAgICAgICAgcmV0dXJuIGRlcml2ZWRLZXk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogRGVyaXZlcyBhIGtleSBmcm9tIGEgcGFzc3dvcmQuXG5cdCAgICAgKlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBwYXNzd29yZCBUaGUgcGFzc3dvcmQuXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IHNhbHQgQSBzYWx0LlxuXHQgICAgICogQHBhcmFtIHtPYmplY3R9IGNmZyAoT3B0aW9uYWwpIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gdXNlIGZvciB0aGlzIGNvbXB1dGF0aW9uLlxuXHQgICAgICpcblx0ICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIGRlcml2ZWQga2V5LlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIga2V5ID0gQ3J5cHRvSlMuRXZwS0RGKHBhc3N3b3JkLCBzYWx0KTtcblx0ICAgICAqICAgICB2YXIga2V5ID0gQ3J5cHRvSlMuRXZwS0RGKHBhc3N3b3JkLCBzYWx0LCB7IGtleVNpemU6IDggfSk7XG5cdCAgICAgKiAgICAgdmFyIGtleSA9IENyeXB0b0pTLkV2cEtERihwYXNzd29yZCwgc2FsdCwgeyBrZXlTaXplOiA4LCBpdGVyYXRpb25zOiAxMDAwIH0pO1xuXHQgICAgICovXG5cdCAgICBDLkV2cEtERiA9IGZ1bmN0aW9uIChwYXNzd29yZCwgc2FsdCwgY2ZnKSB7XG5cdCAgICAgICAgcmV0dXJuIEV2cEtERi5jcmVhdGUoY2ZnKS5jb21wdXRlKHBhc3N3b3JkLCBzYWx0KTtcblx0ICAgIH07XG5cdH0oKSk7XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMuRXZwS0RGO1xuXG59KSk7IiwiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSwgdW5kZWYpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIiksIHJlcXVpcmUoXCIuL2NpcGhlci1jb3JlXCIpKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXCIuL2NvcmVcIiwgXCIuL2NpcGhlci1jb3JlXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQoZnVuY3Rpb24gKHVuZGVmaW5lZCkge1xuXHQgICAgLy8gU2hvcnRjdXRzXG5cdCAgICB2YXIgQyA9IENyeXB0b0pTO1xuXHQgICAgdmFyIENfbGliID0gQy5saWI7XG5cdCAgICB2YXIgQ2lwaGVyUGFyYW1zID0gQ19saWIuQ2lwaGVyUGFyYW1zO1xuXHQgICAgdmFyIENfZW5jID0gQy5lbmM7XG5cdCAgICB2YXIgSGV4ID0gQ19lbmMuSGV4O1xuXHQgICAgdmFyIENfZm9ybWF0ID0gQy5mb3JtYXQ7XG5cblx0ICAgIHZhciBIZXhGb3JtYXR0ZXIgPSBDX2Zvcm1hdC5IZXggPSB7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgdGhlIGNpcGhlcnRleHQgb2YgYSBjaXBoZXIgcGFyYW1zIG9iamVjdCB0byBhIGhleGFkZWNpbWFsbHkgZW5jb2RlZCBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge0NpcGhlclBhcmFtc30gY2lwaGVyUGFyYW1zIFRoZSBjaXBoZXIgcGFyYW1zIG9iamVjdC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGhleGFkZWNpbWFsbHkgZW5jb2RlZCBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBoZXhTdHJpbmcgPSBDcnlwdG9KUy5mb3JtYXQuSGV4LnN0cmluZ2lmeShjaXBoZXJQYXJhbXMpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHN0cmluZ2lmeTogZnVuY3Rpb24gKGNpcGhlclBhcmFtcykge1xuXHQgICAgICAgICAgICByZXR1cm4gY2lwaGVyUGFyYW1zLmNpcGhlcnRleHQudG9TdHJpbmcoSGV4KTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSBoZXhhZGVjaW1hbGx5IGVuY29kZWQgY2lwaGVydGV4dCBzdHJpbmcgdG8gYSBjaXBoZXIgcGFyYW1zIG9iamVjdC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dCBUaGUgaGV4YWRlY2ltYWxseSBlbmNvZGVkIHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge0NpcGhlclBhcmFtc30gVGhlIGNpcGhlciBwYXJhbXMgb2JqZWN0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgY2lwaGVyUGFyYW1zID0gQ3J5cHRvSlMuZm9ybWF0LkhleC5wYXJzZShoZXhTdHJpbmcpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHBhcnNlOiBmdW5jdGlvbiAoaW5wdXQpIHtcblx0ICAgICAgICAgICAgdmFyIGNpcGhlcnRleHQgPSBIZXgucGFyc2UoaW5wdXQpO1xuXHQgICAgICAgICAgICByZXR1cm4gQ2lwaGVyUGFyYW1zLmNyZWF0ZSh7IGNpcGhlcnRleHQ6IGNpcGhlcnRleHQgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0fSgpKTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5mb3JtYXQuSGV4O1xuXG59KSk7IiwiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQoZnVuY3Rpb24gKCkge1xuXHQgICAgLy8gU2hvcnRjdXRzXG5cdCAgICB2YXIgQyA9IENyeXB0b0pTO1xuXHQgICAgdmFyIENfbGliID0gQy5saWI7XG5cdCAgICB2YXIgQmFzZSA9IENfbGliLkJhc2U7XG5cdCAgICB2YXIgQ19lbmMgPSBDLmVuYztcblx0ICAgIHZhciBVdGY4ID0gQ19lbmMuVXRmODtcblx0ICAgIHZhciBDX2FsZ28gPSBDLmFsZ287XG5cblx0ICAgIC8qKlxuXHQgICAgICogSE1BQyBhbGdvcml0aG0uXG5cdCAgICAgKi9cblx0ICAgIHZhciBITUFDID0gQ19hbGdvLkhNQUMgPSBCYXNlLmV4dGVuZCh7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogSW5pdGlhbGl6ZXMgYSBuZXdseSBjcmVhdGVkIEhNQUMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge0hhc2hlcn0gaGFzaGVyIFRoZSBoYXNoIGFsZ29yaXRobSB0byB1c2UuXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBrZXkgVGhlIHNlY3JldCBrZXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBobWFjSGFzaGVyID0gQ3J5cHRvSlMuYWxnby5ITUFDLmNyZWF0ZShDcnlwdG9KUy5hbGdvLlNIQTI1Niwga2V5KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBpbml0OiBmdW5jdGlvbiAoaGFzaGVyLCBrZXkpIHtcblx0ICAgICAgICAgICAgLy8gSW5pdCBoYXNoZXJcblx0ICAgICAgICAgICAgaGFzaGVyID0gdGhpcy5faGFzaGVyID0gbmV3IGhhc2hlci5pbml0KCk7XG5cblx0ICAgICAgICAgICAgLy8gQ29udmVydCBzdHJpbmcgdG8gV29yZEFycmF5LCBlbHNlIGFzc3VtZSBXb3JkQXJyYXkgYWxyZWFkeVxuXHQgICAgICAgICAgICBpZiAodHlwZW9mIGtleSA9PSAnc3RyaW5nJykge1xuXHQgICAgICAgICAgICAgICAga2V5ID0gVXRmOC5wYXJzZShrZXkpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBoYXNoZXJCbG9ja1NpemUgPSBoYXNoZXIuYmxvY2tTaXplO1xuXHQgICAgICAgICAgICB2YXIgaGFzaGVyQmxvY2tTaXplQnl0ZXMgPSBoYXNoZXJCbG9ja1NpemUgKiA0O1xuXG5cdCAgICAgICAgICAgIC8vIEFsbG93IGFyYml0cmFyeSBsZW5ndGgga2V5c1xuXHQgICAgICAgICAgICBpZiAoa2V5LnNpZ0J5dGVzID4gaGFzaGVyQmxvY2tTaXplQnl0ZXMpIHtcblx0ICAgICAgICAgICAgICAgIGtleSA9IGhhc2hlci5maW5hbGl6ZShrZXkpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gQ2xhbXAgZXhjZXNzIGJpdHNcblx0ICAgICAgICAgICAga2V5LmNsYW1wKCk7XG5cblx0ICAgICAgICAgICAgLy8gQ2xvbmUga2V5IGZvciBpbm5lciBhbmQgb3V0ZXIgcGFkc1xuXHQgICAgICAgICAgICB2YXIgb0tleSA9IHRoaXMuX29LZXkgPSBrZXkuY2xvbmUoKTtcblx0ICAgICAgICAgICAgdmFyIGlLZXkgPSB0aGlzLl9pS2V5ID0ga2V5LmNsb25lKCk7XG5cblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBvS2V5V29yZHMgPSBvS2V5LndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgaUtleVdvcmRzID0gaUtleS53b3JkcztcblxuXHQgICAgICAgICAgICAvLyBYT1Iga2V5cyB3aXRoIHBhZCBjb25zdGFudHNcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoYXNoZXJCbG9ja1NpemU7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgb0tleVdvcmRzW2ldIF49IDB4NWM1YzVjNWM7XG5cdCAgICAgICAgICAgICAgICBpS2V5V29yZHNbaV0gXj0gMHgzNjM2MzYzNjtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBvS2V5LnNpZ0J5dGVzID0gaUtleS5zaWdCeXRlcyA9IGhhc2hlckJsb2NrU2l6ZUJ5dGVzO1xuXG5cdCAgICAgICAgICAgIC8vIFNldCBpbml0aWFsIHZhbHVlc1xuXHQgICAgICAgICAgICB0aGlzLnJlc2V0KCk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIFJlc2V0cyB0aGlzIEhNQUMgdG8gaXRzIGluaXRpYWwgc3RhdGUuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIGhtYWNIYXNoZXIucmVzZXQoKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICByZXNldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgaGFzaGVyID0gdGhpcy5faGFzaGVyO1xuXG5cdCAgICAgICAgICAgIC8vIFJlc2V0XG5cdCAgICAgICAgICAgIGhhc2hlci5yZXNldCgpO1xuXHQgICAgICAgICAgICBoYXNoZXIudXBkYXRlKHRoaXMuX2lLZXkpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBVcGRhdGVzIHRoaXMgSE1BQyB3aXRoIGEgbWVzc2FnZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZVVwZGF0ZSBUaGUgbWVzc2FnZSB0byBhcHBlbmQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtITUFDfSBUaGlzIEhNQUMgaW5zdGFuY2UuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIGhtYWNIYXNoZXIudXBkYXRlKCdtZXNzYWdlJyk7XG5cdCAgICAgICAgICogICAgIGhtYWNIYXNoZXIudXBkYXRlKHdvcmRBcnJheSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgdXBkYXRlOiBmdW5jdGlvbiAobWVzc2FnZVVwZGF0ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9oYXNoZXIudXBkYXRlKG1lc3NhZ2VVcGRhdGUpO1xuXG5cdCAgICAgICAgICAgIC8vIENoYWluYWJsZVxuXHQgICAgICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogRmluYWxpemVzIHRoZSBITUFDIGNvbXB1dGF0aW9uLlxuXHQgICAgICAgICAqIE5vdGUgdGhhdCB0aGUgZmluYWxpemUgb3BlcmF0aW9uIGlzIGVmZmVjdGl2ZWx5IGEgZGVzdHJ1Y3RpdmUsIHJlYWQtb25jZSBvcGVyYXRpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2VVcGRhdGUgKE9wdGlvbmFsKSBBIGZpbmFsIG1lc3NhZ2UgdXBkYXRlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgSE1BQy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGhtYWMgPSBobWFjSGFzaGVyLmZpbmFsaXplKCk7XG5cdCAgICAgICAgICogICAgIHZhciBobWFjID0gaG1hY0hhc2hlci5maW5hbGl6ZSgnbWVzc2FnZScpO1xuXHQgICAgICAgICAqICAgICB2YXIgaG1hYyA9IGhtYWNIYXNoZXIuZmluYWxpemUod29yZEFycmF5KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBmaW5hbGl6ZTogZnVuY3Rpb24gKG1lc3NhZ2VVcGRhdGUpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgdmFyIGhhc2hlciA9IHRoaXMuX2hhc2hlcjtcblxuXHQgICAgICAgICAgICAvLyBDb21wdXRlIEhNQUNcblx0ICAgICAgICAgICAgdmFyIGlubmVySGFzaCA9IGhhc2hlci5maW5hbGl6ZShtZXNzYWdlVXBkYXRlKTtcblx0ICAgICAgICAgICAgaGFzaGVyLnJlc2V0KCk7XG5cdCAgICAgICAgICAgIHZhciBobWFjID0gaGFzaGVyLmZpbmFsaXplKHRoaXMuX29LZXkuY2xvbmUoKS5jb25jYXQoaW5uZXJIYXNoKSk7XG5cblx0ICAgICAgICAgICAgcmV0dXJuIGhtYWM7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdH0oKSk7XG5cblxufSkpOyIsIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnksIHVuZGVmKSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpLCByZXF1aXJlKFwiLi94NjQtY29yZVwiKSwgcmVxdWlyZShcIi4vbGliLXR5cGVkYXJyYXlzXCIpLCByZXF1aXJlKFwiLi9lbmMtdXRmMTZcIiksIHJlcXVpcmUoXCIuL2VuYy1iYXNlNjRcIiksIHJlcXVpcmUoXCIuL21kNVwiKSwgcmVxdWlyZShcIi4vc2hhMVwiKSwgcmVxdWlyZShcIi4vc2hhMjU2XCIpLCByZXF1aXJlKFwiLi9zaGEyMjRcIiksIHJlcXVpcmUoXCIuL3NoYTUxMlwiKSwgcmVxdWlyZShcIi4vc2hhMzg0XCIpLCByZXF1aXJlKFwiLi9zaGEzXCIpLCByZXF1aXJlKFwiLi9yaXBlbWQxNjBcIiksIHJlcXVpcmUoXCIuL2htYWNcIiksIHJlcXVpcmUoXCIuL3Bia2RmMlwiKSwgcmVxdWlyZShcIi4vZXZwa2RmXCIpLCByZXF1aXJlKFwiLi9jaXBoZXItY29yZVwiKSwgcmVxdWlyZShcIi4vbW9kZS1jZmJcIiksIHJlcXVpcmUoXCIuL21vZGUtY3RyXCIpLCByZXF1aXJlKFwiLi9tb2RlLWN0ci1nbGFkbWFuXCIpLCByZXF1aXJlKFwiLi9tb2RlLW9mYlwiKSwgcmVxdWlyZShcIi4vbW9kZS1lY2JcIiksIHJlcXVpcmUoXCIuL3BhZC1hbnNpeDkyM1wiKSwgcmVxdWlyZShcIi4vcGFkLWlzbzEwMTI2XCIpLCByZXF1aXJlKFwiLi9wYWQtaXNvOTc5NzFcIiksIHJlcXVpcmUoXCIuL3BhZC16ZXJvcGFkZGluZ1wiKSwgcmVxdWlyZShcIi4vcGFkLW5vcGFkZGluZ1wiKSwgcmVxdWlyZShcIi4vZm9ybWF0LWhleFwiKSwgcmVxdWlyZShcIi4vYWVzXCIpLCByZXF1aXJlKFwiLi90cmlwbGVkZXNcIiksIHJlcXVpcmUoXCIuL3JjNFwiKSwgcmVxdWlyZShcIi4vcmFiYml0XCIpLCByZXF1aXJlKFwiLi9yYWJiaXQtbGVnYWN5XCIpKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXCIuL2NvcmVcIiwgXCIuL3g2NC1jb3JlXCIsIFwiLi9saWItdHlwZWRhcnJheXNcIiwgXCIuL2VuYy11dGYxNlwiLCBcIi4vZW5jLWJhc2U2NFwiLCBcIi4vbWQ1XCIsIFwiLi9zaGExXCIsIFwiLi9zaGEyNTZcIiwgXCIuL3NoYTIyNFwiLCBcIi4vc2hhNTEyXCIsIFwiLi9zaGEzODRcIiwgXCIuL3NoYTNcIiwgXCIuL3JpcGVtZDE2MFwiLCBcIi4vaG1hY1wiLCBcIi4vcGJrZGYyXCIsIFwiLi9ldnBrZGZcIiwgXCIuL2NpcGhlci1jb3JlXCIsIFwiLi9tb2RlLWNmYlwiLCBcIi4vbW9kZS1jdHJcIiwgXCIuL21vZGUtY3RyLWdsYWRtYW5cIiwgXCIuL21vZGUtb2ZiXCIsIFwiLi9tb2RlLWVjYlwiLCBcIi4vcGFkLWFuc2l4OTIzXCIsIFwiLi9wYWQtaXNvMTAxMjZcIiwgXCIuL3BhZC1pc285Nzk3MVwiLCBcIi4vcGFkLXplcm9wYWRkaW5nXCIsIFwiLi9wYWQtbm9wYWRkaW5nXCIsIFwiLi9mb3JtYXQtaGV4XCIsIFwiLi9hZXNcIiwgXCIuL3RyaXBsZWRlc1wiLCBcIi4vcmM0XCIsIFwiLi9yYWJiaXRcIiwgXCIuL3JhYmJpdC1sZWdhY3lcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRyb290LkNyeXB0b0pTID0gZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHRyZXR1cm4gQ3J5cHRvSlM7XG5cbn0pKTsiLCI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXCIuL2NvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdChmdW5jdGlvbiAoKSB7XG5cdCAgICAvLyBDaGVjayBpZiB0eXBlZCBhcnJheXMgYXJlIHN1cHBvcnRlZFxuXHQgICAgaWYgKHR5cGVvZiBBcnJheUJ1ZmZlciAhPSAnZnVuY3Rpb24nKSB7XG5cdCAgICAgICAgcmV0dXJuO1xuXHQgICAgfVxuXG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBXb3JkQXJyYXkgPSBDX2xpYi5Xb3JkQXJyYXk7XG5cblx0ICAgIC8vIFJlZmVyZW5jZSBvcmlnaW5hbCBpbml0XG5cdCAgICB2YXIgc3VwZXJJbml0ID0gV29yZEFycmF5LmluaXQ7XG5cblx0ICAgIC8vIEF1Z21lbnQgV29yZEFycmF5LmluaXQgdG8gaGFuZGxlIHR5cGVkIGFycmF5c1xuXHQgICAgdmFyIHN1YkluaXQgPSBXb3JkQXJyYXkuaW5pdCA9IGZ1bmN0aW9uICh0eXBlZEFycmF5KSB7XG5cdCAgICAgICAgLy8gQ29udmVydCBidWZmZXJzIHRvIHVpbnQ4XG5cdCAgICAgICAgaWYgKHR5cGVkQXJyYXkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuXHQgICAgICAgICAgICB0eXBlZEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkodHlwZWRBcnJheSk7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgLy8gQ29udmVydCBvdGhlciBhcnJheSB2aWV3cyB0byB1aW50OFxuXHQgICAgICAgIGlmIChcblx0ICAgICAgICAgICAgdHlwZWRBcnJheSBpbnN0YW5jZW9mIEludDhBcnJheSB8fFxuXHQgICAgICAgICAgICAodHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVkQXJyYXkgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheSkgfHxcblx0ICAgICAgICAgICAgdHlwZWRBcnJheSBpbnN0YW5jZW9mIEludDE2QXJyYXkgfHxcblx0ICAgICAgICAgICAgdHlwZWRBcnJheSBpbnN0YW5jZW9mIFVpbnQxNkFycmF5IHx8XG5cdCAgICAgICAgICAgIHR5cGVkQXJyYXkgaW5zdGFuY2VvZiBJbnQzMkFycmF5IHx8XG5cdCAgICAgICAgICAgIHR5cGVkQXJyYXkgaW5zdGFuY2VvZiBVaW50MzJBcnJheSB8fFxuXHQgICAgICAgICAgICB0eXBlZEFycmF5IGluc3RhbmNlb2YgRmxvYXQzMkFycmF5IHx8XG5cdCAgICAgICAgICAgIHR5cGVkQXJyYXkgaW5zdGFuY2VvZiBGbG9hdDY0QXJyYXlcblx0ICAgICAgICApIHtcblx0ICAgICAgICAgICAgdHlwZWRBcnJheSA9IG5ldyBVaW50OEFycmF5KHR5cGVkQXJyYXkuYnVmZmVyLCB0eXBlZEFycmF5LmJ5dGVPZmZzZXQsIHR5cGVkQXJyYXkuYnl0ZUxlbmd0aCk7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgLy8gSGFuZGxlIFVpbnQ4QXJyYXlcblx0ICAgICAgICBpZiAodHlwZWRBcnJheSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgdmFyIHR5cGVkQXJyYXlCeXRlTGVuZ3RoID0gdHlwZWRBcnJheS5ieXRlTGVuZ3RoO1xuXG5cdCAgICAgICAgICAgIC8vIEV4dHJhY3QgYnl0ZXNcblx0ICAgICAgICAgICAgdmFyIHdvcmRzID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHlwZWRBcnJheUJ5dGVMZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgd29yZHNbaSA+Pj4gMl0gfD0gdHlwZWRBcnJheVtpXSA8PCAoMjQgLSAoaSAlIDQpICogOCk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBJbml0aWFsaXplIHRoaXMgd29yZCBhcnJheVxuXHQgICAgICAgICAgICBzdXBlckluaXQuY2FsbCh0aGlzLCB3b3JkcywgdHlwZWRBcnJheUJ5dGVMZW5ndGgpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIC8vIEVsc2UgY2FsbCBub3JtYWwgaW5pdFxuXHQgICAgICAgICAgICBzdXBlckluaXQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXG5cdCAgICBzdWJJbml0LnByb3RvdHlwZSA9IFdvcmRBcnJheTtcblx0fSgpKTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5saWIuV29yZEFycmF5O1xuXG59KSk7IiwiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQoZnVuY3Rpb24gKE1hdGgpIHtcblx0ICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgdmFyIEMgPSBDcnlwdG9KUztcblx0ICAgIHZhciBDX2xpYiA9IEMubGliO1xuXHQgICAgdmFyIFdvcmRBcnJheSA9IENfbGliLldvcmRBcnJheTtcblx0ICAgIHZhciBIYXNoZXIgPSBDX2xpYi5IYXNoZXI7XG5cdCAgICB2YXIgQ19hbGdvID0gQy5hbGdvO1xuXG5cdCAgICAvLyBDb25zdGFudHMgdGFibGVcblx0ICAgIHZhciBUID0gW107XG5cblx0ICAgIC8vIENvbXB1dGUgY29uc3RhbnRzXG5cdCAgICAoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNjQ7IGkrKykge1xuXHQgICAgICAgICAgICBUW2ldID0gKE1hdGguYWJzKE1hdGguc2luKGkgKyAxKSkgKiAweDEwMDAwMDAwMCkgfCAwO1xuXHQgICAgICAgIH1cblx0ICAgIH0oKSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogTUQ1IGhhc2ggYWxnb3JpdGhtLlxuXHQgICAgICovXG5cdCAgICB2YXIgTUQ1ID0gQ19hbGdvLk1ENSA9IEhhc2hlci5leHRlbmQoe1xuXHQgICAgICAgIF9kb1Jlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2hhc2ggPSBuZXcgV29yZEFycmF5LmluaXQoW1xuXHQgICAgICAgICAgICAgICAgMHg2NzQ1MjMwMSwgMHhlZmNkYWI4OSxcblx0ICAgICAgICAgICAgICAgIDB4OThiYWRjZmUsIDB4MTAzMjU0NzZcblx0ICAgICAgICAgICAgXSk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb1Byb2Nlc3NCbG9jazogZnVuY3Rpb24gKE0sIG9mZnNldCkge1xuXHQgICAgICAgICAgICAvLyBTd2FwIGVuZGlhblxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICAgICAgdmFyIG9mZnNldF9pID0gb2Zmc2V0ICsgaTtcblx0ICAgICAgICAgICAgICAgIHZhciBNX29mZnNldF9pID0gTVtvZmZzZXRfaV07XG5cblx0ICAgICAgICAgICAgICAgIE1bb2Zmc2V0X2ldID0gKFxuXHQgICAgICAgICAgICAgICAgICAgICgoKE1fb2Zmc2V0X2kgPDwgOCkgIHwgKE1fb2Zmc2V0X2kgPj4+IDI0KSkgJiAweDAwZmYwMGZmKSB8XG5cdCAgICAgICAgICAgICAgICAgICAgKCgoTV9vZmZzZXRfaSA8PCAyNCkgfCAoTV9vZmZzZXRfaSA+Pj4gOCkpICAmIDB4ZmYwMGZmMDApXG5cdCAgICAgICAgICAgICAgICApO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBIID0gdGhpcy5faGFzaC53b3JkcztcblxuXHQgICAgICAgICAgICB2YXIgTV9vZmZzZXRfMCAgPSBNW29mZnNldCArIDBdO1xuXHQgICAgICAgICAgICB2YXIgTV9vZmZzZXRfMSAgPSBNW29mZnNldCArIDFdO1xuXHQgICAgICAgICAgICB2YXIgTV9vZmZzZXRfMiAgPSBNW29mZnNldCArIDJdO1xuXHQgICAgICAgICAgICB2YXIgTV9vZmZzZXRfMyAgPSBNW29mZnNldCArIDNdO1xuXHQgICAgICAgICAgICB2YXIgTV9vZmZzZXRfNCAgPSBNW29mZnNldCArIDRdO1xuXHQgICAgICAgICAgICB2YXIgTV9vZmZzZXRfNSAgPSBNW29mZnNldCArIDVdO1xuXHQgICAgICAgICAgICB2YXIgTV9vZmZzZXRfNiAgPSBNW29mZnNldCArIDZdO1xuXHQgICAgICAgICAgICB2YXIgTV9vZmZzZXRfNyAgPSBNW29mZnNldCArIDddO1xuXHQgICAgICAgICAgICB2YXIgTV9vZmZzZXRfOCAgPSBNW29mZnNldCArIDhdO1xuXHQgICAgICAgICAgICB2YXIgTV9vZmZzZXRfOSAgPSBNW29mZnNldCArIDldO1xuXHQgICAgICAgICAgICB2YXIgTV9vZmZzZXRfMTAgPSBNW29mZnNldCArIDEwXTtcblx0ICAgICAgICAgICAgdmFyIE1fb2Zmc2V0XzExID0gTVtvZmZzZXQgKyAxMV07XG5cdCAgICAgICAgICAgIHZhciBNX29mZnNldF8xMiA9IE1bb2Zmc2V0ICsgMTJdO1xuXHQgICAgICAgICAgICB2YXIgTV9vZmZzZXRfMTMgPSBNW29mZnNldCArIDEzXTtcblx0ICAgICAgICAgICAgdmFyIE1fb2Zmc2V0XzE0ID0gTVtvZmZzZXQgKyAxNF07XG5cdCAgICAgICAgICAgIHZhciBNX29mZnNldF8xNSA9IE1bb2Zmc2V0ICsgMTVdO1xuXG5cdCAgICAgICAgICAgIC8vIFdvcmtpbmcgdmFyaWFsYmVzXG5cdCAgICAgICAgICAgIHZhciBhID0gSFswXTtcblx0ICAgICAgICAgICAgdmFyIGIgPSBIWzFdO1xuXHQgICAgICAgICAgICB2YXIgYyA9IEhbMl07XG5cdCAgICAgICAgICAgIHZhciBkID0gSFszXTtcblxuXHQgICAgICAgICAgICAvLyBDb21wdXRhdGlvblxuXHQgICAgICAgICAgICBhID0gRkYoYSwgYiwgYywgZCwgTV9vZmZzZXRfMCwgIDcsICBUWzBdKTtcblx0ICAgICAgICAgICAgZCA9IEZGKGQsIGEsIGIsIGMsIE1fb2Zmc2V0XzEsICAxMiwgVFsxXSk7XG5cdCAgICAgICAgICAgIGMgPSBGRihjLCBkLCBhLCBiLCBNX29mZnNldF8yLCAgMTcsIFRbMl0pO1xuXHQgICAgICAgICAgICBiID0gRkYoYiwgYywgZCwgYSwgTV9vZmZzZXRfMywgIDIyLCBUWzNdKTtcblx0ICAgICAgICAgICAgYSA9IEZGKGEsIGIsIGMsIGQsIE1fb2Zmc2V0XzQsICA3LCAgVFs0XSk7XG5cdCAgICAgICAgICAgIGQgPSBGRihkLCBhLCBiLCBjLCBNX29mZnNldF81LCAgMTIsIFRbNV0pO1xuXHQgICAgICAgICAgICBjID0gRkYoYywgZCwgYSwgYiwgTV9vZmZzZXRfNiwgIDE3LCBUWzZdKTtcblx0ICAgICAgICAgICAgYiA9IEZGKGIsIGMsIGQsIGEsIE1fb2Zmc2V0XzcsICAyMiwgVFs3XSk7XG5cdCAgICAgICAgICAgIGEgPSBGRihhLCBiLCBjLCBkLCBNX29mZnNldF84LCAgNywgIFRbOF0pO1xuXHQgICAgICAgICAgICBkID0gRkYoZCwgYSwgYiwgYywgTV9vZmZzZXRfOSwgIDEyLCBUWzldKTtcblx0ICAgICAgICAgICAgYyA9IEZGKGMsIGQsIGEsIGIsIE1fb2Zmc2V0XzEwLCAxNywgVFsxMF0pO1xuXHQgICAgICAgICAgICBiID0gRkYoYiwgYywgZCwgYSwgTV9vZmZzZXRfMTEsIDIyLCBUWzExXSk7XG5cdCAgICAgICAgICAgIGEgPSBGRihhLCBiLCBjLCBkLCBNX29mZnNldF8xMiwgNywgIFRbMTJdKTtcblx0ICAgICAgICAgICAgZCA9IEZGKGQsIGEsIGIsIGMsIE1fb2Zmc2V0XzEzLCAxMiwgVFsxM10pO1xuXHQgICAgICAgICAgICBjID0gRkYoYywgZCwgYSwgYiwgTV9vZmZzZXRfMTQsIDE3LCBUWzE0XSk7XG5cdCAgICAgICAgICAgIGIgPSBGRihiLCBjLCBkLCBhLCBNX29mZnNldF8xNSwgMjIsIFRbMTVdKTtcblxuXHQgICAgICAgICAgICBhID0gR0coYSwgYiwgYywgZCwgTV9vZmZzZXRfMSwgIDUsICBUWzE2XSk7XG5cdCAgICAgICAgICAgIGQgPSBHRyhkLCBhLCBiLCBjLCBNX29mZnNldF82LCAgOSwgIFRbMTddKTtcblx0ICAgICAgICAgICAgYyA9IEdHKGMsIGQsIGEsIGIsIE1fb2Zmc2V0XzExLCAxNCwgVFsxOF0pO1xuXHQgICAgICAgICAgICBiID0gR0coYiwgYywgZCwgYSwgTV9vZmZzZXRfMCwgIDIwLCBUWzE5XSk7XG5cdCAgICAgICAgICAgIGEgPSBHRyhhLCBiLCBjLCBkLCBNX29mZnNldF81LCAgNSwgIFRbMjBdKTtcblx0ICAgICAgICAgICAgZCA9IEdHKGQsIGEsIGIsIGMsIE1fb2Zmc2V0XzEwLCA5LCAgVFsyMV0pO1xuXHQgICAgICAgICAgICBjID0gR0coYywgZCwgYSwgYiwgTV9vZmZzZXRfMTUsIDE0LCBUWzIyXSk7XG5cdCAgICAgICAgICAgIGIgPSBHRyhiLCBjLCBkLCBhLCBNX29mZnNldF80LCAgMjAsIFRbMjNdKTtcblx0ICAgICAgICAgICAgYSA9IEdHKGEsIGIsIGMsIGQsIE1fb2Zmc2V0XzksICA1LCAgVFsyNF0pO1xuXHQgICAgICAgICAgICBkID0gR0coZCwgYSwgYiwgYywgTV9vZmZzZXRfMTQsIDksICBUWzI1XSk7XG5cdCAgICAgICAgICAgIGMgPSBHRyhjLCBkLCBhLCBiLCBNX29mZnNldF8zLCAgMTQsIFRbMjZdKTtcblx0ICAgICAgICAgICAgYiA9IEdHKGIsIGMsIGQsIGEsIE1fb2Zmc2V0XzgsICAyMCwgVFsyN10pO1xuXHQgICAgICAgICAgICBhID0gR0coYSwgYiwgYywgZCwgTV9vZmZzZXRfMTMsIDUsICBUWzI4XSk7XG5cdCAgICAgICAgICAgIGQgPSBHRyhkLCBhLCBiLCBjLCBNX29mZnNldF8yLCAgOSwgIFRbMjldKTtcblx0ICAgICAgICAgICAgYyA9IEdHKGMsIGQsIGEsIGIsIE1fb2Zmc2V0XzcsICAxNCwgVFszMF0pO1xuXHQgICAgICAgICAgICBiID0gR0coYiwgYywgZCwgYSwgTV9vZmZzZXRfMTIsIDIwLCBUWzMxXSk7XG5cblx0ICAgICAgICAgICAgYSA9IEhIKGEsIGIsIGMsIGQsIE1fb2Zmc2V0XzUsICA0LCAgVFszMl0pO1xuXHQgICAgICAgICAgICBkID0gSEgoZCwgYSwgYiwgYywgTV9vZmZzZXRfOCwgIDExLCBUWzMzXSk7XG5cdCAgICAgICAgICAgIGMgPSBISChjLCBkLCBhLCBiLCBNX29mZnNldF8xMSwgMTYsIFRbMzRdKTtcblx0ICAgICAgICAgICAgYiA9IEhIKGIsIGMsIGQsIGEsIE1fb2Zmc2V0XzE0LCAyMywgVFszNV0pO1xuXHQgICAgICAgICAgICBhID0gSEgoYSwgYiwgYywgZCwgTV9vZmZzZXRfMSwgIDQsICBUWzM2XSk7XG5cdCAgICAgICAgICAgIGQgPSBISChkLCBhLCBiLCBjLCBNX29mZnNldF80LCAgMTEsIFRbMzddKTtcblx0ICAgICAgICAgICAgYyA9IEhIKGMsIGQsIGEsIGIsIE1fb2Zmc2V0XzcsICAxNiwgVFszOF0pO1xuXHQgICAgICAgICAgICBiID0gSEgoYiwgYywgZCwgYSwgTV9vZmZzZXRfMTAsIDIzLCBUWzM5XSk7XG5cdCAgICAgICAgICAgIGEgPSBISChhLCBiLCBjLCBkLCBNX29mZnNldF8xMywgNCwgIFRbNDBdKTtcblx0ICAgICAgICAgICAgZCA9IEhIKGQsIGEsIGIsIGMsIE1fb2Zmc2V0XzAsICAxMSwgVFs0MV0pO1xuXHQgICAgICAgICAgICBjID0gSEgoYywgZCwgYSwgYiwgTV9vZmZzZXRfMywgIDE2LCBUWzQyXSk7XG5cdCAgICAgICAgICAgIGIgPSBISChiLCBjLCBkLCBhLCBNX29mZnNldF82LCAgMjMsIFRbNDNdKTtcblx0ICAgICAgICAgICAgYSA9IEhIKGEsIGIsIGMsIGQsIE1fb2Zmc2V0XzksICA0LCAgVFs0NF0pO1xuXHQgICAgICAgICAgICBkID0gSEgoZCwgYSwgYiwgYywgTV9vZmZzZXRfMTIsIDExLCBUWzQ1XSk7XG5cdCAgICAgICAgICAgIGMgPSBISChjLCBkLCBhLCBiLCBNX29mZnNldF8xNSwgMTYsIFRbNDZdKTtcblx0ICAgICAgICAgICAgYiA9IEhIKGIsIGMsIGQsIGEsIE1fb2Zmc2V0XzIsICAyMywgVFs0N10pO1xuXG5cdCAgICAgICAgICAgIGEgPSBJSShhLCBiLCBjLCBkLCBNX29mZnNldF8wLCAgNiwgIFRbNDhdKTtcblx0ICAgICAgICAgICAgZCA9IElJKGQsIGEsIGIsIGMsIE1fb2Zmc2V0XzcsICAxMCwgVFs0OV0pO1xuXHQgICAgICAgICAgICBjID0gSUkoYywgZCwgYSwgYiwgTV9vZmZzZXRfMTQsIDE1LCBUWzUwXSk7XG5cdCAgICAgICAgICAgIGIgPSBJSShiLCBjLCBkLCBhLCBNX29mZnNldF81LCAgMjEsIFRbNTFdKTtcblx0ICAgICAgICAgICAgYSA9IElJKGEsIGIsIGMsIGQsIE1fb2Zmc2V0XzEyLCA2LCAgVFs1Ml0pO1xuXHQgICAgICAgICAgICBkID0gSUkoZCwgYSwgYiwgYywgTV9vZmZzZXRfMywgIDEwLCBUWzUzXSk7XG5cdCAgICAgICAgICAgIGMgPSBJSShjLCBkLCBhLCBiLCBNX29mZnNldF8xMCwgMTUsIFRbNTRdKTtcblx0ICAgICAgICAgICAgYiA9IElJKGIsIGMsIGQsIGEsIE1fb2Zmc2V0XzEsICAyMSwgVFs1NV0pO1xuXHQgICAgICAgICAgICBhID0gSUkoYSwgYiwgYywgZCwgTV9vZmZzZXRfOCwgIDYsICBUWzU2XSk7XG5cdCAgICAgICAgICAgIGQgPSBJSShkLCBhLCBiLCBjLCBNX29mZnNldF8xNSwgMTAsIFRbNTddKTtcblx0ICAgICAgICAgICAgYyA9IElJKGMsIGQsIGEsIGIsIE1fb2Zmc2V0XzYsICAxNSwgVFs1OF0pO1xuXHQgICAgICAgICAgICBiID0gSUkoYiwgYywgZCwgYSwgTV9vZmZzZXRfMTMsIDIxLCBUWzU5XSk7XG5cdCAgICAgICAgICAgIGEgPSBJSShhLCBiLCBjLCBkLCBNX29mZnNldF80LCAgNiwgIFRbNjBdKTtcblx0ICAgICAgICAgICAgZCA9IElJKGQsIGEsIGIsIGMsIE1fb2Zmc2V0XzExLCAxMCwgVFs2MV0pO1xuXHQgICAgICAgICAgICBjID0gSUkoYywgZCwgYSwgYiwgTV9vZmZzZXRfMiwgIDE1LCBUWzYyXSk7XG5cdCAgICAgICAgICAgIGIgPSBJSShiLCBjLCBkLCBhLCBNX29mZnNldF85LCAgMjEsIFRbNjNdKTtcblxuXHQgICAgICAgICAgICAvLyBJbnRlcm1lZGlhdGUgaGFzaCB2YWx1ZVxuXHQgICAgICAgICAgICBIWzBdID0gKEhbMF0gKyBhKSB8IDA7XG5cdCAgICAgICAgICAgIEhbMV0gPSAoSFsxXSArIGIpIHwgMDtcblx0ICAgICAgICAgICAgSFsyXSA9IChIWzJdICsgYykgfCAwO1xuXHQgICAgICAgICAgICBIWzNdID0gKEhbM10gKyBkKSB8IDA7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb0ZpbmFsaXplOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuX2RhdGE7XG5cdCAgICAgICAgICAgIHZhciBkYXRhV29yZHMgPSBkYXRhLndvcmRzO1xuXG5cdCAgICAgICAgICAgIHZhciBuQml0c1RvdGFsID0gdGhpcy5fbkRhdGFCeXRlcyAqIDg7XG5cdCAgICAgICAgICAgIHZhciBuQml0c0xlZnQgPSBkYXRhLnNpZ0J5dGVzICogODtcblxuXHQgICAgICAgICAgICAvLyBBZGQgcGFkZGluZ1xuXHQgICAgICAgICAgICBkYXRhV29yZHNbbkJpdHNMZWZ0ID4+PiA1XSB8PSAweDgwIDw8ICgyNCAtIG5CaXRzTGVmdCAlIDMyKTtcblxuXHQgICAgICAgICAgICB2YXIgbkJpdHNUb3RhbEggPSBNYXRoLmZsb29yKG5CaXRzVG90YWwgLyAweDEwMDAwMDAwMCk7XG5cdCAgICAgICAgICAgIHZhciBuQml0c1RvdGFsTCA9IG5CaXRzVG90YWw7XG5cdCAgICAgICAgICAgIGRhdGFXb3Jkc1soKChuQml0c0xlZnQgKyA2NCkgPj4+IDkpIDw8IDQpICsgMTVdID0gKFxuXHQgICAgICAgICAgICAgICAgKCgobkJpdHNUb3RhbEggPDwgOCkgIHwgKG5CaXRzVG90YWxIID4+PiAyNCkpICYgMHgwMGZmMDBmZikgfFxuXHQgICAgICAgICAgICAgICAgKCgobkJpdHNUb3RhbEggPDwgMjQpIHwgKG5CaXRzVG90YWxIID4+PiA4KSkgICYgMHhmZjAwZmYwMClcblx0ICAgICAgICAgICAgKTtcblx0ICAgICAgICAgICAgZGF0YVdvcmRzWygoKG5CaXRzTGVmdCArIDY0KSA+Pj4gOSkgPDwgNCkgKyAxNF0gPSAoXG5cdCAgICAgICAgICAgICAgICAoKChuQml0c1RvdGFsTCA8PCA4KSAgfCAobkJpdHNUb3RhbEwgPj4+IDI0KSkgJiAweDAwZmYwMGZmKSB8XG5cdCAgICAgICAgICAgICAgICAoKChuQml0c1RvdGFsTCA8PCAyNCkgfCAobkJpdHNUb3RhbEwgPj4+IDgpKSAgJiAweGZmMDBmZjAwKVxuXHQgICAgICAgICAgICApO1xuXG5cdCAgICAgICAgICAgIGRhdGEuc2lnQnl0ZXMgPSAoZGF0YVdvcmRzLmxlbmd0aCArIDEpICogNDtcblxuXHQgICAgICAgICAgICAvLyBIYXNoIGZpbmFsIGJsb2Nrc1xuXHQgICAgICAgICAgICB0aGlzLl9wcm9jZXNzKCk7XG5cblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBoYXNoID0gdGhpcy5faGFzaDtcblx0ICAgICAgICAgICAgdmFyIEggPSBoYXNoLndvcmRzO1xuXG5cdCAgICAgICAgICAgIC8vIFN3YXAgZW5kaWFuXG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICAgICAgdmFyIEhfaSA9IEhbaV07XG5cblx0ICAgICAgICAgICAgICAgIEhbaV0gPSAoKChIX2kgPDwgOCkgIHwgKEhfaSA+Pj4gMjQpKSAmIDB4MDBmZjAwZmYpIHxcblx0ICAgICAgICAgICAgICAgICAgICAgICAoKChIX2kgPDwgMjQpIHwgKEhfaSA+Pj4gOCkpICAmIDB4ZmYwMGZmMDApO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gUmV0dXJuIGZpbmFsIGNvbXB1dGVkIGhhc2hcblx0ICAgICAgICAgICAgcmV0dXJuIGhhc2g7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBjbG9uZSA9IEhhc2hlci5jbG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgICAgICBjbG9uZS5faGFzaCA9IHRoaXMuX2hhc2guY2xvbmUoKTtcblxuXHQgICAgICAgICAgICByZXR1cm4gY2xvbmU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIGZ1bmN0aW9uIEZGKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcblx0ICAgICAgICB2YXIgbiA9IGEgKyAoKGIgJiBjKSB8ICh+YiAmIGQpKSArIHggKyB0O1xuXHQgICAgICAgIHJldHVybiAoKG4gPDwgcykgfCAobiA+Pj4gKDMyIC0gcykpKSArIGI7XG5cdCAgICB9XG5cblx0ICAgIGZ1bmN0aW9uIEdHKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcblx0ICAgICAgICB2YXIgbiA9IGEgKyAoKGIgJiBkKSB8IChjICYgfmQpKSArIHggKyB0O1xuXHQgICAgICAgIHJldHVybiAoKG4gPDwgcykgfCAobiA+Pj4gKDMyIC0gcykpKSArIGI7XG5cdCAgICB9XG5cblx0ICAgIGZ1bmN0aW9uIEhIKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcblx0ICAgICAgICB2YXIgbiA9IGEgKyAoYiBeIGMgXiBkKSArIHggKyB0O1xuXHQgICAgICAgIHJldHVybiAoKG4gPDwgcykgfCAobiA+Pj4gKDMyIC0gcykpKSArIGI7XG5cdCAgICB9XG5cblx0ICAgIGZ1bmN0aW9uIElJKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcblx0ICAgICAgICB2YXIgbiA9IGEgKyAoYyBeIChiIHwgfmQpKSArIHggKyB0O1xuXHQgICAgICAgIHJldHVybiAoKG4gPDwgcykgfCAobiA+Pj4gKDMyIC0gcykpKSArIGI7XG5cdCAgICB9XG5cblx0ICAgIC8qKlxuXHQgICAgICogU2hvcnRjdXQgZnVuY3Rpb24gdG8gdGhlIGhhc2hlcidzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGhhc2guXG5cdCAgICAgKlxuXHQgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgaGFzaC5cblx0ICAgICAqXG5cdCAgICAgKiBAc3RhdGljXG5cdCAgICAgKlxuXHQgICAgICogQGV4YW1wbGVcblx0ICAgICAqXG5cdCAgICAgKiAgICAgdmFyIGhhc2ggPSBDcnlwdG9KUy5NRDUoJ21lc3NhZ2UnKTtcblx0ICAgICAqICAgICB2YXIgaGFzaCA9IENyeXB0b0pTLk1ENSh3b3JkQXJyYXkpO1xuXHQgICAgICovXG5cdCAgICBDLk1ENSA9IEhhc2hlci5fY3JlYXRlSGVscGVyKE1ENSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogU2hvcnRjdXQgZnVuY3Rpb24gdG8gdGhlIEhNQUMncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBoYXNoLlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBrZXkgVGhlIHNlY3JldCBrZXkuXG5cdCAgICAgKlxuXHQgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgSE1BQy5cblx0ICAgICAqXG5cdCAgICAgKiBAc3RhdGljXG5cdCAgICAgKlxuXHQgICAgICogQGV4YW1wbGVcblx0ICAgICAqXG5cdCAgICAgKiAgICAgdmFyIGhtYWMgPSBDcnlwdG9KUy5IbWFjTUQ1KG1lc3NhZ2UsIGtleSk7XG5cdCAgICAgKi9cblx0ICAgIEMuSG1hY01ENSA9IEhhc2hlci5fY3JlYXRlSG1hY0hlbHBlcihNRDUpO1xuXHR9KE1hdGgpKTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5NRDU7XG5cbn0pKTsiLCI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5LCB1bmRlZikge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSwgcmVxdWlyZShcIi4vY2lwaGVyLWNvcmVcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiLCBcIi4vY2lwaGVyLWNvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdC8qKlxuXHQgKiBDaXBoZXIgRmVlZGJhY2sgYmxvY2sgbW9kZS5cblx0ICovXG5cdENyeXB0b0pTLm1vZGUuQ0ZCID0gKGZ1bmN0aW9uICgpIHtcblx0ICAgIHZhciBDRkIgPSBDcnlwdG9KUy5saWIuQmxvY2tDaXBoZXJNb2RlLmV4dGVuZCgpO1xuXG5cdCAgICBDRkIuRW5jcnlwdG9yID0gQ0ZCLmV4dGVuZCh7XG5cdCAgICAgICAgcHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiAod29yZHMsIG9mZnNldCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGNpcGhlciA9IHRoaXMuX2NpcGhlcjtcblx0ICAgICAgICAgICAgdmFyIGJsb2NrU2l6ZSA9IGNpcGhlci5ibG9ja1NpemU7XG5cblx0ICAgICAgICAgICAgZ2VuZXJhdGVLZXlzdHJlYW1BbmRFbmNyeXB0LmNhbGwodGhpcywgd29yZHMsIG9mZnNldCwgYmxvY2tTaXplLCBjaXBoZXIpO1xuXG5cdCAgICAgICAgICAgIC8vIFJlbWVtYmVyIHRoaXMgYmxvY2sgdG8gdXNlIHdpdGggbmV4dCBibG9ja1xuXHQgICAgICAgICAgICB0aGlzLl9wcmV2QmxvY2sgPSB3b3Jkcy5zbGljZShvZmZzZXQsIG9mZnNldCArIGJsb2NrU2l6ZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIENGQi5EZWNyeXB0b3IgPSBDRkIuZXh0ZW5kKHtcblx0ICAgICAgICBwcm9jZXNzQmxvY2s6IGZ1bmN0aW9uICh3b3Jkcywgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgY2lwaGVyID0gdGhpcy5fY2lwaGVyO1xuXHQgICAgICAgICAgICB2YXIgYmxvY2tTaXplID0gY2lwaGVyLmJsb2NrU2l6ZTtcblxuXHQgICAgICAgICAgICAvLyBSZW1lbWJlciB0aGlzIGJsb2NrIHRvIHVzZSB3aXRoIG5leHQgYmxvY2tcblx0ICAgICAgICAgICAgdmFyIHRoaXNCbG9jayA9IHdvcmRzLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgYmxvY2tTaXplKTtcblxuXHQgICAgICAgICAgICBnZW5lcmF0ZUtleXN0cmVhbUFuZEVuY3J5cHQuY2FsbCh0aGlzLCB3b3Jkcywgb2Zmc2V0LCBibG9ja1NpemUsIGNpcGhlcik7XG5cblx0ICAgICAgICAgICAgLy8gVGhpcyBibG9jayBiZWNvbWVzIHRoZSBwcmV2aW91cyBibG9ja1xuXHQgICAgICAgICAgICB0aGlzLl9wcmV2QmxvY2sgPSB0aGlzQmxvY2s7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIGZ1bmN0aW9uIGdlbmVyYXRlS2V5c3RyZWFtQW5kRW5jcnlwdCh3b3Jkcywgb2Zmc2V0LCBibG9ja1NpemUsIGNpcGhlcikge1xuXHQgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgdmFyIGl2ID0gdGhpcy5faXY7XG5cblx0ICAgICAgICAvLyBHZW5lcmF0ZSBrZXlzdHJlYW1cblx0ICAgICAgICBpZiAoaXYpIHtcblx0ICAgICAgICAgICAgdmFyIGtleXN0cmVhbSA9IGl2LnNsaWNlKDApO1xuXG5cdCAgICAgICAgICAgIC8vIFJlbW92ZSBJViBmb3Igc3Vic2VxdWVudCBibG9ja3Ncblx0ICAgICAgICAgICAgdGhpcy5faXYgPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdmFyIGtleXN0cmVhbSA9IHRoaXMuX3ByZXZCbG9jaztcblx0ICAgICAgICB9XG5cdCAgICAgICAgY2lwaGVyLmVuY3J5cHRCbG9jayhrZXlzdHJlYW0sIDApO1xuXG5cdCAgICAgICAgLy8gRW5jcnlwdFxuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmxvY2tTaXplOyBpKyspIHtcblx0ICAgICAgICAgICAgd29yZHNbb2Zmc2V0ICsgaV0gXj0ga2V5c3RyZWFtW2ldO1xuXHQgICAgICAgIH1cblx0ICAgIH1cblxuXHQgICAgcmV0dXJuIENGQjtcblx0fSgpKTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5tb2RlLkNGQjtcblxufSkpOyIsIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnksIHVuZGVmKSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpLCByZXF1aXJlKFwiLi9jaXBoZXItY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi9jaXBoZXItY29yZVwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0LyoqIEBwcmVzZXJ2ZVxuXHQgKiBDb3VudGVyIGJsb2NrIG1vZGUgY29tcGF0aWJsZSB3aXRoICBEciBCcmlhbiBHbGFkbWFuIGZpbGVlbmMuY1xuXHQgKiBkZXJpdmVkIGZyb20gQ3J5cHRvSlMubW9kZS5DVFJcblx0ICogSmFuIEhydWJ5IGpocnVieS53ZWJAZ21haWwuY29tXG5cdCAqL1xuXHRDcnlwdG9KUy5tb2RlLkNUUkdsYWRtYW4gPSAoZnVuY3Rpb24gKCkge1xuXHQgICAgdmFyIENUUkdsYWRtYW4gPSBDcnlwdG9KUy5saWIuQmxvY2tDaXBoZXJNb2RlLmV4dGVuZCgpO1xuXG5cdFx0ZnVuY3Rpb24gaW5jV29yZCh3b3JkKVxuXHRcdHtcblx0XHRcdGlmICgoKHdvcmQgPj4gMjQpICYgMHhmZikgPT09IDB4ZmYpIHsgLy9vdmVyZmxvd1xuXHRcdFx0dmFyIGIxID0gKHdvcmQgPj4gMTYpJjB4ZmY7XG5cdFx0XHR2YXIgYjIgPSAod29yZCA+PiA4KSYweGZmO1xuXHRcdFx0dmFyIGIzID0gd29yZCAmIDB4ZmY7XG5cblx0XHRcdGlmIChiMSA9PT0gMHhmZikgLy8gb3ZlcmZsb3cgYjFcblx0XHRcdHtcblx0XHRcdGIxID0gMDtcblx0XHRcdGlmIChiMiA9PT0gMHhmZilcblx0XHRcdHtcblx0XHRcdFx0YjIgPSAwO1xuXHRcdFx0XHRpZiAoYjMgPT09IDB4ZmYpXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRiMyA9IDA7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0KytiMztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZWxzZVxuXHRcdFx0e1xuXHRcdFx0XHQrK2IyO1xuXHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZWxzZVxuXHRcdFx0e1xuXHRcdFx0KytiMTtcblx0XHRcdH1cblxuXHRcdFx0d29yZCA9IDA7XG5cdFx0XHR3b3JkICs9IChiMSA8PCAxNik7XG5cdFx0XHR3b3JkICs9IChiMiA8PCA4KTtcblx0XHRcdHdvcmQgKz0gYjM7XG5cdFx0XHR9XG5cdFx0XHRlbHNlXG5cdFx0XHR7XG5cdFx0XHR3b3JkICs9ICgweDAxIDw8IDI0KTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB3b3JkO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGluY0NvdW50ZXIoY291bnRlcilcblx0XHR7XG5cdFx0XHRpZiAoKGNvdW50ZXJbMF0gPSBpbmNXb3JkKGNvdW50ZXJbMF0pKSA9PT0gMClcblx0XHRcdHtcblx0XHRcdFx0Ly8gZW5jcl9kYXRhIGluIGZpbGVlbmMuYyBmcm9tICBEciBCcmlhbiBHbGFkbWFuJ3MgY291bnRzIG9ubHkgd2l0aCBEV09SRCBqIDwgOFxuXHRcdFx0XHRjb3VudGVyWzFdID0gaW5jV29yZChjb3VudGVyWzFdKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBjb3VudGVyO1xuXHRcdH1cblxuXHQgICAgdmFyIEVuY3J5cHRvciA9IENUUkdsYWRtYW4uRW5jcnlwdG9yID0gQ1RSR2xhZG1hbi5leHRlbmQoe1xuXHQgICAgICAgIHByb2Nlc3NCbG9jazogZnVuY3Rpb24gKHdvcmRzLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBjaXBoZXIgPSB0aGlzLl9jaXBoZXJcblx0ICAgICAgICAgICAgdmFyIGJsb2NrU2l6ZSA9IGNpcGhlci5ibG9ja1NpemU7XG5cdCAgICAgICAgICAgIHZhciBpdiA9IHRoaXMuX2l2O1xuXHQgICAgICAgICAgICB2YXIgY291bnRlciA9IHRoaXMuX2NvdW50ZXI7XG5cblx0ICAgICAgICAgICAgLy8gR2VuZXJhdGUga2V5c3RyZWFtXG5cdCAgICAgICAgICAgIGlmIChpdikge1xuXHQgICAgICAgICAgICAgICAgY291bnRlciA9IHRoaXMuX2NvdW50ZXIgPSBpdi5zbGljZSgwKTtcblxuXHQgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIElWIGZvciBzdWJzZXF1ZW50IGJsb2Nrc1xuXHQgICAgICAgICAgICAgICAgdGhpcy5faXYgPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgICAgIH1cblxuXHRcdFx0XHRpbmNDb3VudGVyKGNvdW50ZXIpO1xuXG5cdFx0XHRcdHZhciBrZXlzdHJlYW0gPSBjb3VudGVyLnNsaWNlKDApO1xuXHQgICAgICAgICAgICBjaXBoZXIuZW5jcnlwdEJsb2NrKGtleXN0cmVhbSwgMCk7XG5cblx0ICAgICAgICAgICAgLy8gRW5jcnlwdFxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJsb2NrU2l6ZTsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB3b3Jkc1tvZmZzZXQgKyBpXSBePSBrZXlzdHJlYW1baV07XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblxuXHQgICAgQ1RSR2xhZG1hbi5EZWNyeXB0b3IgPSBFbmNyeXB0b3I7XG5cblx0ICAgIHJldHVybiBDVFJHbGFkbWFuO1xuXHR9KCkpO1xuXG5cblxuXG5cdHJldHVybiBDcnlwdG9KUy5tb2RlLkNUUkdsYWRtYW47XG5cbn0pKTsiLCI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5LCB1bmRlZikge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSwgcmVxdWlyZShcIi4vY2lwaGVyLWNvcmVcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiLCBcIi4vY2lwaGVyLWNvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdC8qKlxuXHQgKiBDb3VudGVyIGJsb2NrIG1vZGUuXG5cdCAqL1xuXHRDcnlwdG9KUy5tb2RlLkNUUiA9IChmdW5jdGlvbiAoKSB7XG5cdCAgICB2YXIgQ1RSID0gQ3J5cHRvSlMubGliLkJsb2NrQ2lwaGVyTW9kZS5leHRlbmQoKTtcblxuXHQgICAgdmFyIEVuY3J5cHRvciA9IENUUi5FbmNyeXB0b3IgPSBDVFIuZXh0ZW5kKHtcblx0ICAgICAgICBwcm9jZXNzQmxvY2s6IGZ1bmN0aW9uICh3b3Jkcywgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgY2lwaGVyID0gdGhpcy5fY2lwaGVyXG5cdCAgICAgICAgICAgIHZhciBibG9ja1NpemUgPSBjaXBoZXIuYmxvY2tTaXplO1xuXHQgICAgICAgICAgICB2YXIgaXYgPSB0aGlzLl9pdjtcblx0ICAgICAgICAgICAgdmFyIGNvdW50ZXIgPSB0aGlzLl9jb3VudGVyO1xuXG5cdCAgICAgICAgICAgIC8vIEdlbmVyYXRlIGtleXN0cmVhbVxuXHQgICAgICAgICAgICBpZiAoaXYpIHtcblx0ICAgICAgICAgICAgICAgIGNvdW50ZXIgPSB0aGlzLl9jb3VudGVyID0gaXYuc2xpY2UoMCk7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBJViBmb3Igc3Vic2VxdWVudCBibG9ja3Ncblx0ICAgICAgICAgICAgICAgIHRoaXMuX2l2ID0gdW5kZWZpbmVkO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHZhciBrZXlzdHJlYW0gPSBjb3VudGVyLnNsaWNlKDApO1xuXHQgICAgICAgICAgICBjaXBoZXIuZW5jcnlwdEJsb2NrKGtleXN0cmVhbSwgMCk7XG5cblx0ICAgICAgICAgICAgLy8gSW5jcmVtZW50IGNvdW50ZXJcblx0ICAgICAgICAgICAgY291bnRlcltibG9ja1NpemUgLSAxXSA9IChjb3VudGVyW2Jsb2NrU2l6ZSAtIDFdICsgMSkgfCAwXG5cblx0ICAgICAgICAgICAgLy8gRW5jcnlwdFxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJsb2NrU2l6ZTsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB3b3Jkc1tvZmZzZXQgKyBpXSBePSBrZXlzdHJlYW1baV07XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblxuXHQgICAgQ1RSLkRlY3J5cHRvciA9IEVuY3J5cHRvcjtcblxuXHQgICAgcmV0dXJuIENUUjtcblx0fSgpKTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5tb2RlLkNUUjtcblxufSkpOyIsIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnksIHVuZGVmKSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpLCByZXF1aXJlKFwiLi9jaXBoZXItY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi9jaXBoZXItY29yZVwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0LyoqXG5cdCAqIEVsZWN0cm9uaWMgQ29kZWJvb2sgYmxvY2sgbW9kZS5cblx0ICovXG5cdENyeXB0b0pTLm1vZGUuRUNCID0gKGZ1bmN0aW9uICgpIHtcblx0ICAgIHZhciBFQ0IgPSBDcnlwdG9KUy5saWIuQmxvY2tDaXBoZXJNb2RlLmV4dGVuZCgpO1xuXG5cdCAgICBFQ0IuRW5jcnlwdG9yID0gRUNCLmV4dGVuZCh7XG5cdCAgICAgICAgcHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiAod29yZHMsIG9mZnNldCkge1xuXHQgICAgICAgICAgICB0aGlzLl9jaXBoZXIuZW5jcnlwdEJsb2NrKHdvcmRzLCBvZmZzZXQpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICBFQ0IuRGVjcnlwdG9yID0gRUNCLmV4dGVuZCh7XG5cdCAgICAgICAgcHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiAod29yZHMsIG9mZnNldCkge1xuXHQgICAgICAgICAgICB0aGlzLl9jaXBoZXIuZGVjcnlwdEJsb2NrKHdvcmRzLCBvZmZzZXQpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICByZXR1cm4gRUNCO1xuXHR9KCkpO1xuXG5cblx0cmV0dXJuIENyeXB0b0pTLm1vZGUuRUNCO1xuXG59KSk7IiwiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSwgdW5kZWYpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIiksIHJlcXVpcmUoXCIuL2NpcGhlci1jb3JlXCIpKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXCIuL2NvcmVcIiwgXCIuL2NpcGhlci1jb3JlXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQvKipcblx0ICogT3V0cHV0IEZlZWRiYWNrIGJsb2NrIG1vZGUuXG5cdCAqL1xuXHRDcnlwdG9KUy5tb2RlLk9GQiA9IChmdW5jdGlvbiAoKSB7XG5cdCAgICB2YXIgT0ZCID0gQ3J5cHRvSlMubGliLkJsb2NrQ2lwaGVyTW9kZS5leHRlbmQoKTtcblxuXHQgICAgdmFyIEVuY3J5cHRvciA9IE9GQi5FbmNyeXB0b3IgPSBPRkIuZXh0ZW5kKHtcblx0ICAgICAgICBwcm9jZXNzQmxvY2s6IGZ1bmN0aW9uICh3b3Jkcywgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgY2lwaGVyID0gdGhpcy5fY2lwaGVyXG5cdCAgICAgICAgICAgIHZhciBibG9ja1NpemUgPSBjaXBoZXIuYmxvY2tTaXplO1xuXHQgICAgICAgICAgICB2YXIgaXYgPSB0aGlzLl9pdjtcblx0ICAgICAgICAgICAgdmFyIGtleXN0cmVhbSA9IHRoaXMuX2tleXN0cmVhbTtcblxuXHQgICAgICAgICAgICAvLyBHZW5lcmF0ZSBrZXlzdHJlYW1cblx0ICAgICAgICAgICAgaWYgKGl2KSB7XG5cdCAgICAgICAgICAgICAgICBrZXlzdHJlYW0gPSB0aGlzLl9rZXlzdHJlYW0gPSBpdi5zbGljZSgwKTtcblxuXHQgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIElWIGZvciBzdWJzZXF1ZW50IGJsb2Nrc1xuXHQgICAgICAgICAgICAgICAgdGhpcy5faXYgPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgY2lwaGVyLmVuY3J5cHRCbG9jayhrZXlzdHJlYW0sIDApO1xuXG5cdCAgICAgICAgICAgIC8vIEVuY3J5cHRcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBibG9ja1NpemU7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgd29yZHNbb2Zmc2V0ICsgaV0gXj0ga2V5c3RyZWFtW2ldO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIE9GQi5EZWNyeXB0b3IgPSBFbmNyeXB0b3I7XG5cblx0ICAgIHJldHVybiBPRkI7XG5cdH0oKSk7XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMubW9kZS5PRkI7XG5cbn0pKTsiLCI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5LCB1bmRlZikge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSwgcmVxdWlyZShcIi4vY2lwaGVyLWNvcmVcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiLCBcIi4vY2lwaGVyLWNvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdC8qKlxuXHQgKiBBTlNJIFguOTIzIHBhZGRpbmcgc3RyYXRlZ3kuXG5cdCAqL1xuXHRDcnlwdG9KUy5wYWQuQW5zaVg5MjMgPSB7XG5cdCAgICBwYWQ6IGZ1bmN0aW9uIChkYXRhLCBibG9ja1NpemUpIHtcblx0ICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICB2YXIgZGF0YVNpZ0J5dGVzID0gZGF0YS5zaWdCeXRlcztcblx0ICAgICAgICB2YXIgYmxvY2tTaXplQnl0ZXMgPSBibG9ja1NpemUgKiA0O1xuXG5cdCAgICAgICAgLy8gQ291bnQgcGFkZGluZyBieXRlc1xuXHQgICAgICAgIHZhciBuUGFkZGluZ0J5dGVzID0gYmxvY2tTaXplQnl0ZXMgLSBkYXRhU2lnQnl0ZXMgJSBibG9ja1NpemVCeXRlcztcblxuXHQgICAgICAgIC8vIENvbXB1dGUgbGFzdCBieXRlIHBvc2l0aW9uXG5cdCAgICAgICAgdmFyIGxhc3RCeXRlUG9zID0gZGF0YVNpZ0J5dGVzICsgblBhZGRpbmdCeXRlcyAtIDE7XG5cblx0ICAgICAgICAvLyBQYWRcblx0ICAgICAgICBkYXRhLmNsYW1wKCk7XG5cdCAgICAgICAgZGF0YS53b3Jkc1tsYXN0Qnl0ZVBvcyA+Pj4gMl0gfD0gblBhZGRpbmdCeXRlcyA8PCAoMjQgLSAobGFzdEJ5dGVQb3MgJSA0KSAqIDgpO1xuXHQgICAgICAgIGRhdGEuc2lnQnl0ZXMgKz0gblBhZGRpbmdCeXRlcztcblx0ICAgIH0sXG5cblx0ICAgIHVucGFkOiBmdW5jdGlvbiAoZGF0YSkge1xuXHQgICAgICAgIC8vIEdldCBudW1iZXIgb2YgcGFkZGluZyBieXRlcyBmcm9tIGxhc3QgYnl0ZVxuXHQgICAgICAgIHZhciBuUGFkZGluZ0J5dGVzID0gZGF0YS53b3Jkc1soZGF0YS5zaWdCeXRlcyAtIDEpID4+PiAyXSAmIDB4ZmY7XG5cblx0ICAgICAgICAvLyBSZW1vdmUgcGFkZGluZ1xuXHQgICAgICAgIGRhdGEuc2lnQnl0ZXMgLT0gblBhZGRpbmdCeXRlcztcblx0ICAgIH1cblx0fTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5wYWQuQW5zaXg5MjM7XG5cbn0pKTsiLCI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5LCB1bmRlZikge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSwgcmVxdWlyZShcIi4vY2lwaGVyLWNvcmVcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiLCBcIi4vY2lwaGVyLWNvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdC8qKlxuXHQgKiBJU08gMTAxMjYgcGFkZGluZyBzdHJhdGVneS5cblx0ICovXG5cdENyeXB0b0pTLnBhZC5Jc28xMDEyNiA9IHtcblx0ICAgIHBhZDogZnVuY3Rpb24gKGRhdGEsIGJsb2NrU2l6ZSkge1xuXHQgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgdmFyIGJsb2NrU2l6ZUJ5dGVzID0gYmxvY2tTaXplICogNDtcblxuXHQgICAgICAgIC8vIENvdW50IHBhZGRpbmcgYnl0ZXNcblx0ICAgICAgICB2YXIgblBhZGRpbmdCeXRlcyA9IGJsb2NrU2l6ZUJ5dGVzIC0gZGF0YS5zaWdCeXRlcyAlIGJsb2NrU2l6ZUJ5dGVzO1xuXG5cdCAgICAgICAgLy8gUGFkXG5cdCAgICAgICAgZGF0YS5jb25jYXQoQ3J5cHRvSlMubGliLldvcmRBcnJheS5yYW5kb20oblBhZGRpbmdCeXRlcyAtIDEpKS5cblx0ICAgICAgICAgICAgIGNvbmNhdChDcnlwdG9KUy5saWIuV29yZEFycmF5LmNyZWF0ZShbblBhZGRpbmdCeXRlcyA8PCAyNF0sIDEpKTtcblx0ICAgIH0sXG5cblx0ICAgIHVucGFkOiBmdW5jdGlvbiAoZGF0YSkge1xuXHQgICAgICAgIC8vIEdldCBudW1iZXIgb2YgcGFkZGluZyBieXRlcyBmcm9tIGxhc3QgYnl0ZVxuXHQgICAgICAgIHZhciBuUGFkZGluZ0J5dGVzID0gZGF0YS53b3Jkc1soZGF0YS5zaWdCeXRlcyAtIDEpID4+PiAyXSAmIDB4ZmY7XG5cblx0ICAgICAgICAvLyBSZW1vdmUgcGFkZGluZ1xuXHQgICAgICAgIGRhdGEuc2lnQnl0ZXMgLT0gblBhZGRpbmdCeXRlcztcblx0ICAgIH1cblx0fTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5wYWQuSXNvMTAxMjY7XG5cbn0pKTsiLCI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5LCB1bmRlZikge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSwgcmVxdWlyZShcIi4vY2lwaGVyLWNvcmVcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiLCBcIi4vY2lwaGVyLWNvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdC8qKlxuXHQgKiBJU08vSUVDIDk3OTctMSBQYWRkaW5nIE1ldGhvZCAyLlxuXHQgKi9cblx0Q3J5cHRvSlMucGFkLklzbzk3OTcxID0ge1xuXHQgICAgcGFkOiBmdW5jdGlvbiAoZGF0YSwgYmxvY2tTaXplKSB7XG5cdCAgICAgICAgLy8gQWRkIDB4ODAgYnl0ZVxuXHQgICAgICAgIGRhdGEuY29uY2F0KENyeXB0b0pTLmxpYi5Xb3JkQXJyYXkuY3JlYXRlKFsweDgwMDAwMDAwXSwgMSkpO1xuXG5cdCAgICAgICAgLy8gWmVybyBwYWQgdGhlIHJlc3Rcblx0ICAgICAgICBDcnlwdG9KUy5wYWQuWmVyb1BhZGRpbmcucGFkKGRhdGEsIGJsb2NrU2l6ZSk7XG5cdCAgICB9LFxuXG5cdCAgICB1bnBhZDogZnVuY3Rpb24gKGRhdGEpIHtcblx0ICAgICAgICAvLyBSZW1vdmUgemVybyBwYWRkaW5nXG5cdCAgICAgICAgQ3J5cHRvSlMucGFkLlplcm9QYWRkaW5nLnVucGFkKGRhdGEpO1xuXG5cdCAgICAgICAgLy8gUmVtb3ZlIG9uZSBtb3JlIGJ5dGUgLS0gdGhlIDB4ODAgYnl0ZVxuXHQgICAgICAgIGRhdGEuc2lnQnl0ZXMtLTtcblx0ICAgIH1cblx0fTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5wYWQuSXNvOTc5NzE7XG5cbn0pKTsiLCI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5LCB1bmRlZikge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSwgcmVxdWlyZShcIi4vY2lwaGVyLWNvcmVcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiLCBcIi4vY2lwaGVyLWNvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdC8qKlxuXHQgKiBBIG5vb3AgcGFkZGluZyBzdHJhdGVneS5cblx0ICovXG5cdENyeXB0b0pTLnBhZC5Ob1BhZGRpbmcgPSB7XG5cdCAgICBwYWQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgIH0sXG5cblx0ICAgIHVucGFkOiBmdW5jdGlvbiAoKSB7XG5cdCAgICB9XG5cdH07XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMucGFkLk5vUGFkZGluZztcblxufSkpOyIsIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnksIHVuZGVmKSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpLCByZXF1aXJlKFwiLi9jaXBoZXItY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi9jaXBoZXItY29yZVwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0LyoqXG5cdCAqIFplcm8gcGFkZGluZyBzdHJhdGVneS5cblx0ICovXG5cdENyeXB0b0pTLnBhZC5aZXJvUGFkZGluZyA9IHtcblx0ICAgIHBhZDogZnVuY3Rpb24gKGRhdGEsIGJsb2NrU2l6ZSkge1xuXHQgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgdmFyIGJsb2NrU2l6ZUJ5dGVzID0gYmxvY2tTaXplICogNDtcblxuXHQgICAgICAgIC8vIFBhZFxuXHQgICAgICAgIGRhdGEuY2xhbXAoKTtcblx0ICAgICAgICBkYXRhLnNpZ0J5dGVzICs9IGJsb2NrU2l6ZUJ5dGVzIC0gKChkYXRhLnNpZ0J5dGVzICUgYmxvY2tTaXplQnl0ZXMpIHx8IGJsb2NrU2l6ZUJ5dGVzKTtcblx0ICAgIH0sXG5cblx0ICAgIHVucGFkOiBmdW5jdGlvbiAoZGF0YSkge1xuXHQgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgdmFyIGRhdGFXb3JkcyA9IGRhdGEud29yZHM7XG5cblx0ICAgICAgICAvLyBVbnBhZFxuXHQgICAgICAgIHZhciBpID0gZGF0YS5zaWdCeXRlcyAtIDE7XG5cdCAgICAgICAgd2hpbGUgKCEoKGRhdGFXb3Jkc1tpID4+PiAyXSA+Pj4gKDI0IC0gKGkgJSA0KSAqIDgpKSAmIDB4ZmYpKSB7XG5cdCAgICAgICAgICAgIGktLTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZGF0YS5zaWdCeXRlcyA9IGkgKyAxO1xuXHQgICAgfVxuXHR9O1xuXG5cblx0cmV0dXJuIENyeXB0b0pTLnBhZC5aZXJvUGFkZGluZztcblxufSkpOyIsIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnksIHVuZGVmKSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpLCByZXF1aXJlKFwiLi9zaGExXCIpLCByZXF1aXJlKFwiLi9obWFjXCIpKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXCIuL2NvcmVcIiwgXCIuL3NoYTFcIiwgXCIuL2htYWNcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdChmdW5jdGlvbiAoKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBCYXNlID0gQ19saWIuQmFzZTtcblx0ICAgIHZhciBXb3JkQXJyYXkgPSBDX2xpYi5Xb3JkQXJyYXk7XG5cdCAgICB2YXIgQ19hbGdvID0gQy5hbGdvO1xuXHQgICAgdmFyIFNIQTEgPSBDX2FsZ28uU0hBMTtcblx0ICAgIHZhciBITUFDID0gQ19hbGdvLkhNQUM7XG5cblx0ICAgIC8qKlxuXHQgICAgICogUGFzc3dvcmQtQmFzZWQgS2V5IERlcml2YXRpb24gRnVuY3Rpb24gMiBhbGdvcml0aG0uXG5cdCAgICAgKi9cblx0ICAgIHZhciBQQktERjIgPSBDX2FsZ28uUEJLREYyID0gQmFzZS5leHRlbmQoe1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBrZXlTaXplIFRoZSBrZXkgc2l6ZSBpbiB3b3JkcyB0byBnZW5lcmF0ZS4gRGVmYXVsdDogNCAoMTI4IGJpdHMpXG5cdCAgICAgICAgICogQHByb3BlcnR5IHtIYXNoZXJ9IGhhc2hlciBUaGUgaGFzaGVyIHRvIHVzZS4gRGVmYXVsdDogU0hBMVxuXHQgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBpdGVyYXRpb25zIFRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyB0byBwZXJmb3JtLiBEZWZhdWx0OiAxXG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY2ZnOiBCYXNlLmV4dGVuZCh7XG5cdCAgICAgICAgICAgIGtleVNpemU6IDEyOC8zMixcblx0ICAgICAgICAgICAgaGFzaGVyOiBTSEExLFxuXHQgICAgICAgICAgICBpdGVyYXRpb25zOiAxXG5cdCAgICAgICAgfSksXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBJbml0aWFsaXplcyBhIG5ld2x5IGNyZWF0ZWQga2V5IGRlcml2YXRpb24gZnVuY3Rpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY2ZnIChPcHRpb25hbCkgVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byB1c2UgZm9yIHRoZSBkZXJpdmF0aW9uLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIga2RmID0gQ3J5cHRvSlMuYWxnby5QQktERjIuY3JlYXRlKCk7XG5cdCAgICAgICAgICogICAgIHZhciBrZGYgPSBDcnlwdG9KUy5hbGdvLlBCS0RGMi5jcmVhdGUoeyBrZXlTaXplOiA4IH0pO1xuXHQgICAgICAgICAqICAgICB2YXIga2RmID0gQ3J5cHRvSlMuYWxnby5QQktERjIuY3JlYXRlKHsga2V5U2l6ZTogOCwgaXRlcmF0aW9uczogMTAwMCB9KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBpbml0OiBmdW5jdGlvbiAoY2ZnKSB7XG5cdCAgICAgICAgICAgIHRoaXMuY2ZnID0gdGhpcy5jZmcuZXh0ZW5kKGNmZyk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbXB1dGVzIHRoZSBQYXNzd29yZC1CYXNlZCBLZXkgRGVyaXZhdGlvbiBGdW5jdGlvbiAyLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBwYXNzd29yZCBUaGUgcGFzc3dvcmQuXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBzYWx0IEEgc2FsdC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIGRlcml2ZWQga2V5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIga2V5ID0ga2RmLmNvbXB1dGUocGFzc3dvcmQsIHNhbHQpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGNvbXB1dGU6IGZ1bmN0aW9uIChwYXNzd29yZCwgc2FsdCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgY2ZnID0gdGhpcy5jZmc7XG5cblx0ICAgICAgICAgICAgLy8gSW5pdCBITUFDXG5cdCAgICAgICAgICAgIHZhciBobWFjID0gSE1BQy5jcmVhdGUoY2ZnLmhhc2hlciwgcGFzc3dvcmQpO1xuXG5cdCAgICAgICAgICAgIC8vIEluaXRpYWwgdmFsdWVzXG5cdCAgICAgICAgICAgIHZhciBkZXJpdmVkS2V5ID0gV29yZEFycmF5LmNyZWF0ZSgpO1xuXHQgICAgICAgICAgICB2YXIgYmxvY2tJbmRleCA9IFdvcmRBcnJheS5jcmVhdGUoWzB4MDAwMDAwMDFdKTtcblxuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGRlcml2ZWRLZXlXb3JkcyA9IGRlcml2ZWRLZXkud29yZHM7XG5cdCAgICAgICAgICAgIHZhciBibG9ja0luZGV4V29yZHMgPSBibG9ja0luZGV4LndvcmRzO1xuXHQgICAgICAgICAgICB2YXIga2V5U2l6ZSA9IGNmZy5rZXlTaXplO1xuXHQgICAgICAgICAgICB2YXIgaXRlcmF0aW9ucyA9IGNmZy5pdGVyYXRpb25zO1xuXG5cdCAgICAgICAgICAgIC8vIEdlbmVyYXRlIGtleVxuXHQgICAgICAgICAgICB3aGlsZSAoZGVyaXZlZEtleVdvcmRzLmxlbmd0aCA8IGtleVNpemUpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBibG9jayA9IGhtYWMudXBkYXRlKHNhbHQpLmZpbmFsaXplKGJsb2NrSW5kZXgpO1xuXHQgICAgICAgICAgICAgICAgaG1hYy5yZXNldCgpO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgICAgIHZhciBibG9ja1dvcmRzID0gYmxvY2sud29yZHM7XG5cdCAgICAgICAgICAgICAgICB2YXIgYmxvY2tXb3Jkc0xlbmd0aCA9IGJsb2NrV29yZHMubGVuZ3RoO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBJdGVyYXRpb25zXG5cdCAgICAgICAgICAgICAgICB2YXIgaW50ZXJtZWRpYXRlID0gYmxvY2s7XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGl0ZXJhdGlvbnM7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIGludGVybWVkaWF0ZSA9IGhtYWMuZmluYWxpemUoaW50ZXJtZWRpYXRlKTtcblx0ICAgICAgICAgICAgICAgICAgICBobWFjLnJlc2V0KCk7XG5cblx0ICAgICAgICAgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICAgICAgICAgIHZhciBpbnRlcm1lZGlhdGVXb3JkcyA9IGludGVybWVkaWF0ZS53b3JkcztcblxuXHQgICAgICAgICAgICAgICAgICAgIC8vIFhPUiBpbnRlcm1lZGlhdGUgd2l0aCBibG9ja1xuXHQgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgYmxvY2tXb3Jkc0xlbmd0aDsgaisrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrV29yZHNbal0gXj0gaW50ZXJtZWRpYXRlV29yZHNbal07XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICBkZXJpdmVkS2V5LmNvbmNhdChibG9jayk7XG5cdCAgICAgICAgICAgICAgICBibG9ja0luZGV4V29yZHNbMF0rKztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBkZXJpdmVkS2V5LnNpZ0J5dGVzID0ga2V5U2l6ZSAqIDQ7XG5cblx0ICAgICAgICAgICAgcmV0dXJuIGRlcml2ZWRLZXk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogQ29tcHV0ZXMgdGhlIFBhc3N3b3JkLUJhc2VkIEtleSBEZXJpdmF0aW9uIEZ1bmN0aW9uIDIuXG5cdCAgICAgKlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBwYXNzd29yZCBUaGUgcGFzc3dvcmQuXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IHNhbHQgQSBzYWx0LlxuXHQgICAgICogQHBhcmFtIHtPYmplY3R9IGNmZyAoT3B0aW9uYWwpIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gdXNlIGZvciB0aGlzIGNvbXB1dGF0aW9uLlxuXHQgICAgICpcblx0ICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIGRlcml2ZWQga2V5LlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIga2V5ID0gQ3J5cHRvSlMuUEJLREYyKHBhc3N3b3JkLCBzYWx0KTtcblx0ICAgICAqICAgICB2YXIga2V5ID0gQ3J5cHRvSlMuUEJLREYyKHBhc3N3b3JkLCBzYWx0LCB7IGtleVNpemU6IDggfSk7XG5cdCAgICAgKiAgICAgdmFyIGtleSA9IENyeXB0b0pTLlBCS0RGMihwYXNzd29yZCwgc2FsdCwgeyBrZXlTaXplOiA4LCBpdGVyYXRpb25zOiAxMDAwIH0pO1xuXHQgICAgICovXG5cdCAgICBDLlBCS0RGMiA9IGZ1bmN0aW9uIChwYXNzd29yZCwgc2FsdCwgY2ZnKSB7XG5cdCAgICAgICAgcmV0dXJuIFBCS0RGMi5jcmVhdGUoY2ZnKS5jb21wdXRlKHBhc3N3b3JkLCBzYWx0KTtcblx0ICAgIH07XG5cdH0oKSk7XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMuUEJLREYyO1xuXG59KSk7IiwiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSwgdW5kZWYpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIiksIHJlcXVpcmUoXCIuL2VuYy1iYXNlNjRcIiksIHJlcXVpcmUoXCIuL21kNVwiKSwgcmVxdWlyZShcIi4vZXZwa2RmXCIpLCByZXF1aXJlKFwiLi9jaXBoZXItY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi9lbmMtYmFzZTY0XCIsIFwiLi9tZDVcIiwgXCIuL2V2cGtkZlwiLCBcIi4vY2lwaGVyLWNvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdChmdW5jdGlvbiAoKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBTdHJlYW1DaXBoZXIgPSBDX2xpYi5TdHJlYW1DaXBoZXI7XG5cdCAgICB2YXIgQ19hbGdvID0gQy5hbGdvO1xuXG5cdCAgICAvLyBSZXVzYWJsZSBvYmplY3RzXG5cdCAgICB2YXIgUyAgPSBbXTtcblx0ICAgIHZhciBDXyA9IFtdO1xuXHQgICAgdmFyIEcgID0gW107XG5cblx0ICAgIC8qKlxuXHQgICAgICogUmFiYml0IHN0cmVhbSBjaXBoZXIgYWxnb3JpdGhtLlxuXHQgICAgICpcblx0ICAgICAqIFRoaXMgaXMgYSBsZWdhY3kgdmVyc2lvbiB0aGF0IG5lZ2xlY3RlZCB0byBjb252ZXJ0IHRoZSBrZXkgdG8gbGl0dGxlLWVuZGlhbi5cblx0ICAgICAqIFRoaXMgZXJyb3IgZG9lc24ndCBhZmZlY3QgdGhlIGNpcGhlcidzIHNlY3VyaXR5LFxuXHQgICAgICogYnV0IGl0IGRvZXMgYWZmZWN0IGl0cyBjb21wYXRpYmlsaXR5IHdpdGggb3RoZXIgaW1wbGVtZW50YXRpb25zLlxuXHQgICAgICovXG5cdCAgICB2YXIgUmFiYml0TGVnYWN5ID0gQ19hbGdvLlJhYmJpdExlZ2FjeSA9IFN0cmVhbUNpcGhlci5leHRlbmQoe1xuXHQgICAgICAgIF9kb1Jlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgSyA9IHRoaXMuX2tleS53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIGl2ID0gdGhpcy5jZmcuaXY7XG5cblx0ICAgICAgICAgICAgLy8gR2VuZXJhdGUgaW5pdGlhbCBzdGF0ZSB2YWx1ZXNcblx0ICAgICAgICAgICAgdmFyIFggPSB0aGlzLl9YID0gW1xuXHQgICAgICAgICAgICAgICAgS1swXSwgKEtbM10gPDwgMTYpIHwgKEtbMl0gPj4+IDE2KSxcblx0ICAgICAgICAgICAgICAgIEtbMV0sIChLWzBdIDw8IDE2KSB8IChLWzNdID4+PiAxNiksXG5cdCAgICAgICAgICAgICAgICBLWzJdLCAoS1sxXSA8PCAxNikgfCAoS1swXSA+Pj4gMTYpLFxuXHQgICAgICAgICAgICAgICAgS1szXSwgKEtbMl0gPDwgMTYpIHwgKEtbMV0gPj4+IDE2KVxuXHQgICAgICAgICAgICBdO1xuXG5cdCAgICAgICAgICAgIC8vIEdlbmVyYXRlIGluaXRpYWwgY291bnRlciB2YWx1ZXNcblx0ICAgICAgICAgICAgdmFyIEMgPSB0aGlzLl9DID0gW1xuXHQgICAgICAgICAgICAgICAgKEtbMl0gPDwgMTYpIHwgKEtbMl0gPj4+IDE2KSwgKEtbMF0gJiAweGZmZmYwMDAwKSB8IChLWzFdICYgMHgwMDAwZmZmZiksXG5cdCAgICAgICAgICAgICAgICAoS1szXSA8PCAxNikgfCAoS1szXSA+Pj4gMTYpLCAoS1sxXSAmIDB4ZmZmZjAwMDApIHwgKEtbMl0gJiAweDAwMDBmZmZmKSxcblx0ICAgICAgICAgICAgICAgIChLWzBdIDw8IDE2KSB8IChLWzBdID4+PiAxNiksIChLWzJdICYgMHhmZmZmMDAwMCkgfCAoS1szXSAmIDB4MDAwMGZmZmYpLFxuXHQgICAgICAgICAgICAgICAgKEtbMV0gPDwgMTYpIHwgKEtbMV0gPj4+IDE2KSwgKEtbM10gJiAweGZmZmYwMDAwKSB8IChLWzBdICYgMHgwMDAwZmZmZilcblx0ICAgICAgICAgICAgXTtcblxuXHQgICAgICAgICAgICAvLyBDYXJyeSBiaXRcblx0ICAgICAgICAgICAgdGhpcy5fYiA9IDA7XG5cblx0ICAgICAgICAgICAgLy8gSXRlcmF0ZSB0aGUgc3lzdGVtIGZvdXIgdGltZXNcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA0OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIG5leHRTdGF0ZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gTW9kaWZ5IHRoZSBjb3VudGVyc1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgQ1tpXSBePSBYWyhpICsgNCkgJiA3XTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIElWIHNldHVwXG5cdCAgICAgICAgICAgIGlmIChpdikge1xuXHQgICAgICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgICAgICB2YXIgSVYgPSBpdi53b3Jkcztcblx0ICAgICAgICAgICAgICAgIHZhciBJVl8wID0gSVZbMF07XG5cdCAgICAgICAgICAgICAgICB2YXIgSVZfMSA9IElWWzFdO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBHZW5lcmF0ZSBmb3VyIHN1YnZlY3RvcnNcblx0ICAgICAgICAgICAgICAgIHZhciBpMCA9ICgoKElWXzAgPDwgOCkgfCAoSVZfMCA+Pj4gMjQpKSAmIDB4MDBmZjAwZmYpIHwgKCgoSVZfMCA8PCAyNCkgfCAoSVZfMCA+Pj4gOCkpICYgMHhmZjAwZmYwMCk7XG5cdCAgICAgICAgICAgICAgICB2YXIgaTIgPSAoKChJVl8xIDw8IDgpIHwgKElWXzEgPj4+IDI0KSkgJiAweDAwZmYwMGZmKSB8ICgoKElWXzEgPDwgMjQpIHwgKElWXzEgPj4+IDgpKSAmIDB4ZmYwMGZmMDApO1xuXHQgICAgICAgICAgICAgICAgdmFyIGkxID0gKGkwID4+PiAxNikgfCAoaTIgJiAweGZmZmYwMDAwKTtcblx0ICAgICAgICAgICAgICAgIHZhciBpMyA9IChpMiA8PCAxNikgIHwgKGkwICYgMHgwMDAwZmZmZik7XG5cblx0ICAgICAgICAgICAgICAgIC8vIE1vZGlmeSBjb3VudGVyIHZhbHVlc1xuXHQgICAgICAgICAgICAgICAgQ1swXSBePSBpMDtcblx0ICAgICAgICAgICAgICAgIENbMV0gXj0gaTE7XG5cdCAgICAgICAgICAgICAgICBDWzJdIF49IGkyO1xuXHQgICAgICAgICAgICAgICAgQ1szXSBePSBpMztcblx0ICAgICAgICAgICAgICAgIENbNF0gXj0gaTA7XG5cdCAgICAgICAgICAgICAgICBDWzVdIF49IGkxO1xuXHQgICAgICAgICAgICAgICAgQ1s2XSBePSBpMjtcblx0ICAgICAgICAgICAgICAgIENbN10gXj0gaTM7XG5cblx0ICAgICAgICAgICAgICAgIC8vIEl0ZXJhdGUgdGhlIHN5c3RlbSBmb3VyIHRpbWVzXG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIG5leHRTdGF0ZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb1Byb2Nlc3NCbG9jazogZnVuY3Rpb24gKE0sIG9mZnNldCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgWCA9IHRoaXMuX1g7XG5cblx0ICAgICAgICAgICAgLy8gSXRlcmF0ZSB0aGUgc3lzdGVtXG5cdCAgICAgICAgICAgIG5leHRTdGF0ZS5jYWxsKHRoaXMpO1xuXG5cdCAgICAgICAgICAgIC8vIEdlbmVyYXRlIGZvdXIga2V5c3RyZWFtIHdvcmRzXG5cdCAgICAgICAgICAgIFNbMF0gPSBYWzBdIF4gKFhbNV0gPj4+IDE2KSBeIChYWzNdIDw8IDE2KTtcblx0ICAgICAgICAgICAgU1sxXSA9IFhbMl0gXiAoWFs3XSA+Pj4gMTYpIF4gKFhbNV0gPDwgMTYpO1xuXHQgICAgICAgICAgICBTWzJdID0gWFs0XSBeIChYWzFdID4+PiAxNikgXiAoWFs3XSA8PCAxNik7XG5cdCAgICAgICAgICAgIFNbM10gPSBYWzZdIF4gKFhbM10gPj4+IDE2KSBeIChYWzFdIDw8IDE2KTtcblxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgLy8gU3dhcCBlbmRpYW5cblx0ICAgICAgICAgICAgICAgIFNbaV0gPSAoKChTW2ldIDw8IDgpICB8IChTW2ldID4+PiAyNCkpICYgMHgwMGZmMDBmZikgfFxuXHQgICAgICAgICAgICAgICAgICAgICAgICgoKFNbaV0gPDwgMjQpIHwgKFNbaV0gPj4+IDgpKSAgJiAweGZmMDBmZjAwKTtcblxuXHQgICAgICAgICAgICAgICAgLy8gRW5jcnlwdFxuXHQgICAgICAgICAgICAgICAgTVtvZmZzZXQgKyBpXSBePSBTW2ldO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGJsb2NrU2l6ZTogMTI4LzMyLFxuXG5cdCAgICAgICAgaXZTaXplOiA2NC8zMlxuXHQgICAgfSk7XG5cblx0ICAgIGZ1bmN0aW9uIG5leHRTdGF0ZSgpIHtcblx0ICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICB2YXIgWCA9IHRoaXMuX1g7XG5cdCAgICAgICAgdmFyIEMgPSB0aGlzLl9DO1xuXG5cdCAgICAgICAgLy8gU2F2ZSBvbGQgY291bnRlciB2YWx1ZXNcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykge1xuXHQgICAgICAgICAgICBDX1tpXSA9IENbaV07XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgLy8gQ2FsY3VsYXRlIG5ldyBjb3VudGVyIHZhbHVlc1xuXHQgICAgICAgIENbMF0gPSAoQ1swXSArIDB4NGQzNGQzNGQgKyB0aGlzLl9iKSB8IDA7XG5cdCAgICAgICAgQ1sxXSA9IChDWzFdICsgMHhkMzRkMzRkMyArICgoQ1swXSA+Pj4gMCkgPCAoQ19bMF0gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgQ1syXSA9IChDWzJdICsgMHgzNGQzNGQzNCArICgoQ1sxXSA+Pj4gMCkgPCAoQ19bMV0gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgQ1szXSA9IChDWzNdICsgMHg0ZDM0ZDM0ZCArICgoQ1syXSA+Pj4gMCkgPCAoQ19bMl0gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgQ1s0XSA9IChDWzRdICsgMHhkMzRkMzRkMyArICgoQ1szXSA+Pj4gMCkgPCAoQ19bM10gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgQ1s1XSA9IChDWzVdICsgMHgzNGQzNGQzNCArICgoQ1s0XSA+Pj4gMCkgPCAoQ19bNF0gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgQ1s2XSA9IChDWzZdICsgMHg0ZDM0ZDM0ZCArICgoQ1s1XSA+Pj4gMCkgPCAoQ19bNV0gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgQ1s3XSA9IChDWzddICsgMHhkMzRkMzRkMyArICgoQ1s2XSA+Pj4gMCkgPCAoQ19bNl0gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgdGhpcy5fYiA9IChDWzddID4+PiAwKSA8IChDX1s3XSA+Pj4gMCkgPyAxIDogMDtcblxuXHQgICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgZy12YWx1ZXNcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgZ3ggPSBYW2ldICsgQ1tpXTtcblxuXHQgICAgICAgICAgICAvLyBDb25zdHJ1Y3QgaGlnaCBhbmQgbG93IGFyZ3VtZW50IGZvciBzcXVhcmluZ1xuXHQgICAgICAgICAgICB2YXIgZ2EgPSBneCAmIDB4ZmZmZjtcblx0ICAgICAgICAgICAgdmFyIGdiID0gZ3ggPj4+IDE2O1xuXG5cdCAgICAgICAgICAgIC8vIENhbGN1bGF0ZSBoaWdoIGFuZCBsb3cgcmVzdWx0IG9mIHNxdWFyaW5nXG5cdCAgICAgICAgICAgIHZhciBnaCA9ICgoKChnYSAqIGdhKSA+Pj4gMTcpICsgZ2EgKiBnYikgPj4+IDE1KSArIGdiICogZ2I7XG5cdCAgICAgICAgICAgIHZhciBnbCA9ICgoKGd4ICYgMHhmZmZmMDAwMCkgKiBneCkgfCAwKSArICgoKGd4ICYgMHgwMDAwZmZmZikgKiBneCkgfCAwKTtcblxuXHQgICAgICAgICAgICAvLyBIaWdoIFhPUiBsb3dcblx0ICAgICAgICAgICAgR1tpXSA9IGdoIF4gZ2w7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgLy8gQ2FsY3VsYXRlIG5ldyBzdGF0ZSB2YWx1ZXNcblx0ICAgICAgICBYWzBdID0gKEdbMF0gKyAoKEdbN10gPDwgMTYpIHwgKEdbN10gPj4+IDE2KSkgKyAoKEdbNl0gPDwgMTYpIHwgKEdbNl0gPj4+IDE2KSkpIHwgMDtcblx0ICAgICAgICBYWzFdID0gKEdbMV0gKyAoKEdbMF0gPDwgOCkgIHwgKEdbMF0gPj4+IDI0KSkgKyBHWzddKSB8IDA7XG5cdCAgICAgICAgWFsyXSA9IChHWzJdICsgKChHWzFdIDw8IDE2KSB8IChHWzFdID4+PiAxNikpICsgKChHWzBdIDw8IDE2KSB8IChHWzBdID4+PiAxNikpKSB8IDA7XG5cdCAgICAgICAgWFszXSA9IChHWzNdICsgKChHWzJdIDw8IDgpICB8IChHWzJdID4+PiAyNCkpICsgR1sxXSkgfCAwO1xuXHQgICAgICAgIFhbNF0gPSAoR1s0XSArICgoR1szXSA8PCAxNikgfCAoR1szXSA+Pj4gMTYpKSArICgoR1syXSA8PCAxNikgfCAoR1syXSA+Pj4gMTYpKSkgfCAwO1xuXHQgICAgICAgIFhbNV0gPSAoR1s1XSArICgoR1s0XSA8PCA4KSAgfCAoR1s0XSA+Pj4gMjQpKSArIEdbM10pIHwgMDtcblx0ICAgICAgICBYWzZdID0gKEdbNl0gKyAoKEdbNV0gPDwgMTYpIHwgKEdbNV0gPj4+IDE2KSkgKyAoKEdbNF0gPDwgMTYpIHwgKEdbNF0gPj4+IDE2KSkpIHwgMDtcblx0ICAgICAgICBYWzddID0gKEdbN10gKyAoKEdbNl0gPDwgOCkgIHwgKEdbNl0gPj4+IDI0KSkgKyBHWzVdKSB8IDA7XG5cdCAgICB9XG5cblx0ICAgIC8qKlxuXHQgICAgICogU2hvcnRjdXQgZnVuY3Rpb25zIHRvIHRoZSBjaXBoZXIncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBjaXBoZXJ0ZXh0ID0gQ3J5cHRvSlMuUmFiYml0TGVnYWN5LmVuY3J5cHQobWVzc2FnZSwga2V5LCBjZmcpO1xuXHQgICAgICogICAgIHZhciBwbGFpbnRleHQgID0gQ3J5cHRvSlMuUmFiYml0TGVnYWN5LmRlY3J5cHQoY2lwaGVydGV4dCwga2V5LCBjZmcpO1xuXHQgICAgICovXG5cdCAgICBDLlJhYmJpdExlZ2FjeSA9IFN0cmVhbUNpcGhlci5fY3JlYXRlSGVscGVyKFJhYmJpdExlZ2FjeSk7XG5cdH0oKSk7XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMuUmFiYml0TGVnYWN5O1xuXG59KSk7IiwiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSwgdW5kZWYpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIiksIHJlcXVpcmUoXCIuL2VuYy1iYXNlNjRcIiksIHJlcXVpcmUoXCIuL21kNVwiKSwgcmVxdWlyZShcIi4vZXZwa2RmXCIpLCByZXF1aXJlKFwiLi9jaXBoZXItY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi9lbmMtYmFzZTY0XCIsIFwiLi9tZDVcIiwgXCIuL2V2cGtkZlwiLCBcIi4vY2lwaGVyLWNvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdChmdW5jdGlvbiAoKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBTdHJlYW1DaXBoZXIgPSBDX2xpYi5TdHJlYW1DaXBoZXI7XG5cdCAgICB2YXIgQ19hbGdvID0gQy5hbGdvO1xuXG5cdCAgICAvLyBSZXVzYWJsZSBvYmplY3RzXG5cdCAgICB2YXIgUyAgPSBbXTtcblx0ICAgIHZhciBDXyA9IFtdO1xuXHQgICAgdmFyIEcgID0gW107XG5cblx0ICAgIC8qKlxuXHQgICAgICogUmFiYml0IHN0cmVhbSBjaXBoZXIgYWxnb3JpdGhtXG5cdCAgICAgKi9cblx0ICAgIHZhciBSYWJiaXQgPSBDX2FsZ28uUmFiYml0ID0gU3RyZWFtQ2lwaGVyLmV4dGVuZCh7XG5cdCAgICAgICAgX2RvUmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBLID0gdGhpcy5fa2V5LndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgaXYgPSB0aGlzLmNmZy5pdjtcblxuXHQgICAgICAgICAgICAvLyBTd2FwIGVuZGlhblxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgS1tpXSA9ICgoKEtbaV0gPDwgOCkgIHwgKEtbaV0gPj4+IDI0KSkgJiAweDAwZmYwMGZmKSB8XG5cdCAgICAgICAgICAgICAgICAgICAgICAgKCgoS1tpXSA8PCAyNCkgfCAoS1tpXSA+Pj4gOCkpICAmIDB4ZmYwMGZmMDApO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gR2VuZXJhdGUgaW5pdGlhbCBzdGF0ZSB2YWx1ZXNcblx0ICAgICAgICAgICAgdmFyIFggPSB0aGlzLl9YID0gW1xuXHQgICAgICAgICAgICAgICAgS1swXSwgKEtbM10gPDwgMTYpIHwgKEtbMl0gPj4+IDE2KSxcblx0ICAgICAgICAgICAgICAgIEtbMV0sIChLWzBdIDw8IDE2KSB8IChLWzNdID4+PiAxNiksXG5cdCAgICAgICAgICAgICAgICBLWzJdLCAoS1sxXSA8PCAxNikgfCAoS1swXSA+Pj4gMTYpLFxuXHQgICAgICAgICAgICAgICAgS1szXSwgKEtbMl0gPDwgMTYpIHwgKEtbMV0gPj4+IDE2KVxuXHQgICAgICAgICAgICBdO1xuXG5cdCAgICAgICAgICAgIC8vIEdlbmVyYXRlIGluaXRpYWwgY291bnRlciB2YWx1ZXNcblx0ICAgICAgICAgICAgdmFyIEMgPSB0aGlzLl9DID0gW1xuXHQgICAgICAgICAgICAgICAgKEtbMl0gPDwgMTYpIHwgKEtbMl0gPj4+IDE2KSwgKEtbMF0gJiAweGZmZmYwMDAwKSB8IChLWzFdICYgMHgwMDAwZmZmZiksXG5cdCAgICAgICAgICAgICAgICAoS1szXSA8PCAxNikgfCAoS1szXSA+Pj4gMTYpLCAoS1sxXSAmIDB4ZmZmZjAwMDApIHwgKEtbMl0gJiAweDAwMDBmZmZmKSxcblx0ICAgICAgICAgICAgICAgIChLWzBdIDw8IDE2KSB8IChLWzBdID4+PiAxNiksIChLWzJdICYgMHhmZmZmMDAwMCkgfCAoS1szXSAmIDB4MDAwMGZmZmYpLFxuXHQgICAgICAgICAgICAgICAgKEtbMV0gPDwgMTYpIHwgKEtbMV0gPj4+IDE2KSwgKEtbM10gJiAweGZmZmYwMDAwKSB8IChLWzBdICYgMHgwMDAwZmZmZilcblx0ICAgICAgICAgICAgXTtcblxuXHQgICAgICAgICAgICAvLyBDYXJyeSBiaXRcblx0ICAgICAgICAgICAgdGhpcy5fYiA9IDA7XG5cblx0ICAgICAgICAgICAgLy8gSXRlcmF0ZSB0aGUgc3lzdGVtIGZvdXIgdGltZXNcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA0OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIG5leHRTdGF0ZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gTW9kaWZ5IHRoZSBjb3VudGVyc1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgQ1tpXSBePSBYWyhpICsgNCkgJiA3XTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIElWIHNldHVwXG5cdCAgICAgICAgICAgIGlmIChpdikge1xuXHQgICAgICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgICAgICB2YXIgSVYgPSBpdi53b3Jkcztcblx0ICAgICAgICAgICAgICAgIHZhciBJVl8wID0gSVZbMF07XG5cdCAgICAgICAgICAgICAgICB2YXIgSVZfMSA9IElWWzFdO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBHZW5lcmF0ZSBmb3VyIHN1YnZlY3RvcnNcblx0ICAgICAgICAgICAgICAgIHZhciBpMCA9ICgoKElWXzAgPDwgOCkgfCAoSVZfMCA+Pj4gMjQpKSAmIDB4MDBmZjAwZmYpIHwgKCgoSVZfMCA8PCAyNCkgfCAoSVZfMCA+Pj4gOCkpICYgMHhmZjAwZmYwMCk7XG5cdCAgICAgICAgICAgICAgICB2YXIgaTIgPSAoKChJVl8xIDw8IDgpIHwgKElWXzEgPj4+IDI0KSkgJiAweDAwZmYwMGZmKSB8ICgoKElWXzEgPDwgMjQpIHwgKElWXzEgPj4+IDgpKSAmIDB4ZmYwMGZmMDApO1xuXHQgICAgICAgICAgICAgICAgdmFyIGkxID0gKGkwID4+PiAxNikgfCAoaTIgJiAweGZmZmYwMDAwKTtcblx0ICAgICAgICAgICAgICAgIHZhciBpMyA9IChpMiA8PCAxNikgIHwgKGkwICYgMHgwMDAwZmZmZik7XG5cblx0ICAgICAgICAgICAgICAgIC8vIE1vZGlmeSBjb3VudGVyIHZhbHVlc1xuXHQgICAgICAgICAgICAgICAgQ1swXSBePSBpMDtcblx0ICAgICAgICAgICAgICAgIENbMV0gXj0gaTE7XG5cdCAgICAgICAgICAgICAgICBDWzJdIF49IGkyO1xuXHQgICAgICAgICAgICAgICAgQ1szXSBePSBpMztcblx0ICAgICAgICAgICAgICAgIENbNF0gXj0gaTA7XG5cdCAgICAgICAgICAgICAgICBDWzVdIF49IGkxO1xuXHQgICAgICAgICAgICAgICAgQ1s2XSBePSBpMjtcblx0ICAgICAgICAgICAgICAgIENbN10gXj0gaTM7XG5cblx0ICAgICAgICAgICAgICAgIC8vIEl0ZXJhdGUgdGhlIHN5c3RlbSBmb3VyIHRpbWVzXG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIG5leHRTdGF0ZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb1Byb2Nlc3NCbG9jazogZnVuY3Rpb24gKE0sIG9mZnNldCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgWCA9IHRoaXMuX1g7XG5cblx0ICAgICAgICAgICAgLy8gSXRlcmF0ZSB0aGUgc3lzdGVtXG5cdCAgICAgICAgICAgIG5leHRTdGF0ZS5jYWxsKHRoaXMpO1xuXG5cdCAgICAgICAgICAgIC8vIEdlbmVyYXRlIGZvdXIga2V5c3RyZWFtIHdvcmRzXG5cdCAgICAgICAgICAgIFNbMF0gPSBYWzBdIF4gKFhbNV0gPj4+IDE2KSBeIChYWzNdIDw8IDE2KTtcblx0ICAgICAgICAgICAgU1sxXSA9IFhbMl0gXiAoWFs3XSA+Pj4gMTYpIF4gKFhbNV0gPDwgMTYpO1xuXHQgICAgICAgICAgICBTWzJdID0gWFs0XSBeIChYWzFdID4+PiAxNikgXiAoWFs3XSA8PCAxNik7XG5cdCAgICAgICAgICAgIFNbM10gPSBYWzZdIF4gKFhbM10gPj4+IDE2KSBeIChYWzFdIDw8IDE2KTtcblxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgLy8gU3dhcCBlbmRpYW5cblx0ICAgICAgICAgICAgICAgIFNbaV0gPSAoKChTW2ldIDw8IDgpICB8IChTW2ldID4+PiAyNCkpICYgMHgwMGZmMDBmZikgfFxuXHQgICAgICAgICAgICAgICAgICAgICAgICgoKFNbaV0gPDwgMjQpIHwgKFNbaV0gPj4+IDgpKSAgJiAweGZmMDBmZjAwKTtcblxuXHQgICAgICAgICAgICAgICAgLy8gRW5jcnlwdFxuXHQgICAgICAgICAgICAgICAgTVtvZmZzZXQgKyBpXSBePSBTW2ldO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGJsb2NrU2l6ZTogMTI4LzMyLFxuXG5cdCAgICAgICAgaXZTaXplOiA2NC8zMlxuXHQgICAgfSk7XG5cblx0ICAgIGZ1bmN0aW9uIG5leHRTdGF0ZSgpIHtcblx0ICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICB2YXIgWCA9IHRoaXMuX1g7XG5cdCAgICAgICAgdmFyIEMgPSB0aGlzLl9DO1xuXG5cdCAgICAgICAgLy8gU2F2ZSBvbGQgY291bnRlciB2YWx1ZXNcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykge1xuXHQgICAgICAgICAgICBDX1tpXSA9IENbaV07XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgLy8gQ2FsY3VsYXRlIG5ldyBjb3VudGVyIHZhbHVlc1xuXHQgICAgICAgIENbMF0gPSAoQ1swXSArIDB4NGQzNGQzNGQgKyB0aGlzLl9iKSB8IDA7XG5cdCAgICAgICAgQ1sxXSA9IChDWzFdICsgMHhkMzRkMzRkMyArICgoQ1swXSA+Pj4gMCkgPCAoQ19bMF0gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgQ1syXSA9IChDWzJdICsgMHgzNGQzNGQzNCArICgoQ1sxXSA+Pj4gMCkgPCAoQ19bMV0gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgQ1szXSA9IChDWzNdICsgMHg0ZDM0ZDM0ZCArICgoQ1syXSA+Pj4gMCkgPCAoQ19bMl0gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgQ1s0XSA9IChDWzRdICsgMHhkMzRkMzRkMyArICgoQ1szXSA+Pj4gMCkgPCAoQ19bM10gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgQ1s1XSA9IChDWzVdICsgMHgzNGQzNGQzNCArICgoQ1s0XSA+Pj4gMCkgPCAoQ19bNF0gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgQ1s2XSA9IChDWzZdICsgMHg0ZDM0ZDM0ZCArICgoQ1s1XSA+Pj4gMCkgPCAoQ19bNV0gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgQ1s3XSA9IChDWzddICsgMHhkMzRkMzRkMyArICgoQ1s2XSA+Pj4gMCkgPCAoQ19bNl0gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgdGhpcy5fYiA9IChDWzddID4+PiAwKSA8IChDX1s3XSA+Pj4gMCkgPyAxIDogMDtcblxuXHQgICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgZy12YWx1ZXNcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgZ3ggPSBYW2ldICsgQ1tpXTtcblxuXHQgICAgICAgICAgICAvLyBDb25zdHJ1Y3QgaGlnaCBhbmQgbG93IGFyZ3VtZW50IGZvciBzcXVhcmluZ1xuXHQgICAgICAgICAgICB2YXIgZ2EgPSBneCAmIDB4ZmZmZjtcblx0ICAgICAgICAgICAgdmFyIGdiID0gZ3ggPj4+IDE2O1xuXG5cdCAgICAgICAgICAgIC8vIENhbGN1bGF0ZSBoaWdoIGFuZCBsb3cgcmVzdWx0IG9mIHNxdWFyaW5nXG5cdCAgICAgICAgICAgIHZhciBnaCA9ICgoKChnYSAqIGdhKSA+Pj4gMTcpICsgZ2EgKiBnYikgPj4+IDE1KSArIGdiICogZ2I7XG5cdCAgICAgICAgICAgIHZhciBnbCA9ICgoKGd4ICYgMHhmZmZmMDAwMCkgKiBneCkgfCAwKSArICgoKGd4ICYgMHgwMDAwZmZmZikgKiBneCkgfCAwKTtcblxuXHQgICAgICAgICAgICAvLyBIaWdoIFhPUiBsb3dcblx0ICAgICAgICAgICAgR1tpXSA9IGdoIF4gZ2w7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgLy8gQ2FsY3VsYXRlIG5ldyBzdGF0ZSB2YWx1ZXNcblx0ICAgICAgICBYWzBdID0gKEdbMF0gKyAoKEdbN10gPDwgMTYpIHwgKEdbN10gPj4+IDE2KSkgKyAoKEdbNl0gPDwgMTYpIHwgKEdbNl0gPj4+IDE2KSkpIHwgMDtcblx0ICAgICAgICBYWzFdID0gKEdbMV0gKyAoKEdbMF0gPDwgOCkgIHwgKEdbMF0gPj4+IDI0KSkgKyBHWzddKSB8IDA7XG5cdCAgICAgICAgWFsyXSA9IChHWzJdICsgKChHWzFdIDw8IDE2KSB8IChHWzFdID4+PiAxNikpICsgKChHWzBdIDw8IDE2KSB8IChHWzBdID4+PiAxNikpKSB8IDA7XG5cdCAgICAgICAgWFszXSA9IChHWzNdICsgKChHWzJdIDw8IDgpICB8IChHWzJdID4+PiAyNCkpICsgR1sxXSkgfCAwO1xuXHQgICAgICAgIFhbNF0gPSAoR1s0XSArICgoR1szXSA8PCAxNikgfCAoR1szXSA+Pj4gMTYpKSArICgoR1syXSA8PCAxNikgfCAoR1syXSA+Pj4gMTYpKSkgfCAwO1xuXHQgICAgICAgIFhbNV0gPSAoR1s1XSArICgoR1s0XSA8PCA4KSAgfCAoR1s0XSA+Pj4gMjQpKSArIEdbM10pIHwgMDtcblx0ICAgICAgICBYWzZdID0gKEdbNl0gKyAoKEdbNV0gPDwgMTYpIHwgKEdbNV0gPj4+IDE2KSkgKyAoKEdbNF0gPDwgMTYpIHwgKEdbNF0gPj4+IDE2KSkpIHwgMDtcblx0ICAgICAgICBYWzddID0gKEdbN10gKyAoKEdbNl0gPDwgOCkgIHwgKEdbNl0gPj4+IDI0KSkgKyBHWzVdKSB8IDA7XG5cdCAgICB9XG5cblx0ICAgIC8qKlxuXHQgICAgICogU2hvcnRjdXQgZnVuY3Rpb25zIHRvIHRoZSBjaXBoZXIncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBjaXBoZXJ0ZXh0ID0gQ3J5cHRvSlMuUmFiYml0LmVuY3J5cHQobWVzc2FnZSwga2V5LCBjZmcpO1xuXHQgICAgICogICAgIHZhciBwbGFpbnRleHQgID0gQ3J5cHRvSlMuUmFiYml0LmRlY3J5cHQoY2lwaGVydGV4dCwga2V5LCBjZmcpO1xuXHQgICAgICovXG5cdCAgICBDLlJhYmJpdCA9IFN0cmVhbUNpcGhlci5fY3JlYXRlSGVscGVyKFJhYmJpdCk7XG5cdH0oKSk7XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMuUmFiYml0O1xuXG59KSk7IiwiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSwgdW5kZWYpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIiksIHJlcXVpcmUoXCIuL2VuYy1iYXNlNjRcIiksIHJlcXVpcmUoXCIuL21kNVwiKSwgcmVxdWlyZShcIi4vZXZwa2RmXCIpLCByZXF1aXJlKFwiLi9jaXBoZXItY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi9lbmMtYmFzZTY0XCIsIFwiLi9tZDVcIiwgXCIuL2V2cGtkZlwiLCBcIi4vY2lwaGVyLWNvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdChmdW5jdGlvbiAoKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBTdHJlYW1DaXBoZXIgPSBDX2xpYi5TdHJlYW1DaXBoZXI7XG5cdCAgICB2YXIgQ19hbGdvID0gQy5hbGdvO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFJDNCBzdHJlYW0gY2lwaGVyIGFsZ29yaXRobS5cblx0ICAgICAqL1xuXHQgICAgdmFyIFJDNCA9IENfYWxnby5SQzQgPSBTdHJlYW1DaXBoZXIuZXh0ZW5kKHtcblx0ICAgICAgICBfZG9SZXNldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGtleSA9IHRoaXMuX2tleTtcblx0ICAgICAgICAgICAgdmFyIGtleVdvcmRzID0ga2V5LndvcmRzO1xuXHQgICAgICAgICAgICB2YXIga2V5U2lnQnl0ZXMgPSBrZXkuc2lnQnl0ZXM7XG5cblx0ICAgICAgICAgICAgLy8gSW5pdCBzYm94XG5cdCAgICAgICAgICAgIHZhciBTID0gdGhpcy5fUyA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDI1NjsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICBTW2ldID0gaTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIEtleSBzZXR1cFxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaiA9IDA7IGkgPCAyNTY7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdmFyIGtleUJ5dGVJbmRleCA9IGkgJSBrZXlTaWdCeXRlcztcblx0ICAgICAgICAgICAgICAgIHZhciBrZXlCeXRlID0gKGtleVdvcmRzW2tleUJ5dGVJbmRleCA+Pj4gMl0gPj4+ICgyNCAtIChrZXlCeXRlSW5kZXggJSA0KSAqIDgpKSAmIDB4ZmY7XG5cblx0ICAgICAgICAgICAgICAgIGogPSAoaiArIFNbaV0gKyBrZXlCeXRlKSAlIDI1NjtcblxuXHQgICAgICAgICAgICAgICAgLy8gU3dhcFxuXHQgICAgICAgICAgICAgICAgdmFyIHQgPSBTW2ldO1xuXHQgICAgICAgICAgICAgICAgU1tpXSA9IFNbal07XG5cdCAgICAgICAgICAgICAgICBTW2pdID0gdDtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIENvdW50ZXJzXG5cdCAgICAgICAgICAgIHRoaXMuX2kgPSB0aGlzLl9qID0gMDtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX2RvUHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiAoTSwgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIE1bb2Zmc2V0XSBePSBnZW5lcmF0ZUtleXN0cmVhbVdvcmQuY2FsbCh0aGlzKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAga2V5U2l6ZTogMjU2LzMyLFxuXG5cdCAgICAgICAgaXZTaXplOiAwXG5cdCAgICB9KTtcblxuXHQgICAgZnVuY3Rpb24gZ2VuZXJhdGVLZXlzdHJlYW1Xb3JkKCkge1xuXHQgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgIHZhciBTID0gdGhpcy5fUztcblx0ICAgICAgICB2YXIgaSA9IHRoaXMuX2k7XG5cdCAgICAgICAgdmFyIGogPSB0aGlzLl9qO1xuXG5cdCAgICAgICAgLy8gR2VuZXJhdGUga2V5c3RyZWFtIHdvcmRcblx0ICAgICAgICB2YXIga2V5c3RyZWFtV29yZCA9IDA7XG5cdCAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCA0OyBuKyspIHtcblx0ICAgICAgICAgICAgaSA9IChpICsgMSkgJSAyNTY7XG5cdCAgICAgICAgICAgIGogPSAoaiArIFNbaV0pICUgMjU2O1xuXG5cdCAgICAgICAgICAgIC8vIFN3YXBcblx0ICAgICAgICAgICAgdmFyIHQgPSBTW2ldO1xuXHQgICAgICAgICAgICBTW2ldID0gU1tqXTtcblx0ICAgICAgICAgICAgU1tqXSA9IHQ7XG5cblx0ICAgICAgICAgICAga2V5c3RyZWFtV29yZCB8PSBTWyhTW2ldICsgU1tqXSkgJSAyNTZdIDw8ICgyNCAtIG4gKiA4KTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgICAvLyBVcGRhdGUgY291bnRlcnNcblx0ICAgICAgICB0aGlzLl9pID0gaTtcblx0ICAgICAgICB0aGlzLl9qID0gajtcblxuXHQgICAgICAgIHJldHVybiBrZXlzdHJlYW1Xb3JkO1xuXHQgICAgfVxuXG5cdCAgICAvKipcblx0ICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9ucyB0byB0aGUgY2lwaGVyJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgY2lwaGVydGV4dCA9IENyeXB0b0pTLlJDNC5lbmNyeXB0KG1lc3NhZ2UsIGtleSwgY2ZnKTtcblx0ICAgICAqICAgICB2YXIgcGxhaW50ZXh0ICA9IENyeXB0b0pTLlJDNC5kZWNyeXB0KGNpcGhlcnRleHQsIGtleSwgY2ZnKTtcblx0ICAgICAqL1xuXHQgICAgQy5SQzQgPSBTdHJlYW1DaXBoZXIuX2NyZWF0ZUhlbHBlcihSQzQpO1xuXG5cdCAgICAvKipcblx0ICAgICAqIE1vZGlmaWVkIFJDNCBzdHJlYW0gY2lwaGVyIGFsZ29yaXRobS5cblx0ICAgICAqL1xuXHQgICAgdmFyIFJDNERyb3AgPSBDX2FsZ28uUkM0RHJvcCA9IFJDNC5leHRlbmQoe1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBkcm9wIFRoZSBudW1iZXIgb2Yga2V5c3RyZWFtIHdvcmRzIHRvIGRyb3AuIERlZmF1bHQgMTkyXG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY2ZnOiBSQzQuY2ZnLmV4dGVuZCh7XG5cdCAgICAgICAgICAgIGRyb3A6IDE5MlxuXHQgICAgICAgIH0pLFxuXG5cdCAgICAgICAgX2RvUmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgUkM0Ll9kb1Jlc2V0LmNhbGwodGhpcyk7XG5cblx0ICAgICAgICAgICAgLy8gRHJvcFxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5jZmcuZHJvcDsgaSA+IDA7IGktLSkge1xuXHQgICAgICAgICAgICAgICAgZ2VuZXJhdGVLZXlzdHJlYW1Xb3JkLmNhbGwodGhpcyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbnMgdG8gdGhlIGNpcGhlcidzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQGV4YW1wbGVcblx0ICAgICAqXG5cdCAgICAgKiAgICAgdmFyIGNpcGhlcnRleHQgPSBDcnlwdG9KUy5SQzREcm9wLmVuY3J5cHQobWVzc2FnZSwga2V5LCBjZmcpO1xuXHQgICAgICogICAgIHZhciBwbGFpbnRleHQgID0gQ3J5cHRvSlMuUkM0RHJvcC5kZWNyeXB0KGNpcGhlcnRleHQsIGtleSwgY2ZnKTtcblx0ICAgICAqL1xuXHQgICAgQy5SQzREcm9wID0gU3RyZWFtQ2lwaGVyLl9jcmVhdGVIZWxwZXIoUkM0RHJvcCk7XG5cdH0oKSk7XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMuUkM0O1xuXG59KSk7IiwiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQvKiogQHByZXNlcnZlXG5cdChjKSAyMDEyIGJ5IEPDqWRyaWMgTWVzbmlsLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5cdFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuXHQgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cdCAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuXHRUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG5cdCovXG5cblx0KGZ1bmN0aW9uIChNYXRoKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBXb3JkQXJyYXkgPSBDX2xpYi5Xb3JkQXJyYXk7XG5cdCAgICB2YXIgSGFzaGVyID0gQ19saWIuSGFzaGVyO1xuXHQgICAgdmFyIENfYWxnbyA9IEMuYWxnbztcblxuXHQgICAgLy8gQ29uc3RhbnRzIHRhYmxlXG5cdCAgICB2YXIgX3psID0gV29yZEFycmF5LmNyZWF0ZShbXG5cdCAgICAgICAgMCwgIDEsICAyLCAgMywgIDQsICA1LCAgNiwgIDcsICA4LCAgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSxcblx0ICAgICAgICA3LCAgNCwgMTMsICAxLCAxMCwgIDYsIDE1LCAgMywgMTIsICAwLCAgOSwgIDUsICAyLCAxNCwgMTEsICA4LFxuXHQgICAgICAgIDMsIDEwLCAxNCwgIDQsICA5LCAxNSwgIDgsICAxLCAgMiwgIDcsICAwLCAgNiwgMTMsIDExLCAgNSwgMTIsXG5cdCAgICAgICAgMSwgIDksIDExLCAxMCwgIDAsICA4LCAxMiwgIDQsIDEzLCAgMywgIDcsIDE1LCAxNCwgIDUsICA2LCAgMixcblx0ICAgICAgICA0LCAgMCwgIDUsICA5LCAgNywgMTIsICAyLCAxMCwgMTQsICAxLCAgMywgIDgsIDExLCAgNiwgMTUsIDEzXSk7XG5cdCAgICB2YXIgX3pyID0gV29yZEFycmF5LmNyZWF0ZShbXG5cdCAgICAgICAgNSwgMTQsICA3LCAgMCwgIDksICAyLCAxMSwgIDQsIDEzLCAgNiwgMTUsICA4LCAgMSwgMTAsICAzLCAxMixcblx0ICAgICAgICA2LCAxMSwgIDMsICA3LCAgMCwgMTMsICA1LCAxMCwgMTQsIDE1LCAgOCwgMTIsICA0LCAgOSwgIDEsICAyLFxuXHQgICAgICAgIDE1LCAgNSwgIDEsICAzLCAgNywgMTQsICA2LCAgOSwgMTEsICA4LCAxMiwgIDIsIDEwLCAgMCwgIDQsIDEzLFxuXHQgICAgICAgIDgsICA2LCAgNCwgIDEsICAzLCAxMSwgMTUsICAwLCAgNSwgMTIsICAyLCAxMywgIDksICA3LCAxMCwgMTQsXG5cdCAgICAgICAgMTIsIDE1LCAxMCwgIDQsICAxLCAgNSwgIDgsICA3LCAgNiwgIDIsIDEzLCAxNCwgIDAsICAzLCAgOSwgMTFdKTtcblx0ICAgIHZhciBfc2wgPSBXb3JkQXJyYXkuY3JlYXRlKFtcblx0ICAgICAgICAgMTEsIDE0LCAxNSwgMTIsICA1LCAgOCwgIDcsICA5LCAxMSwgMTMsIDE0LCAxNSwgIDYsICA3LCAgOSwgIDgsXG5cdCAgICAgICAgNywgNiwgICA4LCAxMywgMTEsICA5LCAgNywgMTUsICA3LCAxMiwgMTUsICA5LCAxMSwgIDcsIDEzLCAxMixcblx0ICAgICAgICAxMSwgMTMsICA2LCAgNywgMTQsICA5LCAxMywgMTUsIDE0LCAgOCwgMTMsICA2LCAgNSwgMTIsICA3LCAgNSxcblx0ICAgICAgICAgIDExLCAxMiwgMTQsIDE1LCAxNCwgMTUsICA5LCAgOCwgIDksIDE0LCAgNSwgIDYsICA4LCAgNiwgIDUsIDEyLFxuXHQgICAgICAgIDksIDE1LCAgNSwgMTEsICA2LCAgOCwgMTMsIDEyLCAgNSwgMTIsIDEzLCAxNCwgMTEsICA4LCAgNSwgIDYgXSk7XG5cdCAgICB2YXIgX3NyID0gV29yZEFycmF5LmNyZWF0ZShbXG5cdCAgICAgICAgOCwgIDksICA5LCAxMSwgMTMsIDE1LCAxNSwgIDUsICA3LCAgNywgIDgsIDExLCAxNCwgMTQsIDEyLCAgNixcblx0ICAgICAgICA5LCAxMywgMTUsICA3LCAxMiwgIDgsICA5LCAxMSwgIDcsICA3LCAxMiwgIDcsICA2LCAxNSwgMTMsIDExLFxuXHQgICAgICAgIDksICA3LCAxNSwgMTEsICA4LCAgNiwgIDYsIDE0LCAxMiwgMTMsICA1LCAxNCwgMTMsIDEzLCAgNywgIDUsXG5cdCAgICAgICAgMTUsICA1LCAgOCwgMTEsIDE0LCAxNCwgIDYsIDE0LCAgNiwgIDksIDEyLCAgOSwgMTIsICA1LCAxNSwgIDgsXG5cdCAgICAgICAgOCwgIDUsIDEyLCAgOSwgMTIsICA1LCAxNCwgIDYsICA4LCAxMywgIDYsICA1LCAxNSwgMTMsIDExLCAxMSBdKTtcblxuXHQgICAgdmFyIF9obCA9ICBXb3JkQXJyYXkuY3JlYXRlKFsgMHgwMDAwMDAwMCwgMHg1QTgyNzk5OSwgMHg2RUQ5RUJBMSwgMHg4RjFCQkNEQywgMHhBOTUzRkQ0RV0pO1xuXHQgICAgdmFyIF9ociA9ICBXb3JkQXJyYXkuY3JlYXRlKFsgMHg1MEEyOEJFNiwgMHg1QzRERDEyNCwgMHg2RDcwM0VGMywgMHg3QTZENzZFOSwgMHgwMDAwMDAwMF0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFJJUEVNRDE2MCBoYXNoIGFsZ29yaXRobS5cblx0ICAgICAqL1xuXHQgICAgdmFyIFJJUEVNRDE2MCA9IENfYWxnby5SSVBFTUQxNjAgPSBIYXNoZXIuZXh0ZW5kKHtcblx0ICAgICAgICBfZG9SZXNldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB0aGlzLl9oYXNoICA9IFdvcmRBcnJheS5jcmVhdGUoWzB4Njc0NTIzMDEsIDB4RUZDREFCODksIDB4OThCQURDRkUsIDB4MTAzMjU0NzYsIDB4QzNEMkUxRjBdKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX2RvUHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiAoTSwgb2Zmc2V0KSB7XG5cblx0ICAgICAgICAgICAgLy8gU3dhcCBlbmRpYW5cblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxNjsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgICAgIHZhciBvZmZzZXRfaSA9IG9mZnNldCArIGk7XG5cdCAgICAgICAgICAgICAgICB2YXIgTV9vZmZzZXRfaSA9IE1bb2Zmc2V0X2ldO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBTd2FwXG5cdCAgICAgICAgICAgICAgICBNW29mZnNldF9pXSA9IChcblx0ICAgICAgICAgICAgICAgICAgICAoKChNX29mZnNldF9pIDw8IDgpICB8IChNX29mZnNldF9pID4+PiAyNCkpICYgMHgwMGZmMDBmZikgfFxuXHQgICAgICAgICAgICAgICAgICAgICgoKE1fb2Zmc2V0X2kgPDwgMjQpIHwgKE1fb2Zmc2V0X2kgPj4+IDgpKSAgJiAweGZmMDBmZjAwKVxuXHQgICAgICAgICAgICAgICAgKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgSCAgPSB0aGlzLl9oYXNoLndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgaGwgPSBfaGwud29yZHM7XG5cdCAgICAgICAgICAgIHZhciBociA9IF9oci53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIHpsID0gX3psLndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgenIgPSBfenIud29yZHM7XG5cdCAgICAgICAgICAgIHZhciBzbCA9IF9zbC53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIHNyID0gX3NyLndvcmRzO1xuXG5cdCAgICAgICAgICAgIC8vIFdvcmtpbmcgdmFyaWFibGVzXG5cdCAgICAgICAgICAgIHZhciBhbCwgYmwsIGNsLCBkbCwgZWw7XG5cdCAgICAgICAgICAgIHZhciBhciwgYnIsIGNyLCBkciwgZXI7XG5cblx0ICAgICAgICAgICAgYXIgPSBhbCA9IEhbMF07XG5cdCAgICAgICAgICAgIGJyID0gYmwgPSBIWzFdO1xuXHQgICAgICAgICAgICBjciA9IGNsID0gSFsyXTtcblx0ICAgICAgICAgICAgZHIgPSBkbCA9IEhbM107XG5cdCAgICAgICAgICAgIGVyID0gZWwgPSBIWzRdO1xuXHQgICAgICAgICAgICAvLyBDb21wdXRhdGlvblxuXHQgICAgICAgICAgICB2YXIgdDtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA4MDsgaSArPSAxKSB7XG5cdCAgICAgICAgICAgICAgICB0ID0gKGFsICsgIE1bb2Zmc2V0K3psW2ldXSl8MDtcblx0ICAgICAgICAgICAgICAgIGlmIChpPDE2KXtcblx0XHQgICAgICAgICAgICB0ICs9ICBmMShibCxjbCxkbCkgKyBobFswXTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaTwzMikge1xuXHRcdCAgICAgICAgICAgIHQgKz0gIGYyKGJsLGNsLGRsKSArIGhsWzFdO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpPDQ4KSB7XG5cdFx0ICAgICAgICAgICAgdCArPSAgZjMoYmwsY2wsZGwpICsgaGxbMl07XG5cdCAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGk8NjQpIHtcblx0XHQgICAgICAgICAgICB0ICs9ICBmNChibCxjbCxkbCkgKyBobFszXTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ly8gaWYgKGk8ODApIHtcblx0XHQgICAgICAgICAgICB0ICs9ICBmNShibCxjbCxkbCkgKyBobFs0XTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHQgPSB0fDA7XG5cdCAgICAgICAgICAgICAgICB0ID0gIHJvdGwodCxzbFtpXSk7XG5cdCAgICAgICAgICAgICAgICB0ID0gKHQrZWwpfDA7XG5cdCAgICAgICAgICAgICAgICBhbCA9IGVsO1xuXHQgICAgICAgICAgICAgICAgZWwgPSBkbDtcblx0ICAgICAgICAgICAgICAgIGRsID0gcm90bChjbCwgMTApO1xuXHQgICAgICAgICAgICAgICAgY2wgPSBibDtcblx0ICAgICAgICAgICAgICAgIGJsID0gdDtcblxuXHQgICAgICAgICAgICAgICAgdCA9IChhciArIE1bb2Zmc2V0K3pyW2ldXSl8MDtcblx0ICAgICAgICAgICAgICAgIGlmIChpPDE2KXtcblx0XHQgICAgICAgICAgICB0ICs9ICBmNShicixjcixkcikgKyBoclswXTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaTwzMikge1xuXHRcdCAgICAgICAgICAgIHQgKz0gIGY0KGJyLGNyLGRyKSArIGhyWzFdO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpPDQ4KSB7XG5cdFx0ICAgICAgICAgICAgdCArPSAgZjMoYnIsY3IsZHIpICsgaHJbMl07XG5cdCAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGk8NjQpIHtcblx0XHQgICAgICAgICAgICB0ICs9ICBmMihicixjcixkcikgKyBoclszXTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ly8gaWYgKGk8ODApIHtcblx0XHQgICAgICAgICAgICB0ICs9ICBmMShicixjcixkcikgKyBocls0XTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHQgPSB0fDA7XG5cdCAgICAgICAgICAgICAgICB0ID0gIHJvdGwodCxzcltpXSkgO1xuXHQgICAgICAgICAgICAgICAgdCA9ICh0K2VyKXwwO1xuXHQgICAgICAgICAgICAgICAgYXIgPSBlcjtcblx0ICAgICAgICAgICAgICAgIGVyID0gZHI7XG5cdCAgICAgICAgICAgICAgICBkciA9IHJvdGwoY3IsIDEwKTtcblx0ICAgICAgICAgICAgICAgIGNyID0gYnI7XG5cdCAgICAgICAgICAgICAgICBiciA9IHQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgLy8gSW50ZXJtZWRpYXRlIGhhc2ggdmFsdWVcblx0ICAgICAgICAgICAgdCAgICA9IChIWzFdICsgY2wgKyBkcil8MDtcblx0ICAgICAgICAgICAgSFsxXSA9IChIWzJdICsgZGwgKyBlcil8MDtcblx0ICAgICAgICAgICAgSFsyXSA9IChIWzNdICsgZWwgKyBhcil8MDtcblx0ICAgICAgICAgICAgSFszXSA9IChIWzRdICsgYWwgKyBicil8MDtcblx0ICAgICAgICAgICAgSFs0XSA9IChIWzBdICsgYmwgKyBjcil8MDtcblx0ICAgICAgICAgICAgSFswXSA9ICB0O1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBfZG9GaW5hbGl6ZTogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLl9kYXRhO1xuXHQgICAgICAgICAgICB2YXIgZGF0YVdvcmRzID0gZGF0YS53b3JkcztcblxuXHQgICAgICAgICAgICB2YXIgbkJpdHNUb3RhbCA9IHRoaXMuX25EYXRhQnl0ZXMgKiA4O1xuXHQgICAgICAgICAgICB2YXIgbkJpdHNMZWZ0ID0gZGF0YS5zaWdCeXRlcyAqIDg7XG5cblx0ICAgICAgICAgICAgLy8gQWRkIHBhZGRpbmdcblx0ICAgICAgICAgICAgZGF0YVdvcmRzW25CaXRzTGVmdCA+Pj4gNV0gfD0gMHg4MCA8PCAoMjQgLSBuQml0c0xlZnQgJSAzMik7XG5cdCAgICAgICAgICAgIGRhdGFXb3Jkc1soKChuQml0c0xlZnQgKyA2NCkgPj4+IDkpIDw8IDQpICsgMTRdID0gKFxuXHQgICAgICAgICAgICAgICAgKCgobkJpdHNUb3RhbCA8PCA4KSAgfCAobkJpdHNUb3RhbCA+Pj4gMjQpKSAmIDB4MDBmZjAwZmYpIHxcblx0ICAgICAgICAgICAgICAgICgoKG5CaXRzVG90YWwgPDwgMjQpIHwgKG5CaXRzVG90YWwgPj4+IDgpKSAgJiAweGZmMDBmZjAwKVxuXHQgICAgICAgICAgICApO1xuXHQgICAgICAgICAgICBkYXRhLnNpZ0J5dGVzID0gKGRhdGFXb3Jkcy5sZW5ndGggKyAxKSAqIDQ7XG5cblx0ICAgICAgICAgICAgLy8gSGFzaCBmaW5hbCBibG9ja3Ncblx0ICAgICAgICAgICAgdGhpcy5fcHJvY2VzcygpO1xuXG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgaGFzaCA9IHRoaXMuX2hhc2g7XG5cdCAgICAgICAgICAgIHZhciBIID0gaGFzaC53b3JkcztcblxuXHQgICAgICAgICAgICAvLyBTd2FwIGVuZGlhblxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDU7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgICAgIHZhciBIX2kgPSBIW2ldO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBTd2FwXG5cdCAgICAgICAgICAgICAgICBIW2ldID0gKCgoSF9pIDw8IDgpICB8IChIX2kgPj4+IDI0KSkgJiAweDAwZmYwMGZmKSB8XG5cdCAgICAgICAgICAgICAgICAgICAgICAgKCgoSF9pIDw8IDI0KSB8IChIX2kgPj4+IDgpKSAgJiAweGZmMDBmZjAwKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIFJldHVybiBmaW5hbCBjb21wdXRlZCBoYXNoXG5cdCAgICAgICAgICAgIHJldHVybiBoYXNoO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgY2xvbmUgPSBIYXNoZXIuY2xvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAgICAgY2xvbmUuX2hhc2ggPSB0aGlzLl9oYXNoLmNsb25lKCk7XG5cblx0ICAgICAgICAgICAgcmV0dXJuIGNsb25lO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cblx0ICAgIGZ1bmN0aW9uIGYxKHgsIHksIHopIHtcblx0ICAgICAgICByZXR1cm4gKCh4KSBeICh5KSBeICh6KSk7XG5cblx0ICAgIH1cblxuXHQgICAgZnVuY3Rpb24gZjIoeCwgeSwgeikge1xuXHQgICAgICAgIHJldHVybiAoKCh4KSYoeSkpIHwgKCh+eCkmKHopKSk7XG5cdCAgICB9XG5cblx0ICAgIGZ1bmN0aW9uIGYzKHgsIHksIHopIHtcblx0ICAgICAgICByZXR1cm4gKCgoeCkgfCAofih5KSkpIF4gKHopKTtcblx0ICAgIH1cblxuXHQgICAgZnVuY3Rpb24gZjQoeCwgeSwgeikge1xuXHQgICAgICAgIHJldHVybiAoKCh4KSAmICh6KSkgfCAoKHkpJih+KHopKSkpO1xuXHQgICAgfVxuXG5cdCAgICBmdW5jdGlvbiBmNSh4LCB5LCB6KSB7XG5cdCAgICAgICAgcmV0dXJuICgoeCkgXiAoKHkpIHwofih6KSkpKTtcblxuXHQgICAgfVxuXG5cdCAgICBmdW5jdGlvbiByb3RsKHgsbikge1xuXHQgICAgICAgIHJldHVybiAoeDw8bikgfCAoeD4+PigzMi1uKSk7XG5cdCAgICB9XG5cblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgaGFzaGVyJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gaGFzaC5cblx0ICAgICAqXG5cdCAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBoYXNoLlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgaGFzaCA9IENyeXB0b0pTLlJJUEVNRDE2MCgnbWVzc2FnZScpO1xuXHQgICAgICogICAgIHZhciBoYXNoID0gQ3J5cHRvSlMuUklQRU1EMTYwKHdvcmRBcnJheSk7XG5cdCAgICAgKi9cblx0ICAgIEMuUklQRU1EMTYwID0gSGFzaGVyLl9jcmVhdGVIZWxwZXIoUklQRU1EMTYwKTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgSE1BQydzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGhhc2guXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IGtleSBUaGUgc2VjcmV0IGtleS5cblx0ICAgICAqXG5cdCAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBITUFDLlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgaG1hYyA9IENyeXB0b0pTLkhtYWNSSVBFTUQxNjAobWVzc2FnZSwga2V5KTtcblx0ICAgICAqL1xuXHQgICAgQy5IbWFjUklQRU1EMTYwID0gSGFzaGVyLl9jcmVhdGVIbWFjSGVscGVyKFJJUEVNRDE2MCk7XG5cdH0oTWF0aCkpO1xuXG5cblx0cmV0dXJuIENyeXB0b0pTLlJJUEVNRDE2MDtcblxufSkpOyIsIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0KGZ1bmN0aW9uICgpIHtcblx0ICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgdmFyIEMgPSBDcnlwdG9KUztcblx0ICAgIHZhciBDX2xpYiA9IEMubGliO1xuXHQgICAgdmFyIFdvcmRBcnJheSA9IENfbGliLldvcmRBcnJheTtcblx0ICAgIHZhciBIYXNoZXIgPSBDX2xpYi5IYXNoZXI7XG5cdCAgICB2YXIgQ19hbGdvID0gQy5hbGdvO1xuXG5cdCAgICAvLyBSZXVzYWJsZSBvYmplY3Rcblx0ICAgIHZhciBXID0gW107XG5cblx0ICAgIC8qKlxuXHQgICAgICogU0hBLTEgaGFzaCBhbGdvcml0aG0uXG5cdCAgICAgKi9cblx0ICAgIHZhciBTSEExID0gQ19hbGdvLlNIQTEgPSBIYXNoZXIuZXh0ZW5kKHtcblx0ICAgICAgICBfZG9SZXNldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB0aGlzLl9oYXNoID0gbmV3IFdvcmRBcnJheS5pbml0KFtcblx0ICAgICAgICAgICAgICAgIDB4Njc0NTIzMDEsIDB4ZWZjZGFiODksXG5cdCAgICAgICAgICAgICAgICAweDk4YmFkY2ZlLCAweDEwMzI1NDc2LFxuXHQgICAgICAgICAgICAgICAgMHhjM2QyZTFmMFxuXHQgICAgICAgICAgICBdKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX2RvUHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiAoTSwgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgIHZhciBIID0gdGhpcy5faGFzaC53b3JkcztcblxuXHQgICAgICAgICAgICAvLyBXb3JraW5nIHZhcmlhYmxlc1xuXHQgICAgICAgICAgICB2YXIgYSA9IEhbMF07XG5cdCAgICAgICAgICAgIHZhciBiID0gSFsxXTtcblx0ICAgICAgICAgICAgdmFyIGMgPSBIWzJdO1xuXHQgICAgICAgICAgICB2YXIgZCA9IEhbM107XG5cdCAgICAgICAgICAgIHZhciBlID0gSFs0XTtcblxuXHQgICAgICAgICAgICAvLyBDb21wdXRhdGlvblxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDgwOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIGlmIChpIDwgMTYpIHtcblx0ICAgICAgICAgICAgICAgICAgICBXW2ldID0gTVtvZmZzZXQgKyBpXSB8IDA7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBuID0gV1tpIC0gM10gXiBXW2kgLSA4XSBeIFdbaSAtIDE0XSBeIFdbaSAtIDE2XTtcblx0ICAgICAgICAgICAgICAgICAgICBXW2ldID0gKG4gPDwgMSkgfCAobiA+Pj4gMzEpO1xuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICB2YXIgdCA9ICgoYSA8PCA1KSB8IChhID4+PiAyNykpICsgZSArIFdbaV07XG5cdCAgICAgICAgICAgICAgICBpZiAoaSA8IDIwKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdCArPSAoKGIgJiBjKSB8ICh+YiAmIGQpKSArIDB4NWE4Mjc5OTk7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGkgPCA0MCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHQgKz0gKGIgXiBjIF4gZCkgKyAweDZlZDllYmExO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpIDwgNjApIHtcblx0ICAgICAgICAgICAgICAgICAgICB0ICs9ICgoYiAmIGMpIHwgKGIgJiBkKSB8IChjICYgZCkpIC0gMHg3MGU0NDMyNDtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSAvKiBpZiAoaSA8IDgwKSAqLyB7XG5cdCAgICAgICAgICAgICAgICAgICAgdCArPSAoYiBeIGMgXiBkKSAtIDB4MzU5ZDNlMmE7XG5cdCAgICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICAgIGUgPSBkO1xuXHQgICAgICAgICAgICAgICAgZCA9IGM7XG5cdCAgICAgICAgICAgICAgICBjID0gKGIgPDwgMzApIHwgKGIgPj4+IDIpO1xuXHQgICAgICAgICAgICAgICAgYiA9IGE7XG5cdCAgICAgICAgICAgICAgICBhID0gdDtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIEludGVybWVkaWF0ZSBoYXNoIHZhbHVlXG5cdCAgICAgICAgICAgIEhbMF0gPSAoSFswXSArIGEpIHwgMDtcblx0ICAgICAgICAgICAgSFsxXSA9IChIWzFdICsgYikgfCAwO1xuXHQgICAgICAgICAgICBIWzJdID0gKEhbMl0gKyBjKSB8IDA7XG5cdCAgICAgICAgICAgIEhbM10gPSAoSFszXSArIGQpIHwgMDtcblx0ICAgICAgICAgICAgSFs0XSA9IChIWzRdICsgZSkgfCAwO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBfZG9GaW5hbGl6ZTogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLl9kYXRhO1xuXHQgICAgICAgICAgICB2YXIgZGF0YVdvcmRzID0gZGF0YS53b3JkcztcblxuXHQgICAgICAgICAgICB2YXIgbkJpdHNUb3RhbCA9IHRoaXMuX25EYXRhQnl0ZXMgKiA4O1xuXHQgICAgICAgICAgICB2YXIgbkJpdHNMZWZ0ID0gZGF0YS5zaWdCeXRlcyAqIDg7XG5cblx0ICAgICAgICAgICAgLy8gQWRkIHBhZGRpbmdcblx0ICAgICAgICAgICAgZGF0YVdvcmRzW25CaXRzTGVmdCA+Pj4gNV0gfD0gMHg4MCA8PCAoMjQgLSBuQml0c0xlZnQgJSAzMik7XG5cdCAgICAgICAgICAgIGRhdGFXb3Jkc1soKChuQml0c0xlZnQgKyA2NCkgPj4+IDkpIDw8IDQpICsgMTRdID0gTWF0aC5mbG9vcihuQml0c1RvdGFsIC8gMHgxMDAwMDAwMDApO1xuXHQgICAgICAgICAgICBkYXRhV29yZHNbKCgobkJpdHNMZWZ0ICsgNjQpID4+PiA5KSA8PCA0KSArIDE1XSA9IG5CaXRzVG90YWw7XG5cdCAgICAgICAgICAgIGRhdGEuc2lnQnl0ZXMgPSBkYXRhV29yZHMubGVuZ3RoICogNDtcblxuXHQgICAgICAgICAgICAvLyBIYXNoIGZpbmFsIGJsb2Nrc1xuXHQgICAgICAgICAgICB0aGlzLl9wcm9jZXNzKCk7XG5cblx0ICAgICAgICAgICAgLy8gUmV0dXJuIGZpbmFsIGNvbXB1dGVkIGhhc2hcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2hhc2g7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBjbG9uZSA9IEhhc2hlci5jbG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgICAgICBjbG9uZS5faGFzaCA9IHRoaXMuX2hhc2guY2xvbmUoKTtcblxuXHQgICAgICAgICAgICByZXR1cm4gY2xvbmU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogU2hvcnRjdXQgZnVuY3Rpb24gdG8gdGhlIGhhc2hlcidzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGhhc2guXG5cdCAgICAgKlxuXHQgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgaGFzaC5cblx0ICAgICAqXG5cdCAgICAgKiBAc3RhdGljXG5cdCAgICAgKlxuXHQgICAgICogQGV4YW1wbGVcblx0ICAgICAqXG5cdCAgICAgKiAgICAgdmFyIGhhc2ggPSBDcnlwdG9KUy5TSEExKCdtZXNzYWdlJyk7XG5cdCAgICAgKiAgICAgdmFyIGhhc2ggPSBDcnlwdG9KUy5TSEExKHdvcmRBcnJheSk7XG5cdCAgICAgKi9cblx0ICAgIEMuU0hBMSA9IEhhc2hlci5fY3JlYXRlSGVscGVyKFNIQTEpO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9uIHRvIHRoZSBITUFDJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gaGFzaC5cblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30ga2V5IFRoZSBzZWNyZXQga2V5LlxuXHQgICAgICpcblx0ICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIEhNQUMuXG5cdCAgICAgKlxuXHQgICAgICogQHN0YXRpY1xuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBobWFjID0gQ3J5cHRvSlMuSG1hY1NIQTEobWVzc2FnZSwga2V5KTtcblx0ICAgICAqL1xuXHQgICAgQy5IbWFjU0hBMSA9IEhhc2hlci5fY3JlYXRlSG1hY0hlbHBlcihTSEExKTtcblx0fSgpKTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5TSEExO1xuXG59KSk7IiwiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSwgdW5kZWYpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIiksIHJlcXVpcmUoXCIuL3NoYTI1NlwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi9zaGEyNTZcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdChmdW5jdGlvbiAoKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBXb3JkQXJyYXkgPSBDX2xpYi5Xb3JkQXJyYXk7XG5cdCAgICB2YXIgQ19hbGdvID0gQy5hbGdvO1xuXHQgICAgdmFyIFNIQTI1NiA9IENfYWxnby5TSEEyNTY7XG5cblx0ICAgIC8qKlxuXHQgICAgICogU0hBLTIyNCBoYXNoIGFsZ29yaXRobS5cblx0ICAgICAqL1xuXHQgICAgdmFyIFNIQTIyNCA9IENfYWxnby5TSEEyMjQgPSBTSEEyNTYuZXh0ZW5kKHtcblx0ICAgICAgICBfZG9SZXNldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB0aGlzLl9oYXNoID0gbmV3IFdvcmRBcnJheS5pbml0KFtcblx0ICAgICAgICAgICAgICAgIDB4YzEwNTllZDgsIDB4MzY3Y2Q1MDcsIDB4MzA3MGRkMTcsIDB4ZjcwZTU5MzksXG5cdCAgICAgICAgICAgICAgICAweGZmYzAwYjMxLCAweDY4NTgxNTExLCAweDY0Zjk4ZmE3LCAweGJlZmE0ZmE0XG5cdCAgICAgICAgICAgIF0pO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBfZG9GaW5hbGl6ZTogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgaGFzaCA9IFNIQTI1Ni5fZG9GaW5hbGl6ZS5jYWxsKHRoaXMpO1xuXG5cdCAgICAgICAgICAgIGhhc2guc2lnQnl0ZXMgLT0gNDtcblxuXHQgICAgICAgICAgICByZXR1cm4gaGFzaDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgaGFzaGVyJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gaGFzaC5cblx0ICAgICAqXG5cdCAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBoYXNoLlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgaGFzaCA9IENyeXB0b0pTLlNIQTIyNCgnbWVzc2FnZScpO1xuXHQgICAgICogICAgIHZhciBoYXNoID0gQ3J5cHRvSlMuU0hBMjI0KHdvcmRBcnJheSk7XG5cdCAgICAgKi9cblx0ICAgIEMuU0hBMjI0ID0gU0hBMjU2Ll9jcmVhdGVIZWxwZXIoU0hBMjI0KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgSE1BQydzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGhhc2guXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IGtleSBUaGUgc2VjcmV0IGtleS5cblx0ICAgICAqXG5cdCAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBITUFDLlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgaG1hYyA9IENyeXB0b0pTLkhtYWNTSEEyMjQobWVzc2FnZSwga2V5KTtcblx0ICAgICAqL1xuXHQgICAgQy5IbWFjU0hBMjI0ID0gU0hBMjU2Ll9jcmVhdGVIbWFjSGVscGVyKFNIQTIyNCk7XG5cdH0oKSk7XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMuU0hBMjI0O1xuXG59KSk7IiwiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQoZnVuY3Rpb24gKE1hdGgpIHtcblx0ICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgdmFyIEMgPSBDcnlwdG9KUztcblx0ICAgIHZhciBDX2xpYiA9IEMubGliO1xuXHQgICAgdmFyIFdvcmRBcnJheSA9IENfbGliLldvcmRBcnJheTtcblx0ICAgIHZhciBIYXNoZXIgPSBDX2xpYi5IYXNoZXI7XG5cdCAgICB2YXIgQ19hbGdvID0gQy5hbGdvO1xuXG5cdCAgICAvLyBJbml0aWFsaXphdGlvbiBhbmQgcm91bmQgY29uc3RhbnRzIHRhYmxlc1xuXHQgICAgdmFyIEggPSBbXTtcblx0ICAgIHZhciBLID0gW107XG5cblx0ICAgIC8vIENvbXB1dGUgY29uc3RhbnRzXG5cdCAgICAoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGZ1bmN0aW9uIGlzUHJpbWUobikge1xuXHQgICAgICAgICAgICB2YXIgc3FydE4gPSBNYXRoLnNxcnQobik7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGZhY3RvciA9IDI7IGZhY3RvciA8PSBzcXJ0TjsgZmFjdG9yKyspIHtcblx0ICAgICAgICAgICAgICAgIGlmICghKG4gJSBmYWN0b3IpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIHRydWU7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgZnVuY3Rpb24gZ2V0RnJhY3Rpb25hbEJpdHMobikge1xuXHQgICAgICAgICAgICByZXR1cm4gKChuIC0gKG4gfCAwKSkgKiAweDEwMDAwMDAwMCkgfCAwO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHZhciBuID0gMjtcblx0ICAgICAgICB2YXIgblByaW1lID0gMDtcblx0ICAgICAgICB3aGlsZSAoblByaW1lIDwgNjQpIHtcblx0ICAgICAgICAgICAgaWYgKGlzUHJpbWUobikpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChuUHJpbWUgPCA4KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgSFtuUHJpbWVdID0gZ2V0RnJhY3Rpb25hbEJpdHMoTWF0aC5wb3cobiwgMSAvIDIpKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIEtbblByaW1lXSA9IGdldEZyYWN0aW9uYWxCaXRzKE1hdGgucG93KG4sIDEgLyAzKSk7XG5cblx0ICAgICAgICAgICAgICAgIG5QcmltZSsrO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgbisrO1xuXHQgICAgICAgIH1cblx0ICAgIH0oKSk7XG5cblx0ICAgIC8vIFJldXNhYmxlIG9iamVjdFxuXHQgICAgdmFyIFcgPSBbXTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTSEEtMjU2IGhhc2ggYWxnb3JpdGhtLlxuXHQgICAgICovXG5cdCAgICB2YXIgU0hBMjU2ID0gQ19hbGdvLlNIQTI1NiA9IEhhc2hlci5leHRlbmQoe1xuXHQgICAgICAgIF9kb1Jlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2hhc2ggPSBuZXcgV29yZEFycmF5LmluaXQoSC5zbGljZSgwKSk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb1Byb2Nlc3NCbG9jazogZnVuY3Rpb24gKE0sIG9mZnNldCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgSCA9IHRoaXMuX2hhc2gud29yZHM7XG5cblx0ICAgICAgICAgICAgLy8gV29ya2luZyB2YXJpYWJsZXNcblx0ICAgICAgICAgICAgdmFyIGEgPSBIWzBdO1xuXHQgICAgICAgICAgICB2YXIgYiA9IEhbMV07XG5cdCAgICAgICAgICAgIHZhciBjID0gSFsyXTtcblx0ICAgICAgICAgICAgdmFyIGQgPSBIWzNdO1xuXHQgICAgICAgICAgICB2YXIgZSA9IEhbNF07XG5cdCAgICAgICAgICAgIHZhciBmID0gSFs1XTtcblx0ICAgICAgICAgICAgdmFyIGcgPSBIWzZdO1xuXHQgICAgICAgICAgICB2YXIgaCA9IEhbN107XG5cblx0ICAgICAgICAgICAgLy8gQ29tcHV0YXRpb25cblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA2NDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoaSA8IDE2KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgV1tpXSA9IE1bb2Zmc2V0ICsgaV0gfCAwO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgZ2FtbWEweCA9IFdbaSAtIDE1XTtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgZ2FtbWEwICA9ICgoZ2FtbWEweCA8PCAyNSkgfCAoZ2FtbWEweCA+Pj4gNykpICBeXG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGdhbW1hMHggPDwgMTQpIHwgKGdhbW1hMHggPj4+IDE4KSkgXlxuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnYW1tYTB4ID4+PiAzKTtcblxuXHQgICAgICAgICAgICAgICAgICAgIHZhciBnYW1tYTF4ID0gV1tpIC0gMl07XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGdhbW1hMSAgPSAoKGdhbW1hMXggPDwgMTUpIHwgKGdhbW1hMXggPj4+IDE3KSkgXlxuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChnYW1tYTF4IDw8IDEzKSB8IChnYW1tYTF4ID4+PiAxOSkpIF5cblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ2FtbWExeCA+Pj4gMTApO1xuXG5cdCAgICAgICAgICAgICAgICAgICAgV1tpXSA9IGdhbW1hMCArIFdbaSAtIDddICsgZ2FtbWExICsgV1tpIC0gMTZdO1xuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICB2YXIgY2ggID0gKGUgJiBmKSBeICh+ZSAmIGcpO1xuXHQgICAgICAgICAgICAgICAgdmFyIG1haiA9IChhICYgYikgXiAoYSAmIGMpIF4gKGIgJiBjKTtcblxuXHQgICAgICAgICAgICAgICAgdmFyIHNpZ21hMCA9ICgoYSA8PCAzMCkgfCAoYSA+Pj4gMikpIF4gKChhIDw8IDE5KSB8IChhID4+PiAxMykpIF4gKChhIDw8IDEwKSB8IChhID4+PiAyMikpO1xuXHQgICAgICAgICAgICAgICAgdmFyIHNpZ21hMSA9ICgoZSA8PCAyNikgfCAoZSA+Pj4gNikpIF4gKChlIDw8IDIxKSB8IChlID4+PiAxMSkpIF4gKChlIDw8IDcpICB8IChlID4+PiAyNSkpO1xuXG5cdCAgICAgICAgICAgICAgICB2YXIgdDEgPSBoICsgc2lnbWExICsgY2ggKyBLW2ldICsgV1tpXTtcblx0ICAgICAgICAgICAgICAgIHZhciB0MiA9IHNpZ21hMCArIG1hajtcblxuXHQgICAgICAgICAgICAgICAgaCA9IGc7XG5cdCAgICAgICAgICAgICAgICBnID0gZjtcblx0ICAgICAgICAgICAgICAgIGYgPSBlO1xuXHQgICAgICAgICAgICAgICAgZSA9IChkICsgdDEpIHwgMDtcblx0ICAgICAgICAgICAgICAgIGQgPSBjO1xuXHQgICAgICAgICAgICAgICAgYyA9IGI7XG5cdCAgICAgICAgICAgICAgICBiID0gYTtcblx0ICAgICAgICAgICAgICAgIGEgPSAodDEgKyB0MikgfCAwO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gSW50ZXJtZWRpYXRlIGhhc2ggdmFsdWVcblx0ICAgICAgICAgICAgSFswXSA9IChIWzBdICsgYSkgfCAwO1xuXHQgICAgICAgICAgICBIWzFdID0gKEhbMV0gKyBiKSB8IDA7XG5cdCAgICAgICAgICAgIEhbMl0gPSAoSFsyXSArIGMpIHwgMDtcblx0ICAgICAgICAgICAgSFszXSA9IChIWzNdICsgZCkgfCAwO1xuXHQgICAgICAgICAgICBIWzRdID0gKEhbNF0gKyBlKSB8IDA7XG5cdCAgICAgICAgICAgIEhbNV0gPSAoSFs1XSArIGYpIHwgMDtcblx0ICAgICAgICAgICAgSFs2XSA9IChIWzZdICsgZykgfCAwO1xuXHQgICAgICAgICAgICBIWzddID0gKEhbN10gKyBoKSB8IDA7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb0ZpbmFsaXplOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuX2RhdGE7XG5cdCAgICAgICAgICAgIHZhciBkYXRhV29yZHMgPSBkYXRhLndvcmRzO1xuXG5cdCAgICAgICAgICAgIHZhciBuQml0c1RvdGFsID0gdGhpcy5fbkRhdGFCeXRlcyAqIDg7XG5cdCAgICAgICAgICAgIHZhciBuQml0c0xlZnQgPSBkYXRhLnNpZ0J5dGVzICogODtcblxuXHQgICAgICAgICAgICAvLyBBZGQgcGFkZGluZ1xuXHQgICAgICAgICAgICBkYXRhV29yZHNbbkJpdHNMZWZ0ID4+PiA1XSB8PSAweDgwIDw8ICgyNCAtIG5CaXRzTGVmdCAlIDMyKTtcblx0ICAgICAgICAgICAgZGF0YVdvcmRzWygoKG5CaXRzTGVmdCArIDY0KSA+Pj4gOSkgPDwgNCkgKyAxNF0gPSBNYXRoLmZsb29yKG5CaXRzVG90YWwgLyAweDEwMDAwMDAwMCk7XG5cdCAgICAgICAgICAgIGRhdGFXb3Jkc1soKChuQml0c0xlZnQgKyA2NCkgPj4+IDkpIDw8IDQpICsgMTVdID0gbkJpdHNUb3RhbDtcblx0ICAgICAgICAgICAgZGF0YS5zaWdCeXRlcyA9IGRhdGFXb3Jkcy5sZW5ndGggKiA0O1xuXG5cdCAgICAgICAgICAgIC8vIEhhc2ggZmluYWwgYmxvY2tzXG5cdCAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3MoKTtcblxuXHQgICAgICAgICAgICAvLyBSZXR1cm4gZmluYWwgY29tcHV0ZWQgaGFzaFxuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5faGFzaDtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGNsb25lID0gSGFzaGVyLmNsb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgICAgIGNsb25lLl9oYXNoID0gdGhpcy5faGFzaC5jbG9uZSgpO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBjbG9uZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgaGFzaGVyJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gaGFzaC5cblx0ICAgICAqXG5cdCAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBoYXNoLlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgaGFzaCA9IENyeXB0b0pTLlNIQTI1NignbWVzc2FnZScpO1xuXHQgICAgICogICAgIHZhciBoYXNoID0gQ3J5cHRvSlMuU0hBMjU2KHdvcmRBcnJheSk7XG5cdCAgICAgKi9cblx0ICAgIEMuU0hBMjU2ID0gSGFzaGVyLl9jcmVhdGVIZWxwZXIoU0hBMjU2KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgSE1BQydzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGhhc2guXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IGtleSBUaGUgc2VjcmV0IGtleS5cblx0ICAgICAqXG5cdCAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBITUFDLlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgaG1hYyA9IENyeXB0b0pTLkhtYWNTSEEyNTYobWVzc2FnZSwga2V5KTtcblx0ICAgICAqL1xuXHQgICAgQy5IbWFjU0hBMjU2ID0gSGFzaGVyLl9jcmVhdGVIbWFjSGVscGVyKFNIQTI1Nik7XG5cdH0oTWF0aCkpO1xuXG5cblx0cmV0dXJuIENyeXB0b0pTLlNIQTI1NjtcblxufSkpOyIsIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnksIHVuZGVmKSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpLCByZXF1aXJlKFwiLi94NjQtY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi94NjQtY29yZVwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0KGZ1bmN0aW9uIChNYXRoKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBXb3JkQXJyYXkgPSBDX2xpYi5Xb3JkQXJyYXk7XG5cdCAgICB2YXIgSGFzaGVyID0gQ19saWIuSGFzaGVyO1xuXHQgICAgdmFyIENfeDY0ID0gQy54NjQ7XG5cdCAgICB2YXIgWDY0V29yZCA9IENfeDY0LldvcmQ7XG5cdCAgICB2YXIgQ19hbGdvID0gQy5hbGdvO1xuXG5cdCAgICAvLyBDb25zdGFudHMgdGFibGVzXG5cdCAgICB2YXIgUkhPX09GRlNFVFMgPSBbXTtcblx0ICAgIHZhciBQSV9JTkRFWEVTICA9IFtdO1xuXHQgICAgdmFyIFJPVU5EX0NPTlNUQU5UUyA9IFtdO1xuXG5cdCAgICAvLyBDb21wdXRlIENvbnN0YW50c1xuXHQgICAgKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAvLyBDb21wdXRlIHJobyBvZmZzZXQgY29uc3RhbnRzXG5cdCAgICAgICAgdmFyIHggPSAxLCB5ID0gMDtcblx0ICAgICAgICBmb3IgKHZhciB0ID0gMDsgdCA8IDI0OyB0KyspIHtcblx0ICAgICAgICAgICAgUkhPX09GRlNFVFNbeCArIDUgKiB5XSA9ICgodCArIDEpICogKHQgKyAyKSAvIDIpICUgNjQ7XG5cblx0ICAgICAgICAgICAgdmFyIG5ld1ggPSB5ICUgNTtcblx0ICAgICAgICAgICAgdmFyIG5ld1kgPSAoMiAqIHggKyAzICogeSkgJSA1O1xuXHQgICAgICAgICAgICB4ID0gbmV3WDtcblx0ICAgICAgICAgICAgeSA9IG5ld1k7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgLy8gQ29tcHV0ZSBwaSBpbmRleCBjb25zdGFudHNcblx0ICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8IDU7IHgrKykge1xuXHQgICAgICAgICAgICBmb3IgKHZhciB5ID0gMDsgeSA8IDU7IHkrKykge1xuXHQgICAgICAgICAgICAgICAgUElfSU5ERVhFU1t4ICsgNSAqIHldID0geSArICgoMiAqIHggKyAzICogeSkgJSA1KSAqIDU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cblx0ICAgICAgICAvLyBDb21wdXRlIHJvdW5kIGNvbnN0YW50c1xuXHQgICAgICAgIHZhciBMRlNSID0gMHgwMTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDI0OyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIHJvdW5kQ29uc3RhbnRNc3cgPSAwO1xuXHQgICAgICAgICAgICB2YXIgcm91bmRDb25zdGFudExzdyA9IDA7XG5cblx0ICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA3OyBqKyspIHtcblx0ICAgICAgICAgICAgICAgIGlmIChMRlNSICYgMHgwMSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBiaXRQb3NpdGlvbiA9ICgxIDw8IGopIC0gMTtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAoYml0UG9zaXRpb24gPCAzMikge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICByb3VuZENvbnN0YW50THN3IF49IDEgPDwgYml0UG9zaXRpb247XG5cdCAgICAgICAgICAgICAgICAgICAgfSBlbHNlIC8qIGlmIChiaXRQb3NpdGlvbiA+PSAzMikgKi8ge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICByb3VuZENvbnN0YW50TXN3IF49IDEgPDwgKGJpdFBvc2l0aW9uIC0gMzIpO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAgICAgLy8gQ29tcHV0ZSBuZXh0IExGU1Jcblx0ICAgICAgICAgICAgICAgIGlmIChMRlNSICYgMHg4MCkge1xuXHQgICAgICAgICAgICAgICAgICAgIC8vIFByaW1pdGl2ZSBwb2x5bm9taWFsIG92ZXIgR0YoMik6IHheOCArIHheNiArIHheNSArIHheNCArIDFcblx0ICAgICAgICAgICAgICAgICAgICBMRlNSID0gKExGU1IgPDwgMSkgXiAweDcxO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICBMRlNSIDw8PSAxO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgUk9VTkRfQ09OU1RBTlRTW2ldID0gWDY0V29yZC5jcmVhdGUocm91bmRDb25zdGFudE1zdywgcm91bmRDb25zdGFudExzdyk7XG5cdCAgICAgICAgfVxuXHQgICAgfSgpKTtcblxuXHQgICAgLy8gUmV1c2FibGUgb2JqZWN0cyBmb3IgdGVtcG9yYXJ5IHZhbHVlc1xuXHQgICAgdmFyIFQgPSBbXTtcblx0ICAgIChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTsgaSsrKSB7XG5cdCAgICAgICAgICAgIFRbaV0gPSBYNjRXb3JkLmNyZWF0ZSgpO1xuXHQgICAgICAgIH1cblx0ICAgIH0oKSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogU0hBLTMgaGFzaCBhbGdvcml0aG0uXG5cdCAgICAgKi9cblx0ICAgIHZhciBTSEEzID0gQ19hbGdvLlNIQTMgPSBIYXNoZXIuZXh0ZW5kKHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb25maWd1cmF0aW9uIG9wdGlvbnMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcn0gb3V0cHV0TGVuZ3RoXG5cdCAgICAgICAgICogICBUaGUgZGVzaXJlZCBudW1iZXIgb2YgYml0cyBpbiB0aGUgb3V0cHV0IGhhc2guXG5cdCAgICAgICAgICogICBPbmx5IHZhbHVlcyBwZXJtaXR0ZWQgYXJlOiAyMjQsIDI1NiwgMzg0LCA1MTIuXG5cdCAgICAgICAgICogICBEZWZhdWx0OiA1MTJcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjZmc6IEhhc2hlci5jZmcuZXh0ZW5kKHtcblx0ICAgICAgICAgICAgb3V0cHV0TGVuZ3RoOiA1MTJcblx0ICAgICAgICB9KSxcblxuXHQgICAgICAgIF9kb1Jlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBzdGF0ZSA9IHRoaXMuX3N0YXRlID0gW11cblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICBzdGF0ZVtpXSA9IG5ldyBYNjRXb3JkLmluaXQoKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIHRoaXMuYmxvY2tTaXplID0gKDE2MDAgLSAyICogdGhpcy5jZmcub3V0cHV0TGVuZ3RoKSAvIDMyO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBfZG9Qcm9jZXNzQmxvY2s6IGZ1bmN0aW9uIChNLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBzdGF0ZSA9IHRoaXMuX3N0YXRlO1xuXHQgICAgICAgICAgICB2YXIgbkJsb2NrU2l6ZUxhbmVzID0gdGhpcy5ibG9ja1NpemUgLyAyO1xuXG5cdCAgICAgICAgICAgIC8vIEFic29yYlxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5CbG9ja1NpemVMYW5lczsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgICAgIHZhciBNMmkgID0gTVtvZmZzZXQgKyAyICogaV07XG5cdCAgICAgICAgICAgICAgICB2YXIgTTJpMSA9IE1bb2Zmc2V0ICsgMiAqIGkgKyAxXTtcblxuXHQgICAgICAgICAgICAgICAgLy8gU3dhcCBlbmRpYW5cblx0ICAgICAgICAgICAgICAgIE0yaSA9IChcblx0ICAgICAgICAgICAgICAgICAgICAoKChNMmkgPDwgOCkgIHwgKE0yaSA+Pj4gMjQpKSAmIDB4MDBmZjAwZmYpIHxcblx0ICAgICAgICAgICAgICAgICAgICAoKChNMmkgPDwgMjQpIHwgKE0yaSA+Pj4gOCkpICAmIDB4ZmYwMGZmMDApXG5cdCAgICAgICAgICAgICAgICApO1xuXHQgICAgICAgICAgICAgICAgTTJpMSA9IChcblx0ICAgICAgICAgICAgICAgICAgICAoKChNMmkxIDw8IDgpICB8IChNMmkxID4+PiAyNCkpICYgMHgwMGZmMDBmZikgfFxuXHQgICAgICAgICAgICAgICAgICAgICgoKE0yaTEgPDwgMjQpIHwgKE0yaTEgPj4+IDgpKSAgJiAweGZmMDBmZjAwKVxuXHQgICAgICAgICAgICAgICAgKTtcblxuXHQgICAgICAgICAgICAgICAgLy8gQWJzb3JiIG1lc3NhZ2UgaW50byBzdGF0ZVxuXHQgICAgICAgICAgICAgICAgdmFyIGxhbmUgPSBzdGF0ZVtpXTtcblx0ICAgICAgICAgICAgICAgIGxhbmUuaGlnaCBePSBNMmkxO1xuXHQgICAgICAgICAgICAgICAgbGFuZS5sb3cgIF49IE0yaTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIFJvdW5kc1xuXHQgICAgICAgICAgICBmb3IgKHZhciByb3VuZCA9IDA7IHJvdW5kIDwgMjQ7IHJvdW5kKyspIHtcblx0ICAgICAgICAgICAgICAgIC8vIFRoZXRhXG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8IDU7IHgrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIC8vIE1peCBjb2x1bW4gbGFuZXNcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgdE1zdyA9IDAsIHRMc3cgPSAwO1xuXHQgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHkgPSAwOyB5IDwgNTsgeSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsYW5lID0gc3RhdGVbeCArIDUgKiB5XTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdE1zdyBePSBsYW5lLmhpZ2g7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHRMc3cgXj0gbGFuZS5sb3c7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICAgICAgLy8gVGVtcG9yYXJ5IHZhbHVlc1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBUeCA9IFRbeF07XG5cdCAgICAgICAgICAgICAgICAgICAgVHguaGlnaCA9IHRNc3c7XG5cdCAgICAgICAgICAgICAgICAgICAgVHgubG93ICA9IHRMc3c7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8IDU7IHgrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBUeDQgPSBUWyh4ICsgNCkgJSA1XTtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgVHgxID0gVFsoeCArIDEpICUgNV07XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIFR4MU1zdyA9IFR4MS5oaWdoO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBUeDFMc3cgPSBUeDEubG93O1xuXG5cdCAgICAgICAgICAgICAgICAgICAgLy8gTWl4IHN1cnJvdW5kaW5nIGNvbHVtbnNcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgdE1zdyA9IFR4NC5oaWdoIF4gKChUeDFNc3cgPDwgMSkgfCAoVHgxTHN3ID4+PiAzMSkpO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciB0THN3ID0gVHg0LmxvdyAgXiAoKFR4MUxzdyA8PCAxKSB8IChUeDFNc3cgPj4+IDMxKSk7XG5cdCAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgeSA9IDA7IHkgPCA1OyB5KyspIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxhbmUgPSBzdGF0ZVt4ICsgNSAqIHldO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBsYW5lLmhpZ2ggXj0gdE1zdztcblx0ICAgICAgICAgICAgICAgICAgICAgICAgbGFuZS5sb3cgIF49IHRMc3c7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICAvLyBSaG8gUGlcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGxhbmVJbmRleCA9IDE7IGxhbmVJbmRleCA8IDI1OyBsYW5lSW5kZXgrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBsYW5lID0gc3RhdGVbbGFuZUluZGV4XTtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgbGFuZU1zdyA9IGxhbmUuaGlnaDtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgbGFuZUxzdyA9IGxhbmUubG93O1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciByaG9PZmZzZXQgPSBSSE9fT0ZGU0VUU1tsYW5lSW5kZXhdO1xuXG5cdCAgICAgICAgICAgICAgICAgICAgLy8gUm90YXRlIGxhbmVzXG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKHJob09mZnNldCA8IDMyKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0TXN3ID0gKGxhbmVNc3cgPDwgcmhvT2Zmc2V0KSB8IChsYW5lTHN3ID4+PiAoMzIgLSByaG9PZmZzZXQpKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRMc3cgPSAobGFuZUxzdyA8PCByaG9PZmZzZXQpIHwgKGxhbmVNc3cgPj4+ICgzMiAtIHJob09mZnNldCkpO1xuXHQgICAgICAgICAgICAgICAgICAgIH0gZWxzZSAvKiBpZiAocmhvT2Zmc2V0ID49IDMyKSAqLyB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0TXN3ID0gKGxhbmVMc3cgPDwgKHJob09mZnNldCAtIDMyKSkgfCAobGFuZU1zdyA+Pj4gKDY0IC0gcmhvT2Zmc2V0KSk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0THN3ID0gKGxhbmVNc3cgPDwgKHJob09mZnNldCAtIDMyKSkgfCAobGFuZUxzdyA+Pj4gKDY0IC0gcmhvT2Zmc2V0KSk7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICAgICAgLy8gVHJhbnNwb3NlIGxhbmVzXG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIFRQaUxhbmUgPSBUW1BJX0lOREVYRVNbbGFuZUluZGV4XV07XG5cdCAgICAgICAgICAgICAgICAgICAgVFBpTGFuZS5oaWdoID0gdE1zdztcblx0ICAgICAgICAgICAgICAgICAgICBUUGlMYW5lLmxvdyAgPSB0THN3O1xuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICAvLyBSaG8gcGkgYXQgeCA9IHkgPSAwXG5cdCAgICAgICAgICAgICAgICB2YXIgVDAgPSBUWzBdO1xuXHQgICAgICAgICAgICAgICAgdmFyIHN0YXRlMCA9IHN0YXRlWzBdO1xuXHQgICAgICAgICAgICAgICAgVDAuaGlnaCA9IHN0YXRlMC5oaWdoO1xuXHQgICAgICAgICAgICAgICAgVDAubG93ICA9IHN0YXRlMC5sb3c7XG5cblx0ICAgICAgICAgICAgICAgIC8vIENoaVxuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgeCA9IDA7IHggPCA1OyB4KyspIHtcblx0ICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciB5ID0gMDsgeSA8IDU7IHkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxhbmVJbmRleCA9IHggKyA1ICogeTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxhbmUgPSBzdGF0ZVtsYW5lSW5kZXhdO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB2YXIgVExhbmUgPSBUW2xhbmVJbmRleF07XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHZhciBUeDFMYW5lID0gVFsoKHggKyAxKSAlIDUpICsgNSAqIHldO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB2YXIgVHgyTGFuZSA9IFRbKCh4ICsgMikgJSA1KSArIDUgKiB5XTtcblxuXHQgICAgICAgICAgICAgICAgICAgICAgICAvLyBNaXggcm93c1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBsYW5lLmhpZ2ggPSBUTGFuZS5oaWdoIF4gKH5UeDFMYW5lLmhpZ2ggJiBUeDJMYW5lLmhpZ2gpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBsYW5lLmxvdyAgPSBUTGFuZS5sb3cgIF4gKH5UeDFMYW5lLmxvdyAgJiBUeDJMYW5lLmxvdyk7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICAvLyBJb3RhXG5cdCAgICAgICAgICAgICAgICB2YXIgbGFuZSA9IHN0YXRlWzBdO1xuXHQgICAgICAgICAgICAgICAgdmFyIHJvdW5kQ29uc3RhbnQgPSBST1VORF9DT05TVEFOVFNbcm91bmRdO1xuXHQgICAgICAgICAgICAgICAgbGFuZS5oaWdoIF49IHJvdW5kQ29uc3RhbnQuaGlnaDtcblx0ICAgICAgICAgICAgICAgIGxhbmUubG93ICBePSByb3VuZENvbnN0YW50Lmxvdzs7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX2RvRmluYWxpemU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5fZGF0YTtcblx0ICAgICAgICAgICAgdmFyIGRhdGFXb3JkcyA9IGRhdGEud29yZHM7XG5cdCAgICAgICAgICAgIHZhciBuQml0c1RvdGFsID0gdGhpcy5fbkRhdGFCeXRlcyAqIDg7XG5cdCAgICAgICAgICAgIHZhciBuQml0c0xlZnQgPSBkYXRhLnNpZ0J5dGVzICogODtcblx0ICAgICAgICAgICAgdmFyIGJsb2NrU2l6ZUJpdHMgPSB0aGlzLmJsb2NrU2l6ZSAqIDMyO1xuXG5cdCAgICAgICAgICAgIC8vIEFkZCBwYWRkaW5nXG5cdCAgICAgICAgICAgIGRhdGFXb3Jkc1tuQml0c0xlZnQgPj4+IDVdIHw9IDB4MSA8PCAoMjQgLSBuQml0c0xlZnQgJSAzMik7XG5cdCAgICAgICAgICAgIGRhdGFXb3Jkc1soKE1hdGguY2VpbCgobkJpdHNMZWZ0ICsgMSkgLyBibG9ja1NpemVCaXRzKSAqIGJsb2NrU2l6ZUJpdHMpID4+PiA1KSAtIDFdIHw9IDB4ODA7XG5cdCAgICAgICAgICAgIGRhdGEuc2lnQnl0ZXMgPSBkYXRhV29yZHMubGVuZ3RoICogNDtcblxuXHQgICAgICAgICAgICAvLyBIYXNoIGZpbmFsIGJsb2Nrc1xuXHQgICAgICAgICAgICB0aGlzLl9wcm9jZXNzKCk7XG5cblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBzdGF0ZSA9IHRoaXMuX3N0YXRlO1xuXHQgICAgICAgICAgICB2YXIgb3V0cHV0TGVuZ3RoQnl0ZXMgPSB0aGlzLmNmZy5vdXRwdXRMZW5ndGggLyA4O1xuXHQgICAgICAgICAgICB2YXIgb3V0cHV0TGVuZ3RoTGFuZXMgPSBvdXRwdXRMZW5ndGhCeXRlcyAvIDg7XG5cblx0ICAgICAgICAgICAgLy8gU3F1ZWV6ZVxuXHQgICAgICAgICAgICB2YXIgaGFzaFdvcmRzID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3V0cHV0TGVuZ3RoTGFuZXM7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgICAgICB2YXIgbGFuZSA9IHN0YXRlW2ldO1xuXHQgICAgICAgICAgICAgICAgdmFyIGxhbmVNc3cgPSBsYW5lLmhpZ2g7XG5cdCAgICAgICAgICAgICAgICB2YXIgbGFuZUxzdyA9IGxhbmUubG93O1xuXG5cdCAgICAgICAgICAgICAgICAvLyBTd2FwIGVuZGlhblxuXHQgICAgICAgICAgICAgICAgbGFuZU1zdyA9IChcblx0ICAgICAgICAgICAgICAgICAgICAoKChsYW5lTXN3IDw8IDgpICB8IChsYW5lTXN3ID4+PiAyNCkpICYgMHgwMGZmMDBmZikgfFxuXHQgICAgICAgICAgICAgICAgICAgICgoKGxhbmVNc3cgPDwgMjQpIHwgKGxhbmVNc3cgPj4+IDgpKSAgJiAweGZmMDBmZjAwKVxuXHQgICAgICAgICAgICAgICAgKTtcblx0ICAgICAgICAgICAgICAgIGxhbmVMc3cgPSAoXG5cdCAgICAgICAgICAgICAgICAgICAgKCgobGFuZUxzdyA8PCA4KSAgfCAobGFuZUxzdyA+Pj4gMjQpKSAmIDB4MDBmZjAwZmYpIHxcblx0ICAgICAgICAgICAgICAgICAgICAoKChsYW5lTHN3IDw8IDI0KSB8IChsYW5lTHN3ID4+PiA4KSkgICYgMHhmZjAwZmYwMClcblx0ICAgICAgICAgICAgICAgICk7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFNxdWVlemUgc3RhdGUgdG8gcmV0cmlldmUgaGFzaFxuXHQgICAgICAgICAgICAgICAgaGFzaFdvcmRzLnB1c2gobGFuZUxzdyk7XG5cdCAgICAgICAgICAgICAgICBoYXNoV29yZHMucHVzaChsYW5lTXN3KTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIFJldHVybiBmaW5hbCBjb21wdXRlZCBoYXNoXG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgV29yZEFycmF5LmluaXQoaGFzaFdvcmRzLCBvdXRwdXRMZW5ndGhCeXRlcyk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBjbG9uZSA9IEhhc2hlci5jbG9uZS5jYWxsKHRoaXMpO1xuXG5cdCAgICAgICAgICAgIHZhciBzdGF0ZSA9IGNsb25lLl9zdGF0ZSA9IHRoaXMuX3N0YXRlLnNsaWNlKDApO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDI1OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHN0YXRlW2ldID0gc3RhdGVbaV0uY2xvbmUoKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIHJldHVybiBjbG9uZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgaGFzaGVyJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gaGFzaC5cblx0ICAgICAqXG5cdCAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBoYXNoLlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgaGFzaCA9IENyeXB0b0pTLlNIQTMoJ21lc3NhZ2UnKTtcblx0ICAgICAqICAgICB2YXIgaGFzaCA9IENyeXB0b0pTLlNIQTMod29yZEFycmF5KTtcblx0ICAgICAqL1xuXHQgICAgQy5TSEEzID0gSGFzaGVyLl9jcmVhdGVIZWxwZXIoU0hBMyk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogU2hvcnRjdXQgZnVuY3Rpb24gdG8gdGhlIEhNQUMncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBoYXNoLlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBrZXkgVGhlIHNlY3JldCBrZXkuXG5cdCAgICAgKlxuXHQgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgSE1BQy5cblx0ICAgICAqXG5cdCAgICAgKiBAc3RhdGljXG5cdCAgICAgKlxuXHQgICAgICogQGV4YW1wbGVcblx0ICAgICAqXG5cdCAgICAgKiAgICAgdmFyIGhtYWMgPSBDcnlwdG9KUy5IbWFjU0hBMyhtZXNzYWdlLCBrZXkpO1xuXHQgICAgICovXG5cdCAgICBDLkhtYWNTSEEzID0gSGFzaGVyLl9jcmVhdGVIbWFjSGVscGVyKFNIQTMpO1xuXHR9KE1hdGgpKTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5TSEEzO1xuXG59KSk7IiwiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSwgdW5kZWYpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIiksIHJlcXVpcmUoXCIuL3g2NC1jb3JlXCIpLCByZXF1aXJlKFwiLi9zaGE1MTJcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiLCBcIi4veDY0LWNvcmVcIiwgXCIuL3NoYTUxMlwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0KGZ1bmN0aW9uICgpIHtcblx0ICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgdmFyIEMgPSBDcnlwdG9KUztcblx0ICAgIHZhciBDX3g2NCA9IEMueDY0O1xuXHQgICAgdmFyIFg2NFdvcmQgPSBDX3g2NC5Xb3JkO1xuXHQgICAgdmFyIFg2NFdvcmRBcnJheSA9IENfeDY0LldvcmRBcnJheTtcblx0ICAgIHZhciBDX2FsZ28gPSBDLmFsZ287XG5cdCAgICB2YXIgU0hBNTEyID0gQ19hbGdvLlNIQTUxMjtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTSEEtMzg0IGhhc2ggYWxnb3JpdGhtLlxuXHQgICAgICovXG5cdCAgICB2YXIgU0hBMzg0ID0gQ19hbGdvLlNIQTM4NCA9IFNIQTUxMi5leHRlbmQoe1xuXHQgICAgICAgIF9kb1Jlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2hhc2ggPSBuZXcgWDY0V29yZEFycmF5LmluaXQoW1xuXHQgICAgICAgICAgICAgICAgbmV3IFg2NFdvcmQuaW5pdCgweGNiYmI5ZDVkLCAweGMxMDU5ZWQ4KSwgbmV3IFg2NFdvcmQuaW5pdCgweDYyOWEyOTJhLCAweDM2N2NkNTA3KSxcblx0ICAgICAgICAgICAgICAgIG5ldyBYNjRXb3JkLmluaXQoMHg5MTU5MDE1YSwgMHgzMDcwZGQxNyksIG5ldyBYNjRXb3JkLmluaXQoMHgxNTJmZWNkOCwgMHhmNzBlNTkzOSksXG5cdCAgICAgICAgICAgICAgICBuZXcgWDY0V29yZC5pbml0KDB4NjczMzI2NjcsIDB4ZmZjMDBiMzEpLCBuZXcgWDY0V29yZC5pbml0KDB4OGViNDRhODcsIDB4Njg1ODE1MTEpLFxuXHQgICAgICAgICAgICAgICAgbmV3IFg2NFdvcmQuaW5pdCgweGRiMGMyZTBkLCAweDY0Zjk4ZmE3KSwgbmV3IFg2NFdvcmQuaW5pdCgweDQ3YjU0ODFkLCAweGJlZmE0ZmE0KVxuXHQgICAgICAgICAgICBdKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX2RvRmluYWxpemU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGhhc2ggPSBTSEE1MTIuX2RvRmluYWxpemUuY2FsbCh0aGlzKTtcblxuXHQgICAgICAgICAgICBoYXNoLnNpZ0J5dGVzIC09IDE2O1xuXG5cdCAgICAgICAgICAgIHJldHVybiBoYXNoO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9uIHRvIHRoZSBoYXNoZXIncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBoYXNoLlxuXHQgICAgICpcblx0ICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIGhhc2guXG5cdCAgICAgKlxuXHQgICAgICogQHN0YXRpY1xuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBoYXNoID0gQ3J5cHRvSlMuU0hBMzg0KCdtZXNzYWdlJyk7XG5cdCAgICAgKiAgICAgdmFyIGhhc2ggPSBDcnlwdG9KUy5TSEEzODQod29yZEFycmF5KTtcblx0ICAgICAqL1xuXHQgICAgQy5TSEEzODQgPSBTSEE1MTIuX2NyZWF0ZUhlbHBlcihTSEEzODQpO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9uIHRvIHRoZSBITUFDJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gaGFzaC5cblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30ga2V5IFRoZSBzZWNyZXQga2V5LlxuXHQgICAgICpcblx0ICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIEhNQUMuXG5cdCAgICAgKlxuXHQgICAgICogQHN0YXRpY1xuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBobWFjID0gQ3J5cHRvSlMuSG1hY1NIQTM4NChtZXNzYWdlLCBrZXkpO1xuXHQgICAgICovXG5cdCAgICBDLkhtYWNTSEEzODQgPSBTSEE1MTIuX2NyZWF0ZUhtYWNIZWxwZXIoU0hBMzg0KTtcblx0fSgpKTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5TSEEzODQ7XG5cbn0pKTsiLCI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5LCB1bmRlZikge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSwgcmVxdWlyZShcIi4veDY0LWNvcmVcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiLCBcIi4veDY0LWNvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdChmdW5jdGlvbiAoKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBIYXNoZXIgPSBDX2xpYi5IYXNoZXI7XG5cdCAgICB2YXIgQ194NjQgPSBDLng2NDtcblx0ICAgIHZhciBYNjRXb3JkID0gQ194NjQuV29yZDtcblx0ICAgIHZhciBYNjRXb3JkQXJyYXkgPSBDX3g2NC5Xb3JkQXJyYXk7XG5cdCAgICB2YXIgQ19hbGdvID0gQy5hbGdvO1xuXG5cdCAgICBmdW5jdGlvbiBYNjRXb3JkX2NyZWF0ZSgpIHtcblx0ICAgICAgICByZXR1cm4gWDY0V29yZC5jcmVhdGUuYXBwbHkoWDY0V29yZCwgYXJndW1lbnRzKTtcblx0ICAgIH1cblxuXHQgICAgLy8gQ29uc3RhbnRzXG5cdCAgICB2YXIgSyA9IFtcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDQyOGEyZjk4LCAweGQ3MjhhZTIyKSwgWDY0V29yZF9jcmVhdGUoMHg3MTM3NDQ5MSwgMHgyM2VmNjVjZCksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHhiNWMwZmJjZiwgMHhlYzRkM2IyZiksIFg2NFdvcmRfY3JlYXRlKDB4ZTliNWRiYTUsIDB4ODE4OWRiYmMpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4Mzk1NmMyNWIsIDB4ZjM0OGI1MzgpLCBYNjRXb3JkX2NyZWF0ZSgweDU5ZjExMWYxLCAweGI2MDVkMDE5KSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDkyM2Y4MmE0LCAweGFmMTk0ZjliKSwgWDY0V29yZF9jcmVhdGUoMHhhYjFjNWVkNSwgMHhkYTZkODExOCksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHhkODA3YWE5OCwgMHhhMzAzMDI0MiksIFg2NFdvcmRfY3JlYXRlKDB4MTI4MzViMDEsIDB4NDU3MDZmYmUpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4MjQzMTg1YmUsIDB4NGVlNGIyOGMpLCBYNjRXb3JkX2NyZWF0ZSgweDU1MGM3ZGMzLCAweGQ1ZmZiNGUyKSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDcyYmU1ZDc0LCAweGYyN2I4OTZmKSwgWDY0V29yZF9jcmVhdGUoMHg4MGRlYjFmZSwgMHgzYjE2OTZiMSksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHg5YmRjMDZhNywgMHgyNWM3MTIzNSksIFg2NFdvcmRfY3JlYXRlKDB4YzE5YmYxNzQsIDB4Y2Y2OTI2OTQpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4ZTQ5YjY5YzEsIDB4OWVmMTRhZDIpLCBYNjRXb3JkX2NyZWF0ZSgweGVmYmU0Nzg2LCAweDM4NGYyNWUzKSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDBmYzE5ZGM2LCAweDhiOGNkNWI1KSwgWDY0V29yZF9jcmVhdGUoMHgyNDBjYTFjYywgMHg3N2FjOWM2NSksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHgyZGU5MmM2ZiwgMHg1OTJiMDI3NSksIFg2NFdvcmRfY3JlYXRlKDB4NGE3NDg0YWEsIDB4NmVhNmU0ODMpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4NWNiMGE5ZGMsIDB4YmQ0MWZiZDQpLCBYNjRXb3JkX2NyZWF0ZSgweDc2Zjk4OGRhLCAweDgzMTE1M2I1KSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDk4M2U1MTUyLCAweGVlNjZkZmFiKSwgWDY0V29yZF9jcmVhdGUoMHhhODMxYzY2ZCwgMHgyZGI0MzIxMCksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHhiMDAzMjdjOCwgMHg5OGZiMjEzZiksIFg2NFdvcmRfY3JlYXRlKDB4YmY1OTdmYzcsIDB4YmVlZjBlZTQpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4YzZlMDBiZjMsIDB4M2RhODhmYzIpLCBYNjRXb3JkX2NyZWF0ZSgweGQ1YTc5MTQ3LCAweDkzMGFhNzI1KSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDA2Y2E2MzUxLCAweGUwMDM4MjZmKSwgWDY0V29yZF9jcmVhdGUoMHgxNDI5Mjk2NywgMHgwYTBlNmU3MCksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHgyN2I3MGE4NSwgMHg0NmQyMmZmYyksIFg2NFdvcmRfY3JlYXRlKDB4MmUxYjIxMzgsIDB4NWMyNmM5MjYpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4NGQyYzZkZmMsIDB4NWFjNDJhZWQpLCBYNjRXb3JkX2NyZWF0ZSgweDUzMzgwZDEzLCAweDlkOTViM2RmKSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDY1MGE3MzU0LCAweDhiYWY2M2RlKSwgWDY0V29yZF9jcmVhdGUoMHg3NjZhMGFiYiwgMHgzYzc3YjJhOCksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHg4MWMyYzkyZSwgMHg0N2VkYWVlNiksIFg2NFdvcmRfY3JlYXRlKDB4OTI3MjJjODUsIDB4MTQ4MjM1M2IpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4YTJiZmU4YTEsIDB4NGNmMTAzNjQpLCBYNjRXb3JkX2NyZWF0ZSgweGE4MWE2NjRiLCAweGJjNDIzMDAxKSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweGMyNGI4YjcwLCAweGQwZjg5NzkxKSwgWDY0V29yZF9jcmVhdGUoMHhjNzZjNTFhMywgMHgwNjU0YmUzMCksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHhkMTkyZTgxOSwgMHhkNmVmNTIxOCksIFg2NFdvcmRfY3JlYXRlKDB4ZDY5OTA2MjQsIDB4NTU2NWE5MTApLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4ZjQwZTM1ODUsIDB4NTc3MTIwMmEpLCBYNjRXb3JkX2NyZWF0ZSgweDEwNmFhMDcwLCAweDMyYmJkMWI4KSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDE5YTRjMTE2LCAweGI4ZDJkMGM4KSwgWDY0V29yZF9jcmVhdGUoMHgxZTM3NmMwOCwgMHg1MTQxYWI1MyksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHgyNzQ4Nzc0YywgMHhkZjhlZWI5OSksIFg2NFdvcmRfY3JlYXRlKDB4MzRiMGJjYjUsIDB4ZTE5YjQ4YTgpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4MzkxYzBjYjMsIDB4YzVjOTVhNjMpLCBYNjRXb3JkX2NyZWF0ZSgweDRlZDhhYTRhLCAweGUzNDE4YWNiKSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDViOWNjYTRmLCAweDc3NjNlMzczKSwgWDY0V29yZF9jcmVhdGUoMHg2ODJlNmZmMywgMHhkNmIyYjhhMyksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHg3NDhmODJlZSwgMHg1ZGVmYjJmYyksIFg2NFdvcmRfY3JlYXRlKDB4NzhhNTYzNmYsIDB4NDMxNzJmNjApLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4ODRjODc4MTQsIDB4YTFmMGFiNzIpLCBYNjRXb3JkX2NyZWF0ZSgweDhjYzcwMjA4LCAweDFhNjQzOWVjKSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDkwYmVmZmZhLCAweDIzNjMxZTI4KSwgWDY0V29yZF9jcmVhdGUoMHhhNDUwNmNlYiwgMHhkZTgyYmRlOSksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHhiZWY5YTNmNywgMHhiMmM2NzkxNSksIFg2NFdvcmRfY3JlYXRlKDB4YzY3MTc4ZjIsIDB4ZTM3MjUzMmIpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4Y2EyNzNlY2UsIDB4ZWEyNjYxOWMpLCBYNjRXb3JkX2NyZWF0ZSgweGQxODZiOGM3LCAweDIxYzBjMjA3KSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweGVhZGE3ZGQ2LCAweGNkZTBlYjFlKSwgWDY0V29yZF9jcmVhdGUoMHhmNTdkNGY3ZiwgMHhlZTZlZDE3OCksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHgwNmYwNjdhYSwgMHg3MjE3NmZiYSksIFg2NFdvcmRfY3JlYXRlKDB4MGE2MzdkYzUsIDB4YTJjODk4YTYpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4MTEzZjk4MDQsIDB4YmVmOTBkYWUpLCBYNjRXb3JkX2NyZWF0ZSgweDFiNzEwYjM1LCAweDEzMWM0NzFiKSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDI4ZGI3N2Y1LCAweDIzMDQ3ZDg0KSwgWDY0V29yZF9jcmVhdGUoMHgzMmNhYWI3YiwgMHg0MGM3MjQ5MyksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHgzYzllYmUwYSwgMHgxNWM5YmViYyksIFg2NFdvcmRfY3JlYXRlKDB4NDMxZDY3YzQsIDB4OWMxMDBkNGMpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4NGNjNWQ0YmUsIDB4Y2IzZTQyYjYpLCBYNjRXb3JkX2NyZWF0ZSgweDU5N2YyOTljLCAweGZjNjU3ZTJhKSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDVmY2I2ZmFiLCAweDNhZDZmYWVjKSwgWDY0V29yZF9jcmVhdGUoMHg2YzQ0MTk4YywgMHg0YTQ3NTgxNylcblx0ICAgIF07XG5cblx0ICAgIC8vIFJldXNhYmxlIG9iamVjdHNcblx0ICAgIHZhciBXID0gW107XG5cdCAgICAoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODA7IGkrKykge1xuXHQgICAgICAgICAgICBXW2ldID0gWDY0V29yZF9jcmVhdGUoKTtcblx0ICAgICAgICB9XG5cdCAgICB9KCkpO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNIQS01MTIgaGFzaCBhbGdvcml0aG0uXG5cdCAgICAgKi9cblx0ICAgIHZhciBTSEE1MTIgPSBDX2FsZ28uU0hBNTEyID0gSGFzaGVyLmV4dGVuZCh7XG5cdCAgICAgICAgX2RvUmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdGhpcy5faGFzaCA9IG5ldyBYNjRXb3JkQXJyYXkuaW5pdChbXG5cdCAgICAgICAgICAgICAgICBuZXcgWDY0V29yZC5pbml0KDB4NmEwOWU2NjcsIDB4ZjNiY2M5MDgpLCBuZXcgWDY0V29yZC5pbml0KDB4YmI2N2FlODUsIDB4ODRjYWE3M2IpLFxuXHQgICAgICAgICAgICAgICAgbmV3IFg2NFdvcmQuaW5pdCgweDNjNmVmMzcyLCAweGZlOTRmODJiKSwgbmV3IFg2NFdvcmQuaW5pdCgweGE1NGZmNTNhLCAweDVmMWQzNmYxKSxcblx0ICAgICAgICAgICAgICAgIG5ldyBYNjRXb3JkLmluaXQoMHg1MTBlNTI3ZiwgMHhhZGU2ODJkMSksIG5ldyBYNjRXb3JkLmluaXQoMHg5YjA1Njg4YywgMHgyYjNlNmMxZiksXG5cdCAgICAgICAgICAgICAgICBuZXcgWDY0V29yZC5pbml0KDB4MWY4M2Q5YWIsIDB4ZmI0MWJkNmIpLCBuZXcgWDY0V29yZC5pbml0KDB4NWJlMGNkMTksIDB4MTM3ZTIxNzkpXG5cdCAgICAgICAgICAgIF0pO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBfZG9Qcm9jZXNzQmxvY2s6IGZ1bmN0aW9uIChNLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBIID0gdGhpcy5faGFzaC53b3JkcztcblxuXHQgICAgICAgICAgICB2YXIgSDAgPSBIWzBdO1xuXHQgICAgICAgICAgICB2YXIgSDEgPSBIWzFdO1xuXHQgICAgICAgICAgICB2YXIgSDIgPSBIWzJdO1xuXHQgICAgICAgICAgICB2YXIgSDMgPSBIWzNdO1xuXHQgICAgICAgICAgICB2YXIgSDQgPSBIWzRdO1xuXHQgICAgICAgICAgICB2YXIgSDUgPSBIWzVdO1xuXHQgICAgICAgICAgICB2YXIgSDYgPSBIWzZdO1xuXHQgICAgICAgICAgICB2YXIgSDcgPSBIWzddO1xuXG5cdCAgICAgICAgICAgIHZhciBIMGggPSBIMC5oaWdoO1xuXHQgICAgICAgICAgICB2YXIgSDBsID0gSDAubG93O1xuXHQgICAgICAgICAgICB2YXIgSDFoID0gSDEuaGlnaDtcblx0ICAgICAgICAgICAgdmFyIEgxbCA9IEgxLmxvdztcblx0ICAgICAgICAgICAgdmFyIEgyaCA9IEgyLmhpZ2g7XG5cdCAgICAgICAgICAgIHZhciBIMmwgPSBIMi5sb3c7XG5cdCAgICAgICAgICAgIHZhciBIM2ggPSBIMy5oaWdoO1xuXHQgICAgICAgICAgICB2YXIgSDNsID0gSDMubG93O1xuXHQgICAgICAgICAgICB2YXIgSDRoID0gSDQuaGlnaDtcblx0ICAgICAgICAgICAgdmFyIEg0bCA9IEg0Lmxvdztcblx0ICAgICAgICAgICAgdmFyIEg1aCA9IEg1LmhpZ2g7XG5cdCAgICAgICAgICAgIHZhciBINWwgPSBINS5sb3c7XG5cdCAgICAgICAgICAgIHZhciBINmggPSBINi5oaWdoO1xuXHQgICAgICAgICAgICB2YXIgSDZsID0gSDYubG93O1xuXHQgICAgICAgICAgICB2YXIgSDdoID0gSDcuaGlnaDtcblx0ICAgICAgICAgICAgdmFyIEg3bCA9IEg3LmxvdztcblxuXHQgICAgICAgICAgICAvLyBXb3JraW5nIHZhcmlhYmxlc1xuXHQgICAgICAgICAgICB2YXIgYWggPSBIMGg7XG5cdCAgICAgICAgICAgIHZhciBhbCA9IEgwbDtcblx0ICAgICAgICAgICAgdmFyIGJoID0gSDFoO1xuXHQgICAgICAgICAgICB2YXIgYmwgPSBIMWw7XG5cdCAgICAgICAgICAgIHZhciBjaCA9IEgyaDtcblx0ICAgICAgICAgICAgdmFyIGNsID0gSDJsO1xuXHQgICAgICAgICAgICB2YXIgZGggPSBIM2g7XG5cdCAgICAgICAgICAgIHZhciBkbCA9IEgzbDtcblx0ICAgICAgICAgICAgdmFyIGVoID0gSDRoO1xuXHQgICAgICAgICAgICB2YXIgZWwgPSBINGw7XG5cdCAgICAgICAgICAgIHZhciBmaCA9IEg1aDtcblx0ICAgICAgICAgICAgdmFyIGZsID0gSDVsO1xuXHQgICAgICAgICAgICB2YXIgZ2ggPSBINmg7XG5cdCAgICAgICAgICAgIHZhciBnbCA9IEg2bDtcblx0ICAgICAgICAgICAgdmFyIGhoID0gSDdoO1xuXHQgICAgICAgICAgICB2YXIgaGwgPSBIN2w7XG5cblx0ICAgICAgICAgICAgLy8gUm91bmRzXG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODA7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgICAgIHZhciBXaSA9IFdbaV07XG5cblx0ICAgICAgICAgICAgICAgIC8vIEV4dGVuZCBtZXNzYWdlXG5cdCAgICAgICAgICAgICAgICBpZiAoaSA8IDE2KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIFdpaCA9IFdpLmhpZ2ggPSBNW29mZnNldCArIGkgKiAyXSAgICAgfCAwO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBXaWwgPSBXaS5sb3cgID0gTVtvZmZzZXQgKyBpICogMiArIDFdIHwgMDtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgLy8gR2FtbWEwXG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGdhbW1hMHggID0gV1tpIC0gMTVdO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBnYW1tYTB4aCA9IGdhbW1hMHguaGlnaDtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgZ2FtbWEweGwgPSBnYW1tYTB4Lmxvdztcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgZ2FtbWEwaCAgPSAoKGdhbW1hMHhoID4+PiAxKSB8IChnYW1tYTB4bCA8PCAzMSkpIF4gKChnYW1tYTB4aCA+Pj4gOCkgfCAoZ2FtbWEweGwgPDwgMjQpKSBeIChnYW1tYTB4aCA+Pj4gNyk7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGdhbW1hMGwgID0gKChnYW1tYTB4bCA+Pj4gMSkgfCAoZ2FtbWEweGggPDwgMzEpKSBeICgoZ2FtbWEweGwgPj4+IDgpIHwgKGdhbW1hMHhoIDw8IDI0KSkgXiAoKGdhbW1hMHhsID4+PiA3KSB8IChnYW1tYTB4aCA8PCAyNSkpO1xuXG5cdCAgICAgICAgICAgICAgICAgICAgLy8gR2FtbWExXG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGdhbW1hMXggID0gV1tpIC0gMl07XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGdhbW1hMXhoID0gZ2FtbWExeC5oaWdoO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBnYW1tYTF4bCA9IGdhbW1hMXgubG93O1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBnYW1tYTFoICA9ICgoZ2FtbWExeGggPj4+IDE5KSB8IChnYW1tYTF4bCA8PCAxMykpIF4gKChnYW1tYTF4aCA8PCAzKSB8IChnYW1tYTF4bCA+Pj4gMjkpKSBeIChnYW1tYTF4aCA+Pj4gNik7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGdhbW1hMWwgID0gKChnYW1tYTF4bCA+Pj4gMTkpIHwgKGdhbW1hMXhoIDw8IDEzKSkgXiAoKGdhbW1hMXhsIDw8IDMpIHwgKGdhbW1hMXhoID4+PiAyOSkpIF4gKChnYW1tYTF4bCA+Pj4gNikgfCAoZ2FtbWExeGggPDwgMjYpKTtcblxuXHQgICAgICAgICAgICAgICAgICAgIC8vIFdbaV0gPSBnYW1tYTAgKyBXW2kgLSA3XSArIGdhbW1hMSArIFdbaSAtIDE2XVxuXHQgICAgICAgICAgICAgICAgICAgIHZhciBXaTcgID0gV1tpIC0gN107XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIFdpN2ggPSBXaTcuaGlnaDtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgV2k3bCA9IFdpNy5sb3c7XG5cblx0ICAgICAgICAgICAgICAgICAgICB2YXIgV2kxNiAgPSBXW2kgLSAxNl07XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIFdpMTZoID0gV2kxNi5oaWdoO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBXaTE2bCA9IFdpMTYubG93O1xuXG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIFdpbCA9IGdhbW1hMGwgKyBXaTdsO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBXaWggPSBnYW1tYTBoICsgV2k3aCArICgoV2lsID4+PiAwKSA8IChnYW1tYTBsID4+PiAwKSA/IDEgOiAwKTtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgV2lsID0gV2lsICsgZ2FtbWExbDtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgV2loID0gV2loICsgZ2FtbWExaCArICgoV2lsID4+PiAwKSA8IChnYW1tYTFsID4+PiAwKSA/IDEgOiAwKTtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgV2lsID0gV2lsICsgV2kxNmw7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIFdpaCA9IFdpaCArIFdpMTZoICsgKChXaWwgPj4+IDApIDwgKFdpMTZsID4+PiAwKSA/IDEgOiAwKTtcblxuXHQgICAgICAgICAgICAgICAgICAgIFdpLmhpZ2ggPSBXaWg7XG5cdCAgICAgICAgICAgICAgICAgICAgV2kubG93ICA9IFdpbDtcblx0ICAgICAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAgICAgdmFyIGNoaCAgPSAoZWggJiBmaCkgXiAofmVoICYgZ2gpO1xuXHQgICAgICAgICAgICAgICAgdmFyIGNobCAgPSAoZWwgJiBmbCkgXiAofmVsICYgZ2wpO1xuXHQgICAgICAgICAgICAgICAgdmFyIG1hamggPSAoYWggJiBiaCkgXiAoYWggJiBjaCkgXiAoYmggJiBjaCk7XG5cdCAgICAgICAgICAgICAgICB2YXIgbWFqbCA9IChhbCAmIGJsKSBeIChhbCAmIGNsKSBeIChibCAmIGNsKTtcblxuXHQgICAgICAgICAgICAgICAgdmFyIHNpZ21hMGggPSAoKGFoID4+PiAyOCkgfCAoYWwgPDwgNCkpICBeICgoYWggPDwgMzApICB8IChhbCA+Pj4gMikpIF4gKChhaCA8PCAyNSkgfCAoYWwgPj4+IDcpKTtcblx0ICAgICAgICAgICAgICAgIHZhciBzaWdtYTBsID0gKChhbCA+Pj4gMjgpIHwgKGFoIDw8IDQpKSAgXiAoKGFsIDw8IDMwKSAgfCAoYWggPj4+IDIpKSBeICgoYWwgPDwgMjUpIHwgKGFoID4+PiA3KSk7XG5cdCAgICAgICAgICAgICAgICB2YXIgc2lnbWExaCA9ICgoZWggPj4+IDE0KSB8IChlbCA8PCAxOCkpIF4gKChlaCA+Pj4gMTgpIHwgKGVsIDw8IDE0KSkgXiAoKGVoIDw8IDIzKSB8IChlbCA+Pj4gOSkpO1xuXHQgICAgICAgICAgICAgICAgdmFyIHNpZ21hMWwgPSAoKGVsID4+PiAxNCkgfCAoZWggPDwgMTgpKSBeICgoZWwgPj4+IDE4KSB8IChlaCA8PCAxNCkpIF4gKChlbCA8PCAyMykgfCAoZWggPj4+IDkpKTtcblxuXHQgICAgICAgICAgICAgICAgLy8gdDEgPSBoICsgc2lnbWExICsgY2ggKyBLW2ldICsgV1tpXVxuXHQgICAgICAgICAgICAgICAgdmFyIEtpICA9IEtbaV07XG5cdCAgICAgICAgICAgICAgICB2YXIgS2loID0gS2kuaGlnaDtcblx0ICAgICAgICAgICAgICAgIHZhciBLaWwgPSBLaS5sb3c7XG5cblx0ICAgICAgICAgICAgICAgIHZhciB0MWwgPSBobCArIHNpZ21hMWw7XG5cdCAgICAgICAgICAgICAgICB2YXIgdDFoID0gaGggKyBzaWdtYTFoICsgKCh0MWwgPj4+IDApIDwgKGhsID4+PiAwKSA/IDEgOiAwKTtcblx0ICAgICAgICAgICAgICAgIHZhciB0MWwgPSB0MWwgKyBjaGw7XG5cdCAgICAgICAgICAgICAgICB2YXIgdDFoID0gdDFoICsgY2hoICsgKCh0MWwgPj4+IDApIDwgKGNobCA+Pj4gMCkgPyAxIDogMCk7XG5cdCAgICAgICAgICAgICAgICB2YXIgdDFsID0gdDFsICsgS2lsO1xuXHQgICAgICAgICAgICAgICAgdmFyIHQxaCA9IHQxaCArIEtpaCArICgodDFsID4+PiAwKSA8IChLaWwgPj4+IDApID8gMSA6IDApO1xuXHQgICAgICAgICAgICAgICAgdmFyIHQxbCA9IHQxbCArIFdpbDtcblx0ICAgICAgICAgICAgICAgIHZhciB0MWggPSB0MWggKyBXaWggKyAoKHQxbCA+Pj4gMCkgPCAoV2lsID4+PiAwKSA/IDEgOiAwKTtcblxuXHQgICAgICAgICAgICAgICAgLy8gdDIgPSBzaWdtYTAgKyBtYWpcblx0ICAgICAgICAgICAgICAgIHZhciB0MmwgPSBzaWdtYTBsICsgbWFqbDtcblx0ICAgICAgICAgICAgICAgIHZhciB0MmggPSBzaWdtYTBoICsgbWFqaCArICgodDJsID4+PiAwKSA8IChzaWdtYTBsID4+PiAwKSA/IDEgOiAwKTtcblxuXHQgICAgICAgICAgICAgICAgLy8gVXBkYXRlIHdvcmtpbmcgdmFyaWFibGVzXG5cdCAgICAgICAgICAgICAgICBoaCA9IGdoO1xuXHQgICAgICAgICAgICAgICAgaGwgPSBnbDtcblx0ICAgICAgICAgICAgICAgIGdoID0gZmg7XG5cdCAgICAgICAgICAgICAgICBnbCA9IGZsO1xuXHQgICAgICAgICAgICAgICAgZmggPSBlaDtcblx0ICAgICAgICAgICAgICAgIGZsID0gZWw7XG5cdCAgICAgICAgICAgICAgICBlbCA9IChkbCArIHQxbCkgfCAwO1xuXHQgICAgICAgICAgICAgICAgZWggPSAoZGggKyB0MWggKyAoKGVsID4+PiAwKSA8IChkbCA+Pj4gMCkgPyAxIDogMCkpIHwgMDtcblx0ICAgICAgICAgICAgICAgIGRoID0gY2g7XG5cdCAgICAgICAgICAgICAgICBkbCA9IGNsO1xuXHQgICAgICAgICAgICAgICAgY2ggPSBiaDtcblx0ICAgICAgICAgICAgICAgIGNsID0gYmw7XG5cdCAgICAgICAgICAgICAgICBiaCA9IGFoO1xuXHQgICAgICAgICAgICAgICAgYmwgPSBhbDtcblx0ICAgICAgICAgICAgICAgIGFsID0gKHQxbCArIHQybCkgfCAwO1xuXHQgICAgICAgICAgICAgICAgYWggPSAodDFoICsgdDJoICsgKChhbCA+Pj4gMCkgPCAodDFsID4+PiAwKSA/IDEgOiAwKSkgfCAwO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gSW50ZXJtZWRpYXRlIGhhc2ggdmFsdWVcblx0ICAgICAgICAgICAgSDBsID0gSDAubG93ICA9IChIMGwgKyBhbCk7XG5cdCAgICAgICAgICAgIEgwLmhpZ2ggPSAoSDBoICsgYWggKyAoKEgwbCA+Pj4gMCkgPCAoYWwgPj4+IDApID8gMSA6IDApKTtcblx0ICAgICAgICAgICAgSDFsID0gSDEubG93ICA9IChIMWwgKyBibCk7XG5cdCAgICAgICAgICAgIEgxLmhpZ2ggPSAoSDFoICsgYmggKyAoKEgxbCA+Pj4gMCkgPCAoYmwgPj4+IDApID8gMSA6IDApKTtcblx0ICAgICAgICAgICAgSDJsID0gSDIubG93ICA9IChIMmwgKyBjbCk7XG5cdCAgICAgICAgICAgIEgyLmhpZ2ggPSAoSDJoICsgY2ggKyAoKEgybCA+Pj4gMCkgPCAoY2wgPj4+IDApID8gMSA6IDApKTtcblx0ICAgICAgICAgICAgSDNsID0gSDMubG93ICA9IChIM2wgKyBkbCk7XG5cdCAgICAgICAgICAgIEgzLmhpZ2ggPSAoSDNoICsgZGggKyAoKEgzbCA+Pj4gMCkgPCAoZGwgPj4+IDApID8gMSA6IDApKTtcblx0ICAgICAgICAgICAgSDRsID0gSDQubG93ICA9IChINGwgKyBlbCk7XG5cdCAgICAgICAgICAgIEg0LmhpZ2ggPSAoSDRoICsgZWggKyAoKEg0bCA+Pj4gMCkgPCAoZWwgPj4+IDApID8gMSA6IDApKTtcblx0ICAgICAgICAgICAgSDVsID0gSDUubG93ICA9IChINWwgKyBmbCk7XG5cdCAgICAgICAgICAgIEg1LmhpZ2ggPSAoSDVoICsgZmggKyAoKEg1bCA+Pj4gMCkgPCAoZmwgPj4+IDApID8gMSA6IDApKTtcblx0ICAgICAgICAgICAgSDZsID0gSDYubG93ICA9IChINmwgKyBnbCk7XG5cdCAgICAgICAgICAgIEg2LmhpZ2ggPSAoSDZoICsgZ2ggKyAoKEg2bCA+Pj4gMCkgPCAoZ2wgPj4+IDApID8gMSA6IDApKTtcblx0ICAgICAgICAgICAgSDdsID0gSDcubG93ICA9IChIN2wgKyBobCk7XG5cdCAgICAgICAgICAgIEg3LmhpZ2ggPSAoSDdoICsgaGggKyAoKEg3bCA+Pj4gMCkgPCAoaGwgPj4+IDApID8gMSA6IDApKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX2RvRmluYWxpemU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5fZGF0YTtcblx0ICAgICAgICAgICAgdmFyIGRhdGFXb3JkcyA9IGRhdGEud29yZHM7XG5cblx0ICAgICAgICAgICAgdmFyIG5CaXRzVG90YWwgPSB0aGlzLl9uRGF0YUJ5dGVzICogODtcblx0ICAgICAgICAgICAgdmFyIG5CaXRzTGVmdCA9IGRhdGEuc2lnQnl0ZXMgKiA4O1xuXG5cdCAgICAgICAgICAgIC8vIEFkZCBwYWRkaW5nXG5cdCAgICAgICAgICAgIGRhdGFXb3Jkc1tuQml0c0xlZnQgPj4+IDVdIHw9IDB4ODAgPDwgKDI0IC0gbkJpdHNMZWZ0ICUgMzIpO1xuXHQgICAgICAgICAgICBkYXRhV29yZHNbKCgobkJpdHNMZWZ0ICsgMTI4KSA+Pj4gMTApIDw8IDUpICsgMzBdID0gTWF0aC5mbG9vcihuQml0c1RvdGFsIC8gMHgxMDAwMDAwMDApO1xuXHQgICAgICAgICAgICBkYXRhV29yZHNbKCgobkJpdHNMZWZ0ICsgMTI4KSA+Pj4gMTApIDw8IDUpICsgMzFdID0gbkJpdHNUb3RhbDtcblx0ICAgICAgICAgICAgZGF0YS5zaWdCeXRlcyA9IGRhdGFXb3Jkcy5sZW5ndGggKiA0O1xuXG5cdCAgICAgICAgICAgIC8vIEhhc2ggZmluYWwgYmxvY2tzXG5cdCAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3MoKTtcblxuXHQgICAgICAgICAgICAvLyBDb252ZXJ0IGhhc2ggdG8gMzItYml0IHdvcmQgYXJyYXkgYmVmb3JlIHJldHVybmluZ1xuXHQgICAgICAgICAgICB2YXIgaGFzaCA9IHRoaXMuX2hhc2gudG9YMzIoKTtcblxuXHQgICAgICAgICAgICAvLyBSZXR1cm4gZmluYWwgY29tcHV0ZWQgaGFzaFxuXHQgICAgICAgICAgICByZXR1cm4gaGFzaDtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGNsb25lID0gSGFzaGVyLmNsb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgICAgIGNsb25lLl9oYXNoID0gdGhpcy5faGFzaC5jbG9uZSgpO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBjbG9uZTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgYmxvY2tTaXplOiAxMDI0LzMyXG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgaGFzaGVyJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gaGFzaC5cblx0ICAgICAqXG5cdCAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBoYXNoLlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgaGFzaCA9IENyeXB0b0pTLlNIQTUxMignbWVzc2FnZScpO1xuXHQgICAgICogICAgIHZhciBoYXNoID0gQ3J5cHRvSlMuU0hBNTEyKHdvcmRBcnJheSk7XG5cdCAgICAgKi9cblx0ICAgIEMuU0hBNTEyID0gSGFzaGVyLl9jcmVhdGVIZWxwZXIoU0hBNTEyKTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgSE1BQydzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGhhc2guXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IGtleSBUaGUgc2VjcmV0IGtleS5cblx0ICAgICAqXG5cdCAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBITUFDLlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgaG1hYyA9IENyeXB0b0pTLkhtYWNTSEE1MTIobWVzc2FnZSwga2V5KTtcblx0ICAgICAqL1xuXHQgICAgQy5IbWFjU0hBNTEyID0gSGFzaGVyLl9jcmVhdGVIbWFjSGVscGVyKFNIQTUxMik7XG5cdH0oKSk7XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMuU0hBNTEyO1xuXG59KSk7IiwiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSwgdW5kZWYpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIiksIHJlcXVpcmUoXCIuL2VuYy1iYXNlNjRcIiksIHJlcXVpcmUoXCIuL21kNVwiKSwgcmVxdWlyZShcIi4vZXZwa2RmXCIpLCByZXF1aXJlKFwiLi9jaXBoZXItY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi9lbmMtYmFzZTY0XCIsIFwiLi9tZDVcIiwgXCIuL2V2cGtkZlwiLCBcIi4vY2lwaGVyLWNvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdChmdW5jdGlvbiAoKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBXb3JkQXJyYXkgPSBDX2xpYi5Xb3JkQXJyYXk7XG5cdCAgICB2YXIgQmxvY2tDaXBoZXIgPSBDX2xpYi5CbG9ja0NpcGhlcjtcblx0ICAgIHZhciBDX2FsZ28gPSBDLmFsZ287XG5cblx0ICAgIC8vIFBlcm11dGVkIENob2ljZSAxIGNvbnN0YW50c1xuXHQgICAgdmFyIFBDMSA9IFtcblx0ICAgICAgICA1NywgNDksIDQxLCAzMywgMjUsIDE3LCA5LCAgMSxcblx0ICAgICAgICA1OCwgNTAsIDQyLCAzNCwgMjYsIDE4LCAxMCwgMixcblx0ICAgICAgICA1OSwgNTEsIDQzLCAzNSwgMjcsIDE5LCAxMSwgMyxcblx0ICAgICAgICA2MCwgNTIsIDQ0LCAzNiwgNjMsIDU1LCA0NywgMzksXG5cdCAgICAgICAgMzEsIDIzLCAxNSwgNywgIDYyLCA1NCwgNDYsIDM4LFxuXHQgICAgICAgIDMwLCAyMiwgMTQsIDYsICA2MSwgNTMsIDQ1LCAzNyxcblx0ICAgICAgICAyOSwgMjEsIDEzLCA1LCAgMjgsIDIwLCAxMiwgNFxuXHQgICAgXTtcblxuXHQgICAgLy8gUGVybXV0ZWQgQ2hvaWNlIDIgY29uc3RhbnRzXG5cdCAgICB2YXIgUEMyID0gW1xuXHQgICAgICAgIDE0LCAxNywgMTEsIDI0LCAxLCAgNSxcblx0ICAgICAgICAzLCAgMjgsIDE1LCA2LCAgMjEsIDEwLFxuXHQgICAgICAgIDIzLCAxOSwgMTIsIDQsICAyNiwgOCxcblx0ICAgICAgICAxNiwgNywgIDI3LCAyMCwgMTMsIDIsXG5cdCAgICAgICAgNDEsIDUyLCAzMSwgMzcsIDQ3LCA1NSxcblx0ICAgICAgICAzMCwgNDAsIDUxLCA0NSwgMzMsIDQ4LFxuXHQgICAgICAgIDQ0LCA0OSwgMzksIDU2LCAzNCwgNTMsXG5cdCAgICAgICAgNDYsIDQyLCA1MCwgMzYsIDI5LCAzMlxuXHQgICAgXTtcblxuXHQgICAgLy8gQ3VtdWxhdGl2ZSBiaXQgc2hpZnQgY29uc3RhbnRzXG5cdCAgICB2YXIgQklUX1NISUZUUyA9IFsxLCAgMiwgIDQsICA2LCAgOCwgIDEwLCAxMiwgMTQsIDE1LCAxNywgMTksIDIxLCAyMywgMjUsIDI3LCAyOF07XG5cblx0ICAgIC8vIFNCT1hlcyBhbmQgcm91bmQgcGVybXV0YXRpb24gY29uc3RhbnRzXG5cdCAgICB2YXIgU0JPWF9QID0gW1xuXHQgICAgICAgIHtcblx0ICAgICAgICAgICAgMHgwOiAweDgwODIwMCxcblx0ICAgICAgICAgICAgMHgxMDAwMDAwMDogMHg4MDAwLFxuXHQgICAgICAgICAgICAweDIwMDAwMDAwOiAweDgwODAwMixcblx0ICAgICAgICAgICAgMHgzMDAwMDAwMDogMHgyLFxuXHQgICAgICAgICAgICAweDQwMDAwMDAwOiAweDIwMCxcblx0ICAgICAgICAgICAgMHg1MDAwMDAwMDogMHg4MDgyMDIsXG5cdCAgICAgICAgICAgIDB4NjAwMDAwMDA6IDB4ODAwMjAyLFxuXHQgICAgICAgICAgICAweDcwMDAwMDAwOiAweDgwMDAwMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAwMDogMHgyMDIsXG5cdCAgICAgICAgICAgIDB4OTAwMDAwMDA6IDB4ODAwMjAwLFxuXHQgICAgICAgICAgICAweGEwMDAwMDAwOiAweDgyMDAsXG5cdCAgICAgICAgICAgIDB4YjAwMDAwMDA6IDB4ODA4MDAwLFxuXHQgICAgICAgICAgICAweGMwMDAwMDAwOiAweDgwMDIsXG5cdCAgICAgICAgICAgIDB4ZDAwMDAwMDA6IDB4ODAwMDAyLFxuXHQgICAgICAgICAgICAweGUwMDAwMDAwOiAweDAsXG5cdCAgICAgICAgICAgIDB4ZjAwMDAwMDA6IDB4ODIwMixcblx0ICAgICAgICAgICAgMHg4MDAwMDAwOiAweDAsXG5cdCAgICAgICAgICAgIDB4MTgwMDAwMDA6IDB4ODA4MjAyLFxuXHQgICAgICAgICAgICAweDI4MDAwMDAwOiAweDgyMDIsXG5cdCAgICAgICAgICAgIDB4MzgwMDAwMDA6IDB4ODAwMCxcblx0ICAgICAgICAgICAgMHg0ODAwMDAwMDogMHg4MDgyMDAsXG5cdCAgICAgICAgICAgIDB4NTgwMDAwMDA6IDB4MjAwLFxuXHQgICAgICAgICAgICAweDY4MDAwMDAwOiAweDgwODAwMixcblx0ICAgICAgICAgICAgMHg3ODAwMDAwMDogMHgyLFxuXHQgICAgICAgICAgICAweDg4MDAwMDAwOiAweDgwMDIwMCxcblx0ICAgICAgICAgICAgMHg5ODAwMDAwMDogMHg4MjAwLFxuXHQgICAgICAgICAgICAweGE4MDAwMDAwOiAweDgwODAwMCxcblx0ICAgICAgICAgICAgMHhiODAwMDAwMDogMHg4MDAyMDIsXG5cdCAgICAgICAgICAgIDB4YzgwMDAwMDA6IDB4ODAwMDAyLFxuXHQgICAgICAgICAgICAweGQ4MDAwMDAwOiAweDgwMDIsXG5cdCAgICAgICAgICAgIDB4ZTgwMDAwMDA6IDB4MjAyLFxuXHQgICAgICAgICAgICAweGY4MDAwMDAwOiAweDgwMDAwMCxcblx0ICAgICAgICAgICAgMHgxOiAweDgwMDAsXG5cdCAgICAgICAgICAgIDB4MTAwMDAwMDE6IDB4Mixcblx0ICAgICAgICAgICAgMHgyMDAwMDAwMTogMHg4MDgyMDAsXG5cdCAgICAgICAgICAgIDB4MzAwMDAwMDE6IDB4ODAwMDAwLFxuXHQgICAgICAgICAgICAweDQwMDAwMDAxOiAweDgwODAwMixcblx0ICAgICAgICAgICAgMHg1MDAwMDAwMTogMHg4MjAwLFxuXHQgICAgICAgICAgICAweDYwMDAwMDAxOiAweDIwMCxcblx0ICAgICAgICAgICAgMHg3MDAwMDAwMTogMHg4MDAyMDIsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMDE6IDB4ODA4MjAyLFxuXHQgICAgICAgICAgICAweDkwMDAwMDAxOiAweDgwODAwMCxcblx0ICAgICAgICAgICAgMHhhMDAwMDAwMTogMHg4MDAwMDIsXG5cdCAgICAgICAgICAgIDB4YjAwMDAwMDE6IDB4ODIwMixcblx0ICAgICAgICAgICAgMHhjMDAwMDAwMTogMHgyMDIsXG5cdCAgICAgICAgICAgIDB4ZDAwMDAwMDE6IDB4ODAwMjAwLFxuXHQgICAgICAgICAgICAweGUwMDAwMDAxOiAweDgwMDIsXG5cdCAgICAgICAgICAgIDB4ZjAwMDAwMDE6IDB4MCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxOiAweDgwODIwMixcblx0ICAgICAgICAgICAgMHgxODAwMDAwMTogMHg4MDgwMDAsXG5cdCAgICAgICAgICAgIDB4MjgwMDAwMDE6IDB4ODAwMDAwLFxuXHQgICAgICAgICAgICAweDM4MDAwMDAxOiAweDIwMCxcblx0ICAgICAgICAgICAgMHg0ODAwMDAwMTogMHg4MDAwLFxuXHQgICAgICAgICAgICAweDU4MDAwMDAxOiAweDgwMDAwMixcblx0ICAgICAgICAgICAgMHg2ODAwMDAwMTogMHgyLFxuXHQgICAgICAgICAgICAweDc4MDAwMDAxOiAweDgyMDIsXG5cdCAgICAgICAgICAgIDB4ODgwMDAwMDE6IDB4ODAwMixcblx0ICAgICAgICAgICAgMHg5ODAwMDAwMTogMHg4MDAyMDIsXG5cdCAgICAgICAgICAgIDB4YTgwMDAwMDE6IDB4MjAyLFxuXHQgICAgICAgICAgICAweGI4MDAwMDAxOiAweDgwODIwMCxcblx0ICAgICAgICAgICAgMHhjODAwMDAwMTogMHg4MDAyMDAsXG5cdCAgICAgICAgICAgIDB4ZDgwMDAwMDE6IDB4MCxcblx0ICAgICAgICAgICAgMHhlODAwMDAwMTogMHg4MjAwLFxuXHQgICAgICAgICAgICAweGY4MDAwMDAxOiAweDgwODAwMlxuXHQgICAgICAgIH0sXG5cdCAgICAgICAge1xuXHQgICAgICAgICAgICAweDA6IDB4NDAwODQwMTAsXG5cdCAgICAgICAgICAgIDB4MTAwMDAwMDogMHg0MDAwLFxuXHQgICAgICAgICAgICAweDIwMDAwMDA6IDB4ODAwMDAsXG5cdCAgICAgICAgICAgIDB4MzAwMDAwMDogMHg0MDA4MDAxMCxcblx0ICAgICAgICAgICAgMHg0MDAwMDAwOiAweDQwMDAwMDEwLFxuXHQgICAgICAgICAgICAweDUwMDAwMDA6IDB4NDAwODQwMDAsXG5cdCAgICAgICAgICAgIDB4NjAwMDAwMDogMHg0MDAwNDAwMCxcblx0ICAgICAgICAgICAgMHg3MDAwMDAwOiAweDEwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDA6IDB4ODQwMDAsXG5cdCAgICAgICAgICAgIDB4OTAwMDAwMDogMHg0MDAwNDAxMCxcblx0ICAgICAgICAgICAgMHhhMDAwMDAwOiAweDQwMDAwMDAwLFxuXHQgICAgICAgICAgICAweGIwMDAwMDA6IDB4ODQwMTAsXG5cdCAgICAgICAgICAgIDB4YzAwMDAwMDogMHg4MDAxMCxcblx0ICAgICAgICAgICAgMHhkMDAwMDAwOiAweDAsXG5cdCAgICAgICAgICAgIDB4ZTAwMDAwMDogMHg0MDEwLFxuXHQgICAgICAgICAgICAweGYwMDAwMDA6IDB4NDAwODAwMDAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwOiAweDQwMDA0MDAwLFxuXHQgICAgICAgICAgICAweDE4MDAwMDA6IDB4ODQwMTAsXG5cdCAgICAgICAgICAgIDB4MjgwMDAwMDogMHgxMCxcblx0ICAgICAgICAgICAgMHgzODAwMDAwOiAweDQwMDA0MDEwLFxuXHQgICAgICAgICAgICAweDQ4MDAwMDA6IDB4NDAwODQwMTAsXG5cdCAgICAgICAgICAgIDB4NTgwMDAwMDogMHg0MDAwMDAwMCxcblx0ICAgICAgICAgICAgMHg2ODAwMDAwOiAweDgwMDAwLFxuXHQgICAgICAgICAgICAweDc4MDAwMDA6IDB4NDAwODAwMTAsXG5cdCAgICAgICAgICAgIDB4ODgwMDAwMDogMHg4MDAxMCxcblx0ICAgICAgICAgICAgMHg5ODAwMDAwOiAweDAsXG5cdCAgICAgICAgICAgIDB4YTgwMDAwMDogMHg0MDAwLFxuXHQgICAgICAgICAgICAweGI4MDAwMDA6IDB4NDAwODAwMDAsXG5cdCAgICAgICAgICAgIDB4YzgwMDAwMDogMHg0MDAwMDAxMCxcblx0ICAgICAgICAgICAgMHhkODAwMDAwOiAweDg0MDAwLFxuXHQgICAgICAgICAgICAweGU4MDAwMDA6IDB4NDAwODQwMDAsXG5cdCAgICAgICAgICAgIDB4ZjgwMDAwMDogMHg0MDEwLFxuXHQgICAgICAgICAgICAweDEwMDAwMDAwOiAweDAsXG5cdCAgICAgICAgICAgIDB4MTEwMDAwMDA6IDB4NDAwODAwMTAsXG5cdCAgICAgICAgICAgIDB4MTIwMDAwMDA6IDB4NDAwMDQwMTAsXG5cdCAgICAgICAgICAgIDB4MTMwMDAwMDA6IDB4NDAwODQwMDAsXG5cdCAgICAgICAgICAgIDB4MTQwMDAwMDA6IDB4NDAwODAwMDAsXG5cdCAgICAgICAgICAgIDB4MTUwMDAwMDA6IDB4MTAsXG5cdCAgICAgICAgICAgIDB4MTYwMDAwMDA6IDB4ODQwMTAsXG5cdCAgICAgICAgICAgIDB4MTcwMDAwMDA6IDB4NDAwMCxcblx0ICAgICAgICAgICAgMHgxODAwMDAwMDogMHg0MDEwLFxuXHQgICAgICAgICAgICAweDE5MDAwMDAwOiAweDgwMDAwLFxuXHQgICAgICAgICAgICAweDFhMDAwMDAwOiAweDgwMDEwLFxuXHQgICAgICAgICAgICAweDFiMDAwMDAwOiAweDQwMDAwMDEwLFxuXHQgICAgICAgICAgICAweDFjMDAwMDAwOiAweDg0MDAwLFxuXHQgICAgICAgICAgICAweDFkMDAwMDAwOiAweDQwMDA0MDAwLFxuXHQgICAgICAgICAgICAweDFlMDAwMDAwOiAweDQwMDAwMDAwLFxuXHQgICAgICAgICAgICAweDFmMDAwMDAwOiAweDQwMDg0MDEwLFxuXHQgICAgICAgICAgICAweDEwODAwMDAwOiAweDg0MDEwLFxuXHQgICAgICAgICAgICAweDExODAwMDAwOiAweDgwMDAwLFxuXHQgICAgICAgICAgICAweDEyODAwMDAwOiAweDQwMDgwMDAwLFxuXHQgICAgICAgICAgICAweDEzODAwMDAwOiAweDQwMDAsXG5cdCAgICAgICAgICAgIDB4MTQ4MDAwMDA6IDB4NDAwMDQwMDAsXG5cdCAgICAgICAgICAgIDB4MTU4MDAwMDA6IDB4NDAwODQwMTAsXG5cdCAgICAgICAgICAgIDB4MTY4MDAwMDA6IDB4MTAsXG5cdCAgICAgICAgICAgIDB4MTc4MDAwMDA6IDB4NDAwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTg4MDAwMDA6IDB4NDAwODQwMDAsXG5cdCAgICAgICAgICAgIDB4MTk4MDAwMDA6IDB4NDAwMDAwMTAsXG5cdCAgICAgICAgICAgIDB4MWE4MDAwMDA6IDB4NDAwMDQwMTAsXG5cdCAgICAgICAgICAgIDB4MWI4MDAwMDA6IDB4ODAwMTAsXG5cdCAgICAgICAgICAgIDB4MWM4MDAwMDA6IDB4MCxcblx0ICAgICAgICAgICAgMHgxZDgwMDAwMDogMHg0MDEwLFxuXHQgICAgICAgICAgICAweDFlODAwMDAwOiAweDQwMDgwMDEwLFxuXHQgICAgICAgICAgICAweDFmODAwMDAwOiAweDg0MDAwXG5cdCAgICAgICAgfSxcblx0ICAgICAgICB7XG5cdCAgICAgICAgICAgIDB4MDogMHgxMDQsXG5cdCAgICAgICAgICAgIDB4MTAwMDAwOiAweDAsXG5cdCAgICAgICAgICAgIDB4MjAwMDAwOiAweDQwMDAxMDAsXG5cdCAgICAgICAgICAgIDB4MzAwMDAwOiAweDEwMTA0LFxuXHQgICAgICAgICAgICAweDQwMDAwMDogMHgxMDAwNCxcblx0ICAgICAgICAgICAgMHg1MDAwMDA6IDB4NDAwMDAwNCxcblx0ICAgICAgICAgICAgMHg2MDAwMDA6IDB4NDAxMDEwNCxcblx0ICAgICAgICAgICAgMHg3MDAwMDA6IDB4NDAxMDAwMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDA6IDB4NDAwMDAwMCxcblx0ICAgICAgICAgICAgMHg5MDAwMDA6IDB4NDAxMDEwMCxcblx0ICAgICAgICAgICAgMHhhMDAwMDA6IDB4MTAxMDAsXG5cdCAgICAgICAgICAgIDB4YjAwMDAwOiAweDQwMTAwMDQsXG5cdCAgICAgICAgICAgIDB4YzAwMDAwOiAweDQwMDAxMDQsXG5cdCAgICAgICAgICAgIDB4ZDAwMDAwOiAweDEwMDAwLFxuXHQgICAgICAgICAgICAweGUwMDAwMDogMHg0LFxuXHQgICAgICAgICAgICAweGYwMDAwMDogMHgxMDAsXG5cdCAgICAgICAgICAgIDB4ODAwMDA6IDB4NDAxMDEwMCxcblx0ICAgICAgICAgICAgMHgxODAwMDA6IDB4NDAxMDAwNCxcblx0ICAgICAgICAgICAgMHgyODAwMDA6IDB4MCxcblx0ICAgICAgICAgICAgMHgzODAwMDA6IDB4NDAwMDEwMCxcblx0ICAgICAgICAgICAgMHg0ODAwMDA6IDB4NDAwMDAwNCxcblx0ICAgICAgICAgICAgMHg1ODAwMDA6IDB4MTAwMDAsXG5cdCAgICAgICAgICAgIDB4NjgwMDAwOiAweDEwMDA0LFxuXHQgICAgICAgICAgICAweDc4MDAwMDogMHgxMDQsXG5cdCAgICAgICAgICAgIDB4ODgwMDAwOiAweDQsXG5cdCAgICAgICAgICAgIDB4OTgwMDAwOiAweDEwMCxcblx0ICAgICAgICAgICAgMHhhODAwMDA6IDB4NDAxMDAwMCxcblx0ICAgICAgICAgICAgMHhiODAwMDA6IDB4MTAxMDQsXG5cdCAgICAgICAgICAgIDB4YzgwMDAwOiAweDEwMTAwLFxuXHQgICAgICAgICAgICAweGQ4MDAwMDogMHg0MDAwMTA0LFxuXHQgICAgICAgICAgICAweGU4MDAwMDogMHg0MDEwMTA0LFxuXHQgICAgICAgICAgICAweGY4MDAwMDogMHg0MDAwMDAwLFxuXHQgICAgICAgICAgICAweDEwMDAwMDA6IDB4NDAxMDEwMCxcblx0ICAgICAgICAgICAgMHgxMTAwMDAwOiAweDEwMDA0LFxuXHQgICAgICAgICAgICAweDEyMDAwMDA6IDB4MTAwMDAsXG5cdCAgICAgICAgICAgIDB4MTMwMDAwMDogMHg0MDAwMTAwLFxuXHQgICAgICAgICAgICAweDE0MDAwMDA6IDB4MTAwLFxuXHQgICAgICAgICAgICAweDE1MDAwMDA6IDB4NDAxMDEwNCxcblx0ICAgICAgICAgICAgMHgxNjAwMDAwOiAweDQwMDAwMDQsXG5cdCAgICAgICAgICAgIDB4MTcwMDAwMDogMHgwLFxuXHQgICAgICAgICAgICAweDE4MDAwMDA6IDB4NDAwMDEwNCxcblx0ICAgICAgICAgICAgMHgxOTAwMDAwOiAweDQwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MWEwMDAwMDogMHg0LFxuXHQgICAgICAgICAgICAweDFiMDAwMDA6IDB4MTAxMDAsXG5cdCAgICAgICAgICAgIDB4MWMwMDAwMDogMHg0MDEwMDAwLFxuXHQgICAgICAgICAgICAweDFkMDAwMDA6IDB4MTA0LFxuXHQgICAgICAgICAgICAweDFlMDAwMDA6IDB4MTAxMDQsXG5cdCAgICAgICAgICAgIDB4MWYwMDAwMDogMHg0MDEwMDA0LFxuXHQgICAgICAgICAgICAweDEwODAwMDA6IDB4NDAwMDAwMCxcblx0ICAgICAgICAgICAgMHgxMTgwMDAwOiAweDEwNCxcblx0ICAgICAgICAgICAgMHgxMjgwMDAwOiAweDQwMTAxMDAsXG5cdCAgICAgICAgICAgIDB4MTM4MDAwMDogMHgwLFxuXHQgICAgICAgICAgICAweDE0ODAwMDA6IDB4MTAwMDQsXG5cdCAgICAgICAgICAgIDB4MTU4MDAwMDogMHg0MDAwMTAwLFxuXHQgICAgICAgICAgICAweDE2ODAwMDA6IDB4MTAwLFxuXHQgICAgICAgICAgICAweDE3ODAwMDA6IDB4NDAxMDAwNCxcblx0ICAgICAgICAgICAgMHgxODgwMDAwOiAweDEwMDAwLFxuXHQgICAgICAgICAgICAweDE5ODAwMDA6IDB4NDAxMDEwNCxcblx0ICAgICAgICAgICAgMHgxYTgwMDAwOiAweDEwMTA0LFxuXHQgICAgICAgICAgICAweDFiODAwMDA6IDB4NDAwMDAwNCxcblx0ICAgICAgICAgICAgMHgxYzgwMDAwOiAweDQwMDAxMDQsXG5cdCAgICAgICAgICAgIDB4MWQ4MDAwMDogMHg0MDEwMDAwLFxuXHQgICAgICAgICAgICAweDFlODAwMDA6IDB4NCxcblx0ICAgICAgICAgICAgMHgxZjgwMDAwOiAweDEwMTAwXG5cdCAgICAgICAgfSxcblx0ICAgICAgICB7XG5cdCAgICAgICAgICAgIDB4MDogMHg4MDQwMTAwMCxcblx0ICAgICAgICAgICAgMHgxMDAwMDogMHg4MDAwMTA0MCxcblx0ICAgICAgICAgICAgMHgyMDAwMDogMHg0MDEwNDAsXG5cdCAgICAgICAgICAgIDB4MzAwMDA6IDB4ODA0MDAwMDAsXG5cdCAgICAgICAgICAgIDB4NDAwMDA6IDB4MCxcblx0ICAgICAgICAgICAgMHg1MDAwMDogMHg0MDEwMDAsXG5cdCAgICAgICAgICAgIDB4NjAwMDA6IDB4ODAwMDAwNDAsXG5cdCAgICAgICAgICAgIDB4NzAwMDA6IDB4NDAwMDQwLFxuXHQgICAgICAgICAgICAweDgwMDAwOiAweDgwMDAwMDAwLFxuXHQgICAgICAgICAgICAweDkwMDAwOiAweDQwMDAwMCxcblx0ICAgICAgICAgICAgMHhhMDAwMDogMHg0MCxcblx0ICAgICAgICAgICAgMHhiMDAwMDogMHg4MDAwMTAwMCxcblx0ICAgICAgICAgICAgMHhjMDAwMDogMHg4MDQwMDA0MCxcblx0ICAgICAgICAgICAgMHhkMDAwMDogMHgxMDQwLFxuXHQgICAgICAgICAgICAweGUwMDAwOiAweDEwMDAsXG5cdCAgICAgICAgICAgIDB4ZjAwMDA6IDB4ODA0MDEwNDAsXG5cdCAgICAgICAgICAgIDB4ODAwMDogMHg4MDAwMTA0MCxcblx0ICAgICAgICAgICAgMHgxODAwMDogMHg0MCxcblx0ICAgICAgICAgICAgMHgyODAwMDogMHg4MDQwMDA0MCxcblx0ICAgICAgICAgICAgMHgzODAwMDogMHg4MDAwMTAwMCxcblx0ICAgICAgICAgICAgMHg0ODAwMDogMHg0MDEwMDAsXG5cdCAgICAgICAgICAgIDB4NTgwMDA6IDB4ODA0MDEwNDAsXG5cdCAgICAgICAgICAgIDB4NjgwMDA6IDB4MCxcblx0ICAgICAgICAgICAgMHg3ODAwMDogMHg4MDQwMDAwMCxcblx0ICAgICAgICAgICAgMHg4ODAwMDogMHgxMDAwLFxuXHQgICAgICAgICAgICAweDk4MDAwOiAweDgwNDAxMDAwLFxuXHQgICAgICAgICAgICAweGE4MDAwOiAweDQwMDAwMCxcblx0ICAgICAgICAgICAgMHhiODAwMDogMHgxMDQwLFxuXHQgICAgICAgICAgICAweGM4MDAwOiAweDgwMDAwMDAwLFxuXHQgICAgICAgICAgICAweGQ4MDAwOiAweDQwMDA0MCxcblx0ICAgICAgICAgICAgMHhlODAwMDogMHg0MDEwNDAsXG5cdCAgICAgICAgICAgIDB4ZjgwMDA6IDB4ODAwMDAwNDAsXG5cdCAgICAgICAgICAgIDB4MTAwMDAwOiAweDQwMDA0MCxcblx0ICAgICAgICAgICAgMHgxMTAwMDA6IDB4NDAxMDAwLFxuXHQgICAgICAgICAgICAweDEyMDAwMDogMHg4MDAwMDA0MCxcblx0ICAgICAgICAgICAgMHgxMzAwMDA6IDB4MCxcblx0ICAgICAgICAgICAgMHgxNDAwMDA6IDB4MTA0MCxcblx0ICAgICAgICAgICAgMHgxNTAwMDA6IDB4ODA0MDAwNDAsXG5cdCAgICAgICAgICAgIDB4MTYwMDAwOiAweDgwNDAxMDAwLFxuXHQgICAgICAgICAgICAweDE3MDAwMDogMHg4MDAwMTA0MCxcblx0ICAgICAgICAgICAgMHgxODAwMDA6IDB4ODA0MDEwNDAsXG5cdCAgICAgICAgICAgIDB4MTkwMDAwOiAweDgwMDAwMDAwLFxuXHQgICAgICAgICAgICAweDFhMDAwMDogMHg4MDQwMDAwMCxcblx0ICAgICAgICAgICAgMHgxYjAwMDA6IDB4NDAxMDQwLFxuXHQgICAgICAgICAgICAweDFjMDAwMDogMHg4MDAwMTAwMCxcblx0ICAgICAgICAgICAgMHgxZDAwMDA6IDB4NDAwMDAwLFxuXHQgICAgICAgICAgICAweDFlMDAwMDogMHg0MCxcblx0ICAgICAgICAgICAgMHgxZjAwMDA6IDB4MTAwMCxcblx0ICAgICAgICAgICAgMHgxMDgwMDA6IDB4ODA0MDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTE4MDAwOiAweDgwNDAxMDQwLFxuXHQgICAgICAgICAgICAweDEyODAwMDogMHgwLFxuXHQgICAgICAgICAgICAweDEzODAwMDogMHg0MDEwMDAsXG5cdCAgICAgICAgICAgIDB4MTQ4MDAwOiAweDQwMDA0MCxcblx0ICAgICAgICAgICAgMHgxNTgwMDA6IDB4ODAwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTY4MDAwOiAweDgwMDAxMDQwLFxuXHQgICAgICAgICAgICAweDE3ODAwMDogMHg0MCxcblx0ICAgICAgICAgICAgMHgxODgwMDA6IDB4ODAwMDAwNDAsXG5cdCAgICAgICAgICAgIDB4MTk4MDAwOiAweDEwMDAsXG5cdCAgICAgICAgICAgIDB4MWE4MDAwOiAweDgwMDAxMDAwLFxuXHQgICAgICAgICAgICAweDFiODAwMDogMHg4MDQwMDA0MCxcblx0ICAgICAgICAgICAgMHgxYzgwMDA6IDB4MTA0MCxcblx0ICAgICAgICAgICAgMHgxZDgwMDA6IDB4ODA0MDEwMDAsXG5cdCAgICAgICAgICAgIDB4MWU4MDAwOiAweDQwMDAwMCxcblx0ICAgICAgICAgICAgMHgxZjgwMDA6IDB4NDAxMDQwXG5cdCAgICAgICAgfSxcblx0ICAgICAgICB7XG5cdCAgICAgICAgICAgIDB4MDogMHg4MCxcblx0ICAgICAgICAgICAgMHgxMDAwOiAweDEwNDAwMDAsXG5cdCAgICAgICAgICAgIDB4MjAwMDogMHg0MDAwMCxcblx0ICAgICAgICAgICAgMHgzMDAwOiAweDIwMDAwMDAwLFxuXHQgICAgICAgICAgICAweDQwMDA6IDB4MjAwNDAwODAsXG5cdCAgICAgICAgICAgIDB4NTAwMDogMHgxMDAwMDgwLFxuXHQgICAgICAgICAgICAweDYwMDA6IDB4MjEwMDAwODAsXG5cdCAgICAgICAgICAgIDB4NzAwMDogMHg0MDA4MCxcblx0ICAgICAgICAgICAgMHg4MDAwOiAweDEwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4OTAwMDogMHgyMDA0MDAwMCxcblx0ICAgICAgICAgICAgMHhhMDAwOiAweDIwMDAwMDgwLFxuXHQgICAgICAgICAgICAweGIwMDA6IDB4MjEwNDAwODAsXG5cdCAgICAgICAgICAgIDB4YzAwMDogMHgyMTA0MDAwMCxcblx0ICAgICAgICAgICAgMHhkMDAwOiAweDAsXG5cdCAgICAgICAgICAgIDB4ZTAwMDogMHgxMDQwMDgwLFxuXHQgICAgICAgICAgICAweGYwMDA6IDB4MjEwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4ODAwOiAweDEwNDAwODAsXG5cdCAgICAgICAgICAgIDB4MTgwMDogMHgyMTAwMDA4MCxcblx0ICAgICAgICAgICAgMHgyODAwOiAweDgwLFxuXHQgICAgICAgICAgICAweDM4MDA6IDB4MTA0MDAwMCxcblx0ICAgICAgICAgICAgMHg0ODAwOiAweDQwMDAwLFxuXHQgICAgICAgICAgICAweDU4MDA6IDB4MjAwNDAwODAsXG5cdCAgICAgICAgICAgIDB4NjgwMDogMHgyMTA0MDAwMCxcblx0ICAgICAgICAgICAgMHg3ODAwOiAweDIwMDAwMDAwLFxuXHQgICAgICAgICAgICAweDg4MDA6IDB4MjAwNDAwMDAsXG5cdCAgICAgICAgICAgIDB4OTgwMDogMHgwLFxuXHQgICAgICAgICAgICAweGE4MDA6IDB4MjEwNDAwODAsXG5cdCAgICAgICAgICAgIDB4YjgwMDogMHgxMDAwMDgwLFxuXHQgICAgICAgICAgICAweGM4MDA6IDB4MjAwMDAwODAsXG5cdCAgICAgICAgICAgIDB4ZDgwMDogMHgyMTAwMDAwMCxcblx0ICAgICAgICAgICAgMHhlODAwOiAweDEwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4ZjgwMDogMHg0MDA4MCxcblx0ICAgICAgICAgICAgMHgxMDAwMDogMHg0MDAwMCxcblx0ICAgICAgICAgICAgMHgxMTAwMDogMHg4MCxcblx0ICAgICAgICAgICAgMHgxMjAwMDogMHgyMDAwMDAwMCxcblx0ICAgICAgICAgICAgMHgxMzAwMDogMHgyMTAwMDA4MCxcblx0ICAgICAgICAgICAgMHgxNDAwMDogMHgxMDAwMDgwLFxuXHQgICAgICAgICAgICAweDE1MDAwOiAweDIxMDQwMDAwLFxuXHQgICAgICAgICAgICAweDE2MDAwOiAweDIwMDQwMDgwLFxuXHQgICAgICAgICAgICAweDE3MDAwOiAweDEwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTgwMDA6IDB4MjEwNDAwODAsXG5cdCAgICAgICAgICAgIDB4MTkwMDA6IDB4MjEwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MWEwMDA6IDB4MTA0MDAwMCxcblx0ICAgICAgICAgICAgMHgxYjAwMDogMHgyMDA0MDAwMCxcblx0ICAgICAgICAgICAgMHgxYzAwMDogMHg0MDA4MCxcblx0ICAgICAgICAgICAgMHgxZDAwMDogMHgyMDAwMDA4MCxcblx0ICAgICAgICAgICAgMHgxZTAwMDogMHgwLFxuXHQgICAgICAgICAgICAweDFmMDAwOiAweDEwNDAwODAsXG5cdCAgICAgICAgICAgIDB4MTA4MDA6IDB4MjEwMDAwODAsXG5cdCAgICAgICAgICAgIDB4MTE4MDA6IDB4MTAwMDAwMCxcblx0ICAgICAgICAgICAgMHgxMjgwMDogMHgxMDQwMDAwLFxuXHQgICAgICAgICAgICAweDEzODAwOiAweDIwMDQwMDgwLFxuXHQgICAgICAgICAgICAweDE0ODAwOiAweDIwMDAwMDAwLFxuXHQgICAgICAgICAgICAweDE1ODAwOiAweDEwNDAwODAsXG5cdCAgICAgICAgICAgIDB4MTY4MDA6IDB4ODAsXG5cdCAgICAgICAgICAgIDB4MTc4MDA6IDB4MjEwNDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTg4MDA6IDB4NDAwODAsXG5cdCAgICAgICAgICAgIDB4MTk4MDA6IDB4MjEwNDAwODAsXG5cdCAgICAgICAgICAgIDB4MWE4MDA6IDB4MCxcblx0ICAgICAgICAgICAgMHgxYjgwMDogMHgyMTAwMDAwMCxcblx0ICAgICAgICAgICAgMHgxYzgwMDogMHgxMDAwMDgwLFxuXHQgICAgICAgICAgICAweDFkODAwOiAweDQwMDAwLFxuXHQgICAgICAgICAgICAweDFlODAwOiAweDIwMDQwMDAwLFxuXHQgICAgICAgICAgICAweDFmODAwOiAweDIwMDAwMDgwXG5cdCAgICAgICAgfSxcblx0ICAgICAgICB7XG5cdCAgICAgICAgICAgIDB4MDogMHgxMDAwMDAwOCxcblx0ICAgICAgICAgICAgMHgxMDA6IDB4MjAwMCxcblx0ICAgICAgICAgICAgMHgyMDA6IDB4MTAyMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MzAwOiAweDEwMjAyMDA4LFxuXHQgICAgICAgICAgICAweDQwMDogMHgxMDAwMjAwMCxcblx0ICAgICAgICAgICAgMHg1MDA6IDB4MjAwMDAwLFxuXHQgICAgICAgICAgICAweDYwMDogMHgyMDAwMDgsXG5cdCAgICAgICAgICAgIDB4NzAwOiAweDEwMDAwMDAwLFxuXHQgICAgICAgICAgICAweDgwMDogMHgwLFxuXHQgICAgICAgICAgICAweDkwMDogMHgxMDAwMjAwOCxcblx0ICAgICAgICAgICAgMHhhMDA6IDB4MjAyMDAwLFxuXHQgICAgICAgICAgICAweGIwMDogMHg4LFxuXHQgICAgICAgICAgICAweGMwMDogMHgxMDIwMDAwOCxcblx0ICAgICAgICAgICAgMHhkMDA6IDB4MjAyMDA4LFxuXHQgICAgICAgICAgICAweGUwMDogMHgyMDA4LFxuXHQgICAgICAgICAgICAweGYwMDogMHgxMDIwMjAwMCxcblx0ICAgICAgICAgICAgMHg4MDogMHgxMDIwMDAwMCxcblx0ICAgICAgICAgICAgMHgxODA6IDB4MTAyMDIwMDgsXG5cdCAgICAgICAgICAgIDB4MjgwOiAweDgsXG5cdCAgICAgICAgICAgIDB4MzgwOiAweDIwMDAwMCxcblx0ICAgICAgICAgICAgMHg0ODA6IDB4MjAyMDA4LFxuXHQgICAgICAgICAgICAweDU4MDogMHgxMDAwMDAwOCxcblx0ICAgICAgICAgICAgMHg2ODA6IDB4MTAwMDIwMDAsXG5cdCAgICAgICAgICAgIDB4NzgwOiAweDIwMDgsXG5cdCAgICAgICAgICAgIDB4ODgwOiAweDIwMDAwOCxcblx0ICAgICAgICAgICAgMHg5ODA6IDB4MjAwMCxcblx0ICAgICAgICAgICAgMHhhODA6IDB4MTAwMDIwMDgsXG5cdCAgICAgICAgICAgIDB4YjgwOiAweDEwMjAwMDA4LFxuXHQgICAgICAgICAgICAweGM4MDogMHgwLFxuXHQgICAgICAgICAgICAweGQ4MDogMHgxMDIwMjAwMCxcblx0ICAgICAgICAgICAgMHhlODA6IDB4MjAyMDAwLFxuXHQgICAgICAgICAgICAweGY4MDogMHgxMDAwMDAwMCxcblx0ICAgICAgICAgICAgMHgxMDAwOiAweDEwMDAyMDAwLFxuXHQgICAgICAgICAgICAweDExMDA6IDB4MTAyMDAwMDgsXG5cdCAgICAgICAgICAgIDB4MTIwMDogMHgxMDIwMjAwOCxcblx0ICAgICAgICAgICAgMHgxMzAwOiAweDIwMDgsXG5cdCAgICAgICAgICAgIDB4MTQwMDogMHgyMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTUwMDogMHgxMDAwMDAwMCxcblx0ICAgICAgICAgICAgMHgxNjAwOiAweDEwMDAwMDA4LFxuXHQgICAgICAgICAgICAweDE3MDA6IDB4MjAyMDAwLFxuXHQgICAgICAgICAgICAweDE4MDA6IDB4MjAyMDA4LFxuXHQgICAgICAgICAgICAweDE5MDA6IDB4MCxcblx0ICAgICAgICAgICAgMHgxYTAwOiAweDgsXG5cdCAgICAgICAgICAgIDB4MWIwMDogMHgxMDIwMDAwMCxcblx0ICAgICAgICAgICAgMHgxYzAwOiAweDIwMDAsXG5cdCAgICAgICAgICAgIDB4MWQwMDogMHgxMDAwMjAwOCxcblx0ICAgICAgICAgICAgMHgxZTAwOiAweDEwMjAyMDAwLFxuXHQgICAgICAgICAgICAweDFmMDA6IDB4MjAwMDA4LFxuXHQgICAgICAgICAgICAweDEwODA6IDB4OCxcblx0ICAgICAgICAgICAgMHgxMTgwOiAweDIwMjAwMCxcblx0ICAgICAgICAgICAgMHgxMjgwOiAweDIwMDAwMCxcblx0ICAgICAgICAgICAgMHgxMzgwOiAweDEwMDAwMDA4LFxuXHQgICAgICAgICAgICAweDE0ODA6IDB4MTAwMDIwMDAsXG5cdCAgICAgICAgICAgIDB4MTU4MDogMHgyMDA4LFxuXHQgICAgICAgICAgICAweDE2ODA6IDB4MTAyMDIwMDgsXG5cdCAgICAgICAgICAgIDB4MTc4MDogMHgxMDIwMDAwMCxcblx0ICAgICAgICAgICAgMHgxODgwOiAweDEwMjAyMDAwLFxuXHQgICAgICAgICAgICAweDE5ODA6IDB4MTAyMDAwMDgsXG5cdCAgICAgICAgICAgIDB4MWE4MDogMHgyMDAwLFxuXHQgICAgICAgICAgICAweDFiODA6IDB4MjAyMDA4LFxuXHQgICAgICAgICAgICAweDFjODA6IDB4MjAwMDA4LFxuXHQgICAgICAgICAgICAweDFkODA6IDB4MCxcblx0ICAgICAgICAgICAgMHgxZTgwOiAweDEwMDAwMDAwLFxuXHQgICAgICAgICAgICAweDFmODA6IDB4MTAwMDIwMDhcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHtcblx0ICAgICAgICAgICAgMHgwOiAweDEwMDAwMCxcblx0ICAgICAgICAgICAgMHgxMDogMHgyMDAwNDAxLFxuXHQgICAgICAgICAgICAweDIwOiAweDQwMCxcblx0ICAgICAgICAgICAgMHgzMDogMHgxMDA0MDEsXG5cdCAgICAgICAgICAgIDB4NDA6IDB4MjEwMDQwMSxcblx0ICAgICAgICAgICAgMHg1MDogMHgwLFxuXHQgICAgICAgICAgICAweDYwOiAweDEsXG5cdCAgICAgICAgICAgIDB4NzA6IDB4MjEwMDAwMSxcblx0ICAgICAgICAgICAgMHg4MDogMHgyMDAwNDAwLFxuXHQgICAgICAgICAgICAweDkwOiAweDEwMDAwMSxcblx0ICAgICAgICAgICAgMHhhMDogMHgyMDAwMDAxLFxuXHQgICAgICAgICAgICAweGIwOiAweDIxMDA0MDAsXG5cdCAgICAgICAgICAgIDB4YzA6IDB4MjEwMDAwMCxcblx0ICAgICAgICAgICAgMHhkMDogMHg0MDEsXG5cdCAgICAgICAgICAgIDB4ZTA6IDB4MTAwNDAwLFxuXHQgICAgICAgICAgICAweGYwOiAweDIwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4ODogMHgyMTAwMDAxLFxuXHQgICAgICAgICAgICAweDE4OiAweDAsXG5cdCAgICAgICAgICAgIDB4Mjg6IDB4MjAwMDQwMSxcblx0ICAgICAgICAgICAgMHgzODogMHgyMTAwNDAwLFxuXHQgICAgICAgICAgICAweDQ4OiAweDEwMDAwMCxcblx0ICAgICAgICAgICAgMHg1ODogMHgyMDAwMDAxLFxuXHQgICAgICAgICAgICAweDY4OiAweDIwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4Nzg6IDB4NDAxLFxuXHQgICAgICAgICAgICAweDg4OiAweDEwMDQwMSxcblx0ICAgICAgICAgICAgMHg5ODogMHgyMDAwNDAwLFxuXHQgICAgICAgICAgICAweGE4OiAweDIxMDAwMDAsXG5cdCAgICAgICAgICAgIDB4Yjg6IDB4MTAwMDAxLFxuXHQgICAgICAgICAgICAweGM4OiAweDQwMCxcblx0ICAgICAgICAgICAgMHhkODogMHgyMTAwNDAxLFxuXHQgICAgICAgICAgICAweGU4OiAweDEsXG5cdCAgICAgICAgICAgIDB4Zjg6IDB4MTAwNDAwLFxuXHQgICAgICAgICAgICAweDEwMDogMHgyMDAwMDAwLFxuXHQgICAgICAgICAgICAweDExMDogMHgxMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTIwOiAweDIwMDA0MDEsXG5cdCAgICAgICAgICAgIDB4MTMwOiAweDIxMDAwMDEsXG5cdCAgICAgICAgICAgIDB4MTQwOiAweDEwMDAwMSxcblx0ICAgICAgICAgICAgMHgxNTA6IDB4MjAwMDQwMCxcblx0ICAgICAgICAgICAgMHgxNjA6IDB4MjEwMDQwMCxcblx0ICAgICAgICAgICAgMHgxNzA6IDB4MTAwNDAxLFxuXHQgICAgICAgICAgICAweDE4MDogMHg0MDEsXG5cdCAgICAgICAgICAgIDB4MTkwOiAweDIxMDA0MDEsXG5cdCAgICAgICAgICAgIDB4MWEwOiAweDEwMDQwMCxcblx0ICAgICAgICAgICAgMHgxYjA6IDB4MSxcblx0ICAgICAgICAgICAgMHgxYzA6IDB4MCxcblx0ICAgICAgICAgICAgMHgxZDA6IDB4MjEwMDAwMCxcblx0ICAgICAgICAgICAgMHgxZTA6IDB4MjAwMDAwMSxcblx0ICAgICAgICAgICAgMHgxZjA6IDB4NDAwLFxuXHQgICAgICAgICAgICAweDEwODogMHgxMDA0MDAsXG5cdCAgICAgICAgICAgIDB4MTE4OiAweDIwMDA0MDEsXG5cdCAgICAgICAgICAgIDB4MTI4OiAweDIxMDAwMDEsXG5cdCAgICAgICAgICAgIDB4MTM4OiAweDEsXG5cdCAgICAgICAgICAgIDB4MTQ4OiAweDIwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTU4OiAweDEwMDAwMCxcblx0ICAgICAgICAgICAgMHgxNjg6IDB4NDAxLFxuXHQgICAgICAgICAgICAweDE3ODogMHgyMTAwNDAwLFxuXHQgICAgICAgICAgICAweDE4ODogMHgyMDAwMDAxLFxuXHQgICAgICAgICAgICAweDE5ODogMHgyMTAwMDAwLFxuXHQgICAgICAgICAgICAweDFhODogMHgwLFxuXHQgICAgICAgICAgICAweDFiODogMHgyMTAwNDAxLFxuXHQgICAgICAgICAgICAweDFjODogMHgxMDA0MDEsXG5cdCAgICAgICAgICAgIDB4MWQ4OiAweDQwMCxcblx0ICAgICAgICAgICAgMHgxZTg6IDB4MjAwMDQwMCxcblx0ICAgICAgICAgICAgMHgxZjg6IDB4MTAwMDAxXG5cdCAgICAgICAgfSxcblx0ICAgICAgICB7XG5cdCAgICAgICAgICAgIDB4MDogMHg4MDAwODIwLFxuXHQgICAgICAgICAgICAweDE6IDB4MjAwMDAsXG5cdCAgICAgICAgICAgIDB4MjogMHg4MDAwMDAwLFxuXHQgICAgICAgICAgICAweDM6IDB4MjAsXG5cdCAgICAgICAgICAgIDB4NDogMHgyMDAyMCxcblx0ICAgICAgICAgICAgMHg1OiAweDgwMjA4MjAsXG5cdCAgICAgICAgICAgIDB4NjogMHg4MDIwODAwLFxuXHQgICAgICAgICAgICAweDc6IDB4ODAwLFxuXHQgICAgICAgICAgICAweDg6IDB4ODAyMDAwMCxcblx0ICAgICAgICAgICAgMHg5OiAweDgwMDA4MDAsXG5cdCAgICAgICAgICAgIDB4YTogMHgyMDgwMCxcblx0ICAgICAgICAgICAgMHhiOiAweDgwMjAwMjAsXG5cdCAgICAgICAgICAgIDB4YzogMHg4MjAsXG5cdCAgICAgICAgICAgIDB4ZDogMHgwLFxuXHQgICAgICAgICAgICAweGU6IDB4ODAwMDAyMCxcblx0ICAgICAgICAgICAgMHhmOiAweDIwODIwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDAwOiAweDgwMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAwMTogMHg4MDIwODIwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDAyOiAweDgwMDA4MjAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMDM6IDB4ODAwMDAwMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAwNDogMHg4MDIwMDAwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDA1OiAweDIwODAwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDA2OiAweDIwODIwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDA3OiAweDIwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDA4OiAweDgwMDAwMjAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMDk6IDB4ODIwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDBhOiAweDIwMDIwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDBiOiAweDgwMjA4MDAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMGM6IDB4MCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAwZDogMHg4MDIwMDIwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDBlOiAweDgwMDA4MDAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMGY6IDB4MjAwMDAsXG5cdCAgICAgICAgICAgIDB4MTA6IDB4MjA4MjAsXG5cdCAgICAgICAgICAgIDB4MTE6IDB4ODAyMDgwMCxcblx0ICAgICAgICAgICAgMHgxMjogMHgyMCxcblx0ICAgICAgICAgICAgMHgxMzogMHg4MDAsXG5cdCAgICAgICAgICAgIDB4MTQ6IDB4ODAwMDgwMCxcblx0ICAgICAgICAgICAgMHgxNTogMHg4MDAwMDIwLFxuXHQgICAgICAgICAgICAweDE2OiAweDgwMjAwMjAsXG5cdCAgICAgICAgICAgIDB4MTc6IDB4MjAwMDAsXG5cdCAgICAgICAgICAgIDB4MTg6IDB4MCxcblx0ICAgICAgICAgICAgMHgxOTogMHgyMDAyMCxcblx0ICAgICAgICAgICAgMHgxYTogMHg4MDIwMDAwLFxuXHQgICAgICAgICAgICAweDFiOiAweDgwMDA4MjAsXG5cdCAgICAgICAgICAgIDB4MWM6IDB4ODAyMDgyMCxcblx0ICAgICAgICAgICAgMHgxZDogMHgyMDgwMCxcblx0ICAgICAgICAgICAgMHgxZTogMHg4MjAsXG5cdCAgICAgICAgICAgIDB4MWY6IDB4ODAwMDAwMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxMDogMHgyMDAwMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxMTogMHg4MDAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMTI6IDB4ODAyMDAyMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxMzogMHgyMDgyMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxNDogMHgyMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxNTogMHg4MDIwMDAwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDE2OiAweDgwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMTc6IDB4ODAwMDgyMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxODogMHg4MDIwODIwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDE5OiAweDgwMDAwMjAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMWE6IDB4ODAwMDgwMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxYjogMHgwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDFjOiAweDIwODAwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDFkOiAweDgyMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxZTogMHgyMDAyMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxZjogMHg4MDIwODAwXG5cdCAgICAgICAgfVxuXHQgICAgXTtcblxuXHQgICAgLy8gTWFza3MgdGhhdCBzZWxlY3QgdGhlIFNCT1ggaW5wdXRcblx0ICAgIHZhciBTQk9YX01BU0sgPSBbXG5cdCAgICAgICAgMHhmODAwMDAwMSwgMHgxZjgwMDAwMCwgMHgwMWY4MDAwMCwgMHgwMDFmODAwMCxcblx0ICAgICAgICAweDAwMDFmODAwLCAweDAwMDAxZjgwLCAweDAwMDAwMWY4LCAweDgwMDAwMDFmXG5cdCAgICBdO1xuXG5cdCAgICAvKipcblx0ICAgICAqIERFUyBibG9jayBjaXBoZXIgYWxnb3JpdGhtLlxuXHQgICAgICovXG5cdCAgICB2YXIgREVTID0gQ19hbGdvLkRFUyA9IEJsb2NrQ2lwaGVyLmV4dGVuZCh7XG5cdCAgICAgICAgX2RvUmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBrZXkgPSB0aGlzLl9rZXk7XG5cdCAgICAgICAgICAgIHZhciBrZXlXb3JkcyA9IGtleS53b3JkcztcblxuXHQgICAgICAgICAgICAvLyBTZWxlY3QgNTYgYml0cyBhY2NvcmRpbmcgdG8gUEMxXG5cdCAgICAgICAgICAgIHZhciBrZXlCaXRzID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNTY7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdmFyIGtleUJpdFBvcyA9IFBDMVtpXSAtIDE7XG5cdCAgICAgICAgICAgICAgICBrZXlCaXRzW2ldID0gKGtleVdvcmRzW2tleUJpdFBvcyA+Pj4gNV0gPj4+ICgzMSAtIGtleUJpdFBvcyAlIDMyKSkgJiAxO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gQXNzZW1ibGUgMTYgc3Via2V5c1xuXHQgICAgICAgICAgICB2YXIgc3ViS2V5cyA9IHRoaXMuX3N1YktleXMgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgblN1YktleSA9IDA7IG5TdWJLZXkgPCAxNjsgblN1YktleSsrKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBDcmVhdGUgc3Via2V5XG5cdCAgICAgICAgICAgICAgICB2YXIgc3ViS2V5ID0gc3ViS2V5c1tuU3ViS2V5XSA9IFtdO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICAgICAgdmFyIGJpdFNoaWZ0ID0gQklUX1NISUZUU1tuU3ViS2V5XTtcblxuXHQgICAgICAgICAgICAgICAgLy8gU2VsZWN0IDQ4IGJpdHMgYWNjb3JkaW5nIHRvIFBDMlxuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgLy8gU2VsZWN0IGZyb20gdGhlIGxlZnQgMjgga2V5IGJpdHNcblx0ICAgICAgICAgICAgICAgICAgICBzdWJLZXlbKGkgLyA2KSB8IDBdIHw9IGtleUJpdHNbKChQQzJbaV0gLSAxKSArIGJpdFNoaWZ0KSAlIDI4XSA8PCAoMzEgLSBpICUgNik7XG5cblx0ICAgICAgICAgICAgICAgICAgICAvLyBTZWxlY3QgZnJvbSB0aGUgcmlnaHQgMjgga2V5IGJpdHNcblx0ICAgICAgICAgICAgICAgICAgICBzdWJLZXlbNCArICgoaSAvIDYpIHwgMCldIHw9IGtleUJpdHNbMjggKyAoKChQQzJbaSArIDI0XSAtIDEpICsgYml0U2hpZnQpICUgMjgpXSA8PCAoMzEgLSBpICUgNik7XG5cdCAgICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICAgIC8vIFNpbmNlIGVhY2ggc3Via2V5IGlzIGFwcGxpZWQgdG8gYW4gZXhwYW5kZWQgMzItYml0IGlucHV0LFxuXHQgICAgICAgICAgICAgICAgLy8gdGhlIHN1YmtleSBjYW4gYmUgYnJva2VuIGludG8gOCB2YWx1ZXMgc2NhbGVkIHRvIDMyLWJpdHMsXG5cdCAgICAgICAgICAgICAgICAvLyB3aGljaCBhbGxvd3MgdGhlIGtleSB0byBiZSB1c2VkIHdpdGhvdXQgZXhwYW5zaW9uXG5cdCAgICAgICAgICAgICAgICBzdWJLZXlbMF0gPSAoc3ViS2V5WzBdIDw8IDEpIHwgKHN1YktleVswXSA+Pj4gMzEpO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCA3OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICBzdWJLZXlbaV0gPSBzdWJLZXlbaV0gPj4+ICgoaSAtIDEpICogNCArIDMpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgc3ViS2V5WzddID0gKHN1YktleVs3XSA8PCA1KSB8IChzdWJLZXlbN10gPj4+IDI3KTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIENvbXB1dGUgaW52ZXJzZSBzdWJrZXlzXG5cdCAgICAgICAgICAgIHZhciBpbnZTdWJLZXlzID0gdGhpcy5faW52U3ViS2V5cyA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIGludlN1YktleXNbaV0gPSBzdWJLZXlzWzE1IC0gaV07XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgZW5jcnlwdEJsb2NrOiBmdW5jdGlvbiAoTSwgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2RvQ3J5cHRCbG9jayhNLCBvZmZzZXQsIHRoaXMuX3N1YktleXMpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBkZWNyeXB0QmxvY2s6IGZ1bmN0aW9uIChNLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZG9DcnlwdEJsb2NrKE0sIG9mZnNldCwgdGhpcy5faW52U3ViS2V5cyk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb0NyeXB0QmxvY2s6IGZ1bmN0aW9uIChNLCBvZmZzZXQsIHN1YktleXMpIHtcblx0ICAgICAgICAgICAgLy8gR2V0IGlucHV0XG5cdCAgICAgICAgICAgIHRoaXMuX2xCbG9jayA9IE1bb2Zmc2V0XTtcblx0ICAgICAgICAgICAgdGhpcy5fckJsb2NrID0gTVtvZmZzZXQgKyAxXTtcblxuXHQgICAgICAgICAgICAvLyBJbml0aWFsIHBlcm11dGF0aW9uXG5cdCAgICAgICAgICAgIGV4Y2hhbmdlTFIuY2FsbCh0aGlzLCA0LCAgMHgwZjBmMGYwZik7XG5cdCAgICAgICAgICAgIGV4Y2hhbmdlTFIuY2FsbCh0aGlzLCAxNiwgMHgwMDAwZmZmZik7XG5cdCAgICAgICAgICAgIGV4Y2hhbmdlUkwuY2FsbCh0aGlzLCAyLCAgMHgzMzMzMzMzMyk7XG5cdCAgICAgICAgICAgIGV4Y2hhbmdlUkwuY2FsbCh0aGlzLCA4LCAgMHgwMGZmMDBmZik7XG5cdCAgICAgICAgICAgIGV4Y2hhbmdlTFIuY2FsbCh0aGlzLCAxLCAgMHg1NTU1NTU1NSk7XG5cblx0ICAgICAgICAgICAgLy8gUm91bmRzXG5cdCAgICAgICAgICAgIGZvciAodmFyIHJvdW5kID0gMDsgcm91bmQgPCAxNjsgcm91bmQrKykge1xuXHQgICAgICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgICAgICB2YXIgc3ViS2V5ID0gc3ViS2V5c1tyb3VuZF07XG5cdCAgICAgICAgICAgICAgICB2YXIgbEJsb2NrID0gdGhpcy5fbEJsb2NrO1xuXHQgICAgICAgICAgICAgICAgdmFyIHJCbG9jayA9IHRoaXMuX3JCbG9jaztcblxuXHQgICAgICAgICAgICAgICAgLy8gRmVpc3RlbCBmdW5jdGlvblxuXHQgICAgICAgICAgICAgICAgdmFyIGYgPSAwO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA4OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICBmIHw9IFNCT1hfUFtpXVsoKHJCbG9jayBeIHN1YktleVtpXSkgJiBTQk9YX01BU0tbaV0pID4+PiAwXTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHRoaXMuX2xCbG9jayA9IHJCbG9jaztcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3JCbG9jayA9IGxCbG9jayBeIGY7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBVbmRvIHN3YXAgZnJvbSBsYXN0IHJvdW5kXG5cdCAgICAgICAgICAgIHZhciB0ID0gdGhpcy5fbEJsb2NrO1xuXHQgICAgICAgICAgICB0aGlzLl9sQmxvY2sgPSB0aGlzLl9yQmxvY2s7XG5cdCAgICAgICAgICAgIHRoaXMuX3JCbG9jayA9IHQ7XG5cblx0ICAgICAgICAgICAgLy8gRmluYWwgcGVybXV0YXRpb25cblx0ICAgICAgICAgICAgZXhjaGFuZ2VMUi5jYWxsKHRoaXMsIDEsICAweDU1NTU1NTU1KTtcblx0ICAgICAgICAgICAgZXhjaGFuZ2VSTC5jYWxsKHRoaXMsIDgsICAweDAwZmYwMGZmKTtcblx0ICAgICAgICAgICAgZXhjaGFuZ2VSTC5jYWxsKHRoaXMsIDIsICAweDMzMzMzMzMzKTtcblx0ICAgICAgICAgICAgZXhjaGFuZ2VMUi5jYWxsKHRoaXMsIDE2LCAweDAwMDBmZmZmKTtcblx0ICAgICAgICAgICAgZXhjaGFuZ2VMUi5jYWxsKHRoaXMsIDQsICAweDBmMGYwZjBmKTtcblxuXHQgICAgICAgICAgICAvLyBTZXQgb3V0cHV0XG5cdCAgICAgICAgICAgIE1bb2Zmc2V0XSA9IHRoaXMuX2xCbG9jaztcblx0ICAgICAgICAgICAgTVtvZmZzZXQgKyAxXSA9IHRoaXMuX3JCbG9jaztcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAga2V5U2l6ZTogNjQvMzIsXG5cblx0ICAgICAgICBpdlNpemU6IDY0LzMyLFxuXG5cdCAgICAgICAgYmxvY2tTaXplOiA2NC8zMlxuXHQgICAgfSk7XG5cblx0ICAgIC8vIFN3YXAgYml0cyBhY3Jvc3MgdGhlIGxlZnQgYW5kIHJpZ2h0IHdvcmRzXG5cdCAgICBmdW5jdGlvbiBleGNoYW5nZUxSKG9mZnNldCwgbWFzaykge1xuXHQgICAgICAgIHZhciB0ID0gKCh0aGlzLl9sQmxvY2sgPj4+IG9mZnNldCkgXiB0aGlzLl9yQmxvY2spICYgbWFzaztcblx0ICAgICAgICB0aGlzLl9yQmxvY2sgXj0gdDtcblx0ICAgICAgICB0aGlzLl9sQmxvY2sgXj0gdCA8PCBvZmZzZXQ7XG5cdCAgICB9XG5cblx0ICAgIGZ1bmN0aW9uIGV4Y2hhbmdlUkwob2Zmc2V0LCBtYXNrKSB7XG5cdCAgICAgICAgdmFyIHQgPSAoKHRoaXMuX3JCbG9jayA+Pj4gb2Zmc2V0KSBeIHRoaXMuX2xCbG9jaykgJiBtYXNrO1xuXHQgICAgICAgIHRoaXMuX2xCbG9jayBePSB0O1xuXHQgICAgICAgIHRoaXMuX3JCbG9jayBePSB0IDw8IG9mZnNldDtcblx0ICAgIH1cblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbnMgdG8gdGhlIGNpcGhlcidzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQGV4YW1wbGVcblx0ICAgICAqXG5cdCAgICAgKiAgICAgdmFyIGNpcGhlcnRleHQgPSBDcnlwdG9KUy5ERVMuZW5jcnlwdChtZXNzYWdlLCBrZXksIGNmZyk7XG5cdCAgICAgKiAgICAgdmFyIHBsYWludGV4dCAgPSBDcnlwdG9KUy5ERVMuZGVjcnlwdChjaXBoZXJ0ZXh0LCBrZXksIGNmZyk7XG5cdCAgICAgKi9cblx0ICAgIEMuREVTID0gQmxvY2tDaXBoZXIuX2NyZWF0ZUhlbHBlcihERVMpO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFRyaXBsZS1ERVMgYmxvY2sgY2lwaGVyIGFsZ29yaXRobS5cblx0ICAgICAqL1xuXHQgICAgdmFyIFRyaXBsZURFUyA9IENfYWxnby5UcmlwbGVERVMgPSBCbG9ja0NpcGhlci5leHRlbmQoe1xuXHQgICAgICAgIF9kb1Jlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIga2V5ID0gdGhpcy5fa2V5O1xuXHQgICAgICAgICAgICB2YXIga2V5V29yZHMgPSBrZXkud29yZHM7XG5cblx0ICAgICAgICAgICAgLy8gQ3JlYXRlIERFUyBpbnN0YW5jZXNcblx0ICAgICAgICAgICAgdGhpcy5fZGVzMSA9IERFUy5jcmVhdGVFbmNyeXB0b3IoV29yZEFycmF5LmNyZWF0ZShrZXlXb3Jkcy5zbGljZSgwLCAyKSkpO1xuXHQgICAgICAgICAgICB0aGlzLl9kZXMyID0gREVTLmNyZWF0ZUVuY3J5cHRvcihXb3JkQXJyYXkuY3JlYXRlKGtleVdvcmRzLnNsaWNlKDIsIDQpKSk7XG5cdCAgICAgICAgICAgIHRoaXMuX2RlczMgPSBERVMuY3JlYXRlRW5jcnlwdG9yKFdvcmRBcnJheS5jcmVhdGUoa2V5V29yZHMuc2xpY2UoNCwgNikpKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgZW5jcnlwdEJsb2NrOiBmdW5jdGlvbiAoTSwgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2RlczEuZW5jcnlwdEJsb2NrKE0sIG9mZnNldCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2RlczIuZGVjcnlwdEJsb2NrKE0sIG9mZnNldCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2RlczMuZW5jcnlwdEJsb2NrKE0sIG9mZnNldCk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGRlY3J5cHRCbG9jazogZnVuY3Rpb24gKE0sIG9mZnNldCkge1xuXHQgICAgICAgICAgICB0aGlzLl9kZXMzLmRlY3J5cHRCbG9jayhNLCBvZmZzZXQpO1xuXHQgICAgICAgICAgICB0aGlzLl9kZXMyLmVuY3J5cHRCbG9jayhNLCBvZmZzZXQpO1xuXHQgICAgICAgICAgICB0aGlzLl9kZXMxLmRlY3J5cHRCbG9jayhNLCBvZmZzZXQpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBrZXlTaXplOiAxOTIvMzIsXG5cblx0ICAgICAgICBpdlNpemU6IDY0LzMyLFxuXG5cdCAgICAgICAgYmxvY2tTaXplOiA2NC8zMlxuXHQgICAgfSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogU2hvcnRjdXQgZnVuY3Rpb25zIHRvIHRoZSBjaXBoZXIncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBjaXBoZXJ0ZXh0ID0gQ3J5cHRvSlMuVHJpcGxlREVTLmVuY3J5cHQobWVzc2FnZSwga2V5LCBjZmcpO1xuXHQgICAgICogICAgIHZhciBwbGFpbnRleHQgID0gQ3J5cHRvSlMuVHJpcGxlREVTLmRlY3J5cHQoY2lwaGVydGV4dCwga2V5LCBjZmcpO1xuXHQgICAgICovXG5cdCAgICBDLlRyaXBsZURFUyA9IEJsb2NrQ2lwaGVyLl9jcmVhdGVIZWxwZXIoVHJpcGxlREVTKTtcblx0fSgpKTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5UcmlwbGVERVM7XG5cbn0pKTsiLCI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXCIuL2NvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdChmdW5jdGlvbiAodW5kZWZpbmVkKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBCYXNlID0gQ19saWIuQmFzZTtcblx0ICAgIHZhciBYMzJXb3JkQXJyYXkgPSBDX2xpYi5Xb3JkQXJyYXk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogeDY0IG5hbWVzcGFjZS5cblx0ICAgICAqL1xuXHQgICAgdmFyIENfeDY0ID0gQy54NjQgPSB7fTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBBIDY0LWJpdCB3b3JkLlxuXHQgICAgICovXG5cdCAgICB2YXIgWDY0V29yZCA9IENfeDY0LldvcmQgPSBCYXNlLmV4dGVuZCh7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogSW5pdGlhbGl6ZXMgYSBuZXdseSBjcmVhdGVkIDY0LWJpdCB3b3JkLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IGhpZ2ggVGhlIGhpZ2ggMzIgYml0cy5cblx0ICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gbG93IFRoZSBsb3cgMzIgYml0cy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHg2NFdvcmQgPSBDcnlwdG9KUy54NjQuV29yZC5jcmVhdGUoMHgwMDAxMDIwMywgMHgwNDA1MDYwNyk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgaW5pdDogZnVuY3Rpb24gKGhpZ2gsIGxvdykge1xuXHQgICAgICAgICAgICB0aGlzLmhpZ2ggPSBoaWdoO1xuXHQgICAgICAgICAgICB0aGlzLmxvdyA9IGxvdztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBCaXR3aXNlIE5PVHMgdGhpcyB3b3JkLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7WDY0V29yZH0gQSBuZXcgeDY0LVdvcmQgb2JqZWN0IGFmdGVyIG5lZ2F0aW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgbmVnYXRlZCA9IHg2NFdvcmQubm90KCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgLy8gbm90OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vIHZhciBoaWdoID0gfnRoaXMuaGlnaDtcblx0ICAgICAgICAgICAgLy8gdmFyIGxvdyA9IH50aGlzLmxvdztcblxuXHQgICAgICAgICAgICAvLyByZXR1cm4gWDY0V29yZC5jcmVhdGUoaGlnaCwgbG93KTtcblx0ICAgICAgICAvLyB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQml0d2lzZSBBTkRzIHRoaXMgd29yZCB3aXRoIHRoZSBwYXNzZWQgd29yZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7WDY0V29yZH0gd29yZCBUaGUgeDY0LVdvcmQgdG8gQU5EIHdpdGggdGhpcyB3b3JkLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7WDY0V29yZH0gQSBuZXcgeDY0LVdvcmQgb2JqZWN0IGFmdGVyIEFORGluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGFuZGVkID0geDY0V29yZC5hbmQoYW5vdGhlclg2NFdvcmQpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIC8vIGFuZDogZnVuY3Rpb24gKHdvcmQpIHtcblx0ICAgICAgICAgICAgLy8gdmFyIGhpZ2ggPSB0aGlzLmhpZ2ggJiB3b3JkLmhpZ2g7XG5cdCAgICAgICAgICAgIC8vIHZhciBsb3cgPSB0aGlzLmxvdyAmIHdvcmQubG93O1xuXG5cdCAgICAgICAgICAgIC8vIHJldHVybiBYNjRXb3JkLmNyZWF0ZShoaWdoLCBsb3cpO1xuXHQgICAgICAgIC8vIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBCaXR3aXNlIE9ScyB0aGlzIHdvcmQgd2l0aCB0aGUgcGFzc2VkIHdvcmQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1g2NFdvcmR9IHdvcmQgVGhlIHg2NC1Xb3JkIHRvIE9SIHdpdGggdGhpcyB3b3JkLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7WDY0V29yZH0gQSBuZXcgeDY0LVdvcmQgb2JqZWN0IGFmdGVyIE9SaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgb3JlZCA9IHg2NFdvcmQub3IoYW5vdGhlclg2NFdvcmQpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIC8vIG9yOiBmdW5jdGlvbiAod29yZCkge1xuXHQgICAgICAgICAgICAvLyB2YXIgaGlnaCA9IHRoaXMuaGlnaCB8IHdvcmQuaGlnaDtcblx0ICAgICAgICAgICAgLy8gdmFyIGxvdyA9IHRoaXMubG93IHwgd29yZC5sb3c7XG5cblx0ICAgICAgICAgICAgLy8gcmV0dXJuIFg2NFdvcmQuY3JlYXRlKGhpZ2gsIGxvdyk7XG5cdCAgICAgICAgLy8gfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEJpdHdpc2UgWE9ScyB0aGlzIHdvcmQgd2l0aCB0aGUgcGFzc2VkIHdvcmQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1g2NFdvcmR9IHdvcmQgVGhlIHg2NC1Xb3JkIHRvIFhPUiB3aXRoIHRoaXMgd29yZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1g2NFdvcmR9IEEgbmV3IHg2NC1Xb3JkIG9iamVjdCBhZnRlciBYT1JpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB4b3JlZCA9IHg2NFdvcmQueG9yKGFub3RoZXJYNjRXb3JkKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICAvLyB4b3I6IGZ1bmN0aW9uICh3b3JkKSB7XG5cdCAgICAgICAgICAgIC8vIHZhciBoaWdoID0gdGhpcy5oaWdoIF4gd29yZC5oaWdoO1xuXHQgICAgICAgICAgICAvLyB2YXIgbG93ID0gdGhpcy5sb3cgXiB3b3JkLmxvdztcblxuXHQgICAgICAgICAgICAvLyByZXR1cm4gWDY0V29yZC5jcmVhdGUoaGlnaCwgbG93KTtcblx0ICAgICAgICAvLyB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogU2hpZnRzIHRoaXMgd29yZCBuIGJpdHMgdG8gdGhlIGxlZnQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIGJpdHMgdG8gc2hpZnQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtYNjRXb3JkfSBBIG5ldyB4NjQtV29yZCBvYmplY3QgYWZ0ZXIgc2hpZnRpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBzaGlmdGVkID0geDY0V29yZC5zaGlmdEwoMjUpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIC8vIHNoaWZ0TDogZnVuY3Rpb24gKG4pIHtcblx0ICAgICAgICAgICAgLy8gaWYgKG4gPCAzMikge1xuXHQgICAgICAgICAgICAgICAgLy8gdmFyIGhpZ2ggPSAodGhpcy5oaWdoIDw8IG4pIHwgKHRoaXMubG93ID4+PiAoMzIgLSBuKSk7XG5cdCAgICAgICAgICAgICAgICAvLyB2YXIgbG93ID0gdGhpcy5sb3cgPDwgbjtcblx0ICAgICAgICAgICAgLy8gfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIC8vIHZhciBoaWdoID0gdGhpcy5sb3cgPDwgKG4gLSAzMik7XG5cdCAgICAgICAgICAgICAgICAvLyB2YXIgbG93ID0gMDtcblx0ICAgICAgICAgICAgLy8gfVxuXG5cdCAgICAgICAgICAgIC8vIHJldHVybiBYNjRXb3JkLmNyZWF0ZShoaWdoLCBsb3cpO1xuXHQgICAgICAgIC8vIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBTaGlmdHMgdGhpcyB3b3JkIG4gYml0cyB0byB0aGUgcmlnaHQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIGJpdHMgdG8gc2hpZnQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtYNjRXb3JkfSBBIG5ldyB4NjQtV29yZCBvYmplY3QgYWZ0ZXIgc2hpZnRpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBzaGlmdGVkID0geDY0V29yZC5zaGlmdFIoNyk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgLy8gc2hpZnRSOiBmdW5jdGlvbiAobikge1xuXHQgICAgICAgICAgICAvLyBpZiAobiA8IDMyKSB7XG5cdCAgICAgICAgICAgICAgICAvLyB2YXIgbG93ID0gKHRoaXMubG93ID4+PiBuKSB8ICh0aGlzLmhpZ2ggPDwgKDMyIC0gbikpO1xuXHQgICAgICAgICAgICAgICAgLy8gdmFyIGhpZ2ggPSB0aGlzLmhpZ2ggPj4+IG47XG5cdCAgICAgICAgICAgIC8vIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAvLyB2YXIgbG93ID0gdGhpcy5oaWdoID4+PiAobiAtIDMyKTtcblx0ICAgICAgICAgICAgICAgIC8vIHZhciBoaWdoID0gMDtcblx0ICAgICAgICAgICAgLy8gfVxuXG5cdCAgICAgICAgICAgIC8vIHJldHVybiBYNjRXb3JkLmNyZWF0ZShoaWdoLCBsb3cpO1xuXHQgICAgICAgIC8vIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBSb3RhdGVzIHRoaXMgd29yZCBuIGJpdHMgdG8gdGhlIGxlZnQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIGJpdHMgdG8gcm90YXRlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7WDY0V29yZH0gQSBuZXcgeDY0LVdvcmQgb2JqZWN0IGFmdGVyIHJvdGF0aW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgcm90YXRlZCA9IHg2NFdvcmQucm90TCgyNSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgLy8gcm90TDogZnVuY3Rpb24gKG4pIHtcblx0ICAgICAgICAgICAgLy8gcmV0dXJuIHRoaXMuc2hpZnRMKG4pLm9yKHRoaXMuc2hpZnRSKDY0IC0gbikpO1xuXHQgICAgICAgIC8vIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBSb3RhdGVzIHRoaXMgd29yZCBuIGJpdHMgdG8gdGhlIHJpZ2h0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiBiaXRzIHRvIHJvdGF0ZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1g2NFdvcmR9IEEgbmV3IHg2NC1Xb3JkIG9iamVjdCBhZnRlciByb3RhdGluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHJvdGF0ZWQgPSB4NjRXb3JkLnJvdFIoNyk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgLy8gcm90UjogZnVuY3Rpb24gKG4pIHtcblx0ICAgICAgICAgICAgLy8gcmV0dXJuIHRoaXMuc2hpZnRSKG4pLm9yKHRoaXMuc2hpZnRMKDY0IC0gbikpO1xuXHQgICAgICAgIC8vIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBBZGRzIHRoaXMgd29yZCB3aXRoIHRoZSBwYXNzZWQgd29yZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7WDY0V29yZH0gd29yZCBUaGUgeDY0LVdvcmQgdG8gYWRkIHdpdGggdGhpcyB3b3JkLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7WDY0V29yZH0gQSBuZXcgeDY0LVdvcmQgb2JqZWN0IGFmdGVyIGFkZGluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGFkZGVkID0geDY0V29yZC5hZGQoYW5vdGhlclg2NFdvcmQpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIC8vIGFkZDogZnVuY3Rpb24gKHdvcmQpIHtcblx0ICAgICAgICAgICAgLy8gdmFyIGxvdyA9ICh0aGlzLmxvdyArIHdvcmQubG93KSB8IDA7XG5cdCAgICAgICAgICAgIC8vIHZhciBjYXJyeSA9IChsb3cgPj4+IDApIDwgKHRoaXMubG93ID4+PiAwKSA/IDEgOiAwO1xuXHQgICAgICAgICAgICAvLyB2YXIgaGlnaCA9ICh0aGlzLmhpZ2ggKyB3b3JkLmhpZ2ggKyBjYXJyeSkgfCAwO1xuXG5cdCAgICAgICAgICAgIC8vIHJldHVybiBYNjRXb3JkLmNyZWF0ZShoaWdoLCBsb3cpO1xuXHQgICAgICAgIC8vIH1cblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIEFuIGFycmF5IG9mIDY0LWJpdCB3b3Jkcy5cblx0ICAgICAqXG5cdCAgICAgKiBAcHJvcGVydHkge0FycmF5fSB3b3JkcyBUaGUgYXJyYXkgb2YgQ3J5cHRvSlMueDY0LldvcmQgb2JqZWN0cy5cblx0ICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBzaWdCeXRlcyBUaGUgbnVtYmVyIG9mIHNpZ25pZmljYW50IGJ5dGVzIGluIHRoaXMgd29yZCBhcnJheS5cblx0ICAgICAqL1xuXHQgICAgdmFyIFg2NFdvcmRBcnJheSA9IENfeDY0LldvcmRBcnJheSA9IEJhc2UuZXh0ZW5kKHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBJbml0aWFsaXplcyBhIG5ld2x5IGNyZWF0ZWQgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IHdvcmRzIChPcHRpb25hbCkgQW4gYXJyYXkgb2YgQ3J5cHRvSlMueDY0LldvcmQgb2JqZWN0cy5cblx0ICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gc2lnQnl0ZXMgKE9wdGlvbmFsKSBUaGUgbnVtYmVyIG9mIHNpZ25pZmljYW50IGJ5dGVzIGluIHRoZSB3b3Jkcy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHdvcmRBcnJheSA9IENyeXB0b0pTLng2NC5Xb3JkQXJyYXkuY3JlYXRlKCk7XG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHdvcmRBcnJheSA9IENyeXB0b0pTLng2NC5Xb3JkQXJyYXkuY3JlYXRlKFtcblx0ICAgICAgICAgKiAgICAgICAgIENyeXB0b0pTLng2NC5Xb3JkLmNyZWF0ZSgweDAwMDEwMjAzLCAweDA0MDUwNjA3KSxcblx0ICAgICAgICAgKiAgICAgICAgIENyeXB0b0pTLng2NC5Xb3JkLmNyZWF0ZSgweDE4MTkxYTFiLCAweDFjMWQxZTFmKVxuXHQgICAgICAgICAqICAgICBdKTtcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgd29yZEFycmF5ID0gQ3J5cHRvSlMueDY0LldvcmRBcnJheS5jcmVhdGUoW1xuXHQgICAgICAgICAqICAgICAgICAgQ3J5cHRvSlMueDY0LldvcmQuY3JlYXRlKDB4MDAwMTAyMDMsIDB4MDQwNTA2MDcpLFxuXHQgICAgICAgICAqICAgICAgICAgQ3J5cHRvSlMueDY0LldvcmQuY3JlYXRlKDB4MTgxOTFhMWIsIDB4MWMxZDFlMWYpXG5cdCAgICAgICAgICogICAgIF0sIDEwKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBpbml0OiBmdW5jdGlvbiAod29yZHMsIHNpZ0J5dGVzKSB7XG5cdCAgICAgICAgICAgIHdvcmRzID0gdGhpcy53b3JkcyA9IHdvcmRzIHx8IFtdO1xuXG5cdCAgICAgICAgICAgIGlmIChzaWdCeXRlcyAhPSB1bmRlZmluZWQpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuc2lnQnl0ZXMgPSBzaWdCeXRlcztcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuc2lnQnl0ZXMgPSB3b3Jkcy5sZW5ndGggKiA4O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbnZlcnRzIHRoaXMgNjQtYml0IHdvcmQgYXJyYXkgdG8gYSAzMi1iaXQgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge0NyeXB0b0pTLmxpYi5Xb3JkQXJyYXl9IFRoaXMgd29yZCBhcnJheSdzIGRhdGEgYXMgYSAzMi1iaXQgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHgzMldvcmRBcnJheSA9IHg2NFdvcmRBcnJheS50b1gzMigpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHRvWDMyOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgeDY0V29yZHMgPSB0aGlzLndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgeDY0V29yZHNMZW5ndGggPSB4NjRXb3Jkcy5sZW5ndGg7XG5cblx0ICAgICAgICAgICAgLy8gQ29udmVydFxuXHQgICAgICAgICAgICB2YXIgeDMyV29yZHMgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB4NjRXb3Jkc0xlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgeDY0V29yZCA9IHg2NFdvcmRzW2ldO1xuXHQgICAgICAgICAgICAgICAgeDMyV29yZHMucHVzaCh4NjRXb3JkLmhpZ2gpO1xuXHQgICAgICAgICAgICAgICAgeDMyV29yZHMucHVzaCh4NjRXb3JkLmxvdyk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gWDMyV29yZEFycmF5LmNyZWF0ZSh4MzJXb3JkcywgdGhpcy5zaWdCeXRlcyk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENyZWF0ZXMgYSBjb3B5IG9mIHRoaXMgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1g2NFdvcmRBcnJheX0gVGhlIGNsb25lLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgY2xvbmUgPSB4NjRXb3JkQXJyYXkuY2xvbmUoKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgY2xvbmUgPSBCYXNlLmNsb25lLmNhbGwodGhpcyk7XG5cblx0ICAgICAgICAgICAgLy8gQ2xvbmUgXCJ3b3Jkc1wiIGFycmF5XG5cdCAgICAgICAgICAgIHZhciB3b3JkcyA9IGNsb25lLndvcmRzID0gdGhpcy53b3Jkcy5zbGljZSgwKTtcblxuXHQgICAgICAgICAgICAvLyBDbG9uZSBlYWNoIFg2NFdvcmQgb2JqZWN0XG5cdCAgICAgICAgICAgIHZhciB3b3Jkc0xlbmd0aCA9IHdvcmRzLmxlbmd0aDtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3b3Jkc0xlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB3b3Jkc1tpXSA9IHdvcmRzW2ldLmNsb25lKCk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gY2xvbmU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdH0oKSk7XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlM7XG5cbn0pKTsiLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcblxuLy8gY2FjaGVkIGZyb20gd2hhdGV2ZXIgZ2xvYmFsIGlzIHByZXNlbnQgc28gdGhhdCB0ZXN0IHJ1bm5lcnMgdGhhdCBzdHViIGl0XG4vLyBkb24ndCBicmVhayB0aGluZ3MuICBCdXQgd2UgbmVlZCB0byB3cmFwIGl0IGluIGEgdHJ5IGNhdGNoIGluIGNhc2UgaXQgaXNcbi8vIHdyYXBwZWQgaW4gc3RyaWN0IG1vZGUgY29kZSB3aGljaCBkb2Vzbid0IGRlZmluZSBhbnkgZ2xvYmFscy4gIEl0J3MgaW5zaWRlIGFcbi8vIGZ1bmN0aW9uIGJlY2F1c2UgdHJ5L2NhdGNoZXMgZGVvcHRpbWl6ZSBpbiBjZXJ0YWluIGVuZ2luZXMuXG5cbnZhciBjYWNoZWRTZXRUaW1lb3V0O1xudmFyIGNhY2hlZENsZWFyVGltZW91dDtcblxuZnVuY3Rpb24gZGVmYXVsdFNldFRpbW91dCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRDbGVhclRpbWVvdXQgKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG4oZnVuY3Rpb24gKCkge1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0VGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2xlYXJUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgIH1cbn0gKCkpXG5mdW5jdGlvbiBydW5UaW1lb3V0KGZ1bikge1xuICAgIGlmIChjYWNoZWRTZXRUaW1lb3V0ID09PSBzZXRUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICAvLyBpZiBzZXRUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkU2V0VGltZW91dCA9PT0gZGVmYXVsdFNldFRpbW91dCB8fCAhY2FjaGVkU2V0VGltZW91dCkgJiYgc2V0VGltZW91dCkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dChmdW4sIDApO1xuICAgIH0gY2F0Y2goZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwobnVsbCwgZnVuLCAwKTtcbiAgICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKHRoaXMsIGZ1biwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxufVxuZnVuY3Rpb24gcnVuQ2xlYXJUaW1lb3V0KG1hcmtlcikge1xuICAgIGlmIChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGNsZWFyVGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICAvLyBpZiBjbGVhclRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGRlZmF1bHRDbGVhclRpbWVvdXQgfHwgIWNhY2hlZENsZWFyVGltZW91dCkgJiYgY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCAgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbChudWxsLCBtYXJrZXIpO1xuICAgICAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yLlxuICAgICAgICAgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBJLkUuIGhhdmUgZGlmZmVyZW50IHJ1bGVzIGZvciBjbGVhclRpbWVvdXQgdnMgc2V0VGltZW91dFxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKHRoaXMsIG1hcmtlcik7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG59XG52YXIgcXVldWUgPSBbXTtcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xudmFyIGN1cnJlbnRRdWV1ZTtcbnZhciBxdWV1ZUluZGV4ID0gLTE7XG5cbmZ1bmN0aW9uIGNsZWFuVXBOZXh0VGljaygpIHtcbiAgICBpZiAoIWRyYWluaW5nIHx8ICFjdXJyZW50UXVldWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHF1ZXVlID0gY3VycmVudFF1ZXVlLmNvbmNhdChxdWV1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgIH1cbiAgICBpZiAocXVldWUubGVuZ3RoKSB7XG4gICAgICAgIGRyYWluUXVldWUoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYWluUXVldWUoKSB7XG4gICAgaWYgKGRyYWluaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHRpbWVvdXQgPSBydW5UaW1lb3V0KGNsZWFuVXBOZXh0VGljayk7XG4gICAgZHJhaW5pbmcgPSB0cnVlO1xuXG4gICAgdmFyIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZShsZW4pIHtcbiAgICAgICAgY3VycmVudFF1ZXVlID0gcXVldWU7XG4gICAgICAgIHF1ZXVlID0gW107XG4gICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UXVldWUpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UXVldWVbcXVldWVJbmRleF0ucnVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgfVxuICAgIGN1cnJlbnRRdWV1ZSA9IG51bGw7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBydW5DbGVhclRpbWVvdXQodGltZW91dCk7XG59XG5cbnByb2Nlc3MubmV4dFRpY2sgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcXVldWUucHVzaChuZXcgSXRlbShmdW4sIGFyZ3MpKTtcbiAgICBpZiAocXVldWUubGVuZ3RoID09PSAxICYmICFkcmFpbmluZykge1xuICAgICAgICBydW5UaW1lb3V0KGRyYWluUXVldWUpO1xuICAgIH1cbn07XG5cbi8vIHY4IGxpa2VzIHByZWRpY3RpYmxlIG9iamVjdHNcbmZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xuICAgIHRoaXMuZnVuID0gZnVuO1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbn1cbkl0ZW0ucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmZ1bi5hcHBseShudWxsLCB0aGlzLmFycmF5KTtcbn07XG5wcm9jZXNzLnRpdGxlID0gJ2Jyb3dzZXInO1xucHJvY2Vzcy5icm93c2VyID0gdHJ1ZTtcbnByb2Nlc3MuZW52ID0ge307XG5wcm9jZXNzLmFyZ3YgPSBbXTtcbnByb2Nlc3MudmVyc2lvbiA9ICcnOyAvLyBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgcmVnZXhwIGlzc3Vlc1xucHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBub29wKCkge31cblxucHJvY2Vzcy5vbiA9IG5vb3A7XG5wcm9jZXNzLmFkZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3Mub25jZSA9IG5vb3A7XG5wcm9jZXNzLm9mZiA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUxpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcbnByb2Nlc3MuZW1pdCA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRPbmNlTGlzdGVuZXIgPSBub29wO1xuXG5wcm9jZXNzLmxpc3RlbmVycyA9IGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiBbXSB9XG5cbnByb2Nlc3MuYmluZGluZyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcblxucHJvY2Vzcy5jd2QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnLycgfTtcbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5wcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgcmVwbGFjZSA9IFN0cmluZy5wcm90b3R5cGUucmVwbGFjZTtcbnZhciBwZXJjZW50VHdlbnRpZXMgPSAvJTIwL2c7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgICdkZWZhdWx0JzogJ1JGQzM5ODYnLFxuICAgIGZvcm1hdHRlcnM6IHtcbiAgICAgICAgUkZDMTczODogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVwbGFjZS5jYWxsKHZhbHVlLCBwZXJjZW50VHdlbnRpZXMsICcrJyk7XG4gICAgICAgIH0sXG4gICAgICAgIFJGQzM5ODY6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBSRkMxNzM4OiAnUkZDMTczOCcsXG4gICAgUkZDMzk4NjogJ1JGQzM5ODYnXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgc3RyaW5naWZ5ID0gcmVxdWlyZSgnLi9zdHJpbmdpZnknKTtcbnZhciBwYXJzZSA9IHJlcXVpcmUoJy4vcGFyc2UnKTtcbnZhciBmb3JtYXRzID0gcmVxdWlyZSgnLi9mb3JtYXRzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIGZvcm1hdHM6IGZvcm1hdHMsXG4gICAgcGFyc2U6IHBhcnNlLFxuICAgIHN0cmluZ2lmeTogc3RyaW5naWZ5XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG5cbnZhciBoYXMgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG52YXIgZGVmYXVsdHMgPSB7XG4gICAgYWxsb3dEb3RzOiBmYWxzZSxcbiAgICBhbGxvd1Byb3RvdHlwZXM6IGZhbHNlLFxuICAgIGFycmF5TGltaXQ6IDIwLFxuICAgIGRlY29kZXI6IHV0aWxzLmRlY29kZSxcbiAgICBkZWxpbWl0ZXI6ICcmJyxcbiAgICBkZXB0aDogNSxcbiAgICBwYXJhbWV0ZXJMaW1pdDogMTAwMCxcbiAgICBwbGFpbk9iamVjdHM6IGZhbHNlLFxuICAgIHN0cmljdE51bGxIYW5kbGluZzogZmFsc2Vcbn07XG5cbnZhciBwYXJzZVZhbHVlcyA9IGZ1bmN0aW9uIHBhcnNlUXVlcnlTdHJpbmdWYWx1ZXMoc3RyLCBvcHRpb25zKSB7XG4gICAgdmFyIG9iaiA9IHt9O1xuICAgIHZhciBjbGVhblN0ciA9IG9wdGlvbnMuaWdub3JlUXVlcnlQcmVmaXggPyBzdHIucmVwbGFjZSgvXlxcPy8sICcnKSA6IHN0cjtcbiAgICB2YXIgbGltaXQgPSBvcHRpb25zLnBhcmFtZXRlckxpbWl0ID09PSBJbmZpbml0eSA/IHVuZGVmaW5lZCA6IG9wdGlvbnMucGFyYW1ldGVyTGltaXQ7XG4gICAgdmFyIHBhcnRzID0gY2xlYW5TdHIuc3BsaXQob3B0aW9ucy5kZWxpbWl0ZXIsIGxpbWl0KTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIHBhcnQgPSBwYXJ0c1tpXTtcblxuICAgICAgICB2YXIgYnJhY2tldEVxdWFsc1BvcyA9IHBhcnQuaW5kZXhPZignXT0nKTtcbiAgICAgICAgdmFyIHBvcyA9IGJyYWNrZXRFcXVhbHNQb3MgPT09IC0xID8gcGFydC5pbmRleE9mKCc9JykgOiBicmFja2V0RXF1YWxzUG9zICsgMTtcblxuICAgICAgICB2YXIga2V5LCB2YWw7XG4gICAgICAgIGlmIChwb3MgPT09IC0xKSB7XG4gICAgICAgICAgICBrZXkgPSBvcHRpb25zLmRlY29kZXIocGFydCwgZGVmYXVsdHMuZGVjb2Rlcik7XG4gICAgICAgICAgICB2YWwgPSBvcHRpb25zLnN0cmljdE51bGxIYW5kbGluZyA/IG51bGwgOiAnJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGtleSA9IG9wdGlvbnMuZGVjb2RlcihwYXJ0LnNsaWNlKDAsIHBvcyksIGRlZmF1bHRzLmRlY29kZXIpO1xuICAgICAgICAgICAgdmFsID0gb3B0aW9ucy5kZWNvZGVyKHBhcnQuc2xpY2UocG9zICsgMSksIGRlZmF1bHRzLmRlY29kZXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChoYXMuY2FsbChvYmosIGtleSkpIHtcbiAgICAgICAgICAgIG9ialtrZXldID0gW10uY29uY2F0KG9ialtrZXldKS5jb25jYXQodmFsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9ialtrZXldID0gdmFsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG9iajtcbn07XG5cbnZhciBwYXJzZU9iamVjdCA9IGZ1bmN0aW9uIHBhcnNlT2JqZWN0UmVjdXJzaXZlKGNoYWluLCB2YWwsIG9wdGlvbnMpIHtcbiAgICBpZiAoIWNoYWluLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH1cblxuICAgIHZhciByb290ID0gY2hhaW4uc2hpZnQoKTtcblxuICAgIHZhciBvYmo7XG4gICAgaWYgKHJvb3QgPT09ICdbXScpIHtcbiAgICAgICAgb2JqID0gW107XG4gICAgICAgIG9iaiA9IG9iai5jb25jYXQocGFyc2VPYmplY3QoY2hhaW4sIHZhbCwgb3B0aW9ucykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIG9iaiA9IG9wdGlvbnMucGxhaW5PYmplY3RzID8gT2JqZWN0LmNyZWF0ZShudWxsKSA6IHt9O1xuICAgICAgICB2YXIgY2xlYW5Sb290ID0gcm9vdC5jaGFyQXQoMCkgPT09ICdbJyAmJiByb290LmNoYXJBdChyb290Lmxlbmd0aCAtIDEpID09PSAnXScgPyByb290LnNsaWNlKDEsIC0xKSA6IHJvb3Q7XG4gICAgICAgIHZhciBpbmRleCA9IHBhcnNlSW50KGNsZWFuUm9vdCwgMTApO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhaXNOYU4oaW5kZXgpXG4gICAgICAgICAgICAmJiByb290ICE9PSBjbGVhblJvb3RcbiAgICAgICAgICAgICYmIFN0cmluZyhpbmRleCkgPT09IGNsZWFuUm9vdFxuICAgICAgICAgICAgJiYgaW5kZXggPj0gMFxuICAgICAgICAgICAgJiYgKG9wdGlvbnMucGFyc2VBcnJheXMgJiYgaW5kZXggPD0gb3B0aW9ucy5hcnJheUxpbWl0KVxuICAgICAgICApIHtcbiAgICAgICAgICAgIG9iaiA9IFtdO1xuICAgICAgICAgICAgb2JqW2luZGV4XSA9IHBhcnNlT2JqZWN0KGNoYWluLCB2YWwsIG9wdGlvbnMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb2JqW2NsZWFuUm9vdF0gPSBwYXJzZU9iamVjdChjaGFpbiwgdmFsLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBvYmo7XG59O1xuXG52YXIgcGFyc2VLZXlzID0gZnVuY3Rpb24gcGFyc2VRdWVyeVN0cmluZ0tleXMoZ2l2ZW5LZXksIHZhbCwgb3B0aW9ucykge1xuICAgIGlmICghZ2l2ZW5LZXkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFRyYW5zZm9ybSBkb3Qgbm90YXRpb24gdG8gYnJhY2tldCBub3RhdGlvblxuICAgIHZhciBrZXkgPSBvcHRpb25zLmFsbG93RG90cyA/IGdpdmVuS2V5LnJlcGxhY2UoL1xcLihbXi5bXSspL2csICdbJDFdJykgOiBnaXZlbktleTtcblxuICAgIC8vIFRoZSByZWdleCBjaHVua3NcblxuICAgIHZhciBicmFja2V0cyA9IC8oXFxbW15bXFxdXSpdKS87XG4gICAgdmFyIGNoaWxkID0gLyhcXFtbXltcXF1dKl0pL2c7XG5cbiAgICAvLyBHZXQgdGhlIHBhcmVudFxuXG4gICAgdmFyIHNlZ21lbnQgPSBicmFja2V0cy5leGVjKGtleSk7XG4gICAgdmFyIHBhcmVudCA9IHNlZ21lbnQgPyBrZXkuc2xpY2UoMCwgc2VnbWVudC5pbmRleCkgOiBrZXk7XG5cbiAgICAvLyBTdGFzaCB0aGUgcGFyZW50IGlmIGl0IGV4aXN0c1xuXG4gICAgdmFyIGtleXMgPSBbXTtcbiAgICBpZiAocGFyZW50KSB7XG4gICAgICAgIC8vIElmIHdlIGFyZW4ndCB1c2luZyBwbGFpbiBvYmplY3RzLCBvcHRpb25hbGx5IHByZWZpeCBrZXlzXG4gICAgICAgIC8vIHRoYXQgd291bGQgb3ZlcndyaXRlIG9iamVjdCBwcm90b3R5cGUgcHJvcGVydGllc1xuICAgICAgICBpZiAoIW9wdGlvbnMucGxhaW5PYmplY3RzICYmIGhhcy5jYWxsKE9iamVjdC5wcm90b3R5cGUsIHBhcmVudCkpIHtcbiAgICAgICAgICAgIGlmICghb3B0aW9ucy5hbGxvd1Byb3RvdHlwZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBrZXlzLnB1c2gocGFyZW50KTtcbiAgICB9XG5cbiAgICAvLyBMb29wIHRocm91Z2ggY2hpbGRyZW4gYXBwZW5kaW5nIHRvIHRoZSBhcnJheSB1bnRpbCB3ZSBoaXQgZGVwdGhcblxuICAgIHZhciBpID0gMDtcbiAgICB3aGlsZSAoKHNlZ21lbnQgPSBjaGlsZC5leGVjKGtleSkpICE9PSBudWxsICYmIGkgPCBvcHRpb25zLmRlcHRoKSB7XG4gICAgICAgIGkgKz0gMTtcbiAgICAgICAgaWYgKCFvcHRpb25zLnBsYWluT2JqZWN0cyAmJiBoYXMuY2FsbChPYmplY3QucHJvdG90eXBlLCBzZWdtZW50WzFdLnNsaWNlKDEsIC0xKSkpIHtcbiAgICAgICAgICAgIGlmICghb3B0aW9ucy5hbGxvd1Byb3RvdHlwZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAga2V5cy5wdXNoKHNlZ21lbnRbMV0pO1xuICAgIH1cblxuICAgIC8vIElmIHRoZXJlJ3MgYSByZW1haW5kZXIsIGp1c3QgYWRkIHdoYXRldmVyIGlzIGxlZnRcblxuICAgIGlmIChzZWdtZW50KSB7XG4gICAgICAgIGtleXMucHVzaCgnWycgKyBrZXkuc2xpY2Uoc2VnbWVudC5pbmRleCkgKyAnXScpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZU9iamVjdChrZXlzLCB2YWwsIG9wdGlvbnMpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc3RyLCBvcHRzKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBvcHRzID8gdXRpbHMuYXNzaWduKHt9LCBvcHRzKSA6IHt9O1xuXG4gICAgaWYgKG9wdGlvbnMuZGVjb2RlciAhPT0gbnVsbCAmJiBvcHRpb25zLmRlY29kZXIgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb3B0aW9ucy5kZWNvZGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0RlY29kZXIgaGFzIHRvIGJlIGEgZnVuY3Rpb24uJyk7XG4gICAgfVxuXG4gICAgb3B0aW9ucy5pZ25vcmVRdWVyeVByZWZpeCA9IG9wdGlvbnMuaWdub3JlUXVlcnlQcmVmaXggPT09IHRydWU7XG4gICAgb3B0aW9ucy5kZWxpbWl0ZXIgPSB0eXBlb2Ygb3B0aW9ucy5kZWxpbWl0ZXIgPT09ICdzdHJpbmcnIHx8IHV0aWxzLmlzUmVnRXhwKG9wdGlvbnMuZGVsaW1pdGVyKSA/IG9wdGlvbnMuZGVsaW1pdGVyIDogZGVmYXVsdHMuZGVsaW1pdGVyO1xuICAgIG9wdGlvbnMuZGVwdGggPSB0eXBlb2Ygb3B0aW9ucy5kZXB0aCA9PT0gJ251bWJlcicgPyBvcHRpb25zLmRlcHRoIDogZGVmYXVsdHMuZGVwdGg7XG4gICAgb3B0aW9ucy5hcnJheUxpbWl0ID0gdHlwZW9mIG9wdGlvbnMuYXJyYXlMaW1pdCA9PT0gJ251bWJlcicgPyBvcHRpb25zLmFycmF5TGltaXQgOiBkZWZhdWx0cy5hcnJheUxpbWl0O1xuICAgIG9wdGlvbnMucGFyc2VBcnJheXMgPSBvcHRpb25zLnBhcnNlQXJyYXlzICE9PSBmYWxzZTtcbiAgICBvcHRpb25zLmRlY29kZXIgPSB0eXBlb2Ygb3B0aW9ucy5kZWNvZGVyID09PSAnZnVuY3Rpb24nID8gb3B0aW9ucy5kZWNvZGVyIDogZGVmYXVsdHMuZGVjb2RlcjtcbiAgICBvcHRpb25zLmFsbG93RG90cyA9IHR5cGVvZiBvcHRpb25zLmFsbG93RG90cyA9PT0gJ2Jvb2xlYW4nID8gb3B0aW9ucy5hbGxvd0RvdHMgOiBkZWZhdWx0cy5hbGxvd0RvdHM7XG4gICAgb3B0aW9ucy5wbGFpbk9iamVjdHMgPSB0eXBlb2Ygb3B0aW9ucy5wbGFpbk9iamVjdHMgPT09ICdib29sZWFuJyA/IG9wdGlvbnMucGxhaW5PYmplY3RzIDogZGVmYXVsdHMucGxhaW5PYmplY3RzO1xuICAgIG9wdGlvbnMuYWxsb3dQcm90b3R5cGVzID0gdHlwZW9mIG9wdGlvbnMuYWxsb3dQcm90b3R5cGVzID09PSAnYm9vbGVhbicgPyBvcHRpb25zLmFsbG93UHJvdG90eXBlcyA6IGRlZmF1bHRzLmFsbG93UHJvdG90eXBlcztcbiAgICBvcHRpb25zLnBhcmFtZXRlckxpbWl0ID0gdHlwZW9mIG9wdGlvbnMucGFyYW1ldGVyTGltaXQgPT09ICdudW1iZXInID8gb3B0aW9ucy5wYXJhbWV0ZXJMaW1pdCA6IGRlZmF1bHRzLnBhcmFtZXRlckxpbWl0O1xuICAgIG9wdGlvbnMuc3RyaWN0TnVsbEhhbmRsaW5nID0gdHlwZW9mIG9wdGlvbnMuc3RyaWN0TnVsbEhhbmRsaW5nID09PSAnYm9vbGVhbicgPyBvcHRpb25zLnN0cmljdE51bGxIYW5kbGluZyA6IGRlZmF1bHRzLnN0cmljdE51bGxIYW5kbGluZztcblxuICAgIGlmIChzdHIgPT09ICcnIHx8IHN0ciA9PT0gbnVsbCB8fCB0eXBlb2Ygc3RyID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gb3B0aW9ucy5wbGFpbk9iamVjdHMgPyBPYmplY3QuY3JlYXRlKG51bGwpIDoge307XG4gICAgfVxuXG4gICAgdmFyIHRlbXBPYmogPSB0eXBlb2Ygc3RyID09PSAnc3RyaW5nJyA/IHBhcnNlVmFsdWVzKHN0ciwgb3B0aW9ucykgOiBzdHI7XG4gICAgdmFyIG9iaiA9IG9wdGlvbnMucGxhaW5PYmplY3RzID8gT2JqZWN0LmNyZWF0ZShudWxsKSA6IHt9O1xuXG4gICAgLy8gSXRlcmF0ZSBvdmVyIHRoZSBrZXlzIGFuZCBzZXR1cCB0aGUgbmV3IG9iamVjdFxuXG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh0ZW1wT2JqKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICAgIHZhciBuZXdPYmogPSBwYXJzZUtleXMoa2V5LCB0ZW1wT2JqW2tleV0sIG9wdGlvbnMpO1xuICAgICAgICBvYmogPSB1dGlscy5tZXJnZShvYmosIG5ld09iaiwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHV0aWxzLmNvbXBhY3Qob2JqKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcbnZhciBmb3JtYXRzID0gcmVxdWlyZSgnLi9mb3JtYXRzJyk7XG5cbnZhciBhcnJheVByZWZpeEdlbmVyYXRvcnMgPSB7XG4gICAgYnJhY2tldHM6IGZ1bmN0aW9uIGJyYWNrZXRzKHByZWZpeCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGZ1bmMtbmFtZS1tYXRjaGluZ1xuICAgICAgICByZXR1cm4gcHJlZml4ICsgJ1tdJztcbiAgICB9LFxuICAgIGluZGljZXM6IGZ1bmN0aW9uIGluZGljZXMocHJlZml4LCBrZXkpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBmdW5jLW5hbWUtbWF0Y2hpbmdcbiAgICAgICAgcmV0dXJuIHByZWZpeCArICdbJyArIGtleSArICddJztcbiAgICB9LFxuICAgIHJlcGVhdDogZnVuY3Rpb24gcmVwZWF0KHByZWZpeCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGZ1bmMtbmFtZS1tYXRjaGluZ1xuICAgICAgICByZXR1cm4gcHJlZml4O1xuICAgIH1cbn07XG5cbnZhciB0b0lTTyA9IERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nO1xuXG52YXIgZGVmYXVsdHMgPSB7XG4gICAgZGVsaW1pdGVyOiAnJicsXG4gICAgZW5jb2RlOiB0cnVlLFxuICAgIGVuY29kZXI6IHV0aWxzLmVuY29kZSxcbiAgICBlbmNvZGVWYWx1ZXNPbmx5OiBmYWxzZSxcbiAgICBzZXJpYWxpemVEYXRlOiBmdW5jdGlvbiBzZXJpYWxpemVEYXRlKGRhdGUpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBmdW5jLW5hbWUtbWF0Y2hpbmdcbiAgICAgICAgcmV0dXJuIHRvSVNPLmNhbGwoZGF0ZSk7XG4gICAgfSxcbiAgICBza2lwTnVsbHM6IGZhbHNlLFxuICAgIHN0cmljdE51bGxIYW5kbGluZzogZmFsc2Vcbn07XG5cbnZhciBzdHJpbmdpZnkgPSBmdW5jdGlvbiBzdHJpbmdpZnkoIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZnVuYy1uYW1lLW1hdGNoaW5nXG4gICAgb2JqZWN0LFxuICAgIHByZWZpeCxcbiAgICBnZW5lcmF0ZUFycmF5UHJlZml4LFxuICAgIHN0cmljdE51bGxIYW5kbGluZyxcbiAgICBza2lwTnVsbHMsXG4gICAgZW5jb2RlcixcbiAgICBmaWx0ZXIsXG4gICAgc29ydCxcbiAgICBhbGxvd0RvdHMsXG4gICAgc2VyaWFsaXplRGF0ZSxcbiAgICBmb3JtYXR0ZXIsXG4gICAgZW5jb2RlVmFsdWVzT25seVxuKSB7XG4gICAgdmFyIG9iaiA9IG9iamVjdDtcbiAgICBpZiAodHlwZW9mIGZpbHRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBvYmogPSBmaWx0ZXIocHJlZml4LCBvYmopO1xuICAgIH0gZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICBvYmogPSBzZXJpYWxpemVEYXRlKG9iaik7XG4gICAgfSBlbHNlIGlmIChvYmogPT09IG51bGwpIHtcbiAgICAgICAgaWYgKHN0cmljdE51bGxIYW5kbGluZykge1xuICAgICAgICAgICAgcmV0dXJuIGVuY29kZXIgJiYgIWVuY29kZVZhbHVlc09ubHkgPyBlbmNvZGVyKHByZWZpeCwgZGVmYXVsdHMuZW5jb2RlcikgOiBwcmVmaXg7XG4gICAgICAgIH1cblxuICAgICAgICBvYmogPSAnJztcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG9iaiA9PT0gJ251bWJlcicgfHwgdHlwZW9mIG9iaiA9PT0gJ2Jvb2xlYW4nIHx8IHV0aWxzLmlzQnVmZmVyKG9iaikpIHtcbiAgICAgICAgaWYgKGVuY29kZXIpIHtcbiAgICAgICAgICAgIHZhciBrZXlWYWx1ZSA9IGVuY29kZVZhbHVlc09ubHkgPyBwcmVmaXggOiBlbmNvZGVyKHByZWZpeCwgZGVmYXVsdHMuZW5jb2Rlcik7XG4gICAgICAgICAgICByZXR1cm4gW2Zvcm1hdHRlcihrZXlWYWx1ZSkgKyAnPScgKyBmb3JtYXR0ZXIoZW5jb2RlcihvYmosIGRlZmF1bHRzLmVuY29kZXIpKV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtmb3JtYXR0ZXIocHJlZml4KSArICc9JyArIGZvcm1hdHRlcihTdHJpbmcob2JqKSldO1xuICAgIH1cblxuICAgIHZhciB2YWx1ZXMgPSBbXTtcblxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gdmFsdWVzO1xuICAgIH1cblxuICAgIHZhciBvYmpLZXlzO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGZpbHRlcikpIHtcbiAgICAgICAgb2JqS2V5cyA9IGZpbHRlcjtcbiAgICB9IGVsc2Uge1xuICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG4gICAgICAgIG9iaktleXMgPSBzb3J0ID8ga2V5cy5zb3J0KHNvcnQpIDoga2V5cztcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iaktleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIGtleSA9IG9iaktleXNbaV07XG5cbiAgICAgICAgaWYgKHNraXBOdWxscyAmJiBvYmpba2V5XSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgICAgICAgICB2YWx1ZXMgPSB2YWx1ZXMuY29uY2F0KHN0cmluZ2lmeShcbiAgICAgICAgICAgICAgICBvYmpba2V5XSxcbiAgICAgICAgICAgICAgICBnZW5lcmF0ZUFycmF5UHJlZml4KHByZWZpeCwga2V5KSxcbiAgICAgICAgICAgICAgICBnZW5lcmF0ZUFycmF5UHJlZml4LFxuICAgICAgICAgICAgICAgIHN0cmljdE51bGxIYW5kbGluZyxcbiAgICAgICAgICAgICAgICBza2lwTnVsbHMsXG4gICAgICAgICAgICAgICAgZW5jb2RlcixcbiAgICAgICAgICAgICAgICBmaWx0ZXIsXG4gICAgICAgICAgICAgICAgc29ydCxcbiAgICAgICAgICAgICAgICBhbGxvd0RvdHMsXG4gICAgICAgICAgICAgICAgc2VyaWFsaXplRGF0ZSxcbiAgICAgICAgICAgICAgICBmb3JtYXR0ZXIsXG4gICAgICAgICAgICAgICAgZW5jb2RlVmFsdWVzT25seVxuICAgICAgICAgICAgKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWx1ZXMgPSB2YWx1ZXMuY29uY2F0KHN0cmluZ2lmeShcbiAgICAgICAgICAgICAgICBvYmpba2V5XSxcbiAgICAgICAgICAgICAgICBwcmVmaXggKyAoYWxsb3dEb3RzID8gJy4nICsga2V5IDogJ1snICsga2V5ICsgJ10nKSxcbiAgICAgICAgICAgICAgICBnZW5lcmF0ZUFycmF5UHJlZml4LFxuICAgICAgICAgICAgICAgIHN0cmljdE51bGxIYW5kbGluZyxcbiAgICAgICAgICAgICAgICBza2lwTnVsbHMsXG4gICAgICAgICAgICAgICAgZW5jb2RlcixcbiAgICAgICAgICAgICAgICBmaWx0ZXIsXG4gICAgICAgICAgICAgICAgc29ydCxcbiAgICAgICAgICAgICAgICBhbGxvd0RvdHMsXG4gICAgICAgICAgICAgICAgc2VyaWFsaXplRGF0ZSxcbiAgICAgICAgICAgICAgICBmb3JtYXR0ZXIsXG4gICAgICAgICAgICAgICAgZW5jb2RlVmFsdWVzT25seVxuICAgICAgICAgICAgKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWVzO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBvcHRzKSB7XG4gICAgdmFyIG9iaiA9IG9iamVjdDtcbiAgICB2YXIgb3B0aW9ucyA9IG9wdHMgPyB1dGlscy5hc3NpZ24oe30sIG9wdHMpIDoge307XG5cbiAgICBpZiAob3B0aW9ucy5lbmNvZGVyICE9PSBudWxsICYmIG9wdGlvbnMuZW5jb2RlciAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvcHRpb25zLmVuY29kZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRW5jb2RlciBoYXMgdG8gYmUgYSBmdW5jdGlvbi4nKTtcbiAgICB9XG5cbiAgICB2YXIgZGVsaW1pdGVyID0gdHlwZW9mIG9wdGlvbnMuZGVsaW1pdGVyID09PSAndW5kZWZpbmVkJyA/IGRlZmF1bHRzLmRlbGltaXRlciA6IG9wdGlvbnMuZGVsaW1pdGVyO1xuICAgIHZhciBzdHJpY3ROdWxsSGFuZGxpbmcgPSB0eXBlb2Ygb3B0aW9ucy5zdHJpY3ROdWxsSGFuZGxpbmcgPT09ICdib29sZWFuJyA/IG9wdGlvbnMuc3RyaWN0TnVsbEhhbmRsaW5nIDogZGVmYXVsdHMuc3RyaWN0TnVsbEhhbmRsaW5nO1xuICAgIHZhciBza2lwTnVsbHMgPSB0eXBlb2Ygb3B0aW9ucy5za2lwTnVsbHMgPT09ICdib29sZWFuJyA/IG9wdGlvbnMuc2tpcE51bGxzIDogZGVmYXVsdHMuc2tpcE51bGxzO1xuICAgIHZhciBlbmNvZGUgPSB0eXBlb2Ygb3B0aW9ucy5lbmNvZGUgPT09ICdib29sZWFuJyA/IG9wdGlvbnMuZW5jb2RlIDogZGVmYXVsdHMuZW5jb2RlO1xuICAgIHZhciBlbmNvZGVyID0gdHlwZW9mIG9wdGlvbnMuZW5jb2RlciA9PT0gJ2Z1bmN0aW9uJyA/IG9wdGlvbnMuZW5jb2RlciA6IGRlZmF1bHRzLmVuY29kZXI7XG4gICAgdmFyIHNvcnQgPSB0eXBlb2Ygb3B0aW9ucy5zb3J0ID09PSAnZnVuY3Rpb24nID8gb3B0aW9ucy5zb3J0IDogbnVsbDtcbiAgICB2YXIgYWxsb3dEb3RzID0gdHlwZW9mIG9wdGlvbnMuYWxsb3dEb3RzID09PSAndW5kZWZpbmVkJyA/IGZhbHNlIDogb3B0aW9ucy5hbGxvd0RvdHM7XG4gICAgdmFyIHNlcmlhbGl6ZURhdGUgPSB0eXBlb2Ygb3B0aW9ucy5zZXJpYWxpemVEYXRlID09PSAnZnVuY3Rpb24nID8gb3B0aW9ucy5zZXJpYWxpemVEYXRlIDogZGVmYXVsdHMuc2VyaWFsaXplRGF0ZTtcbiAgICB2YXIgZW5jb2RlVmFsdWVzT25seSA9IHR5cGVvZiBvcHRpb25zLmVuY29kZVZhbHVlc09ubHkgPT09ICdib29sZWFuJyA/IG9wdGlvbnMuZW5jb2RlVmFsdWVzT25seSA6IGRlZmF1bHRzLmVuY29kZVZhbHVlc09ubHk7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmZvcm1hdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgb3B0aW9ucy5mb3JtYXQgPSBmb3JtYXRzLmRlZmF1bHQ7XG4gICAgfSBlbHNlIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGZvcm1hdHMuZm9ybWF0dGVycywgb3B0aW9ucy5mb3JtYXQpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZm9ybWF0IG9wdGlvbiBwcm92aWRlZC4nKTtcbiAgICB9XG4gICAgdmFyIGZvcm1hdHRlciA9IGZvcm1hdHMuZm9ybWF0dGVyc1tvcHRpb25zLmZvcm1hdF07XG4gICAgdmFyIG9iaktleXM7XG4gICAgdmFyIGZpbHRlcjtcblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5maWx0ZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZmlsdGVyID0gb3B0aW9ucy5maWx0ZXI7XG4gICAgICAgIG9iaiA9IGZpbHRlcignJywgb2JqKTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucy5maWx0ZXIpKSB7XG4gICAgICAgIGZpbHRlciA9IG9wdGlvbnMuZmlsdGVyO1xuICAgICAgICBvYmpLZXlzID0gZmlsdGVyO1xuICAgIH1cblxuICAgIHZhciBrZXlzID0gW107XG5cbiAgICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgb2JqID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICB2YXIgYXJyYXlGb3JtYXQ7XG4gICAgaWYgKG9wdGlvbnMuYXJyYXlGb3JtYXQgaW4gYXJyYXlQcmVmaXhHZW5lcmF0b3JzKSB7XG4gICAgICAgIGFycmF5Rm9ybWF0ID0gb3B0aW9ucy5hcnJheUZvcm1hdDtcbiAgICB9IGVsc2UgaWYgKCdpbmRpY2VzJyBpbiBvcHRpb25zKSB7XG4gICAgICAgIGFycmF5Rm9ybWF0ID0gb3B0aW9ucy5pbmRpY2VzID8gJ2luZGljZXMnIDogJ3JlcGVhdCc7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgYXJyYXlGb3JtYXQgPSAnaW5kaWNlcyc7XG4gICAgfVxuXG4gICAgdmFyIGdlbmVyYXRlQXJyYXlQcmVmaXggPSBhcnJheVByZWZpeEdlbmVyYXRvcnNbYXJyYXlGb3JtYXRdO1xuXG4gICAgaWYgKCFvYmpLZXlzKSB7XG4gICAgICAgIG9iaktleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICAgIH1cblxuICAgIGlmIChzb3J0KSB7XG4gICAgICAgIG9iaktleXMuc29ydChzb3J0KTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iaktleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIGtleSA9IG9iaktleXNbaV07XG5cbiAgICAgICAgaWYgKHNraXBOdWxscyAmJiBvYmpba2V5XSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBrZXlzID0ga2V5cy5jb25jYXQoc3RyaW5naWZ5KFxuICAgICAgICAgICAgb2JqW2tleV0sXG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICBnZW5lcmF0ZUFycmF5UHJlZml4LFxuICAgICAgICAgICAgc3RyaWN0TnVsbEhhbmRsaW5nLFxuICAgICAgICAgICAgc2tpcE51bGxzLFxuICAgICAgICAgICAgZW5jb2RlID8gZW5jb2RlciA6IG51bGwsXG4gICAgICAgICAgICBmaWx0ZXIsXG4gICAgICAgICAgICBzb3J0LFxuICAgICAgICAgICAgYWxsb3dEb3RzLFxuICAgICAgICAgICAgc2VyaWFsaXplRGF0ZSxcbiAgICAgICAgICAgIGZvcm1hdHRlcixcbiAgICAgICAgICAgIGVuY29kZVZhbHVlc09ubHlcbiAgICAgICAgKSk7XG4gICAgfVxuXG4gICAgdmFyIGpvaW5lZCA9IGtleXMuam9pbihkZWxpbWl0ZXIpO1xuICAgIHZhciBwcmVmaXggPSBvcHRpb25zLmFkZFF1ZXJ5UHJlZml4ID09PSB0cnVlID8gJz8nIDogJyc7XG5cbiAgICByZXR1cm4gam9pbmVkLmxlbmd0aCA+IDAgPyBwcmVmaXggKyBqb2luZWQgOiAnJztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBoYXMgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG52YXIgaGV4VGFibGUgPSAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBhcnJheSA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyArK2kpIHtcbiAgICAgICAgYXJyYXkucHVzaCgnJScgKyAoKGkgPCAxNiA/ICcwJyA6ICcnKSArIGkudG9TdHJpbmcoMTYpKS50b1VwcGVyQ2FzZSgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJyYXk7XG59KCkpO1xuXG5leHBvcnRzLmFycmF5VG9PYmplY3QgPSBmdW5jdGlvbiAoc291cmNlLCBvcHRpb25zKSB7XG4gICAgdmFyIG9iaiA9IG9wdGlvbnMgJiYgb3B0aW9ucy5wbGFpbk9iamVjdHMgPyBPYmplY3QuY3JlYXRlKG51bGwpIDoge307XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzb3VyY2UubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzb3VyY2VbaV0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBvYmpbaV0gPSBzb3VyY2VbaV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gb2JqO1xufTtcblxuZXhwb3J0cy5tZXJnZSA9IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSwgb3B0aW9ucykge1xuICAgIGlmICghc291cmNlKSB7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBzb3VyY2UgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRhcmdldCkpIHtcbiAgICAgICAgICAgIHRhcmdldC5wdXNoKHNvdXJjZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRhcmdldCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnBsYWluT2JqZWN0cyB8fCBvcHRpb25zLmFsbG93UHJvdG90eXBlcyB8fCAhaGFzLmNhbGwoT2JqZWN0LnByb3RvdHlwZSwgc291cmNlKSkge1xuICAgICAgICAgICAgICAgIHRhcmdldFtzb3VyY2VdID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBbdGFyZ2V0LCBzb3VyY2VdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHRhcmdldCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIFt0YXJnZXRdLmNvbmNhdChzb3VyY2UpO1xuICAgIH1cblxuICAgIHZhciBtZXJnZVRhcmdldCA9IHRhcmdldDtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0YXJnZXQpICYmICFBcnJheS5pc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgICAgbWVyZ2VUYXJnZXQgPSBleHBvcnRzLmFycmF5VG9PYmplY3QodGFyZ2V0LCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0YXJnZXQpICYmIEFycmF5LmlzQXJyYXkoc291cmNlKSkge1xuICAgICAgICBzb3VyY2UuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSwgaSkge1xuICAgICAgICAgICAgaWYgKGhhcy5jYWxsKHRhcmdldCwgaSkpIHtcbiAgICAgICAgICAgICAgICBpZiAodGFyZ2V0W2ldICYmIHR5cGVvZiB0YXJnZXRbaV0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldFtpXSA9IGV4cG9ydHMubWVyZ2UodGFyZ2V0W2ldLCBpdGVtLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXQucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRhcmdldFtpXSA9IGl0ZW07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH1cblxuICAgIHJldHVybiBPYmplY3Qua2V5cyhzb3VyY2UpLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBrZXkpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gc291cmNlW2tleV07XG5cbiAgICAgICAgaWYgKGhhcy5jYWxsKGFjYywga2V5KSkge1xuICAgICAgICAgICAgYWNjW2tleV0gPSBleHBvcnRzLm1lcmdlKGFjY1trZXldLCB2YWx1ZSwgb3B0aW9ucyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhY2Nba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgbWVyZ2VUYXJnZXQpO1xufTtcblxuZXhwb3J0cy5hc3NpZ24gPSBmdW5jdGlvbiBhc3NpZ25TaW5nbGVTb3VyY2UodGFyZ2V0LCBzb3VyY2UpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoc291cmNlKS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywga2V5KSB7XG4gICAgICAgIGFjY1trZXldID0gc291cmNlW2tleV07XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgdGFyZ2V0KTtcbn07XG5cbmV4cG9ydHMuZGVjb2RlID0gZnVuY3Rpb24gKHN0cikge1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoc3RyLnJlcGxhY2UoL1xcKy9nLCAnICcpKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgfVxufTtcblxuZXhwb3J0cy5lbmNvZGUgPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgLy8gVGhpcyBjb2RlIHdhcyBvcmlnaW5hbGx5IHdyaXR0ZW4gYnkgQnJpYW4gV2hpdGUgKG1zY2RleCkgZm9yIHRoZSBpby5qcyBjb3JlIHF1ZXJ5c3RyaW5nIGxpYnJhcnkuXG4gICAgLy8gSXQgaGFzIGJlZW4gYWRhcHRlZCBoZXJlIGZvciBzdHJpY3RlciBhZGhlcmVuY2UgdG8gUkZDIDM5ODZcbiAgICBpZiAoc3RyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gc3RyO1xuICAgIH1cblxuICAgIHZhciBzdHJpbmcgPSB0eXBlb2Ygc3RyID09PSAnc3RyaW5nJyA/IHN0ciA6IFN0cmluZyhzdHIpO1xuXG4gICAgdmFyIG91dCA9ICcnO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBjID0gc3RyaW5nLmNoYXJDb2RlQXQoaSk7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgYyA9PT0gMHgyRCAgICAvLyAtXG4gICAgICAgICAgICB8fCBjID09PSAweDJFIC8vIC5cbiAgICAgICAgICAgIHx8IGMgPT09IDB4NUYgLy8gX1xuICAgICAgICAgICAgfHwgYyA9PT0gMHg3RSAvLyB+XG4gICAgICAgICAgICB8fCAoYyA+PSAweDMwICYmIGMgPD0gMHgzOSkgLy8gMC05XG4gICAgICAgICAgICB8fCAoYyA+PSAweDQxICYmIGMgPD0gMHg1QSkgLy8gYS16XG4gICAgICAgICAgICB8fCAoYyA+PSAweDYxICYmIGMgPD0gMHg3QSkgLy8gQS1aXG4gICAgICAgICkge1xuICAgICAgICAgICAgb3V0ICs9IHN0cmluZy5jaGFyQXQoaSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjIDwgMHg4MCkge1xuICAgICAgICAgICAgb3V0ID0gb3V0ICsgaGV4VGFibGVbY107XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjIDwgMHg4MDApIHtcbiAgICAgICAgICAgIG91dCA9IG91dCArIChoZXhUYWJsZVsweEMwIHwgKGMgPj4gNildICsgaGV4VGFibGVbMHg4MCB8IChjICYgMHgzRildKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGMgPCAweEQ4MDAgfHwgYyA+PSAweEUwMDApIHtcbiAgICAgICAgICAgIG91dCA9IG91dCArIChoZXhUYWJsZVsweEUwIHwgKGMgPj4gMTIpXSArIGhleFRhYmxlWzB4ODAgfCAoKGMgPj4gNikgJiAweDNGKV0gKyBoZXhUYWJsZVsweDgwIHwgKGMgJiAweDNGKV0pO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpICs9IDE7XG4gICAgICAgIGMgPSAweDEwMDAwICsgKCgoYyAmIDB4M0ZGKSA8PCAxMCkgfCAoc3RyaW5nLmNoYXJDb2RlQXQoaSkgJiAweDNGRikpO1xuICAgICAgICBvdXQgKz0gaGV4VGFibGVbMHhGMCB8IChjID4+IDE4KV1cbiAgICAgICAgICAgICsgaGV4VGFibGVbMHg4MCB8ICgoYyA+PiAxMikgJiAweDNGKV1cbiAgICAgICAgICAgICsgaGV4VGFibGVbMHg4MCB8ICgoYyA+PiA2KSAmIDB4M0YpXVxuICAgICAgICAgICAgKyBoZXhUYWJsZVsweDgwIHwgKGMgJiAweDNGKV07XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dDtcbn07XG5cbmV4cG9ydHMuY29tcGFjdCA9IGZ1bmN0aW9uIChvYmosIHJlZmVyZW5jZXMpIHtcbiAgICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgb2JqID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuXG4gICAgdmFyIHJlZnMgPSByZWZlcmVuY2VzIHx8IFtdO1xuICAgIHZhciBsb29rdXAgPSByZWZzLmluZGV4T2Yob2JqKTtcbiAgICBpZiAobG9va3VwICE9PSAtMSkge1xuICAgICAgICByZXR1cm4gcmVmc1tsb29rdXBdO1xuICAgIH1cblxuICAgIHJlZnMucHVzaChvYmopO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgICB2YXIgY29tcGFjdGVkID0gW107XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmoubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIGlmIChvYmpbaV0gJiYgdHlwZW9mIG9ialtpXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICBjb21wYWN0ZWQucHVzaChleHBvcnRzLmNvbXBhY3Qob2JqW2ldLCByZWZzKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBvYmpbaV0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgY29tcGFjdGVkLnB1c2gob2JqW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb21wYWN0ZWQ7XG4gICAgfVxuXG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICAgIGtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIG9ialtrZXldID0gZXhwb3J0cy5jb21wYWN0KG9ialtrZXldLCByZWZzKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBvYmo7XG59O1xuXG5leHBvcnRzLmlzUmVnRXhwID0gZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgUmVnRXhwXSc7XG59O1xuXG5leHBvcnRzLmlzQnVmZmVyID0gZnVuY3Rpb24gKG9iaikge1xuICAgIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiAhIShvYmouY29uc3RydWN0b3IgJiYgb2JqLmNvbnN0cnVjdG9yLmlzQnVmZmVyICYmIG9iai5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihvYmopKTtcbn07XG4iXX0= diff --git a/build/ccxt.es5.js b/build/ccxt.es5.js index 145ca5bf3497..c7eb70a20240 100644 --- a/build/ccxt.es5.js +++ b/build/ccxt.es5.js @@ -57,7 +57,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" //----------------------------------------------------------------------------- // this is updated by vss.js when building - var version = '1.4.96'; + var version = '1.4.97'; //----------------------------------------------------------------------------- // platform detection @@ -21487,4 +21487,4 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" //----------------------------------------------------------------------------- })(); // end of namespace -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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OztBQVVBOztBQUVBLFFBQU0sT0FBTyxPQUFPLE1BQVAsQ0FBZSxtQkFBb0IsU0FBcEIsQ0FBZixFQUErQzs7QUFFeEQsd0JBRndEOztBQUl4RDs7QUFFQSw0QkFOd0Q7QUFPeEQsb0NBUHdEO0FBUXhELGtDQVJ3RDtBQVN4RCxnREFUd0Q7QUFVeEQsNENBVndEO0FBV3hELGtDQVh3RDtBQVl4RCxzQ0Fad0Q7QUFheEQsc0NBYndEO0FBY3hELGtEQWR3RDs7QUFnQnhEOztBQUVBLG9CQWxCd0Q7QUFtQnhELHdCQW5Cd0Q7QUFvQnhELDhCQXBCd0Q7QUFxQnhELHdCQXJCd0Q7QUFzQnhELHNCQXRCd0Q7QUF1QnhELGtCQXZCd0Q7QUF3QnhELHdCQXhCd0Q7QUF5QnhELHNCQXpCd0Q7QUEwQnhELHdCQTFCd0Q7QUEyQnhELHNCQTNCd0Q7QUE0QnhELG9CQTVCd0Q7QUE2QnhELDRCQTdCd0Q7QUE4QnhELGdCQTlCd0Q7QUErQnhELHdCQS9Cd0Q7O0FBaUN4RDs7QUFFQSxrQkFBVSxPQW5DOEM7QUFvQ3hELGlCQUFTLE1BcEMrQzs7QUFzQ3hEOztBQUVBLGtDQXhDd0Q7QUF5Q3hELHNDQXpDd0Q7QUEwQ3hELHNDQTFDd0Q7QUEyQ3hELHNDQTNDd0Q7QUE0Q3hELG9DQTVDd0Q7QUE2Q3hELHNDQTdDd0Q7QUE4Q3hELHNDQTlDd0Q7QUErQ3hELHdDQS9Dd0Q7QUFnRHhELGtCQWhEd0Q7QUFpRHhELGtCQWpEd0Q7QUFrRHhEOztBQWxEd0QsS0FBL0MsQ0FBYjs7QUFzREE7O0FBRUEsUUFBSSxVQUFKLEVBQWdCOztBQUVaLGVBQU8sT0FBUCxHQUFpQixJQUFqQjtBQUVILEtBSkQsTUFJTzs7QUFFSCxlQUFPLElBQVAsR0FBYyxJQUFkO0FBQ0g7O0FBRUQ7QUFFQyxDQWx2ZUQsSSxDQWt2ZU0iLCJmaWxlIjoiY2N4dC5lczUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuLypcblxuTUlUIExpY2Vuc2VcblxuQ29weXJpZ2h0IChjKSAyMDE3IElnb3IgS3JvaXRvclxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG5vZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG5pbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG50byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG5jb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG5GSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG5PVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuU09GVFdBUkUuXG5cbiovXG5cbihmdW5jdGlvbiAoKSB7XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIGRlcGVuZGVuY2llc1xuXG5jb25zdCBDcnlwdG9KUyA9IHJlcXVpcmUgKCdjcnlwdG8tanMnKVxuICAgICwgcXMgICAgICAgPSByZXF1aXJlICgncXMnKSAvLyBxdWVyeXN0cmluZ1xuICAgIC8vICwgd3MgICAgICAgPSByZXF1aXJlICgnd3MnKSAvLyB3ZWJzb2NrZXRcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gdGhpcyBpcyB1cGRhdGVkIGJ5IHZzcy5qcyB3aGVuIGJ1aWxkaW5nXG5cbmNvbnN0IHZlcnNpb24gPSAnMS40Ljk2J1xuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBwbGF0Zm9ybSBkZXRlY3Rpb25cblxuY29uc3QgaXNOb2RlICAgICA9ICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJylcbiAgICAsIGlzQ29tbW9uSlMgPSAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcpICYmICh0eXBlb2YgcmVxdWlyZSAhPT0gJ3VuZGVmaW5lZCcpXG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuY2xhc3MgQ0NYVEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgICAgIHN1cGVyIChtZXNzYWdlKVxuICAgICAgICAvLyBhIHdvcmthcm91bmQgdG8gbWFrZSBgaW5zdGFuY2VvZiBDQ1hURXJyb3JgIHdvcmsgaW4gRVM1XG4gICAgICAgIHRoaXMuY29uc3RydWN0b3IgPSBDQ1hURXJyb3JcbiAgICAgICAgdGhpcy5fX3Byb3RvX18gICA9IENDWFRFcnJvci5wcm90b3R5cGVcbiAgICAgICAgdGhpcy5tZXNzYWdlICAgICA9IG1lc3NhZ2VcbiAgICB9XG59XG5cbmNsYXNzIEV4Y2hhbmdlRXJyb3IgZXh0ZW5kcyBDQ1hURXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgICAgIHN1cGVyIChtZXNzYWdlKVxuICAgICAgICB0aGlzLmNvbnN0cnVjdG9yID0gRXhjaGFuZ2VFcnJvclxuICAgICAgICB0aGlzLl9fcHJvdG9fXyAgID0gRXhjaGFuZ2VFcnJvci5wcm90b3R5cGVcbiAgICAgICAgdGhpcy5tZXNzYWdlICAgICA9IG1lc3NhZ2VcbiAgICB9XG59XG5cbmNsYXNzIE5vdFN1cHBvcnRlZCBleHRlbmRzIEV4Y2hhbmdlRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgICAgIHN1cGVyIChtZXNzYWdlKVxuICAgICAgICB0aGlzLmNvbnN0cnVjdG9yID0gTm90U3VwcG9ydGVkXG4gICAgICAgIHRoaXMuX19wcm90b19fICAgPSBOb3RTdXBwb3J0ZWQucHJvdG90eXBlXG4gICAgICAgIHRoaXMubWVzc2FnZSAgICAgPSBtZXNzYWdlXG4gICAgfVxufVxuXG5jbGFzcyBBdXRoZW50aWNhdGlvbkVycm9yIGV4dGVuZHMgRXhjaGFuZ2VFcnJvciB7XG4gICAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICAgICAgc3VwZXIgKG1lc3NhZ2UpXG4gICAgICAgIHRoaXMuY29uc3RydWN0b3IgPSBBdXRoZW50aWNhdGlvbkVycm9yXG4gICAgICAgIHRoaXMuX19wcm90b19fICAgPSBBdXRoZW50aWNhdGlvbkVycm9yLnByb3RvdHlwZVxuICAgICAgICB0aGlzLm1lc3NhZ2UgICAgID0gbWVzc2FnZVxuICAgIH1cbn1cblxuY2xhc3MgSW5zdWZmaWNpZW50RnVuZHMgZXh0ZW5kcyBFeGNoYW5nZUVycm9yIHtcbiAgICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgICAgICBzdXBlciAobWVzc2FnZSlcbiAgICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IEluc3VmZmljaWVudEZ1bmRzXG4gICAgICAgIHRoaXMuX19wcm90b19fICAgPSBJbnN1ZmZpY2llbnRGdW5kcy5wcm90b3R5cGVcbiAgICAgICAgdGhpcy5tZXNzYWdlICAgICA9IG1lc3NhZ2VcbiAgICB9ICAgXG59XG5cbmNsYXNzIE5ldHdvcmtFcnJvciBleHRlbmRzIENDWFRFcnJvciB7XG4gICAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICAgICAgc3VwZXIgKG1lc3NhZ2UpXG4gICAgICAgIHRoaXMuY29uc3RydWN0b3IgPSBOZXR3b3JrRXJyb3JcbiAgICAgICAgdGhpcy5fX3Byb3RvX18gICA9IE5ldHdvcmtFcnJvci5wcm90b3R5cGVcbiAgICAgICAgdGhpcy5tZXNzYWdlICAgICA9IG1lc3NhZ2VcbiAgICB9XG59XG5cbmNsYXNzIEREb1NQcm90ZWN0aW9uIGV4dGVuZHMgTmV0d29ya0Vycm9yIHtcbiAgICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgICAgICBzdXBlciAobWVzc2FnZSlcbiAgICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IEREb1NQcm90ZWN0aW9uXG4gICAgICAgIHRoaXMuX19wcm90b19fICAgPSBERG9TUHJvdGVjdGlvbi5wcm90b3R5cGVcbiAgICAgICAgdGhpcy5tZXNzYWdlICAgICA9IG1lc3NhZ2VcbiAgICB9XG59XG5cbmNsYXNzIFJlcXVlc3RUaW1lb3V0IGV4dGVuZHMgTmV0d29ya0Vycm9yIHtcbiAgICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgICAgICBzdXBlciAobWVzc2FnZSlcbiAgICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IFJlcXVlc3RUaW1lb3V0XG4gICAgICAgIHRoaXMuX19wcm90b19fICAgPSBSZXF1ZXN0VGltZW91dC5wcm90b3R5cGVcbiAgICAgICAgdGhpcy5tZXNzYWdlICAgICA9IG1lc3NhZ2VcbiAgICB9XG59XG5cbmNsYXNzIEV4Y2hhbmdlTm90QXZhaWxhYmxlIGV4dGVuZHMgTmV0d29ya0Vycm9yIHtcbiAgICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgICAgICBzdXBlciAobWVzc2FnZSlcbiAgICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IEV4Y2hhbmdlTm90QXZhaWxhYmxlXG4gICAgICAgIHRoaXMuX19wcm90b19fICAgPSBFeGNoYW5nZU5vdEF2YWlsYWJsZS5wcm90b3R5cGVcbiAgICAgICAgdGhpcy5tZXNzYWdlICAgICA9IG1lc3NhZ2VcbiAgICB9XG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIHV0aWxpdHkgaGVscGVyc1xuXG5jb25zdCBzbGVlcCA9IG1zID0+IG5ldyBQcm9taXNlIChyZXNvbHZlID0+IHNldFRpbWVvdXQgKHJlc29sdmUsIG1zKSk7XG5cbmNvbnN0IGRlY2ltYWwgPSBmbG9hdCA9PiBwYXJzZUZsb2F0IChmbG9hdCkudG9TdHJpbmcgKClcblxuY29uc3QgdGltZW91dCA9IChtcywgcHJvbWlzZSkgPT5cbiAgICAgICAgUHJvbWlzZS5yYWNlIChbXG4gICAgICAgICAgICBwcm9taXNlLFxuICAgICAgICAgICAgc2xlZXAgKG1zKS50aGVuICgoKSA9PiB7IHRocm93IG5ldyBSZXF1ZXN0VGltZW91dCAoJ3JlcXVlc3QgdGltZWQgb3V0JykgfSlcbiAgICAgICAgXSlcblxuY29uc3QgY2FwaXRhbGl6ZSA9IHN0cmluZyA9PiBzdHJpbmcubGVuZ3RoID8gKHN0cmluZy5jaGFyQXQgKDApLnRvVXBwZXJDYXNlICgpICsgc3RyaW5nLnNsaWNlICgxKSkgOiBzdHJpbmdcblxuY29uc3Qga2V5c29ydCA9IG9iamVjdCA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0ge31cbiAgICBPYmplY3Qua2V5cyAob2JqZWN0KS5zb3J0ICgpLmZvckVhY2ggKGtleSA9PiByZXN1bHRba2V5XSA9IG9iamVjdFtrZXldKVxuICAgIHJldHVybiByZXN1bHRcbn1cblxuY29uc3QgZXh0ZW5kID0gKC4uLmFyZ3MpID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSB7fVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKylcbiAgICAgICAgaWYgKHR5cGVvZiBhcmdzW2ldID09PSAnb2JqZWN0JylcbiAgICAgICAgICAgIE9iamVjdC5rZXlzIChhcmdzW2ldKS5mb3JFYWNoIChrZXkgPT5cbiAgICAgICAgICAgICAgICAocmVzdWx0W2tleV0gPSBhcmdzW2ldW2tleV0pKVxuICAgIHJldHVybiByZXN1bHRcbn1cblxuY29uc3Qgb21pdCA9IGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgICBjb25zdCByZXN1bHQgPSBleHRlbmQgKG9iamVjdClcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKylcbiAgICAgICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbaV0gPT09ICdzdHJpbmcnKVxuICAgICAgICAgICAgZGVsZXRlIHJlc3VsdFthcmd1bWVudHNbaV1dXG4gICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkgKGFyZ3VtZW50c1tpXSkpXG4gICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IGFyZ3VtZW50c1tpXS5sZW5ndGg7IGsrKylcbiAgICAgICAgICAgICAgICBkZWxldGUgcmVzdWx0W2FyZ3VtZW50c1tpXVtrXV1cbiAgICByZXR1cm4gcmVzdWx0XG59XG5cbmNvbnN0IGluZGV4QnkgPSAoYXJyYXksIGtleSkgPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQgZWxlbWVudCA9IGFycmF5W2ldXG4gICAgICAgIGlmICh0eXBlb2YgZWxlbWVudFtrZXldICE9ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXN1bHRbZWxlbWVudFtrZXldXSA9IGVsZW1lbnRcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0XG59XG5cbmNvbnN0IHNvcnRCeSA9IChhcnJheSwga2V5LCBkZXNjZW5kaW5nID0gZmFsc2UpID0+IHtcbiAgICBkZXNjZW5kaW5nID0gZGVzY2VuZGluZyA/IC0xIDogMVxuICAgIHJldHVybiBhcnJheS5zb3J0ICgoYSwgYikgPT4gKChhW2tleV0gPCBiW2tleV0pID8gLWRlc2NlbmRpbmcgOiAoKGFba2V5XSA+IGJba2V5XSkgPyBkZXNjZW5kaW5nIDogMCkpKVxufVxuXG5jb25zdCBmbGF0dGVuID0gKGFycmF5LCByZXN1bHQgPSBbXSkgPT4ge1xuICAgIGZvciAobGV0IGkgPSAwLCBsZW5ndGggPSBhcnJheS5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGFycmF5W2ldXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5ICh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGZsYXR0ZW4gKHZhbHVlLCByZXN1bHQpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCAodmFsdWUpXG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdFxufVxuXG5jb25zdCB1bmlxdWUgPSBhcnJheSA9PiBhcnJheS5maWx0ZXIgKCh2YWx1ZSwgaW5kZXgsIHNlbGYpID0+IChzZWxmLmluZGV4T2YgKHZhbHVlKSA9PSBpbmRleCkpXG5cbmNvbnN0IHBsdWNrID0gKGFycmF5LCBrZXkpID0+IGFycmF5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIgKGVsZW1lbnQgPT4gKHR5cGVvZiBlbGVtZW50W2tleV0gIT0gJ3VuZGVmaW5lZCcpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwIChlbGVtZW50ID0+IGVsZW1lbnRba2V5XSlcblxuY29uc3QgdXJsZW5jb2RlID0gb2JqZWN0ID0+IHFzLnN0cmluZ2lmeSAob2JqZWN0KVxuXG5jb25zdCBzdW0gPSAoLi4uYXJncykgPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGFyZ3MuZmlsdGVyIChhcmcgPT4gdHlwZW9mIGFyZyAhPSAndW5kZWZpbmVkJylcbiAgICByZXR1cm4gKHJlc3VsdC5sZW5ndGggPiAwKSA/XG4gICAgICAgIHJlc3VsdC5yZWR1Y2UgKChzdW0sIHZhbHVlKSA9PiBzdW0gKyB2YWx1ZSwgMCkgOiB1bmRlZmluZWRcbn1cblxuY29uc3Qgb3JkZXJlZCA9IHggPT4geCAvLyBhIHN0dWIgdG8ga2VlcCBhc3NvYyBrZXlzIGluIG9yZGVyLCBpbiBKUyBpdCBkb2VzIG5vdGhpbmcsIGl0J3MgbW9zdGx5IGZvciBQeXRob25cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gYSBjcm9zcy1wbGF0Zm9ybSBGZXRjaCBBUElcblxuY29uc3Qgbm9kZUZldGNoICAgPSBpc05vZGUgJiYgbW9kdWxlLnJlcXVpcmUgKCdub2RlLWZldGNoJykgICAgICAgICAvLyB1c2luZyBtb2R1bGUucmVxdWlyZSB0byBwcmV2ZW50IFdlYnBhY2sgLyBSZWFjdCBOYXRpdmUgZnJvbSB0cnlpbmcgdG8gaW5jbHVkZSBpdFxuICAgICwgd2luZG93RmV0Y2ggPSAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmZldGNoKSAvLyBuYXRpdmUgRmV0Y2ggQVBJIChpbiBuZXdlciBicm93c2VycylcbiAgICAsIHhockZldGNoICAgID0gKHVybCwgb3B0aW9ucywgdmVyYm9zZSA9IGZhbHNlKSA9PiAgICAgICAgICAgICAgLy8gYSBxdWljayBhZC1ob2MgcG9seWZpbGwgKGZvciBvbGRlciBicm93c2VycylcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBQcm9taXNlICgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cgKHVybCwgb3B0aW9ucylcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCAoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1ldGhvZCA9IG9wdGlvbnMubWV0aG9kIHx8ICdHRVQnXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHIub3BlbiAobWV0aG9kLCB1cmwsIHRydWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4aHIuc3RhdHVzID09IDIwMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlICh4aHIucmVzcG9uc2VUZXh0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7IC8vIFs0MDMsIDQwNCwgLi4uXS5pbmRleE9mICh4aHIuc3RhdHVzKSA+PSAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yIChtZXRob2QsIHVybCwgeGhyLnN0YXR1cywgeGhyLnJlc3BvbnNlVGV4dClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5oZWFkZXJzICE9ICd1bmRlZmluZWQnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBoZWFkZXIgaW4gb3B0aW9ucy5oZWFkZXJzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIgKGhlYWRlciwgb3B0aW9ucy5oZWFkZXJzW2hlYWRlcl0pXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHIuc2VuZCAob3B0aW9ucy5ib2R5KVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcblxuY29uc3QgZmV0Y2ggPSBub2RlRmV0Y2ggfHwgd2luZG93RmV0Y2ggfHwgeGhyRmV0Y2hcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gc3RyaW5nIOKGkOKGkiBiaW5hcnkg4oaQ4oaSIGJhc2U2NCBjb252ZXJzaW9uIHJvdXRpbmVzXG5cbmNvbnN0IHN0cmluZ1RvQmluYXJ5ID0gc3RyID0+IHtcbiAgICBjb25zdCBhcnIgPSBuZXcgVWludDhBcnJheSAoc3RyLmxlbmd0aClcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykgeyBhcnJbaV0gPSBzdHIuY2hhckNvZGVBdChpKTsgfVxuICAgIHJldHVybiBDcnlwdG9KUy5saWIuV29yZEFycmF5LmNyZWF0ZSAoYXJyKVxufVxuXG5jb25zdCBzdHJpbmdUb0Jhc2U2NCA9IHN0cmluZyA9PiBDcnlwdG9KUy5lbmMuTGF0aW4xLnBhcnNlIChzdHJpbmcpLnRvU3RyaW5nIChDcnlwdG9KUy5lbmMuQmFzZTY0KVxuICAgICwgdXRmMTZUb0Jhc2U2NCAgPSBzdHJpbmcgPT4gQ3J5cHRvSlMuZW5jLlV0ZjE2IC5wYXJzZSAoc3RyaW5nKS50b1N0cmluZyAoQ3J5cHRvSlMuZW5jLkJhc2U2NClcbiAgICAsIGJhc2U2NFRvQmluYXJ5ID0gc3RyaW5nID0+IENyeXB0b0pTLmVuYy5CYXNlNjQucGFyc2UgKHN0cmluZylcbiAgICAsIGJhc2U2NFRvU3RyaW5nID0gc3RyaW5nID0+IENyeXB0b0pTLmVuYy5CYXNlNjQucGFyc2UgKHN0cmluZykudG9TdHJpbmcgKENyeXB0b0pTLmVuYy5VdGY4KVxuICAgICwgYmluYXJ5VG9TdHJpbmcgPSBzdHJpbmcgPT4gc3RyaW5nXG5cbmNvbnN0IGJpbmFyeUNvbmNhdCA9ICguLi5hcmdzKSA9PiBhcmdzLnJlZHVjZSAoKGEsIGIpID0+IGEuY29uY2F0IChiKSlcblxuLy8gdXJsLXNhZmUtYmFzZTY0IHdpdGhvdXQgZXF1YWxzIHNpZ25zLCB3aXRoICsgcmVwbGFjZWQgYnkgLSBhbmQgc2xhc2hlcyByZXBsYWNlZCBieSB1bmRlcnNjb3Jlc1xuY29uc3QgdXJsZW5jb2RlQmFzZTY0ID0gYmFzZTY0c3RyaW5nID0+IGJhc2U2NHN0cmluZy5yZXBsYWNlICgvWz1dKyQvLCAnJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSAoL1xcKy9nLCAnLScpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UgKC9cXC8vZywgJ18nKVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBjcnlwdG9ncmFwaHlcblxuY29uc3QgaGFzaCA9IChyZXF1ZXN0LCBoYXNoID0gJ21kNScsIGRpZ2VzdCA9ICdoZXgnKSA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gQ3J5cHRvSlNbaGFzaC50b1VwcGVyQ2FzZSAoKV0gKHJlcXVlc3QpXG4gICAgcmV0dXJuIChkaWdlc3QgPT0gJ2JpbmFyeScpID8gcmVzdWx0IDogcmVzdWx0LnRvU3RyaW5nIChDcnlwdG9KUy5lbmNbY2FwaXRhbGl6ZSAoZGlnZXN0KV0pXG59XG5cbmNvbnN0IGhtYWMgPSAocmVxdWVzdCwgc2VjcmV0LCBoYXNoID0gJ3NoYTI1NicsIGRpZ2VzdCA9ICdoZXgnKSA9PiB7XG4gICAgY29uc3QgZW5jb2RpbmcgPSAoZGlnZXN0ID09ICdiaW5hcnknKSA/ICdMYXRpbjEnIDogY2FwaXRhbGl6ZSAoZGlnZXN0KVxuICAgIHJldHVybiBDcnlwdG9KU1snSG1hYycgKyBoYXNoLnRvVXBwZXJDYXNlICgpXSAocmVxdWVzdCwgc2VjcmV0KS50b1N0cmluZyAoQ3J5cHRvSlMuZW5jW2NhcGl0YWxpemUgKGVuY29kaW5nKV0pXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIGEgSlNPTiBXZWIgVG9rZW4gYXV0aGVudGljYXRpb24gbWV0aG9kXG5cbmNvbnN0IGp3dCA9IChyZXF1ZXN0LCBzZWNyZXQsIGFsZyA9ICdIUzI1NicsIGhhc2ggPSAnc2hhMjU2JykgPT4ge1xuICAgIGNvbnN0IGVuY29kZWRIZWFkZXIgPSB1cmxlbmNvZGVCYXNlNjQgKHN0cmluZ1RvQmFzZTY0IChKU09OLnN0cmluZ2lmeSAoeyAnYWxnJzogYWxnLCAndHlwJzogJ0pXVCcgfSkpKVxuICAgICAgICAsIGVuY29kZWREYXRhID0gdXJsZW5jb2RlQmFzZTY0IChzdHJpbmdUb0Jhc2U2NCAoSlNPTi5zdHJpbmdpZnkgKHJlcXVlc3QpKSlcbiAgICAgICAgLCB0b2tlbiA9IFsgZW5jb2RlZEhlYWRlciwgZW5jb2RlZERhdGEgXS5qb2luICgnLicpXG4gICAgICAgICwgc2lnbmF0dXJlID0gdXJsZW5jb2RlQmFzZTY0ICh1dGYxNlRvQmFzZTY0IChobWFjICh0b2tlbiwgc2VjcmV0LCBoYXNoLCAndXRmMTYnKSkpXG4gICAgcmV0dXJuIFsgdG9rZW4sIHNpZ25hdHVyZSBdLmpvaW4gKCcuJylcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gY29uc3QgV2ViU29ja2V0ID0gcmVxdWlyZSgnd3MnKVxuLy8gY29uc3Qgd3MgPSBuZXcgV2ViU29ja2V0ICh0aGlzLnVybHNbJ3dlYnNvY2tldCddKVxuLy8gd3Mub24gKCdvcGVuJywgZnVuY3Rpb24gb3BlbiAoKSB7XG4vLyAgICAgY29uc29sZS5sb2cgKCdjb25uZWN0ZWQnKVxuLy8gICAgIC8vIHdzLnNlbmQgKERhdGUubm93ICgpKVxuLy8gfSlcbi8vIHdzLm9uICgnY2xvc2UnLCBmdW5jdGlvbiBjbG9zZSAoKSB7XG4vLyAgICAgY29uc29sZS5sb2cgKCdkaXNjb25uZWN0ZWQnKVxuLy8gfSk7XG4vLyB3cy5vbiAoJ21lc3NhZ2UnLCBmdW5jdGlvbiBpbmNvbWluZyAoZGF0YSkge1xuLy8gICAgIC8vIGNvbnNvbGUubG9nIChgUm91bmR0cmlwIHRpbWU6ICR7RGF0ZS5ub3coKSAtIGRhdGF9IG1zYCk7XG4vLyAgICAgc2V0VGltZW91dCAoZnVuY3Rpb24gdGltZW91dCAoKSB7XG4vLyAgICAgICAgIHdzLnNlbmQgKERhdGUubm93ICgpKVxuLy8gICAgIH0sIDUwMClcbi8vIH0pXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIHRoZSBiYXNlIGNsYXNzXG5cbmNvbnN0IEV4Y2hhbmdlID0gZnVuY3Rpb24gKGNvbmZpZykge1xuXG4gICAgdGhpcy5oYXNoID0gaGFzaFxuICAgIHRoaXMuaG1hYyA9IGhtYWNcbiAgICB0aGlzLmp3dCA9IGp3dCAvLyBKU09OIFdlYiBUb2tlblxuICAgIHRoaXMuYmluYXJ5Q29uY2F0ID0gYmluYXJ5Q29uY2F0XG4gICAgdGhpcy5zdHJpbmdUb0JpbmFyeSA9IHN0cmluZ1RvQmluYXJ5XG4gICAgdGhpcy5zdHJpbmdUb0Jhc2U2NCA9IHN0cmluZ1RvQmFzZTY0XG4gICAgdGhpcy5iYXNlNjRUb0JpbmFyeSA9IGJhc2U2NFRvQmluYXJ5XG4gICAgdGhpcy5iYXNlNjRUb1N0cmluZyA9IGJhc2U2NFRvU3RyaW5nXG4gICAgdGhpcy5iaW5hcnlUb1N0cmluZyA9IGJpbmFyeVRvU3RyaW5nXG4gICAgdGhpcy51dGYxNlRvQmFzZTY0ID0gdXRmMTZUb0Jhc2U2NFxuICAgIHRoaXMudXJsZW5jb2RlID0gdXJsZW5jb2RlXG4gICAgdGhpcy5lbmNvZGVVUklDb21wb25lbnQgPSBlbmNvZGVVUklDb21wb25lbnRcbiAgICB0aGlzLm9taXQgPSBvbWl0XG4gICAgdGhpcy5wbHVjayA9IHBsdWNrXG4gICAgdGhpcy51bmlxdWUgPSB1bmlxdWVcbiAgICB0aGlzLmV4dGVuZCA9IGV4dGVuZFxuICAgIHRoaXMuZmxhdHRlbiA9IGZsYXR0ZW5cbiAgICB0aGlzLmluZGV4QnkgPSBpbmRleEJ5XG4gICAgdGhpcy5zb3J0QnkgPSBzb3J0QnlcbiAgICB0aGlzLmtleXNvcnQgPSBrZXlzb3J0XG4gICAgdGhpcy5kZWNpbWFsID0gZGVjaW1hbFxuICAgIHRoaXMuY2FwaXRhbGl6ZSA9IGNhcGl0YWxpemVcbiAgICB0aGlzLmpzb24gPSBKU09OLnN0cmluZ2lmeVxuICAgIHRoaXMuc3VtID0gc3VtXG4gICAgdGhpcy5vcmRlcmVkID0gb3JkZXJlZFxuXG4gICAgdGhpcy5lbmNvZGUgPSBzdHJpbmcgPT4gc3RyaW5nXG4gICAgdGhpcy5kZWNvZGUgPSBzdHJpbmcgPT4gc3RyaW5nXG5cbiAgICBpZiAoaXNOb2RlKVxuICAgICAgICB0aGlzLm5vZGVWZXJzaW9uID0gcHJvY2Vzcy52ZXJzaW9uLm1hdGNoICgvXFxkK1xcLlxcZCsuXFxkKy8pIFswXVxuXG4gICAgdGhpcy5pbml0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLm9yZGVycyA9IHt9XG4gICAgICAgIHRoaXMudHJhZGVzID0ge31cbiAgICAgICAgaWYgKHRoaXMuYXBpKVxuICAgICAgICAgICAgdGhpcy5kZWZpbmVSRVNUQVBJICh0aGlzLmFwaSwgJ3JlcXVlc3QnKTtcbiAgICAgICAgaWYgKHRoaXMubWFya2V0cylcbiAgICAgICAgICAgIHRoaXMuc2V0TWFya2V0cyAodGhpcy5tYXJrZXRzKTtcbiAgICB9XG5cbiAgICB0aGlzLmRlZmluZVJFU1RBUEkgPSBmdW5jdGlvbiAoYXBpLCBtZXRob2ROYW1lLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgT2JqZWN0LmtleXMgKGFwaSkuZm9yRWFjaCAodHlwZSA9PiB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyAoYXBpW3R5cGVdKS5mb3JFYWNoIChodHRwTWV0aG9kID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgdXJscyA9IGFwaVt0eXBlXVtodHRwTWV0aG9kXVxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdXJscy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgdXJsID0gdXJsc1tpXS50cmltICgpXG4gICAgICAgICAgICAgICAgICAgIGxldCBzcGxpdFBhdGggPSB1cmwuc3BsaXQgKC9bXmEtekEtWjAtOV0vKVxuXG4gICAgICAgICAgICAgICAgICAgIGxldCB1cHBlcmNhc2VNZXRob2QgID0gaHR0cE1ldGhvZC50b1VwcGVyQ2FzZSAoKVxuICAgICAgICAgICAgICAgICAgICBsZXQgbG93ZXJjYXNlTWV0aG9kICA9IGh0dHBNZXRob2QudG9Mb3dlckNhc2UgKClcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNhbWVsY2FzZU1ldGhvZCAgPSBjYXBpdGFsaXplIChsb3dlcmNhc2VNZXRob2QpXG4gICAgICAgICAgICAgICAgICAgIGxldCBjYW1lbGNhc2VTdWZmaXggID0gc3BsaXRQYXRoLm1hcCAoY2FwaXRhbGl6ZSkuam9pbiAoJycpXG4gICAgICAgICAgICAgICAgICAgIGxldCB1bmRlcnNjb3JlU3VmZml4ID0gc3BsaXRQYXRoLm1hcCAoeCA9PiB4LnRyaW0gKCkudG9Mb3dlckNhc2UgKCkpLmZpbHRlciAoeCA9PiB4Lmxlbmd0aCA+IDApLmpvaW4gKCdfJylcblxuICAgICAgICAgICAgICAgICAgICBpZiAoY2FtZWxjYXNlU3VmZml4LmluZGV4T2YgKGNhbWVsY2FzZU1ldGhvZCkgPT09IDApXG4gICAgICAgICAgICAgICAgICAgICAgICBjYW1lbGNhc2VTdWZmaXggPSBjYW1lbGNhc2VTdWZmaXguc2xpY2UgKGNhbWVsY2FzZU1ldGhvZC5sZW5ndGgpXG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHVuZGVyc2NvcmVTdWZmaXguaW5kZXhPZiAobG93ZXJjYXNlTWV0aG9kKSA9PT0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVyc2NvcmVTdWZmaXggPSB1bmRlcnNjb3JlU3VmZml4LnNsaWNlIChsb3dlcmNhc2VNZXRob2QubGVuZ3RoKVxuXG4gICAgICAgICAgICAgICAgICAgIGxldCBjYW1lbGNhc2UgID0gdHlwZSArIGNhbWVsY2FzZU1ldGhvZCArIGNhcGl0YWxpemUgKGNhbWVsY2FzZVN1ZmZpeClcbiAgICAgICAgICAgICAgICAgICAgbGV0IHVuZGVyc2NvcmUgPSB0eXBlICsgJ18nICsgbG93ZXJjYXNlTWV0aG9kICsgJ18nICsgdW5kZXJzY29yZVN1ZmZpeFxuXG4gICAgICAgICAgICAgICAgICAgIGlmICgnc3VmZml4ZXMnIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgnY2FtZWxjYXNlJyBpbiBvcHRpb25zWydzdWZmaXhlcyddKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbWVsY2FzZSArPSBvcHRpb25zWydzdWZmaXhlcyddWydjYW1lbGNhc2UnXVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCd1bmRlcnNjb3JlJyBpbiBvcHRpb25zLnN1ZmZpeGVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVyc2NvcmUgKz0gb3B0aW9uc1snc3VmZml4ZXMnXVsndW5kZXJzY29yZSddXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoJ3VuZGVyc2NvcmVfc3VmZml4JyBpbiBvcHRpb25zKVxuICAgICAgICAgICAgICAgICAgICAgICAgdW5kZXJzY29yZSArPSBvcHRpb25zLnVuZGVyc2NvcmVTdWZmaXg7XG4gICAgICAgICAgICAgICAgICAgIGlmICgnY2FtZWxjYXNlX3N1ZmZpeCcgaW4gb3B0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbWVsY2FzZSArPSBvcHRpb25zLmNhbWVsY2FzZVN1ZmZpeDtcblxuICAgICAgICAgICAgICAgICAgICBsZXQgcGFydGlhbCA9IHBhcmFtcyA9PiB0aGlzW21ldGhvZE5hbWVdICh1cmwsIHR5cGUsIHVwcGVyY2FzZU1ldGhvZCwgcGFyYW1zKVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXNbY2FtZWxjYXNlXSAgPSBwYXJ0aWFsXG4gICAgICAgICAgICAgICAgICAgIHRoaXNbdW5kZXJzY29yZV0gPSBwYXJ0aWFsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICB9LFxuXG4gICAgLy8gdGhpcy5pbml0aWFsaXplU3RyZWFtaW5nQVBJID0gZnVuY3Rpb24gKCkge1xuICAgIC8vICAgICB0aGlzLndzID0gbmV3IFdlYlNvY2tldCAodGhpcy51cmxzWyd3ZWJzb2NrZXQnXSlcbiAgICAvLyAgICAgd3Mub24gKCdvcGVuJywgZnVuY3Rpb24gb3BlbiAoKSB7XG4gICAgLy8gICAgICAgICBjb25zb2xlLmxvZyAoJ2Nvbm5lY3RlZCcpXG4gICAgLy8gICAgICAgICAvLyB3cy5zZW5kIChEYXRlLm5vdyAoKSlcbiAgICAvLyAgICAgfSlcbiAgICAvLyAgICAgd3Mub24gKCdjbG9zZScsIGZ1bmN0aW9uIGNsb3NlICgpIHtcbiAgICAvLyAgICAgICAgIGNvbnNvbGUubG9nICgnZGlzY29ubmVjdGVkJylcbiAgICAvLyAgICAgfSlcbiAgICAvLyAgICAgd3Mub24gKCdtZXNzYWdlJywgZnVuY3Rpb24gaW5jb21pbmcgKGRhdGEpIHtcbiAgICAvLyAgICAgICAgIC8vIGNvbnNvbGUubG9nIChgUm91bmR0cmlwIHRpbWU6ICR7RGF0ZS5ub3coKSAtIGRhdGF9IG1zYCk7XG4gICAgLy8gICAgICAgICBzZXRUaW1lb3V0IChmdW5jdGlvbiB0aW1lb3V0ICgpIHtcbiAgICAvLyAgICAgICAgICAgICB3cy5zZW5kIChEYXRlLm5vdyAoKSlcbiAgICAvLyAgICAgICAgIH0sIDUwMClcbiAgICAvLyAgICAgfSlcbiAgICAvLyB9LFxuXG4gICAgdGhpcy5mZXRjaCA9IGZ1bmN0aW9uICh1cmwsIG1ldGhvZCA9ICdHRVQnLCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG5cbiAgICAgICAgaWYgKGlzTm9kZSAmJiB0aGlzLnVzZXJBZ2VudClcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy51c2VyQWdlbnQgPT0gJ3N0cmluZycpXG4gICAgICAgICAgICAgICAgaGVhZGVycyA9IGV4dGVuZCAoeyAnVXNlci1BZ2VudCc6IHRoaXMudXNlckFnZW50IH0sIGhlYWRlcnMpXG4gICAgICAgICAgICBlbHNlIGlmICgodHlwZW9mIHRoaXMudXNlckFnZW50ID09ICdvYmplY3QnKSAmJiAoJ1VzZXItQWdlbnQnIGluIHRoaXMudXNlckFnZW50KSlcbiAgICAgICAgICAgICAgICBoZWFkZXJzID0gZXh0ZW5kICh0aGlzLnVzZXJBZ2VudCwgaGVhZGVycylcblxuICAgICAgICBpZiAodGhpcy5wcm94eS5sZW5ndGgpXG4gICAgICAgICAgICBoZWFkZXJzID0gZXh0ZW5kICh7ICdPcmlnaW4nOiAnKicgfSwgaGVhZGVycylcblxuICAgICAgICBsZXQgb3B0aW9ucyA9IHsgJ21ldGhvZCc6IG1ldGhvZCwgJ2hlYWRlcnMnOiBoZWFkZXJzLCAnYm9keSc6IGJvZHkgfVxuXG4gICAgICAgIHVybCA9IHRoaXMucHJveHkgKyB1cmxcblxuICAgICAgICBpZiAodGhpcy52ZXJib3NlKVxuICAgICAgICAgICAgY29uc29sZS5sb2cgKHRoaXMuaWQsIG1ldGhvZCwgdXJsLCBcIlxcblJlcXVlc3Q6XFxuXCIsIG9wdGlvbnMpXG5cbiAgICAgICAgcmV0dXJuIHRpbWVvdXQgKHRoaXMudGltZW91dCwgZmV0Y2ggKHVybCwgb3B0aW9ucylcbiAgICAgICAgICAgIC5jYXRjaCAoZSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGlzTm9kZSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VOb3RBdmFpbGFibGUgKFsgdGhpcy5pZCwgbWV0aG9kLCB1cmwsIGUudHlwZSwgZS5tZXNzYWdlIF0uam9pbiAoJyAnKSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgZSAvLyByZXRocm93IGFsbCB1bmtub3duIGVycm9yc1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuIChyZXNwb25zZSA9PiB7XG5cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJlc3BvbnNlID09ICdzdHJpbmcnKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2VcblxuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZS50ZXh0ICgpLnRoZW4gKHRleHQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy52ZXJib3NlKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cgKHRoaXMuaWQsIG1ldGhvZCwgdXJsLCB0ZXh0ID8gKFwiXFxuUmVzcG9uc2U6XFxuXCIgKyB0ZXh0KSA6ICcnKVxuICAgICAgICAgICAgICAgICAgICBpZiAoKHJlc3BvbnNlLnN0YXR1cyA+PSAyMDApICYmIChyZXNwb25zZS5zdGF0dXMgPD0gMzAwKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0XG4gICAgICAgICAgICAgICAgICAgIGxldCBlcnJvciA9IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICBsZXQgZGV0YWlscyA9IHRleHRcbiAgICAgICAgICAgICAgICAgICAgaWYgKFsgNDI5IF0uaW5kZXhPZiAocmVzcG9uc2Uuc3RhdHVzKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IEREb1NQcm90ZWN0aW9uXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoWyA0MDQsIDQwOSwgNTAwLCA1MDEsIDUwMiwgNTIxLCA1MjIsIDUyNSBdLmluZGV4T2YgKHJlc3BvbnNlLnN0YXR1cykgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBFeGNoYW5nZU5vdEF2YWlsYWJsZVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFsgNDAwLCA0MDMsIDQwNSwgNTAzIF0uaW5kZXhPZiAocmVzcG9uc2Uuc3RhdHVzKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGRvc1Byb3RlY3Rpb24gPSB0ZXh0Lm1hdGNoICgvY2xvdWRmbGFyZXxpbmNhcHN1bGEvaSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZG9zUHJvdGVjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gRERvU1Byb3RlY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBFeGNoYW5nZU5vdEF2YWlsYWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbHMgPSB0ZXh0ICsgJyAocG9zc2libGUgcmVhc29uczogJyArIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ludmFsaWQgQVBJIGtleXMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFkIG9yIG9sZCBub25jZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleGNoYW5nZSBpcyBkb3duIG9yIG9mZmxpbmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb24gbWFpbnRlbmFuY2UnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRERvUyBwcm90ZWN0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JhdGUtbGltaXRpbmcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0uam9pbiAoJywgJykgKyAnKSdcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChbIDQwOCwgNTA0IF0uaW5kZXhPZiAocmVzcG9uc2Uuc3RhdHVzKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IFJlcXVlc3RUaW1lb3V0XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoWyA0MDEsIDQyMiwgNTExIF0uaW5kZXhPZiAocmVzcG9uc2Uuc3RhdHVzKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IEF1dGhlbnRpY2F0aW9uRXJyb3JcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gRXJyb3JcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3IgKFsgdGhpcy5pZCwgbWV0aG9kLCB1cmwsIHJlc3BvbnNlLnN0YXR1cywgcmVzcG9uc2Uuc3RhdHVzVGV4dCwgZGV0YWlscyBdLmpvaW4gKCcgJykpXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pLnRoZW4gKHJlc3BvbnNlID0+IHRoaXMuaGFuZGxlUmVzcG9uc2UgKHVybCwgbWV0aG9kLCBoZWFkZXJzLCByZXNwb25zZSkpKVxuICAgIH1cblxuICAgIHRoaXMuaGFuZGxlUmVzcG9uc2UgPSBmdW5jdGlvbiAodXJsLCBtZXRob2QgPSAnR0VUJywgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuXG4gICAgICAgIHRyeSB7XG5cbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlIChib2R5KVxuXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcblxuICAgICAgICAgICAgbGV0IG1haW50ZW5hbmNlID0gYm9keS5tYXRjaCAoL29mZmxpbmV8YnVzeXxyZXRyeXx3YWl0fHVuYXZhaWxhYmxlfG1haW50YWlufG1haW50ZW5hbmNlfG1haW50ZW5hbmNpbmcvaSlcbiAgICAgICAgICAgIGxldCBkZG9zUHJvdGVjdGlvbiA9IGJvZHkubWF0Y2ggKC9jbG91ZGZsYXJlfGluY2Fwc3VsYXxvdmVybG9hZC9pKVxuXG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgZXJyb3IgPSBFeGNoYW5nZU5vdEF2YWlsYWJsZVxuICAgICAgICAgICAgICAgIGxldCBkZXRhaWxzID0gJ25vdCBhY2Nlc3NpYmxlIGZyb20gdGhpcyBsb2NhdGlvbiBhdCB0aGUgbW9tZW50J1xuICAgICAgICAgICAgICAgIGlmIChtYWludGVuYW5jZSlcbiAgICAgICAgICAgICAgICAgICAgZGV0YWlscyA9ICdvZmZsaW5lLCBvbiBtYWludGVuYW5jZSBvciB1bnJlYWNoYWJsZSBmcm9tIHRoaXMgbG9jYXRpb24gYXQgdGhlIG1vbWVudCdcbiAgICAgICAgICAgICAgICBpZiAoZGRvc1Byb3RlY3Rpb24pXG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0gRERvU1Byb3RlY3Rpb25cbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3IgKFsgdGhpcy5pZCwgbWV0aG9kLCB1cmwsIGRldGFpbHMgXS5qb2luICgnICcpKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy52ZXJib3NlKVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nICh0aGlzLmlkLCBtZXRob2QsIHVybCwgJ2Vycm9yJywgZSwgXCJyZXNwb25zZSBib2R5OlxcbidcIiArIGJvZHkgKyBcIidcIilcblxuICAgICAgICAgICAgdGhyb3cgZVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zZXRfbWFya2V0cyA9XG4gICAgdGhpcy5zZXRNYXJrZXRzID0gZnVuY3Rpb24gKG1hcmtldHMpIHtcbiAgICAgICAgbGV0IHZhbHVlcyA9IE9iamVjdC52YWx1ZXMgKG1hcmtldHMpXG4gICAgICAgIHRoaXMubWFya2V0cyA9IGluZGV4QnkgKHZhbHVlcywgJ3N5bWJvbCcpXG4gICAgICAgIHRoaXMubWFya2V0c0J5SWQgPSBpbmRleEJ5IChtYXJrZXRzLCAnaWQnKVxuICAgICAgICB0aGlzLm1hcmtldHNfYnlfaWQgPSB0aGlzLm1hcmtldHNCeUlkXG4gICAgICAgIHRoaXMuc3ltYm9scyA9IE9iamVjdC5rZXlzICh0aGlzLm1hcmtldHMpXG4gICAgICAgIGxldCBiYXNlID0gdGhpcy5wbHVjayAodmFsdWVzLmZpbHRlciAobWFya2V0ID0+ICdiYXNlJyBpbiBtYXJrZXQpLCAnYmFzZScpXG4gICAgICAgIGxldCBxdW90ZSA9IHRoaXMucGx1Y2sgKHZhbHVlcy5maWx0ZXIgKG1hcmtldCA9PiAncXVvdGUnIGluIG1hcmtldCksICdxdW90ZScpXG4gICAgICAgIHRoaXMuY3VycmVuY2llcyA9IHRoaXMudW5pcXVlIChiYXNlLmNvbmNhdCAocXVvdGUpKVxuICAgICAgICByZXR1cm4gdGhpcy5tYXJrZXRzXG4gICAgfVxuXG4gICAgdGhpcy5sb2FkX21hcmtldHMgPVxuICAgIHRoaXMubG9hZE1hcmtldHMgPSBmdW5jdGlvbiAocmVsb2FkID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKCFyZWxvYWQgJiYgdGhpcy5tYXJrZXRzKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMubWFya2V0c0J5SWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UgKChyZXNvbHZlLCByZWplY3QpID0+IHJlc29sdmUgKHRoaXMuc2V0TWFya2V0cyAodGhpcy5tYXJrZXRzKSkpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UgKChyZXNvbHZlLCByZWplY3QpID0+IHJlc29sdmUgKHRoaXMubWFya2V0cykpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZmV0Y2hNYXJrZXRzICgpLnRoZW4gKG1hcmtldHMgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0TWFya2V0cyAobWFya2V0cylcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICB0aGlzLmZldGNoX3RpY2tlcnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZldGNoVGlja2VycyAoKVxuICAgIH1cblxuICAgIHRoaXMuZmV0Y2hUaWNrZXJzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkICh0aGlzLmlkICsgJyBBUEkgZG9lcyBub3QgYWxsb3cgdG8gZmV0Y2ggYWxsIHRpY2tlcnMgYXQgb25jZSB3aXRoIGEgc2luZ2xlIGNhbGwgdG8gZmV0Y2hfdGlja2VycyAoKSBmb3Igbm93JylcbiAgICB9XG5cbiAgICB0aGlzLmZldGNoX21hcmtldHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZldGNoTWFya2V0cyAoKVxuICAgIH1cblxuICAgIHRoaXMuZmV0Y2hNYXJrZXRzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UgKChyZXNvbHZlLCByZWplY3QpID0+IHJlc29sdmUgKHRoaXMubWFya2V0cykpXG4gICAgfVxuXG4gICAgdGhpcy5jb21tb25DdXJyZW5jeUNvZGUgPSBmdW5jdGlvbiAoY3VycmVuY3kpIHtcbiAgICAgICAgaWYgKCF0aGlzLnN1YnN0aXR1dGVDb21tb25DdXJyZW5jeUNvZGVzKVxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbmN5XG4gICAgICAgIGlmIChjdXJyZW5jeSA9PSAnWEJUJylcbiAgICAgICAgICAgIHJldHVybiAnQlRDJ1xuICAgICAgICBpZiAoY3VycmVuY3kgPT0gJ0JDQycpXG4gICAgICAgICAgICByZXR1cm4gJ0JDSCdcbiAgICAgICAgaWYgKGN1cnJlbmN5ID09ICdEUksnKVxuICAgICAgICAgICAgcmV0dXJuICdEQVNIJ1xuICAgICAgICByZXR1cm4gY3VycmVuY3lcbiAgICB9XG5cbiAgICB0aGlzLm1hcmtldCA9IGZ1bmN0aW9uIChtYXJrZXQpIHtcbiAgICAgICAgcmV0dXJuICgoKHR5cGVvZiBtYXJrZXQgPT09ICdzdHJpbmcnKSAmJlxuICAgICAgICAgICAgKHR5cGVvZiB0aGlzLm1hcmtldHMgIT0gJ3VuZGVmaW5lZCcpICYmXG4gICAgICAgICAgICAodHlwZW9mIHRoaXMubWFya2V0c1ttYXJrZXRdICE9ICd1bmRlZmluZWQnKSkgP1xuICAgICAgICAgICAgICAgIHRoaXMubWFya2V0c1ttYXJrZXRdIDpcbiAgICAgICAgICAgICAgICBtYXJrZXQpXG4gICAgfVxuXG4gICAgdGhpcy5tYXJrZXRfaWQgPVxuICAgIHRoaXMubWFya2V0SWQgPSBmdW5jdGlvbiAobWFya2V0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcmtldCAobWFya2V0KS5pZCB8fCBtYXJrZXRcbiAgICB9XG5cbiAgICB0aGlzLnN5bWJvbCA9IGZ1bmN0aW9uIChtYXJrZXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFya2V0IChtYXJrZXQpLnN5bWJvbCB8fCBtYXJrZXRcbiAgICB9XG5cbiAgICB0aGlzLmV4dHJhY3RfcGFyYW1zID1cbiAgICB0aGlzLmV4dHJhY3RQYXJhbXMgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgIHZhciByZSA9IC97KFthLXpBLVowLTlfXSs/KX0vZ1xuICAgICAgICB2YXIgbWF0Y2hlcyA9IFtdXG4gICAgICAgIGxldCBtYXRjaFxuICAgICAgICB3aGlsZSAobWF0Y2ggPSByZS5leGVjIChzdHJpbmcpKVxuICAgICAgICAgICAgbWF0Y2hlcy5wdXNoIChtYXRjaFsxXSlcbiAgICAgICAgcmV0dXJuIG1hdGNoZXNcbiAgICB9XG5cbiAgICB0aGlzLmltcGxvZGVfcGFyYW1zID1cbiAgICB0aGlzLmltcGxvZGVQYXJhbXMgPSBmdW5jdGlvbiAoc3RyaW5nLCBwYXJhbXMpIHtcbiAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gcGFyYW1zKVxuICAgICAgICAgICAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UgKCd7JyArIHByb3BlcnR5ICsgJ30nLCBwYXJhbXNbcHJvcGVydHldKVxuICAgICAgICByZXR1cm4gc3RyaW5nXG4gICAgfVxuXG4gICAgdGhpcy51cmwgPSBmdW5jdGlvbiAocGF0aCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHRoaXMuaW1wbG9kZVBhcmFtcyAocGF0aCwgcGFyYW1zKTtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5vbWl0IChwYXJhbXMsIHRoaXMuZXh0cmFjdFBhcmFtcyAocGF0aCkpXG4gICAgICAgIGlmIChPYmplY3Qua2V5cyAocXVlcnkpLmxlbmd0aClcbiAgICAgICAgICAgIHJlc3VsdCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocXVlcnkpXG4gICAgICAgIHJldHVybiByZXN1bHRcbiAgICB9XG5cbiAgICB0aGlzLnBhcnNlX3RyYWRlcyA9XG4gICAgdGhpcy5wYXJzZVRyYWRlcyA9IGZ1bmN0aW9uICh0cmFkZXMsIG1hcmtldCA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gW11cbiAgICAgICAgZm9yIChsZXQgdCA9IDA7IHQgPCB0cmFkZXMubGVuZ3RoOyB0KyspIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoICh0aGlzLnBhcnNlVHJhZGUgKHRyYWRlc1t0XSwgbWFya2V0KSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgfVxuXG4gICAgdGhpcy5wYXJzZV9vcmRlcnMgPVxuICAgIHRoaXMucGFyc2VPcmRlcnMgPSBmdW5jdGlvbiAob3JkZXIsIG1hcmtldCA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gW11cbiAgICAgICAgZm9yIChsZXQgdCA9IDA7IHQgPCBvcmRlci5sZW5ndGg7IHQrKykge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2ggKHRoaXMucGFyc2VPcmRlciAob3JkZXJbdF0sIG1hcmtldCkpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH1cblxuICAgIHRoaXMucGFyc2Vfb2hsY3YgPVxuICAgIHRoaXMucGFyc2VPSExDViA9IGZ1bmN0aW9uIChvaGxjdiwgbWFya2V0ID0gdW5kZWZpbmVkLCB0aW1lZnJhbWUgPSA2MCwgc2luY2UgPSB1bmRlZmluZWQsIGxpbWl0ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBvaGxjdlxuICAgIH1cblxuICAgIHRoaXMucGFyc2Vfb2hsY3ZzID1cbiAgICB0aGlzLnBhcnNlT0hMQ1ZzID0gZnVuY3Rpb24gKG9obGN2cywgbWFya2V0ID0gdW5kZWZpbmVkLCB0aW1lZnJhbWUgPSA2MCwgc2luY2UgPSB1bmRlZmluZWQsIGxpbWl0ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSBbXVxuICAgICAgICBmb3IgKGxldCB0ID0gMDsgdCA8IG9obGN2cy5sZW5ndGg7IHQrKykge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2ggKHRoaXMucGFyc2VPSExDViAob2hsY3ZzW3RdLCBtYXJrZXQsIHRpbWVmcmFtZSwgc2luY2UsIGxpbWl0KSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgfVxuXG4gICAgdGhpcy5jcmVhdGVfbGltaXRfYnV5X29yZGVyID1cbiAgICB0aGlzLmNyZWF0ZUxpbWl0QnV5T3JkZXIgPSBmdW5jdGlvbiAobWFya2V0LCBhbW91bnQsIHByaWNlLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVPcmRlciAgKG1hcmtldCwgJ2xpbWl0JywgJ2J1eScsIGFtb3VudCwgcHJpY2UsIHBhcmFtcylcbiAgICB9XG5cbiAgICB0aGlzLmNyZWF0ZV9saW1pdF9zZWxsX29yZGVyID1cbiAgICB0aGlzLmNyZWF0ZUxpbWl0U2VsbE9yZGVyID0gZnVuY3Rpb24gKG1hcmtldCwgYW1vdW50LCBwcmljZSwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlT3JkZXIgKG1hcmtldCwgJ2xpbWl0JywgJ3NlbGwnLCBhbW91bnQsIHByaWNlLCBwYXJhbXMpXG4gICAgfVxuXG4gICAgdGhpcy5jcmVhdGVfbWFya2V0X2J1eV9vcmRlciA9XG4gICAgdGhpcy5jcmVhdGVNYXJrZXRCdXlPcmRlciA9IGZ1bmN0aW9uIChtYXJrZXQsIGFtb3VudCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlT3JkZXIgKG1hcmtldCwgJ21hcmtldCcsICdidXknLCBhbW91bnQsIHVuZGVmaW5lZCwgcGFyYW1zKVxuICAgIH1cblxuICAgIHRoaXMuY3JlYXRlX21hcmtldF9zZWxsX29yZGVyID1cbiAgICB0aGlzLmNyZWF0ZU1hcmtldFNlbGxPcmRlciA9IGZ1bmN0aW9uIChtYXJrZXQsIGFtb3VudCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlT3JkZXIgKG1hcmtldCwgJ21hcmtldCcsICdzZWxsJywgYW1vdW50LCB1bmRlZmluZWQsIHBhcmFtcylcbiAgICB9XG5cbiAgICB0aGlzLmlzbzg2MDEgICAgICAgID0gdGltZXN0YW1wID0+IG5ldyBEYXRlICh0aW1lc3RhbXApLnRvSVNPU3RyaW5nICgpXG4gICAgdGhpcy5wYXJzZTg2MDEgICAgICA9IERhdGUucGFyc2VcbiAgICB0aGlzLnNlY29uZHMgICAgICAgID0gKCkgPT4gTWF0aC5mbG9vciAodGhpcy5taWxsaXNlY29uZHMgKCkgLyAxMDAwKVxuICAgIHRoaXMubWljcm9zZWNvbmRzICAgPSAoKSA9PiBNYXRoLmZsb29yICh0aGlzLm1pbGxpc2Vjb25kcyAoKSAqIDEwMDApXG4gICAgdGhpcy5taWxsaXNlY29uZHMgICA9IERhdGUubm93XG4gICAgdGhpcy5ub25jZSAgICAgICAgICA9IHRoaXMuc2Vjb25kc1xuICAgIHRoaXMuaWQgICAgICAgICAgICAgPSB1bmRlZmluZWRcbiAgICB0aGlzLnJhdGVMaW1pdCAgICAgID0gMjAwMCAgLy8gbWlsbGlzZWNvbmRzID0gc2Vjb25kcyAqIDEwMDBcbiAgICB0aGlzLnRpbWVvdXQgICAgICAgID0gMTAwMDAgLy8gbWlsbGlzZWNvbmRzID0gc2Vjb25kcyAqIDEwMDBcbiAgICB0aGlzLnZlcmJvc2UgICAgICAgID0gZmFsc2VcbiAgICB0aGlzLnVzZXJBZ2VudCAgICAgID0gZmFsc2VcbiAgICB0aGlzLnR3b2ZhICAgICAgICAgID0gZmFsc2UgLy8gdHdvLWZhY3RvciBhdXRoZW50aWNhdGlvblxuICAgIHRoaXMuc3Vic3RpdHV0ZUNvbW1vbkN1cnJlbmN5Q29kZXMgPSB0cnVlXG4gICAgdGhpcy55eXl5bW1kZGhobW1zcyA9IHRpbWVzdGFtcCA9PiB7XG4gICAgICAgIGxldCBkYXRlID0gbmV3IERhdGUgKHRpbWVzdGFtcClcbiAgICAgICAgbGV0IHl5eXkgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyICgpXG4gICAgICAgIGxldCBNTSA9IGRhdGUuZ2V0VVRDTW9udGggKClcbiAgICAgICAgbGV0IGRkID0gZGF0ZS5nZXRVVENEYXkgKClcbiAgICAgICAgbGV0IGhoID0gZGF0ZS5nZXRVVENIb3VycyAoKVxuICAgICAgICBsZXQgbW0gPSBkYXRlLmdldFVUQ01pbnV0ZXMgKClcbiAgICAgICAgbGV0IHNzID0gZGF0ZS5nZXRVVENTZWNvbmRzICgpXG4gICAgICAgIE1NID0gTU0gPCAxMCA/ICgnMCcgKyBNTSkgOiBNTVxuICAgICAgICBkZCA9IGRkIDwgMTAgPyAoJzAnICsgZGQpIDogZGRcbiAgICAgICAgaGggPSBoaCA8IDEwID8gKCcwJyArIGhoKSA6IGhoXG4gICAgICAgIG1tID0gbW0gPCAxMCA/ICgnMCcgKyBtbSkgOiBtbVxuICAgICAgICBzcyA9IHNzIDwgMTAgPyAoJzAnICsgc3MpIDogc3NcbiAgICAgICAgcmV0dXJuIHl5eXkgKyAnLScgKyBNTSArICctJyArIGRkICsgJyAnICsgaGggKyAnOicgKyBtbSArICc6JyArIHNzXG4gICAgfVxuXG4gICAgaWYgKGlzTm9kZSlcbiAgICAgICAgdGhpcy51c2VyQWdlbnQgPSB7XG4gICAgICAgICAgICAnVXNlci1BZ2VudCc6ICdjY3h0LycgKyB2ZXJzaW9uICtcbiAgICAgICAgICAgICAgICAnICgraHR0cHM6Ly9naXRodWIuY29tL2tyb2l0b3IvY2N4dCknICtcbiAgICAgICAgICAgICAgICAnIE5vZGUuanMvJyArIHRoaXMubm9kZVZlcnNpb24gKyAnIChKYXZhU2NyaXB0KSdcbiAgICAgICAgfVxuXG4gICAgLy8gcHJlcGVuZGVkIHRvIFVSTCwgbGlrZSBodHRwczovL3Byb3h5LmNvbS9odHRwczovL2V4Y2hhbmdlLmNvbS9hcGkuLi5cbiAgICB0aGlzLnByb3h5ID0gJydcblxuICAgIHRoaXMuaGFzRmV0Y2hUaWNrZXJzID0gZmFsc2VcblxuICAgIGZvciAodmFyIHByb3BlcnR5IGluIGNvbmZpZylcbiAgICAgICAgdGhpc1twcm9wZXJ0eV0gPSBjb25maWdbcHJvcGVydHldXG5cbiAgICB0aGlzLmZldGNoX2JhbGFuY2UgICAgPSB0aGlzLmZldGNoQmFsYW5jZVxuICAgIHRoaXMuZmV0Y2hfb3JkZXJfYm9vayA9IHRoaXMuZmV0Y2hPcmRlckJvb2tcbiAgICB0aGlzLmZldGNoX3RpY2tlciAgICAgPSB0aGlzLmZldGNoVGlja2VyXG4gICAgdGhpcy5mZXRjaF90cmFkZXMgICAgID0gdGhpcy5mZXRjaFRyYWRlc1xuXG4gICAgdGhpcy5pbml0ICgpXG59XG5cbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxudmFyIF8xYnJva2VyID0ge1xuXG4gICAgJ2lkJzogJ18xYnJva2VyJyxcbiAgICAnbmFtZSc6ICcxQnJva2VyJyxcbiAgICAnY291bnRyaWVzJzogJ1VTJyxcbiAgICAncmF0ZUxpbWl0JzogMTUwMCxcbiAgICAndmVyc2lvbic6ICd2MicsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc3NjYwMjEtNDIwYmQ5ZmMtNWVjYi0xMWU3LThlZDYtNTZkMDA4MWVmZWQyLmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly8xYnJva2VyLmNvbS9hcGknLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vMWJyb2tlci5jb20nLFxuICAgICAgICAnZG9jJzogJ2h0dHBzOi8vMWJyb2tlci5jb20vP2M9ZW4vY29udGVudC9hcGktZG9jdW1lbnRhdGlvbicsXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHJpdmF0ZSc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ21hcmtldC9iYXJzJyxcbiAgICAgICAgICAgICAgICAnbWFya2V0L2NhdGVnb3JpZXMnLFxuICAgICAgICAgICAgICAgICdtYXJrZXQvZGV0YWlscycsXG4gICAgICAgICAgICAgICAgJ21hcmtldC9saXN0JyxcbiAgICAgICAgICAgICAgICAnbWFya2V0L3F1b3RlcycsXG4gICAgICAgICAgICAgICAgJ21hcmtldC90aWNrcycsXG4gICAgICAgICAgICAgICAgJ29yZGVyL2NhbmNlbCcsXG4gICAgICAgICAgICAgICAgJ29yZGVyL2NyZWF0ZScsXG4gICAgICAgICAgICAgICAgJ29yZGVyL29wZW4nLFxuICAgICAgICAgICAgICAgICdwb3NpdGlvbi9jbG9zZScsXG4gICAgICAgICAgICAgICAgJ3Bvc2l0aW9uL2Nsb3NlX2NhbmNlbCcsXG4gICAgICAgICAgICAgICAgJ3Bvc2l0aW9uL2VkaXQnLFxuICAgICAgICAgICAgICAgICdwb3NpdGlvbi9oaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAncG9zaXRpb24vb3BlbicsXG4gICAgICAgICAgICAgICAgJ3Bvc2l0aW9uL3NoYXJlZC9nZXQnLFxuICAgICAgICAgICAgICAgICdzb2NpYWwvcHJvZmlsZV9zdGF0aXN0aWNzJyxcbiAgICAgICAgICAgICAgICAnc29jaWFsL3Byb2ZpbGVfdHJhZGVzJyxcbiAgICAgICAgICAgICAgICAndXNlci9iaXRjb2luX2RlcG9zaXRfYWRkcmVzcycsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZGV0YWlscycsXG4gICAgICAgICAgICAgICAgJ3VzZXIvb3ZlcnZpZXcnLFxuICAgICAgICAgICAgICAgICd1c2VyL3F1b3RhX3N0YXR1cycsXG4gICAgICAgICAgICAgICAgJ3VzZXIvdHJhbnNhY3Rpb25fbG9nJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQ2F0ZWdvcmllcyAoKSB7XG4gICAgICAgIGxldCBjYXRlZ29yaWVzID0gYXdhaXQgdGhpcy5wcml2YXRlR2V0TWFya2V0Q2F0ZWdvcmllcyAoKTtcbiAgICAgICAgcmV0dXJuIGNhdGVnb3JpZXNbJ3Jlc3BvbnNlJ107XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoTWFya2V0cyAoKSB7XG4gICAgICAgIGxldCB0aGlzXyA9IHRoaXM7IC8vIHdvcmthcm91bmQgZm9yIEJhYmVsIGJ1ZyAobm90IHBhc3NpbmcgYHRoaXNgIHRvIF9yZWN1cnNpdmUoKSBjYWxsKVxuICAgICAgICBsZXQgY2F0ZWdvcmllcyA9IGF3YWl0IHRoaXMuZmV0Y2hDYXRlZ29yaWVzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgY2F0ZWdvcmllcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgbGV0IGNhdGVnb3J5ID0gY2F0ZWdvcmllc1tjXTtcbiAgICAgICAgICAgIGxldCBtYXJrZXRzID0gYXdhaXQgdGhpc18ucHJpdmF0ZUdldE1hcmtldExpc3QgKHtcbiAgICAgICAgICAgICAgICAnY2F0ZWdvcnknOiBjYXRlZ29yeS50b0xvd2VyQ2FzZSAoKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZm9yIChsZXQgcCA9IDA7IHAgPCBtYXJrZXRzWydyZXNwb25zZSddLmxlbmd0aDsgcCsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IG1hcmtldCA9IG1hcmtldHNbJ3Jlc3BvbnNlJ11bcF07XG4gICAgICAgICAgICAgICAgbGV0IGlkID0gbWFya2V0WydzeW1ib2wnXTtcbiAgICAgICAgICAgICAgICBsZXQgc3ltYm9sID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGxldCBiYXNlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGxldCBxdW90ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBpZiAoKGNhdGVnb3J5ID09ICdGT1JFWCcpIHx8IChjYXRlZ29yeSA9PSAnQ1JZUFRPJykpIHtcbiAgICAgICAgICAgICAgICAgICAgc3ltYm9sID0gbWFya2V0WyduYW1lJ107XG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXJ0cyA9IHN5bWJvbC5zcGxpdCAoJy8nKTtcbiAgICAgICAgICAgICAgICAgICAgYmFzZSA9IHBhcnRzWzBdO1xuICAgICAgICAgICAgICAgICAgICBxdW90ZSA9IHBhcnRzWzFdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGJhc2UgPSBpZDtcbiAgICAgICAgICAgICAgICAgICAgcXVvdGUgPSAnVVNEJztcbiAgICAgICAgICAgICAgICAgICAgc3ltYm9sID0gYmFzZSArICcvJyArIHF1b3RlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBiYXNlID0gdGhpc18uY29tbW9uQ3VycmVuY3lDb2RlIChiYXNlKTtcbiAgICAgICAgICAgICAgICBxdW90ZSA9IHRoaXNfLmNvbW1vbkN1cnJlbmN5Q29kZSAocXVvdGUpO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoICh7XG4gICAgICAgICAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICAgICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgICAgICAgICAnYmFzZSc6IGJhc2UsXG4gICAgICAgICAgICAgICAgICAgICdxdW90ZSc6IHF1b3RlLFxuICAgICAgICAgICAgICAgICAgICAnaW5mbyc6IG1hcmtldCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgYmFsYW5jZSA9IGF3YWl0IHRoaXMucHJpdmF0ZUdldFVzZXJPdmVydmlldyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYmFsYW5jZVsncmVzcG9uc2UnXTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgIH07XG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgdGhpcy5jdXJyZW5jaWVzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSB0aGlzLmN1cnJlbmNpZXNbY107XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd1c2VkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0WydCVEMnXVsnZnJlZSddID0gcGFyc2VGbG9hdCAocmVzcG9uc2VbJ2JhbGFuY2UnXSk7XG4gICAgICAgIHJlc3VsdFsnQlRDJ11bJ3RvdGFsJ10gPSByZXN1bHRbJ0JUQyddWydmcmVlJ107XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZUdldE1hcmtldFF1b3RlcyAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdzeW1ib2xzJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSByZXNwb25zZVsncmVzcG9uc2UnXVswXTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMucGFyc2U4NjAxIChvcmRlcmJvb2tbJ3VwZGF0ZWQnXSk7XG4gICAgICAgIGxldCBiaWRQcmljZSA9IHBhcnNlRmxvYXQgKG9yZGVyYm9va1snYmlkJ10pO1xuICAgICAgICBsZXQgYXNrUHJpY2UgPSBwYXJzZUZsb2F0IChvcmRlcmJvb2tbJ2FzayddKTtcbiAgICAgICAgbGV0IGJpZCA9IFsgYmlkUHJpY2UsIHVuZGVmaW5lZCBdO1xuICAgICAgICBsZXQgYXNrID0gWyBhc2tQcmljZSwgdW5kZWZpbmVkIF07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2JpZHMnOiBbIGJpZCBdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbIGFzayBdLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0KSB7XG4gICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyBmZXRjaFRyYWRlcyAoKSBtZXRob2Qgbm90IGltcGxlbWVudGVkIHlldCcpO1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCB0aGlzLnByaXZhdGVHZXRNYXJrZXRCYXJzICh7XG4gICAgICAgICAgICAnc3ltYm9sJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICdyZXNvbHV0aW9uJzogNjAsXG4gICAgICAgICAgICAnbGltaXQnOiAxLFxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IGF3YWl0IHRoaXMuZmV0Y2hPcmRlckJvb2sgKG1hcmtldCk7XG4gICAgICAgIGxldCB0aWNrZXIgPSByZXN1bHRbJ3Jlc3BvbnNlJ11bMF07XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLnBhcnNlODYwMSAodGlja2VyWydkYXRlJ10pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydoJ10pLFxuICAgICAgICAgICAgJ2xvdyc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbCddKSxcbiAgICAgICAgICAgICdiaWQnOiBvcmRlcmJvb2tbJ2JpZHMnXVswXVswXSxcbiAgICAgICAgICAgICdhc2snOiBvcmRlcmJvb2tbJ2Fza3MnXVswXVswXSxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ28nXSksXG4gICAgICAgICAgICAnY2xvc2UnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2MnXSksXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdzeW1ib2wnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICAgICAgJ21hcmdpbic6IGFtb3VudCxcbiAgICAgICAgICAgICdkaXJlY3Rpb24nOiAoc2lkZSA9PSAnc2VsbCcpID8gJ3Nob3J0JyA6ICdsb25nJyxcbiAgICAgICAgICAgICdsZXZlcmFnZSc6IDEsXG4gICAgICAgICAgICAndHlwZSc6IHNpZGUsXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlID09ICdsaW1pdCcpXG4gICAgICAgICAgICBvcmRlclsncHJpY2UnXSA9IHByaWNlO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBvcmRlclsndHlwZSddICs9ICdfbWFya2V0JztcbiAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMucHJpdmF0ZUdldE9yZGVyQ3JlYXRlICh0aGlzLmV4dGVuZCAob3JkZXIsIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXN1bHQsXG4gICAgICAgICAgICAnaWQnOiByZXN1bHRbJ3Jlc3BvbnNlJ11bJ29yZGVyX2lkJ10sXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdE9yZGVyQ2FuY2VsICh7ICdvcmRlcl9pZCc6IGlkIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICghdGhpcy5hcGlLZXkpXG4gICAgICAgICAgICB0aHJvdyBuZXcgQXV0aGVudGljYXRpb25FcnJvciAodGhpcy5pZCArICcgcmVxdWlyZXMgYXBpS2V5IGZvciBhbGwgcmVxdWVzdHMnKTtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ10gKyAnLycgKyB0aGlzLnZlcnNpb24gKyAnLycgKyBwYXRoICsgJy5waHAnO1xuICAgICAgICBsZXQgcXVlcnkgPSB0aGlzLmV4dGVuZCAoeyAndG9rZW4nOiB0aGlzLmFwaUtleSB9LCBwYXJhbXMpO1xuICAgICAgICB1cmwgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHF1ZXJ5KTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCAodXJsLCBtZXRob2QpO1xuICAgICAgICBpZiAoJ3dhcm5pbmcnIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlWyd3YXJuaW5nJ10pXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnIFdhcm5pbmc6ICcgKyByZXNwb25zZVsnd2FybmluZ19tZXNzYWdlJ10pO1xuICAgICAgICBpZiAoJ2Vycm9yJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIGlmIChyZXNwb25zZVsnZXJyb3InXSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgRXJyb3I6ICcgKyByZXNwb25zZVsnZXJyb3JfY29kZSddICsgcmVzcG9uc2VbJ2Vycm9yX21lc3NhZ2UnXSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBjcnlwdG9jYXBpdGFsID0ge1xuXG4gICAgJ2lkJzogJ2NyeXB0b2NhcGl0YWwnLFxuICAgICduYW1lJzogJ0NyeXB0byBDYXBpdGFsJyxcbiAgICAnY29tbWVudCc6ICdDcnlwdG8gQ2FwaXRhbCBBUEknLFxuICAgICdjb3VudHJpZXMnOiAnUEEnLCAvLyBQYW5hbWFcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yNzk5MzE1OC03YTEzZjE0MC02NGFjLTExZTctODljYy1hM2I0NDFmMGIwZjguanBnJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL2NyeXB0b2NhcGl0YWwuY28nLFxuICAgICAgICAnZG9jJzogJ2h0dHBzOi8vZ2l0aHViLmNvbS9jcnlwdG9jYXAnLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ3N0YXRzJyxcbiAgICAgICAgICAgICAgICAnaGlzdG9yaWNhbC1wcmljZXMnLFxuICAgICAgICAgICAgICAgICdvcmRlci1ib29rJyxcbiAgICAgICAgICAgICAgICAndHJhbnNhY3Rpb25zJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2JhbGFuY2VzLWFuZC1pbmZvJyxcbiAgICAgICAgICAgICAgICAnb3Blbi1vcmRlcnMnLFxuICAgICAgICAgICAgICAgICd1c2VyLXRyYW5zYWN0aW9ucycsXG4gICAgICAgICAgICAgICAgJ2J0Yy1kZXBvc2l0LWFkZHJlc3MvZ2V0JyxcbiAgICAgICAgICAgICAgICAnYnRjLWRlcG9zaXQtYWRkcmVzcy9uZXcnLFxuICAgICAgICAgICAgICAgICdkZXBvc2l0cy9nZXQnLFxuICAgICAgICAgICAgICAgICd3aXRoZHJhd2Fscy9nZXQnLFxuICAgICAgICAgICAgICAgICdvcmRlcnMvbmV3JyxcbiAgICAgICAgICAgICAgICAnb3JkZXJzL2VkaXQnLFxuICAgICAgICAgICAgICAgICdvcmRlcnMvY2FuY2VsJyxcbiAgICAgICAgICAgICAgICAnb3JkZXJzL3N0YXR1cycsXG4gICAgICAgICAgICAgICAgJ3dpdGhkcmF3YWxzL25ldycsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0QmFsYW5jZXNBbmRJbmZvICgpO1xuICAgICAgICBsZXQgYmFsYW5jZSA9IHJlc3BvbnNlWydiYWxhbmNlcy1hbmQtaW5mbyddO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGJhbGFuY2UgfTtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCB0aGlzLmN1cnJlbmNpZXMubGVuZ3RoOyBjKyspIHtcbiAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IHRoaXMuY3VycmVuY2llc1tjXTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd1c2VkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoY3VycmVuY3kgaW4gYmFsYW5jZVsnYXZhaWxhYmxlJ10pXG4gICAgICAgICAgICAgICAgYWNjb3VudFsnZnJlZSddID0gcGFyc2VGbG9hdCAoYmFsYW5jZVsnYXZhaWxhYmxlJ11bY3VycmVuY3ldKTtcbiAgICAgICAgICAgIGlmIChjdXJyZW5jeSBpbiBiYWxhbmNlWydvbl9ob2xkJ10pXG4gICAgICAgICAgICAgICAgYWNjb3VudFsndXNlZCddID0gcGFyc2VGbG9hdCAoYmFsYW5jZVsnb25faG9sZCddW2N1cnJlbmN5XSk7XG4gICAgICAgICAgICBhY2NvdW50Wyd0b3RhbCddID0gdGhpcy5zdW0gKGFjY291bnRbJ2ZyZWUnXSwgYWNjb3VudFsndXNlZCddKTtcbiAgICAgICAgICAgIHJlc3VsdFtjdXJyZW5jeV0gPSBhY2NvdW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0T3JkZXJCb29rICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2N1cnJlbmN5JzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSByZXNwb25zZVsnb3JkZXItYm9vayddO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IFtdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaWRlcyA9IHsgJ2JpZHMnOiAnYmlkJywgJ2Fza3MnOiAnYXNrJyB9O1xuICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzIChzaWRlcyk7XG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwga2V5cy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgbGV0IGtleSA9IGtleXNba107XG4gICAgICAgICAgICBsZXQgc2lkZSA9IHNpZGVzW2tleV07XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHBhcnNlSW50IChvcmRlclsndGltZXN0YW1wJ10pICogMTAwMDtcbiAgICAgICAgICAgICAgICBsZXQgcHJpY2UgPSBwYXJzZUZsb2F0IChvcmRlclsncHJpY2UnXSk7XG4gICAgICAgICAgICAgICAgbGV0IGFtb3VudCA9IHBhcnNlRmxvYXQgKG9yZGVyWydvcmRlcl9hbW91bnQnXSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W2tleV0ucHVzaCAoWyBwcmljZSwgYW1vdW50LCB0aW1lc3RhbXAgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFN0YXRzICh7XG4gICAgICAgICAgICAnY3VycmVuY3knOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IHRpY2tlciA9IHJlc3BvbnNlWydzdGF0cyddO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ21heCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ21pbiddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2JpZCddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2FzayddKSxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ29wZW4nXSksXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdF9wcmljZSddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2RhaWx5X2NoYW5nZSddKSxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndG90YWxfYnRjX3RyYWRlZCddKSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0VHJhbnNhY3Rpb25zICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2N1cnJlbmN5JzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdzaWRlJzogc2lkZSxcbiAgICAgICAgICAgICd0eXBlJzogdHlwZSxcbiAgICAgICAgICAgICdjdXJyZW5jeSc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgICAgICAnYW1vdW50JzogYW1vdW50LFxuICAgICAgICB9O1xuICAgICAgICBpZiAodHlwZSA9PSAnbGltaXQnKVxuICAgICAgICAgICAgb3JkZXJbJ2xpbWl0X3ByaWNlJ10gPSBwcmljZTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RPcmRlcnNOZXcgKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3VsdCxcbiAgICAgICAgICAgICdpZCc6IHJlc3VsdCxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0T3JkZXJzQ2FuY2VsICh7ICdpZCc6IGlkIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0aGlzLmlkID09ICdjcnlwdG9jYXBpdGFsJylcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyBpcyBhbiBhYnN0cmFjdCBiYXNlIEFQSSBmb3IgXzFidGN4ZScpO1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArICcvJyArIHBhdGg7XG4gICAgICAgIGlmIChhcGkgPT0gJ3B1YmxpYycpIHtcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyAocGFyYW1zKS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChwYXJhbXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICAgICAnYXBpX2tleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgICAgICdub25jZSc6IHRoaXMubm9uY2UgKCksXG4gICAgICAgICAgICB9LCBwYXJhbXMpO1xuICAgICAgICAgICAgbGV0IHJlcXVlc3QgPSB0aGlzLmpzb24gKHF1ZXJ5KTtcbiAgICAgICAgICAgIHF1ZXJ5WydzaWduYXR1cmUnXSA9IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKHJlcXVlc3QpLCB0aGlzLmVuY29kZSAodGhpcy5zZWNyZXQpKTtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLmpzb24gKHF1ZXJ5KTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgICAgIGlmICgnZXJyb3JzJyBpbiByZXNwb25zZSkge1xuICAgICAgICAgICAgbGV0IGVycm9ycyA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgZSA9IDA7IGUgPCByZXNwb25zZVsnZXJyb3JzJ10ubGVuZ3RoOyBlKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgZXJyb3IgPSByZXNwb25zZVsnZXJyb3JzJ11bZV07XG4gICAgICAgICAgICAgICAgZXJyb3JzLnB1c2ggKGVycm9yWydjb2RlJ10gKyAnOiAnICsgZXJyb3JbJ21lc3NhZ2UnXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlcnJvcnMgPSBlcnJvcnMuam9pbiAoJyAnKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgZXJyb3JzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIF8xYnRjeGUgPSBleHRlbmQgKGNyeXB0b2NhcGl0YWwsIHtcblxuICAgICdpZCc6ICdfMWJ0Y3hlJyxcbiAgICAnbmFtZSc6ICcxQlRDWEUnLFxuICAgICdjb3VudHJpZXMnOiAnUEEnLCAvLyBQYW5hbWFcbiAgICAnY29tbWVudCc6ICdDcnlwdG8gQ2FwaXRhbCBBUEknLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2MDQ5LTJiMjk0NDA4LTVlY2MtMTFlNy04NWNjLWFkYWZmMDEzZGMxYS5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vMWJ0Y3hlLmNvbS9hcGknLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vMWJ0Y3hlLmNvbScsXG4gICAgICAgICdkb2MnOiAnaHR0cHM6Ly8xYnRjeGUuY29tL2FwaS1kb2NzLnBocCcsXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9VU0QnOiB7ICdpZCc6ICdVU0QnLCAnc3ltYm9sJzogJ0JUQy9VU0QnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnVVNEJyB9LFxuICAgICAgICAnQlRDL0VVUic6IHsgJ2lkJzogJ0VVUicsICdzeW1ib2wnOiAnQlRDL0VVUicsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdFVVInIH0sXG4gICAgICAgICdCVEMvQ05ZJzogeyAnaWQnOiAnQ05ZJywgJ3N5bWJvbCc6ICdCVEMvQ05ZJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ0NOWScgfSxcbiAgICAgICAgJ0JUQy9SVUInOiB7ICdpZCc6ICdSVUInLCAnc3ltYm9sJzogJ0JUQy9SVUInLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnUlVCJyB9LFxuICAgICAgICAnQlRDL0NIRic6IHsgJ2lkJzogJ0NIRicsICdzeW1ib2wnOiAnQlRDL0NIRicsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdDSEYnIH0sXG4gICAgICAgICdCVEMvSlBZJzogeyAnaWQnOiAnSlBZJywgJ3N5bWJvbCc6ICdCVEMvSlBZJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ0pQWScgfSxcbiAgICAgICAgJ0JUQy9HQlAnOiB7ICdpZCc6ICdHQlAnLCAnc3ltYm9sJzogJ0JUQy9HQlAnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnR0JQJyB9LFxuICAgICAgICAnQlRDL0NBRCc6IHsgJ2lkJzogJ0NBRCcsICdzeW1ib2wnOiAnQlRDL0NBRCcsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdDQUQnIH0sXG4gICAgICAgICdCVEMvQVVEJzogeyAnaWQnOiAnQVVEJywgJ3N5bWJvbCc6ICdCVEMvQVVEJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ0FVRCcgfSxcbiAgICAgICAgJ0JUQy9BRUQnOiB7ICdpZCc6ICdBRUQnLCAnc3ltYm9sJzogJ0JUQy9BRUQnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnQUVEJyB9LFxuICAgICAgICAnQlRDL0JHTic6IHsgJ2lkJzogJ0JHTicsICdzeW1ib2wnOiAnQlRDL0JHTicsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdCR04nIH0sXG4gICAgICAgICdCVEMvQ1pLJzogeyAnaWQnOiAnQ1pLJywgJ3N5bWJvbCc6ICdCVEMvQ1pLJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ0NaSycgfSxcbiAgICAgICAgJ0JUQy9ES0snOiB7ICdpZCc6ICdES0snLCAnc3ltYm9sJzogJ0JUQy9ES0snLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnREtLJyB9LFxuICAgICAgICAnQlRDL0hLRCc6IHsgJ2lkJzogJ0hLRCcsICdzeW1ib2wnOiAnQlRDL0hLRCcsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdIS0QnIH0sXG4gICAgICAgICdCVEMvSFJLJzogeyAnaWQnOiAnSFJLJywgJ3N5bWJvbCc6ICdCVEMvSFJLJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ0hSSycgfSxcbiAgICAgICAgJ0JUQy9IVUYnOiB7ICdpZCc6ICdIVUYnLCAnc3ltYm9sJzogJ0JUQy9IVUYnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnSFVGJyB9LFxuICAgICAgICAnQlRDL0lMUyc6IHsgJ2lkJzogJ0lMUycsICdzeW1ib2wnOiAnQlRDL0lMUycsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdJTFMnIH0sXG4gICAgICAgICdCVEMvSU5SJzogeyAnaWQnOiAnSU5SJywgJ3N5bWJvbCc6ICdCVEMvSU5SJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ0lOUicgfSxcbiAgICAgICAgJ0JUQy9NVVInOiB7ICdpZCc6ICdNVVInLCAnc3ltYm9sJzogJ0JUQy9NVVInLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnTVVSJyB9LFxuICAgICAgICAnQlRDL01YTic6IHsgJ2lkJzogJ01YTicsICdzeW1ib2wnOiAnQlRDL01YTicsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdNWE4nIH0sXG4gICAgICAgICdCVEMvTk9LJzogeyAnaWQnOiAnTk9LJywgJ3N5bWJvbCc6ICdCVEMvTk9LJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ05PSycgfSxcbiAgICAgICAgJ0JUQy9OWkQnOiB7ICdpZCc6ICdOWkQnLCAnc3ltYm9sJzogJ0JUQy9OWkQnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnTlpEJyB9LFxuICAgICAgICAnQlRDL1BMTic6IHsgJ2lkJzogJ1BMTicsICdzeW1ib2wnOiAnQlRDL1BMTicsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdQTE4nIH0sXG4gICAgICAgICdCVEMvUk9OJzogeyAnaWQnOiAnUk9OJywgJ3N5bWJvbCc6ICdCVEMvUk9OJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ1JPTicgfSxcbiAgICAgICAgJ0JUQy9TRUsnOiB7ICdpZCc6ICdTRUsnLCAnc3ltYm9sJzogJ0JUQy9TRUsnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnU0VLJyB9LFxuICAgICAgICAnQlRDL1NHRCc6IHsgJ2lkJzogJ1NHRCcsICdzeW1ib2wnOiAnQlRDL1NHRCcsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdTR0QnIH0sXG4gICAgICAgICdCVEMvVEhCJzogeyAnaWQnOiAnVEhCJywgJ3N5bWJvbCc6ICdCVEMvVEhCJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ1RIQicgfSxcbiAgICAgICAgJ0JUQy9UUlknOiB7ICdpZCc6ICdUUlknLCAnc3ltYm9sJzogJ0JUQy9UUlknLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnVFJZJyB9LFxuICAgICAgICAnQlRDL1pBUic6IHsgJ2lkJzogJ1pBUicsICdzeW1ib2wnOiAnQlRDL1pBUicsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdaQVInIH0sXG4gICAgfSxcbn0pXG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGFueHBybyA9IHtcblxuICAgICdpZCc6ICdhbnhwcm8nLFxuICAgICduYW1lJzogJ0FOWFBybycsXG4gICAgJ2NvdW50cmllcyc6IFsgJ0pQJywgJ1NHJywgJ0hLJywgJ05aJyBdLFxuICAgICd2ZXJzaW9uJzogJzInLFxuICAgICdyYXRlTGltaXQnOiAxNTAwLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY1OTgzLWZkODU5NWRhLTVlYzktMTFlNy04MmUzLWFkYjNhYjhjMjYxMi5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vYW54cHJvLmNvbS9hcGknLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vYW54cHJvLmNvbScsXG4gICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAnaHR0cDovL2RvY3MuYW54djIuYXBpYXJ5LmlvJyxcbiAgICAgICAgICAgICdodHRwczovL2FueHByby5jb20vcGFnZXMvYXBpJyxcbiAgICAgICAgXSxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICd7Y3VycmVuY3lfcGFpcn0vbW9uZXkvdGlja2VyJyxcbiAgICAgICAgICAgICAgICAne2N1cnJlbmN5X3BhaXJ9L21vbmV5L2RlcHRoL2Z1bGwnLFxuICAgICAgICAgICAgICAgICd7Y3VycmVuY3lfcGFpcn0vbW9uZXkvdHJhZGUvZmV0Y2gnLCAvLyBkaXNhYmxlZCBieSBBTlhQcm9cbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ3tjdXJyZW5jeV9wYWlyfS9tb25leS9vcmRlci9hZGQnLFxuICAgICAgICAgICAgICAgICd7Y3VycmVuY3lfcGFpcn0vbW9uZXkvb3JkZXIvY2FuY2VsJyxcbiAgICAgICAgICAgICAgICAne2N1cnJlbmN5X3BhaXJ9L21vbmV5L29yZGVyL3F1b3RlJyxcbiAgICAgICAgICAgICAgICAne2N1cnJlbmN5X3BhaXJ9L21vbmV5L29yZGVyL3Jlc3VsdCcsXG4gICAgICAgICAgICAgICAgJ3tjdXJyZW5jeV9wYWlyfS9tb25leS9vcmRlcnMnLFxuICAgICAgICAgICAgICAgICdtb25leS97Y3VycmVuY3l9L2FkZHJlc3MnLFxuICAgICAgICAgICAgICAgICdtb25leS97Y3VycmVuY3l9L3NlbmRfc2ltcGxlJyxcbiAgICAgICAgICAgICAgICAnbW9uZXkvaW5mbycsXG4gICAgICAgICAgICAgICAgJ21vbmV5L3RyYWRlL2xpc3QnLFxuICAgICAgICAgICAgICAgICdtb25leS93YWxsZXQvaGlzdG9yeScsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgJ21hcmtldHMnOiB7XG4gICAgICAgICdCVEMvVVNEJzogeyAnaWQnOiAnQlRDVVNEJywgJ3N5bWJvbCc6ICdCVEMvVVNEJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ1VTRCcgfSxcbiAgICAgICAgJ0JUQy9IS0QnOiB7ICdpZCc6ICdCVENIS0QnLCAnc3ltYm9sJzogJ0JUQy9IS0QnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnSEtEJyB9LFxuICAgICAgICAnQlRDL0VVUic6IHsgJ2lkJzogJ0JUQ0VVUicsICdzeW1ib2wnOiAnQlRDL0VVUicsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdFVVInIH0sXG4gICAgICAgICdCVEMvQ0FEJzogeyAnaWQnOiAnQlRDQ0FEJywgJ3N5bWJvbCc6ICdCVEMvQ0FEJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ0NBRCcgfSxcbiAgICAgICAgJ0JUQy9BVUQnOiB7ICdpZCc6ICdCVENBVUQnLCAnc3ltYm9sJzogJ0JUQy9BVUQnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnQVVEJyB9LFxuICAgICAgICAnQlRDL1NHRCc6IHsgJ2lkJzogJ0JUQ1NHRCcsICdzeW1ib2wnOiAnQlRDL1NHRCcsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdTR0QnIH0sXG4gICAgICAgICdCVEMvSlBZJzogeyAnaWQnOiAnQlRDSlBZJywgJ3N5bWJvbCc6ICdCVEMvSlBZJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ0pQWScgfSxcbiAgICAgICAgJ0JUQy9HQlAnOiB7ICdpZCc6ICdCVENHQlAnLCAnc3ltYm9sJzogJ0JUQy9HQlAnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnR0JQJyB9LFxuICAgICAgICAnQlRDL05aRCc6IHsgJ2lkJzogJ0JUQ05aRCcsICdzeW1ib2wnOiAnQlRDL05aRCcsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdOWkQnIH0sXG4gICAgICAgICdMVEMvQlRDJzogeyAnaWQnOiAnTFRDQlRDJywgJ3N5bWJvbCc6ICdMVEMvQlRDJywgJ2Jhc2UnOiAnTFRDJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ0RPR0UvQlRDJzogeyAnaWQnOiAnRE9HRUJUQycsICdzeW1ib2wnOiAnRE9HRS9CVEMnLCAnYmFzZSc6ICdET0dFJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ1NUUi9CVEMnOiB7ICdpZCc6ICdTVFJCVEMnLCAnc3ltYm9sJzogJ1NUUi9CVEMnLCAnYmFzZSc6ICdTVFInLCAncXVvdGUnOiAnQlRDJyB9LFxuICAgICAgICAnWFJQL0JUQyc6IHsgJ2lkJzogJ1hSUEJUQycsICdzeW1ib2wnOiAnWFJQL0JUQycsICdiYXNlJzogJ1hSUCcsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RNb25leUluZm8gKCk7XG4gICAgICAgIGxldCBiYWxhbmNlID0gcmVzcG9uc2VbJ2RhdGEnXTtcbiAgICAgICAgbGV0IGN1cnJlbmNpZXMgPSBPYmplY3Qua2V5cyAoYmFsYW5jZVsnV2FsbGV0cyddKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiBiYWxhbmNlIH07XG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgY3VycmVuY2llcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gY3VycmVuY2llc1tjXTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd1c2VkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoY3VycmVuY3kgaW4gYmFsYW5jZVsnV2FsbGV0cyddKSB7XG4gICAgICAgICAgICAgICAgbGV0IHdhbGxldCA9IGJhbGFuY2VbJ1dhbGxldHMnXVtjdXJyZW5jeV07XG4gICAgICAgICAgICAgICAgYWNjb3VudFsnZnJlZSddID0gcGFyc2VGbG9hdCAod2FsbGV0WydBdmFpbGFibGVfQmFsYW5jZSddWyd2YWx1ZSddKTtcbiAgICAgICAgICAgICAgICBhY2NvdW50Wyd0b3RhbCddID0gcGFyc2VGbG9hdCAod2FsbGV0WydCYWxhbmNlJ11bJ3ZhbHVlJ10pO1xuICAgICAgICAgICAgICAgIGFjY291bnRbJ3VzZWQnXSA9IGFjY291bnRbJ3RvdGFsJ10gLSBhY2NvdW50WydmcmVlJ107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldEN1cnJlbmN5UGFpck1vbmV5RGVwdGhGdWxsICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2N1cnJlbmN5X3BhaXInOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IHJlc3BvbnNlWydkYXRhJ107XG4gICAgICAgIGxldCB0ID0gcGFyc2VJbnQgKG9yZGVyYm9va1snZGF0YVVwZGF0ZVRpbWUnXSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSBwYXJzZUludCAodCAvIDEwMDApO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAob3JkZXJbJ3ByaWNlJ10pO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBwYXJzZUZsb2F0IChvcmRlclsnYW1vdW50J10pO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtzaWRlXS5wdXNoIChbIHByaWNlLCBhbW91bnQgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldEN1cnJlbmN5UGFpck1vbmV5VGlja2VyICh7XG4gICAgICAgICAgICAnY3VycmVuY3lfcGFpcic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgdGlja2VyID0gcmVzcG9uc2VbJ2RhdGEnXTtcbiAgICAgICAgbGV0IHQgPSBwYXJzZUludCAodGlja2VyWydkYXRhVXBkYXRlVGltZSddKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHBhcnNlSW50ICh0IC8gMTAwMCk7XG4gICAgICAgIGxldCBiaWQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGxldCBhc2sgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmICh0aWNrZXJbJ2J1eSddWyd2YWx1ZSddKVxuICAgICAgICAgICAgYmlkID0gcGFyc2VGbG9hdCAodGlja2VyWydidXknXVsndmFsdWUnXSk7XG4gICAgICAgIGlmICh0aWNrZXJbJ3NlbGwnXVsndmFsdWUnXSlcbiAgICAgICAgICAgIGFzayA9IHBhcnNlRmxvYXQgKHRpY2tlclsnc2VsbCddWyd2YWx1ZSddKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddWyd2YWx1ZSddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddWyd2YWx1ZSddKSxcbiAgICAgICAgICAgICdiaWQnOiBiaWQsXG4gICAgICAgICAgICAnYXNrJzogYXNrLFxuICAgICAgICAgICAgJ3Z3YXAnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3Z3YXAnXVsndmFsdWUnXSksXG4gICAgICAgICAgICAnb3Blbic6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjbG9zZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdmaXJzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsYXN0JzogcGFyc2VGbG9hdCAodGlja2VyWydsYXN0J11bJ3ZhbHVlJ10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2F2ZyddWyd2YWx1ZSddKSxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWyd2b2wnXVsndmFsdWUnXSksXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBlcnJvciA9IHRoaXMuaWQgKyAnIHN3aXRjaGVkIG9mZiB0aGUgdHJhZGVzIGVuZHBvaW50LCBzZWUgdGhlaXIgZG9jcyBhdCBodHRwOi8vZG9jcy5hbnh2Mi5hcGlhcnkuaW8vcmVmZXJlbmNlL21hcmtldC1kYXRhL2N1cnJlbmN5cGFpcm1vbmV5dHJhZGVmZXRjaC1kaXNhYmxlZCc7XG4gICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yIChlcnJvcik7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldEN1cnJlbmN5UGFpck1vbmV5VHJhZGVGZXRjaCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdjdXJyZW5jeV9wYWlyJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdjdXJyZW5jeV9wYWlyJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICdhbW91bnRfaW50JzogYW1vdW50LFxuICAgICAgICAgICAgJ3R5cGUnOiBzaWRlLFxuICAgICAgICB9O1xuICAgICAgICBpZiAodHlwZSA9PSAnbGltaXQnKVxuICAgICAgICAgICAgb3JkZXJbJ3ByaWNlX2ludCddID0gcHJpY2U7XG4gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0Q3VycmVuY3lQYWlyT3JkZXJBZGQgKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3VsdCxcbiAgICAgICAgICAgICdpZCc6IHJlc3VsdFsnZGF0YSddXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdEN1cnJlbmN5UGFpck9yZGVyQ2FuY2VsICh7ICdvaWQnOiBpZCB9KTtcbiAgICB9LFxuXG4gICAgbm9uY2UgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHJlcXVlc3QgPSB0aGlzLmltcGxvZGVQYXJhbXMgKHBhdGgsIHBhcmFtcyk7XG4gICAgICAgIGxldCBxdWVyeSA9IHRoaXMub21pdCAocGFyYW1zLCB0aGlzLmV4dHJhY3RQYXJhbXMgKHBhdGgpKTtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ10gKyAnLycgKyB0aGlzLnZlcnNpb24gKyAnLycgKyByZXF1ZXN0O1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHF1ZXJ5KS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChxdWVyeSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpO1xuICAgICAgICAgICAgYm9keSA9IHRoaXMudXJsZW5jb2RlICh0aGlzLmV4dGVuZCAoeyAnbm9uY2UnOiBub25jZSB9LCBxdWVyeSkpO1xuICAgICAgICAgICAgbGV0IHNlY3JldCA9IHRoaXMuYmFzZTY0VG9CaW5hcnkgKHRoaXMuc2VjcmV0KTtcbiAgICAgICAgICAgIGxldCBhdXRoID0gcmVxdWVzdCArIFwiXFwwXCIgKyBib2R5O1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgICAgICAgJ1Jlc3QtS2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ1Jlc3QtU2lnbic6IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKGF1dGgpLCBzZWNyZXQsICdzaGE1MTInLCAnYmFzZTY0JyksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdyZXN1bHQnIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlWydyZXN1bHQnXSA9PSAnc3VjY2VzcycpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgJyArIHRoaXMuanNvbiAocmVzcG9uc2UpKTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBiaW5hbmNlID0ge1xuXG4gICAgJ2lkJzogJ2JpbmFuY2UnLFxuICAgICduYW1lJzogJ0JpbmFuY2UnLFxuICAgICdjb3VudHJpZXMnOiAnQ04nLCAvLyBDaGluYVxuICAgICdyYXRlTGltaXQnOiAxMDAwLFxuICAgICd2ZXJzaW9uJzogJ3YxJyxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yOTYwNDAyMC1kNTQ4M2NkYy04N2VlLTExZTctOTRjNy1kMWE4ZDkxNjkyOTMuanBnJyxcbiAgICAgICAgJ2FwaSc6ICdodHRwczovL3d3dy5iaW5hbmNlLmNvbS9hcGknLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vd3d3LmJpbmFuY2UuY29tJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL3d3dy5iaW5hbmNlLmNvbS9yZXN0YXBpcHViLmh0bWwnLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ3BpbmcnLFxuICAgICAgICAgICAgICAgICd0aW1lJyxcbiAgICAgICAgICAgICAgICAnZGVwdGgnLFxuICAgICAgICAgICAgICAgICdhZ2dUcmFkZXMnLFxuICAgICAgICAgICAgICAgICdrbGluZXMnLFxuICAgICAgICAgICAgICAgICd0aWNrZXIvMjRocicsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAncHJpdmF0ZSc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ29yZGVyJyxcbiAgICAgICAgICAgICAgICAnb3Blbk9yZGVycycsXG4gICAgICAgICAgICAgICAgJ2FsbE9yZGVycycsXG4gICAgICAgICAgICAgICAgJ2FjY291bnQnLFxuICAgICAgICAgICAgICAgICdteVRyYWRlcycsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ29yZGVyJyxcbiAgICAgICAgICAgICAgICAnb3JkZXIvdGVzdCcsXG4gICAgICAgICAgICAgICAgJ3VzZXJEYXRhU3RyZWFtJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAncHV0JzogW1xuICAgICAgICAgICAgICAgICd1c2VyRGF0YVN0cmVhbSdcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAnZGVsZXRlJzogW1xuICAgICAgICAgICAgICAgICdvcmRlcicsXG4gICAgICAgICAgICAgICAgJ3VzZXJEYXRhU3RyZWFtJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JOQi9CVEMnOiB7ICdpZCc6ICdCTkJCVEMnLCAnc3ltYm9sJzogJ0JOQi9CVEMnLCAnYmFzZSc6ICdCTkInLCAncXVvdGUnOiAnQlRDJyB9LFxuICAgICAgICAnTkVPL0JUQyc6IHsgJ2lkJzogJ05FT0JUQycsICdzeW1ib2wnOiAnTkVPL0JUQycsICdiYXNlJzogJ05FTycsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdFVEgvQlRDJzogeyAnaWQnOiAnRVRIQlRDJywgJ3N5bWJvbCc6ICdFVEgvQlRDJywgJ2Jhc2UnOiAnRVRIJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ0hTUi9CVEMnOiB7ICdpZCc6ICdIU1JCVEMnLCAnc3ltYm9sJzogJ0hTUi9CVEMnLCAnYmFzZSc6ICdIU1InLCAncXVvdGUnOiAnQlRDJyB9LFxuICAgICAgICAnTFRDL0JUQyc6IHsgJ2lkJzogJ0xUQ0JUQycsICdzeW1ib2wnOiAnTFRDL0JUQycsICdiYXNlJzogJ0xUQycsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdHQVMvQlRDJzogeyAnaWQnOiAnR0FTQlRDJywgJ3N5bWJvbCc6ICdHQVMvQlRDJywgJ2Jhc2UnOiAnR0FTJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ0hDQy9CVEMnOiB7ICdpZCc6ICdIQ0NCVEMnLCAnc3ltYm9sJzogJ0hDQy9CVEMnLCAnYmFzZSc6ICdIQ0MnLCAncXVvdGUnOiAnQlRDJyB9LFxuICAgICAgICAnQkNIL0JUQyc6IHsgJ2lkJzogJ0JDQ0JUQycsICdzeW1ib2wnOiAnQkNIL0JUQycsICdiYXNlJzogJ0JDSCcsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdCTkIvRVRIJzogeyAnaWQnOiAnQk5CRVRIJywgJ3N5bWJvbCc6ICdCTkIvRVRIJywgJ2Jhc2UnOiAnQk5CJywgJ3F1b3RlJzogJ0VUSCcgfSxcbiAgICAgICAgJ0ROVC9FVEgnOiB7ICdpZCc6ICdETlRFVEgnLCAnc3ltYm9sJzogJ0ROVC9FVEgnLCAnYmFzZSc6ICdETlQnLCAncXVvdGUnOiAnRVRIJyB9LFxuICAgICAgICAnT0FYL0VUSCc6IHsgJ2lkJzogJ09BWEVUSCcsICdzeW1ib2wnOiAnT0FYL0VUSCcsICdiYXNlJzogJ09BWCcsICdxdW90ZSc6ICdFVEgnIH0sXG4gICAgICAgICdNQ08vRVRIJzogeyAnaWQnOiAnTUNPRVRIJywgJ3N5bWJvbCc6ICdNQ08vRVRIJywgJ2Jhc2UnOiAnTUNPJywgJ3F1b3RlJzogJ0VUSCcgfSxcbiAgICAgICAgJ0JUTS9FVEgnOiB7ICdpZCc6ICdCVE1FVEgnLCAnc3ltYm9sJzogJ0JUTS9FVEgnLCAnYmFzZSc6ICdCVE0nLCAncXVvdGUnOiAnRVRIJyB9LFxuICAgICAgICAnU05UL0VUSCc6IHsgJ2lkJzogJ1NOVEVUSCcsICdzeW1ib2wnOiAnU05UL0VUSCcsICdiYXNlJzogJ1NOVCcsICdxdW90ZSc6ICdFVEgnIH0sXG4gICAgICAgICdFT1MvRVRIJzogeyAnaWQnOiAnRU9TRVRIJywgJ3N5bWJvbCc6ICdFT1MvRVRIJywgJ2Jhc2UnOiAnRU9TJywgJ3F1b3RlJzogJ0VUSCcgfSxcbiAgICAgICAgJ0JOVC9FVEgnOiB7ICdpZCc6ICdCTlRFVEgnLCAnc3ltYm9sJzogJ0JOVC9FVEgnLCAnYmFzZSc6ICdCTlQnLCAncXVvdGUnOiAnRVRIJyB9LFxuICAgICAgICAnSUNOL0VUSCc6IHsgJ2lkJzogJ0lDTkVUSCcsICdzeW1ib2wnOiAnSUNOL0VUSCcsICdiYXNlJzogJ0lDTicsICdxdW90ZSc6ICdFVEgnIH0sXG4gICAgICAgICdCVEMvVVNEVCc6IHsgJ2lkJzogJ0JUQ1VTRFQnLCAnc3ltYm9sJzogJ0JUQy9VU0RUJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ1VTRFQnIH0sXG4gICAgICAgICdFVEgvVVNEVCc6IHsgJ2lkJzogJ0VUSFVTRFQnLCAnc3ltYm9sJzogJ0VUSC9VU0RUJywgJ2Jhc2UnOiAnRVRIJywgJ3F1b3RlJzogJ1VTRFQnIH0sXG4gICAgICAgICdRVFVNL0VUSCc6IHsgJ2lkJzogJ1FUVU1FVEgnLCAnc3ltYm9sJzogJ1FUVU0vRVRIJywgJ2Jhc2UnOiAnUVRVTScsICdxdW90ZSc6ICdFVEgnIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZUdldEFjY291bnQgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogcmVzcG9uc2UgfTtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gcmVzcG9uc2VbJ2JhbGFuY2VzJ107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmFsYW5jZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCBiYWxhbmNlID0gYmFsYW5jZXNbaV07XG4gICAgICAgICAgICBsZXQgYXNzZXQgPSBiYWxhbmNlWydhc3NldCddO1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gdGhpcy5jb21tb25DdXJyZW5jeUNvZGUgKGFzc2V0KTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogcGFyc2VGbG9hdCAoYmFsYW5jZVsnZnJlZSddKSxcbiAgICAgICAgICAgICAgICAndXNlZCc6IHBhcnNlRmxvYXQgKGJhbGFuY2VbJ2xvY2tlZCddKSxcbiAgICAgICAgICAgICAgICAndG90YWwnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYWNjb3VudFsndG90YWwnXSA9IHRoaXMuc3VtIChhY2NvdW50WydmcmVlJ10sIGFjY291bnRbJ3VzZWQnXSk7XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgbSA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgdGhpcy5wdWJsaWNHZXREZXB0aCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiBtWydpZCddLFxuICAgICAgICAgICAgJ2xpbWl0JzogMTAwLCAvLyBkZWZhdWx0ID0gbWF4aW11bSA9IDEwMFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAob3JkZXJbMF0pO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBwYXJzZUZsb2F0IChvcmRlclsxXSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3NpZGVdLnB1c2ggKFsgcHJpY2UsIGFtb3VudCBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBwYXJzZVRpY2tlciAodGlja2VyLCBtYXJrZXQpIHtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRpY2tlclsnY2xvc2VUaW1lJ107XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2hpZ2hQcmljZSddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvd1ByaWNlJ10pLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYmlkUHJpY2UnXSksXG4gICAgICAgICAgICAnYXNrJzogcGFyc2VGbG9hdCAodGlja2VyWydhc2tQcmljZSddKSxcbiAgICAgICAgICAgICd2d2FwJzogcGFyc2VGbG9hdCAodGlja2VyWyd3ZWlnaHRlZEF2Z1ByaWNlJ10pLFxuICAgICAgICAgICAgJ29wZW4nOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ29wZW5QcmljZSddKSxcbiAgICAgICAgICAgICdjbG9zZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsncHJldkNsb3NlUHJpY2UnXSksXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdFByaWNlJ10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsncHJpY2VDaGFuZ2VQZXJjZW50J10pLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWyd2b2x1bWUnXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBsZXQgbSA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFRpY2tlcjI0aHIgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiBtWydpZCddLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VUaWNrZXIgKHJlc3BvbnNlLCBtKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPSExDViAobWFya2V0LCB0aW1lZnJhbWUgPSA2MCwgc2luY2UgPSB1bmRlZmluZWQsIGxpbWl0ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIEtsaW5lL2NhbmRsZXN0aWNrIGJhcnMgZm9yIGEgc3ltYm9sLiBLbGluZXMgYXJlIHVuaXF1ZWx5IGlkZW50aWZpZWQgYnkgdGhlaXIgb3BlbiB0aW1lLlxuICAgICAgICAvLyBQYXJhbWV0ZXJzOlxuICAgICAgICAvLyBOYW1lICAgIFR5cGUgICAgTWFuZGF0b3J5ICAgRGVzY3JpcHRpb25cbiAgICAgICAgLy8gc3ltYm9sICBTVFJJTkcgIFlFU1xuICAgICAgICAvLyBpbnRlcnZhbCAgICBFTlVNICAgIFlFU1xuICAgICAgICAvLyBsaW1pdCAgIElOVCBOTyAgRGVmYXVsdCA1MDA7IG1heCA1MDAuXG4gICAgICAgIC8vIHN0YXJ0VGltZSAgIExPTkcgICAgTk9cbiAgICAgICAgLy8gZW5kVGltZSBMT05HICAgIE5PXG4gICAgICAgIC8vIElmIHN0YXJ0VGltZSBhbmQgZW5kVGltZSBhcmUgbm90IHNlbnQsIHRoZSBtb3N0IHJlY2VudCBrbGluZXMgYXJlIHJldHVybmVkLlxuICAgICAgICAvLyBSZXNwb25zZTpcbiAgICAgICAgLy8gW1xuICAgICAgICAvLyAgIFtcbiAgICAgICAgLy8gICAgIDE0OTkwNDAwMDAwMDAsICAgICAgLy8gT3BlbiB0aW1lXG4gICAgICAgIC8vICAgICBcIjAuMDE2MzQ3OTBcIiwgICAgICAgLy8gT3BlblxuICAgICAgICAvLyAgICAgXCIwLjgwMDAwMDAwXCIsICAgICAgIC8vIEhpZ2hcbiAgICAgICAgLy8gICAgIFwiMC4wMTU3NTgwMFwiLCAgICAgICAvLyBMb3dcbiAgICAgICAgLy8gICAgIFwiMC4wMTU3NzEwMFwiLCAgICAgICAvLyBDbG9zZVxuICAgICAgICAvLyAgICAgXCIxNDg5NzYuMTE0Mjc4MTVcIiwgIC8vIFZvbHVtZVxuICAgICAgICAvLyAgICAgMTQ5OTY0NDc5OTk5OSwgICAgICAvLyBDbG9zZSB0aW1lXG4gICAgICAgIC8vICAgICBcIjI0MzQuMTkwNTUzMzRcIiwgICAgLy8gUXVvdGUgYXNzZXQgdm9sdW1lXG4gICAgICAgIC8vICAgICAzMDgsICAgICAgICAgICAgICAgIC8vIE51bWJlciBvZiB0cmFkZXNcbiAgICAgICAgLy8gICAgIFwiMTc1Ni44NzQwMjM5N1wiLCAgICAvLyBUYWtlciBidXkgYmFzZSBhc3NldCB2b2x1bWVcbiAgICAgICAgLy8gICAgIFwiMjguNDY2OTQzNjhcIiwgICAgICAvLyBUYWtlciBidXkgcXVvdGUgYXNzZXQgdm9sdW1lXG4gICAgICAgIC8vICAgICBcIjE3OTI4ODk5LjYyNDg0MzM5XCIgLy8gQ2FuIGJlIGlnbm9yZWRcbiAgICAgICAgLy8gICBdXG4gICAgICAgIC8vIF1cbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkICh0aGlzLmlkICsgJyBmZXRjaE9ITENWIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQnKTtcbiAgICB9LFxuXG4gICAgcGFyc2VUcmFkZSAodHJhZGUsIG1hcmtldCA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdGltZXN0YW1wRmllbGQgPSAoJ1QnIGluIHRyYWRlKSA/ICdUJyA6ICd0aW1lJztcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRyYWRlW3RpbWVzdGFtcEZpZWxkXTtcbiAgICAgICAgbGV0IHByaWNlRmllbGQgPSAoJ3AnIGluIHRyYWRlKSA/ICdwJyA6ICdwcmljZSc7XG4gICAgICAgIGxldCBwcmljZSA9IHBhcnNlRmxvYXQgKHRyYWRlW3ByaWNlRmllbGRdKTtcbiAgICAgICAgbGV0IGFtb3VudEZpZWxkID0gKCdxJyBpbiB0cmFkZSkgPyAncScgOiAncXR5JztcbiAgICAgICAgbGV0IGFtb3VudCA9IHBhcnNlRmxvYXQgKHRyYWRlW2Ftb3VudEZpZWxkXSk7XG4gICAgICAgIGxldCBpZEZpZWxkID0gKCdhJyBpbiB0cmFkZSkgPyAnYScgOiAnaWQnO1xuICAgICAgICBsZXQgaWQgPSB0cmFkZVtpZEZpZWxkXS50b1N0cmluZyAoKTtcbiAgICAgICAgbGV0IHNpZGUgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmICgnbScgaW4gdHJhZGUpIHtcbiAgICAgICAgICAgIHNpZGUgPSAnc2VsbCc7XG4gICAgICAgICAgICBpZiAodHJhZGVbJ20nXSlcbiAgICAgICAgICAgICAgICBzaWRlID0gJ2J1eSc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgaXNCdXllciA9IHRyYWRlWydpc0J1eWVyJ107XG4gICAgICAgICAgICBsZXQgaXNNYWtlciA9IHRyYWRlWydpc01ha2VyJ107XG4gICAgICAgICAgICBpZiAoaXNCdXllcikge1xuICAgICAgICAgICAgICAgIHNpZGUgPSBpc01ha2VyID8gJ3NlbGwnIDogJ2J1eSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNpZGUgPSBpc01ha2VyID8gJ2J1eScgOiAnc2VsbCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogdHJhZGUsXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ3N5bWJvbCc6IG1hcmtldFsnc3ltYm9sJ10sXG4gICAgICAgICAgICAnaWQnOiBpZCxcbiAgICAgICAgICAgICd0eXBlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3NpZGUnOiBzaWRlLFxuICAgICAgICAgICAgJ3ByaWNlJzogcHJpY2UsXG4gICAgICAgICAgICAnYW1vdW50JzogYW1vdW50LFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgbSA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldEFnZ1RyYWRlcyAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiBtWydpZCddLFxuICAgICAgICAgICAgLy8gJ2Zyb21JZCc6IDEyMywgICAgLy8gSUQgdG8gZ2V0IGFnZ3JlZ2F0ZSB0cmFkZXMgZnJvbSBJTkNMVVNJVkUuXG4gICAgICAgICAgICAvLyAnc3RhcnRUaW1lJzogNDU2LCAvLyBUaW1lc3RhbXAgaW4gbXMgdG8gZ2V0IGFnZ3JlZ2F0ZSB0cmFkZXMgZnJvbSBJTkNMVVNJVkUuXG4gICAgICAgICAgICAvLyAnZW5kVGltZSc6IDc4OSwgICAvLyBUaW1lc3RhbXAgaW4gbXMgdG8gZ2V0IGFnZ3JlZ2F0ZSB0cmFkZXMgdW50aWwgSU5DTFVTSVZFLlxuICAgICAgICAgICAgJ2xpbWl0JzogNTAwLCAgICAgICAgLy8gZGVmYXVsdCA9IG1heGltdW0gPSA1MDBcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlVHJhZGVzIChyZXNwb25zZSwgbSk7XG4gICAgfSxcblxuICAgIHBhcnNlT3JkZXIgKG9yZGVyKSB7XG4gICAgICAgIC8vIHtcbiAgICAgICAgLy8gICBcInN5bWJvbFwiOiBcIkxUQ0JUQ1wiLFxuICAgICAgICAvLyAgIFwib3JkZXJJZFwiOiAxLFxuICAgICAgICAvLyAgIFwiY2xpZW50T3JkZXJJZFwiOiBcIm15T3JkZXIxXCIsXG4gICAgICAgIC8vICAgXCJwcmljZVwiOiBcIjAuMVwiLFxuICAgICAgICAvLyAgIFwib3JpZ1F0eVwiOiBcIjEuMFwiLFxuICAgICAgICAvLyAgIFwiZXhlY3V0ZWRRdHlcIjogXCIwLjBcIixcbiAgICAgICAgLy8gICBcInN0YXR1c1wiOiBcIk5FV1wiLFxuICAgICAgICAvLyAgIFwidGltZUluRm9yY2VcIjogXCJHVENcIixcbiAgICAgICAgLy8gICBcInR5cGVcIjogXCJMSU1JVFwiLFxuICAgICAgICAvLyAgIFwic2lkZVwiOiBcIkJVWVwiLFxuICAgICAgICAvLyAgIFwic3RvcFByaWNlXCI6IFwiMC4wXCIsXG4gICAgICAgIC8vICAgXCJpY2ViZXJnUXR5XCI6IFwiMC4wXCIsXG4gICAgICAgIC8vICAgXCJ0aW1lXCI6IDE0OTk4MjczMTk1NTlcbiAgICAgICAgLy8gfVxuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWQgKHRoaXMuaWQgKyAnIHBhcnNlT3JkZXIgaXMgbm90IGltcGxlbWVudGVkIHlldCcpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAnc3ltYm9sJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICdxdWFudGl0eSc6ICclZicuc3ByaW50ZiAoYW1vdW50KSxcbiAgICAgICAgICAgICdwcmljZSc6ICclZicuc3ByaW50ZiAocHJpY2UpLFxuICAgICAgICAgICAgJ3R5cGUnOiB0eXBlLnRvVXBwZXJDYXNlICgpLFxuICAgICAgICAgICAgJ3NpZGUnOiBzaWRlLnRvVXBwZXJDYXNlICgpLFxuICAgICAgICAgICAgJ3RpbWVJbkZvcmNlJzogJ0dUQycsIC8vIEdvb2QgVG8gQ2FuY2VsXG4gICAgICAgICAgICAvLyAndGltZUluRm9yY2UnOiAnSU9DJywgLy8gSW1tZWRpYXRlIE9yIENhbmNlbFxuICAgICAgICB9O1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0T3JkZXIgKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ2lkJzogcmVzcG9uc2VbJ29yZGVySWQnXS50b1N0cmluZyAoKSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlciAoaWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBzeW1ib2wgPSAoJ3N5bWJvbCcgaW4gcGFyYW1zKTtcbiAgICAgICAgaWYgKCFzeW1ib2wpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgZmV0Y2hPcmRlciByZXF1aXJlcyBhIHN5bWJvbCBwYXJhbScpO1xuICAgICAgICBsZXQgbSA9IHRoaXMubWFya2V0IChzeW1ib2wpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVHZXRPcmRlciAodGhpcy5leHRlbmQgKHBhcmFtcywge1xuICAgICAgICAgICAgJ3N5bWJvbCc6IG1bJ2lkJ10sXG4gICAgICAgICAgICAnb3JkZXJJZCc6IGlkLnRvU3RyaW5nICgpLFxuICAgICAgICB9KSk7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlT3JkZXIgKHJlc3BvbnNlKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlcnMgKCkge1xuICAgICAgICAvLyBzeW1ib2wgIFNUUklORyAgWUVTXG4gICAgICAgIC8vIG9yZGVySWQgTE9ORyAgICBOT1xuICAgICAgICAvLyBsaW1pdCAgIElOVCBOTyAgRGVmYXVsdCA1MDA7IG1heCA1MDAuXG4gICAgICAgIC8vIHJlY3ZXaW5kb3cgIExPTkcgICAgTk9cbiAgICAgICAgLy8gdGltZXN0YW1wICAgTE9ORyAgICBZRVNcbiAgICAgICAgLy8gSWYgb3JkZXJJZCBpcyBzZXQsIGl0IHdpbGwgZ2V0IG9yZGVycyA+PSB0aGF0IG9yZGVySWQuIE90aGVyd2lzZSBtb3N0IHJlY2VudCBvcmRlcnMgYXJlIHJldHVybmVkLlxuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWQgKHRoaXMuaWQgKyAnIGZldGNoT3JkZXJzIG5vdCBpbXBsZW1lbnRlZCB5ZXQnKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hNeU9wZW5PcmRlcnMgKG1hcmtldCA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgaWYgKCFtYXJrZXQpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgZmV0Y2hNeU9wZW5PcmRlcnMgcmVxdWlyZXMgYSBzeW1ib2wnKTtcbiAgICAgICAgbGV0IG0gPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlR2V0T3Blbk9yZGVycyAoe1xuICAgICAgICAgICAgJ3N5bWJvbCc6IG1bJ2lkJ10sXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZU9yZGVycyAocmVzcG9uc2UsIG0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0T3JkZXJDYW5jZWwgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnb3JkZXJJZCc6IHBhcnNlSW50IChpZCksXG4gICAgICAgICAgICAvLyAnb3JpZ0NsaWVudE9yZGVySWQnOiBpZCxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIG5vbmNlICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgJy8nICsgdGhpcy52ZXJzaW9uICsgJy8nICsgcGF0aDtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChwYXJhbXMpLmxlbmd0aClcbiAgICAgICAgICAgICAgICB1cmwgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHBhcmFtcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpO1xuICAgICAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy51cmxlbmNvZGUgKHRoaXMuZXh0ZW5kICh7ICd0aW1lc3RhbXAnOiBub25jZSB9LCBwYXJhbXMpKTtcbiAgICAgICAgICAgIGxldCBhdXRoID0gdGhpcy5zZWNyZXQgKyAnfCcgKyBxdWVyeTtcbiAgICAgICAgICAgIGxldCBzaWduYXR1cmUgPSB0aGlzLmhhc2ggKHRoaXMuZW5jb2RlIChhdXRoKSwgJ3NoYTI1NicpO1xuICAgICAgICAgICAgcXVlcnkgKz0gJyYnICsgJ3NpZ25hdHVyZT0nICsgc2lnbmF0dXJlO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnWC1NQlgtQVBJS0VZJzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKG1ldGhvZCA9PSAnR0VUJykge1xuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyBxdWVyeTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYm9keSA9IHF1ZXJ5O1xuICAgICAgICAgICAgICAgIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgICAgICBpZiAoJ2NvZGUnIGluIHJlc3BvbnNlKSB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2VbJ2NvZGUnXSA8IDApXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGJpdDJjID0ge1xuXG4gICAgJ2lkJzogJ2JpdDJjJyxcbiAgICAnbmFtZSc6ICdCaXQyQycsXG4gICAgJ2NvdW50cmllcyc6ICdJTCcsIC8vIElzcmFlbFxuICAgICdyYXRlTGltaXQnOiAzMDAwLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2MTE5LTM1OTMyMjBlLTVlY2UtMTFlNy04YjNhLTVhMDQxZjZiY2MzZi5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vd3d3LmJpdDJjLmNvLmlsJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy5iaXQyYy5jby5pbCcsXG4gICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAnaHR0cHM6Ly93d3cuYml0MmMuY28uaWwvaG9tZS9hcGknLFxuICAgICAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS9PZmVyRS9iaXQyYycsXG4gICAgICAgIF0sXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnRXhjaGFuZ2VzL3twYWlyfS9UaWNrZXInLFxuICAgICAgICAgICAgICAgICdFeGNoYW5nZXMve3BhaXJ9L29yZGVyYm9vaycsXG4gICAgICAgICAgICAgICAgJ0V4Y2hhbmdlcy97cGFpcn0vdHJhZGVzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvQmFsYW5jZScsXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvQmFsYW5jZS92MicsXG4gICAgICAgICAgICAgICAgJ01lcmNoYW50L0NyZWF0ZUNoZWNrb3V0JyxcbiAgICAgICAgICAgICAgICAnT3JkZXIvQWNjb3VudEhpc3RvcnknLFxuICAgICAgICAgICAgICAgICdPcmRlci9BZGRDb2luRnVuZHNSZXF1ZXN0JyxcbiAgICAgICAgICAgICAgICAnT3JkZXIvQWRkRnVuZCcsXG4gICAgICAgICAgICAgICAgJ09yZGVyL0FkZE9yZGVyJyxcbiAgICAgICAgICAgICAgICAnT3JkZXIvQWRkT3JkZXJNYXJrZXRQcmljZUJ1eScsXG4gICAgICAgICAgICAgICAgJ09yZGVyL0FkZE9yZGVyTWFya2V0UHJpY2VTZWxsJyxcbiAgICAgICAgICAgICAgICAnT3JkZXIvQ2FuY2VsT3JkZXInLFxuICAgICAgICAgICAgICAgICdPcmRlci9NeU9yZGVycycsXG4gICAgICAgICAgICAgICAgJ1BheW1lbnQvR2V0TXlJZCcsXG4gICAgICAgICAgICAgICAgJ1BheW1lbnQvU2VuZCcsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgJ21hcmtldHMnOiB7XG4gICAgICAgICdCVEMvTklTJzogeyAnaWQnOiAnQnRjTmlzJywgJ3N5bWJvbCc6ICdCVEMvTklTJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ05JUycgfSxcbiAgICAgICAgJ0xUQy9CVEMnOiB7ICdpZCc6ICdMdGNCdGMnLCAnc3ltYm9sJzogJ0xUQy9CVEMnLCAnYmFzZSc6ICdMVEMnLCAncXVvdGUnOiAnQlRDJyB9LFxuICAgICAgICAnTFRDL05JUyc6IHsgJ2lkJzogJ0x0Y05pcycsICdzeW1ib2wnOiAnTFRDL05JUycsICdiYXNlJzogJ0xUQycsICdxdW90ZSc6ICdOSVMnIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGxldCBiYWxhbmNlID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdEFjY291bnRCYWxhbmNlVjIgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogYmFsYW5jZSB9O1xuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IHRoaXMuY3VycmVuY2llcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gdGhpcy5jdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChjdXJyZW5jeSBpbiBiYWxhbmNlKSB7XG4gICAgICAgICAgICAgICAgbGV0IGF2YWlsYWJsZSA9ICdBVkFJTEFCTEVfJyArIGN1cnJlbmN5O1xuICAgICAgICAgICAgICAgIGFjY291bnRbJ2ZyZWUnXSA9IGJhbGFuY2VbYXZhaWxhYmxlXTtcbiAgICAgICAgICAgICAgICBhY2NvdW50Wyd0b3RhbCddID0gYmFsYW5jZVtjdXJyZW5jeV07XG4gICAgICAgICAgICAgICAgYWNjb3VudFsndXNlZCddID0gYWNjb3VudFsndG90YWwnXSAtIGFjY291bnRbJ2ZyZWUnXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdFtjdXJyZW5jeV0gPSBhY2NvdW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSBhd2FpdCB0aGlzLnB1YmxpY0dldEV4Y2hhbmdlc1BhaXJPcmRlcmJvb2sgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAncGFpcic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IFtdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaWRlcyA9IFsgJ2JpZHMnLCAnYXNrcycgXTtcbiAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBzaWRlcy5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1tzXTtcbiAgICAgICAgICAgIGxldCBvcmRlcnMgPSBvcmRlcmJvb2tbc2lkZV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBvcmRlciA9IG9yZGVyc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgcHJpY2UgPSBvcmRlclswXTtcbiAgICAgICAgICAgICAgICBsZXQgYW1vdW50ID0gb3JkZXJbMV07XG4gICAgICAgICAgICAgICAgbGV0IHRpbWVzdGFtcCA9IG9yZGVyWzJdICogMTAwMDtcbiAgICAgICAgICAgICAgICByZXN1bHRbc2lkZV0ucHVzaCAoWyBwcmljZSwgYW1vdW50LCB0aW1lc3RhbXAgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBsZXQgdGlja2VyID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRFeGNoYW5nZXNQYWlyVGlja2VyICh7XG4gICAgICAgICAgICAncGFpcic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2gnXSksXG4gICAgICAgICAgICAnbG93JzogcGFyc2VGbG9hdCAodGlja2VyWydsJ10pLFxuICAgICAgICAgICAgJ2JpZCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhc2snOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xsJ10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2F2J10pLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2EnXSksXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldEV4Y2hhbmdlc1BhaXJUcmFkZXMgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAncGFpcic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgbWV0aG9kID0gJ3ByaXZhdGVQb3N0T3JkZXJBZGRPcmRlcic7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdBbW91bnQnOiBhbW91bnQsXG4gICAgICAgICAgICAnUGFpcic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlID09ICdtYXJrZXQnKSB7XG4gICAgICAgICAgICBtZXRob2QgKz0gJ01hcmtldFByaWNlJyArIHRoaXMuY2FwaXRhbGl6ZSAoc2lkZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvcmRlclsnUHJpY2UnXSA9IHByaWNlO1xuICAgICAgICAgICAgb3JkZXJbJ1RvdGFsJ10gPSBhbW91bnQgKiBwcmljZTtcbiAgICAgICAgICAgIG9yZGVyWydJc0JpZCddID0gKHNpZGUgPT0gJ2J1eScpO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCB0aGlzW21ldGhvZF0gKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3VsdCxcbiAgICAgICAgICAgICdpZCc6IHJlc3VsdFsnTmV3T3JkZXInXVsnaWQnXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0T3JkZXJDYW5jZWxPcmRlciAoeyAnaWQnOiBpZCB9KTtcbiAgICB9LFxuXG4gICAgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArICcvJyArIHRoaXMuaW1wbG9kZVBhcmFtcyAocGF0aCwgcGFyYW1zKTtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgdXJsICs9ICcuanNvbic7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpO1xuICAgICAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5leHRlbmQgKHsgJ25vbmNlJzogbm9uY2UgfSwgcGFyYW1zKTtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtTGVuZ3RoJzogYm9keS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgJ2tleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgICAgICdzaWduJzogdGhpcy5obWFjICh0aGlzLmVuY29kZSAoYm9keSksIHRoaXMuZW5jb2RlICh0aGlzLnNlY3JldCksICdzaGE1MTInLCAnYmFzZTY0JyksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgYml0YmF5ID0ge1xuXG4gICAgJ2lkJzogJ2JpdGJheScsXG4gICAgJ25hbWUnOiAnQml0QmF5JyxcbiAgICAnY291bnRyaWVzJzogWyAnUEwnLCAnRVUnIF0sIC8vIFBvbGFuZFxuICAgICdyYXRlTGltaXQnOiAxMDAwLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2MTMyLTk3OGE3YmQ4LTVlY2UtMTFlNy05NTQwLWJjOTZkMWU5YmJiOC5qcGcnLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vYml0YmF5Lm5ldCcsXG4gICAgICAgICdhcGknOiB7XG4gICAgICAgICAgICAncHVibGljJzogJ2h0dHBzOi8vYml0YmF5Lm5ldC9BUEkvUHVibGljJyxcbiAgICAgICAgICAgICdwcml2YXRlJzogJ2h0dHBzOi8vYml0YmF5Lm5ldC9BUEkvVHJhZGluZy90cmFkaW5nQXBpLnBocCcsXG4gICAgICAgIH0sXG4gICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAnaHR0cHM6Ly9iaXRiYXkubmV0L3B1YmxpYy1hcGknLFxuICAgICAgICAgICAgJ2h0dHBzOi8vYml0YmF5Lm5ldC9hY2NvdW50L3RhYi1hcGknLFxuICAgICAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS9CaXRCYXlOZXQvQVBJJyxcbiAgICAgICAgXSxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICd7aWR9L2FsbCcsXG4gICAgICAgICAgICAgICAgJ3tpZH0vbWFya2V0JyxcbiAgICAgICAgICAgICAgICAne2lkfS9vcmRlcmJvb2snLFxuICAgICAgICAgICAgICAgICd7aWR9L3RpY2tlcicsXG4gICAgICAgICAgICAgICAgJ3tpZH0vdHJhZGVzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2luZm8nLFxuICAgICAgICAgICAgICAgICd0cmFkZScsXG4gICAgICAgICAgICAgICAgJ2NhbmNlbCcsXG4gICAgICAgICAgICAgICAgJ29yZGVyYm9vaycsXG4gICAgICAgICAgICAgICAgJ29yZGVycycsXG4gICAgICAgICAgICAgICAgJ3RyYW5zZmVyJyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXcnLFxuICAgICAgICAgICAgICAgICdoaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAndHJhbnNhY3Rpb25zJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9VU0QnOiB7ICdpZCc6ICdCVENVU0QnLCAnc3ltYm9sJzogJ0JUQy9VU0QnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnVVNEJyB9LFxuICAgICAgICAnQlRDL0VVUic6IHsgJ2lkJzogJ0JUQ0VVUicsICdzeW1ib2wnOiAnQlRDL0VVUicsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdFVVInIH0sXG4gICAgICAgICdCVEMvUExOJzogeyAnaWQnOiAnQlRDUExOJywgJ3N5bWJvbCc6ICdCVEMvUExOJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ1BMTicgfSxcbiAgICAgICAgJ0xUQy9VU0QnOiB7ICdpZCc6ICdMVENVU0QnLCAnc3ltYm9sJzogJ0xUQy9VU0QnLCAnYmFzZSc6ICdMVEMnLCAncXVvdGUnOiAnVVNEJyB9LFxuICAgICAgICAnTFRDL0VVUic6IHsgJ2lkJzogJ0xUQ0VVUicsICdzeW1ib2wnOiAnTFRDL0VVUicsICdiYXNlJzogJ0xUQycsICdxdW90ZSc6ICdFVVInIH0sXG4gICAgICAgICdMVEMvUExOJzogeyAnaWQnOiAnTFRDUExOJywgJ3N5bWJvbCc6ICdMVEMvUExOJywgJ2Jhc2UnOiAnTFRDJywgJ3F1b3RlJzogJ1BMTicgfSxcbiAgICAgICAgJ0xUQy9CVEMnOiB7ICdpZCc6ICdMVENCVEMnLCAnc3ltYm9sJzogJ0xUQy9CVEMnLCAnYmFzZSc6ICdMVEMnLCAncXVvdGUnOiAnQlRDJyB9LFxuICAgICAgICAnRVRIL1VTRCc6IHsgJ2lkJzogJ0VUSFVTRCcsICdzeW1ib2wnOiAnRVRIL1VTRCcsICdiYXNlJzogJ0VUSCcsICdxdW90ZSc6ICdVU0QnIH0sXG4gICAgICAgICdFVEgvRVVSJzogeyAnaWQnOiAnRVRIRVVSJywgJ3N5bWJvbCc6ICdFVEgvRVVSJywgJ2Jhc2UnOiAnRVRIJywgJ3F1b3RlJzogJ0VVUicgfSxcbiAgICAgICAgJ0VUSC9QTE4nOiB7ICdpZCc6ICdFVEhQTE4nLCAnc3ltYm9sJzogJ0VUSC9QTE4nLCAnYmFzZSc6ICdFVEgnLCAncXVvdGUnOiAnUExOJyB9LFxuICAgICAgICAnRVRIL0JUQyc6IHsgJ2lkJzogJ0VUSEJUQycsICdzeW1ib2wnOiAnRVRIL0JUQycsICdiYXNlJzogJ0VUSCcsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdMU0svVVNEJzogeyAnaWQnOiAnTFNLVVNEJywgJ3N5bWJvbCc6ICdMU0svVVNEJywgJ2Jhc2UnOiAnTFNLJywgJ3F1b3RlJzogJ1VTRCcgfSxcbiAgICAgICAgJ0xTSy9FVVInOiB7ICdpZCc6ICdMU0tFVVInLCAnc3ltYm9sJzogJ0xTSy9FVVInLCAnYmFzZSc6ICdMU0snLCAncXVvdGUnOiAnRVVSJyB9LFxuICAgICAgICAnTFNLL1BMTic6IHsgJ2lkJzogJ0xTS1BMTicsICdzeW1ib2wnOiAnTFNLL1BMTicsICdiYXNlJzogJ0xTSycsICdxdW90ZSc6ICdQTE4nIH0sXG4gICAgICAgICdMU0svQlRDJzogeyAnaWQnOiAnTFNLQlRDJywgJ3N5bWJvbCc6ICdMU0svQlRDJywgJ2Jhc2UnOiAnTFNLJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdEluZm8gKCk7XG4gICAgICAgIGxldCBiYWxhbmNlID0gcmVzcG9uc2VbJ2JhbGFuY2VzJ107XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogYmFsYW5jZSB9O1xuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IHRoaXMuY3VycmVuY2llcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gdGhpcy5jdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChjdXJyZW5jeSBpbiBiYWxhbmNlKSB7XG4gICAgICAgICAgICAgICAgYWNjb3VudFsnZnJlZSddID0gcGFyc2VGbG9hdCAoYmFsYW5jZVtjdXJyZW5jeV1bJ2F2YWlsYWJsZSddKTtcbiAgICAgICAgICAgICAgICBhY2NvdW50Wyd1c2VkJ10gPSBwYXJzZUZsb2F0IChiYWxhbmNlW2N1cnJlbmN5XVsnbG9ja2VkJ10pO1xuICAgICAgICAgICAgICAgIGFjY291bnRbJ3RvdGFsJ10gPSB0aGlzLnN1bSAoYWNjb3VudFsnZnJlZSddLCBhY2NvdW50Wyd1c2VkJ10pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IGF3YWl0IHRoaXMucHVibGljR2V0SWRPcmRlcmJvb2sgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnaWQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBvcmRlcmJvb2tbJ2JpZHMnXSxcbiAgICAgICAgICAgICdhc2tzJzogb3JkZXJib29rWydhc2tzJ10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGxldCB0aWNrZXIgPSBhd2FpdCB0aGlzLnB1YmxpY0dldElkVGlja2VyICh7XG4gICAgICAgICAgICAnaWQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydtYXgnXSksXG4gICAgICAgICAgICAnbG93JzogcGFyc2VGbG9hdCAodGlja2VyWydtaW4nXSksXG4gICAgICAgICAgICAnYmlkJzogcGFyc2VGbG9hdCAodGlja2VyWydiaWQnXSksXG4gICAgICAgICAgICAnYXNrJzogcGFyc2VGbG9hdCAodGlja2VyWydhc2snXSksXG4gICAgICAgICAgICAndndhcCc6IHBhcnNlRmxvYXQgKHRpY2tlclsndndhcCddKSxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xhc3QnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYXZlcmFnZSddKSxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWyd2b2x1bWUnXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0SWRUcmFkZXMgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnaWQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcblxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdFRyYWRlICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ3R5cGUnOiBzaWRlLFxuICAgICAgICAgICAgJ2N1cnJlbmN5JzogcFsnYmFzZSddLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IGFtb3VudCxcbiAgICAgICAgICAgICdwYXltZW50X2N1cnJlbmN5JzogcFsncXVvdGUnXSxcbiAgICAgICAgICAgICdyYXRlJzogcHJpY2UsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJpdmF0ZVBvc3RDYW5jZWwgKHsgJ2lkJzogaWQgfSk7XG4gICAgfSxcblxuICAgIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ11bYXBpXTtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgdXJsICs9ICcvJyArIHRoaXMuaW1wbG9kZVBhcmFtcyAocGF0aCwgcGFyYW1zKSArICcuanNvbic7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBib2R5ID0gdGhpcy51cmxlbmNvZGUgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAgICAgJ21ldGhvZCc6IHBhdGgsXG4gICAgICAgICAgICAgICAgJ21vbWVudCc6IHRoaXMubm9uY2UgKCksXG4gICAgICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgICAgICAgICdDb250ZW50LUxlbmd0aCc6IGJvZHkubGVuZ3RoLFxuICAgICAgICAgICAgICAgICdBUEktS2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ0FQSS1IYXNoJzogdGhpcy5obWFjICh0aGlzLmVuY29kZSAoYm9keSksIHRoaXMuZW5jb2RlICh0aGlzLnNlY3JldCksICdzaGE1MTInKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBiaXRiYXlzID0ge1xuXG4gICAgJ2lkJzogJ2JpdGJheXMnLFxuICAgICduYW1lJzogJ0JpdEJheXMnLFxuICAgICdjb3VudHJpZXMnOiBbICdDTicsICdHQicsICdISycsICdBVScsICdDQScgXSxcbiAgICAncmF0ZUxpbWl0JzogMTUwMCxcbiAgICAndmVyc2lvbic6ICd2MScsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc4MDg1OTktOTgzNjg3ZDItNjA1MS0xMWU3LThkOTUtODBkZmNiZTVjYmI0LmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly9iaXRiYXlzLmNvbS9hcGknLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vYml0YmF5cy5jb20nLFxuICAgICAgICAnZG9jJzogJ2h0dHBzOi8vYml0YmF5cy5jb20vaGVscC9hcGkvJyxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICd0aWNrZXInLFxuICAgICAgICAgICAgICAgICd0cmFkZXMnLFxuICAgICAgICAgICAgICAgICdkZXB0aCcsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAncHJpdmF0ZSc6IHtcbiAgICAgICAgICAgICdwb3N0JzogW1xuICAgICAgICAgICAgICAgICdjYW5jZWwnLFxuICAgICAgICAgICAgICAgICdpbmZvJyxcbiAgICAgICAgICAgICAgICAnb3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnb3JkZXInLFxuICAgICAgICAgICAgICAgICd0cmFuc2FjdGlvbnMnLFxuICAgICAgICAgICAgICAgICd0cmFkZScsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgJ21hcmtldHMnOiB7XG4gICAgICAgICdCVEMvVVNEJzogeyAnaWQnOiAnYnRjX3VzZCcsICdzeW1ib2wnOiAnQlRDL1VTRCcsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdVU0QnIH0sXG4gICAgICAgICdCVEMvQ05ZJzogeyAnaWQnOiAnYnRjX2NueScsICdzeW1ib2wnOiAnQlRDL0NOWScsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdDTlknIH0sXG4gICAgICAgICdPRFMvQlRDJzogeyAnaWQnOiAnb2RzX2J0YycsICdzeW1ib2wnOiAnT0RTL0JUQycsICdiYXNlJzogJ09EUycsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdMU0svQlRDJzogeyAnaWQnOiAnbHNrX2J0YycsICdzeW1ib2wnOiAnTFNLL0JUQycsICdiYXNlJzogJ0xTSycsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdMU0svQ05ZJzogeyAnaWQnOiAnbHNrX2NueScsICdzeW1ib2wnOiAnTFNLL0NOWScsICdiYXNlJzogJ0xTSycsICdxdW90ZSc6ICdDTlknIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RJbmZvICgpO1xuICAgICAgICBsZXQgYmFsYW5jZSA9IHJlc3BvbnNlWydyZXN1bHQnXVsnd2FsbGV0J107XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogYmFsYW5jZSB9O1xuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IHRoaXMuY3VycmVuY2llcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gdGhpcy5jdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IGxvd2VyY2FzZSA9IGN1cnJlbmN5LnRvTG93ZXJDYXNlICgpO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChsb3dlcmNhc2UgaW4gYmFsYW5jZSkge1xuICAgICAgICAgICAgICAgIGFjY291bnRbJ2ZyZWUnXSA9IHBhcnNlRmxvYXQgKGJhbGFuY2VbbG93ZXJjYXNlXVsnYXZhaWwnXSk7XG4gICAgICAgICAgICAgICAgYWNjb3VudFsndXNlZCddID0gcGFyc2VGbG9hdCAoYmFsYW5jZVtsb3dlcmNhc2VdWydsb2NrJ10pO1xuICAgICAgICAgICAgICAgIGFjY291bnRbJ3RvdGFsJ10gPSB0aGlzLnN1bSAoYWNjb3VudFsnZnJlZSddLCBhY2NvdW50Wyd1c2VkJ10pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXREZXB0aCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdtYXJrZXQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IHJlc3BvbnNlWydyZXN1bHQnXTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAob3JkZXJbMF0pO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBwYXJzZUZsb2F0IChvcmRlclsxXSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3NpZGVdLnB1c2ggKFsgcHJpY2UsIGFtb3VudCBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0VGlja2VyICh7XG4gICAgICAgICAgICAnbWFya2V0JzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aWNrZXIgPSByZXNwb25zZVsncmVzdWx0J107XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2J1eSddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3NlbGwnXSksXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xhc3QnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWyd2b2wnXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0VHJhZGVzICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ21hcmtldCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAnbWFya2V0JzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICdvcCc6IHNpZGUsXG4gICAgICAgICAgICAnYW1vdW50JzogYW1vdW50LFxuICAgICAgICB9O1xuICAgICAgICBpZiAodHlwZSA9PSAnbWFya2V0Jykge1xuICAgICAgICAgICAgb3JkZXJbJ29yZGVyX3R5cGUnXSA9IDE7XG4gICAgICAgICAgICBvcmRlclsncHJpY2UnXSA9IHByaWNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3JkZXJbJ29yZGVyX3R5cGUnXSA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdFRyYWRlICh0aGlzLmV4dGVuZCAob3JkZXIsIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXNwb25zZSxcbiAgICAgICAgICAgICdpZCc6IHJlc3BvbnNlWydyZXN1bHQnXVsnaWQnXS50b1N0cmluZyAoKSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0Q2FuY2VsICh7ICdpZCc6IGlkIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgJy8nICsgdGhpcy52ZXJzaW9uICsgJy8nICsgcGF0aDtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChwYXJhbXMpLmxlbmd0aClcbiAgICAgICAgICAgICAgICB1cmwgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHBhcmFtcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpO1xuICAgICAgICAgICAgYm9keSA9IHRoaXMudXJsZW5jb2RlICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgICAgICdub25jZSc6IG5vbmNlLFxuICAgICAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICAgICAgICAnQ29udGVudC1MZW5ndGgnOiBib2R5Lmxlbmd0aCxcbiAgICAgICAgICAgICAgICAnS2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ1NpZ24nOiB0aGlzLmhtYWMgKHRoaXMuZW5jb2RlIChib2R5KSwgdGhpcy5zZWNyZXQsICdzaGE1MTInKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgICAgICBpZiAoJ3N0YXR1cycgaW4gcmVzcG9uc2UpXG4gICAgICAgICAgICBpZiAocmVzcG9uc2VbJ3N0YXR1cyddID09IDIwMClcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGJpdGNvaW5jb2lkID0ge1xuXG4gICAgJ2lkJzogJ2JpdGNvaW5jb2lkJyxcbiAgICAnbmFtZSc6ICdCaXRjb2luLmNvLmlkJyxcbiAgICAnY291bnRyaWVzJzogJ0lEJywgLy8gSW5kb25lc2lhXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc3NjYxMzgtMDQzYzc3ODYtNWVjZi0xMWU3LTg4MmItODA5YzE0ZjM4YjUzLmpwZycsXG4gICAgICAgICdhcGknOiB7XG4gICAgICAgICAgICAncHVibGljJzogJ2h0dHBzOi8vdmlwLmJpdGNvaW4uY28uaWQvYXBpJyxcbiAgICAgICAgICAgICdwcml2YXRlJzogJ2h0dHBzOi8vdmlwLmJpdGNvaW4uY28uaWQvdGFwaScsXG4gICAgICAgIH0sXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly93d3cuYml0Y29pbi5jby5pZCcsXG4gICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAnaHR0cHM6Ly92aXAuYml0Y29pbi5jby5pZC9kb3dubG9hZHMvQklUQ09JTkNPSUQtQVBJLURPQ1VNRU5UQVRJT04ucGRmJyxcbiAgICAgICAgICAgICdodHRwczovL3ZpcC5iaXRjb2luLmNvLmlkL3RyYWRlX2FwaScsXG4gICAgICAgIF0sXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAne3BhaXJ9L3RpY2tlcicsXG4gICAgICAgICAgICAgICAgJ3twYWlyfS90cmFkZXMnLFxuICAgICAgICAgICAgICAgICd7cGFpcn0vZGVwdGgnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnZ2V0SW5mbycsXG4gICAgICAgICAgICAgICAgJ3RyYW5zSGlzdG9yeScsXG4gICAgICAgICAgICAgICAgJ3RyYWRlJyxcbiAgICAgICAgICAgICAgICAndHJhZGVIaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAnb3Blbk9yZGVycycsXG4gICAgICAgICAgICAgICAgJ2NhbmNlbE9yZGVyJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9JRFInOiAgeyAnaWQnOiAnYnRjX2lkcicsICdzeW1ib2wnOiAnQlRDL0lEUicsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdJRFInLCAnYmFzZUlkJzogJ2J0YycsICdxdW90ZUlkJzogJ2lkcicgfSxcbiAgICAgICAgJ0JUUy9CVEMnOiAgeyAnaWQnOiAnYnRzX2J0YycsICdzeW1ib2wnOiAnQlRTL0JUQycsICdiYXNlJzogJ0JUUycsICdxdW90ZSc6ICdCVEMnLCAnYmFzZUlkJzogJ2J0cycsICdxdW90ZUlkJzogJ2J0YycgfSxcbiAgICAgICAgJ0RBU0gvQlRDJzogeyAnaWQnOiAnZHJrX2J0YycsICdzeW1ib2wnOiAnREFTSC9CVEMnLCAnYmFzZSc6ICdEQVNIJywgJ3F1b3RlJzogJ0JUQycsICdiYXNlSWQnOiAnZHJrJywgJ3F1b3RlSWQnOiAnYnRjJyB9LFxuICAgICAgICAnRE9HRS9CVEMnOiB7ICdpZCc6ICdkb2dlX2J0YycsICdzeW1ib2wnOiAnRE9HRS9CVEMnLCAnYmFzZSc6ICdET0dFJywgJ3F1b3RlJzogJ0JUQycsICdiYXNlSWQnOiAnZG9nZScsICdxdW90ZUlkJzogJ2J0YycgfSxcbiAgICAgICAgJ0VUSC9CVEMnOiAgeyAnaWQnOiAnZXRoX2J0YycsICdzeW1ib2wnOiAnRVRIL0JUQycsICdiYXNlJzogJ0VUSCcsICdxdW90ZSc6ICdCVEMnLCAnYmFzZUlkJzogJ2V0aCcsICdxdW90ZUlkJzogJ2J0YycgfSxcbiAgICAgICAgJ0xUQy9CVEMnOiAgeyAnaWQnOiAnbHRjX2J0YycsICdzeW1ib2wnOiAnTFRDL0JUQycsICdiYXNlJzogJ0xUQycsICdxdW90ZSc6ICdCVEMnLCAnYmFzZUlkJzogJ2x0YycsICdxdW90ZUlkJzogJ2J0YycgfSxcbiAgICAgICAgJ05YVC9CVEMnOiAgeyAnaWQnOiAnbnh0X2J0YycsICdzeW1ib2wnOiAnTlhUL0JUQycsICdiYXNlJzogJ05YVCcsICdxdW90ZSc6ICdCVEMnLCAnYmFzZUlkJzogJ254dCcsICdxdW90ZUlkJzogJ2J0YycgfSxcbiAgICAgICAgJ1NUUi9CVEMnOiAgeyAnaWQnOiAnc3RyX2J0YycsICdzeW1ib2wnOiAnU1RSL0JUQycsICdiYXNlJzogJ1NUUicsICdxdW90ZSc6ICdCVEMnLCAnYmFzZUlkJzogJ3N0cicsICdxdW90ZUlkJzogJ2J0YycgfSxcbiAgICAgICAgJ05FTS9CVEMnOiAgeyAnaWQnOiAnbmVtX2J0YycsICdzeW1ib2wnOiAnTkVNL0JUQycsICdiYXNlJzogJ05FTScsICdxdW90ZSc6ICdCVEMnLCAnYmFzZUlkJzogJ25lbScsICdxdW90ZUlkJzogJ2J0YycgfSxcbiAgICAgICAgJ1hSUC9CVEMnOiAgeyAnaWQnOiAneHJwX2J0YycsICdzeW1ib2wnOiAnWFJQL0JUQycsICdiYXNlJzogJ1hSUCcsICdxdW90ZSc6ICdCVEMnLCAnYmFzZUlkJzogJ3hycCcsICdxdW90ZUlkJzogJ2J0YycgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdEdldEluZm8gKCk7XG4gICAgICAgIGxldCBiYWxhbmNlID0gcmVzcG9uc2VbJ3JldHVybiddWydiYWxhbmNlJ107XG4gICAgICAgIGxldCBmcm96ZW4gPSByZXNwb25zZVsncmV0dXJuJ11bJ2JhbGFuY2VfaG9sZCddO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGJhbGFuY2UgfTtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCB0aGlzLmN1cnJlbmNpZXMubGVuZ3RoOyBjKyspIHtcbiAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IHRoaXMuY3VycmVuY2llc1tjXTtcbiAgICAgICAgICAgIGxldCBsb3dlcmNhc2UgPSBjdXJyZW5jeS50b0xvd2VyQ2FzZSAoKTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd1c2VkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAobG93ZXJjYXNlIGluIGJhbGFuY2UpIHtcbiAgICAgICAgICAgICAgICBhY2NvdW50WydmcmVlJ10gPSBwYXJzZUZsb2F0IChiYWxhbmNlW2xvd2VyY2FzZV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGxvd2VyY2FzZSBpbiBmcm96ZW4pIHtcbiAgICAgICAgICAgICAgICBhY2NvdW50Wyd1c2VkJ10gPSBwYXJzZUZsb2F0IChmcm96ZW5bbG93ZXJjYXNlXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhY2NvdW50Wyd0b3RhbCddID0gdGhpcy5zdW0gKGFjY291bnRbJ2ZyZWUnXSwgYWNjb3VudFsndXNlZCddKTtcbiAgICAgICAgICAgIHJlc3VsdFtjdXJyZW5jeV0gPSBhY2NvdW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFBhaXJEZXB0aCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdwYWlyJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdiaWRzJzogW10sXG4gICAgICAgICAgICAnYXNrcyc6IFtdLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHNpZGVzID0geyAnYmlkcyc6ICdidXknLCAnYXNrcyc6ICdzZWxsJyB9O1xuICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzIChzaWRlcyk7XG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwga2V5cy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgbGV0IGtleSA9IGtleXNba107XG4gICAgICAgICAgICBsZXQgc2lkZSA9IHNpZGVzW2tleV07XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAob3JkZXJbMF0pO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBwYXJzZUZsb2F0IChvcmRlclsxXSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W2tleV0ucHVzaCAoWyBwcmljZSwgYW1vdW50IF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgbGV0IHBhaXIgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRQYWlyVGlja2VyICh7XG4gICAgICAgICAgICAncGFpcic6IHBhaXJbJ2lkJ10sXG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgdGlja2VyID0gcmVzcG9uc2VbJ3RpY2tlciddO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gcGFyc2VGbG9hdCAodGlja2VyWydzZXJ2ZXJfdGltZSddKSAqIDEwMDA7XG4gICAgICAgIGxldCBiYXNlVm9sdW1lID0gJ3ZvbF8nICsgcGFpclsnYmFzZUlkJ10udG9Mb3dlckNhc2UgKCk7XG4gICAgICAgIGxldCBxdW90ZVZvbHVtZSA9ICd2b2xfJyArIHBhaXJbJ3F1b3RlSWQnXS50b0xvd2VyQ2FzZSAoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2J1eSddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3NlbGwnXSksXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xhc3QnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyW2Jhc2VWb2x1bWVdKSxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlcltxdW90ZVZvbHVtZV0pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldFBhaXJUcmFkZXMgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAncGFpcic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAncGFpcic6IHBbJ2lkJ10sXG4gICAgICAgICAgICAndHlwZSc6IHNpZGUsXG4gICAgICAgICAgICAncHJpY2UnOiBwcmljZSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IGJhc2UgPSBwWydiYXNlJ10udG9Mb3dlckNhc2UgKCk7XG4gICAgICAgIG9yZGVyW2Jhc2VdID0gYW1vdW50O1xuICAgICAgICBsZXQgcmVzdWx0ID0gdGhpcy5wcml2YXRlUG9zdFRyYWRlICh0aGlzLmV4dGVuZCAob3JkZXIsIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXN1bHQsXG4gICAgICAgICAgICAnaWQnOiByZXN1bHRbJ3JldHVybiddWydvcmRlcl9pZCddLnRvU3RyaW5nICgpLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0Q2FuY2VsT3JkZXIgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnaWQnOiBpZCxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ11bYXBpXTtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgdXJsICs9ICcvJyArIHRoaXMuaW1wbG9kZVBhcmFtcyAocGF0aCwgcGFyYW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLnVybGVuY29kZSAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICAgICAnbWV0aG9kJzogcGF0aCxcbiAgICAgICAgICAgICAgICAnbm9uY2UnOiB0aGlzLm5vbmNlICgpLFxuICAgICAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICAgICAgICAnQ29udGVudC1MZW5ndGgnOiBib2R5Lmxlbmd0aCxcbiAgICAgICAgICAgICAgICAnS2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ1NpZ24nOiB0aGlzLmhtYWMgKHRoaXMuZW5jb2RlIChib2R5KSwgdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSwgJ3NoYTUxMicpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgICAgIGlmICgnZXJyb3InIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyByZXNwb25zZVsnZXJyb3InXSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBiaXRmaW5leCA9IHtcblxuICAgICdpZCc6ICdiaXRmaW5leCcsXG4gICAgJ25hbWUnOiAnQml0ZmluZXgnLFxuICAgICdjb3VudHJpZXMnOiAnVVMnLFxuICAgICd2ZXJzaW9uJzogJ3YxJyxcbiAgICAncmF0ZUxpbWl0JzogMTUwMCxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yNzc2NjI0NC1lMzI4YTUwYy01ZWQyLTExZTctOTQ3Yi0wNDE0MTY1NzliYjMuanBnJyxcbiAgICAgICAgJ2FwaSc6ICdodHRwczovL2FwaS5iaXRmaW5leC5jb20nLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vd3d3LmJpdGZpbmV4LmNvbScsXG4gICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAnaHR0cHM6Ly9iaXRmaW5leC5yZWFkbWUuaW8vdjEvZG9jcycsXG4gICAgICAgICAgICAnaHR0cHM6Ly9iaXRmaW5leC5yZWFkbWUuaW8vdjIvZG9jcycsXG4gICAgICAgICAgICAnaHR0cHM6Ly9naXRodWIuY29tL2JpdGZpbmV4Y29tL2JpdGZpbmV4LWFwaS1ub2RlJyxcbiAgICAgICAgXSxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdib29rL3tzeW1ib2x9JyxcbiAgICAgICAgICAgICAgICAnY2FuZGxlcy97c3ltYm9sfScsXG4gICAgICAgICAgICAgICAgJ2xlbmRib29rL3tjdXJyZW5jeX0nLFxuICAgICAgICAgICAgICAgICdsZW5kcy97Y3VycmVuY3l9JyxcbiAgICAgICAgICAgICAgICAncHVidGlja2VyL3tzeW1ib2x9JyxcbiAgICAgICAgICAgICAgICAnc3RhdHMve3N5bWJvbH0nLFxuICAgICAgICAgICAgICAgICdzeW1ib2xzJyxcbiAgICAgICAgICAgICAgICAnc3ltYm9sc19kZXRhaWxzJyxcbiAgICAgICAgICAgICAgICAndG9kYXknLFxuICAgICAgICAgICAgICAgICd0cmFkZXMve3N5bWJvbH0nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnYWNjb3VudF9pbmZvcycsXG4gICAgICAgICAgICAgICAgJ2JhbGFuY2VzJyxcbiAgICAgICAgICAgICAgICAnYmFza2V0X21hbmFnZScsXG4gICAgICAgICAgICAgICAgJ2NyZWRpdHMnLFxuICAgICAgICAgICAgICAgICdkZXBvc2l0L25ldycsXG4gICAgICAgICAgICAgICAgJ2Z1bmRpbmcvY2xvc2UnLFxuICAgICAgICAgICAgICAgICdoaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAnaGlzdG9yeS9tb3ZlbWVudHMnLFxuICAgICAgICAgICAgICAgICdrZXlfaW5mbycsXG4gICAgICAgICAgICAgICAgJ21hcmdpbl9pbmZvcycsXG4gICAgICAgICAgICAgICAgJ215dHJhZGVzJyxcbiAgICAgICAgICAgICAgICAnb2ZmZXIvY2FuY2VsJyxcbiAgICAgICAgICAgICAgICAnb2ZmZXIvbmV3JyxcbiAgICAgICAgICAgICAgICAnb2ZmZXIvc3RhdHVzJyxcbiAgICAgICAgICAgICAgICAnb2ZmZXJzJyxcbiAgICAgICAgICAgICAgICAnb3JkZXIvY2FuY2VsJyxcbiAgICAgICAgICAgICAgICAnb3JkZXIvY2FuY2VsL2FsbCcsXG4gICAgICAgICAgICAgICAgJ29yZGVyL2NhbmNlbC9tdWx0aScsXG4gICAgICAgICAgICAgICAgJ29yZGVyL2NhbmNlbC9yZXBsYWNlJyxcbiAgICAgICAgICAgICAgICAnb3JkZXIvbmV3JyxcbiAgICAgICAgICAgICAgICAnb3JkZXIvbmV3L211bHRpJyxcbiAgICAgICAgICAgICAgICAnb3JkZXIvc3RhdHVzJyxcbiAgICAgICAgICAgICAgICAnb3JkZXJzJyxcbiAgICAgICAgICAgICAgICAncG9zaXRpb24vY2xhaW0nLFxuICAgICAgICAgICAgICAgICdwb3NpdGlvbnMnLFxuICAgICAgICAgICAgICAgICdzdW1tYXJ5JyxcbiAgICAgICAgICAgICAgICAndGFrZW5fZnVuZHMnLFxuICAgICAgICAgICAgICAgICd0b3RhbF90YWtlbl9mdW5kcycsXG4gICAgICAgICAgICAgICAgJ3RyYW5zZmVyJyxcbiAgICAgICAgICAgICAgICAndW51c2VkX3Rha2VuX2Z1bmRzJyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXcnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hNYXJrZXRzICgpIHtcbiAgICAgICAgbGV0IG1hcmtldHMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFN5bWJvbHNEZXRhaWxzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgbWFya2V0cy5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IG1hcmtldHNbcF07XG4gICAgICAgICAgICBsZXQgaWQgPSBtYXJrZXRbJ3BhaXInXS50b1VwcGVyQ2FzZSAoKTtcbiAgICAgICAgICAgIGxldCBiYXNlSWQgPSBpZC5zbGljZSAoMCwgMyk7XG4gICAgICAgICAgICBsZXQgcXVvdGVJZCA9IGlkLnNsaWNlICgzLCA2KTtcbiAgICAgICAgICAgIGxldCBiYXNlID0gYmFzZUlkO1xuICAgICAgICAgICAgbGV0IHF1b3RlID0gcXVvdGVJZDtcbiAgICAgICAgICAgIC8vIGlzc3VlICM0IEJpdGZpbmV4IG5hbWVzIERhc2ggYXMgRFNILCBpbnN0ZWFkIG9mIERBU0hcbiAgICAgICAgICAgIGlmIChiYXNlID09ICdEU0gnKVxuICAgICAgICAgICAgICAgIGJhc2UgPSAnREFTSCc7XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gYmFzZSArICcvJyArIHF1b3RlO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2ggKHtcbiAgICAgICAgICAgICAgICAnaWQnOiBpZCxcbiAgICAgICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgICAgICdiYXNlJzogYmFzZSxcbiAgICAgICAgICAgICAgICAncXVvdGUnOiBxdW90ZSxcbiAgICAgICAgICAgICAgICAnYmFzZUlkJzogYmFzZUlkLFxuICAgICAgICAgICAgICAgICdxdW90ZUlkJzogcXVvdGVJZCxcbiAgICAgICAgICAgICAgICAnaW5mbyc6IG1hcmtldCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RCYWxhbmNlcyAoKTtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0ge307XG4gICAgICAgIGZvciAobGV0IGIgPSAwOyBiIDwgcmVzcG9uc2UubGVuZ3RoOyBiKyspIHtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0gcmVzcG9uc2VbYl07XG4gICAgICAgICAgICBpZiAoYWNjb3VudFsndHlwZSddID09ICdleGNoYW5nZScpIHtcbiAgICAgICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBhY2NvdW50WydjdXJyZW5jeSddO1xuICAgICAgICAgICAgICAgIC8vIGlzc3VlICM0IEJpdGZpbmV4IG5hbWVzIERhc2ggYXMgRFNILCBpbnN0ZWFkIG9mIERBU0hcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVuY3kgPT0gJ0RTSCcpXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbmN5ID0gJ0RBU0gnO1xuICAgICAgICAgICAgICAgIGxldCB1cHBlcmNhc2UgPSBjdXJyZW5jeS50b1VwcGVyQ2FzZSAoKTtcbiAgICAgICAgICAgICAgICBiYWxhbmNlc1t1cHBlcmNhc2VdID0gYWNjb3VudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IHJlc3BvbnNlIH07XG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgdGhpcy5jdXJyZW5jaWVzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSB0aGlzLmN1cnJlbmNpZXNbY107XG4gICAgICAgICAgICBsZXQgYWNjb3VudCA9IHtcbiAgICAgICAgICAgICAgICAnZnJlZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAndXNlZCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAndG90YWwnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGN1cnJlbmN5IGluIGJhbGFuY2VzKSB7XG4gICAgICAgICAgICAgICAgYWNjb3VudFsnZnJlZSddID0gcGFyc2VGbG9hdCAoYmFsYW5jZXNbY3VycmVuY3ldWydhdmFpbGFibGUnXSk7XG4gICAgICAgICAgICAgICAgYWNjb3VudFsndG90YWwnXSA9IHBhcnNlRmxvYXQgKGJhbGFuY2VzW2N1cnJlbmN5XVsnYW1vdW50J10pO1xuICAgICAgICAgICAgICAgIGFjY291bnRbJ3VzZWQnXSA9IGFjY291bnRbJ3RvdGFsJ10gLSBhY2NvdW50WydmcmVlJ107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRCb29rU3ltYm9sICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ3N5bWJvbCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IFtdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaWRlcyA9IFsgJ2JpZHMnLCAnYXNrcycgXTtcbiAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBzaWRlcy5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1tzXTtcbiAgICAgICAgICAgIGxldCBvcmRlcnMgPSBvcmRlcmJvb2tbc2lkZV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBvcmRlciA9IG9yZGVyc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgcHJpY2UgPSBwYXJzZUZsb2F0IChvcmRlclsncHJpY2UnXSk7XG4gICAgICAgICAgICAgICAgbGV0IGFtb3VudCA9IHBhcnNlRmxvYXQgKG9yZGVyWydhbW91bnQnXSk7XG4gICAgICAgICAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHBhcnNlSW50IChwYXJzZUZsb2F0IChvcmRlclsndGltZXN0YW1wJ10pKTtcbiAgICAgICAgICAgICAgICByZXN1bHRbc2lkZV0ucHVzaCAoWyBwcmljZSwgYW1vdW50LCB0aW1lc3RhbXAgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgdGlja2VyID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRQdWJ0aWNrZXJTeW1ib2wgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHBhcnNlRmxvYXQgKHRpY2tlclsndGltZXN0YW1wJ10pICogMTAwMDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2JpZCddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2FzayddKSxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdF9wcmljZSddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogcGFyc2VGbG9hdCAodGlja2VyWydtaWQnXSksXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndm9sdW1lJ10pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIHBhcnNlVHJhZGUgKHRyYWRlLCBtYXJrZXQpIHtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRyYWRlWyd0aW1lc3RhbXAnXSAqIDEwMDA7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaWQnOiB0cmFkZVsndGlkJ10udG9TdHJpbmcgKCksXG4gICAgICAgICAgICAnaW5mbyc6IHRyYWRlLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdzeW1ib2wnOiBtYXJrZXRbJ3N5bWJvbCddLFxuICAgICAgICAgICAgJ3R5cGUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnc2lkZSc6IHRyYWRlWyd0eXBlJ10sXG4gICAgICAgICAgICAncHJpY2UnOiBwYXJzZUZsb2F0ICh0cmFkZVsncHJpY2UnXSksXG4gICAgICAgICAgICAnYW1vdW50JzogcGFyc2VGbG9hdCAodHJhZGVbJ2Ftb3VudCddKSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG0gPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHRyYWRlcyA9IGF3YWl0IHRoaXMucHVibGljR2V0VHJhZGVzU3ltYm9sICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ3N5bWJvbCc6IG1bJ2lkJ10sXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVRyYWRlcyAodHJhZGVzLCBtKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG9yZGVyID0ge1xuICAgICAgICAgICAgJ3N5bWJvbCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgICAgICAnYW1vdW50JzogYW1vdW50LnRvU3RyaW5nICgpLFxuICAgICAgICAgICAgJ3NpZGUnOiBzaWRlLFxuICAgICAgICAgICAgJ3R5cGUnOiAnZXhjaGFuZ2UgJyArIHR5cGUsXG4gICAgICAgICAgICAnb2Nvb3JkZXInOiBmYWxzZSxcbiAgICAgICAgICAgICdidXlfcHJpY2Vfb2NvJzogMCxcbiAgICAgICAgICAgICdzZWxsX3ByaWNlX29jbyc6IDAsXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlID09ICdtYXJrZXQnKSB7XG4gICAgICAgICAgICBvcmRlclsncHJpY2UnXSA9IHRoaXMubm9uY2UgKCkudG9TdHJpbmcgKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvcmRlclsncHJpY2UnXSA9IHByaWNlLnRvU3RyaW5nICgpO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0T3JkZXJOZXcgKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3VsdCxcbiAgICAgICAgICAgICdpZCc6IHJlc3VsdFsnb3JkZXJfaWQnXS50b1N0cmluZyAoKSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0T3JkZXJDYW5jZWwgKHsgJ29yZGVyX2lkJzogaWQgfSk7XG4gICAgfSxcblxuICAgIG5vbmNlICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCByZXF1ZXN0ID0gJy8nICsgdGhpcy52ZXJzaW9uICsgJy8nICsgdGhpcy5pbXBsb2RlUGFyYW1zIChwYXRoLCBwYXJhbXMpO1xuICAgICAgICBsZXQgcXVlcnkgPSB0aGlzLm9taXQgKHBhcmFtcywgdGhpcy5leHRyYWN0UGFyYW1zIChwYXRoKSk7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgcmVxdWVzdDtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChxdWVyeSkubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG5vbmNlID0gdGhpcy5ub25jZSAoKTtcbiAgICAgICAgICAgIHF1ZXJ5ID0gdGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICAgICAnbm9uY2UnOiBub25jZS50b1N0cmluZyAoKSxcbiAgICAgICAgICAgICAgICAncmVxdWVzdCc6IHJlcXVlc3QsXG4gICAgICAgICAgICB9LCBxdWVyeSk7XG4gICAgICAgICAgICBxdWVyeSA9IHRoaXMuanNvbiAocXVlcnkpO1xuICAgICAgICAgICAgcXVlcnkgPSB0aGlzLmVuY29kZSAocXVlcnkpO1xuICAgICAgICAgICAgbGV0IHBheWxvYWQgPSB0aGlzLnN0cmluZ1RvQmFzZTY0IChxdWVyeSk7XG4gICAgICAgICAgICBsZXQgc2VjcmV0ID0gdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KTtcbiAgICAgICAgICAgIGxldCBzaWduYXR1cmUgPSB0aGlzLmhtYWMgKHBheWxvYWQsIHNlY3JldCwgJ3NoYTM4NCcpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnWC1CRlgtQVBJS0VZJzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ1gtQkZYLVBBWUxPQUQnOiB0aGlzLmRlY29kZSAocGF5bG9hZCksXG4gICAgICAgICAgICAgICAgJ1gtQkZYLVNJR05BVFVSRSc6IHNpZ25hdHVyZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgICAgICBpZiAoJ21lc3NhZ2UnIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBiaXRmbHllciA9IHtcblxuICAgICdpZCc6ICdiaXRmbHllcicsXG4gICAgJ25hbWUnOiAnYml0Rmx5ZXInLFxuICAgICdjb3VudHJpZXMnOiAnSlAnLFxuICAgICd2ZXJzaW9uJzogJ3YxJyxcbiAgICAncmF0ZUxpbWl0JzogNTAwLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI4MDUxNjQyLTU2MTU0MTgyLTY2MGUtMTFlNy05YjBkLTYwNDJkMWU2ZWRkOC5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vYXBpLmJpdGZseWVyLmpwJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL2JpdGZseWVyLmpwJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL2JpdGZseWVyLmpwL0FQSScsXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnZ2V0bWFya2V0cycsICAgIC8vIG9yICdtYXJrZXRzJ1xuICAgICAgICAgICAgICAgICdnZXRib2FyZCcsICAgICAgLy8gb3IgJ2JvYXJkJ1xuICAgICAgICAgICAgICAgICdnZXR0aWNrZXInLCAgICAgLy8gb3IgJ3RpY2tlcidcbiAgICAgICAgICAgICAgICAnZ2V0ZXhlY3V0aW9ucycsIC8vIG9yICdleGVjdXRpb25zJ1xuICAgICAgICAgICAgICAgICdnZXRoZWFsdGgnLFxuICAgICAgICAgICAgICAgICdnZXRjaGF0cycsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAncHJpdmF0ZSc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ2dldHBlcm1pc3Npb25zJyxcbiAgICAgICAgICAgICAgICAnZ2V0YmFsYW5jZScsXG4gICAgICAgICAgICAgICAgJ2dldGNvbGxhdGVyYWwnLFxuICAgICAgICAgICAgICAgICdnZXRjb2xsYXRlcmFsYWNjb3VudHMnLFxuICAgICAgICAgICAgICAgICdnZXRhZGRyZXNzZXMnLFxuICAgICAgICAgICAgICAgICdnZXRjb2luaW5zJyxcbiAgICAgICAgICAgICAgICAnZ2V0Y29pbm91dHMnLFxuICAgICAgICAgICAgICAgICdnZXRiYW5rYWNjb3VudHMnLFxuICAgICAgICAgICAgICAgICdnZXRkZXBvc2l0cycsXG4gICAgICAgICAgICAgICAgJ2dldHdpdGhkcmF3YWxzJyxcbiAgICAgICAgICAgICAgICAnZ2V0Y2hpbGRvcmRlcnMnLFxuICAgICAgICAgICAgICAgICdnZXRwYXJlbnRvcmRlcnMnLFxuICAgICAgICAgICAgICAgICdnZXRwYXJlbnRvcmRlcicsXG4gICAgICAgICAgICAgICAgJ2dldGV4ZWN1dGlvbnMnLFxuICAgICAgICAgICAgICAgICdnZXRwb3NpdGlvbnMnLFxuICAgICAgICAgICAgICAgICdnZXR0cmFkaW5nY29tbWlzc2lvbicsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ3NlbmRjb2luJyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXcnLFxuICAgICAgICAgICAgICAgICdzZW5kY2hpbGRvcmRlcicsXG4gICAgICAgICAgICAgICAgJ2NhbmNlbGNoaWxkb3JkZXInLFxuICAgICAgICAgICAgICAgICdzZW5kcGFyZW50b3JkZXInLFxuICAgICAgICAgICAgICAgICdjYW5jZWxwYXJlbnRvcmRlcicsXG4gICAgICAgICAgICAgICAgJ2NhbmNlbGFsbGNoaWxkb3JkZXJzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoTWFya2V0cyAoKSB7XG4gICAgICAgIGxldCBtYXJrZXRzID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgbWFya2V0cy5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IG1hcmtldHNbcF07XG4gICAgICAgICAgICBsZXQgaWQgPSBtYXJrZXRbJ3Byb2R1Y3RfY29kZSddO1xuICAgICAgICAgICAgbGV0IGN1cnJlbmNpZXMgPSBpZC5zcGxpdCAoJ18nKTtcbiAgICAgICAgICAgIGxldCBiYXNlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgbGV0IHF1b3RlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgbGV0IHN5bWJvbCA9IGlkO1xuICAgICAgICAgICAgbGV0IG51bUN1cnJlbmNpZXMgPSBjdXJyZW5jaWVzLmxlbmd0aDtcbiAgICAgICAgICAgIGlmIChudW1DdXJyZW5jaWVzID09IDIpIHtcbiAgICAgICAgICAgICAgICBiYXNlID0gY3VycmVuY2llc1swXTtcbiAgICAgICAgICAgICAgICBxdW90ZSA9IGN1cnJlbmNpZXNbMV07XG4gICAgICAgICAgICAgICAgc3ltYm9sID0gYmFzZSArICcvJyArIHF1b3RlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0LnB1c2ggKHtcbiAgICAgICAgICAgICAgICAnaWQnOiBpZCxcbiAgICAgICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgICAgICdiYXNlJzogYmFzZSxcbiAgICAgICAgICAgICAgICAncXVvdGUnOiBxdW90ZSxcbiAgICAgICAgICAgICAgICAnaW5mbyc6IG1hcmtldCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZUdldEJhbGFuY2UgKCk7XG4gICAgICAgIGxldCBiYWxhbmNlcyA9IHt9O1xuICAgICAgICBmb3IgKGxldCBiID0gMDsgYiA8IHJlc3BvbnNlLmxlbmd0aDsgYisrKSB7XG4gICAgICAgICAgICBsZXQgYWNjb3VudCA9IHJlc3BvbnNlW2JdO1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gYWNjb3VudFsnY3VycmVuY3lfY29kZSddO1xuICAgICAgICAgICAgYmFsYW5jZXNbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IHJlc3BvbnNlIH07XG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgdGhpcy5jdXJyZW5jaWVzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSB0aGlzLmN1cnJlbmNpZXNbY107XG4gICAgICAgICAgICBsZXQgYWNjb3VudCA9IHtcbiAgICAgICAgICAgICAgICAnZnJlZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAndXNlZCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAndG90YWwnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGN1cnJlbmN5IGluIGJhbGFuY2VzKSB7XG4gICAgICAgICAgICAgICAgYWNjb3VudFsndG90YWwnXSA9IGJhbGFuY2VzW2N1cnJlbmN5XVsnYW1vdW50J107XG4gICAgICAgICAgICAgICAgYWNjb3VudFsnZnJlZSddID0gYmFsYW5jZXNbY3VycmVuY3ldWydhdmFpbGFibGUnXTtcbiAgICAgICAgICAgICAgICBhY2NvdW50Wyd1c2VkJ10gPSBhY2NvdW50Wyd0b3RhbCddIC0gYWNjb3VudFsnZnJlZSddO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IGF3YWl0IHRoaXMucHVibGljR2V0Qm9hcmQgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAncHJvZHVjdF9jb2RlJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdiaWRzJzogW10sXG4gICAgICAgICAgICAnYXNrcyc6IFtdLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHNpZGVzID0gWyAnYmlkcycsICdhc2tzJyBdO1xuICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IHNpZGVzLmxlbmd0aDsgcysrKSB7XG4gICAgICAgICAgICBsZXQgc2lkZSA9IHNpZGVzW3NdO1xuICAgICAgICAgICAgbGV0IG9yZGVycyA9IG9yZGVyYm9va1tzaWRlXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9yZGVyID0gb3JkZXJzW2ldO1xuICAgICAgICAgICAgICAgIGxldCBwcmljZSA9IHBhcnNlRmxvYXQgKG9yZGVyWydwcmljZSddKTtcbiAgICAgICAgICAgICAgICBsZXQgYW1vdW50ID0gcGFyc2VGbG9hdCAob3JkZXJbJ3NpemUnXSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3NpZGVdLnB1c2ggKFsgcHJpY2UsIGFtb3VudCBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCB0aWNrZXIgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFRpY2tlciAoe1xuICAgICAgICAgICAgJ3Byb2R1Y3RfY29kZSc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5wYXJzZTg2MDEgKHRpY2tlclsndGltZXN0YW1wJ10pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xvdyc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2Jlc3RfYmlkJ10pLFxuICAgICAgICAgICAgJ2Fzayc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYmVzdF9hc2snXSksXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2x0cCddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbHVtZV9ieV9wcm9kdWN0J10pLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWyd2b2x1bWUnXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0RXhlY3V0aW9ucyAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdwcm9kdWN0X2NvZGUnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG9yZGVyID0ge1xuICAgICAgICAgICAgJ3Byb2R1Y3RfY29kZSc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgICAgICAnY2hpbGRfb3JkZXJfdHlwZSc6IHR5cGUudG9VcHBlckNhc2UgKCksXG4gICAgICAgICAgICAnc2lkZSc6IHNpZGUudG9VcHBlckNhc2UgKCksXG4gICAgICAgICAgICAncHJpY2UnOiBwcmljZSxcbiAgICAgICAgICAgICdzaXplJzogYW1vdW50LFxuICAgICAgICB9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdFNlbmRjaGlsZG9yZGVyICh0aGlzLmV4dGVuZCAob3JkZXIsIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXN1bHQsXG4gICAgICAgICAgICAnaWQnOiByZXN1bHRbJ2NoaWxkX29yZGVyX2FjY2VwdGFuY2VfaWQnXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdENhbmNlbGNoaWxkb3JkZXIgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAncGFyZW50X29yZGVyX2lkJzogaWQsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCByZXF1ZXN0ID0gJy8nICsgdGhpcy52ZXJzaW9uICsgJy8nO1xuICAgICAgICBpZiAoYXBpID09ICdwcml2YXRlJylcbiAgICAgICAgICAgIHJlcXVlc3QgKz0gJ21lLyc7XG4gICAgICAgIHJlcXVlc3QgKz0gcGF0aDtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ10gKyByZXF1ZXN0O1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHBhcmFtcykubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocGFyYW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCkudG9TdHJpbmcgKCk7XG4gICAgICAgICAgICBib2R5ID0gdGhpcy5qc29uIChwYXJhbXMpO1xuICAgICAgICAgICAgbGV0IGF1dGggPSBbIG5vbmNlLCBtZXRob2QsIHJlcXVlc3QsIGJvZHkgXS5qb2luICgnJyk7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdBQ0NFU1MtS0VZJzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ0FDQ0VTUy1USU1FU1RBTVAnOiBub25jZSxcbiAgICAgICAgICAgICAgICAnQUNDRVNTLVNJR04nOiB0aGlzLmhtYWMgKHRoaXMuZW5jb2RlIChhdXRoKSwgdGhpcy5zZWNyZXQpLFxuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgYml0bGlzaCA9IHtcblxuICAgICdpZCc6ICdiaXRsaXNoJyxcbiAgICAnbmFtZSc6ICdiaXRsaXNoJyxcbiAgICAnY291bnRyaWVzJzogWyAnR0InLCAnRVUnLCAnUlUnIF0sXG4gICAgJ3JhdGVMaW1pdCc6IDE1MDAsXG4gICAgJ3ZlcnNpb24nOiAndjEnLFxuICAgICdoYXNGZXRjaFRpY2tlcnMnOiB0cnVlLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2Mjc1LWRjZmM2YzMwLTVlZDMtMTFlNy04MzlkLTAwYTg0NjM4NWQwYi5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vYml0bGlzaC5jb20vYXBpJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL2JpdGxpc2guY29tJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL2JpdGxpc2guY29tL2FwaScsXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnaW5zdHJ1bWVudHMnLFxuICAgICAgICAgICAgICAgICdvaGxjdicsXG4gICAgICAgICAgICAgICAgJ3BhaXJzJyxcbiAgICAgICAgICAgICAgICAndGlja2VycycsXG4gICAgICAgICAgICAgICAgJ3RyYWRlc19kZXB0aCcsXG4gICAgICAgICAgICAgICAgJ3RyYWRlc19oaXN0b3J5JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2FjY291bnRzX29wZXJhdGlvbnMnLFxuICAgICAgICAgICAgICAgICdiYWxhbmNlJyxcbiAgICAgICAgICAgICAgICAnY2FuY2VsX3RyYWRlJyxcbiAgICAgICAgICAgICAgICAnY2FuY2VsX3RyYWRlc19ieV9pZHMnLFxuICAgICAgICAgICAgICAgICdjYW5jZWxfYWxsX3RyYWRlcycsXG4gICAgICAgICAgICAgICAgJ2NyZWF0ZV9iY29kZScsXG4gICAgICAgICAgICAgICAgJ2NyZWF0ZV90ZW1wbGF0ZV93YWxsZXQnLFxuICAgICAgICAgICAgICAgICdjcmVhdGVfdHJhZGUnLFxuICAgICAgICAgICAgICAgICdkZXBvc2l0JyxcbiAgICAgICAgICAgICAgICAnbGlzdF9hY2NvdW50c19vcGVyYXRpb25zX2Zyb21fdHMnLFxuICAgICAgICAgICAgICAgICdsaXN0X2FjdGl2ZV90cmFkZXMnLFxuICAgICAgICAgICAgICAgICdsaXN0X2Jjb2RlcycsXG4gICAgICAgICAgICAgICAgJ2xpc3RfbXlfbWF0Y2hlc19mcm9tX3RzJyxcbiAgICAgICAgICAgICAgICAnbGlzdF9teV90cmFkZXMnLFxuICAgICAgICAgICAgICAgICdsaXN0X215X3RyYWRzX2Zyb21fdHMnLFxuICAgICAgICAgICAgICAgICdsaXN0X3BheW1lbnRfbWV0aG9kcycsXG4gICAgICAgICAgICAgICAgJ2xpc3RfcGF5bWVudHMnLFxuICAgICAgICAgICAgICAgICdyZWRlZW1fY29kZScsXG4gICAgICAgICAgICAgICAgJ3Jlc2lnbicsXG4gICAgICAgICAgICAgICAgJ3NpZ25pbicsXG4gICAgICAgICAgICAgICAgJ3NpZ25vdXQnLFxuICAgICAgICAgICAgICAgICd0cmFkZV9kZXRhaWxzJyxcbiAgICAgICAgICAgICAgICAndHJhZGVfb3B0aW9ucycsXG4gICAgICAgICAgICAgICAgJ3dpdGhkcmF3JyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXdfYnlfaWQnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hNYXJrZXRzICgpIHtcbiAgICAgICAgbGV0IG1hcmtldHMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFBhaXJzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMgKG1hcmtldHMpO1xuICAgICAgICBmb3IgKGxldCBwID0gMDsgcCA8IGtleXMubGVuZ3RoOyBwKyspIHtcbiAgICAgICAgICAgIGxldCBtYXJrZXQgPSBtYXJrZXRzW2tleXNbcF1dO1xuICAgICAgICAgICAgbGV0IGlkID0gbWFya2V0WydpZCddO1xuICAgICAgICAgICAgbGV0IHN5bWJvbCA9IG1hcmtldFsnbmFtZSddO1xuICAgICAgICAgICAgbGV0IFsgYmFzZSwgcXVvdGUgXSA9IHN5bWJvbC5zcGxpdCAoJy8nKTtcbiAgICAgICAgICAgIC8vIGlzc3VlICM0IGJpdGxpc2ggbmFtZXMgRGFzaCBhcyBEU0gsIGluc3RlYWQgb2YgREFTSFxuICAgICAgICAgICAgaWYgKGJhc2UgPT0gJ0RTSCcpXG4gICAgICAgICAgICAgICAgYmFzZSA9ICdEQVNIJztcbiAgICAgICAgICAgIHN5bWJvbCA9IGJhc2UgKyAnLycgKyBxdW90ZTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoICh7XG4gICAgICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgICAgICAgICAgJ3N5bWJvbCc6IHN5bWJvbCxcbiAgICAgICAgICAgICAgICAnYmFzZSc6IGJhc2UsXG4gICAgICAgICAgICAgICAgJ3F1b3RlJzogcXVvdGUsXG4gICAgICAgICAgICAgICAgJ2luZm8nOiBtYXJrZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBwYXJzZVRpY2tlciAodGlja2VyLCBtYXJrZXQpIHtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydtYXgnXSksXG4gICAgICAgICAgICAnbG93JzogcGFyc2VGbG9hdCAodGlja2VyWydtaW4nXSksXG4gICAgICAgICAgICAnYmlkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Fzayc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2ZpcnN0J10pLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xhc3QnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VycyAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCB0aWNrZXJzID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRUaWNrZXJzICgpO1xuICAgICAgICBsZXQgaWRzID0gT2JqZWN0LmtleXMgKHRpY2tlcnMpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge307XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgaWQgPSBpZHNbaV07XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gdGhpcy5tYXJrZXRzX2J5X2lkW2lkXTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBtYXJrZXRbJ3N5bWJvbCddO1xuICAgICAgICAgICAgbGV0IHRpY2tlciA9IHRpY2tlcnNbaWRdO1xuICAgICAgICAgICAgcmVzdWx0W3N5bWJvbF0gPSB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIG1hcmtldCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgdGlja2VycyA9IGF3YWl0IHRoaXMucHVibGljR2V0VGlja2VycyAoKTtcbiAgICAgICAgbGV0IHRpY2tlciA9IHRpY2tlcnNbcFsnaWQnXV07XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIHApO1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRUcmFkZXNEZXB0aCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdwYWlyX2lkJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSBwYXJzZUludCAocGFyc2VJbnQgKG9yZGVyYm9va1snbGFzdCddKSAvIDEwMDApO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSB7ICdiaWRzJzogJ2JpZCcsICdhc2tzJzogJ2FzaycgfTtcbiAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyAoc2lkZXMpO1xuICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGtleXMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgIGxldCBrZXkgPSBrZXlzW2tdO1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1trZXldO1xuICAgICAgICAgICAgbGV0IG9yZGVycyA9IG9yZGVyYm9va1tzaWRlXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9yZGVyID0gb3JkZXJzW2ldO1xuICAgICAgICAgICAgICAgIGxldCBwcmljZSA9IHBhcnNlRmxvYXQgKG9yZGVyWydwcmljZSddKTtcbiAgICAgICAgICAgICAgICBsZXQgYW1vdW50ID0gcGFyc2VGbG9hdCAob3JkZXJbJ3ZvbHVtZSddKTtcbiAgICAgICAgICAgICAgICByZXN1bHRba2V5XS5wdXNoIChbIHByaWNlLCBhbW91bnQgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0VHJhZGVzSGlzdG9yeSAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdwYWlyX2lkJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RCYWxhbmNlICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IHJlc3BvbnNlIH07XG4gICAgICAgIGxldCBjdXJyZW5jaWVzID0gT2JqZWN0LmtleXMgKHJlc3BvbnNlKTtcbiAgICAgICAgbGV0IGJhbGFuY2UgPSB7fTtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBjdXJyZW5jaWVzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBjdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSByZXNwb25zZVtjdXJyZW5jeV07XG4gICAgICAgICAgICBjdXJyZW5jeSA9IGN1cnJlbmN5LnRvVXBwZXJDYXNlICgpO1xuICAgICAgICAgICAgLy8gaXNzdWUgIzQgYml0bGlzaCBuYW1lcyBEYXNoIGFzIERTSCwgaW5zdGVhZCBvZiBEQVNIXG4gICAgICAgICAgICBpZiAoY3VycmVuY3kgPT0gJ0RTSCcpXG4gICAgICAgICAgICAgICAgY3VycmVuY3kgPSAnREFTSCc7XG4gICAgICAgICAgICBiYWxhbmNlW2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCB0aGlzLmN1cnJlbmNpZXMubGVuZ3RoOyBjKyspIHtcbiAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IHRoaXMuY3VycmVuY2llc1tjXTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd1c2VkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoY3VycmVuY3kgaW4gYmFsYW5jZSkge1xuICAgICAgICAgICAgICAgIGFjY291bnRbJ2ZyZWUnXSA9IHBhcnNlRmxvYXQgKGJhbGFuY2VbY3VycmVuY3ldWydmdW5kcyddKTtcbiAgICAgICAgICAgICAgICBhY2NvdW50Wyd1c2VkJ10gPSBwYXJzZUZsb2F0IChiYWxhbmNlW2N1cnJlbmN5XVsnaG9sZGVkJ10pO1xuICAgICAgICAgICAgICAgIGFjY291bnRbJ3RvdGFsJ10gPSB0aGlzLnN1bSAoYWNjb3VudFsnZnJlZSddLCBhY2NvdW50Wyd1c2VkJ10pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgc2lnbkluICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJpdmF0ZVBvc3RTaWduaW4gKHtcbiAgICAgICAgICAgICdsb2dpbic6IHRoaXMubG9naW4sXG4gICAgICAgICAgICAncGFzc3dkJzogdGhpcy5wYXNzd29yZCxcbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdwYWlyX2lkJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICdkaXInOiAoc2lkZSA9PSAnYnV5JykgPyAnYmlkJyA6ICdhc2snLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IGFtb3VudCxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHR5cGUgPT0gJ2xpbWl0JylcbiAgICAgICAgICAgIG9yZGVyWydwcmljZSddID0gcHJpY2U7XG4gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0Q3JlYXRlVHJhZGUgKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3VsdCxcbiAgICAgICAgICAgICdpZCc6IHJlc3VsdFsnaWQnXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0Q2FuY2VsVHJhZGUgKHsgJ2lkJzogaWQgfSk7XG4gICAgfSxcblxuICAgIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ10gKyAnLycgKyB0aGlzLnZlcnNpb24gKyAnLycgKyBwYXRoO1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHBhcmFtcykubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocGFyYW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLmpzb24gKHRoaXMuZXh0ZW5kICh7ICd0b2tlbic6IHRoaXMuYXBpS2V5IH0sIHBhcmFtcykpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgYml0bWFya2V0ID0ge1xuXG4gICAgJ2lkJzogJ2JpdG1hcmtldCcsXG4gICAgJ25hbWUnOiAnQml0TWFya2V0JyxcbiAgICAnY291bnRyaWVzJzogWyAnUEwnLCAnRVUnIF0sXG4gICAgJ3JhdGVMaW1pdCc6IDE1MDAsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc3NjcyNTYtYTg1NTUyMDAtNWVmOS0xMWU3LTk2ZmQtNDY5YTY1ZTJiMGJkLmpwZycsXG4gICAgICAgICdhcGknOiB7XG4gICAgICAgICAgICAncHVibGljJzogJ2h0dHBzOi8vd3d3LmJpdG1hcmtldC5uZXQnLFxuICAgICAgICAgICAgJ3ByaXZhdGUnOiAnaHR0cHM6Ly93d3cuYml0bWFya2V0LnBsL2FwaTIvJywgLy8gbGFzdCBzbGFzaCBpcyBjcml0aWNhbFxuICAgICAgICB9LFxuICAgICAgICAnd3d3JzogW1xuICAgICAgICAgICAgJ2h0dHBzOi8vd3d3LmJpdG1hcmtldC5wbCcsXG4gICAgICAgICAgICAnaHR0cHM6Ly93d3cuYml0bWFya2V0Lm5ldCcsXG4gICAgICAgIF0sXG4gICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAnaHR0cHM6Ly93d3cuYml0bWFya2V0Lm5ldC9kb2NzLnBocD9maWxlPWFwaV9wdWJsaWMuaHRtbCcsXG4gICAgICAgICAgICAnaHR0cHM6Ly93d3cuYml0bWFya2V0Lm5ldC9kb2NzLnBocD9maWxlPWFwaV9wcml2YXRlLmh0bWwnLFxuICAgICAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS9iaXRtYXJrZXQtbmV0L2FwaScsXG4gICAgICAgIF0sXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnanNvbi97bWFya2V0fS90aWNrZXInLFxuICAgICAgICAgICAgICAgICdqc29uL3ttYXJrZXR9L29yZGVyYm9vaycsXG4gICAgICAgICAgICAgICAgJ2pzb24ve21hcmtldH0vdHJhZGVzJyxcbiAgICAgICAgICAgICAgICAnanNvbi9jdHJhbnNmZXInLFxuICAgICAgICAgICAgICAgICdncmFwaHMve21hcmtldH0vOTBtJyxcbiAgICAgICAgICAgICAgICAnZ3JhcGhzL3ttYXJrZXR9LzZoJyxcbiAgICAgICAgICAgICAgICAnZ3JhcGhzL3ttYXJrZXR9LzFkJyxcbiAgICAgICAgICAgICAgICAnZ3JhcGhzL3ttYXJrZXR9LzdkJyxcbiAgICAgICAgICAgICAgICAnZ3JhcGhzL3ttYXJrZXR9LzFtJyxcbiAgICAgICAgICAgICAgICAnZ3JhcGhzL3ttYXJrZXR9LzNtJyxcbiAgICAgICAgICAgICAgICAnZ3JhcGhzL3ttYXJrZXR9LzZtJyxcbiAgICAgICAgICAgICAgICAnZ3JhcGhzL3ttYXJrZXR9LzF5JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2luZm8nLFxuICAgICAgICAgICAgICAgICd0cmFkZScsXG4gICAgICAgICAgICAgICAgJ2NhbmNlbCcsXG4gICAgICAgICAgICAgICAgJ29yZGVycycsXG4gICAgICAgICAgICAgICAgJ3RyYWRlcycsXG4gICAgICAgICAgICAgICAgJ2hpc3RvcnknLFxuICAgICAgICAgICAgICAgICd3aXRoZHJhd2FscycsXG4gICAgICAgICAgICAgICAgJ3RyYWRpbmdkZXNrJyxcbiAgICAgICAgICAgICAgICAndHJhZGluZ2Rlc2tTdGF0dXMnLFxuICAgICAgICAgICAgICAgICd0cmFkaW5nZGVza0NvbmZpcm0nLFxuICAgICAgICAgICAgICAgICdjcnlwdG90cmFkaW5nZGVzaycsXG4gICAgICAgICAgICAgICAgJ2NyeXB0b3RyYWRpbmdkZXNrU3RhdHVzJyxcbiAgICAgICAgICAgICAgICAnY3J5cHRvdHJhZGluZ2Rlc2tDb25maXJtJyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXcnLFxuICAgICAgICAgICAgICAgICd3aXRoZHJhd0ZpYXQnLFxuICAgICAgICAgICAgICAgICd3aXRoZHJhd1BMTlBQJyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXdGaWF0RmFzdCcsXG4gICAgICAgICAgICAgICAgJ2RlcG9zaXQnLFxuICAgICAgICAgICAgICAgICd0cmFuc2ZlcicsXG4gICAgICAgICAgICAgICAgJ3RyYW5zZmVycycsXG4gICAgICAgICAgICAgICAgJ21hcmdpbkxpc3QnLFxuICAgICAgICAgICAgICAgICdtYXJnaW5PcGVuJyxcbiAgICAgICAgICAgICAgICAnbWFyZ2luQ2xvc2UnLFxuICAgICAgICAgICAgICAgICdtYXJnaW5DYW5jZWwnLFxuICAgICAgICAgICAgICAgICdtYXJnaW5Nb2RpZnknLFxuICAgICAgICAgICAgICAgICdtYXJnaW5CYWxhbmNlQWRkJyxcbiAgICAgICAgICAgICAgICAnbWFyZ2luQmFsYW5jZVJlbW92ZScsXG4gICAgICAgICAgICAgICAgJ3N3YXBMaXN0JyxcbiAgICAgICAgICAgICAgICAnc3dhcE9wZW4nLFxuICAgICAgICAgICAgICAgICdzd2FwQ2xvc2UnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgICdtYXJrZXRzJzoge1xuICAgICAgICAnQlRDL1BMTic6IHsgJ2lkJzogJ0JUQ1BMTicsICdzeW1ib2wnOiAnQlRDL1BMTicsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdQTE4nIH0sXG4gICAgICAgICdCVEMvRVVSJzogeyAnaWQnOiAnQlRDRVVSJywgJ3N5bWJvbCc6ICdCVEMvRVVSJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ0VVUicgfSxcbiAgICAgICAgJ0xUQy9QTE4nOiB7ICdpZCc6ICdMVENQTE4nLCAnc3ltYm9sJzogJ0xUQy9QTE4nLCAnYmFzZSc6ICdMVEMnLCAncXVvdGUnOiAnUExOJyB9LFxuICAgICAgICAnTFRDL0JUQyc6IHsgJ2lkJzogJ0xUQ0JUQycsICdzeW1ib2wnOiAnTFRDL0JUQycsICdiYXNlJzogJ0xUQycsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdMaXRlTWluZVgvQlRDJzogeyAnaWQnOiAnTGl0ZU1pbmVYQlRDJywgJ3N5bWJvbCc6ICdMaXRlTWluZVgvQlRDJywgJ2Jhc2UnOiAnTGl0ZU1pbmVYJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ1BsblgvQlRDJzogeyAnaWQnOiAnUGxueEJUQycsICdzeW1ib2wnOiAnUGxuWC9CVEMnLCAnYmFzZSc6ICdQbG5YJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdEluZm8gKCk7XG4gICAgICAgIGxldCBkYXRhID0gcmVzcG9uc2VbJ2RhdGEnXTtcbiAgICAgICAgbGV0IGJhbGFuY2UgPSBkYXRhWydiYWxhbmNlcyddO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGRhdGEgfTtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCB0aGlzLmN1cnJlbmNpZXMubGVuZ3RoOyBjKyspIHtcbiAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IHRoaXMuY3VycmVuY2llc1tjXTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd1c2VkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoY3VycmVuY3kgaW4gYmFsYW5jZVsnYXZhaWxhYmxlJ10pXG4gICAgICAgICAgICAgICAgYWNjb3VudFsnZnJlZSddID0gYmFsYW5jZVsnYXZhaWxhYmxlJ11bY3VycmVuY3ldO1xuICAgICAgICAgICAgaWYgKGN1cnJlbmN5IGluIGJhbGFuY2VbJ2Jsb2NrZWQnXSlcbiAgICAgICAgICAgICAgICBhY2NvdW50Wyd1c2VkJ10gPSBiYWxhbmNlWydibG9ja2VkJ11bY3VycmVuY3ldO1xuICAgICAgICAgICAgYWNjb3VudFsndG90YWwnXSA9IHRoaXMuc3VtIChhY2NvdW50WydmcmVlJ10sIGFjY291bnRbJ3VzZWQnXSk7XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRKc29uTWFya2V0T3JkZXJib29rICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ21hcmtldCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IG9yZGVyYm9va1snYmlkcyddLFxuICAgICAgICAgICAgJ2Fza3MnOiBvcmRlcmJvb2tbJ2Fza3MnXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG5cbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBsZXQgdGlja2VyID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRKc29uTWFya2V0VGlja2VyICh7XG4gICAgICAgICAgICAnbWFya2V0JzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2JpZCddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2FzayddKSxcbiAgICAgICAgICAgICd2d2FwJzogcGFyc2VGbG9hdCAodGlja2VyWyd2d2FwJ10pLFxuICAgICAgICAgICAgJ29wZW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdCddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbHVtZSddKSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdGhpcy5wdWJsaWNHZXRKc29uTWFya2V0VHJhZGVzICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ21hcmtldCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0VHJhZGUgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnbWFya2V0JzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICd0eXBlJzogc2lkZSxcbiAgICAgICAgICAgICdhbW91bnQnOiBhbW91bnQsXG4gICAgICAgICAgICAncmF0ZSc6IHByaWNlLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgIH07XG4gICAgICAgIGlmICgnaWQnIGluIHJlc3BvbnNlWydvcmRlciddKVxuICAgICAgICAgICAgcmVzdWx0WydpZCddID0gcmVzcG9uc2VbJ2lkJ107XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdENhbmNlbCAoeyAnaWQnOiBpZCB9KTtcbiAgICB9LFxuXG4gICAgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXVthcGldO1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICB1cmwgKz0gJy8nICsgdGhpcy5pbXBsb2RlUGFyYW1zIChwYXRoICsgJy5qc29uJywgcGFyYW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCk7XG4gICAgICAgICAgICBsZXQgcXVlcnkgPSB0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgICAgICd0b25jZSc6IG5vbmNlLFxuICAgICAgICAgICAgICAgICdtZXRob2QnOiBwYXRoLFxuICAgICAgICAgICAgfSwgcGFyYW1zKTtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQVBJLUtleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgICAgICdBUEktSGFzaCc6IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKGJvZHkpLCB0aGlzLmVuY29kZSAodGhpcy5zZWNyZXQpLCAnc2hhNTEyJyksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgYml0bWV4ID0ge1xuXG4gICAgJ2lkJzogJ2JpdG1leCcsXG4gICAgJ25hbWUnOiAnQml0TUVYJyxcbiAgICAnY291bnRyaWVzJzogJ1NDJywgLy8gU2V5Y2hlbGxlc1xuICAgICd2ZXJzaW9uJzogJ3YxJyxcbiAgICAncmF0ZUxpbWl0JzogMTUwMCxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yNzc2NjMxOS1mNjUzYzZlNi01ZWQ0LTExZTctOTMzZC1mMGJjMzY5OWFlOGYuanBnJyxcbiAgICAgICAgJ2FwaSc6ICdodHRwczovL3d3dy5iaXRtZXguY29tJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy5iaXRtZXguY29tJyxcbiAgICAgICAgJ2RvYyc6IFtcbiAgICAgICAgICAgICdodHRwczovL3d3dy5iaXRtZXguY29tL2FwcC9hcGlPdmVydmlldycsXG4gICAgICAgICAgICAnaHR0cHM6Ly9naXRodWIuY29tL0JpdE1FWC9hcGktY29ubmVjdG9ycy90cmVlL21hc3Rlci9vZmZpY2lhbC1odHRwJyxcbiAgICAgICAgXSxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdhbm5vdW5jZW1lbnQnLFxuICAgICAgICAgICAgICAgICdhbm5vdW5jZW1lbnQvdXJnZW50JyxcbiAgICAgICAgICAgICAgICAnZnVuZGluZycsXG4gICAgICAgICAgICAgICAgJ2luc3RydW1lbnQnLFxuICAgICAgICAgICAgICAgICdpbnN0cnVtZW50L2FjdGl2ZScsXG4gICAgICAgICAgICAgICAgJ2luc3RydW1lbnQvYWN0aXZlQW5kSW5kaWNlcycsXG4gICAgICAgICAgICAgICAgJ2luc3RydW1lbnQvYWN0aXZlSW50ZXJ2YWxzJyxcbiAgICAgICAgICAgICAgICAnaW5zdHJ1bWVudC9jb21wb3NpdGVJbmRleCcsXG4gICAgICAgICAgICAgICAgJ2luc3RydW1lbnQvaW5kaWNlcycsXG4gICAgICAgICAgICAgICAgJ2luc3VyYW5jZScsXG4gICAgICAgICAgICAgICAgJ2xlYWRlcmJvYXJkJyxcbiAgICAgICAgICAgICAgICAnbGlxdWlkYXRpb24nLFxuICAgICAgICAgICAgICAgICdvcmRlckJvb2snLFxuICAgICAgICAgICAgICAgICdvcmRlckJvb2svTDInLFxuICAgICAgICAgICAgICAgICdxdW90ZScsXG4gICAgICAgICAgICAgICAgJ3F1b3RlL2J1Y2tldGVkJyxcbiAgICAgICAgICAgICAgICAnc2NoZW1hJyxcbiAgICAgICAgICAgICAgICAnc2NoZW1hL3dlYnNvY2tldEhlbHAnLFxuICAgICAgICAgICAgICAgICdzZXR0bGVtZW50JyxcbiAgICAgICAgICAgICAgICAnc3RhdHMnLFxuICAgICAgICAgICAgICAgICdzdGF0cy9oaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAndHJhZGUnLFxuICAgICAgICAgICAgICAgICd0cmFkZS9idWNrZXRlZCcsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAncHJpdmF0ZSc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ2FwaUtleScsXG4gICAgICAgICAgICAgICAgJ2NoYXQnLFxuICAgICAgICAgICAgICAgICdjaGF0L2NoYW5uZWxzJyxcbiAgICAgICAgICAgICAgICAnY2hhdC9jb25uZWN0ZWQnLFxuICAgICAgICAgICAgICAgICdleGVjdXRpb24nLFxuICAgICAgICAgICAgICAgICdleGVjdXRpb24vdHJhZGVIaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAnbm90aWZpY2F0aW9uJyxcbiAgICAgICAgICAgICAgICAnb3JkZXInLFxuICAgICAgICAgICAgICAgICdwb3NpdGlvbicsXG4gICAgICAgICAgICAgICAgJ3VzZXInLFxuICAgICAgICAgICAgICAgICd1c2VyL2FmZmlsaWF0ZVN0YXR1cycsXG4gICAgICAgICAgICAgICAgJ3VzZXIvY2hlY2tSZWZlcnJhbENvZGUnLFxuICAgICAgICAgICAgICAgICd1c2VyL2NvbW1pc3Npb24nLFxuICAgICAgICAgICAgICAgICd1c2VyL2RlcG9zaXRBZGRyZXNzJyxcbiAgICAgICAgICAgICAgICAndXNlci9tYXJnaW4nLFxuICAgICAgICAgICAgICAgICd1c2VyL21pbldpdGhkcmF3YWxGZWUnLFxuICAgICAgICAgICAgICAgICd1c2VyL3dhbGxldCcsXG4gICAgICAgICAgICAgICAgJ3VzZXIvd2FsbGV0SGlzdG9yeScsXG4gICAgICAgICAgICAgICAgJ3VzZXIvd2FsbGV0U3VtbWFyeScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2FwaUtleScsXG4gICAgICAgICAgICAgICAgJ2FwaUtleS9kaXNhYmxlJyxcbiAgICAgICAgICAgICAgICAnYXBpS2V5L2VuYWJsZScsXG4gICAgICAgICAgICAgICAgJ2NoYXQnLFxuICAgICAgICAgICAgICAgICdvcmRlcicsXG4gICAgICAgICAgICAgICAgJ29yZGVyL2J1bGsnLFxuICAgICAgICAgICAgICAgICdvcmRlci9jYW5jZWxBbGxBZnRlcicsXG4gICAgICAgICAgICAgICAgJ29yZGVyL2Nsb3NlUG9zaXRpb24nLFxuICAgICAgICAgICAgICAgICdwb3NpdGlvbi9pc29sYXRlJyxcbiAgICAgICAgICAgICAgICAncG9zaXRpb24vbGV2ZXJhZ2UnLFxuICAgICAgICAgICAgICAgICdwb3NpdGlvbi9yaXNrTGltaXQnLFxuICAgICAgICAgICAgICAgICdwb3NpdGlvbi90cmFuc2Zlck1hcmdpbicsXG4gICAgICAgICAgICAgICAgJ3VzZXIvY2FuY2VsV2l0aGRyYXdhbCcsXG4gICAgICAgICAgICAgICAgJ3VzZXIvY29uZmlybUVtYWlsJyxcbiAgICAgICAgICAgICAgICAndXNlci9jb25maXJtRW5hYmxlVEZBJyxcbiAgICAgICAgICAgICAgICAndXNlci9jb25maXJtV2l0aGRyYXdhbCcsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZGlzYWJsZVRGQScsXG4gICAgICAgICAgICAgICAgJ3VzZXIvbG9nb3V0JyxcbiAgICAgICAgICAgICAgICAndXNlci9sb2dvdXRBbGwnLFxuICAgICAgICAgICAgICAgICd1c2VyL3ByZWZlcmVuY2VzJyxcbiAgICAgICAgICAgICAgICAndXNlci9yZXF1ZXN0RW5hYmxlVEZBJyxcbiAgICAgICAgICAgICAgICAndXNlci9yZXF1ZXN0V2l0aGRyYXdhbCcsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ3B1dCc6IFtcbiAgICAgICAgICAgICAgICAnb3JkZXInLFxuICAgICAgICAgICAgICAgICdvcmRlci9idWxrJyxcbiAgICAgICAgICAgICAgICAndXNlcicsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ2RlbGV0ZSc6IFtcbiAgICAgICAgICAgICAgICAnYXBpS2V5JyxcbiAgICAgICAgICAgICAgICAnb3JkZXInLFxuICAgICAgICAgICAgICAgICdvcmRlci9hbGwnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE1hcmtldHMgKCkge1xuICAgICAgICBsZXQgbWFya2V0cyA9IGF3YWl0IHRoaXMucHVibGljR2V0SW5zdHJ1bWVudEFjdGl2ZSAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGxldCBwID0gMDsgcCA8IG1hcmtldHMubGVuZ3RoOyBwKyspIHtcbiAgICAgICAgICAgIGxldCBtYXJrZXQgPSBtYXJrZXRzW3BdO1xuICAgICAgICAgICAgbGV0IGlkID0gbWFya2V0WydzeW1ib2wnXTtcbiAgICAgICAgICAgIGxldCBiYXNlID0gbWFya2V0Wyd1bmRlcmx5aW5nJ107XG4gICAgICAgICAgICBsZXQgcXVvdGUgPSBtYXJrZXRbJ3F1b3RlQ3VycmVuY3knXTtcbiAgICAgICAgICAgIGxldCBpc0Z1dHVyZXNDb250cmFjdCA9IGlkICE9IChiYXNlICsgcXVvdGUpO1xuICAgICAgICAgICAgYmFzZSA9IHRoaXMuY29tbW9uQ3VycmVuY3lDb2RlIChiYXNlKTtcbiAgICAgICAgICAgIHF1b3RlID0gdGhpcy5jb21tb25DdXJyZW5jeUNvZGUgKHF1b3RlKTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBpc0Z1dHVyZXNDb250cmFjdCA/IGlkIDogKGJhc2UgKyAnLycgKyBxdW90ZSk7XG4gICAgICAgICAgICByZXN1bHQucHVzaCAoe1xuICAgICAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICAgICAgICAgICdzeW1ib2wnOiBzeW1ib2wsXG4gICAgICAgICAgICAgICAgJ2Jhc2UnOiBiYXNlLFxuICAgICAgICAgICAgICAgICdxdW90ZSc6IHF1b3RlLFxuICAgICAgICAgICAgICAgICdpbmZvJzogbWFya2V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlR2V0VXNlck1hcmdpbiAoeyAnY3VycmVuY3knOiAnYWxsJyB9KTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiByZXNwb25zZSB9O1xuICAgICAgICBmb3IgKGxldCBiID0gMDsgYiA8IHJlc3BvbnNlLmxlbmd0aDsgYisrKSB7XG4gICAgICAgICAgICBsZXQgYmFsYW5jZSA9IHJlc3BvbnNlW2JdO1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gYmFsYW5jZVsnY3VycmVuY3knXS50b1VwcGVyQ2FzZSAoKTtcbiAgICAgICAgICAgIGN1cnJlbmN5ID0gdGhpcy5jb21tb25DdXJyZW5jeUNvZGUgKGN1cnJlbmN5KTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogYmFsYW5jZVsnYXZhaWxhYmxlTWFyZ2luJ10sXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogYmFsYW5jZVsnYW1vdW50J10sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGN1cnJlbmN5ID09ICdCVEMnKSB7XG4gICAgICAgICAgICAgICAgYWNjb3VudFsnZnJlZSddID0gYWNjb3VudFsnZnJlZSddICogMC4wMDAwMDAwMTtcbiAgICAgICAgICAgICAgICBhY2NvdW50Wyd0b3RhbCddID0gYWNjb3VudFsndG90YWwnXSAqIDAuMDAwMDAwMDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhY2NvdW50Wyd1c2VkJ10gPSBhY2NvdW50Wyd0b3RhbCddIC0gYWNjb3VudFsnZnJlZSddO1xuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IGF3YWl0IHRoaXMucHVibGljR2V0T3JkZXJCb29rTDIgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnc3ltYm9sJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdiaWRzJzogW10sXG4gICAgICAgICAgICAnYXNrcyc6IFtdLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgZm9yIChsZXQgbyA9IDA7IG8gPCBvcmRlcmJvb2subGVuZ3RoOyBvKyspIHtcbiAgICAgICAgICAgIGxldCBvcmRlciA9IG9yZGVyYm9va1tvXTtcbiAgICAgICAgICAgIGxldCBzaWRlID0gKG9yZGVyWydzaWRlJ10gPT0gJ1NlbGwnKSA/ICdhc2tzJyA6ICdiaWRzJztcbiAgICAgICAgICAgIGxldCBhbW91bnQgPSBvcmRlclsnc2l6ZSddO1xuICAgICAgICAgICAgbGV0IHByaWNlID0gb3JkZXJbJ3ByaWNlJ107XG4gICAgICAgICAgICByZXN1bHRbc2lkZV0ucHVzaCAoWyBwcmljZSwgYW1vdW50IF0pO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdFsnYmlkcyddID0gdGhpcy5zb3J0QnkgKHJlc3VsdFsnYmlkcyddLCAwLCB0cnVlKTtcbiAgICAgICAgcmVzdWx0Wydhc2tzJ10gPSB0aGlzLnNvcnRCeSAocmVzdWx0Wydhc2tzJ10sIDApO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXF1ZXN0ID0ge1xuICAgICAgICAgICAgJ3N5bWJvbCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgICAgICAnYmluU2l6ZSc6ICcxZCcsXG4gICAgICAgICAgICAncGFydGlhbCc6IHRydWUsXG4gICAgICAgICAgICAnY291bnQnOiAxLFxuICAgICAgICAgICAgJ3JldmVyc2UnOiB0cnVlLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgcXVvdGVzID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRRdW90ZUJ1Y2tldGVkIChyZXF1ZXN0KTtcbiAgICAgICAgbGV0IHF1b3Rlc0xlbmd0aCA9IHF1b3Rlcy5sZW5ndGg7XG4gICAgICAgIGxldCBxdW90ZSA9IHF1b3Rlc1txdW90ZXNMZW5ndGggLSAxXTtcbiAgICAgICAgbGV0IHRpY2tlcnMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFRyYWRlQnVja2V0ZWQgKHJlcXVlc3QpO1xuICAgICAgICBsZXQgdGlja2VyID0gdGlja2Vyc1swXTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydoaWdoJ10pLFxuICAgICAgICAgICAgJ2xvdyc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbG93J10pLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHF1b3RlWydiaWRQcmljZSddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0IChxdW90ZVsnYXNrUHJpY2UnXSksXG4gICAgICAgICAgICAndndhcCc6IHBhcnNlRmxvYXQgKHRpY2tlclsndndhcCddKSxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogcGFyc2VGbG9hdCAodGlja2VyWydjbG9zZSddKSxcbiAgICAgICAgICAgICdmaXJzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsYXN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaG9tZU5vdGlvbmFsJ10pLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWydmb3JlaWduTm90aW9uYWwnXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0VHJhZGUgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnc3ltYm9sJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdzeW1ib2wnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICAgICAgJ3NpZGUnOiB0aGlzLmNhcGl0YWxpemUgKHNpZGUpLFxuICAgICAgICAgICAgJ29yZGVyUXR5JzogYW1vdW50LFxuICAgICAgICAgICAgJ29yZFR5cGUnOiB0aGlzLmNhcGl0YWxpemUgKHR5cGUpLFxuICAgICAgICB9O1xuICAgICAgICBpZiAodHlwZSA9PSAnbGltaXQnKVxuICAgICAgICAgICAgb3JkZXJbJ3JhdGUnXSA9IHByaWNlO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0T3JkZXIgKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ2lkJzogcmVzcG9uc2VbJ29yZGVySUQnXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVEZWxldGVPcmRlciAoeyAnb3JkZXJJRCc6IGlkIH0pO1xuICAgIH0sXG5cbiAgICByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCBxdWVyeSA9ICcvYXBpLycgKyB0aGlzLnZlcnNpb24gKyAnLycgKyBwYXRoO1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHBhcmFtcykubGVuZ3RoKVxuICAgICAgICAgICAgcXVlcnkgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHBhcmFtcyk7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgcXVlcnk7XG4gICAgICAgIGlmIChhcGkgPT0gJ3ByaXZhdGUnKSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpLnRvU3RyaW5nICgpO1xuICAgICAgICAgICAgaWYgKG1ldGhvZCA9PSAnUE9TVCcpXG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChwYXJhbXMpLmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgYm9keSA9IHRoaXMuanNvbiAocGFyYW1zKTtcbiAgICAgICAgICAgIGxldCByZXF1ZXN0ID0gWyBtZXRob2QsIHF1ZXJ5LCBub25jZSwgYm9keSB8fCAnJ10uam9pbiAoJycpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICdhcGktbm9uY2UnOiBub25jZSxcbiAgICAgICAgICAgICAgICAnYXBpLWtleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgICAgICdhcGktc2lnbmF0dXJlJzogdGhpcy5obWFjICh0aGlzLmVuY29kZSAocmVxdWVzdCksIHRoaXMuZW5jb2RlICh0aGlzLnNlY3JldCkpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGJpdHNvID0ge1xuXG4gICAgJ2lkJzogJ2JpdHNvJyxcbiAgICAnbmFtZSc6ICdCaXRzbycsXG4gICAgJ2NvdW50cmllcyc6ICdNWCcsIC8vIE1leGljb1xuICAgICdyYXRlTGltaXQnOiAyMDAwLCAvLyAzMCByZXF1ZXN0cyBwZXIgbWludXRlXG4gICAgJ3ZlcnNpb24nOiAndjMnLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2MzM1LTcxNWNlN2FhLTVlZDUtMTFlNy04OGE4LTE3M2EyN2JiMzBmZS5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vYXBpLmJpdHNvLmNvbScsXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly9iaXRzby5jb20nLFxuICAgICAgICAnZG9jJzogJ2h0dHBzOi8vYml0c28uY29tL2FwaV9pbmZvJyxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdhdmFpbGFibGVfYm9va3MnLFxuICAgICAgICAgICAgICAgICd0aWNrZXInLFxuICAgICAgICAgICAgICAgICdvcmRlcl9ib29rJyxcbiAgICAgICAgICAgICAgICAndHJhZGVzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnYWNjb3VudF9zdGF0dXMnLFxuICAgICAgICAgICAgICAgICdiYWxhbmNlJyxcbiAgICAgICAgICAgICAgICAnZmVlcycsXG4gICAgICAgICAgICAgICAgJ2Z1bmRpbmdzJyxcbiAgICAgICAgICAgICAgICAnZnVuZGluZ3Mve2ZpZH0nLFxuICAgICAgICAgICAgICAgICdmdW5kaW5nX2Rlc3RpbmF0aW9uJyxcbiAgICAgICAgICAgICAgICAna3ljX2RvY3VtZW50cycsXG4gICAgICAgICAgICAgICAgJ2xlZGdlcicsXG4gICAgICAgICAgICAgICAgJ2xlZGdlci90cmFkZXMnLFxuICAgICAgICAgICAgICAgICdsZWRnZXIvZmVlcycsXG4gICAgICAgICAgICAgICAgJ2xlZGdlci9mdW5kaW5ncycsXG4gICAgICAgICAgICAgICAgJ2xlZGdlci93aXRoZHJhd2FscycsXG4gICAgICAgICAgICAgICAgJ214X2JhbmtfY29kZXMnLFxuICAgICAgICAgICAgICAgICdvcGVuX29yZGVycycsXG4gICAgICAgICAgICAgICAgJ29yZGVyX3RyYWRlcy97b2lkfScsXG4gICAgICAgICAgICAgICAgJ29yZGVycy97b2lkfScsXG4gICAgICAgICAgICAgICAgJ3VzZXJfdHJhZGVzJyxcbiAgICAgICAgICAgICAgICAndXNlcl90cmFkZXMve3RpZH0nLFxuICAgICAgICAgICAgICAgICd3aXRoZHJhd2Fscy8nLFxuICAgICAgICAgICAgICAgICd3aXRoZHJhd2Fscy97d2lkfScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2JpdGNvaW5fd2l0aGRyYXdhbCcsXG4gICAgICAgICAgICAgICAgJ2RlYml0X2NhcmRfd2l0aGRyYXdhbCcsXG4gICAgICAgICAgICAgICAgJ2V0aGVyX3dpdGhkcmF3YWwnLFxuICAgICAgICAgICAgICAgICdvcmRlcnMnLFxuICAgICAgICAgICAgICAgICdwaG9uZV9udW1iZXInLFxuICAgICAgICAgICAgICAgICdwaG9uZV92ZXJpZmljYXRpb24nLFxuICAgICAgICAgICAgICAgICdwaG9uZV93aXRoZHJhd2FsJyxcbiAgICAgICAgICAgICAgICAnc3BlaV93aXRoZHJhd2FsJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAnZGVsZXRlJzogW1xuICAgICAgICAgICAgICAgICdvcmRlcnMve29pZH0nLFxuICAgICAgICAgICAgICAgICdvcmRlcnMvYWxsJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hNYXJrZXRzICgpIHtcbiAgICAgICAgbGV0IG1hcmtldHMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldEF2YWlsYWJsZUJvb2tzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgbWFya2V0c1sncGF5bG9hZCddLmxlbmd0aDsgcCsrKSB7XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gbWFya2V0c1sncGF5bG9hZCddW3BdO1xuICAgICAgICAgICAgbGV0IGlkID0gbWFya2V0Wydib29rJ107XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gaWQudG9VcHBlckNhc2UgKCkucmVwbGFjZSAoJ18nLCAnLycpO1xuICAgICAgICAgICAgbGV0IFsgYmFzZSwgcXVvdGUgXSA9IHN5bWJvbC5zcGxpdCAoJy8nKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoICh7XG4gICAgICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgICAgICAgICAgJ3N5bWJvbCc6IHN5bWJvbCxcbiAgICAgICAgICAgICAgICAnYmFzZSc6IGJhc2UsXG4gICAgICAgICAgICAgICAgJ3F1b3RlJzogcXVvdGUsXG4gICAgICAgICAgICAgICAgJ2luZm8nOiBtYXJrZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVHZXRCYWxhbmNlICgpO1xuICAgICAgICBsZXQgYmFsYW5jZXMgPSByZXNwb25zZVsncGF5bG9hZCddWydiYWxhbmNlcyddO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IHJlc3BvbnNlIH07XG4gICAgICAgIGZvciAobGV0IGIgPSAwOyBiIDwgYmFsYW5jZXMubGVuZ3RoOyBiKyspIHtcbiAgICAgICAgICAgIGxldCBiYWxhbmNlID0gYmFsYW5jZXNbYl07XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBiYWxhbmNlWydjdXJyZW5jeSddLnRvVXBwZXJDYXNlICgpO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiBwYXJzZUZsb2F0IChiYWxhbmNlWydhdmFpbGFibGUnXSksXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiBwYXJzZUZsb2F0IChiYWxhbmNlWydsb2NrZWQnXSksXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogcGFyc2VGbG9hdCAoYmFsYW5jZVsndG90YWwnXSksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRPcmRlckJvb2sgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnYm9vayc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgb3JkZXJib29rID0gcmVzcG9uc2VbJ3BheWxvYWQnXTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMucGFyc2U4NjAxIChvcmRlcmJvb2tbJ3VwZGF0ZWRfYXQnXSk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IFtdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaWRlcyA9IFsgJ2JpZHMnLCAnYXNrcycgXTtcbiAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBzaWRlcy5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1tzXTtcbiAgICAgICAgICAgIGxldCBvcmRlcnMgPSBvcmRlcmJvb2tbc2lkZV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBvcmRlciA9IG9yZGVyc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgcHJpY2UgPSBwYXJzZUZsb2F0IChvcmRlclsncHJpY2UnXSk7XG4gICAgICAgICAgICAgICAgbGV0IGFtb3VudCA9IHBhcnNlRmxvYXQgKG9yZGVyWydhbW91bnQnXSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3NpZGVdLnB1c2ggKFsgcHJpY2UsIGFtb3VudCBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRUaWNrZXIgKHtcbiAgICAgICAgICAgICdib29rJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aWNrZXIgPSByZXNwb25zZVsncGF5bG9hZCddO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5wYXJzZTg2MDEgKHRpY2tlclsnY3JlYXRlZF9hdCddKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2JpZCddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2FzayddKSxcbiAgICAgICAgICAgICd2d2FwJzogcGFyc2VGbG9hdCAodGlja2VyWyd2d2FwJ10pLFxuICAgICAgICAgICAgJ29wZW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbHVtZSddKSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wdWJsaWNHZXRUcmFkZXMgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnYm9vayc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAnYm9vayc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgICAgICAnc2lkZSc6IHNpZGUsXG4gICAgICAgICAgICAndHlwZSc6IHR5cGUsXG4gICAgICAgICAgICAnbWFqb3InOiBhbW91bnQsXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlID09ICdsaW1pdCcpXG4gICAgICAgICAgICBvcmRlclsncHJpY2UnXSA9IHByaWNlO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0T3JkZXJzICh0aGlzLmV4dGVuZCAob3JkZXIsIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXNwb25zZSxcbiAgICAgICAgICAgICdpZCc6IHJlc3BvbnNlWydwYXlsb2FkJ11bJ29pZCddLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJpdmF0ZURlbGV0ZU9yZGVycyAoeyAnb2lkJzogaWQgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gJy8nICsgdGhpcy52ZXJzaW9uICsgJy8nICsgdGhpcy5pbXBsb2RlUGFyYW1zIChwYXRoLCBwYXJhbXMpO1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArIHF1ZXJ5O1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHBhcmFtcykubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocGFyYW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyAocGFyYW1zKS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgYm9keSA9IHRoaXMuanNvbiAocGFyYW1zKTtcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCkudG9TdHJpbmcgKCk7XG4gICAgICAgICAgICBsZXQgcmVxdWVzdCA9IFsgbm9uY2UsIG1ldGhvZCwgcXVlcnksIGJvZHkgfHwgJycgXS5qb2luICgnJyk7XG4gICAgICAgICAgICBsZXQgc2lnbmF0dXJlID0gdGhpcy5obWFjICh0aGlzLmVuY29kZSAocmVxdWVzdCksIHRoaXMuZW5jb2RlICh0aGlzLnNlY3JldCkpO1xuICAgICAgICAgICAgbGV0IGF1dGggPSB0aGlzLmFwaUtleSArICc6JyArIG5vbmNlICsgJzonICsgc2lnbmF0dXJlO1xuICAgICAgICAgICAgaGVhZGVycyA9IHsgJ0F1dGhvcml6YXRpb24nOiBcIkJpdHNvIFwiICsgYXV0aCB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdzdWNjZXNzJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIGlmIChyZXNwb25zZVsnc3VjY2VzcyddKVxuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgYml0c3RhbXAgPSB7XG5cbiAgICAnaWQnOiAnYml0c3RhbXAnLFxuICAgICduYW1lJzogJ0JpdHN0YW1wJyxcbiAgICAnY291bnRyaWVzJzogJ0dCJyxcbiAgICAncmF0ZUxpbWl0JzogMTAwMCxcbiAgICAndmVyc2lvbic6ICd2MicsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc3ODYzNzctOGM4YWI1N2UtNWZlOS0xMWU3LThlYTQtMmIwNWI2YmNjZWVjLmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly93d3cuYml0c3RhbXAubmV0L2FwaScsXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly93d3cuYml0c3RhbXAubmV0JyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL3d3dy5iaXRzdGFtcC5uZXQvYXBpJyxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdvcmRlcl9ib29rL3tpZH0vJyxcbiAgICAgICAgICAgICAgICAndGlja2VyX2hvdXIve2lkfS8nLFxuICAgICAgICAgICAgICAgICd0aWNrZXIve2lkfS8nLFxuICAgICAgICAgICAgICAgICd0cmFuc2FjdGlvbnMve2lkfS8nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnYmFsYW5jZS8nLFxuICAgICAgICAgICAgICAgICdiYWxhbmNlL3tpZH0vJyxcbiAgICAgICAgICAgICAgICAnYnV5L3tpZH0vJyxcbiAgICAgICAgICAgICAgICAnYnV5L21hcmtldC97aWR9LycsXG4gICAgICAgICAgICAgICAgJ2NhbmNlbF9vcmRlci8nLFxuICAgICAgICAgICAgICAgICdsaXF1aWRhdGlvbl9hZGRyZXNzL2luZm8vJyxcbiAgICAgICAgICAgICAgICAnbGlxdWlkYXRpb25fYWRkcmVzcy9uZXcvJyxcbiAgICAgICAgICAgICAgICAnb3Blbl9vcmRlcnMvYWxsLycsXG4gICAgICAgICAgICAgICAgJ29wZW5fb3JkZXJzL3tpZH0vJyxcbiAgICAgICAgICAgICAgICAnc2VsbC97aWR9LycsXG4gICAgICAgICAgICAgICAgJ3NlbGwvbWFya2V0L3tpZH0vJyxcbiAgICAgICAgICAgICAgICAndHJhbnNmZXItZnJvbS1tYWluLycsXG4gICAgICAgICAgICAgICAgJ3RyYW5zZmVyLXRvLW1haW4vJyxcbiAgICAgICAgICAgICAgICAndXNlcl90cmFuc2FjdGlvbnMvJyxcbiAgICAgICAgICAgICAgICAndXNlcl90cmFuc2FjdGlvbnMve2lkfS8nLFxuICAgICAgICAgICAgICAgICd3aXRoZHJhd2FsL2NhbmNlbC8nLFxuICAgICAgICAgICAgICAgICd3aXRoZHJhd2FsL29wZW4vJyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXdhbC9zdGF0dXMvJyxcbiAgICAgICAgICAgICAgICAneHJwX2FkZHJlc3MvJyxcbiAgICAgICAgICAgICAgICAneHJwX3dpdGhkcmF3YWwvJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9VU0QnOiB7ICdpZCc6ICdidGN1c2QnLCAnc3ltYm9sJzogJ0JUQy9VU0QnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnVVNEJyB9LFxuICAgICAgICAnQlRDL0VVUic6IHsgJ2lkJzogJ2J0Y2V1cicsICdzeW1ib2wnOiAnQlRDL0VVUicsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdFVVInIH0sXG4gICAgICAgICdFVVIvVVNEJzogeyAnaWQnOiAnZXVydXNkJywgJ3N5bWJvbCc6ICdFVVIvVVNEJywgJ2Jhc2UnOiAnRVVSJywgJ3F1b3RlJzogJ1VTRCcgfSxcbiAgICAgICAgJ1hSUC9VU0QnOiB7ICdpZCc6ICd4cnB1c2QnLCAnc3ltYm9sJzogJ1hSUC9VU0QnLCAnYmFzZSc6ICdYUlAnLCAncXVvdGUnOiAnVVNEJyB9LFxuICAgICAgICAnWFJQL0VVUic6IHsgJ2lkJzogJ3hycGV1cicsICdzeW1ib2wnOiAnWFJQL0VVUicsICdiYXNlJzogJ1hSUCcsICdxdW90ZSc6ICdFVVInIH0sXG4gICAgICAgICdYUlAvQlRDJzogeyAnaWQnOiAneHJwYnRjJywgJ3N5bWJvbCc6ICdYUlAvQlRDJywgJ2Jhc2UnOiAnWFJQJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ0xUQy9VU0QnOiB7ICdpZCc6ICdsdGN1c2QnLCAnc3ltYm9sJzogJ0xUQy9VU0QnLCAnYmFzZSc6ICdMVEMnLCAncXVvdGUnOiAnVVNEJyB9LFxuICAgICAgICAnTFRDL0VVUic6IHsgJ2lkJzogJ2x0Y2V1cicsICdzeW1ib2wnOiAnTFRDL0VVUicsICdiYXNlJzogJ0xUQycsICdxdW90ZSc6ICdFVVInIH0sXG4gICAgICAgICdMVEMvQlRDJzogeyAnaWQnOiAnbHRjYnRjJywgJ3N5bWJvbCc6ICdMVEMvQlRDJywgJ2Jhc2UnOiAnTFRDJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ0VUSC9VU0QnOiB7ICdpZCc6ICdldGh1c2QnLCAnc3ltYm9sJzogJ0VUSC9VU0QnLCAnYmFzZSc6ICdFVEgnLCAncXVvdGUnOiAnVVNEJyB9LFxuICAgICAgICAnRVRIL0VVUic6IHsgJ2lkJzogJ2V0aGV1cicsICdzeW1ib2wnOiAnRVRIL0VVUicsICdiYXNlJzogJ0VUSCcsICdxdW90ZSc6ICdFVVInIH0sXG4gICAgICAgICdFVEgvQlRDJzogeyAnaWQnOiAnZXRoYnRjJywgJ3N5bWJvbCc6ICdFVEgvQlRDJywgJ2Jhc2UnOiAnRVRIJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IGF3YWl0IHRoaXMucHVibGljR2V0T3JkZXJCb29rSWQgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnaWQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHBhcnNlSW50IChvcmRlcmJvb2tbJ3RpbWVzdGFtcCddKSAqIDEwMDA7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IFtdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaWRlcyA9IFsgJ2JpZHMnLCAnYXNrcycgXTtcbiAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBzaWRlcy5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1tzXTtcbiAgICAgICAgICAgIGxldCBvcmRlcnMgPSBvcmRlcmJvb2tbc2lkZV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBvcmRlciA9IG9yZGVyc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgcHJpY2UgPSBwYXJzZUZsb2F0IChvcmRlclswXSk7XG4gICAgICAgICAgICAgICAgbGV0IGFtb3VudCA9IHBhcnNlRmxvYXQgKG9yZGVyWzFdKTtcbiAgICAgICAgICAgICAgICByZXN1bHRbc2lkZV0ucHVzaCAoWyBwcmljZSwgYW1vdW50IF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgbGV0IHRpY2tlciA9IGF3YWl0IHRoaXMucHVibGljR2V0VGlja2VySWQgKHtcbiAgICAgICAgICAgICdpZCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gcGFyc2VJbnQgKHRpY2tlclsndGltZXN0YW1wJ10pICogMTAwMDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2JpZCddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2FzayddKSxcbiAgICAgICAgICAgICd2d2FwJzogcGFyc2VGbG9hdCAodGlja2VyWyd2d2FwJ10pLFxuICAgICAgICAgICAgJ29wZW4nOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ29wZW4nXSksXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdCddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbHVtZSddKSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBwYXJzZVRyYWRlICh0cmFkZSwgbWFya2V0KSB7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSBwYXJzZUludCAodHJhZGVbJ2RhdGUnXSk7XG4gICAgICAgIGxldCBzaWRlID0gKHRyYWRlWyd0eXBlJ10gPT0gMCkgPyAnYnV5JyA6ICdzZWxsJztcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpZCc6IHRyYWRlWyd0aWQnXS50b1N0cmluZyAoKSxcbiAgICAgICAgICAgICdpbmZvJzogdHJhZGUsXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ3N5bWJvbCc6IG1hcmtldFsnc3ltYm9sJ10sXG4gICAgICAgICAgICAndHlwZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdzaWRlJzogc2lkZSxcbiAgICAgICAgICAgICdwcmljZSc6IHBhcnNlRmxvYXQgKHRyYWRlWydwcmljZSddKSxcbiAgICAgICAgICAgICdhbW91bnQnOiBwYXJzZUZsb2F0ICh0cmFkZVsnYW1vdW50J10pLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgbSA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFRyYW5zYWN0aW9uc0lkICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2lkJzogbVsnaWQnXSxcbiAgICAgICAgICAgICd0aW1lJzogJ21pbnV0ZScsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVRyYWRlcyAocmVzcG9uc2UsIG0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBsZXQgYmFsYW5jZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RCYWxhbmNlICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGJhbGFuY2UgfTtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCB0aGlzLmN1cnJlbmNpZXMubGVuZ3RoOyBjKyspIHtcbiAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IHRoaXMuY3VycmVuY2llc1tjXTtcbiAgICAgICAgICAgIGxldCBsb3dlcmNhc2UgPSBjdXJyZW5jeS50b0xvd2VyQ2FzZSAoKTtcbiAgICAgICAgICAgIGxldCB0b3RhbCA9IGxvd2VyY2FzZSArICdfYmFsYW5jZSc7XG4gICAgICAgICAgICBsZXQgZnJlZSA9IGxvd2VyY2FzZSArICdfYXZhaWxhYmxlJztcbiAgICAgICAgICAgIGxldCB1c2VkID0gbG93ZXJjYXNlICsgJ19yZXNlcnZlZCc7XG4gICAgICAgICAgICBsZXQgYWNjb3VudCA9IHtcbiAgICAgICAgICAgICAgICAnZnJlZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAndXNlZCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAndG90YWwnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGZyZWUgaW4gYmFsYW5jZSlcbiAgICAgICAgICAgICAgICBhY2NvdW50WydmcmVlJ10gPSBwYXJzZUZsb2F0IChiYWxhbmNlW2ZyZWVdKTtcbiAgICAgICAgICAgIGlmICh1c2VkIGluIGJhbGFuY2UpXG4gICAgICAgICAgICAgICAgYWNjb3VudFsndXNlZCddID0gcGFyc2VGbG9hdCAoYmFsYW5jZVt1c2VkXSk7XG4gICAgICAgICAgICBpZiAodG90YWwgaW4gYmFsYW5jZSlcbiAgICAgICAgICAgICAgICBhY2NvdW50Wyd0b3RhbCddID0gcGFyc2VGbG9hdCAoYmFsYW5jZVt0b3RhbF0pO1xuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IG1ldGhvZCA9ICdwcml2YXRlUG9zdCcgKyB0aGlzLmNhcGl0YWxpemUgKHNpZGUpO1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAnaWQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IGFtb3VudCxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHR5cGUgPT0gJ21hcmtldCcpXG4gICAgICAgICAgICBtZXRob2QgKz0gJ01hcmtldCc7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIG9yZGVyWydwcmljZSddID0gcHJpY2U7XG4gICAgICAgIG1ldGhvZCArPSAnSWQnO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzW21ldGhvZF0gKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ2lkJzogcmVzcG9uc2VbJ2lkJ10sXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdENhbmNlbE9yZGVyICh7ICdpZCc6IGlkIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgJy8nICsgdGhpcy52ZXJzaW9uICsgJy8nICsgdGhpcy5pbXBsb2RlUGFyYW1zIChwYXRoLCBwYXJhbXMpO1xuICAgICAgICBsZXQgcXVlcnkgPSB0aGlzLm9taXQgKHBhcmFtcywgdGhpcy5leHRyYWN0UGFyYW1zIChwYXRoKSk7XG4gICAgICAgIGlmIChhcGkgPT0gJ3B1YmxpYycpIHtcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyAocXVlcnkpLmxlbmd0aClcbiAgICAgICAgICAgICAgICB1cmwgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHF1ZXJ5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghdGhpcy51aWQpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEF1dGhlbnRpY2F0aW9uRXJyb3IgKHRoaXMuaWQgKyAnIHJlcXVpcmVzIGAnICsgdGhpcy5pZCArICcudWlkYCBwcm9wZXJ0eSBmb3IgYXV0aGVudGljYXRpb24nKTtcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCkudG9TdHJpbmcgKCk7XG4gICAgICAgICAgICBsZXQgYXV0aCA9IG5vbmNlICsgdGhpcy51aWQgKyB0aGlzLmFwaUtleTtcbiAgICAgICAgICAgIGxldCBzaWduYXR1cmUgPSB0aGlzLmVuY29kZSAodGhpcy5obWFjICh0aGlzLmVuY29kZSAoYXV0aCksIHRoaXMuZW5jb2RlICh0aGlzLnNlY3JldCkpKTtcbiAgICAgICAgICAgIHF1ZXJ5ID0gdGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICAgICAna2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ3NpZ25hdHVyZSc6IHNpZ25hdHVyZS50b1VwcGVyQ2FzZSAoKSxcbiAgICAgICAgICAgICAgICAnbm9uY2UnOiBub25jZSxcbiAgICAgICAgICAgIH0sIHF1ZXJ5KTtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtTGVuZ3RoJzogYm9keS5sZW5ndGgudG9TdHJpbmcgKCksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdzdGF0dXMnIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlWydzdGF0dXMnXSA9PSAnZXJyb3InKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgYml0dHJleCA9IHtcblxuICAgICdpZCc6ICdiaXR0cmV4JyxcbiAgICAnbmFtZSc6ICdCaXR0cmV4JyxcbiAgICAnY291bnRyaWVzJzogJ1VTJyxcbiAgICAndmVyc2lvbic6ICd2MS4xJyxcbiAgICAncmF0ZUxpbWl0JzogMTUwMCxcbiAgICAnaGFzRmV0Y2hUaWNrZXJzJzogdHJ1ZSxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yNzc2NjM1Mi1jZjBiM2MyNi01ZWQ1LTExZTctODJiNy1mMzgyNmI3YTk3ZDguanBnJyxcbiAgICAgICAgJ2FwaSc6ICdodHRwczovL2JpdHRyZXguY29tL2FwaScsXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly9iaXR0cmV4LmNvbScsXG4gICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAnaHR0cHM6Ly9iaXR0cmV4LmNvbS9Ib21lL0FwaScsXG4gICAgICAgICAgICAnaHR0cHM6Ly93d3cubnBtanMub3JnL3BhY2thZ2Uvbm9kZS5iaXR0cmV4LmFwaScsXG4gICAgICAgIF0sXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnY3VycmVuY2llcycsXG4gICAgICAgICAgICAgICAgJ21hcmtldGhpc3RvcnknLFxuICAgICAgICAgICAgICAgICdtYXJrZXRzJyxcbiAgICAgICAgICAgICAgICAnbWFya2V0c3VtbWFyaWVzJyxcbiAgICAgICAgICAgICAgICAnbWFya2V0c3VtbWFyeScsXG4gICAgICAgICAgICAgICAgJ29yZGVyYm9vaycsXG4gICAgICAgICAgICAgICAgJ3RpY2tlcicsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAnYWNjb3VudCc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ2JhbGFuY2UnLFxuICAgICAgICAgICAgICAgICdiYWxhbmNlcycsXG4gICAgICAgICAgICAgICAgJ2RlcG9zaXRhZGRyZXNzJyxcbiAgICAgICAgICAgICAgICAnZGVwb3NpdGhpc3RvcnknLFxuICAgICAgICAgICAgICAgICdvcmRlcicsXG4gICAgICAgICAgICAgICAgJ29yZGVyaGlzdG9yeScsXG4gICAgICAgICAgICAgICAgJ3dpdGhkcmF3YWxoaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXcnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ21hcmtldCc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ2J1eWxpbWl0JyxcbiAgICAgICAgICAgICAgICAnYnV5bWFya2V0JyxcbiAgICAgICAgICAgICAgICAnY2FuY2VsJyxcbiAgICAgICAgICAgICAgICAnb3Blbm9yZGVycycsXG4gICAgICAgICAgICAgICAgJ3NlbGxsaW1pdCcsXG4gICAgICAgICAgICAgICAgJ3NlbGxtYXJrZXQnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hNYXJrZXRzICgpIHtcbiAgICAgICAgbGV0IG1hcmtldHMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgcCA9IDA7IHAgPCBtYXJrZXRzWydyZXN1bHQnXS5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IG1hcmtldHNbJ3Jlc3VsdCddW3BdO1xuICAgICAgICAgICAgbGV0IGlkID0gbWFya2V0WydNYXJrZXROYW1lJ107XG4gICAgICAgICAgICBsZXQgYmFzZSA9IG1hcmtldFsnTWFya2V0Q3VycmVuY3knXTtcbiAgICAgICAgICAgIGxldCBxdW90ZSA9IG1hcmtldFsnQmFzZUN1cnJlbmN5J107XG4gICAgICAgICAgICBiYXNlID0gdGhpcy5jb21tb25DdXJyZW5jeUNvZGUgKGJhc2UpO1xuICAgICAgICAgICAgcXVvdGUgPSB0aGlzLmNvbW1vbkN1cnJlbmN5Q29kZSAocXVvdGUpO1xuICAgICAgICAgICAgbGV0IHN5bWJvbCA9IGJhc2UgKyAnLycgKyBxdW90ZTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoICh7XG4gICAgICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgICAgICAgICAgJ3N5bWJvbCc6IHN5bWJvbCxcbiAgICAgICAgICAgICAgICAnYmFzZSc6IGJhc2UsXG4gICAgICAgICAgICAgICAgJ3F1b3RlJzogcXVvdGUsXG4gICAgICAgICAgICAgICAgJ2luZm8nOiBtYXJrZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmFjY291bnRHZXRCYWxhbmNlcyAoKTtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gcmVzcG9uc2VbJ3Jlc3VsdCddO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGJhbGFuY2VzIH07XG4gICAgICAgIGxldCBpbmRleGVkID0gdGhpcy5pbmRleEJ5IChiYWxhbmNlcywgJ0N1cnJlbmN5Jyk7XG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgdGhpcy5jdXJyZW5jaWVzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSB0aGlzLmN1cnJlbmNpZXNbY107XG4gICAgICAgICAgICBsZXQgYWNjb3VudCA9IHtcbiAgICAgICAgICAgICAgICAnZnJlZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAndXNlZCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAndG90YWwnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGN1cnJlbmN5IGluIGluZGV4ZWQpIHtcbiAgICAgICAgICAgICAgICBsZXQgYmFsYW5jZSA9IGluZGV4ZWRbY3VycmVuY3ldO1xuICAgICAgICAgICAgICAgIGFjY291bnRbJ2ZyZWUnXSA9IGJhbGFuY2VbJ0F2YWlsYWJsZSddO1xuICAgICAgICAgICAgICAgIGFjY291bnRbJ3VzZWQnXSA9IGJhbGFuY2VbJ0JhbGFuY2UnXSAtIGJhbGFuY2VbJ0F2YWlsYWJsZSddO1xuICAgICAgICAgICAgICAgIGFjY291bnRbJ3RvdGFsJ10gPSBiYWxhbmNlWydCYWxhbmNlJ107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBwYXJzZUJpZEFzayAoYmlkYXNrKSB7XG4gICAgICAgIGxldCBwcmljZSA9IHBhcnNlRmxvYXQgKGJpZGFza1snUmF0ZSddKTtcbiAgICAgICAgbGV0IGFtb3VudCA9IHBhcnNlRmxvYXQgKGJpZGFza1snUXVhbnRpdHknXSk7XG4gICAgICAgIHJldHVybiBbIHByaWNlLCBhbW91bnQgXTtcbiAgICB9LFxuXG4gICAgcGFyc2VCaWRBc2tzIChiaWRhc2tzKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiaWRhc2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCAodGhpcy5wYXJzZUJpZEFzayAoYmlkYXNrc1tpXSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0T3JkZXJib29rICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ21hcmtldCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgICAgICAndHlwZSc6ICdib3RoJyxcbiAgICAgICAgICAgICdkZXB0aCc6IDUwLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IHJlc3BvbnNlWydyZXN1bHQnXTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSB7ICdiaWRzJzogJ2J1eScsICdhc2tzJzogJ3NlbGwnIH07XG4gICAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMgKHNpZGVzKTtcbiAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBrZXlzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICBsZXQga2V5ID0ga2V5c1trXTtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNba2V5XTtcbiAgICAgICAgICAgIHJlc3VsdFtrZXldID0gdGhpcy5wYXJzZUJpZEFza3MgKG9yZGVyYm9va1tzaWRlXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgcGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KSB7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLnBhcnNlODYwMSAodGlja2VyWydUaW1lU3RhbXAnXSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ0hpZ2gnXSksXG4gICAgICAgICAgICAnbG93JzogcGFyc2VGbG9hdCAodGlja2VyWydMb3cnXSksXG4gICAgICAgICAgICAnYmlkJzogcGFyc2VGbG9hdCAodGlja2VyWydCaWQnXSksXG4gICAgICAgICAgICAnYXNrJzogcGFyc2VGbG9hdCAodGlja2VyWydBc2snXSksXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ0xhc3QnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWydCYXNlVm9sdW1lJ10pLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWydWb2x1bWUnXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXJzICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRNYXJrZXRzdW1tYXJpZXMgKCk7XG4gICAgICAgIGxldCB0aWNrZXJzID0gcmVzcG9uc2VbJ3Jlc3VsdCddO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge307XG4gICAgICAgIGZvciAobGV0IHQgPSAwOyB0IDwgdGlja2Vycy5sZW5ndGg7IHQrKykge1xuICAgICAgICAgICAgbGV0IHRpY2tlciA9IHRpY2tlcnNbdF07XG4gICAgICAgICAgICBsZXQgaWQgPSB0aWNrZXJbJ01hcmtldE5hbWUnXTtcbiAgICAgICAgICAgIGxldCBtYXJrZXQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gaWQ7XG4gICAgICAgICAgICBpZiAoaWQgaW4gdGhpcy5tYXJrZXRzX2J5X2lkKSB7XG4gICAgICAgICAgICAgICAgbWFya2V0ID0gdGhpcy5tYXJrZXRzX2J5X2lkW2lkXTtcbiAgICAgICAgICAgICAgICBzeW1ib2wgPSBtYXJrZXRbJ3N5bWJvbCddO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsZXQgWyBxdW90ZSwgYmFzZSBdID0gaWQuc3BsaXQgKCctJyk7XG4gICAgICAgICAgICAgICAgYmFzZSA9IHRoaXMuY29tbW9uQ3VycmVuY3lDb2RlIChiYXNlKTtcbiAgICAgICAgICAgICAgICBxdW90ZSA9IHRoaXMuY29tbW9uQ3VycmVuY3lDb2RlIChxdW90ZSk7XG4gICAgICAgICAgICAgICAgc3ltYm9sID0gYmFzZSArICcvJyArIHF1b3RlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0W3N5bWJvbF0gPSB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIG1hcmtldCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgbSA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldE1hcmtldHN1bW1hcnkgKHtcbiAgICAgICAgICAgICdtYXJrZXQnOiBtWydpZCddLFxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IHRpY2tlciA9IHJlc3BvbnNlWydyZXN1bHQnXVswXTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VUaWNrZXIgKHRpY2tlciwgbSk7XG4gICAgfSxcblxuICAgIHBhcnNlVHJhZGUgKHRyYWRlLCBtYXJrZXQgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMucGFyc2U4NjAxICh0cmFkZVsnVGltZVN0YW1wJ10pO1xuICAgICAgICBsZXQgc2lkZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHRyYWRlWydPcmRlclR5cGUnXSA9PSAnQlVZJykge1xuICAgICAgICAgICAgc2lkZSA9ICdidXknO1xuICAgICAgICB9IGVsc2UgaWYgKHRyYWRlWydPcmRlclR5cGUnXSA9PSAnU0VMTCcpIHtcbiAgICAgICAgICAgIHNpZGUgPSAnc2VsbCc7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHR5cGUgPSB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaWQnOiB0cmFkZVsnSWQnXS50b1N0cmluZyAoKSxcbiAgICAgICAgICAgICdpbmZvJzogdHJhZGUsXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ3N5bWJvbCc6IG1hcmtldFsnc3ltYm9sJ10sXG4gICAgICAgICAgICAndHlwZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdzaWRlJzogc2lkZSxcbiAgICAgICAgICAgICdwcmljZSc6IHRyYWRlWydQcmljZSddLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IHRyYWRlWydRdWFudGl0eSddLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgbSA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldE1hcmtldGhpc3RvcnkgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnbWFya2V0JzogbVsnaWQnXSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlVHJhZGVzIChyZXNwb25zZVsncmVzdWx0J10sIG0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE15T3Blbk9yZGVycyAobWFya2V0ID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgbSA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0UmV0dXJuT3Blbk9yZGVycyAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdjdXJyZW5jeVBhaXInOiBtWydpZCddLFxuICAgICAgICB9KSk7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlT3JkZXJzIChyZXNwb25zZVsncmVzdWx0J10sIG1hcmtldCk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBtZXRob2QgPSAnbWFya2V0R2V0JyArIHRoaXMuY2FwaXRhbGl6ZSAoc2lkZSkgKyB0eXBlO1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAnbWFya2V0JzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICdxdWFudGl0eSc6IGFtb3VudCxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHR5cGUgPT0gJ2xpbWl0JylcbiAgICAgICAgICAgIG9yZGVyWydyYXRlJ10gPSBwcmljZTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpc1ttZXRob2RdICh0aGlzLmV4dGVuZCAob3JkZXIsIHBhcmFtcykpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXNwb25zZSxcbiAgICAgICAgICAgICdpZCc6IHJlc3BvbnNlWydyZXN1bHQnXVsndXVpZCddLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFya2V0R2V0Q2FuY2VsICh7ICd1dWlkJzogaWQgfSk7XG4gICAgfSxcblxuICAgIHBhcnNlT3JkZXIgKG9yZGVyLCBtYXJrZXQgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHNpZGUgPSAob3JkZXJbJ1R5cGUnXSA9PSAnTElNSVRfQlVZJykgPyAnYnV5JyA6ICdzZWxsJztcbiAgICAgICAgbGV0IG9wZW4gPSBvcmRlclsnSXNPcGVuJ107XG4gICAgICAgIGxldCBjYW5jZWxlZCA9IG9yZGVyWydDYW5jZWxJbml0aWF0ZWQnXTtcbiAgICAgICAgbGV0IHN0YXR1cyA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKG9wZW4pIHtcbiAgICAgICAgICAgIHN0YXR1cyA9ICdvcGVuJztcbiAgICAgICAgfSBlbHNlIGlmIChjYW5jZWxlZCkge1xuICAgICAgICAgICAgc3RhdHVzID0gJ2NhbmNlbGVkJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0YXR1cyA9ICdjbG9zZWQnO1xuICAgICAgICB9XG4gICAgICAgIGxldCBzeW1ib2wgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChtYXJrZXQpIHtcbiAgICAgICAgICAgIHN5bWJvbCA9IG1hcmtldFsnc3ltYm9sJ107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgZXhjaGFuZ2UgPSBvcmRlclsnRXhjaGFuZ2UnXTtcbiAgICAgICAgICAgIGlmIChleGNoYW5nZSBpbiB0aGlzLm1hcmtldHNfYnlfaWQpIHtcbiAgICAgICAgICAgICAgICBtYXJrZXQgPSB0aGlzLm1hcmtldHNfYnlfaWRbZXhjaGFuZ2VdO1xuICAgICAgICAgICAgICAgIHN5bWJvbCA9IFsnc3ltYm9sJ107XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMucGFyc2U4NjAxIChvcmRlclsnT3BlbmVkJ10pO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2luZm8nOiBvcmRlcixcbiAgICAgICAgICAgICdpZCc6IG9yZGVyWydPcmRlclV1aWQnXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgJ3R5cGUnOiAnbGltaXQnLFxuICAgICAgICAgICAgJ3NpZGUnOiBzaWRlLFxuICAgICAgICAgICAgJ3ByaWNlJzogb3JkZXJbJ1ByaWNlUGVyVW5pdCddLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IG9yZGVyWydRdWFudGl0eSddLFxuICAgICAgICAgICAgJ3JlbWFpbmluZyc6IG9yZGVyWydRdWFudGl0eVJlbWFpbmluZyddLFxuICAgICAgICAgICAgJ3N0YXR1cyc6IHN0YXR1cyxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlciAoaWQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5hY2NvdW50R2V0T3JkZXIgKHsgJ3V1aWQnOiBpZCB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VPcmRlciAocmVzcG9uc2VbJ3Jlc3VsdCddKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArICcvJyArIHRoaXMudmVyc2lvbiArICcvJztcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgdXJsICs9IGFwaSArICcvJyArIG1ldGhvZC50b0xvd2VyQ2FzZSAoKSArIHBhdGg7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHBhcmFtcykubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocGFyYW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCk7XG4gICAgICAgICAgICB1cmwgKz0gYXBpICsgJy8nO1xuICAgICAgICAgICAgaWYgKCgoYXBpID09ICdhY2NvdW50JykgJiYgKHBhdGggIT0gJ3dpdGhkcmF3JykpIHx8IChwYXRoID09ICdvcGVub3JkZXJzJykpXG4gICAgICAgICAgICAgICAgdXJsICs9IG1ldGhvZC50b0xvd2VyQ2FzZSAoKTtcbiAgICAgICAgICAgIHVybCArPSBwYXRoICsgJz8nICsgdGhpcy51cmxlbmNvZGUgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAgICAgJ25vbmNlJzogbm9uY2UsXG4gICAgICAgICAgICAgICAgJ2FwaWtleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgICAgICBsZXQgc2lnbmF0dXJlID0gdGhpcy5obWFjICh0aGlzLmVuY29kZSAodXJsKSwgdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSwgJ3NoYTUxMicpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHsgJ2FwaXNpZ24nOiBzaWduYXR1cmUgfTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgICAgIGlmICgnc3VjY2VzcycgaW4gcmVzcG9uc2UpXG4gICAgICAgICAgICBpZiAocmVzcG9uc2VbJ3N1Y2Nlc3MnXSlcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGJsaW5rdHJhZGUgPSB7XG5cbiAgICAnaWQnOiAnYmxpbmt0cmFkZScsXG4gICAgJ25hbWUnOiAnQmxpbmtUcmFkZScsXG4gICAgJ2NvdW50cmllcyc6IFsgJ1VTJywgJ1ZFJywgJ1ZOJywgJ0JSJywgJ1BLJywgJ0NMJyBdLFxuICAgICdyYXRlTGltaXQnOiAxMDAwLFxuICAgICd2ZXJzaW9uJzogJ3YxJyxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yNzk5MDk2OC03NWQ5Yzg4NC02NDcwLTExZTctOTA3My00Njc1NmM4ZTdlOGMuanBnJyxcbiAgICAgICAgJ2FwaSc6IHtcbiAgICAgICAgICAgICdwdWJsaWMnOiAnaHR0cHM6Ly9hcGkuYmxpbmt0cmFkZS5jb20vYXBpJyxcbiAgICAgICAgICAgICdwcml2YXRlJzogJ2h0dHBzOi8vYXBpLmJsaW5rdHJhZGUuY29tL3RhcGknLFxuICAgICAgICB9LFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vYmxpbmt0cmFkZS5jb20nLFxuICAgICAgICAnZG9jJzogJ2h0dHBzOi8vYmxpbmt0cmFkZS5jb20vZG9jcycsXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAne2N1cnJlbmN5fS90aWNrZXInLCAgICAvLyA/Y3J5cHRvX2N1cnJlbmN5PUJUQ1xuICAgICAgICAgICAgICAgICd7Y3VycmVuY3l9L29yZGVyYm9vaycsIC8vID9jcnlwdG9fY3VycmVuY3k9QlRDXG4gICAgICAgICAgICAgICAgJ3tjdXJyZW5jeX0vdHJhZGVzJywgICAgLy8gP2NyeXB0b19jdXJyZW5jeT1CVEMmc2luY2U9PFRJTUVTVEFNUD4mbGltaXQ9PE5VTUJFUj5cbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ0QnLCAgIC8vIG9yZGVyXG4gICAgICAgICAgICAgICAgJ0YnLCAgIC8vIGNhbmNlbCBvcmRlclxuICAgICAgICAgICAgICAgICdVMicsICAvLyBiYWxhbmNlXG4gICAgICAgICAgICAgICAgJ1U0JywgIC8vIG15IG9yZGVyc1xuICAgICAgICAgICAgICAgICdVNicsICAvLyB3aXRoZHJhd1xuICAgICAgICAgICAgICAgICdVMTgnLCAvLyBkZXBvc2l0XG4gICAgICAgICAgICAgICAgJ1UyNCcsIC8vIGNvbmZpcm0gd2l0aGRyYXdhbFxuICAgICAgICAgICAgICAgICdVMjYnLCAvLyBsaXN0IHdpdGhkcmF3YWxzXG4gICAgICAgICAgICAgICAgJ1UzMCcsIC8vIGxpc3QgZGVwb3NpdHNcbiAgICAgICAgICAgICAgICAnVTM0JywgLy8gbGVkZ2VyXG4gICAgICAgICAgICAgICAgJ1U3MCcsIC8vIGNhbmNlbCB3aXRoZHJhd2FsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgJ21hcmtldHMnOiB7XG4gICAgICAgICdCVEMvVkVGJzogeyAnaWQnOiAnQlRDVkVGJywgJ3N5bWJvbCc6ICdCVEMvVkVGJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ1ZFRicsICdicm9rZXJJZCc6IDEsICdicm9rZXInOiAnU3VyQml0Y29pbicgfSxcbiAgICAgICAgJ0JUQy9WTkQnOiB7ICdpZCc6ICdCVENWTkQnLCAnc3ltYm9sJzogJ0JUQy9WTkQnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnVk5EJywgJ2Jyb2tlcklkJzogMywgJ2Jyb2tlcic6ICdWQlRDJyB9LFxuICAgICAgICAnQlRDL0JSTCc6IHsgJ2lkJzogJ0JUQ0JSTCcsICdzeW1ib2wnOiAnQlRDL0JSTCcsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdCUkwnLCAnYnJva2VySWQnOiA0LCAnYnJva2VyJzogJ0ZveEJpdCcgfSxcbiAgICAgICAgJ0JUQy9QS1InOiB7ICdpZCc6ICdCVENQS1InLCAnc3ltYm9sJzogJ0JUQy9QS1InLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnUEtSJywgJ2Jyb2tlcklkJzogOCwgJ2Jyb2tlcic6ICdVcmR1Qml0JyB9LFxuICAgICAgICAnQlRDL0NMUCc6IHsgJ2lkJzogJ0JUQ0NMUCcsICdzeW1ib2wnOiAnQlRDL0NMUCcsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdDTFAnLCAnYnJva2VySWQnOiA5LCAnYnJva2VyJzogJ0NoaWxlQml0JyB9LFxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdFUyICh7XG4gICAgICAgICAgICAnQmFsYW5jZVJlcUlEJzogdGhpcy5ub25jZSAoKSxcbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSBhd2FpdCB0aGlzLnB1YmxpY0dldEN1cnJlbmN5T3JkZXJib29rICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2N1cnJlbmN5JzogcFsncXVvdGUnXSxcbiAgICAgICAgICAgICdjcnlwdG9fY3VycmVuY3knOiBwWydiYXNlJ10sXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IFtdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaWRlcyA9IFsgJ2JpZHMnLCAnYXNrcycgXTtcbiAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBzaWRlcy5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1tzXTtcbiAgICAgICAgICAgIGxldCBvcmRlcnMgPSBvcmRlcmJvb2tbc2lkZV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBvcmRlciA9IG9yZGVyc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgcHJpY2UgPSBwYXJzZUZsb2F0IChvcmRlclswXSk7XG4gICAgICAgICAgICAgICAgbGV0IGFtb3VudCA9IHBhcnNlRmxvYXQgKG9yZGVyWzFdKTtcbiAgICAgICAgICAgICAgICByZXN1bHRbc2lkZV0ucHVzaCAoWyBwcmljZSwgYW1vdW50IF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHRpY2tlciA9IGF3YWl0IHRoaXMucHVibGljR2V0Q3VycmVuY3lUaWNrZXIgKHtcbiAgICAgICAgICAgICdjdXJyZW5jeSc6IHBbJ3F1b3RlJ10sXG4gICAgICAgICAgICAnY3J5cHRvX2N1cnJlbmN5JzogcFsnYmFzZSddLFxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgbG93ZXJjYXNlUXVvdGUgPSBwWydxdW90ZSddLnRvTG93ZXJDYXNlICgpO1xuICAgICAgICBsZXQgcXVvdGVWb2x1bWUgPSAndm9sXycgKyBsb3dlcmNhc2VRdW90ZTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2J1eSddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3NlbGwnXSksXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xhc3QnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWyd2b2wnXSksXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbcXVvdGVWb2x1bWVdKSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICByZXR1cm4gdGhpcy5wdWJsaWNHZXRDdXJyZW5jeVRyYWRlcyAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdjdXJyZW5jeSc6IHBbJ3F1b3RlJ10sXG4gICAgICAgICAgICAnY3J5cHRvX2N1cnJlbmN5JzogcFsnYmFzZSddLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgaWYgKHR5cGUgPT0gJ21hcmtldCcpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgYWxsb3dzIGxpbWl0IG9yZGVycyBvbmx5Jyk7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdDbE9yZElEJzogdGhpcy5ub25jZSAoKSxcbiAgICAgICAgICAgICdTeW1ib2wnOiBwWydpZCddLFxuICAgICAgICAgICAgJ1NpZGUnOiB0aGlzLmNhcGl0YWxpemUgKHNpZGUpLFxuICAgICAgICAgICAgJ09yZFR5cGUnOiAyLFxuICAgICAgICAgICAgJ1ByaWNlJzogcHJpY2UsXG4gICAgICAgICAgICAnT3JkZXJRdHknOiBhbW91bnQsXG4gICAgICAgICAgICAnQnJva2VySUQnOiBwWydicm9rZXJJZCddLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0RCAodGhpcy5leHRlbmQgKG9yZGVyLCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnT3JkZXJJRCddLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0RiAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdDbE9yZElEJzogaWQsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddW2FwaV0gKyAnLycgKyB0aGlzLnZlcnNpb24gKyAnLycgKyB0aGlzLmltcGxvZGVQYXJhbXMgKHBhdGgsIHBhcmFtcyk7XG4gICAgICAgIGxldCBxdWVyeSA9IHRoaXMub21pdCAocGFyYW1zLCB0aGlzLmV4dHJhY3RQYXJhbXMgKHBhdGgpKTtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChxdWVyeSkubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG5vbmNlID0gdGhpcy5ub25jZSAoKS50b1N0cmluZyAoKTtcbiAgICAgICAgICAgIGxldCByZXF1ZXN0ID0gdGhpcy5leHRlbmQgKHsgJ01zZ1R5cGUnOiBwYXRoIH0sIHF1ZXJ5KTtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLmpzb24gKHJlcXVlc3QpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQVBJS2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ05vbmNlJzogbm9uY2UsXG4gICAgICAgICAgICAgICAgJ1NpZ25hdHVyZSc6IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKG5vbmNlKSwgdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSksXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBibDNwID0ge1xuXG4gICAgJ2lkJzogJ2JsM3AnLFxuICAgICduYW1lJzogJ0JMM1AnLFxuICAgICdjb3VudHJpZXMnOiBbICdOTCcsICdFVScgXSwgLy8gTmV0aGVybGFuZHMsIEVVXG4gICAgJ3JhdGVMaW1pdCc6IDEwMDAsXG4gICAgJ3ZlcnNpb24nOiAnMScsXG4gICAgJ2NvbW1lbnQnOiAnQW4gZXhjaGFuZ2UgbWFya2V0IGJ5IEJpdG9uaWNOTCcsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjg1MDE3NTItNjBjMjFiODItNmZlYi0xMWU3LTgxOGItMDU1ZWU2ZDBlNzU0LmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly9hcGkuYmwzcC5ldScsXG4gICAgICAgICd3d3cnOiBbXG4gICAgICAgICAgICAnaHR0cHM6Ly9ibDNwLmV1JyxcbiAgICAgICAgICAgICdodHRwczovL2JpdG9uaWMubmwnLFxuICAgICAgICBdLFxuICAgICAgICAnZG9jJzogW1xuICAgICAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS9CaXRvbmljTkwvYmwzcC1hcGkvdHJlZS9tYXN0ZXIvZG9jcycsXG4gICAgICAgICAgICAnaHR0cHM6Ly9ibDNwLmV1L2FwaScsXG4gICAgICAgICAgICAnaHR0cHM6Ly9iaXRvbmljLm5sL2VuL2FwaScsXG4gICAgICAgIF0sXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAne21hcmtldH0vdGlja2VyJyxcbiAgICAgICAgICAgICAgICAne21hcmtldH0vb3JkZXJib29rJyxcbiAgICAgICAgICAgICAgICAne21hcmtldH0vdHJhZGVzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ3ttYXJrZXR9L21vbmV5L2RlcHRoL2Z1bGwnLFxuICAgICAgICAgICAgICAgICd7bWFya2V0fS9tb25leS9vcmRlci9hZGQnLFxuICAgICAgICAgICAgICAgICd7bWFya2V0fS9tb25leS9vcmRlci9jYW5jZWwnLFxuICAgICAgICAgICAgICAgICd7bWFya2V0fS9tb25leS9vcmRlci9yZXN1bHQnLFxuICAgICAgICAgICAgICAgICd7bWFya2V0fS9tb25leS9vcmRlcnMnLFxuICAgICAgICAgICAgICAgICd7bWFya2V0fS9tb25leS9vcmRlcnMvaGlzdG9yeScsXG4gICAgICAgICAgICAgICAgJ3ttYXJrZXR9L21vbmV5L3RyYWRlcy9mZXRjaCcsXG4gICAgICAgICAgICAgICAgJ0dFTk1LVC9tb25leS9pbmZvJyxcbiAgICAgICAgICAgICAgICAnR0VOTUtUL21vbmV5L2RlcG9zaXRfYWRkcmVzcycsXG4gICAgICAgICAgICAgICAgJ0dFTk1LVC9tb25leS9uZXdfZGVwb3NpdF9hZGRyZXNzJyxcbiAgICAgICAgICAgICAgICAnR0VOTUtUL21vbmV5L3dhbGxldC9oaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAnR0VOTUtUL21vbmV5L3dpdGhkcmF3JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9FVVInOiB7ICdpZCc6ICdCVENFVVInLCAnc3ltYm9sJzogJ0JUQy9FVVInLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnRVVSJyB9LFxuICAgICAgICAnTFRDL0VVUic6IHsgJ2lkJzogJ0xUQ0VVUicsICdzeW1ib2wnOiAnTFRDL0VVUicsICdiYXNlJzogJ0xUQycsICdxdW90ZSc6ICdFVVInIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RHRU5NS1RNb25leUluZm8gKCk7XG4gICAgICAgIGxldCBkYXRhID0gcmVzcG9uc2VbJ2RhdGEnXTtcbiAgICAgICAgbGV0IGJhbGFuY2UgPSBkYXRhWyd3YWxsZXRzJ107XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogZGF0YSB9O1xuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IHRoaXMuY3VycmVuY2llcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gdGhpcy5jdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChjdXJyZW5jeSBpbiBiYWxhbmNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCdhdmFpbGFibGUnIGluIGJhbGFuY2VbY3VycmVuY3ldKSB7XG4gICAgICAgICAgICAgICAgICAgIGFjY291bnRbJ2ZyZWUnXSA9IHBhcnNlRmxvYXQgKGJhbGFuY2VbY3VycmVuY3ldWydhdmFpbGFibGUnXVsndmFsdWUnXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGN1cnJlbmN5IGluIGJhbGFuY2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoJ2JhbGFuY2UnIGluIGJhbGFuY2VbY3VycmVuY3ldKSB7XG4gICAgICAgICAgICAgICAgICAgIGFjY291bnRbJ3RvdGFsJ10gPSBwYXJzZUZsb2F0IChiYWxhbmNlW2N1cnJlbmN5XVsnYmFsYW5jZSddWyd2YWx1ZSddKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYWNjb3VudFsndG90YWwnXSkge1xuICAgICAgICAgICAgICAgIGlmIChhY2NvdW50WydmcmVlJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgYWNjb3VudFsndXNlZCddID0gYWNjb3VudFsndG90YWwnXSAtIGFjY291bnRbJ2ZyZWUnXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldE1hcmtldE9yZGVyYm9vayAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdtYXJrZXQnOiBwWydpZCddLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IHJlc3BvbnNlWydkYXRhJ107XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdiaWRzJzogW10sXG4gICAgICAgICAgICAnYXNrcyc6IFtdLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHNpZGVzID0gWyAnYmlkcycsICdhc2tzJyBdO1xuICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IHNpZGVzLmxlbmd0aDsgcysrKSB7XG4gICAgICAgICAgICBsZXQgc2lkZSA9IHNpZGVzW3NdO1xuICAgICAgICAgICAgbGV0IG9yZGVycyA9IG9yZGVyYm9va1tzaWRlXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9yZGVyID0gb3JkZXJzW2ldO1xuICAgICAgICAgICAgICAgIGxldCBwcmljZSA9IG9yZGVyWydwcmljZV9pbnQnXSAvIDEwMDAwMDtcbiAgICAgICAgICAgICAgICBsZXQgYW1vdW50ID0gb3JkZXJbJ2Ftb3VudF9pbnQnXSAvIDEwMDAwMDAwMDtcbiAgICAgICAgICAgICAgICByZXN1bHRbc2lkZV0ucHVzaCAoWyBwcmljZSwgYW1vdW50IF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgbGV0IHRpY2tlciA9IGF3YWl0IHRoaXMucHVibGljR2V0TWFya2V0VGlja2VyICh7XG4gICAgICAgICAgICAnbWFya2V0JzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aWNrZXJbJ3RpbWVzdGFtcCddICogMTAwMDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2JpZCddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2FzayddKSxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdCddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbHVtZSddWycyNGgnXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0TWFya2V0VHJhZGVzICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ21hcmtldCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAnbWFya2V0JzogcFsnaWQnXSxcbiAgICAgICAgICAgICdhbW91bnRfaW50JzogYW1vdW50LFxuICAgICAgICAgICAgJ2ZlZV9jdXJyZW5jeSc6IHBbJ3F1b3RlJ10sXG4gICAgICAgICAgICAndHlwZSc6IChzaWRlID09ICdidXknKSA/ICdiaWQnIDogJ2FzaycsXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlID09ICdsaW1pdCcpXG4gICAgICAgICAgICBvcmRlclsncHJpY2VfaW50J10gPSBwcmljZTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdE1hcmtldE1vbmV5T3JkZXJBZGQgKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ2lkJzogcmVzcG9uc2VbJ29yZGVyX2lkJ10udG9TdHJpbmcgKCksXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdE1hcmtldE1vbmV5T3JkZXJDYW5jZWwgKHsgJ29yZGVyX2lkJzogaWQgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHJlcXVlc3QgPSB0aGlzLmltcGxvZGVQYXJhbXMgKHBhdGgsIHBhcmFtcyk7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgJy8nICsgdGhpcy52ZXJzaW9uICsgJy8nICsgcmVxdWVzdDtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5vbWl0IChwYXJhbXMsIHRoaXMuZXh0cmFjdFBhcmFtcyAocGF0aCkpO1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHF1ZXJ5KS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChxdWVyeSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpO1xuICAgICAgICAgICAgYm9keSA9IHRoaXMudXJsZW5jb2RlICh0aGlzLmV4dGVuZCAoeyAnbm9uY2UnOiBub25jZSB9LCBxdWVyeSkpO1xuICAgICAgICAgICAgbGV0IHNlY3JldCA9IHRoaXMuYmFzZTY0VG9CaW5hcnkgKHRoaXMuc2VjcmV0KTtcbiAgICAgICAgICAgIGxldCBhdXRoID0gcmVxdWVzdCArIFwiXFwwXCIgKyBib2R5O1xuICAgICAgICAgICAgbGV0IHNpZ25hdHVyZSA9IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKGF1dGgpLCBzZWNyZXQsICdzaGE1MTInLCAnYmFzZTY0Jyk7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICAgICAgICAnQ29udGVudC1MZW5ndGgnOiBib2R5Lmxlbmd0aCxcbiAgICAgICAgICAgICAgICAnUmVzdC1LZXknOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgICAgICAnUmVzdC1TaWduJzogc2lnbmF0dXJlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGJ0Y2NoaW5hID0ge1xuXG4gICAgJ2lkJzogJ2J0Y2NoaW5hJyxcbiAgICAnbmFtZSc6ICdCVENDaGluYScsXG4gICAgJ2NvdW50cmllcyc6ICdDTicsXG4gICAgJ3JhdGVMaW1pdCc6IDE1MDAsXG4gICAgJ3ZlcnNpb24nOiAndjEnLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2MzY4LTQ2NWIzMjg2LTVlZDYtMTFlNy05YTExLTBmNjQ2N2UxZDgyYi5qcGcnLFxuICAgICAgICAnYXBpJzoge1xuICAgICAgICAgICAgJ3B1YmxpYyc6ICdodHRwczovL2RhdGEuYnRjY2hpbmEuY29tL2RhdGEnLFxuICAgICAgICAgICAgJ3ByaXZhdGUnOiAnaHR0cHM6Ly9hcGkuYnRjY2hpbmEuY29tL2FwaV90cmFkZV92MS5waHAnLFxuICAgICAgICB9LFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vd3d3LmJ0Y2NoaW5hLmNvbScsXG4gICAgICAgICdkb2MnOiAnaHR0cHM6Ly93d3cuYnRjY2hpbmEuY29tL2FwaWRvY3MnXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnaGlzdG9yeWRhdGEnLFxuICAgICAgICAgICAgICAgICdvcmRlcmJvb2snLFxuICAgICAgICAgICAgICAgICd0aWNrZXInLFxuICAgICAgICAgICAgICAgICd0cmFkZXMnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnQnV5SWNlYmVyZ09yZGVyJyxcbiAgICAgICAgICAgICAgICAnQnV5T3JkZXInLFxuICAgICAgICAgICAgICAgICdCdXlPcmRlcjInLFxuICAgICAgICAgICAgICAgICdCdXlTdG9wT3JkZXInLFxuICAgICAgICAgICAgICAgICdDYW5jZWxJY2ViZXJnT3JkZXInLFxuICAgICAgICAgICAgICAgICdDYW5jZWxPcmRlcicsXG4gICAgICAgICAgICAgICAgJ0NhbmNlbFN0b3BPcmRlcicsXG4gICAgICAgICAgICAgICAgJ0dldEFjY291bnRJbmZvJyxcbiAgICAgICAgICAgICAgICAnZ2V0QXJjaGl2ZWRPcmRlcicsXG4gICAgICAgICAgICAgICAgJ2dldEFyY2hpdmVkT3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnR2V0RGVwb3NpdHMnLFxuICAgICAgICAgICAgICAgICdHZXRJY2ViZXJnT3JkZXInLFxuICAgICAgICAgICAgICAgICdHZXRJY2ViZXJnT3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnR2V0TWFya2V0RGVwdGgnLFxuICAgICAgICAgICAgICAgICdHZXRNYXJrZXREZXB0aDInLFxuICAgICAgICAgICAgICAgICdHZXRPcmRlcicsXG4gICAgICAgICAgICAgICAgJ0dldE9yZGVycycsXG4gICAgICAgICAgICAgICAgJ0dldFN0b3BPcmRlcicsXG4gICAgICAgICAgICAgICAgJ0dldFN0b3BPcmRlcnMnLFxuICAgICAgICAgICAgICAgICdHZXRUcmFuc2FjdGlvbnMnLFxuICAgICAgICAgICAgICAgICdHZXRXaXRoZHJhd2FsJyxcbiAgICAgICAgICAgICAgICAnR2V0V2l0aGRyYXdhbHMnLFxuICAgICAgICAgICAgICAgICdSZXF1ZXN0V2l0aGRyYXdhbCcsXG4gICAgICAgICAgICAgICAgJ1NlbGxJY2ViZXJnT3JkZXInLFxuICAgICAgICAgICAgICAgICdTZWxsT3JkZXInLFxuICAgICAgICAgICAgICAgICdTZWxsT3JkZXIyJyxcbiAgICAgICAgICAgICAgICAnU2VsbFN0b3BPcmRlcicsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE1hcmtldHMgKCkge1xuICAgICAgICBsZXQgbWFya2V0cyA9IGF3YWl0IHRoaXMucHVibGljR2V0VGlja2VyICh7XG4gICAgICAgICAgICAnbWFya2V0JzogJ2FsbCcsXG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMgKG1hcmtldHMpO1xuICAgICAgICBmb3IgKGxldCBwID0gMDsgcCA8IGtleXMubGVuZ3RoOyBwKyspIHtcbiAgICAgICAgICAgIGxldCBrZXkgPSBrZXlzW3BdO1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IG1hcmtldHNba2V5XTtcbiAgICAgICAgICAgIGxldCBwYXJ0cyA9IGtleS5zcGxpdCAoJ18nKTtcbiAgICAgICAgICAgIGxldCBpZCA9IHBhcnRzWzFdO1xuICAgICAgICAgICAgbGV0IGJhc2UgPSBpZC5zbGljZSAoMCwgMyk7XG4gICAgICAgICAgICBsZXQgcXVvdGUgPSBpZC5zbGljZSAoMywgNik7XG4gICAgICAgICAgICBiYXNlID0gYmFzZS50b1VwcGVyQ2FzZSAoKTtcbiAgICAgICAgICAgIHF1b3RlID0gcXVvdGUudG9VcHBlckNhc2UgKCk7XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gYmFzZSArICcvJyArIHF1b3RlO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2ggKHtcbiAgICAgICAgICAgICAgICAnaWQnOiBpZCxcbiAgICAgICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgICAgICdiYXNlJzogYmFzZSxcbiAgICAgICAgICAgICAgICAncXVvdGUnOiBxdW90ZSxcbiAgICAgICAgICAgICAgICAnaW5mbyc6IG1hcmtldCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RHZXRBY2NvdW50SW5mbyAoKTtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gcmVzcG9uc2VbJ3Jlc3VsdCddO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGJhbGFuY2VzIH07XG5cbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCB0aGlzLmN1cnJlbmNpZXMubGVuZ3RoOyBjKyspIHtcbiAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IHRoaXMuY3VycmVuY2llc1tjXTtcbiAgICAgICAgICAgIGxldCBsb3dlcmNhc2UgPSBjdXJyZW5jeS50b0xvd2VyQ2FzZSAoKTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd1c2VkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAobG93ZXJjYXNlIGluIGJhbGFuY2VzWydiYWxhbmNlJ10pXG4gICAgICAgICAgICAgICAgYWNjb3VudFsndG90YWwnXSA9IHBhcnNlRmxvYXQgKGJhbGFuY2VzWydiYWxhbmNlJ11bbG93ZXJjYXNlXVsnYW1vdW50J10pO1xuICAgICAgICAgICAgaWYgKGxvd2VyY2FzZSBpbiBiYWxhbmNlc1snZnJvemVuJ10pXG4gICAgICAgICAgICAgICAgYWNjb3VudFsndXNlZCddID0gcGFyc2VGbG9hdCAoYmFsYW5jZXNbJ2Zyb3plbiddW2xvd2VyY2FzZV1bJ2Ftb3VudCddKTtcbiAgICAgICAgICAgIGFjY291bnRbJ2ZyZWUnXSA9IGFjY291bnRbJ3RvdGFsJ10gLSBhY2NvdW50Wyd1c2VkJ107XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRPcmRlcmJvb2sgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnbWFya2V0JzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSBvcmRlcmJvb2tbJ2RhdGUnXSAqIDEwMDA7O1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBvcmRlcmJvb2tbJ2JpZHMnXSxcbiAgICAgICAgICAgICdhc2tzJzogb3JkZXJib29rWydhc2tzJ10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICByZXN1bHRbJ2Fza3MnXSA9IHRoaXMuc29ydEJ5IChyZXN1bHRbJ2Fza3MnXSwgMCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHRpY2tlcnMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFRpY2tlciAoe1xuICAgICAgICAgICAgJ21hcmtldCc6IHBbJ2lkJ10sXG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgdGlja2VyID0gdGlja2Vyc1sndGlja2VyJ107XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aWNrZXJbJ2RhdGUnXSAqIDEwMDA7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2hpZ2gnXSksXG4gICAgICAgICAgICAnbG93JzogcGFyc2VGbG9hdCAodGlja2VyWydsb3cnXSksXG4gICAgICAgICAgICAnYmlkJzogcGFyc2VGbG9hdCAodGlja2VyWydidXknXSksXG4gICAgICAgICAgICAnYXNrJzogcGFyc2VGbG9hdCAodGlja2VyWydzZWxsJ10pLFxuICAgICAgICAgICAgJ3Z3YXAnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3Z3YXAnXSksXG4gICAgICAgICAgICAnb3Blbic6IHBhcnNlRmxvYXQgKHRpY2tlclsnb3BlbiddKSxcbiAgICAgICAgICAgICdjbG9zZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsncHJldl9jbG9zZSddKSxcbiAgICAgICAgICAgICdmaXJzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsYXN0JzogcGFyc2VGbG9hdCAodGlja2VyWydsYXN0J10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndm9sJ10pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldFRyYWRlcyAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdtYXJrZXQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IG1ldGhvZCA9ICdwcml2YXRlUG9zdCcgKyB0aGlzLmNhcGl0YWxpemUgKHNpZGUpICsgJ09yZGVyMic7XG4gICAgICAgIGxldCBvcmRlciA9IHt9O1xuICAgICAgICBsZXQgaWQgPSBwWydpZCddLnRvVXBwZXJDYXNlICgpO1xuICAgICAgICBpZiAodHlwZSA9PSAnbWFya2V0Jykge1xuICAgICAgICAgICAgb3JkZXJbJ3BhcmFtcyddID0gWyB1bmRlZmluZWQsIGFtb3VudCwgaWQgXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9yZGVyWydwYXJhbXMnXSA9IFsgcHJpY2UsIGFtb3VudCwgaWQgXTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzW21ldGhvZF0gKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ2lkJzogcmVzcG9uc2VbJ2lkJ10sXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG1hcmtldCA9IHBhcmFtc1snbWFya2V0J107IC8vIFRPRE8gZml4bWVcbiAgICAgICAgcmV0dXJuIHRoaXMucHJpdmF0ZVBvc3RDYW5jZWxPcmRlciAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdwYXJhbXMnOiBbIGlkLCBtYXJrZXQgXSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIG5vbmNlICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWljcm9zZWNvbmRzICgpO1xuICAgIH0sXG5cbiAgICByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddW2FwaV0gKyAnLycgKyBwYXRoO1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHBhcmFtcykubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocGFyYW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5hcGlLZXkpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEF1dGhlbnRpY2F0aW9uRXJyb3IgKHRoaXMuaWQgKyAnIHJlcXVpcmVzIGAnICsgdGhpcy5pZCArICcuYXBpS2V5YCBwcm9wZXJ0eSBmb3IgYXV0aGVudGljYXRpb24nKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5zZWNyZXQpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEF1dGhlbnRpY2F0aW9uRXJyb3IgKHRoaXMuaWQgKyAnIHJlcXVpcmVzIGAnICsgdGhpcy5pZCArICcuc2VjcmV0YCBwcm9wZXJ0eSBmb3IgYXV0aGVudGljYXRpb24nKTtcbiAgICAgICAgICAgIGxldCBwID0gW107XG4gICAgICAgICAgICBpZiAoJ3BhcmFtcycgaW4gcGFyYW1zKVxuICAgICAgICAgICAgICAgIHAgPSBwYXJhbXNbJ3BhcmFtcyddO1xuICAgICAgICAgICAgbGV0IG5vbmNlID0gdGhpcy5ub25jZSAoKTtcbiAgICAgICAgICAgIGxldCByZXF1ZXN0ID0ge1xuICAgICAgICAgICAgICAgICdtZXRob2QnOiBwYXRoLFxuICAgICAgICAgICAgICAgICdpZCc6IG5vbmNlLFxuICAgICAgICAgICAgICAgICdwYXJhbXMnOiBwLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHAgPSBwLmpvaW4gKCcsJyk7XG4gICAgICAgICAgICBib2R5ID0gdGhpcy5qc29uIChyZXF1ZXN0KTtcbiAgICAgICAgICAgIGxldCBxdWVyeSA9IChcbiAgICAgICAgICAgICAgICAndG9uY2U9JyArIG5vbmNlICtcbiAgICAgICAgICAgICAgICAnJmFjY2Vzc2tleT0nICsgdGhpcy5hcGlLZXkgK1xuICAgICAgICAgICAgICAgICcmcmVxdWVzdG1ldGhvZD0nICsgbWV0aG9kLnRvTG93ZXJDYXNlICgpICtcbiAgICAgICAgICAgICAgICAnJmlkPScgKyBub25jZSArXG4gICAgICAgICAgICAgICAgJyZtZXRob2Q9JyArIHBhdGggK1xuICAgICAgICAgICAgICAgICcmcGFyYW1zPScgKyBwXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbGV0IHNpZ25hdHVyZSA9IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKHF1ZXJ5KSwgdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSwgJ3NoYTEnKTtcbiAgICAgICAgICAgIGxldCBhdXRoID0gdGhpcy5hcGlLZXkgKyAnOicgKyBzaWduYXR1cmU7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdDb250ZW50LUxlbmd0aCc6IGJvZHkubGVuZ3RoLFxuICAgICAgICAgICAgICAgICdBdXRob3JpemF0aW9uJzogJ0Jhc2ljICcgKyB0aGlzLnN0cmluZ1RvQmFzZTY0IChhdXRoKSxcbiAgICAgICAgICAgICAgICAnSnNvbi1ScGMtVG9uY2UnOiBub25jZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBidGNlID0ge1xuXG4gICAgJ2lkJzogJ2J0Y2UnLFxuICAgICduYW1lJzogJ0JUQy1lJyxcbiAgICAnY291bnRyaWVzJzogWyAnQkcnLCAnUlUnIF0sIC8vIEJ1bGdhcmlhLCBSdXNzaWFcbiAgICAndmVyc2lvbic6ICczJyxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yNzg0MzIyNS0xYjU3MTUxNC02MTFhLTExZTctOTIwOC0yNjQxYTU2MGI1NjEuanBnJyxcbiAgICAgICAgJ2FwaSc6IHtcbiAgICAgICAgICAgICdwdWJsaWMnOiAnaHR0cHM6Ly9idGMtZS5jb20vYXBpJyxcbiAgICAgICAgICAgICdwcml2YXRlJzogJ2h0dHBzOi8vYnRjLWUuY29tL3RhcGknLFxuICAgICAgICB9LFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vYnRjLWUuY29tJyxcbiAgICAgICAgJ2RvYyc6IFtcbiAgICAgICAgICAgICdodHRwczovL2J0Yy1lLmNvbS9hcGkvMy9kb2NzJyxcbiAgICAgICAgICAgICdodHRwczovL2J0Yy1lLmNvbS90YXBpL2RvY3MnLFxuICAgICAgICBdLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ2luZm8nLFxuICAgICAgICAgICAgICAgICd0aWNrZXIve3BhaXJ9JyxcbiAgICAgICAgICAgICAgICAnZGVwdGgve3BhaXJ9JyxcbiAgICAgICAgICAgICAgICAndHJhZGVzL3twYWlyfScsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAncHJpdmF0ZSc6IHtcbiAgICAgICAgICAgICdwb3N0JzogW1xuICAgICAgICAgICAgICAgICdnZXRJbmZvJyxcbiAgICAgICAgICAgICAgICAnVHJhZGUnLFxuICAgICAgICAgICAgICAgICdBY3RpdmVPcmRlcnMnLFxuICAgICAgICAgICAgICAgICdPcmRlckluZm8nLFxuICAgICAgICAgICAgICAgICdDYW5jZWxPcmRlcicsXG4gICAgICAgICAgICAgICAgJ1RyYWRlSGlzdG9yeScsXG4gICAgICAgICAgICAgICAgJ1RyYW5zSGlzdG9yeScsXG4gICAgICAgICAgICAgICAgJ0NvaW5EZXBvc2l0QWRkcmVzcycsXG4gICAgICAgICAgICAgICAgJ1dpdGhkcmF3Q29pbicsXG4gICAgICAgICAgICAgICAgJ0NyZWF0ZUNvdXBvbicsXG4gICAgICAgICAgICAgICAgJ1JlZGVlbUNvdXBvbicsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoTWFya2V0cyAoKSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0SW5mbyAoKTtcbiAgICAgICAgbGV0IG1hcmtldHMgPSByZXNwb25zZVsncGFpcnMnXTtcbiAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyAobWFya2V0cyk7XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgcCA9IDA7IHAgPCBrZXlzLmxlbmd0aDsgcCsrKSB7XG4gICAgICAgICAgICBsZXQgaWQgPSBrZXlzW3BdO1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IG1hcmtldHNbaWRdO1xuICAgICAgICAgICAgbGV0IFsgYmFzZSwgcXVvdGUgXSA9IGlkLnNwbGl0ICgnXycpO1xuICAgICAgICAgICAgYmFzZSA9IGJhc2UudG9VcHBlckNhc2UgKCk7XG4gICAgICAgICAgICBxdW90ZSA9IHF1b3RlLnRvVXBwZXJDYXNlICgpO1xuICAgICAgICAgICAgaWYgKGJhc2UgPT0gJ0RTSCcpXG4gICAgICAgICAgICAgICAgYmFzZSA9ICdEQVNIJztcbiAgICAgICAgICAgIGJhc2UgPSB0aGlzLmNvbW1vbkN1cnJlbmN5Q29kZSAoYmFzZSk7XG4gICAgICAgICAgICBxdW90ZSA9IHRoaXMuY29tbW9uQ3VycmVuY3lDb2RlIChxdW90ZSk7XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gYmFzZSArICcvJyArIHF1b3RlO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2ggKHtcbiAgICAgICAgICAgICAgICAnaWQnOiBpZCxcbiAgICAgICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgICAgICdiYXNlJzogYmFzZSxcbiAgICAgICAgICAgICAgICAncXVvdGUnOiBxdW90ZSxcbiAgICAgICAgICAgICAgICAnaW5mbyc6IG1hcmtldCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RHZXRJbmZvICgpO1xuICAgICAgICBsZXQgYmFsYW5jZXMgPSByZXNwb25zZVsncmV0dXJuJ107XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogYmFsYW5jZXMgfTtcbiAgICAgICAgbGV0IGZ1bmRzID0gYmFsYW5jZXNbJ2Z1bmRzJ107XG4gICAgICAgIGxldCBjdXJyZW5jaWVzID0gT2JqZWN0LmtleXMgKGZ1bmRzKTtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBjdXJyZW5jaWVzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBjdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IHVwcGVyY2FzZSA9IGN1cnJlbmN5LnRvVXBwZXJDYXNlICgpO1xuICAgICAgICAgICAgLy8gdGhleSBtaXNzcGVsbCBEQVNIIGFzIGRzaCA6L1xuICAgICAgICAgICAgaWYgKHVwcGVyY2FzZSA9PSAnRFNIJylcbiAgICAgICAgICAgICAgICB1cHBlcmNhc2UgPSAnREFTSCc7XG4gICAgICAgICAgICBsZXQgYWNjb3VudCA9IHtcbiAgICAgICAgICAgICAgICAnZnJlZSc6IGZ1bmRzW2N1cnJlbmN5XSxcbiAgICAgICAgICAgICAgICAndXNlZCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAndG90YWwnOiBmdW5kc1tjdXJyZW5jeV0sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVzdWx0W3VwcGVyY2FzZV0gPSBhY2NvdW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0RGVwdGhQYWlyICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ3BhaXInOiBwWydpZCddLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgaWYgKHBbJ2lkJ10gaW4gcmVzcG9uc2UpIHtcbiAgICAgICAgICAgIGxldCBvcmRlcmJvb2sgPSByZXNwb25zZVtwWydpZCddXTtcbiAgICAgICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAgICAgJ2JpZHMnOiBvcmRlcmJvb2tbJ2JpZHMnXSxcbiAgICAgICAgICAgICAgICAnYXNrcyc6IG9yZGVyYm9va1snYXNrcyddLFxuICAgICAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlc3VsdFsnYmlkcyddID0gdGhpcy5zb3J0QnkgKHJlc3VsdFsnYmlkcyddLCAwLCB0cnVlKTtcbiAgICAgICAgICAgIHJlc3VsdFsnYXNrcyddID0gdGhpcy5zb3J0QnkgKHJlc3VsdFsnYXNrcyddLCAwKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyBwWydzeW1ib2wnXSArICcgb3JkZXIgYm9vayBpcyBlbXB0eSBvciBub3QgYXZhaWxhYmxlJyk7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHRpY2tlcnMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFRpY2tlclBhaXIgKHtcbiAgICAgICAgICAgICdwYWlyJzogcFsnaWQnXSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aWNrZXIgPSB0aWNrZXJzW3BbJ2lkJ11dO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGlja2VyWyd1cGRhdGVkJ10gKiAxMDAwO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogdGlja2VyWydoaWdoJ10gPyB0aWNrZXJbJ2hpZ2gnXSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsb3cnOiB0aWNrZXJbJ2xvdyddID8gdGlja2VyWydsb3cnXSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiaWQnOiB0aWNrZXJbJ3NlbGwnXSA/IHRpY2tlclsnYnV5J10gOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXNrJzogdGlja2VyWydidXknXSA/IHRpY2tlclsnc2VsbCddIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3Z3YXAnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnb3Blbic6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjbG9zZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdmaXJzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsYXN0JzogdGlja2VyWydsYXN0J10gPyB0aWNrZXJbJ2xhc3QnXSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdGlja2VyWydhdmcnXSA/IHRpY2tlclsnYXZnJ10gOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHRpY2tlclsndm9sX2N1ciddID8gdGlja2VyWyd2b2xfY3VyJ10gOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiB0aWNrZXJbJ3ZvbCddID8gdGlja2VyWyd2b2wnXSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wdWJsaWNHZXRUcmFkZXNQYWlyICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ3BhaXInOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG9yZGVyID0ge1xuICAgICAgICAgICAgJ3BhaXInOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICAgICAgJ3R5cGUnOiBzaWRlLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IGFtb3VudCxcbiAgICAgICAgICAgICdyYXRlJzogcHJpY2UsXG4gICAgICAgIH07XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RUcmFkZSAodGhpcy5leHRlbmQgKG9yZGVyLCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsncmV0dXJuJ11bJ29yZGVyX2lkJ10sXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdENhbmNlbE9yZGVyICh7ICdvcmRlcl9pZCc6IGlkIH0pO1xuICAgIH0sXG5cbiAgICBwYXJzZU9yZGVyIChvcmRlcikge1xuICAgICAgICBsZXQgc3RhdHVzQ29kZSA9IG9yZGVyWydzdGF0dXMnXTtcbiAgICAgICAgbGV0IHN0YXR1cyA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHN0YXR1c0NvZGUgPT0gMCkge1xuICAgICAgICAgICAgc3RhdHVzID0gJ29wZW4nO1xuICAgICAgICB9IGVsc2UgaWYgKChzdGF0dXNDb2RlID09IDIpIHx8IChzdGF0dXNDb2RlID09IDMpKSB7XG4gICAgICAgICAgICBzdGF0dXMgPSAnY2FuY2VsZWQnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RhdHVzID0gJ2Nsb3NlZCc7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IG9yZGVyWyd0aW1lc3RhbXBfY3JlYXRlZCddICogMTAwMDtcbiAgICAgICAgbGV0IG1hcmtldCA9IHRoaXMubWFya2V0c19ieV9pZFtvcmRlclsncGFpciddXTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdpbmZvJzogb3JkZXIsXG4gICAgICAgICAgICAnaWQnOiBvcmRlclsnaWQnXSxcbiAgICAgICAgICAgICdzeW1ib2wnOiBtYXJrZXRbJ3N5bWJvbCddLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICd0eXBlJzogJ2xpbWl0JyxcbiAgICAgICAgICAgICdzaWRlJzogb3JkZXJbJ3R5cGUnXSxcbiAgICAgICAgICAgICdwcmljZSc6IG9yZGVyWydyYXRlJ10sXG4gICAgICAgICAgICAnYW1vdW50Jzogb3JkZXJbJ3N0YXJ0X2Ftb3VudCddLFxuICAgICAgICAgICAgJ3JlbWFpbmluZyc6IG9yZGVyWydhbW91bnQnXSxcbiAgICAgICAgICAgICdzdGF0dXMnOiBzdGF0dXMsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXIgKGlkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RPcmRlckluZm8gKHsgJ29yZGVyX2lkJzogaWQgfSk7XG4gICAgICAgIGxldCBvcmRlciA9IHJlc3BvbnNlWydyZXR1cm4nXVtpZF07XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlT3JkZXIgKHRoaXMuZXh0ZW5kICh7ICdpZCc6IGlkIH0sIG9yZGVyKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ11bYXBpXSArICcvJyArIHRoaXMudmVyc2lvbiArICcvJyArIHRoaXMuaW1wbG9kZVBhcmFtcyAocGF0aCwgcGFyYW1zKTtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5vbWl0IChwYXJhbXMsIHRoaXMuZXh0cmFjdFBhcmFtcyAocGF0aCkpO1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHF1ZXJ5KS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChxdWVyeSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpO1xuICAgICAgICAgICAgYm9keSA9IHRoaXMudXJsZW5jb2RlICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgICAgICdub25jZSc6IG5vbmNlLFxuICAgICAgICAgICAgICAgICdtZXRob2QnOiBwYXRoLFxuICAgICAgICAgICAgfSwgcXVlcnkpKTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgICAgICAgICdDb250ZW50LUxlbmd0aCc6IGJvZHkubGVuZ3RoLFxuICAgICAgICAgICAgICAgICdLZXknOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgICAgICAnU2lnbic6IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKGJvZHkpLCB0aGlzLmVuY29kZSAodGhpcy5zZWNyZXQpLCAnc2hhNTEyJyksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdzdWNjZXNzJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIGlmICghcmVzcG9uc2VbJ3N1Y2Nlc3MnXSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgJyArIHRoaXMuanNvbiAocmVzcG9uc2UpKTtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGJ0Y21hcmtldHMgPSB7XG5cbiAgICAnaWQnOiAnYnRjbWFya2V0cycsXG4gICAgJ25hbWUnOiAnQlRDIE1hcmtldHMnLFxuICAgICdjb3VudHJpZXMnOiAnQVUnLCAvLyBBdXN0cmFsaWFcbiAgICAncmF0ZUxpbWl0JzogMTAwMCwgLy8gbWFya2V0IGRhdGEgY2FjaGVkIGZvciAxIHNlY29uZCAodHJhZGVzIGNhY2hlZCBmb3IgMiBzZWNvbmRzKVxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI5MTQyOTExLTBlMWFjZmMyLTdkNWMtMTFlNy05OGM0LTA3ZDk1MzJiMjlkNy5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vYXBpLmJ0Y21hcmtldHMubmV0JyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL2J0Y21hcmtldHMubmV0LycsXG4gICAgICAgICdkb2MnOiAnaHR0cHM6Ly9naXRodWIuY29tL0JUQ01hcmtldHMvQVBJJyxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdtYXJrZXQve2lkfS90aWNrJyxcbiAgICAgICAgICAgICAgICAnbWFya2V0L3tpZH0vb3JkZXJib29rJyxcbiAgICAgICAgICAgICAgICAnbWFya2V0L3tpZH0vdHJhZGVzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnYWNjb3VudC9iYWxhbmNlJyxcbiAgICAgICAgICAgICAgICAnYWNjb3VudC97aWR9L3RyYWRpbmdmZWUnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICdwb3N0JzogW1xuICAgICAgICAgICAgICAgICdmdW5kdHJhbnNmZXIvd2l0aGRyYXdDcnlwdG8nLFxuICAgICAgICAgICAgICAgICdmdW5kdHJhbnNmZXIvd2l0aGRyYXdFRlQnLFxuICAgICAgICAgICAgICAgICdvcmRlci9jcmVhdGUnLFxuICAgICAgICAgICAgICAgICdvcmRlci9jYW5jZWwnLFxuICAgICAgICAgICAgICAgICdvcmRlci9oaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAnb3JkZXIvb3BlbicsXG4gICAgICAgICAgICAgICAgJ29yZGVyL3RyYWRlL2hpc3RvcnknLFxuICAgICAgICAgICAgICAgICdvcmRlci9jcmVhdGVCYXRjaCcsIC8vIHRoZXkgcHJvbWlzZSBpdCdzIGNvbWluZyBzb29uLi4uXG4gICAgICAgICAgICAgICAgJ29yZGVyL2RldGFpbCcsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgJ21hcmtldHMnOiB7XG4gICAgICAgICdCVEMvQVVEJzogeyAnaWQnOiAnQlRDL0FVRCcsICdzeW1ib2wnOiAnQlRDL0FVRCcsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdBVUQnIH0sXG4gICAgICAgICdMVEMvQVVEJzogeyAnaWQnOiAnTFRDL0FVRCcsICdzeW1ib2wnOiAnTFRDL0FVRCcsICdiYXNlJzogJ0xUQycsICdxdW90ZSc6ICdBVUQnIH0sXG4gICAgICAgICdFVEgvQVVEJzogeyAnaWQnOiAnRVRIL0FVRCcsICdzeW1ib2wnOiAnRVRIL0FVRCcsICdiYXNlJzogJ0VUSCcsICdxdW90ZSc6ICdBVUQnIH0sXG4gICAgICAgICdFVEMvQVVEJzogeyAnaWQnOiAnRVRDL0FVRCcsICdzeW1ib2wnOiAnRVRDL0FVRCcsICdiYXNlJzogJ0VUQycsICdxdW90ZSc6ICdBVUQnIH0sXG4gICAgICAgICdYUlAvQVVEJzogeyAnaWQnOiAnWFJQL0FVRCcsICdzeW1ib2wnOiAnWFJQL0FVRCcsICdiYXNlJzogJ1hSUCcsICdxdW90ZSc6ICdBVUQnIH0sXG4gICAgICAgICdCQ0gvQVVEJzogeyAnaWQnOiAnQkNIL0FVRCcsICdzeW1ib2wnOiAnQkNIL0FVRCcsICdiYXNlJzogJ0JDSCcsICdxdW90ZSc6ICdBVUQnIH0sXG4gICAgICAgICdMVEMvQlRDJzogeyAnaWQnOiAnTFRDL0JUQycsICdzeW1ib2wnOiAnTFRDL0JUQycsICdiYXNlJzogJ0xUQycsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdFVEgvQlRDJzogeyAnaWQnOiAnRVRIL0JUQycsICdzeW1ib2wnOiAnRVRIL0JUQycsICdiYXNlJzogJ0VUSCcsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdFVEMvQlRDJzogeyAnaWQnOiAnRVRDL0JUQycsICdzeW1ib2wnOiAnRVRDL0JUQycsICdiYXNlJzogJ0VUQycsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdYUlAvQlRDJzogeyAnaWQnOiAnWFJQL0JUQycsICdzeW1ib2wnOiAnWFJQL0JUQycsICdiYXNlJzogJ1hSUCcsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdCQ0gvQlRDJzogeyAnaWQnOiAnQkNIL0JUQycsICdzeW1ib2wnOiAnQkNIL0JUQycsICdiYXNlJzogJ0JDSCcsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBiYWxhbmNlcyA9IGF3YWl0IHRoaXMucHJpdmF0ZUdldEFjY291bnRCYWxhbmNlICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGJhbGFuY2VzIH07XG4gICAgICAgIGZvciAobGV0IGIgPSAwOyBiIDwgYmFsYW5jZXMubGVuZ3RoOyBiKyspIHtcbiAgICAgICAgICAgIGxldCBiYWxhbmNlID0gYmFsYW5jZXNbYl07XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBiYWxhbmNlWydjdXJyZW5jeSddO1xuICAgICAgICAgICAgbGV0IG11bHRpcGxpZXIgPSAxMDAwMDAwMDA7XG4gICAgICAgICAgICBsZXQgZnJlZSA9IHBhcnNlRmxvYXQgKGJhbGFuY2VbJ2JhbGFuY2UnXSAvIG11bHRpcGxpZXIpO1xuICAgICAgICAgICAgbGV0IHVzZWQgPSBwYXJzZUZsb2F0IChiYWxhbmNlWydwZW5kaW5nRnVuZHMnXSAvIG11bHRpcGxpZXIpO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiBmcmVlLFxuICAgICAgICAgICAgICAgICd1c2VkJzogdXNlZCxcbiAgICAgICAgICAgICAgICAndG90YWwnOiB0aGlzLnN1bSAoZnJlZSwgdXNlZCksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgcGFyc2VCaWRBc2sgKGJpZGFzaykge1xuICAgICAgICBsZXQgcHJpY2UgPSBiaWRhc2tbMF07XG4gICAgICAgIGxldCBhbW91bnQgPSBiaWRhc2tbMV07XG4gICAgICAgIHJldHVybiBbIHByaWNlLCBhbW91bnQgXTtcbiAgICB9LFxuXG4gICAgcGFyc2VCaWRBc2tzIChiaWRhc2tzKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiaWRhc2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCAodGhpcy5wYXJzZUJpZEFzayAoYmlkYXNrc1tpXSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBtID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSBhd2FpdCB0aGlzLnB1YmxpY0dldE1hcmtldElkT3JkZXJib29rICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2lkJzogbVsnaWQnXSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSBvcmRlcmJvb2tbJ3RpbWVzdGFtcCddICogMTAwMDtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdiaWRzJzogW10sXG4gICAgICAgICAgICAnYXNrcyc6IFtdLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHNpZGVzID0gWyAnYmlkcycsICdhc2tzJyBdO1xuICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IHNpZGVzLmxlbmd0aDsgcysrKSB7XG4gICAgICAgICAgICBsZXQgc2lkZSA9IHNpZGVzW3NdO1xuICAgICAgICAgICAgcmVzdWx0W3NpZGVdID0gdGhpcy5wYXJzZUJpZEFza3MgKG9yZGVyYm9va1tzaWRlXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgcGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KSB7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aWNrZXJbJ3RpbWVzdGFtcCddICogMTAwMDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsb3cnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmlkJzogcGFyc2VGbG9hdCAodGlja2VyWydiZXN0QmlkJ10pLFxuICAgICAgICAgICAgJ2Fzayc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYmVzdEFzayddKSxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdFByaWNlJ10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndm9sdW1lMjRoJ10pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG0gPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHRpY2tlciA9IGF3YWl0IHRoaXMucHVibGljR2V0TWFya2V0SWRUaWNrICh7XG4gICAgICAgICAgICAnaWQnOiBtWydpZCddLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VUaWNrZXIgKHRpY2tlciwgbSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldE1hcmtldElkVHJhZGVzICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgLy8gJ3NpbmNlJzogNTk4NjgzNDUyMzEsXG4gICAgICAgICAgICAnaWQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG0gPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IG11bHRpcGxpZXIgPSAxMDAwMDAwMDA7IC8vIGZvciBwcmljZSBhbmQgdm9sdW1lXG4gICAgICAgIC8vIGRvZXMgQlRDIE1hcmtldHMgc3VwcG9ydCBtYXJrZXQgb3JkZXJzIGF0IGFsbD9cbiAgICAgICAgbGV0IG9yZGVyU2lkZSA9IChzaWRlID09ICdidXknKSA/ICdCaWQnIDogJ0Fzayc7XG4gICAgICAgIGxldCBvcmRlciA9IHRoaXMub3JkZXJlZCAoe1xuICAgICAgICAgICAgJ2N1cnJlbmN5JzogbVsncXVvdGUnXSxcbiAgICAgICAgICAgICdpbnN0cnVtZW50JzogbVsnYmFzZSddLFxuICAgICAgICAgICAgJ3ByaWNlJzogcHJpY2UgKiBtdWx0aXBsaWVyLFxuICAgICAgICAgICAgJ3ZvbHVtZSc6IGFtb3VudCAqIG11bHRpcGxpZXIsXG4gICAgICAgICAgICAnb3JkZXJTaWRlJzogb3JkZXJTaWRlLFxuICAgICAgICAgICAgJ29yZGVydHlwZSc6IHRoaXMuY2FwaXRhbGl6ZSAodHlwZSksXG4gICAgICAgICAgICAnY2xpZW50UmVxdWVzdElkJzogdGhpcy5ub25jZSAoKS50b1N0cmluZyAoKSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RPcmRlckNyZWF0ZSAodGhpcy5leHRlbmQgKG9yZGVyLCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnaWQnXS50b1N0cmluZyAoKSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXJzIChpZHMpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJpdmF0ZVBvc3RPcmRlckNhbmNlbCAoeyAnb3JkZXJfaWRzJzogaWRzIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FuY2VsT3JkZXJzIChbIGlkIF0pO1xuICAgIH0sXG5cbiAgICBub25jZSAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJpID0gJy8nICsgdGhpcy5pbXBsb2RlUGFyYW1zIChwYXRoLCBwYXJhbXMpO1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArIHVyaTtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5vbWl0IChwYXJhbXMsIHRoaXMuZXh0cmFjdFBhcmFtcyAocGF0aCkpO1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHBhcmFtcykubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocGFyYW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCkudG9TdHJpbmcgKCk7XG4gICAgICAgICAgICBsZXQgYXV0aCA9IHVyaSArIFwiXFxuXCIgKyBub25jZSArIFwiXFxuXCI7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgICAgJ2FwaWtleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgICAgICd0aW1lc3RhbXAnOiBub25jZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAobWV0aG9kID09ICdQT1NUJykge1xuICAgICAgICAgICAgICAgIGJvZHkgPSB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICAgICAgICAgIGhlYWRlcnNbJ0NvbnRlbnQtTGVuZ3RoJ10gPSBib2R5Lmxlbmd0aDtcbiAgICAgICAgICAgICAgICBhdXRoICs9IGJvZHk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgc2VjcmV0ID0gdGhpcy5iYXNlNjRUb0JpbmFyeSAodGhpcy5zZWNyZXQpO1xuICAgICAgICAgICAgbGV0IHNpZ25hdHVyZSA9IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKGF1dGgpLCBzZWNyZXQsICdzaGE1MTInLCAnYmFzZTY0Jyk7XG4gICAgICAgICAgICBoZWFkZXJzWydzaWduYXR1cmUnXSA9IHNpZ25hdHVyZTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgICAgIGlmIChhcGkgPT0gJ3ByaXZhdGUnKSB7XG4gICAgICAgICAgICBpZiAoJ3N1Y2Nlc3MnIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgICAgIGlmICghcmVzcG9uc2VbJ3N1Y2Nlc3MnXSlcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGJ0Y3RyYWRlciA9IHtcblxuICAgICdpZCc6ICdidGN0cmFkZXInLFxuICAgICduYW1lJzogJ0JUQ1RyYWRlcicsXG4gICAgJ2NvdW50cmllcyc6IFsgJ1RSJywgJ0dSJywgJ1BIJyBdLCAvLyBUdXJrZXksIEdyZWVjZSwgUGhpbGlwcGluZXNcbiAgICAncmF0ZUxpbWl0JzogMTAwMCxcbiAgICAnY29tbWVudCc6ICdiYXNlIEFQSSBmb3IgQlRDRXhjaGFuZ2UsIEJUQ1R1cmsnLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3OTkyNDA0LWNkYTFlMzg2LTY0OWMtMTFlNy04ZGMxLTQwYmJkMjg5Nzc2OC5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vd3d3LmJ0Y3RyYWRlci5jb20vYXBpJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy5idGN0cmFkZXIuY29tJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL2dpdGh1Yi5jb20vQlRDVHJhZGVyL2Jyb2tlci1hcGktZG9jcycsXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnb2hsY2RhdGEnLCAvLyA/bGFzdD1DT1VOVFxuICAgICAgICAgICAgICAgICdvcmRlcmJvb2snLFxuICAgICAgICAgICAgICAgICd0aWNrZXInLFxuICAgICAgICAgICAgICAgICd0cmFkZXMnLCAgIC8vID9sYXN0PUNPVU5UIChtYXggNTApXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAncHJpdmF0ZSc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ2JhbGFuY2UnLFxuICAgICAgICAgICAgICAgICdvcGVuT3JkZXJzJyxcbiAgICAgICAgICAgICAgICAndXNlclRyYW5zYWN0aW9ucycsIC8vID9vZmZzZXQ9MCZsaW1pdD0yNSZzb3J0PWFzY1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICdwb3N0JzogW1xuICAgICAgICAgICAgICAgICdidXknLFxuICAgICAgICAgICAgICAgICdjYW5jZWxPcmRlcicsXG4gICAgICAgICAgICAgICAgJ3NlbGwnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlR2V0QmFsYW5jZSAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiByZXNwb25zZSB9O1xuICAgICAgICBsZXQgYmFzZSA9IHtcbiAgICAgICAgICAgICdmcmVlJzogcmVzcG9uc2VbJ2JpdGNvaW5fYXZhaWxhYmxlJ10sXG4gICAgICAgICAgICAndXNlZCc6IHJlc3BvbnNlWydiaXRjb2luX3Jlc2VydmVkJ10sXG4gICAgICAgICAgICAndG90YWwnOiByZXNwb25zZVsnYml0Y29pbl9iYWxhbmNlJ10sXG4gICAgICAgIH07XG4gICAgICAgIGxldCBxdW90ZSA9IHtcbiAgICAgICAgICAgICdmcmVlJzogcmVzcG9uc2VbJ21vbmV5X2F2YWlsYWJsZSddLFxuICAgICAgICAgICAgJ3VzZWQnOiByZXNwb25zZVsnbW9uZXlfcmVzZXJ2ZWQnXSxcbiAgICAgICAgICAgICd0b3RhbCc6IHJlc3BvbnNlWydtb25leV9iYWxhbmNlJ10sXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzeW1ib2wgPSB0aGlzLnN5bWJvbHNbMF07XG4gICAgICAgIGxldCBtYXJrZXQgPSB0aGlzLm1hcmtldHNbc3ltYm9sXTtcbiAgICAgICAgcmVzdWx0W21hcmtldFsnYmFzZSddXSA9IGJhc2U7XG4gICAgICAgIHJlc3VsdFttYXJrZXRbJ3F1b3RlJ11dID0gcXVvdGU7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSBhd2FpdCB0aGlzLnB1YmxpY0dldE9yZGVyYm9vayAocGFyYW1zKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHBhcnNlSW50IChvcmRlcmJvb2tbJ3RpbWVzdGFtcCddICogMTAwMCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IFtdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaWRlcyA9IFsgJ2JpZHMnLCAnYXNrcycgXTtcbiAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBzaWRlcy5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1tzXTtcbiAgICAgICAgICAgIGxldCBvcmRlcnMgPSBvcmRlcmJvb2tbc2lkZV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBvcmRlciA9IG9yZGVyc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgcHJpY2UgPSBwYXJzZUZsb2F0IChvcmRlclswXSk7XG4gICAgICAgICAgICAgICAgbGV0IGFtb3VudCA9IHBhcnNlRmxvYXQgKG9yZGVyWzFdKTtcbiAgICAgICAgICAgICAgICByZXN1bHRbc2lkZV0ucHVzaCAoWyBwcmljZSwgYW1vdW50IF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgbGV0IHRpY2tlciA9IGF3YWl0IHRoaXMucHVibGljR2V0VGlja2VyICgpO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gcGFyc2VJbnQgKHRpY2tlclsndGltZXN0YW1wJ10gKiAxMDAwKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2JpZCddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2FzayddKSxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ29wZW4nXSksXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdCddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogcGFyc2VGbG9hdCAodGlja2VyWydhdmVyYWdlJ10pLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbHVtZSddKSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgbWF4Q291bnQgPSA1MDtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0VHJhZGVzIChwYXJhbXMpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgbWV0aG9kID0gJ3ByaXZhdGVQb3N0JyArIHRoaXMuY2FwaXRhbGl6ZSAoc2lkZSk7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdUeXBlJzogKHNpZGUgPT0gJ2J1eScpID8gJ0J1eUJ0YycgOiAnU2VsQnRjJyxcbiAgICAgICAgICAgICdJc01hcmtldE9yZGVyJzogKHR5cGUgPT0gJ21hcmtldCcpID8gMSA6IDAsXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlID09ICdtYXJrZXQnKSB7XG4gICAgICAgICAgICBpZiAoc2lkZSA9PSAnYnV5JylcbiAgICAgICAgICAgICAgICBvcmRlclsnVG90YWwnXSA9IGFtb3VudDtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBvcmRlclsnQW1vdW50J10gPSBhbW91bnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvcmRlclsnUHJpY2UnXSA9IHByaWNlO1xuICAgICAgICAgICAgb3JkZXJbJ0Ftb3VudCddID0gYW1vdW50O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXNbbWV0aG9kXSAodGhpcy5leHRlbmQgKG9yZGVyLCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnaWQnXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0Q2FuY2VsT3JkZXIgKHsgJ2lkJzogaWQgfSk7XG4gICAgfSxcblxuICAgIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHRoaXMuaWQgPT0gJ2J0Y3RyYWRlcicpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgaXMgYW4gYWJzdHJhY3QgYmFzZSBBUEkgZm9yIEJUQ0V4Y2hhbmdlLCBCVENUdXJrJyk7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgJy8nICsgcGF0aDtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChwYXJhbXMpLmxlbmd0aClcbiAgICAgICAgICAgICAgICB1cmwgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHBhcmFtcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpLnRvU3RyaW5nO1xuICAgICAgICAgICAgYm9keSA9IHRoaXMudXJsZW5jb2RlIChwYXJhbXMpO1xuICAgICAgICAgICAgbGV0IHNlY3JldCA9IHRoaXMuYmFzZTY0VG9TdHJpbmcgKHRoaXMuc2VjcmV0KTtcbiAgICAgICAgICAgIGxldCBhdXRoID0gdGhpcy5hcGlLZXkgKyBub25jZTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ1gtUENLJzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ1gtU3RhbXAnOiBub25jZS50b1N0cmluZyAoKSxcbiAgICAgICAgICAgICAgICAnWC1TaWduYXR1cmUnOiB0aGlzLmhtYWMgKHRoaXMuZW5jb2RlIChhdXRoKSwgc2VjcmV0LCAnc2hhMjU2JywgJ2Jhc2U2NCcpLFxuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICAgICAgICAnQ29udGVudC1MZW5ndGgnOiBib2R5Lmxlbmd0aCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBidGNleGNoYW5nZSA9IGV4dGVuZCAoYnRjdHJhZGVyLCB7XG5cbiAgICAnaWQnOiAnYnRjZXhjaGFuZ2UnLFxuICAgICduYW1lJzogJ0JUQ0V4Y2hhbmdlJyxcbiAgICAnY291bnRyaWVzJzogJ1BIJywgLy8gUGhpbGlwcGluZXNcbiAgICAncmF0ZUxpbWl0JzogMTUwMCxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yNzk5MzA1Mi00YzkyOTExYS02NGFhLTExZTctOTZkOC1lYzZhYzM0MzU3NTcuanBnJyxcbiAgICAgICAgJ2FwaSc6ICdodHRwczovL3d3dy5idGNleGNoYW5nZS5waC9hcGknLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vd3d3LmJ0Y2V4Y2hhbmdlLnBoJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL2dpdGh1Yi5jb20vQlRDVHJhZGVyL2Jyb2tlci1hcGktZG9jcycsXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9QSFAnOiB7ICdpZCc6ICdCVEMvUEhQJywgJ3N5bWJvbCc6ICdCVEMvUEhQJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ1BIUCcgfSxcbiAgICB9LFxufSlcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgYnRjdHJhZGV1YSA9IHtcblxuICAgICdpZCc6ICdidGN0cmFkZXVhJyxcbiAgICAnbmFtZSc6ICdCVEMgVHJhZGUgVUEnLFxuICAgICdjb3VudHJpZXMnOiAnVUEnLCAvLyBVa3JhaW5lLFxuICAgICdyYXRlTGltaXQnOiAzMDAwLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3OTQxNDgzLTc5ZmM3MzUwLTYyZDktMTFlNy05ZjYxLWFjNDdmMjhmY2Q5Ni5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vYnRjLXRyYWRlLmNvbS51YS9hcGknLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vYnRjLXRyYWRlLmNvbS51YScsXG4gICAgICAgICdkb2MnOiAnaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vZG9jdW1lbnQvZC8xb2NZQTB5TXlfUlhkNTYxc2ZHM3FFUFo4MGt5bGwzNkhVeHZDUmU1R2JoRS9lZGl0JyxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdkZWFscy97c3ltYm9sfScsXG4gICAgICAgICAgICAgICAgJ3RyYWRlcy9zZWxsL3tzeW1ib2x9JyxcbiAgICAgICAgICAgICAgICAndHJhZGVzL2J1eS97c3ltYm9sfScsXG4gICAgICAgICAgICAgICAgJ2phcGFuX3N0YXQvaGlnaC97c3ltYm9sfScsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAncHJpdmF0ZSc6IHtcbiAgICAgICAgICAgICdwb3N0JzogW1xuICAgICAgICAgICAgICAgICdhdXRoJyxcbiAgICAgICAgICAgICAgICAnYXNrL3tzeW1ib2x9JyxcbiAgICAgICAgICAgICAgICAnYmFsYW5jZScsXG4gICAgICAgICAgICAgICAgJ2JpZC97c3ltYm9sfScsXG4gICAgICAgICAgICAgICAgJ2J1eS97c3ltYm9sfScsXG4gICAgICAgICAgICAgICAgJ215X29yZGVycy97c3ltYm9sfScsXG4gICAgICAgICAgICAgICAgJ29yZGVyL3N0YXR1cy97aWR9JyxcbiAgICAgICAgICAgICAgICAncmVtb3ZlL29yZGVyL3tpZH0nLFxuICAgICAgICAgICAgICAgICdzZWxsL3tzeW1ib2x9JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9VQUgnOiB7ICdpZCc6ICdidGNfdWFoJywgJ3N5bWJvbCc6ICdCVEMvVUFIJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ1VBSCcgfSxcbiAgICAgICAgJ0VUSC9VQUgnOiB7ICdpZCc6ICdldGhfdWFoJywgJ3N5bWJvbCc6ICdFVEgvVUFIJywgJ2Jhc2UnOiAnRVRIJywgJ3F1b3RlJzogJ1VBSCcgfSxcbiAgICAgICAgJ0xUQy9VQUgnOiB7ICdpZCc6ICdsdGNfdWFoJywgJ3N5bWJvbCc6ICdMVEMvVUFIJywgJ2Jhc2UnOiAnTFRDJywgJ3F1b3RlJzogJ1VBSCcgfSxcbiAgICAgICAgJ0RPR0UvVUFIJzogeyAnaWQnOiAnZG9nZV91YWgnLCAnc3ltYm9sJzogJ0RPR0UvVUFIJywgJ2Jhc2UnOiAnRE9HRScsICdxdW90ZSc6ICdVQUgnIH0sXG4gICAgICAgICdEQVNIL1VBSCc6IHsgJ2lkJzogJ2Rhc2hfdWFoJywgJ3N5bWJvbCc6ICdEQVNIL1VBSCcsICdiYXNlJzogJ0RBU0gnLCAncXVvdGUnOiAnVUFIJyB9LFxuICAgICAgICAnU0lCL1VBSCc6IHsgJ2lkJzogJ3NpYl91YWgnLCAnc3ltYm9sJzogJ1NJQi9VQUgnLCAnYmFzZSc6ICdTSUInLCAncXVvdGUnOiAnVUFIJyB9LFxuICAgICAgICAnS1JCL1VBSCc6IHsgJ2lkJzogJ2tyYl91YWgnLCAnc3ltYm9sJzogJ0tSQi9VQUgnLCAnYmFzZSc6ICdLUkInLCAncXVvdGUnOiAnVUFIJyB9LFxuICAgICAgICAnTlZDL1VBSCc6IHsgJ2lkJzogJ252Y191YWgnLCAnc3ltYm9sJzogJ05WQy9VQUgnLCAnYmFzZSc6ICdOVkMnLCAncXVvdGUnOiAnVUFIJyB9LFxuICAgICAgICAnTFRDL0JUQyc6IHsgJ2lkJzogJ2x0Y19idGMnLCAnc3ltYm9sJzogJ0xUQy9CVEMnLCAnYmFzZSc6ICdMVEMnLCAncXVvdGUnOiAnQlRDJyB9LFxuICAgICAgICAnTlZDL0JUQyc6IHsgJ2lkJzogJ252Y19idGMnLCAnc3ltYm9sJzogJ05WQy9CVEMnLCAnYmFzZSc6ICdOVkMnLCAncXVvdGUnOiAnQlRDJyB9LFxuICAgICAgICAnSVRJL1VBSCc6IHsgJ2lkJzogJ2l0aV91YWgnLCAnc3ltYm9sJzogJ0lUSS9VQUgnLCAnYmFzZSc6ICdJVEknLCAncXVvdGUnOiAnVUFIJyB9LFxuICAgICAgICAnRE9HRS9CVEMnOiB7ICdpZCc6ICdkb2dlX2J0YycsICdzeW1ib2wnOiAnRE9HRS9CVEMnLCAnYmFzZSc6ICdET0dFJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ0RBU0gvQlRDJzogeyAnaWQnOiAnZGFzaF9idGMnLCAnc3ltYm9sJzogJ0RBU0gvQlRDJywgJ2Jhc2UnOiAnREFTSCcsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgfSxcblxuICAgIHNpZ25JbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0QXV0aCAoKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdEJhbGFuY2UgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogcmVzcG9uc2UgfTtcbiAgICAgICAgaWYgKCdhY2NvdW50cycgaW4gcmVzdWx0KSB7XG4gICAgICAgICAgICBsZXQgYWNjb3VudHMgPSByZXNwb25zZVsnYWNjb3VudHMnXTtcbiAgICAgICAgICAgIGZvciAobGV0IGIgPSAwOyBiIDwgYWNjb3VudHMubGVuZ3RoOyBiKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgYWNjb3VudCA9IGFjY291bnRzW2JdO1xuICAgICAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IGFjY291bnRbJ2N1cnJlbmN5J107XG4gICAgICAgICAgICAgICAgbGV0IGJhbGFuY2UgPSBwYXJzZUZsb2F0IChhY2NvdW50WydiYWxhbmNlJ10pO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtjdXJyZW5jeV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICdmcmVlJzogYmFsYW5jZSxcbiAgICAgICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICd0b3RhbCc6IGJhbGFuY2UsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgYmlkcyA9IGF3YWl0IHRoaXMucHVibGljR2V0VHJhZGVzQnV5U3ltYm9sICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ3N5bWJvbCc6IHBbJ2lkJ10sXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgYXNrcyA9IGF3YWl0IHRoaXMucHVibGljR2V0VHJhZGVzU2VsbFN5bWJvbCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiBwWydpZCddLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IHtcbiAgICAgICAgICAgICdiaWRzJzogW10sXG4gICAgICAgICAgICAnYXNrcyc6IFtdLFxuICAgICAgICB9O1xuICAgICAgICBpZiAoYmlkcykge1xuICAgICAgICAgICAgaWYgKCdsaXN0JyBpbiBiaWRzKVxuICAgICAgICAgICAgICAgIG9yZGVyYm9va1snYmlkcyddID0gYmlkc1snbGlzdCddO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhc2tzKSB7XG4gICAgICAgICAgICBpZiAoJ2xpc3QnIGluIGFza3MpXG4gICAgICAgICAgICAgICAgb3JkZXJib29rWydhc2tzJ10gPSBhc2tzWydsaXN0J107XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAob3JkZXJbJ3ByaWNlJ10pO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBwYXJzZUZsb2F0IChvcmRlclsnY3VycmVuY3lfdHJhZGUnXSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3NpZGVdLnB1c2ggKFsgcHJpY2UsIGFtb3VudCBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0SmFwYW5TdGF0SGlnaFN5bWJvbCAoe1xuICAgICAgICAgICAgJ3N5bWJvbCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgdGlja2VyID0gcmVzcG9uc2VbJ3RyYWRlcyddO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbG93JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2JpZCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhc2snOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgICAgIGxldCB0aWNrZXJMZW5ndGggPSB0aWNrZXIubGVuZ3RoO1xuICAgICAgICBpZiAodGlja2VyTGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgbGV0IHN0YXJ0ID0gTWF0aC5tYXggKHRpY2tlckxlbmd0aCAtIDQ4LCAwKTtcbiAgICAgICAgICAgIGZvciAobGV0IHQgPSBzdGFydDsgdCA8IHRpY2tlci5sZW5ndGg7IHQrKykge1xuICAgICAgICAgICAgICAgIGxldCBjYW5kbGUgPSB0aWNrZXJbdF07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByZXN1bHRbJ29wZW4nXSA9PSAndW5kZWZpbmVkJylcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0WydvcGVuJ10gPSBjYW5kbGVbMV07XG4gICAgICAgICAgICAgICAgaWYgKCh0eXBlb2YgcmVzdWx0WydoaWdoJ10gPT0gJ3VuZGVmaW5lZCcpIHx8IChyZXN1bHRbJ2hpZ2gnXSA8IGNhbmRsZVsyXSkpXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdFsnaGlnaCddID0gY2FuZGxlWzJdO1xuICAgICAgICAgICAgICAgIGlmICgodHlwZW9mIHJlc3VsdFsnbG93J10gPT0gJ3VuZGVmaW5lZCcpIHx8IChyZXN1bHRbJ2xvdyddID4gY2FuZGxlWzNdKSlcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0Wydsb3cnXSA9IGNhbmRsZVszXTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJlc3VsdFsncXVvdGVWb2x1bWUnXSA9PSAndW5kZWZpbmVkJylcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0WydxdW90ZVZvbHVtZSddID0gLWNhbmRsZVs1XTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdFsncXVvdGVWb2x1bWUnXSAtPSBjYW5kbGVbNV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgbGFzdCA9IHRpY2tlckxlbmd0aCAtIDE7XG4gICAgICAgICAgICByZXN1bHRbJ2Nsb3NlJ10gPSB0aWNrZXJbbGFzdF1bNF07XG4gICAgICAgICAgICByZXN1bHRbJ3F1b3RlVm9sdW1lJ10gPSAtMSAqIHJlc3VsdFsncXVvdGVWb2x1bWUnXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdGhpcy5wdWJsaWNHZXREZWFsc1N5bWJvbCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgaWYgKHR5cGUgPT0gJ21hcmtldCcpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgYWxsb3dzIGxpbWl0IG9yZGVycyBvbmx5Jyk7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCBtZXRob2QgPSAncHJpdmF0ZVBvc3QnICsgdGhpcy5jYXBpdGFsaXplIChzaWRlKSArICdJZCc7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdjb3VudCc6IGFtb3VudCxcbiAgICAgICAgICAgICdjdXJyZW5jeTEnOiBwWydxdW90ZSddLFxuICAgICAgICAgICAgJ2N1cnJlbmN5JzogcFsnYmFzZSddLFxuICAgICAgICAgICAgJ3ByaWNlJzogcHJpY2UsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB0aGlzW21ldGhvZF0gKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdFJlbW92ZU9yZGVySWQgKHsgJ2lkJzogaWQgfSk7XG4gICAgfSxcblxuICAgIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ10gKyAnLycgKyB0aGlzLmltcGxvZGVQYXJhbXMgKHBhdGgsIHBhcmFtcyk7XG4gICAgICAgIGxldCBxdWVyeSA9IHRoaXMub21pdCAocGFyYW1zLCB0aGlzLmV4dHJhY3RQYXJhbXMgKHBhdGgpKTtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChxdWVyeSkubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSB0aGlzLmltcGxvZGVQYXJhbXMgKHBhdGgsIHF1ZXJ5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCk7XG4gICAgICAgICAgICBib2R5ID0gdGhpcy51cmxlbmNvZGUgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAgICAgJ291dF9vcmRlcl9pZCc6IG5vbmNlLFxuICAgICAgICAgICAgICAgICdub25jZSc6IG5vbmNlLFxuICAgICAgICAgICAgfSwgcXVlcnkpKTtcbiAgICAgICAgICAgIGxldCBhdXRoID0gYm9keSArIHRoaXMuc2VjcmV0O1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAncHVibGljLWtleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgICAgICdhcGktc2lnbic6IHRoaXMuaGFzaCAodGhpcy5lbmNvZGUgKGF1dGgpLCAnc2hhMjU2JyksXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgICAgICAgICdDb250ZW50LUxlbmd0aCc6IGJvZHkubGVuZ3RoLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGJ0Y3R1cmsgPSBleHRlbmQgKGJ0Y3RyYWRlciwge1xuXG4gICAgJ2lkJzogJ2J0Y3R1cmsnLFxuICAgICduYW1lJzogJ0JUQ1R1cmsnLFxuICAgICdjb3VudHJpZXMnOiAnVFInLCAvLyBUdXJrZXlcbiAgICAncmF0ZUxpbWl0JzogMTAwMCxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yNzk5MjcwOS0xOGUxNTY0Ni02NGEzLTExZTctOWZhMi1iMDk1MGVjNzcxMmYuanBnJyxcbiAgICAgICAgJ2FwaSc6ICdodHRwczovL3d3dy5idGN0dXJrLmNvbS9hcGknLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vd3d3LmJ0Y3R1cmsuY29tJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL2dpdGh1Yi5jb20vQlRDVHJhZGVyL2Jyb2tlci1hcGktZG9jcycsXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9UUlknOiB7ICdpZCc6ICdCVEMvVFJZJywgJ3N5bWJvbCc6ICdCVEMvVFJZJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ1RSWScgfSxcbiAgICB9LFxufSlcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgYnRjeCA9IHtcblxuICAgICdpZCc6ICdidGN4JyxcbiAgICAnbmFtZSc6ICdCVENYJyxcbiAgICAnY291bnRyaWVzJzogWyAnSVMnLCAnVVMnLCAnRVUnIF0sXG4gICAgJ3JhdGVMaW1pdCc6IDE1MDAsIC8vIHN1cHBvcnQgaW4gZW5nbGlzaCBpcyB2ZXJ5IHBvb3IsIHVuYWJsZSB0byB0ZWxsIHJhdGUgbGltaXRzXG4gICAgJ3ZlcnNpb24nOiAndjEnLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2Mzg1LTlmZGNjOThjLTVlZDYtMTFlNy04ZjE0LTY2ZDVlNWNkNDdlNi5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vYnRjLXguaXMvYXBpJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL2J0Yy14LmlzJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL2J0Yy14LmlzL2N1c3RvbS9hcGktZG9jdW1lbnQuaHRtbCcsXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnZGVwdGgve2lkfS97bGltaXR9JyxcbiAgICAgICAgICAgICAgICAndGlja2VyL3tpZH0nLFxuICAgICAgICAgICAgICAgICd0cmFkZS97aWR9L3tsaW1pdH0nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnYmFsYW5jZScsXG4gICAgICAgICAgICAgICAgJ2NhbmNlbCcsXG4gICAgICAgICAgICAgICAgJ2hpc3RvcnknLFxuICAgICAgICAgICAgICAgICdvcmRlcicsXG4gICAgICAgICAgICAgICAgJ3JlZGVlbScsXG4gICAgICAgICAgICAgICAgJ3RyYWRlJyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXcnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgICdtYXJrZXRzJzoge1xuICAgICAgICAnQlRDL1VTRCc6IHsgJ2lkJzogJ2J0Yy91c2QnLCAnc3ltYm9sJzogJ0JUQy9VU0QnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnVVNEJyB9LFxuICAgICAgICAnQlRDL0VVUic6IHsgJ2lkJzogJ2J0Yy9ldXInLCAnc3ltYm9sJzogJ0JUQy9FVVInLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnRVVSJyB9LFxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBsZXQgYmFsYW5jZXMgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0QmFsYW5jZSAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiBiYWxhbmNlcyB9O1xuICAgICAgICBsZXQgY3VycmVuY2llcyA9IE9iamVjdC5rZXlzIChiYWxhbmNlcyk7XG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgY3VycmVuY2llcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gY3VycmVuY2llc1tjXTtcbiAgICAgICAgICAgIGxldCB1cHBlcmNhc2UgPSBjdXJyZW5jeS50b1VwcGVyQ2FzZSAoKTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogYmFsYW5jZXNbY3VycmVuY3ldLFxuICAgICAgICAgICAgICAgICd1c2VkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IGJhbGFuY2VzW2N1cnJlbmN5XSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXN1bHRbdXBwZXJjYXNlXSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IGF3YWl0IHRoaXMucHVibGljR2V0RGVwdGhJZExpbWl0ICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2lkJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICdsaW1pdCc6IDEwMDAsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IFtdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaWRlcyA9IFsgJ2JpZHMnLCAnYXNrcycgXTtcbiAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBzaWRlcy5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1tzXTtcbiAgICAgICAgICAgIGxldCBvcmRlcnMgPSBvcmRlcmJvb2tbc2lkZV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBvcmRlciA9IG9yZGVyc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgcHJpY2UgPSBvcmRlclsncHJpY2UnXTtcbiAgICAgICAgICAgICAgICBsZXQgYW1vdW50ID0gb3JkZXJbJ2Ftb3VudCddO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtzaWRlXS5wdXNoIChbIHByaWNlLCBhbW91bnQgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBsZXQgdGlja2VyID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRUaWNrZXJJZCAoe1xuICAgICAgICAgICAgJ2lkJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aWNrZXJbJ3RpbWUnXSAqIDEwMDA7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2hpZ2gnXSksXG4gICAgICAgICAgICAnbG93JzogcGFyc2VGbG9hdCAodGlja2VyWydsb3cnXSksXG4gICAgICAgICAgICAnYmlkJzogcGFyc2VGbG9hdCAodGlja2VyWydzZWxsJ10pLFxuICAgICAgICAgICAgJ2Fzayc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYnV5J10pLFxuICAgICAgICAgICAgJ3Z3YXAnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnb3Blbic6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjbG9zZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdmaXJzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsYXN0JzogcGFyc2VGbG9hdCAodGlja2VyWydsYXN0J10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndm9sdW1lJ10pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldFRyYWRlSWRMaW1pdCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdpZCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgICAgICAnbGltaXQnOiAxMDAwLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdFRyYWRlICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ3R5cGUnOiBzaWRlLnRvVXBwZXJDYXNlICgpLFxuICAgICAgICAgICAgJ21hcmtldCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgICAgICAnYW1vdW50JzogYW1vdW50LFxuICAgICAgICAgICAgJ3ByaWNlJzogcHJpY2UsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXNwb25zZSxcbiAgICAgICAgICAgICdpZCc6IHJlc3BvbnNlWydvcmRlciddWydpZCddLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJpdmF0ZVBvc3RDYW5jZWwgKHsgJ29yZGVyJzogaWQgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ10gKyAnLycgKyB0aGlzLnZlcnNpb24gKyAnLyc7XG4gICAgICAgIGlmIChhcGkgPT0gJ3B1YmxpYycpIHtcbiAgICAgICAgICAgIHVybCArPSB0aGlzLmltcGxvZGVQYXJhbXMgKHBhdGgsIHBhcmFtcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpO1xuICAgICAgICAgICAgdXJsICs9IGFwaTtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLnVybGVuY29kZSAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICAgICAnTWV0aG9kJzogcGF0aC50b1VwcGVyQ2FzZSAoKSxcbiAgICAgICAgICAgICAgICAnTm9uY2UnOiBub25jZSxcbiAgICAgICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgICAgICAgJ0tleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgICAgICdTaWduYXR1cmUnOiB0aGlzLmhtYWMgKHRoaXMuZW5jb2RlIChib2R5KSwgdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSwgJ3NoYTUxMicpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgICAgIGlmICgnZXJyb3InIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlWydlcnJvciddKSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBidGVyID0ge1xuICAgICdpZCc6ICdidGVyJyxcbiAgICAnbmFtZSc6ICdCdGVyJyxcbiAgICAnY291bnRyaWVzJzogWyAnVkcnLCAnQ04nIF0sIC8vIEJyaXRpc2ggVmlyZ2luIElzbGFuZHMsIENoaW5hXG4gICAgJ3ZlcnNpb24nOiAnMicsXG4gICAgJ2hhc0ZldGNoVGlja2Vycyc6IHRydWUsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc5ODA0NzktY2ZhMzE4OGMtNjM4Ny0xMWU3LTgxOTEtOTNmYzQxODRiYTVjLmpwZycsXG4gICAgICAgICdhcGknOiB7XG4gICAgICAgICAgICAncHVibGljJzogJ2h0dHBzOi8vZGF0YS5idGVyLmNvbS9hcGknLFxuICAgICAgICAgICAgJ3ByaXZhdGUnOiAnaHR0cHM6Ly9hcGkuYnRlci5jb20vYXBpJyxcbiAgICAgICAgfSxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL2J0ZXIuY29tJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL2J0ZXIuY29tL2FwaTInLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ3BhaXJzJyxcbiAgICAgICAgICAgICAgICAnbWFya2V0aW5mbycsXG4gICAgICAgICAgICAgICAgJ21hcmtldGxpc3QnLFxuICAgICAgICAgICAgICAgICd0aWNrZXJzJyxcbiAgICAgICAgICAgICAgICAndGlja2VyL3tpZH0nLFxuICAgICAgICAgICAgICAgICdvcmRlckJvb2sve2lkfScsXG4gICAgICAgICAgICAgICAgJ3RyYWRlL3tpZH0nLFxuICAgICAgICAgICAgICAgICd0cmFkZUhpc3Rvcnkve2lkfScsXG4gICAgICAgICAgICAgICAgJ3RyYWRlSGlzdG9yeS97aWR9L3t0aWR9JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2JhbGFuY2VzJyxcbiAgICAgICAgICAgICAgICAnZGVwb3NpdEFkZHJlc3MnLFxuICAgICAgICAgICAgICAgICduZXdBZGRyZXNzJyxcbiAgICAgICAgICAgICAgICAnZGVwb3NpdHNXaXRoZHJhd2FscycsXG4gICAgICAgICAgICAgICAgJ2J1eScsXG4gICAgICAgICAgICAgICAgJ3NlbGwnLFxuICAgICAgICAgICAgICAgICdjYW5jZWxPcmRlcicsXG4gICAgICAgICAgICAgICAgJ2NhbmNlbEFsbE9yZGVycycsXG4gICAgICAgICAgICAgICAgJ2dldE9yZGVyJyxcbiAgICAgICAgICAgICAgICAnb3Blbk9yZGVycycsXG4gICAgICAgICAgICAgICAgJ3RyYWRlSGlzdG9yeScsXG4gICAgICAgICAgICAgICAgJ3dpdGhkcmF3JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoTWFya2V0cyAoKSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0TWFya2V0bGlzdCAoKTtcbiAgICAgICAgbGV0IG1hcmtldHMgPSByZXNwb25zZVsnZGF0YSddO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgbWFya2V0cy5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IG1hcmtldHNbcF07XG4gICAgICAgICAgICBsZXQgaWQgPSBtYXJrZXRbJ3BhaXInXTtcbiAgICAgICAgICAgIGxldCBiYXNlID0gbWFya2V0WydjdXJyX2EnXTtcbiAgICAgICAgICAgIGxldCBxdW90ZSA9IG1hcmtldFsnY3Vycl9iJ107XG4gICAgICAgICAgICBiYXNlID0gdGhpcy5jb21tb25DdXJyZW5jeUNvZGUgKGJhc2UpO1xuICAgICAgICAgICAgcXVvdGUgPSB0aGlzLmNvbW1vbkN1cnJlbmN5Q29kZSAocXVvdGUpO1xuICAgICAgICAgICAgbGV0IHN5bWJvbCA9IGJhc2UgKyAnLycgKyBxdW90ZTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoICh7XG4gICAgICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgICAgICAgICAgJ3N5bWJvbCc6IHN5bWJvbCxcbiAgICAgICAgICAgICAgICAnYmFzZSc6IGJhc2UsXG4gICAgICAgICAgICAgICAgJ3F1b3RlJzogcXVvdGUsXG4gICAgICAgICAgICAgICAgJ2luZm8nOiBtYXJrZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgYmFsYW5jZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RCYWxhbmNlcyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiBiYWxhbmNlIH07XG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgdGhpcy5jdXJyZW5jaWVzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSB0aGlzLmN1cnJlbmNpZXNbY107XG4gICAgICAgICAgICBsZXQgY29kZSA9IHRoaXMuY29tbW9uQ3VycmVuY3lDb2RlIChjdXJyZW5jeSk7XG4gICAgICAgICAgICBsZXQgYWNjb3VudCA9IHtcbiAgICAgICAgICAgICAgICAnZnJlZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAndXNlZCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAndG90YWwnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKCdhdmFpbGFibGUnIGluIGJhbGFuY2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVuY3kgaW4gYmFsYW5jZVsnYXZhaWxhYmxlJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgYWNjb3VudFsnZnJlZSddID0gcGFyc2VGbG9hdCAoYmFsYW5jZVsnYXZhaWxhYmxlJ11bY3VycmVuY3ldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoJ2xvY2tlZCcgaW4gYmFsYW5jZSkge1xuICAgICAgICAgICAgICAgIGlmIChjdXJyZW5jeSBpbiBiYWxhbmNlWydsb2NrZWQnXSkge1xuICAgICAgICAgICAgICAgICAgICBhY2NvdW50Wyd1c2VkJ10gPSBwYXJzZUZsb2F0IChiYWxhbmNlWydsb2NrZWQnXVtjdXJyZW5jeV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFjY291bnRbJ3RvdGFsJ10gPSB0aGlzLnN1bSAoYWNjb3VudFsnZnJlZSddLCBhY2NvdW50Wyd1c2VkJ10pO1xuICAgICAgICAgICAgcmVzdWx0W2NvZGVdID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRPcmRlckJvb2tJZCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdpZCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IFtdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaWRlcyA9IFsgJ2JpZHMnLCAnYXNrcycgXTtcbiAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBzaWRlcy5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1tzXTtcbiAgICAgICAgICAgIGxldCBvcmRlcnMgPSBvcmRlcmJvb2tbc2lkZV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBvcmRlciA9IG9yZGVyc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgcHJpY2UgPSBwYXJzZUZsb2F0IChvcmRlclswXSk7XG4gICAgICAgICAgICAgICAgbGV0IGFtb3VudCA9IHBhcnNlRmxvYXQgKG9yZGVyWzFdKTtcbiAgICAgICAgICAgICAgICByZXN1bHRbc2lkZV0ucHVzaCAoWyBwcmljZSwgYW1vdW50IF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlc3VsdFsnYXNrcyddID0gdGhpcy5zb3J0QnkgKHJlc3VsdFsnYXNrcyddLCAwKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgcGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaDI0aHInXSksXG4gICAgICAgICAgICAnbG93JzogcGFyc2VGbG9hdCAodGlja2VyWydsb3cyNGhyJ10pLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaGVzdEJpZCddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvd2VzdEFzayddKSxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdCddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3BlcmNlbnRDaGFuZ2UnXSksXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2Jhc2VWb2x1bWUnXSksXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3F1b3RlVm9sdW1lJ10pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VycyAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCB0aWNrZXJzID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRUaWNrZXJzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge307XG4gICAgICAgIGxldCBpZHMgPSBPYmplY3Qua2V5cyAodGlja2Vycyk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgaWQgPSBpZHNbaV07XG4gICAgICAgICAgICBsZXQgWyBiYXNlSWQsIHF1b3RlSWQgXSA9IGlkLnNwbGl0ICgnXycpO1xuICAgICAgICAgICAgbGV0IGJhc2UgPSBiYXNlSWQudG9VcHBlckNhc2UgKCk7XG4gICAgICAgICAgICBsZXQgcXVvdGUgPSBxdW90ZUlkLnRvVXBwZXJDYXNlICgpO1xuICAgICAgICAgICAgYmFzZSA9IHRoaXMuY29tbW9uQ3VycmVuY3lDb2RlIChiYXNlKTtcbiAgICAgICAgICAgIHF1b3RlID0gdGhpcy5jb21tb25DdXJyZW5jeUNvZGUgKHF1b3RlKTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBiYXNlICsgJy8nICsgcXVvdGU7XG4gICAgICAgICAgICBsZXQgdGlja2VyID0gdGlja2Vyc1tpZF07XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKHN5bWJvbCBpbiB0aGlzLm1hcmtldHMpXG4gICAgICAgICAgICAgICAgbWFya2V0ID0gdGhpcy5tYXJrZXRzW3N5bWJvbF07XG4gICAgICAgICAgICBpZiAoaWQgaW4gdGhpcy5tYXJrZXRzX2J5X2lkKVxuICAgICAgICAgICAgICAgIG1hcmtldCA9IHRoaXMubWFya2V0c19ieV9pZFtpZF07XG4gICAgICAgICAgICByZXN1bHRbc3ltYm9sXSA9IHRoaXMucGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCB0aWNrZXIgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFRpY2tlcklkICh7XG4gICAgICAgICAgICAnaWQnOiBwWydpZCddLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VUaWNrZXIgKHRpY2tlciwgcCk7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldFRyYWRlSGlzdG9yeUlkICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2lkJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGlmICh0eXBlID09ICdtYXJrZXQnKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnIGFsbG93cyBsaW1pdCBvcmRlcnMgb25seScpO1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgbWV0aG9kID0gJ3ByaXZhdGVQb3N0JyArIHRoaXMuY2FwaXRhbGl6ZSAoc2lkZSk7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdjdXJyZW5jeVBhaXInOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICAgICAgJ3JhdGUnOiBwcmljZSxcbiAgICAgICAgICAgICdhbW91bnQnOiBhbW91bnQsXG4gICAgICAgIH07XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXNbbWV0aG9kXSAodGhpcy5leHRlbmQgKG9yZGVyLCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnb3JkZXJOdW1iZXInXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0Q2FuY2VsT3JkZXIgKHsgJ29yZGVyTnVtYmVyJzogaWQgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHByZWZpeCA9IChhcGkgPT0gJ3ByaXZhdGUnKSA/IChhcGkgKyAnLycpIDogJyc7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddW2FwaV0gKyB0aGlzLnZlcnNpb24gKyAnLzEvJyArIHByZWZpeCArIHRoaXMuaW1wbG9kZVBhcmFtcyAocGF0aCwgcGFyYW1zKTtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5vbWl0IChwYXJhbXMsIHRoaXMuZXh0cmFjdFBhcmFtcyAocGF0aCkpO1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHF1ZXJ5KS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChxdWVyeSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpO1xuICAgICAgICAgICAgbGV0IHJlcXVlc3QgPSB7ICdub25jZSc6IG5vbmNlIH07XG4gICAgICAgICAgICBib2R5ID0gdGhpcy51cmxlbmNvZGUgKHRoaXMuZXh0ZW5kIChyZXF1ZXN0LCBxdWVyeSkpO1xuICAgICAgICAgICAgbGV0IHNpZ25hdHVyZSA9IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKGJvZHkpLCB0aGlzLmVuY29kZSAodGhpcy5zZWNyZXQpLCAnc2hhNTEyJyk7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdLZXknOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgICAgICAnU2lnbic6IHNpZ25hdHVyZSxcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtTGVuZ3RoJzogYm9keS5sZW5ndGgudG9TdHJpbmcgKCksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdyZXN1bHQnIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlWydyZXN1bHQnXSAhPSAndHJ1ZScpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBieGludGggPSB7XG5cbiAgICAnaWQnOiAnYnhpbnRoJyxcbiAgICAnbmFtZSc6ICdCWC5pbi50aCcsXG4gICAgJ2NvdW50cmllcyc6ICdUSCcsIC8vIFRoYWlsYW5kXG4gICAgJ3JhdGVMaW1pdCc6IDE1MDAsXG4gICAgJ2hhc0ZldGNoVGlja2Vycyc6IHRydWUsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc3NjY0MTItNTY3YjFlYjQtNWVkNy0xMWU3LTk0YTgtZmY2YTM4ODRmNmM1LmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly9ieC5pbi50aC9hcGknLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vYnguaW4udGgnLFxuICAgICAgICAnZG9jJzogJ2h0dHBzOi8vYnguaW4udGgvaW5mby9hcGknLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJycsIC8vIHRpY2tlclxuICAgICAgICAgICAgICAgICdvcHRpb25zJyxcbiAgICAgICAgICAgICAgICAnb3B0aW9uYm9vaycsXG4gICAgICAgICAgICAgICAgJ29yZGVyYm9vaycsXG4gICAgICAgICAgICAgICAgJ3BhaXJpbmcnLFxuICAgICAgICAgICAgICAgICd0cmFkZScsXG4gICAgICAgICAgICAgICAgJ3RyYWRlaGlzdG9yeScsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAncHJpdmF0ZSc6IHtcbiAgICAgICAgICAgICdwb3N0JzogW1xuICAgICAgICAgICAgICAgICdiYWxhbmNlJyxcbiAgICAgICAgICAgICAgICAnYmlsbGVyJyxcbiAgICAgICAgICAgICAgICAnYmlsbGdyb3VwJyxcbiAgICAgICAgICAgICAgICAnYmlsbHBheScsXG4gICAgICAgICAgICAgICAgJ2NhbmNlbCcsXG4gICAgICAgICAgICAgICAgJ2RlcG9zaXQnLFxuICAgICAgICAgICAgICAgICdnZXRvcmRlcnMnLFxuICAgICAgICAgICAgICAgICdoaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAnb3B0aW9uLWlzc3VlJyxcbiAgICAgICAgICAgICAgICAnb3B0aW9uLWJpZCcsXG4gICAgICAgICAgICAgICAgJ29wdGlvbi1zZWxsJyxcbiAgICAgICAgICAgICAgICAnb3B0aW9uLW15aXNzdWUnLFxuICAgICAgICAgICAgICAgICdvcHRpb24tbXliaWQnLFxuICAgICAgICAgICAgICAgICdvcHRpb24tbXlvcHRpb25zJyxcbiAgICAgICAgICAgICAgICAnb3B0aW9uLWV4ZXJjaXNlJyxcbiAgICAgICAgICAgICAgICAnb3B0aW9uLWNhbmNlbCcsXG4gICAgICAgICAgICAgICAgJ29wdGlvbi1oaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAnb3JkZXInLFxuICAgICAgICAgICAgICAgICd3aXRoZHJhd2FsJyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXdhbC1oaXN0b3J5JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoTWFya2V0cyAoKSB7XG4gICAgICAgIGxldCBtYXJrZXRzID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRQYWlyaW5nICgpO1xuICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzIChtYXJrZXRzKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGxldCBwID0gMDsgcCA8IGtleXMubGVuZ3RoOyBwKyspIHtcbiAgICAgICAgICAgIGxldCBtYXJrZXQgPSBtYXJrZXRzW2tleXNbcF1dO1xuICAgICAgICAgICAgbGV0IGlkID0gbWFya2V0WydwYWlyaW5nX2lkJ10udG9TdHJpbmcgKCk7XG4gICAgICAgICAgICBsZXQgYmFzZSA9IG1hcmtldFsncHJpbWFyeV9jdXJyZW5jeSddO1xuICAgICAgICAgICAgbGV0IHF1b3RlID0gbWFya2V0WydzZWNvbmRhcnlfY3VycmVuY3knXTtcbiAgICAgICAgICAgIGJhc2UgPSB0aGlzLmNvbW1vbkN1cnJlbmN5Q29kZSAoYmFzZSk7XG4gICAgICAgICAgICBxdW90ZSA9IHRoaXMuY29tbW9uQ3VycmVuY3lDb2RlIChxdW90ZSk7XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gYmFzZSArICcvJyArIHF1b3RlO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2ggKHtcbiAgICAgICAgICAgICAgICAnaWQnOiBpZCxcbiAgICAgICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgICAgICdiYXNlJzogYmFzZSxcbiAgICAgICAgICAgICAgICAncXVvdGUnOiBxdW90ZSxcbiAgICAgICAgICAgICAgICAnaW5mbyc6IG1hcmtldCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGNvbW1vbkN1cnJlbmN5Q29kZSAoY3VycmVuY3kpIHtcbiAgICAgICAgLy8gd2h5IHdvdWxkIHRoZXkgdXNlIHRocmVlIGxldHRlcnMgaW5zdGVhZCBvZiBmb3VyIGZvciBjdXJyZW5jeSBjb2Rlc1xuICAgICAgICBpZiAoY3VycmVuY3kgPT0gJ0RBUycpXG4gICAgICAgICAgICByZXR1cm4gJ0RBU0gnO1xuICAgICAgICBpZiAoY3VycmVuY3kgPT0gJ0RPRycpXG4gICAgICAgICAgICByZXR1cm4gJ0RPR0UnO1xuICAgICAgICByZXR1cm4gY3VycmVuY3k7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RCYWxhbmNlICgpO1xuICAgICAgICBsZXQgYmFsYW5jZSA9IHJlc3BvbnNlWydiYWxhbmNlJ107XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogYmFsYW5jZSB9O1xuICAgICAgICBsZXQgY3VycmVuY2llcyA9IE9iamVjdC5rZXlzIChiYWxhbmNlKTtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBjdXJyZW5jaWVzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBjdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IGNvZGUgPSB0aGlzLmNvbW1vbkN1cnJlbmN5Q29kZSAoY3VycmVuY3kpO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiBwYXJzZUZsb2F0IChiYWxhbmNlW2N1cnJlbmN5XVsnYXZhaWxhYmxlJ10pLFxuICAgICAgICAgICAgICAgICd1c2VkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHBhcnNlRmxvYXQgKGJhbGFuY2VbY3VycmVuY3ldWyd0b3RhbCddKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhY2NvdW50Wyd1c2VkJ10gPSBhY2NvdW50Wyd0b3RhbCddIC0gYWNjb3VudFsnZnJlZSddO1xuICAgICAgICAgICAgcmVzdWx0W2NvZGVdID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRPcmRlcmJvb2sgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAncGFpcmluZyc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IFtdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaWRlcyA9IFsgJ2JpZHMnLCAnYXNrcycgXTtcbiAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBzaWRlcy5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1tzXTtcbiAgICAgICAgICAgIGxldCBvcmRlcnMgPSBvcmRlcmJvb2tbc2lkZV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBvcmRlciA9IG9yZGVyc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgcHJpY2UgPSBwYXJzZUZsb2F0IChvcmRlclswXSk7XG4gICAgICAgICAgICAgICAgbGV0IGFtb3VudCA9IHBhcnNlRmxvYXQgKG9yZGVyWzFdKTtcbiAgICAgICAgICAgICAgICByZXN1bHRbc2lkZV0ucHVzaCAoWyBwcmljZSwgYW1vdW50IF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIHBhcnNlVGlja2VyICh0aWNrZXIsIG1hcmtldCkge1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbG93JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnb3JkZXJib29rJ11bJ2JpZHMnXVsnaGlnaGJpZCddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ29yZGVyYm9vayddWydhc2tzJ11bJ2hpZ2hiaWQnXSksXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xhc3RfcHJpY2UnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogcGFyc2VGbG9hdCAodGlja2VyWydjaGFuZ2UnXSksXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbHVtZV8yNGhvdXJzJ10pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VycyAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCB0aWNrZXJzID0gYXdhaXQgdGhpcy5wdWJsaWNHZXQgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7fTtcbiAgICAgICAgbGV0IGlkcyA9IE9iamVjdC5rZXlzICh0aWNrZXJzKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCBpZCA9IGlkc1tpXTtcbiAgICAgICAgICAgIGxldCB0aWNrZXIgPSB0aWNrZXJzW2lkXTtcbiAgICAgICAgICAgIGxldCBtYXJrZXQgPSB0aGlzLm1hcmtldHNfYnlfaWRbaWRdO1xuICAgICAgICAgICAgbGV0IHN5bWJvbCA9IG1hcmtldFsnc3ltYm9sJ107XG4gICAgICAgICAgICByZXN1bHRbc3ltYm9sXSA9IHRoaXMucGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCB0aWNrZXJzID0gYXdhaXQgdGhpcy5wdWJsaWNHZXQgKHsgJ3BhaXJpbmcnOiBwWydpZCddIH0pO1xuICAgICAgICBsZXQgaWQgPSBwWydpZCddLnRvU3RyaW5nICgpO1xuICAgICAgICBsZXQgdGlja2VyID0gdGlja2Vyc1tpZF07XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIHApO1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wdWJsaWNHZXRUcmFkZSAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdwYWlyaW5nJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RPcmRlciAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdwYWlyaW5nJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICd0eXBlJzogc2lkZSxcbiAgICAgICAgICAgICdhbW91bnQnOiBhbW91bnQsXG4gICAgICAgICAgICAncmF0ZSc6IHByaWNlLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnb3JkZXJfaWQnXS50b1N0cmluZyAoKSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBwYWlyaW5nID0gdW5kZWZpbmVkOyAvLyBUT0RPIGZpeG1lXG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0Q2FuY2VsICh7XG4gICAgICAgICAgICAnb3JkZXJfaWQnOiBpZCxcbiAgICAgICAgICAgICdwYWlyaW5nJzogcGFpcmluZyxcbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ10gKyAnLyc7XG4gICAgICAgIGlmIChwYXRoKVxuICAgICAgICAgICAgdXJsICs9IHBhdGggKyAnLyc7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyAocGFyYW1zKS5sZW5ndGgpXG4gICAgICAgICAgICB1cmwgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHBhcmFtcyk7XG4gICAgICAgIGlmIChhcGkgPT0gJ3ByaXZhdGUnKSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpO1xuICAgICAgICAgICAgbGV0IGF1dGggPSB0aGlzLmFwaUtleSArIG5vbmNlLnRvU3RyaW5nICgpICsgdGhpcy5zZWNyZXQ7XG4gICAgICAgICAgICBsZXQgc2lnbmF0dXJlID0gdGhpcy5oYXNoICh0aGlzLmVuY29kZSAoYXV0aCksICdzaGEyNTYnKTtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLnVybGVuY29kZSAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICAgICAna2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ25vbmNlJzogbm9uY2UsXG4gICAgICAgICAgICAgICAgJ3NpZ25hdHVyZSc6IHNpZ25hdHVyZSxcbiAgICAgICAgICAgICAgICAvLyB0d29mYTogdGhpcy50d29mYSxcbiAgICAgICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtTGVuZ3RoJzogYm9keS5sZW5ndGgsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJylcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgaWYgKCdzdWNjZXNzJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIGlmIChyZXNwb25zZVsnc3VjY2VzcyddKVxuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgY2NleCA9IHtcblxuICAgICdpZCc6ICdjY2V4JyxcbiAgICAnbmFtZSc6ICdDLUNFWCcsXG4gICAgJ2NvdW50cmllcyc6IFsgJ0RFJywgJ0VVJyBdLFxuICAgICdyYXRlTGltaXQnOiAxNTAwLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2NDMzLTE2ODgxZjkwLTVlZDgtMTFlNy05MmY4LTNkOTJjYzc0N2E2Yy5qcGcnLFxuICAgICAgICAnYXBpJzoge1xuICAgICAgICAgICAgJ3RpY2tlcnMnOiAnaHR0cHM6Ly9jLWNleC5jb20vdCcsXG4gICAgICAgICAgICAncHVibGljJzogJ2h0dHBzOi8vYy1jZXguY29tL3QvYXBpX3B1Yi5odG1sJyxcbiAgICAgICAgICAgICdwcml2YXRlJzogJ2h0dHBzOi8vYy1jZXguY29tL3QvYXBpLmh0bWwnLFxuICAgICAgICB9LFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vYy1jZXguY29tJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL2MtY2V4LmNvbS8/aWQ9YXBpJyxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICd0aWNrZXJzJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnY29pbm5hbWVzJyxcbiAgICAgICAgICAgICAgICAne21hcmtldH0nLFxuICAgICAgICAgICAgICAgICdwYWlycycsXG4gICAgICAgICAgICAgICAgJ3ByaWNlcycsXG4gICAgICAgICAgICAgICAgJ3ZvbHVtZV97Y29pbn0nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ2JhbGFuY2VkaXN0cmlidXRpb24nLFxuICAgICAgICAgICAgICAgICdtYXJrZXRoaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAnbWFya2V0cycsXG4gICAgICAgICAgICAgICAgJ21hcmtldHN1bW1hcmllcycsXG4gICAgICAgICAgICAgICAgJ29yZGVyYm9vaycsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAncHJpdmF0ZSc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ2J1eWxpbWl0JyxcbiAgICAgICAgICAgICAgICAnY2FuY2VsJyxcbiAgICAgICAgICAgICAgICAnZ2V0YmFsYW5jZScsXG4gICAgICAgICAgICAgICAgJ2dldGJhbGFuY2VzJyxcbiAgICAgICAgICAgICAgICAnZ2V0b3Blbm9yZGVycycsXG4gICAgICAgICAgICAgICAgJ2dldG9yZGVyJyxcbiAgICAgICAgICAgICAgICAnZ2V0b3JkZXJoaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAnbXl0cmFkZXMnLFxuICAgICAgICAgICAgICAgICdzZWxsbGltaXQnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hNYXJrZXRzICgpIHtcbiAgICAgICAgbGV0IG1hcmtldHMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgcCA9IDA7IHAgPCBtYXJrZXRzWydyZXN1bHQnXS5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IG1hcmtldHNbJ3Jlc3VsdCddW3BdO1xuICAgICAgICAgICAgbGV0IGlkID0gbWFya2V0WydNYXJrZXROYW1lJ107XG4gICAgICAgICAgICBsZXQgYmFzZSA9IG1hcmtldFsnTWFya2V0Q3VycmVuY3knXTtcbiAgICAgICAgICAgIGxldCBxdW90ZSA9IG1hcmtldFsnQmFzZUN1cnJlbmN5J107XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gYmFzZSArICcvJyArIHF1b3RlO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2ggKHtcbiAgICAgICAgICAgICAgICAnaWQnOiBpZCxcbiAgICAgICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgICAgICdiYXNlJzogYmFzZSxcbiAgICAgICAgICAgICAgICAncXVvdGUnOiBxdW90ZSxcbiAgICAgICAgICAgICAgICAnaW5mbyc6IG1hcmtldCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZUdldEJhbGFuY2VzICgpO1xuICAgICAgICBsZXQgYmFsYW5jZXMgPSByZXNwb25zZVsncmVzdWx0J107XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogYmFsYW5jZXMgfTtcbiAgICAgICAgZm9yIChsZXQgYiA9IDA7IGIgPCBiYWxhbmNlcy5sZW5ndGg7IGIrKykge1xuICAgICAgICAgICAgbGV0IGJhbGFuY2UgPSBiYWxhbmNlc1tiXTtcbiAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IGJhbGFuY2VbJ0N1cnJlbmN5J107XG4gICAgICAgICAgICBsZXQgYWNjb3VudCA9IHtcbiAgICAgICAgICAgICAgICAnZnJlZSc6IGJhbGFuY2VbJ0F2YWlsYWJsZSddLFxuICAgICAgICAgICAgICAgICd1c2VkJzogYmFsYW5jZVsnUGVuZGluZyddLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IGJhbGFuY2VbJ0JhbGFuY2UnXSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldE9yZGVyYm9vayAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdtYXJrZXQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICAgICAgJ3R5cGUnOiAnYm90aCcsXG4gICAgICAgICAgICAnZGVwdGgnOiAxMDAsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgb3JkZXJib29rID0gcmVzcG9uc2VbJ3Jlc3VsdCddO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IFtdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaWRlcyA9IHsgJ2JpZHMnOiAnYnV5JywgJ2Fza3MnOiAnc2VsbCcgfTtcbiAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyAoc2lkZXMpO1xuICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGtleXMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgIGxldCBrZXkgPSBrZXlzW2tdO1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1trZXldO1xuICAgICAgICAgICAgbGV0IG9yZGVycyA9IG9yZGVyYm9va1tzaWRlXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9yZGVyID0gb3JkZXJzW2ldO1xuICAgICAgICAgICAgICAgIGxldCBwcmljZSA9IHBhcnNlRmxvYXQgKG9yZGVyWydSYXRlJ10pO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBwYXJzZUZsb2F0IChvcmRlclsnUXVhbnRpdHknXSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W2tleV0ucHVzaCAoWyBwcmljZSwgYW1vdW50IF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIHBhcnNlVGlja2VyICh0aWNrZXIsIG1hcmtldCkge1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGlja2VyWyd1cGRhdGVkJ10gKiAxMDAwO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydoaWdoJ10pLFxuICAgICAgICAgICAgJ2xvdyc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbG93J10pLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYnV5J10pLFxuICAgICAgICAgICAgJ2Fzayc6IHBhcnNlRmxvYXQgKHRpY2tlclsnc2VsbCddKSxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdHByaWNlJ10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2F2ZyddKSxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWydidXlzdXBwb3J0J10pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy50aWNrZXJzR2V0TWFya2V0ICh7XG4gICAgICAgICAgICAnbWFya2V0JzogcFsnaWQnXS50b0xvd2VyQ2FzZSAoKSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aWNrZXIgPSByZXNwb25zZVsndGlja2VyJ107XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIHApO1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wdWJsaWNHZXRNYXJrZXRoaXN0b3J5ICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ21hcmtldCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgICAgICAndHlwZSc6ICdib3RoJyxcbiAgICAgICAgICAgICdkZXB0aCc6IDEwMCxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBtZXRob2QgPSAncHJpdmF0ZUdldCcgKyB0aGlzLmNhcGl0YWxpemUgKHNpZGUpICsgdHlwZTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpc1ttZXRob2RdICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ21hcmtldCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgICAgICAncXVhbnRpdHknOiBhbW91bnQsXG4gICAgICAgICAgICAncmF0ZSc6IHByaWNlLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsncmVzdWx0J11bJ3V1aWQnXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVHZXRDYW5jZWwgKHsgJ3V1aWQnOiBpZCB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXVthcGldO1xuICAgICAgICBpZiAoYXBpID09ICdwcml2YXRlJykge1xuICAgICAgICAgICAgbGV0IG5vbmNlID0gdGhpcy5ub25jZSAoKS50b1N0cmluZyAoKTtcbiAgICAgICAgICAgIGxldCBxdWVyeSA9IHRoaXMua2V5c29ydCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICAgICAnYSc6IHBhdGgsXG4gICAgICAgICAgICAgICAgJ2FwaWtleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgICAgICdub25jZSc6IG5vbmNlLFxuICAgICAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgICAgICB1cmwgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHF1ZXJ5KTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7ICdhcGlzaWduJzogdGhpcy5obWFjICh0aGlzLmVuY29kZSAodXJsKSwgdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSwgJ3NoYTUxMicpIH07XG4gICAgICAgIH0gZWxzZSBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICB1cmwgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAgICAgJ2EnOiAnZ2V0JyArIHBhdGgsXG4gICAgICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHVybCArPSAnLycgKyB0aGlzLmltcGxvZGVQYXJhbXMgKHBhdGgsIHBhcmFtcykgKyAnLmpzb24nO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKGFwaSA9PSAndGlja2VycycpXG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgIGlmICgnc3VjY2VzcycgaW4gcmVzcG9uc2UpXG4gICAgICAgICAgICBpZiAocmVzcG9uc2VbJ3N1Y2Nlc3MnXSlcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGNleCA9IHtcblxuICAgICdpZCc6ICdjZXgnLFxuICAgICduYW1lJzogJ0NFWC5JTycsXG4gICAgJ2NvdW50cmllcyc6IFsgJ0dCJywgJ0VVJywgJ0NZJywgJ1JVJyBdLFxuICAgICdyYXRlTGltaXQnOiAxNTAwLFxuICAgICdoYXNGZXRjaFRpY2tlcnMnOiB0cnVlLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2NDQyLThkZGMzM2IwLTVlZDgtMTFlNy04Yjk4LWY3ODZhZWYwZjNjOS5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vY2V4LmlvL2FwaScsXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly9jZXguaW8nLFxuICAgICAgICAnZG9jJzogJ2h0dHBzOi8vY2V4LmlvL2NleC1hcGknLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ2N1cnJlbmN5X2xpbWl0cycsXG4gICAgICAgICAgICAgICAgJ2xhc3RfcHJpY2Uve3BhaXJ9JyxcbiAgICAgICAgICAgICAgICAnbGFzdF9wcmljZXMve2N1cnJlbmNpZXN9JyxcbiAgICAgICAgICAgICAgICAnb2hsY3YvaGQve3l5eXltbWRkfS97cGFpcn0nLFxuICAgICAgICAgICAgICAgICdvcmRlcl9ib29rL3twYWlyfScsXG4gICAgICAgICAgICAgICAgJ3RpY2tlci97cGFpcn0nLFxuICAgICAgICAgICAgICAgICd0aWNrZXJzL3tjdXJyZW5jaWVzfScsXG4gICAgICAgICAgICAgICAgJ3RyYWRlX2hpc3Rvcnkve3BhaXJ9JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnY29udmVydC97cGFpcn0nLFxuICAgICAgICAgICAgICAgICdwcmljZV9zdGF0cy97cGFpcn0nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnYWN0aXZlX29yZGVyc19zdGF0dXMvJyxcbiAgICAgICAgICAgICAgICAnYXJjaGl2ZWRfb3JkZXJzL3twYWlyfScsXG4gICAgICAgICAgICAgICAgJ2JhbGFuY2UvJyxcbiAgICAgICAgICAgICAgICAnY2FuY2VsX29yZGVyLycsXG4gICAgICAgICAgICAgICAgJ2NhbmNlbF9vcmRlcnMve3BhaXJ9JyxcbiAgICAgICAgICAgICAgICAnY2FuY2VsX3JlcGxhY2Vfb3JkZXIve3BhaXJ9JyxcbiAgICAgICAgICAgICAgICAnY2xvc2VfcG9zaXRpb24ve3BhaXJ9JyxcbiAgICAgICAgICAgICAgICAnZ2V0X2FkZHJlc3MvJyxcbiAgICAgICAgICAgICAgICAnZ2V0X215ZmVlLycsXG4gICAgICAgICAgICAgICAgJ2dldF9vcmRlci8nLFxuICAgICAgICAgICAgICAgICdnZXRfb3JkZXJfdHgvJyxcbiAgICAgICAgICAgICAgICAnb3Blbl9vcmRlcnMve3BhaXJ9JyxcbiAgICAgICAgICAgICAgICAnb3Blbl9vcmRlcnMvJyxcbiAgICAgICAgICAgICAgICAnb3Blbl9wb3NpdGlvbi97cGFpcn0nLFxuICAgICAgICAgICAgICAgICdvcGVuX3Bvc2l0aW9ucy97cGFpcn0nLFxuICAgICAgICAgICAgICAgICdwbGFjZV9vcmRlci97cGFpcn0nLFxuICAgICAgICAgICAgICAgICdwbGFjZV9vcmRlci97cGFpcn0nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE1hcmtldHMgKCkge1xuICAgICAgICBsZXQgbWFya2V0cyA9IGF3YWl0IHRoaXMucHVibGljR2V0Q3VycmVuY3lMaW1pdHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgcCA9IDA7IHAgPCBtYXJrZXRzWydkYXRhJ11bJ3BhaXJzJ10ubGVuZ3RoOyBwKyspIHtcbiAgICAgICAgICAgIGxldCBtYXJrZXQgPSBtYXJrZXRzWydkYXRhJ11bJ3BhaXJzJ11bcF07XG4gICAgICAgICAgICBsZXQgaWQgPSBtYXJrZXRbJ3N5bWJvbDEnXSArICcvJyArIG1hcmtldFsnc3ltYm9sMiddO1xuICAgICAgICAgICAgbGV0IHN5bWJvbCA9IGlkO1xuICAgICAgICAgICAgbGV0IFsgYmFzZSwgcXVvdGUgXSA9IHN5bWJvbC5zcGxpdCAoJy8nKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoICh7XG4gICAgICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgICAgICAgICAgJ3N5bWJvbCc6IHN5bWJvbCxcbiAgICAgICAgICAgICAgICAnYmFzZSc6IGJhc2UsXG4gICAgICAgICAgICAgICAgJ3F1b3RlJzogcXVvdGUsXG4gICAgICAgICAgICAgICAgJ2luZm8nOiBtYXJrZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgYmFsYW5jZXMgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0QmFsYW5jZSAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiBiYWxhbmNlcyB9O1xuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IHRoaXMuY3VycmVuY2llcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gdGhpcy5jdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiBwYXJzZUZsb2F0IChiYWxhbmNlc1tjdXJyZW5jeV1bJ2F2YWlsYWJsZSddKSxcbiAgICAgICAgICAgICAgICAndXNlZCc6IHBhcnNlRmxvYXQgKGJhbGFuY2VzW2N1cnJlbmN5XVsnb3JkZXJzJ10pLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhY2NvdW50Wyd0b3RhbCddID0gdGhpcy5zdW0gKGFjY291bnRbJ2ZyZWUnXSwgYWNjb3VudFsndXNlZCddKTtcbiAgICAgICAgICAgIHJlc3VsdFtjdXJyZW5jeV0gPSBhY2NvdW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSBhd2FpdCAgdGhpcy5wdWJsaWNHZXRPcmRlckJvb2tQYWlyICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ3BhaXInOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IG9yZGVyYm9va1sndGltZXN0YW1wJ10gKiAxMDAwO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBvcmRlcmJvb2tbJ2JpZHMnXSxcbiAgICAgICAgICAgICdhc2tzJzogb3JkZXJib29rWydhc2tzJ10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBwYXJzZVRpY2tlciAodGlja2VyLCBtYXJrZXQpIHtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHBhcnNlSW50ICh0aWNrZXJbJ3RpbWVzdGFtcCddKSAqIDEwMDA7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2hpZ2gnXSksXG4gICAgICAgICAgICAnbG93JzogcGFyc2VGbG9hdCAodGlja2VyWydsb3cnXSksXG4gICAgICAgICAgICAnYmlkJzogcGFyc2VGbG9hdCAodGlja2VyWydiaWQnXSksXG4gICAgICAgICAgICAnYXNrJzogcGFyc2VGbG9hdCAodGlja2VyWydhc2snXSksXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xhc3QnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWyd2b2x1bWUnXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXJzICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IGN1cnJlbmNpZXMgPSB0aGlzLmN1cnJlbmNpZXMuam9pbiAoJy8nKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRUaWNrZXJzQ3VycmVuY2llcyAoe1xuICAgICAgICAgICAgJ2N1cnJlbmNpZXMnOiBjdXJyZW5jaWVzLFxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IHRpY2tlcnMgPSByZXNwb25zZVsnZGF0YSddO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge307XG4gICAgICAgIGZvciAobGV0IHQgPSAwOyB0IDwgdGlja2Vycy5sZW5ndGg7IHQrKykge1xuICAgICAgICAgICAgbGV0IHRpY2tlciA9IHRpY2tlcnNbdF07XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gdGlja2VyWydwYWlyJ10ucmVwbGFjZSAoJzonLCAnLycpO1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IHRoaXMubWFya2V0c1tzeW1ib2xdO1xuICAgICAgICAgICAgcmVzdWx0W3N5bWJvbF0gPSB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIG1hcmtldCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgdGlja2VyID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRUaWNrZXJQYWlyICh7XG4gICAgICAgICAgICAncGFpcic6IHBbJ2lkJ10sXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVRpY2tlciAodGlja2VyLCBwKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0VHJhZGVIaXN0b3J5UGFpciAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdwYWlyJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdwYWlyJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICd0eXBlJzogc2lkZSxcbiAgICAgICAgICAgICdhbW91bnQnOiBhbW91bnQsXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlID09ICdsaW1pdCcpXG4gICAgICAgICAgICBvcmRlclsncHJpY2UnXSA9IHByaWNlO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBvcmRlclsnb3JkZXJfdHlwZSddID0gdHlwZTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdFBsYWNlT3JkZXJQYWlyICh0aGlzLmV4dGVuZCAob3JkZXIsIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXNwb25zZSxcbiAgICAgICAgICAgICdpZCc6IHJlc3BvbnNlWydpZCddLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJpdmF0ZVBvc3RDYW5jZWxPcmRlciAoeyAnaWQnOiBpZCB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArICcvJyArIHRoaXMuaW1wbG9kZVBhcmFtcyAocGF0aCwgcGFyYW1zKTtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5vbWl0IChwYXJhbXMsIHRoaXMuZXh0cmFjdFBhcmFtcyAocGF0aCkpO1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHF1ZXJ5KS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChxdWVyeSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMudWlkKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBBdXRoZW50aWNhdGlvbkVycm9yICh0aGlzLmlkICsgJyByZXF1aXJlcyBgJyArIHRoaXMuaWQgKyAnLnVpZGAgcHJvcGVydHkgZm9yIGF1dGhlbnRpY2F0aW9uJyk7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpLnRvU3RyaW5nICgpO1xuICAgICAgICAgICAgbGV0IGF1dGggPSBub25jZSArIHRoaXMudWlkICsgdGhpcy5hcGlLZXk7XG4gICAgICAgICAgICBsZXQgc2lnbmF0dXJlID0gdGhpcy5obWFjICh0aGlzLmVuY29kZSAoYXV0aCksIHRoaXMuZW5jb2RlICh0aGlzLnNlY3JldCkpO1xuICAgICAgICAgICAgYm9keSA9IHRoaXMudXJsZW5jb2RlICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgICAgICdrZXknOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgICAgICAnc2lnbmF0dXJlJzogc2lnbmF0dXJlLnRvVXBwZXJDYXNlICgpLFxuICAgICAgICAgICAgICAgICdub25jZSc6IG5vbmNlLFxuICAgICAgICAgICAgfSwgcXVlcnkpKTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgICAgICAgICdDb250ZW50LUxlbmd0aCc6IGJvZHkubGVuZ3RoLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgICAgIGlmICgnZScgaW4gcmVzcG9uc2UpIHtcbiAgICAgICAgICAgIGlmICgnb2snIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZVsnb2snXSA9PSAnb2snKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgJyArIHRoaXMuanNvbiAocmVzcG9uc2UpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgY2hidGMgPSB7XG4gICAgJ2lkJzogJ2NoYnRjJyxcbiAgICAnbmFtZSc6ICdDSEJUQycsXG4gICAgJ2NvdW50cmllcyc6ICdDTicsXG4gICAgJ3JhdGVMaW1pdCc6IDEwMDAsXG4gICAgJ3ZlcnNpb24nOiAndjEnLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI4NTU1NjU5LWYwMDQwZGMyLTcxMDktMTFlNy05ZDk5LTY4OGE0MzhiZjlmNC5qcGcnLFxuICAgICAgICAnYXBpJzoge1xuICAgICAgICAgICAgJ3B1YmxpYyc6ICdodHRwOi8vYXBpLmNoYnRjLmNvbS9kYXRhJywgLy8gbm8gaHR0cHMgZm9yIHB1YmxpYyBBUElcbiAgICAgICAgICAgICdwcml2YXRlJzogJ2h0dHBzOi8vdHJhZGUuY2hidGMuY29tL2FwaScsXG4gICAgICAgIH0sXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly90cmFkZS5jaGJ0Yy5jb20vYXBpJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL3d3dy5jaGJ0Yy5jb20vaS9kZXZlbG9wZXInLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ3RpY2tlcicsXG4gICAgICAgICAgICAgICAgJ2RlcHRoJyxcbiAgICAgICAgICAgICAgICAndHJhZGVzJyxcbiAgICAgICAgICAgICAgICAna2xpbmUnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnb3JkZXInLFxuICAgICAgICAgICAgICAgICdjYW5jZWxPcmRlcicsXG4gICAgICAgICAgICAgICAgJ2dldE9yZGVyJyxcbiAgICAgICAgICAgICAgICAnZ2V0T3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnZ2V0T3JkZXJzTmV3JyxcbiAgICAgICAgICAgICAgICAnZ2V0T3JkZXJzSWdub3JlVHJhZGVUeXBlJyxcbiAgICAgICAgICAgICAgICAnZ2V0VW5maW5pc2hlZE9yZGVyc0lnbm9yZVRyYWRlVHlwZScsXG4gICAgICAgICAgICAgICAgJ2dldEFjY291bnRJbmZvJyxcbiAgICAgICAgICAgICAgICAnZ2V0VXNlckFkZHJlc3MnLFxuICAgICAgICAgICAgICAgICdnZXRXaXRoZHJhd0FkZHJlc3MnLFxuICAgICAgICAgICAgICAgICdnZXRXaXRoZHJhd1JlY29yZCcsXG4gICAgICAgICAgICAgICAgJ2dldENoYXJnZVJlY29yZCcsXG4gICAgICAgICAgICAgICAgJ2dldENueVdpdGhkcmF3UmVjb3JkJyxcbiAgICAgICAgICAgICAgICAnZ2V0Q255Q2hhcmdlUmVjb3JkJyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXcnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgICdtYXJrZXRzJzoge1xuICAgICAgICAnQlRDL0NOWSc6IHsgJ2lkJzogJ2J0Y19jbnknLCAnc3ltYm9sJzogJ0JUQy9DTlknLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnQ05ZJyB9LFxuICAgICAgICAnTFRDL0NOWSc6IHsgJ2lkJzogJ2x0Y19jbnknLCAnc3ltYm9sJzogJ0xUQy9DTlknLCAnYmFzZSc6ICdMVEMnLCAncXVvdGUnOiAnQ05ZJyB9LFxuICAgICAgICAnRVRIL0NOWSc6IHsgJ2lkJzogJ2V0aF9jbnknLCAnc3ltYm9sJzogJ0VUSC9DTlknLCAnYmFzZSc6ICdFVEgnLCAncXVvdGUnOiAnQ05ZJyB9LFxuICAgICAgICAnRVRDL0NOWSc6IHsgJ2lkJzogJ2V0Y19jbnknLCAnc3ltYm9sJzogJ0VUQy9DTlknLCAnYmFzZSc6ICdFVEMnLCAncXVvdGUnOiAnQ05ZJyB9LFxuICAgICAgICAnQlRTL0NOWSc6IHsgJ2lkJzogJ2J0c19jbnknLCAnc3ltYm9sJzogJ0JUUy9DTlknLCAnYmFzZSc6ICdCVFMnLCAncXVvdGUnOiAnQ05ZJyB9LFxuICAgICAgICAnRU9TL0NOWSc6IHsgJ2lkJzogJ2Vvc19jbnknLCAnc3ltYm9sJzogJ0VPUy9DTlknLCAnYmFzZSc6ICdFT1MnLCAncXVvdGUnOiAnQ05ZJyB9LFxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0R2V0QWNjb3VudEluZm8gKCk7XG4gICAgICAgIGxldCBiYWxhbmNlcyA9IHJlc3BvbnNlWydyZXN1bHQnXTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiBiYWxhbmNlcyB9O1xuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IHRoaXMuY3VycmVuY2llcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gdGhpcy5jdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChjdXJyZW5jeSBpbiBiYWxhbmNlc1snYmFsYW5jZSddKVxuICAgICAgICAgICAgICAgIGFjY291bnRbJ2ZyZWUnXSA9IGJhbGFuY2VzWydiYWxhbmNlJ11bY3VycmVuY3ldWydhbW91bnQnXTtcbiAgICAgICAgICAgIGlmIChjdXJyZW5jeSBpbiBiYWxhbmNlc1snZnJvemVuJ10pXG4gICAgICAgICAgICAgICAgYWNjb3VudFsndXNlZCddID0gYmFsYW5jZXNbJ2Zyb3plbiddW2N1cnJlbmN5XVsnYW1vdW50J107XG4gICAgICAgICAgICBhY2NvdW50Wyd0b3RhbCddID0gdGhpcy5zdW0gKGFjY291bnRbJ2ZyZWUnXSwgYWNjb3VudFsndXNlZCddKTtcbiAgICAgICAgICAgIHJlc3VsdFtjdXJyZW5jeV0gPSBhY2NvdW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSBhd2FpdCB0aGlzLnB1YmxpY0dldERlcHRoICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2N1cnJlbmN5JzogcFsnaWQnXSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgbGV0IGJpZHMgPSB1bmRlZmluZWQ7XG4gICAgICAgIGxldCBhc2tzID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoJ2JpZHMnIGluIG9yZGVyYm9vaylcbiAgICAgICAgICAgIGJpZHMgPSBvcmRlcmJvb2tbJ2JpZHMnXTtcbiAgICAgICAgaWYgKCdhc2tzJyBpbiBvcmRlcmJvb2spXG4gICAgICAgICAgICBhc2tzID0gb3JkZXJib29rWydhc2tzJ107XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IGJpZHMsXG4gICAgICAgICAgICAnYXNrcyc6IGFza3MsXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBpZiAocmVzdWx0WydiaWRzJ10pXG4gICAgICAgICAgICByZXN1bHRbJ2JpZHMnXSA9IHRoaXMuc29ydEJ5IChyZXN1bHRbJ2JpZHMnXSwgMCwgdHJ1ZSk7XG4gICAgICAgIGlmIChyZXN1bHRbJ2Fza3MnXSlcbiAgICAgICAgICAgIHJlc3VsdFsnYXNrcyddID0gdGhpcy5zb3J0QnkgKHJlc3VsdFsnYXNrcyddLCAwKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFRpY2tlciAoe1xuICAgICAgICAgICAgJ2N1cnJlbmN5JzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aWNrZXIgPSByZXNwb25zZVsndGlja2VyJ107XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2J1eSddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3NlbGwnXSksXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xhc3QnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWyd2b2wnXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0VHJhZGVzICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2N1cnJlbmN5JzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBwYXJhbVN0cmluZyA9ICcmcHJpY2U9JyArIHByaWNlLnRvU3RyaW5nICgpO1xuICAgICAgICBwYXJhbVN0cmluZyArPSAnJmFtb3VudD0nICsgYW1vdW50LnRvU3RyaW5nICgpO1xuICAgICAgICBsZXQgdHJhZGVUeXBlID0gKHNpZGUgPT0gJ2J1eScpID8gJzEnIDogJzAnO1xuICAgICAgICBwYXJhbVN0cmluZyArPSAnJnRyYWRlVHlwZT0nICsgdHJhZGVUeXBlO1xuICAgICAgICBwYXJhbVN0cmluZyArPSAnJmN1cnJlbmN5PScgKyB0aGlzLm1hcmtldElkIChtYXJrZXQpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0T3JkZXIgKHBhcmFtU3RyaW5nKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnaWQnXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgcGFyYW1TdHJpbmcgPSAnJmlkPScgKyBpZC50b1N0cmluZyAoKTtcbiAgICAgICAgaWYgKCdjdXJyZW5jeScgaW4gcGFyYW1zKVxuICAgICAgICAgICAgcGFyYW1TdHJpbmcgKz0gJyZjdXJyZW5jeT0nICsgcGFyYW1zWydjdXJyZW5jeSddO1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdENhbmNlbE9yZGVyIChwYXJhbVN0cmluZyk7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXIgKGlkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgcGFyYW1TdHJpbmcgPSAnJmlkPScgKyBpZC50b1N0cmluZyAoKTtcbiAgICAgICAgaWYgKCdjdXJyZW5jeScgaW4gcGFyYW1zKVxuICAgICAgICAgICAgcGFyYW1TdHJpbmcgKz0gJyZjdXJyZW5jeT0nICsgcGFyYW1zWydjdXJyZW5jeSddO1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdEdldE9yZGVyIChwYXJhbVN0cmluZyk7XG4gICAgfSxcblxuICAgIG5vbmNlICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddW2FwaV07XG4gICAgICAgIGlmIChhcGkgPT0gJ3B1YmxpYycpIHtcbiAgICAgICAgICAgIHVybCArPSAnLycgKyB0aGlzLnZlcnNpb24gKyAnLycgKyBwYXRoO1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChwYXJhbXMpLmxlbmd0aClcbiAgICAgICAgICAgICAgICB1cmwgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHBhcmFtcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgcGFyYW1zTGVuZ3RoID0gcGFyYW1zLmxlbmd0aDsgLy8gcGFyYW1zIHNob3VsZCBiZSBhIHN0cmluZyBoZXJlXG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpO1xuICAgICAgICAgICAgbGV0IGF1dGggPSAnbWV0aG9kPScgKyBwYXRoO1xuICAgICAgICAgICAgYXV0aCArPSAnJmFjY2Vzc2tleT0nICsgdGhpcy5hcGlLZXk7XG4gICAgICAgICAgICBhdXRoICs9IHBhcmFtc0xlbmd0aCA/IHBhcmFtcyA6ICcnO1xuICAgICAgICAgICAgbGV0IHNlY3JldCA9IHRoaXMuaGFzaCAodGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSwgJ3NoYTEnKTtcbiAgICAgICAgICAgIGxldCBzaWduYXR1cmUgPSB0aGlzLmhtYWMgKHRoaXMuZW5jb2RlIChhdXRoKSwgdGhpcy5lbmNvZGUgKHNlY3JldCksICdtZDUnKTtcbiAgICAgICAgICAgIGxldCBzdWZmaXggPSAnc2lnbj0nICsgc2lnbmF0dXJlICsgJyZyZXFUaW1lPScgKyBub25jZS50b1N0cmluZyAoKTtcbiAgICAgICAgICAgIHVybCArPSAnLycgKyBwYXRoICsgJz8nICsgYXV0aCArICcmJyArIHN1ZmZpeDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgICAgIGlmIChhcGkgPT0gJ3ByaXZhdGUnKVxuICAgICAgICAgICAgaWYgKCdjb2RlJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgJyArIHRoaXMuanNvbiAocmVzcG9uc2UpKTtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGNoaWxlYml0ID0gZXh0ZW5kIChibGlua3RyYWRlLCB7XG4gICAgJ2lkJzogJ2NoaWxlYml0JyxcbiAgICAnbmFtZSc6ICdDaGlsZUJpdCcsXG4gICAgJ2NvdW50cmllcyc6ICdDTCcsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc5OTE0MTQtMTI5OGYwZDgtNjQ3Zi0xMWU3LTljNDAtZDU2NDA5MjY2MzM2LmpwZycsXG4gICAgICAgICdhcGknOiB7XG4gICAgICAgICAgICAncHVibGljJzogJ2h0dHBzOi8vYXBpLmJsaW5rdHJhZGUuY29tL2FwaScsXG4gICAgICAgICAgICAncHJpdmF0ZSc6ICdodHRwczovL2FwaS5ibGlua3RyYWRlLmNvbS90YXBpJyxcbiAgICAgICAgfSxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL2NoaWxlYml0Lm5ldCcsXG4gICAgICAgICdkb2MnOiAnaHR0cHM6Ly9ibGlua3RyYWRlLmNvbS9kb2NzJyxcbiAgICB9LFxuICAgICdjb21tZW50JzogJ0JsaW5rdHJhZGUgQVBJJyxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9DTFAnOiB7ICdpZCc6ICdCVENDTFAnLCAnc3ltYm9sJzogJ0JUQy9DTFAnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnQ0xQJywgJ2Jyb2tlcklkJzogOSwgJ2Jyb2tlcic6ICdDaGlsZUJpdCcgfSxcbiAgICB9LFxufSlcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgY29pbmNoZWNrID0ge1xuXG4gICAgJ2lkJzogJ2NvaW5jaGVjaycsXG4gICAgJ25hbWUnOiAnY29pbmNoZWNrJyxcbiAgICAnY291bnRyaWVzJzogWyAnSlAnLCAnSUQnIF0sXG4gICAgJ3JhdGVMaW1pdCc6IDE1MDAsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc3NjY0NjQtM2I1YzNjNzQtNWVkOS0xMWU3LTg0MGUtMzFiMzI5NjhlMWRhLmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly9jb2luY2hlY2suY29tL2FwaScsXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly9jb2luY2hlY2suY29tJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL2NvaW5jaGVjay5jb20vZG9jdW1lbnRzL2V4Y2hhbmdlL2FwaScsXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnZXhjaGFuZ2Uvb3JkZXJzL3JhdGUnLFxuICAgICAgICAgICAgICAgICdvcmRlcl9ib29rcycsXG4gICAgICAgICAgICAgICAgJ3JhdGUve3BhaXJ9JyxcbiAgICAgICAgICAgICAgICAndGlja2VyJyxcbiAgICAgICAgICAgICAgICAndHJhZGVzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnYWNjb3VudHMnLFxuICAgICAgICAgICAgICAgICdhY2NvdW50cy9iYWxhbmNlJyxcbiAgICAgICAgICAgICAgICAnYWNjb3VudHMvbGV2ZXJhZ2VfYmFsYW5jZScsXG4gICAgICAgICAgICAgICAgJ2JhbmtfYWNjb3VudHMnLFxuICAgICAgICAgICAgICAgICdkZXBvc2l0X21vbmV5JyxcbiAgICAgICAgICAgICAgICAnZXhjaGFuZ2Uvb3JkZXJzL29wZW5zJyxcbiAgICAgICAgICAgICAgICAnZXhjaGFuZ2Uvb3JkZXJzL3RyYW5zYWN0aW9ucycsXG4gICAgICAgICAgICAgICAgJ2V4Y2hhbmdlL29yZGVycy90cmFuc2FjdGlvbnNfcGFnaW5hdGlvbicsXG4gICAgICAgICAgICAgICAgJ2V4Y2hhbmdlL2xldmVyYWdlL3Bvc2l0aW9ucycsXG4gICAgICAgICAgICAgICAgJ2xlbmRpbmcvYm9ycm93cy9tYXRjaGVzJyxcbiAgICAgICAgICAgICAgICAnc2VuZF9tb25leScsXG4gICAgICAgICAgICAgICAgJ3dpdGhkcmF3cycsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2JhbmtfYWNjb3VudHMnLFxuICAgICAgICAgICAgICAgICdkZXBvc2l0X21vbmV5L3tpZH0vZmFzdCcsXG4gICAgICAgICAgICAgICAgJ2V4Y2hhbmdlL29yZGVycycsXG4gICAgICAgICAgICAgICAgJ2V4Y2hhbmdlL3RyYW5zZmVycy90b19sZXZlcmFnZScsXG4gICAgICAgICAgICAgICAgJ2V4Y2hhbmdlL3RyYW5zZmVycy9mcm9tX2xldmVyYWdlJyxcbiAgICAgICAgICAgICAgICAnbGVuZGluZy9ib3Jyb3dzJyxcbiAgICAgICAgICAgICAgICAnbGVuZGluZy9ib3Jyb3dzL3tpZH0vcmVwYXknLFxuICAgICAgICAgICAgICAgICdzZW5kX21vbmV5JyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXdzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAnZGVsZXRlJzogW1xuICAgICAgICAgICAgICAgICdiYW5rX2FjY291bnRzL3tpZH0nLFxuICAgICAgICAgICAgICAgICdleGNoYW5nZS9vcmRlcnMve2lkfScsXG4gICAgICAgICAgICAgICAgJ3dpdGhkcmF3cy97aWR9JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9KUFknOiAgeyAnaWQnOiAnYnRjX2pweScsICAnc3ltYm9sJzogJ0JUQy9KUFknLCAgJ2Jhc2UnOiAnQlRDJywgICdxdW90ZSc6ICdKUFknIH0sIC8vIHRoZSBvbmx5IHJlYWwgcGFpclxuICAgICAgICAnRVRIL0pQWSc6ICB7ICdpZCc6ICdldGhfanB5JywgICdzeW1ib2wnOiAnRVRIL0pQWScsICAnYmFzZSc6ICdFVEgnLCAgJ3F1b3RlJzogJ0pQWScgfSxcbiAgICAgICAgJ0VUQy9KUFknOiAgeyAnaWQnOiAnZXRjX2pweScsICAnc3ltYm9sJzogJ0VUQy9KUFknLCAgJ2Jhc2UnOiAnRVRDJywgICdxdW90ZSc6ICdKUFknIH0sXG4gICAgICAgICdEQU8vSlBZJzogIHsgJ2lkJzogJ2Rhb19qcHknLCAgJ3N5bWJvbCc6ICdEQU8vSlBZJywgICdiYXNlJzogJ0RBTycsICAncXVvdGUnOiAnSlBZJyB9LFxuICAgICAgICAnTFNLL0pQWSc6ICB7ICdpZCc6ICdsc2tfanB5JywgICdzeW1ib2wnOiAnTFNLL0pQWScsICAnYmFzZSc6ICdMU0snLCAgJ3F1b3RlJzogJ0pQWScgfSxcbiAgICAgICAgJ0ZDVC9KUFknOiAgeyAnaWQnOiAnZmN0X2pweScsICAnc3ltYm9sJzogJ0ZDVC9KUFknLCAgJ2Jhc2UnOiAnRkNUJywgICdxdW90ZSc6ICdKUFknIH0sXG4gICAgICAgICdYTVIvSlBZJzogIHsgJ2lkJzogJ3htcl9qcHknLCAgJ3N5bWJvbCc6ICdYTVIvSlBZJywgICdiYXNlJzogJ1hNUicsICAncXVvdGUnOiAnSlBZJyB9LFxuICAgICAgICAnUkVQL0pQWSc6ICB7ICdpZCc6ICdyZXBfanB5JywgICdzeW1ib2wnOiAnUkVQL0pQWScsICAnYmFzZSc6ICdSRVAnLCAgJ3F1b3RlJzogJ0pQWScgfSxcbiAgICAgICAgJ1hSUC9KUFknOiAgeyAnaWQnOiAneHJwX2pweScsICAnc3ltYm9sJzogJ1hSUC9KUFknLCAgJ2Jhc2UnOiAnWFJQJywgICdxdW90ZSc6ICdKUFknIH0sXG4gICAgICAgICdaRUMvSlBZJzogIHsgJ2lkJzogJ3plY19qcHknLCAgJ3N5bWJvbCc6ICdaRUMvSlBZJywgICdiYXNlJzogJ1pFQycsICAncXVvdGUnOiAnSlBZJyB9LFxuICAgICAgICAnWEVNL0pQWSc6ICB7ICdpZCc6ICd4ZW1fanB5JywgICdzeW1ib2wnOiAnWEVNL0pQWScsICAnYmFzZSc6ICdYRU0nLCAgJ3F1b3RlJzogJ0pQWScgfSxcbiAgICAgICAgJ0xUQy9KUFknOiAgeyAnaWQnOiAnbHRjX2pweScsICAnc3ltYm9sJzogJ0xUQy9KUFknLCAgJ2Jhc2UnOiAnTFRDJywgICdxdW90ZSc6ICdKUFknIH0sXG4gICAgICAgICdEQVNIL0pQWSc6IHsgJ2lkJzogJ2Rhc2hfanB5JywgJ3N5bWJvbCc6ICdEQVNIL0pQWScsICdiYXNlJzogJ0RBU0gnLCAncXVvdGUnOiAnSlBZJyB9LFxuICAgICAgICAnRVRIL0JUQyc6ICB7ICdpZCc6ICdldGhfYnRjJywgICdzeW1ib2wnOiAnRVRIL0JUQycsICAnYmFzZSc6ICdFVEgnLCAgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ0VUQy9CVEMnOiAgeyAnaWQnOiAnZXRjX2J0YycsICAnc3ltYm9sJzogJ0VUQy9CVEMnLCAgJ2Jhc2UnOiAnRVRDJywgICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdMU0svQlRDJzogIHsgJ2lkJzogJ2xza19idGMnLCAgJ3N5bWJvbCc6ICdMU0svQlRDJywgICdiYXNlJzogJ0xTSycsICAncXVvdGUnOiAnQlRDJyB9LFxuICAgICAgICAnRkNUL0JUQyc6ICB7ICdpZCc6ICdmY3RfYnRjJywgICdzeW1ib2wnOiAnRkNUL0JUQycsICAnYmFzZSc6ICdGQ1QnLCAgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ1hNUi9CVEMnOiAgeyAnaWQnOiAneG1yX2J0YycsICAnc3ltYm9sJzogJ1hNUi9CVEMnLCAgJ2Jhc2UnOiAnWE1SJywgICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdSRVAvQlRDJzogIHsgJ2lkJzogJ3JlcF9idGMnLCAgJ3N5bWJvbCc6ICdSRVAvQlRDJywgICdiYXNlJzogJ1JFUCcsICAncXVvdGUnOiAnQlRDJyB9LFxuICAgICAgICAnWFJQL0JUQyc6ICB7ICdpZCc6ICd4cnBfYnRjJywgICdzeW1ib2wnOiAnWFJQL0JUQycsICAnYmFzZSc6ICdYUlAnLCAgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ1pFQy9CVEMnOiAgeyAnaWQnOiAnemVjX2J0YycsICAnc3ltYm9sJzogJ1pFQy9CVEMnLCAgJ2Jhc2UnOiAnWkVDJywgICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdYRU0vQlRDJzogIHsgJ2lkJzogJ3hlbV9idGMnLCAgJ3N5bWJvbCc6ICdYRU0vQlRDJywgICdiYXNlJzogJ1hFTScsICAncXVvdGUnOiAnQlRDJyB9LFxuICAgICAgICAnTFRDL0JUQyc6ICB7ICdpZCc6ICdsdGNfYnRjJywgICdzeW1ib2wnOiAnTFRDL0JUQycsICAnYmFzZSc6ICdMVEMnLCAgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ0RBU0gvQlRDJzogeyAnaWQnOiAnZGFzaF9idGMnLCAnc3ltYm9sJzogJ0RBU0gvQlRDJywgJ2Jhc2UnOiAnREFTSCcsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGxldCBiYWxhbmNlcyA9IGF3YWl0IHRoaXMucHJpdmF0ZUdldEFjY291bnRzQmFsYW5jZSAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiBiYWxhbmNlcyB9O1xuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IHRoaXMuY3VycmVuY2llcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gdGhpcy5jdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IGxvd2VyY2FzZSA9IGN1cnJlbmN5LnRvTG93ZXJDYXNlICgpO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChsb3dlcmNhc2UgaW4gYmFsYW5jZXMpXG4gICAgICAgICAgICAgICAgYWNjb3VudFsnZnJlZSddID0gcGFyc2VGbG9hdCAoYmFsYW5jZXNbbG93ZXJjYXNlXSk7XG4gICAgICAgICAgICBsZXQgcmVzZXJ2ZWQgPSBsb3dlcmNhc2UgKyAnX3Jlc2VydmVkJztcbiAgICAgICAgICAgIGlmIChyZXNlcnZlZCBpbiBiYWxhbmNlcylcbiAgICAgICAgICAgICAgICBhY2NvdW50Wyd1c2VkJ10gPSBwYXJzZUZsb2F0IChiYWxhbmNlc1tyZXNlcnZlZF0pO1xuICAgICAgICAgICAgYWNjb3VudFsndG90YWwnXSA9IHRoaXMuc3VtIChhY2NvdW50WydmcmVlJ10sIGFjY291bnRbJ3VzZWQnXSk7XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgIHRoaXMucHVibGljR2V0T3JkZXJCb29rcyAocGFyYW1zKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAob3JkZXJbMF0pO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBwYXJzZUZsb2F0IChvcmRlclsxXSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3NpZGVdLnB1c2ggKFsgcHJpY2UsIGFtb3VudCBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGxldCB0aWNrZXIgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFRpY2tlciAoKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRpY2tlclsndGltZXN0YW1wJ10gKiAxMDAwO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydoaWdoJ10pLFxuICAgICAgICAgICAgJ2xvdyc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbG93J10pLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYmlkJ10pLFxuICAgICAgICAgICAgJ2Fzayc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYXNrJ10pLFxuICAgICAgICAgICAgJ3Z3YXAnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnb3Blbic6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjbG9zZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdmaXJzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsYXN0JzogcGFyc2VGbG9hdCAodGlja2VyWydsYXN0J10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndm9sdW1lJ10pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldFRyYWRlcyAocGFyYW1zKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IHByZWZpeCA9ICcnO1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAncGFpcic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlID09ICdtYXJrZXQnKSB7XG4gICAgICAgICAgICBsZXQgb3JkZXJfdHlwZSA9IHR5cGUgKyAnXycgKyBzaWRlO1xuICAgICAgICAgICAgb3JkZXJbJ29yZGVyX3R5cGUnXSA9IG9yZGVyX3R5cGU7XG4gICAgICAgICAgICBsZXQgcHJlZml4ID0gKHNpZGUgPT0gJ2J1eScpID8gKG9yZGVyX3R5cGUgKyAnXycpIDogJyc7XG4gICAgICAgICAgICBvcmRlcltwcmVmaXggKyAnYW1vdW50J10gPSBhbW91bnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvcmRlclsnb3JkZXJfdHlwZSddID0gc2lkZTtcbiAgICAgICAgICAgIG9yZGVyWydyYXRlJ10gPSBwcmljZTtcbiAgICAgICAgICAgIG9yZGVyWydhbW91bnQnXSA9IGFtb3VudDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0RXhjaGFuZ2VPcmRlcnMgKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ2lkJzogcmVzcG9uc2VbJ2lkJ10udG9TdHJpbmcgKCksXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlRGVsZXRlRXhjaGFuZ2VPcmRlcnNJZCAoeyAnaWQnOiBpZCB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArICcvJyArIHRoaXMuaW1wbG9kZVBhcmFtcyAocGF0aCwgcGFyYW1zKTtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5vbWl0IChwYXJhbXMsIHRoaXMuZXh0cmFjdFBhcmFtcyAocGF0aCkpO1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHF1ZXJ5KS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChxdWVyeSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpLnRvU3RyaW5nICgpO1xuICAgICAgICAgICAgbGV0IGxlbmd0aCA9IDA7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHF1ZXJ5KS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBib2R5ID0gdGhpcy51cmxlbmNvZGUgKHRoaXMua2V5c29ydCAocXVlcnkpKTtcbiAgICAgICAgICAgICAgICBsZW5ndGggPSBib2R5Lmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBhdXRoID0gbm9uY2UgKyB1cmwgKyAoYm9keSB8fCAnJyk7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICAgICAgICAnQ29udGVudC1MZW5ndGgnOiBsZW5ndGgsXG4gICAgICAgICAgICAgICAgJ0FDQ0VTUy1LRVknOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgICAgICAnQUNDRVNTLU5PTkNFJzogbm9uY2UsXG4gICAgICAgICAgICAgICAgJ0FDQ0VTUy1TSUdOQVRVUkUnOiB0aGlzLmhtYWMgKHRoaXMuZW5jb2RlIChhdXRoKSwgdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJylcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgaWYgKCdzdWNjZXNzJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIGlmIChyZXNwb25zZVsnc3VjY2VzcyddKVxuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgY29pbmZsb29yID0ge1xuXG4gICAgJ2lkJzogJ2NvaW5mbG9vcicsXG4gICAgJ25hbWUnOiAnY29pbmZsb29yJyxcbiAgICAncmF0ZUxpbWl0JzogMTAwMCxcbiAgICAnY291bnRyaWVzJzogJ1VLJyxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yODI0NjA4MS02MjNmYzE2NC02YTFjLTExZTctOTEzZi1iYWMwZDU1NzZjOTAuanBnJyxcbiAgICAgICAgJ2FwaSc6ICdodHRwczovL3dlYmFwaS5jb2luZmxvb3IuY28udWs6ODA5MC9iaXN0JyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy5jb2luZmxvb3IuY28udWsnLFxuICAgICAgICAnZG9jJzogW1xuICAgICAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS9jb2luZmxvb3IvYXBpJyxcbiAgICAgICAgICAgICdodHRwczovL3d3dy5jb2luZmxvb3IuY28udWsvYXBpJyxcbiAgICAgICAgXSxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICd7aWR9L3RpY2tlci8nLFxuICAgICAgICAgICAgICAgICd7aWR9L29yZGVyX2Jvb2svJyxcbiAgICAgICAgICAgICAgICAne2lkfS90cmFuc2FjdGlvbnMvJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ3tpZH0vYmFsYW5jZS8nLFxuICAgICAgICAgICAgICAgICd7aWR9L3VzZXJfdHJhbnNhY3Rpb25zLycsXG4gICAgICAgICAgICAgICAgJ3tpZH0vb3Blbl9vcmRlcnMvJyxcbiAgICAgICAgICAgICAgICAne2lkfS9jYW5jZWxfb3JkZXIvJyxcbiAgICAgICAgICAgICAgICAne2lkfS9idXkvJyxcbiAgICAgICAgICAgICAgICAne2lkfS9zZWxsLycsXG4gICAgICAgICAgICAgICAgJ3tpZH0vYnV5X21hcmtldC8nLFxuICAgICAgICAgICAgICAgICd7aWR9L3NlbGxfbWFya2V0LycsXG4gICAgICAgICAgICAgICAgJ3tpZH0vZXN0aW1hdGVfc2VsbF9tYXJrZXQvJyxcbiAgICAgICAgICAgICAgICAne2lkfS9lc3RpbWF0ZV9idXlfbWFya2V0LycsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgJ21hcmtldHMnOiB7XG4gICAgICAgICdCVEMvR0JQJzogeyAnaWQnOiAnWEJUL0dCUCcsICdzeW1ib2wnOiAnQlRDL0dCUCcsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdHQlAnIH0sXG4gICAgICAgICdCVEMvRVVSJzogeyAnaWQnOiAnWEJUL0VVUicsICdzeW1ib2wnOiAnQlRDL0VVUicsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdFVVInIH0sXG4gICAgICAgICdCVEMvVVNEJzogeyAnaWQnOiAnWEJUL1VTRCcsICdzeW1ib2wnOiAnQlRDL1VTRCcsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdVU0QnIH0sXG4gICAgICAgICdCVEMvUExOJzogeyAnaWQnOiAnWEJUL1BMTicsICdzeW1ib2wnOiAnQlRDL1BMTicsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdQTE4nIH0sXG4gICAgICAgICdCQ0gvR0JQJzogeyAnaWQnOiAnQkNIL0dCUCcsICdzeW1ib2wnOiAnQkNIL0dCUCcsICdiYXNlJzogJ0JDSCcsICdxdW90ZSc6ICdHQlAnIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAobWFya2V0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0SWRCYWxhbmNlICh7XG4gICAgICAgICAgICAnaWQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCkge1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRJZE9yZGVyQm9vayAoe1xuICAgICAgICAgICAgJ2lkJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdiaWRzJzogW10sXG4gICAgICAgICAgICAnYXNrcyc6IFtdLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHNpZGVzID0gWyAnYmlkcycsICdhc2tzJyBdO1xuICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IHNpZGVzLmxlbmd0aDsgcysrKSB7XG4gICAgICAgICAgICBsZXQgc2lkZSA9IHNpZGVzW3NdO1xuICAgICAgICAgICAgbGV0IG9yZGVycyA9IG9yZGVyYm9va1tzaWRlXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9yZGVyID0gb3JkZXJzW2ldO1xuICAgICAgICAgICAgICAgIGxldCBwcmljZSA9IHBhcnNlRmxvYXQgKG9yZGVyWzBdKTtcbiAgICAgICAgICAgICAgICBsZXQgYW1vdW50ID0gcGFyc2VGbG9hdCAob3JkZXJbMV0pO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtzaWRlXS5wdXNoIChbIHByaWNlLCBhbW91bnQgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgcGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KSB7XG4gICAgICAgIC8vIHJld3JpdGUgdG8gZ2V0IHRoZSB0aW1lc3RhbXAgZnJvbSBIVFRQIGhlYWRlcnNcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydoaWdoJ10pLFxuICAgICAgICAgICAgJ2xvdyc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbG93J10pLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYmlkJ10pLFxuICAgICAgICAgICAgJ2Fzayc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYXNrJ10pLFxuICAgICAgICAgICAgJ3Z3YXAnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3Z3YXAnXSksXG4gICAgICAgICAgICAnb3Blbic6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjbG9zZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdmaXJzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsYXN0JzogcGFyc2VGbG9hdCAodGlja2VyWydsYXN0J10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndm9sdW1lJ10pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgbGV0IG0gPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHRpY2tlciA9IGF3YWl0IHRoaXMucHVibGljR2V0SWRUaWNrZXIgKHtcbiAgICAgICAgICAgICdpZCc6IG1bJ2lkJ10sXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVRpY2tlciAodGlja2VyLCBtKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0SWRUcmFuc2FjdGlvbnMgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnaWQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IG9yZGVyID0geyAnaWQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpIH07XG4gICAgICAgIGxldCBtZXRob2QgPSAncHJpdmF0ZVBvc3RJZCcgKyB0aGlzLmNhcGl0YWxpemUgKHNpZGUpO1xuICAgICAgICBpZiAodHlwZSA9PSAnbWFya2V0Jykge1xuICAgICAgICAgICAgb3JkZXJbJ3F1YW50aXR5J10gPSBhbW91bnQ7XG4gICAgICAgICAgICBtZXRob2QgKz0gJ01hcmtldCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvcmRlclsncHJpY2UnXSA9IHByaWNlO1xuICAgICAgICAgICAgb3JkZXJbJ2Ftb3VudCddID0gYW1vdW50O1xuICAgICAgICB9ICAgICAgICBcbiAgICAgICAgcmV0dXJuIHRoaXNbbWV0aG9kXSAodGhpcy5leHRlbmQgKG9yZGVyLCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0SWRDYW5jZWxPcmRlciAoeyAnaWQnOiBpZCB9KTtcbiAgICB9LFxuXG4gICAgcmVxdWVzdCAocGF0aCwgdHlwZSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gY3VybCAtayAtdSAnW1VzZXIgSURdL1tBUEkga2V5XTpbUGFzc3BocmFzZV0nIGh0dHBzOi8vd2ViYXBpLmNvaW5mbG9vci5jby51azo4MDkwL2Jpc3QvWEJUL0dCUC9iYWxhbmNlL1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArICcvJyArIHRoaXMuaW1wbG9kZVBhcmFtcyAocGF0aCwgcGFyYW1zKTtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5vbWl0IChwYXJhbXMsIHRoaXMuZXh0cmFjdFBhcmFtcyAocGF0aCkpO1xuICAgICAgICBpZiAodHlwZSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChxdWVyeSkubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG5vbmNlID0gdGhpcy5ub25jZSAoKTtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLnVybGVuY29kZSAodGhpcy5leHRlbmQgKHsgJ25vbmNlJzogbm9uY2UgfSwgcXVlcnkpKTtcbiAgICAgICAgICAgIGxldCBhdXRoID0gdGhpcy51aWQgKyAnLycgKyB0aGlzLmFwaUtleSArICc6JyArIHRoaXMucGFzc3dvcmQ7XG4gICAgICAgICAgICBsZXQgc2lnbmF0dXJlID0gdGhpcy5zdHJpbmdUb0Jhc2U2NCAoYXV0aCk7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICAgICAgICAnQ29udGVudC1MZW5ndGgnOiBib2R5Lmxlbmd0aCxcbiAgICAgICAgICAgICAgICAnQXV0aG9yaXphdGlvbic6ICdCYXNpYyAnICsgc2lnbmF0dXJlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGNvaW5naSA9IHtcblxuICAgICdpZCc6ICdjb2luZ2knLFxuICAgICduYW1lJzogJ0NvaW5naScsXG4gICAgJ3JhdGVMaW1pdCc6IDEwMDAsXG4gICAgJ2NvdW50cmllcyc6IFsgJ1BBJywgJ0JHJywgJ0NOJywgJ1VTJyBdLCAvLyBQYW5hbWEsIEJ1bGdhcmlhLCBDaGluYSwgVVNcbiAgICAnaGFzRmV0Y2hUaWNrZXJzJzogdHJ1ZSxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yODYxOTcwNy01YzkyMzJhOC03MjEyLTExZTctODZkNi05OGZlNWQxNWNjNmUuanBnJyxcbiAgICAgICAgJ2FwaSc6ICdodHRwczovL2FwaS5jb2luZ2kuY29tJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL2NvaW5naS5jb20nLFxuICAgICAgICAnZG9jJzogJ2h0dHA6Ly9kb2NzLmNvaW5naS5hcGlhcnkuaW8vJyxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdjdXJyZW50Jzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnb3JkZXItYm9vay97cGFpcn0ve2Fza0NvdW50fS97YmlkQ291bnR9L3tkZXB0aH0nLFxuICAgICAgICAgICAgICAgICd0cmFuc2FjdGlvbnMve3BhaXJ9L3ttYXhDb3VudH0nLFxuICAgICAgICAgICAgICAgICcyNGhvdXItcm9sbGluZy1hZ2dyZWdhdGlvbicsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAndXNlcic6IHtcbiAgICAgICAgICAgICdwb3N0JzogW1xuICAgICAgICAgICAgICAgICdiYWxhbmNlJyxcbiAgICAgICAgICAgICAgICAnYWRkLW9yZGVyJyxcbiAgICAgICAgICAgICAgICAnY2FuY2VsLW9yZGVyJyxcbiAgICAgICAgICAgICAgICAnb3JkZXJzJyxcbiAgICAgICAgICAgICAgICAndHJhbnNhY3Rpb25zJyxcbiAgICAgICAgICAgICAgICAnY3JlYXRlLWNyeXB0by13aXRoZHJhd2FsJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0xUQy9CVEMnOiB7ICdpZCc6ICdsdGMtYnRjJywgJ3N5bWJvbCc6ICdMVEMvQlRDJywgJ2Jhc2UnOiAnTFRDJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ1BQQy9CVEMnOiB7ICdpZCc6ICdwcGMtYnRjJywgJ3N5bWJvbCc6ICdQUEMvQlRDJywgJ2Jhc2UnOiAnUFBDJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ0RPR0UvQlRDJzogeyAnaWQnOiAnZG9nZS1idGMnLCAnc3ltYm9sJzogJ0RPR0UvQlRDJywgJ2Jhc2UnOiAnRE9HRScsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdWVEMvQlRDJzogeyAnaWQnOiAndnRjLWJ0YycsICdzeW1ib2wnOiAnVlRDL0JUQycsICdiYXNlJzogJ1ZUQycsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdGVEMvQlRDJzogeyAnaWQnOiAnZnRjLWJ0YycsICdzeW1ib2wnOiAnRlRDL0JUQycsICdiYXNlJzogJ0ZUQycsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdOTUMvQlRDJzogeyAnaWQnOiAnbm1jLWJ0YycsICdzeW1ib2wnOiAnTk1DL0JUQycsICdiYXNlJzogJ05NQycsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdEQVNIL0JUQyc6IHsgJ2lkJzogJ2Rhc2gtYnRjJywgJ3N5bWJvbCc6ICdEQVNIL0JUQycsICdiYXNlJzogJ0RBU0gnLCAncXVvdGUnOiAnQlRDJyB9LFxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBsZXQgY3VycmVuY2llcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IHRoaXMuY3VycmVuY2llcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gdGhpcy5jdXJyZW5jaWVzW2NdLnRvTG93ZXJDYXNlICgpO1xuICAgICAgICAgICAgY3VycmVuY2llcy5wdXNoIChjdXJyZW5jeSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGJhbGFuY2VzID0gYXdhaXQgdGhpcy51c2VyUG9zdEJhbGFuY2UgKHtcbiAgICAgICAgICAgICdjdXJyZW5jaWVzJzogY3VycmVuY2llcy5qb2luICgnLCcpXG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGJhbGFuY2VzIH07XG4gICAgICAgIGZvciAobGV0IGIgPSAwOyBiIDwgYmFsYW5jZXMubGVuZ3RoOyBiKyspIHtcbiAgICAgICAgICAgIGxldCBiYWxhbmNlID0gYmFsYW5jZXNbYl07XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBiYWxhbmNlWydjdXJyZW5jeSddWyduYW1lJ107XG4gICAgICAgICAgICBjdXJyZW5jeSA9IGN1cnJlbmN5LnRvVXBwZXJDYXNlICgpO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiBiYWxhbmNlWydhdmFpbGFibGUnXSxcbiAgICAgICAgICAgICAgICAndXNlZCc6IGJhbGFuY2VbJ2Jsb2NrZWQnXSArIGJhbGFuY2VbJ2luT3JkZXJzJ10gKyBiYWxhbmNlWyd3aXRoZHJhd2luZyddLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhY2NvdW50Wyd0b3RhbCddID0gdGhpcy5zdW0gKGFjY291bnRbJ2ZyZWUnXSwgYWNjb3VudFsndXNlZCddKTtcbiAgICAgICAgICAgIHJlc3VsdFtjdXJyZW5jeV0gPSBhY2NvdW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSBhd2FpdCB0aGlzLmN1cnJlbnRHZXRPcmRlckJvb2tQYWlyQXNrQ291bnRCaWRDb3VudERlcHRoICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ3BhaXInOiBwWydpZCddLFxuICAgICAgICAgICAgJ2Fza0NvdW50JzogNTEyLCAvLyBtYXhpbXVtIHJldHVybmVkIG51bWJlciBvZiBhc2tzIDEtNTEyXG4gICAgICAgICAgICAnYmlkQ291bnQnOiA1MTIsIC8vIG1heGltdW0gcmV0dXJuZWQgbnVtYmVyIG9mIGJpZHMgMS01MTJcbiAgICAgICAgICAgICdkZXB0aCc6IDMyLCAvLyBtYXhpbXVtIG51bWJlciBvZiBkZXB0aCByYW5nZSBzdGVwcyAxLTMyXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IFtdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaWRlcyA9IFsgJ2JpZHMnLCAnYXNrcycgXTtcbiAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBzaWRlcy5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1tzXTtcbiAgICAgICAgICAgIGxldCBvcmRlcnMgPSBvcmRlcmJvb2tbc2lkZV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBvcmRlciA9IG9yZGVyc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgcHJpY2UgPSBvcmRlclsncHJpY2UnXTtcbiAgICAgICAgICAgICAgICBsZXQgYW1vdW50ID0gb3JkZXJbJ2Jhc2VBbW91bnQnXTtcbiAgICAgICAgICAgICAgICByZXN1bHRbc2lkZV0ucHVzaCAoWyBwcmljZSwgYW1vdW50IF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIHBhcnNlVGlja2VyICh0aWNrZXIsIG1hcmtldCkge1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiB0aWNrZXJbJ2hpZ2gnXSxcbiAgICAgICAgICAgICdsb3cnOiB0aWNrZXJbJ2xvdyddLFxuICAgICAgICAgICAgJ2JpZCc6IHRpY2tlclsnaGlnaGVzdEJpZCddLFxuICAgICAgICAgICAgJ2Fzayc6IHRpY2tlclsnbG93ZXN0QXNrJ10sXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogdGlja2VyWydiYXNlVm9sdW1lJ10sXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiB0aWNrZXJbJ2NvdW50ZXJWb2x1bWUnXSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGlja2VyO1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlcnMgKCkge1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmN1cnJlbnRHZXQyNGhvdXJSb2xsaW5nQWdncmVnYXRpb24gKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7fTtcbiAgICAgICAgZm9yIChsZXQgdCA9IDA7IHQgPCByZXNwb25zZS5sZW5ndGg7IHQrKykge1xuICAgICAgICAgICAgbGV0IHRpY2tlciA9IHJlc3BvbnNlW3RdO1xuICAgICAgICAgICAgbGV0IGJhc2UgPSB0aWNrZXJbJ2N1cnJlbmN5UGFpciddWydiYXNlJ10udG9VcHBlckNhc2UgKCk7XG4gICAgICAgICAgICBsZXQgcXVvdGUgPSB0aWNrZXJbJ2N1cnJlbmN5UGFpciddWydjb3VudGVyJ10udG9VcHBlckNhc2UgKCk7XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gYmFzZSArICcvJyArIHF1b3RlO1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IHRoaXMubWFya2V0c1tzeW1ib2xdO1xuICAgICAgICAgICAgcmVzdWx0W3N5bWJvbF0gPSB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIG1hcmtldCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmN1cnJlbnRHZXQyNGhvdXJSb2xsaW5nQWdncmVnYXRpb24gKCk7XG4gICAgICAgIGxldCB0aWNrZXJzID0ge307XG4gICAgICAgIGZvciAobGV0IHQgPSAwOyB0IDwgcmVzcG9uc2UubGVuZ3RoOyB0KyspIHtcbiAgICAgICAgICAgIGxldCB0aWNrZXIgPSByZXNwb25zZVt0XTtcbiAgICAgICAgICAgIGxldCBiYXNlID0gdGlja2VyWydjdXJyZW5jeVBhaXInXVsnYmFzZSddLnRvVXBwZXJDYXNlICgpO1xuICAgICAgICAgICAgbGV0IHF1b3RlID0gdGlja2VyWydjdXJyZW5jeVBhaXInXVsnY291bnRlciddLnRvVXBwZXJDYXNlICgpO1xuICAgICAgICAgICAgbGV0IHN5bWJvbCA9IGJhc2UgKyAnLycgKyBxdW90ZTtcbiAgICAgICAgICAgIHRpY2tlcnNbc3ltYm9sXSA9IHRpY2tlcjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgc3ltYm9sID0gcFsnc3ltYm9sJ107XG4gICAgICAgIGlmIChzeW1ib2wgaW4gdGlja2Vycykge1xuICAgICAgICAgICAgbGV0IHRpY2tlciA9IHRpY2tlcnNbc3ltYm9sXTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIHApO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgc3ltYm9sICsgJyB0aWNrZXIgbm90IGZvdW5kJyk7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRHZXRUcmFuc2FjdGlvbnNQYWlyTWF4Q291bnQgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAncGFpcic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgICAgICAnbWF4Q291bnQnOiAxMjgsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAnY3VycmVuY3lQYWlyJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICd2b2x1bWUnOiBhbW91bnQsXG4gICAgICAgICAgICAncHJpY2UnOiBwcmljZSxcbiAgICAgICAgICAgICdvcmRlclR5cGUnOiAoc2lkZSA9PSAnYnV5JykgPyAwIDogMSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy51c2VyUG9zdEFkZE9yZGVyICh0aGlzLmV4dGVuZCAob3JkZXIsIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXNwb25zZSxcbiAgICAgICAgICAgICdpZCc6IHJlc3BvbnNlWydyZXN1bHQnXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnVzZXJQb3N0Q2FuY2VsT3JkZXIgKHsgJ29yZGVySWQnOiBpZCB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArICcvJyArIGFwaSArICcvJyArIHRoaXMuaW1wbG9kZVBhcmFtcyAocGF0aCwgcGFyYW1zKTtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5vbWl0IChwYXJhbXMsIHRoaXMuZXh0cmFjdFBhcmFtcyAocGF0aCkpO1xuICAgICAgICBpZiAoYXBpID09ICdjdXJyZW50Jykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChxdWVyeSkubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG5vbmNlID0gdGhpcy5ub25jZSAoKTtcbiAgICAgICAgICAgIGxldCByZXF1ZXN0ID0gdGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICAgICAndG9rZW4nOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgICAgICAnbm9uY2UnOiBub25jZSxcbiAgICAgICAgICAgIH0sIHF1ZXJ5KTtcbiAgICAgICAgICAgIGxldCBhdXRoID0gbm9uY2UudG9TdHJpbmcgKCkgKyAnJCcgKyB0aGlzLmFwaUtleTtcbiAgICAgICAgICAgIHJlcXVlc3RbJ3NpZ25hdHVyZSddID0gdGhpcy5obWFjICh0aGlzLmVuY29kZSAoYXV0aCksIHRoaXMuZW5jb2RlICh0aGlzLnNlY3JldCkpO1xuICAgICAgICAgICAgYm9keSA9IHRoaXMuanNvbiAocmVxdWVzdCk7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtTGVuZ3RoJzogYm9keS5sZW5ndGgsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdlcnJvcnMnIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBjb2lubWFya2V0Y2FwID0ge1xuXG4gICAgJ2lkJzogJ2NvaW5tYXJrZXRjYXAnLFxuICAgICduYW1lJzogJ0NvaW5NYXJrZXRDYXAnLFxuICAgICdyYXRlTGltaXQnOiAxMDAwMCxcbiAgICAndmVyc2lvbic6ICd2MScsXG4gICAgJ2NvdW50cmllcyc6ICdVUycsXG4gICAgJ2hhc0ZldGNoVGlja2Vycyc6IHRydWUsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjgyNDQyNDQtOWJlNjMxMmEtNjllZC0xMWU3LTk5YzEtN2MxNzk3Mjc1MjY1LmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly9hcGkuY29pbm1hcmtldGNhcC5jb20nLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vY29pbm1hcmtldGNhcC5jb20nLFxuICAgICAgICAnZG9jJzogJ2h0dHBzOi8vY29pbm1hcmtldGNhcC5jb20vYXBpJyxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICd0aWNrZXIvJyxcbiAgICAgICAgICAgICAgICAndGlja2VyL3tpZH0vJyxcbiAgICAgICAgICAgICAgICAnZ2xvYmFsLycsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgJ2N1cnJlbmNpZXMnOiBbXG4gICAgICAgICdBVUQnLFxuICAgICAgICAnQlJMJyxcbiAgICAgICAgJ0NBRCcsXG4gICAgICAgICdDSEYnLFxuICAgICAgICAnQ05ZJyxcbiAgICAgICAgJ0VVUicsXG4gICAgICAgICdHQlAnLFxuICAgICAgICAnSEtEJyxcbiAgICAgICAgJ0lEUicsXG4gICAgICAgICdJTlInLFxuICAgICAgICAnSlBZJyxcbiAgICAgICAgJ0tSVycsXG4gICAgICAgICdNWE4nLFxuICAgICAgICAnUlVCJyxcbiAgICAgICAgJ1VTRCcsXG4gICAgXSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICgnRmV0Y2hpbmcgb3JkZXIgYm9va3MgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgQVBJIG9mICcgKyB0aGlzLmlkKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hNYXJrZXRzICgpIHtcbiAgICAgICAgbGV0IG1hcmtldHMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFRpY2tlciAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGxldCBwID0gMDsgcCA8IG1hcmtldHMubGVuZ3RoOyBwKyspIHtcbiAgICAgICAgICAgIGxldCBtYXJrZXQgPSBtYXJrZXRzW3BdO1xuICAgICAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCB0aGlzLmN1cnJlbmNpZXMubGVuZ3RoOyBjKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgYmFzZSA9IG1hcmtldFsnc3ltYm9sJ107XG4gICAgICAgICAgICAgICAgbGV0IGJhc2VJZCA9IG1hcmtldFsnaWQnXTtcbiAgICAgICAgICAgICAgICBsZXQgcXVvdGUgPSB0aGlzLmN1cnJlbmNpZXNbY107XG4gICAgICAgICAgICAgICAgbGV0IHF1b3RlSWQgPSBxdW90ZS50b0xvd2VyQ2FzZSAoKTtcbiAgICAgICAgICAgICAgICBsZXQgc3ltYm9sID0gYmFzZSArICcvJyArIHF1b3RlO1xuICAgICAgICAgICAgICAgIGxldCBpZCA9IGJhc2VJZCArICcvJyArIHF1b3RlO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoICh7XG4gICAgICAgICAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICAgICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgICAgICAgICAnYmFzZSc6IGJhc2UsXG4gICAgICAgICAgICAgICAgICAgICdxdW90ZSc6IHF1b3RlLFxuICAgICAgICAgICAgICAgICAgICAnYmFzZUlkJzogYmFzZUlkLFxuICAgICAgICAgICAgICAgICAgICAncXVvdGVJZCc6IHF1b3RlSWQsXG4gICAgICAgICAgICAgICAgICAgICdpbmZvJzogbWFya2V0LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoR2xvYmFsIChjdXJyZW5jeSA9ICdVU0QnKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXF1ZXN0ID0ge307XG4gICAgICAgIGlmIChjdXJyZW5jeSlcbiAgICAgICAgICAgIHJlcXVlc3RbJ2NvbnZlcnQnXSA9IGN1cnJlbmN5O1xuICAgICAgICByZXR1cm4gdGhpcy5wdWJsaWNHZXRHbG9iYWwgKHJlcXVlc3QpO1xuICAgIH0sXG5cbiAgICBwYXJzZVRpY2tlciAodGlja2VyLCBtYXJrZXQpIHtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBpZiAoJ2xhc3RfdXBkYXRlZCcgaW4gdGlja2VyKVxuICAgICAgICAgICAgaWYgKHRpY2tlclsnbGFzdF91cGRhdGVkJ10pXG4gICAgICAgICAgICAgICAgdGltZXN0YW1wID0gcGFyc2VJbnQgKHRpY2tlclsnbGFzdF91cGRhdGVkJ10pICogMTAwMDtcbiAgICAgICAgbGV0IHZvbHVtZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IHZvbHVtZUtleSA9ICcyNGhfdm9sdW1lXycgKyBtYXJrZXRbJ3F1b3RlSWQnXTtcbiAgICAgICAgaWYgKHRpY2tlclt2b2x1bWVLZXldKVxuICAgICAgICAgICAgdm9sdW1lID0gcGFyc2VGbG9hdCAodGlja2VyW3ZvbHVtZUtleV0pO1xuICAgICAgICBsZXQgcHJpY2UgPSAncHJpY2VfJyArIG1hcmtldFsncXVvdGVJZCddO1xuICAgICAgICBsZXQgY2hhbmdlID0gdW5kZWZpbmVkO1xuICAgICAgICBsZXQgY2hhbmdlS2V5ID0gJ3BlcmNlbnRfY2hhbmdlXzI0aCc7XG4gICAgICAgIGlmICh0aWNrZXJbY2hhbmdlS2V5XSlcbiAgICAgICAgICAgIGNoYW5nZSA9IHBhcnNlRmxvYXQgKHRpY2tlcltjaGFuZ2VLZXldKTtcbiAgICAgICAgbGV0IGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChwcmljZSBpbiB0aWNrZXIpXG4gICAgICAgICAgICBpZiAodGlja2VyW3ByaWNlXSlcbiAgICAgICAgICAgICAgICBsYXN0ID0gcGFyc2VGbG9hdCAodGlja2VyW3ByaWNlXSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbG93JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2JpZCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhc2snOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBsYXN0LFxuICAgICAgICAgICAgJ2NoYW5nZSc6IGNoYW5nZSxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHZvbHVtZSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlcnMgKGN1cnJlbmN5ID0gJ1VTRCcpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlcXVlc3QgPSB7fTtcbiAgICAgICAgaWYgKGN1cnJlbmN5KVxuICAgICAgICAgICAgcmVxdWVzdFsnY29udmVydCddID0gY3VycmVuY3k7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0VGlja2VyIChyZXF1ZXN0KTtcbiAgICAgICAgbGV0IHRpY2tlcnMgPSB7fTtcbiAgICAgICAgZm9yIChsZXQgdCA9IDA7IHQgPCByZXNwb25zZS5sZW5ndGg7IHQrKykge1xuICAgICAgICAgICAgbGV0IHRpY2tlciA9IHJlc3BvbnNlW3RdO1xuICAgICAgICAgICAgbGV0IGlkID0gdGlja2VyWydpZCddICsgJy8nICsgY3VycmVuY3k7XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gdGhpcy5tYXJrZXRzX2J5X2lkW2lkXTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBtYXJrZXRbJ3N5bWJvbCddO1xuICAgICAgICAgICAgdGlja2Vyc1tzeW1ib2xdID0gdGhpcy5wYXJzZVRpY2tlciAodGlja2VyLCBtYXJrZXQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aWNrZXJzO1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCByZXF1ZXN0ID0ge1xuICAgICAgICAgICAgJ2NvbnZlcnQnOiBwWydxdW90ZSddLFxuICAgICAgICAgICAgJ2lkJzogcFsnYmFzZUlkJ10sXG4gICAgICAgIH07XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0VGlja2VySWQgKHJlcXVlc3QpO1xuICAgICAgICBsZXQgdGlja2VyID0gcmVzcG9uc2VbMF07XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIHApO1xuICAgIH0sXG5cbiAgICByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgJy8nICsgdGhpcy52ZXJzaW9uICsgJy8nICsgdGhpcy5pbXBsb2RlUGFyYW1zIChwYXRoLCBwYXJhbXMpO1xuICAgICAgICBsZXQgcXVlcnkgPSB0aGlzLm9taXQgKHBhcmFtcywgdGhpcy5leHRyYWN0UGFyYW1zIChwYXRoKSk7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyAocXVlcnkpLmxlbmd0aClcbiAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICByZXR1cm4gdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGNvaW5tYXRlID0ge1xuXG4gICAgJ2lkJzogJ2NvaW5tYXRlJyxcbiAgICAnbmFtZSc6ICdDb2luTWF0ZScsXG4gICAgJ2NvdW50cmllcyc6IFsgJ0dCJywgJ0NaJyBdLCAvLyBVSywgQ3plY2ggUmVwdWJsaWNcbiAgICAncmF0ZUxpbWl0JzogMTAwMCxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yNzgxMTIyOS1jMWVmYjUxMC02MDZjLTExZTctOWEzNi04NGJhMmNlNDEyZDguanBnJyxcbiAgICAgICAgJ2FwaSc6ICdodHRwczovL2NvaW5tYXRlLmlvL2FwaScsXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly9jb2lubWF0ZS5pbycsXG4gICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAnaHR0cDovL2RvY3MuY29pbm1hdGUuYXBpYXJ5LmlvJyxcbiAgICAgICAgICAgICdodHRwczovL2NvaW5tYXRlLmlvL2RldmVsb3BlcnMnLFxuICAgICAgICBdLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ29yZGVyQm9vaycsXG4gICAgICAgICAgICAgICAgJ3RpY2tlcicsXG4gICAgICAgICAgICAgICAgJ3RyYW5zYWN0aW9ucycsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAncHJpdmF0ZSc6IHtcbiAgICAgICAgICAgICdwb3N0JzogW1xuICAgICAgICAgICAgICAgICdiYWxhbmNlcycsXG4gICAgICAgICAgICAgICAgJ2JpdGNvaW5XaXRoZHJhd2FsJyxcbiAgICAgICAgICAgICAgICAnYml0Y29pbkRlcG9zaXRBZGRyZXNzZXMnLFxuICAgICAgICAgICAgICAgICdidXlJbnN0YW50JyxcbiAgICAgICAgICAgICAgICAnYnV5TGltaXQnLFxuICAgICAgICAgICAgICAgICdjYW5jZWxPcmRlcicsXG4gICAgICAgICAgICAgICAgJ2NhbmNlbE9yZGVyV2l0aEluZm8nLFxuICAgICAgICAgICAgICAgICdjcmVhdGVWb3VjaGVyJyxcbiAgICAgICAgICAgICAgICAnb3Blbk9yZGVycycsXG4gICAgICAgICAgICAgICAgJ3JlZGVlbVZvdWNoZXInLFxuICAgICAgICAgICAgICAgICdzZWxsSW5zdGFudCcsXG4gICAgICAgICAgICAgICAgJ3NlbGxMaW1pdCcsXG4gICAgICAgICAgICAgICAgJ3RyYW5zYWN0aW9uSGlzdG9yeScsXG4gICAgICAgICAgICAgICAgJ3VuY29uZmlybWVkQml0Y29pbkRlcG9zaXRzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9FVVInOiB7ICdpZCc6ICdCVENfRVVSJywgJ3N5bWJvbCc6ICdCVEMvRVVSJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ0VVUicgfSxcbiAgICAgICAgJ0JUQy9DWksnOiB7ICdpZCc6ICdCVENfQ1pLJywgJ3N5bWJvbCc6ICdCVEMvQ1pLJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ0NaSycgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdEJhbGFuY2VzICgpO1xuICAgICAgICBsZXQgYmFsYW5jZXMgPSByZXNwb25zZVsnZGF0YSddO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGJhbGFuY2VzIH07XG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgdGhpcy5jdXJyZW5jaWVzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSB0aGlzLmN1cnJlbmNpZXNbY107XG4gICAgICAgICAgICBsZXQgYWNjb3VudCA9IHtcbiAgICAgICAgICAgICAgICAnZnJlZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAndXNlZCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAndG90YWwnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGN1cnJlbmN5IGluIGJhbGFuY2VzKSB7XG4gICAgICAgICAgICAgICAgYWNjb3VudFsnZnJlZSddID0gYmFsYW5jZXNbY3VycmVuY3ldWydhdmFpbGFibGUnXTtcbiAgICAgICAgICAgICAgICBhY2NvdW50Wyd1c2VkJ10gPSBiYWxhbmNlc1tjdXJyZW5jeV1bJ3Jlc2VydmVkJ107XG4gICAgICAgICAgICAgICAgYWNjb3VudFsndG90YWwnXSA9IGJhbGFuY2VzW2N1cnJlbmN5XVsnYmFsYW5jZSddO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRPcmRlckJvb2sgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnY3VycmVuY3lQYWlyJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICdncm91cEJ5UHJpY2VMaW1pdCc6ICdGYWxzZScsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgb3JkZXJib29rID0gcmVzcG9uc2VbJ2RhdGEnXTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IG9yZGVyYm9va1sndGltZXN0YW1wJ10gKiAxMDAwO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gb3JkZXJbJ3ByaWNlJ107XG4gICAgICAgICAgICAgICAgbGV0IGFtb3VudCA9IG9yZGVyWydhbW91bnQnXTtcbiAgICAgICAgICAgICAgICByZXN1bHRbc2lkZV0ucHVzaCAoWyBwcmljZSwgYW1vdW50IF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRUaWNrZXIgKHtcbiAgICAgICAgICAgICdjdXJyZW5jeVBhaXInOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IHRpY2tlciA9IHJlc3BvbnNlWydkYXRhJ107XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aWNrZXJbJ3RpbWVzdGFtcCddICogMTAwMDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2JpZCddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2FzayddKSxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdCddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2Ftb3VudCddKSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdGhpcy5wdWJsaWNHZXRUcmFuc2FjdGlvbnMgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnY3VycmVuY3lQYWlyJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICdtaW51dGVzSW50b0hpc3RvcnknOiAxMCxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBtZXRob2QgPSAncHJpdmF0ZVBvc3QnICsgdGhpcy5jYXBpdGFsaXplIChzaWRlKTtcbiAgICAgICAgbGV0IG9yZGVyID0ge1xuICAgICAgICAgICAgJ2N1cnJlbmN5UGFpcic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlID09ICdtYXJrZXQnKSB7XG4gICAgICAgICAgICBpZiAoc2lkZSA9PSAnYnV5JylcbiAgICAgICAgICAgICAgICBvcmRlclsndG90YWwnXSA9IGFtb3VudDsgLy8gYW1vdW50IGluIGZpYXRcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBvcmRlclsnYW1vdW50J10gPSBhbW91bnQ7IC8vIGFtb3VudCBpbiBmaWF0XG4gICAgICAgICAgICBtZXRob2QgKz0gJ0luc3RhbnQnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3JkZXJbJ2Ftb3VudCddID0gYW1vdW50OyAvLyBhbW91bnQgaW4gY3J5cHRvXG4gICAgICAgICAgICBvcmRlclsncHJpY2UnXSA9IHByaWNlO1xuICAgICAgICAgICAgbWV0aG9kICs9IHRoaXMuY2FwaXRhbGl6ZSAodHlwZSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpc1ttZXRob2RdIChzZWxmLmV4dGVuZCAob3JkZXIsIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXNwb25zZSxcbiAgICAgICAgICAgICdpZCc6IHJlc3BvbnNlWydkYXRhJ10udG9TdHJpbmcgKCksXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdENhbmNlbE9yZGVyICh7ICdvcmRlcklkJzogaWQgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ10gKyAnLycgKyBwYXRoO1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHBhcmFtcykubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocGFyYW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghdGhpcy51aWQpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEF1dGhlbnRpY2F0aW9uRXJyb3IgKHRoaXMuaWQgKyAnIHJlcXVpcmVzIGAnICsgdGhpcy5pZCArICcudWlkYCBwcm9wZXJ0eSBmb3IgYXV0aGVudGljYXRpb24nKTtcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCkudG9TdHJpbmcgKCk7XG4gICAgICAgICAgICBsZXQgYXV0aCA9IG5vbmNlICsgdGhpcy51aWQgKyB0aGlzLmFwaUtleTtcbiAgICAgICAgICAgIGxldCBzaWduYXR1cmUgPSB0aGlzLmhtYWMgKHRoaXMuZW5jb2RlIChhdXRoKSwgdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSk7XG4gICAgICAgICAgICBib2R5ID0gdGhpcy51cmxlbmNvZGUgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAgICAgJ2NsaWVudElkJzogdGhpcy51aWQsXG4gICAgICAgICAgICAgICAgJ25vbmNlJzogbm9uY2UsXG4gICAgICAgICAgICAgICAgJ3B1YmxpY0tleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgICAgICdzaWduYXR1cmUnOiBzaWduYXR1cmUudG9VcHBlckNhc2UgKCksXG4gICAgICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgICAgICBpZiAoJ2Vycm9yJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIGlmIChyZXNwb25zZVsnZXJyb3InXSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgJyArIHRoaXMuanNvbiAocmVzcG9uc2UpKTtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGNvaW5zZWN1cmUgPSB7XG5cbiAgICAnaWQnOiAnY29pbnNlY3VyZScsXG4gICAgJ25hbWUnOiAnQ29pbnNlY3VyZScsXG4gICAgJ2NvdW50cmllcyc6ICdJTicsIC8vIEluZGlhXG4gICAgJ3JhdGVMaW1pdCc6IDEwMDAsXG4gICAgJ3ZlcnNpb24nOiAndjEnLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2NDcyLTljYmQyMDBhLTVlZDktMTFlNy05NTUxLTIyNjdhZDdiYWMwOC5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vYXBpLmNvaW5zZWN1cmUuaW4nLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vY29pbnNlY3VyZS5pbicsXG4gICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAnaHR0cHM6Ly9hcGkuY29pbnNlY3VyZS5pbicsXG4gICAgICAgICAgICAnaHR0cHM6Ly9naXRodWIuY29tL2NvaW5zZWN1cmUvcGx1Z2lucycsXG4gICAgICAgIF0sXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnYml0Y29pbi9zZWFyY2gvY29uZmlybWF0aW9uL3t0eGlkfScsXG4gICAgICAgICAgICAgICAgJ2V4Y2hhbmdlL2Fzay9sb3cnLFxuICAgICAgICAgICAgICAgICdleGNoYW5nZS9hc2svb3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnZXhjaGFuZ2UvYmlkL2hpZ2gnLFxuICAgICAgICAgICAgICAgICdleGNoYW5nZS9iaWQvb3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnZXhjaGFuZ2UvbGFzdFRyYWRlJyxcbiAgICAgICAgICAgICAgICAnZXhjaGFuZ2UvbWF4MjRIcicsXG4gICAgICAgICAgICAgICAgJ2V4Y2hhbmdlL21pbjI0SHInLFxuICAgICAgICAgICAgICAgICdleGNoYW5nZS90aWNrZXInLFxuICAgICAgICAgICAgICAgICdleGNoYW5nZS90cmFkZXMnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdtZmEvYXV0aHkvY2FsbCcsXG4gICAgICAgICAgICAgICAgJ21mYS9hdXRoeS9zbXMnLFxuICAgICAgICAgICAgICAgICduZXRraS9zZWFyY2gve25ldGtpTmFtZX0nLFxuICAgICAgICAgICAgICAgICd1c2VyL2Jhbmsvb3RwL3tudW1iZXJ9JyxcbiAgICAgICAgICAgICAgICAndXNlci9reWMvb3RwL3tudW1iZXJ9JyxcbiAgICAgICAgICAgICAgICAndXNlci9wcm9maWxlL3Bob25lL290cC97bnVtYmVyfScsXG4gICAgICAgICAgICAgICAgJ3VzZXIvd2FsbGV0L2NvaW4vYWRkcmVzcy97aWR9JyxcbiAgICAgICAgICAgICAgICAndXNlci93YWxsZXQvY29pbi9kZXBvc2l0L2NvbmZpcm1lZC9hbGwnLFxuICAgICAgICAgICAgICAgICd1c2VyL3dhbGxldC9jb2luL2RlcG9zaXQvY29uZmlybWVkL3tpZH0nLFxuICAgICAgICAgICAgICAgICd1c2VyL3dhbGxldC9jb2luL2RlcG9zaXQvdW5jb25maXJtZWQvYWxsJyxcbiAgICAgICAgICAgICAgICAndXNlci93YWxsZXQvY29pbi9kZXBvc2l0L3VuY29uZmlybWVkL3tpZH0nLFxuICAgICAgICAgICAgICAgICd1c2VyL3dhbGxldC9jb2luL3dhbGxldHMnLFxuICAgICAgICAgICAgICAgICd1c2VyL2V4Y2hhbmdlL2JhbmsvZmlhdC9hY2NvdW50cycsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYmFuay9maWF0L2JhbGFuY2UvYXZhaWxhYmxlJyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS9iYW5rL2ZpYXQvYmFsYW5jZS9wZW5kaW5nJyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS9iYW5rL2ZpYXQvYmFsYW5jZS90b3RhbCcsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYmFuay9maWF0L2RlcG9zaXQvY2FuY2VsbGVkJyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS9iYW5rL2ZpYXQvZGVwb3NpdC91bnZlcmlmaWVkJyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS9iYW5rL2ZpYXQvZGVwb3NpdC92ZXJpZmllZCcsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYmFuay9maWF0L3dpdGhkcmF3L2NhbmNlbGxlZCcsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYmFuay9maWF0L3dpdGhkcmF3L2NvbXBsZXRlZCcsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYmFuay9maWF0L3dpdGhkcmF3L3VudmVyaWZpZWQnLFxuICAgICAgICAgICAgICAgICd1c2VyL2V4Y2hhbmdlL2JhbmsvZmlhdC93aXRoZHJhdy92ZXJpZmllZCcsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYXNrL2NhbmNlbGxlZCcsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYXNrL2NvbXBsZXRlZCcsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYXNrL3BlbmRpbmcnLFxuICAgICAgICAgICAgICAgICd1c2VyL2V4Y2hhbmdlL2JpZC9jYW5jZWxsZWQnLFxuICAgICAgICAgICAgICAgICd1c2VyL2V4Y2hhbmdlL2JpZC9jb21wbGV0ZWQnLFxuICAgICAgICAgICAgICAgICd1c2VyL2V4Y2hhbmdlL2JpZC9wZW5kaW5nJyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS9iYW5rL2NvaW4vYWRkcmVzc2VzJyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS9iYW5rL2NvaW4vYmFsYW5jZS9hdmFpbGFibGUnLFxuICAgICAgICAgICAgICAgICd1c2VyL2V4Y2hhbmdlL2JhbmsvY29pbi9iYWxhbmNlL3BlbmRpbmcnLFxuICAgICAgICAgICAgICAgICd1c2VyL2V4Y2hhbmdlL2JhbmsvY29pbi9iYWxhbmNlL3RvdGFsJyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS9iYW5rL2NvaW4vZGVwb3NpdC9jYW5jZWxsZWQnLFxuICAgICAgICAgICAgICAgICd1c2VyL2V4Y2hhbmdlL2JhbmsvY29pbi9kZXBvc2l0L3VudmVyaWZpZWQnLFxuICAgICAgICAgICAgICAgICd1c2VyL2V4Y2hhbmdlL2JhbmsvY29pbi9kZXBvc2l0L3ZlcmlmaWVkJyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS9iYW5rL2NvaW4vd2l0aGRyYXcvY2FuY2VsbGVkJyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS9iYW5rL2NvaW4vd2l0aGRyYXcvY29tcGxldGVkJyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS9iYW5rL2NvaW4vd2l0aGRyYXcvdW52ZXJpZmllZCcsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYmFuay9jb2luL3dpdGhkcmF3L3ZlcmlmaWVkJyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS9iYW5rL3N1bW1hcnknLFxuICAgICAgICAgICAgICAgICd1c2VyL2V4Y2hhbmdlL2NvaW4vZmVlJyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS9maWF0L2ZlZScsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2Uva3ljcycsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvcmVmZXJyYWwvY29pbi9wYWlkJyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS9yZWZlcnJhbC9jb2luL3N1Y2Nlc3NmdWwnLFxuICAgICAgICAgICAgICAgICd1c2VyL2V4Y2hhbmdlL3JlZmVycmFsL2ZpYXQvcGFpZCcsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvcmVmZXJyYWxzJyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS90cmFkZS9zdW1tYXJ5JyxcbiAgICAgICAgICAgICAgICAndXNlci9sb2dpbi90b2tlbi97dG9rZW59JyxcbiAgICAgICAgICAgICAgICAndXNlci9zdW1tYXJ5JyxcbiAgICAgICAgICAgICAgICAndXNlci93YWxsZXQvc3VtbWFyeScsXG4gICAgICAgICAgICAgICAgJ3dhbGxldC9jb2luL3dpdGhkcmF3L2NhbmNlbGxlZCcsXG4gICAgICAgICAgICAgICAgJ3dhbGxldC9jb2luL3dpdGhkcmF3L2NvbXBsZXRlZCcsXG4gICAgICAgICAgICAgICAgJ3dhbGxldC9jb2luL3dpdGhkcmF3L3VudmVyaWZpZWQnLFxuICAgICAgICAgICAgICAgICd3YWxsZXQvY29pbi93aXRoZHJhdy92ZXJpZmllZCcsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2xvZ2luJyxcbiAgICAgICAgICAgICAgICAnbG9naW4vaW5pdGlhdGUnLFxuICAgICAgICAgICAgICAgICdsb2dpbi9wYXNzd29yZC9mb3Jnb3QnLFxuICAgICAgICAgICAgICAgICdtZmEvYXV0aHkvaW5pdGlhdGUnLFxuICAgICAgICAgICAgICAgICdtZmEvZ2EvaW5pdGlhdGUnLFxuICAgICAgICAgICAgICAgICdzaWdudXAnLFxuICAgICAgICAgICAgICAgICd1c2VyL25ldGtpL3VwZGF0ZScsXG4gICAgICAgICAgICAgICAgJ3VzZXIvcHJvZmlsZS9pbWFnZS91cGRhdGUnLFxuICAgICAgICAgICAgICAgICd1c2VyL2V4Y2hhbmdlL2JhbmsvY29pbi93aXRoZHJhdy9pbml0aWF0ZScsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYmFuay9jb2luL3dpdGhkcmF3L25ld1ZlcmlmeWNvZGUnLFxuICAgICAgICAgICAgICAgICd1c2VyL2V4Y2hhbmdlL2JhbmsvZmlhdC93aXRoZHJhdy9pbml0aWF0ZScsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYmFuay9maWF0L3dpdGhkcmF3L25ld1ZlcmlmeWNvZGUnLFxuICAgICAgICAgICAgICAgICd1c2VyL3Bhc3N3b3JkL2NoYW5nZScsXG4gICAgICAgICAgICAgICAgJ3VzZXIvcGFzc3dvcmQvcmVzZXQnLFxuICAgICAgICAgICAgICAgICd1c2VyL3dhbGxldC9jb2luL3dpdGhkcmF3L2luaXRpYXRlJyxcbiAgICAgICAgICAgICAgICAnd2FsbGV0L2NvaW4vd2l0aGRyYXcvbmV3VmVyaWZ5Y29kZScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ3B1dCc6IFtcbiAgICAgICAgICAgICAgICAnc2lnbnVwL3ZlcmlmeS97dG9rZW59JyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS9reWMnLFxuICAgICAgICAgICAgICAgICd1c2VyL2V4Y2hhbmdlL2JhbmsvZmlhdC9kZXBvc2l0L25ldycsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYXNrL25ldycsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYmlkL25ldycsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvaW5zdGFudC9idXknLFxuICAgICAgICAgICAgICAgICd1c2VyL2V4Y2hhbmdlL2luc3RhbnQvc2VsbCcsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYmFuay9jb2luL3dpdGhkcmF3L3ZlcmlmeScsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYmFuay9maWF0L2FjY291bnQvbmV3JyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS9iYW5rL2ZpYXQvd2l0aGRyYXcvdmVyaWZ5JyxcbiAgICAgICAgICAgICAgICAndXNlci9tZmEvYXV0aHkvaW5pdGlhdGUvZW5hYmxlJyxcbiAgICAgICAgICAgICAgICAndXNlci9tZmEvZ2EvaW5pdGlhdGUvZW5hYmxlJyxcbiAgICAgICAgICAgICAgICAndXNlci9uZXRraS9jcmVhdGUnLFxuICAgICAgICAgICAgICAgICd1c2VyL3Byb2ZpbGUvcGhvbmUvbmV3JyxcbiAgICAgICAgICAgICAgICAndXNlci93YWxsZXQvY29pbi9hZGRyZXNzL25ldycsXG4gICAgICAgICAgICAgICAgJ3VzZXIvd2FsbGV0L2NvaW4vbmV3JyxcbiAgICAgICAgICAgICAgICAndXNlci93YWxsZXQvY29pbi93aXRoZHJhdy9zZW5kVG9FeGNoYW5nZScsXG4gICAgICAgICAgICAgICAgJ3VzZXIvd2FsbGV0L2NvaW4vd2l0aGRyYXcvdmVyaWZ5JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAnZGVsZXRlJzogW1xuICAgICAgICAgICAgICAgICd1c2VyL2djbS97Y29kZX0nLFxuICAgICAgICAgICAgICAgICd1c2VyL2xvZ291dCcsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYmFuay9jb2luL3dpdGhkcmF3L3VudmVyaWZpZWQvY2FuY2VsL3t3aXRoZHJhd0lEfScsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYmFuay9maWF0L2RlcG9zaXQvY2FuY2VsL3tkZXBvc2l0SUR9JyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS9hc2svY2FuY2VsL3tvcmRlcklEfScsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYmlkL2NhbmNlbC97b3JkZXJJRH0nLFxuICAgICAgICAgICAgICAgICd1c2VyL2V4Y2hhbmdlL2JhbmsvZmlhdC93aXRoZHJhdy91bnZlcmlmaWVkL2NhbmNlbC97d2l0aGRyYXdJRH0nLFxuICAgICAgICAgICAgICAgICd1c2VyL21mYS9hdXRoeS9kaXNhYmxlL3tjb2RlfScsXG4gICAgICAgICAgICAgICAgJ3VzZXIvbWZhL2dhL2Rpc2FibGUve2NvZGV9JyxcbiAgICAgICAgICAgICAgICAndXNlci9wcm9maWxlL3Bob25lL2RlbGV0ZScsXG4gICAgICAgICAgICAgICAgJ3VzZXIvcHJvZmlsZS9pbWFnZS9kZWxldGUve25ldGtpTmFtZX0nLFxuICAgICAgICAgICAgICAgICd1c2VyL3dhbGxldC9jb2luL3dpdGhkcmF3L3VudmVyaWZpZWQvY2FuY2VsL3t3aXRoZHJhd0lEfScsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgJ21hcmtldHMnOiB7XG4gICAgICAgICdCVEMvSU5SJzogeyAnaWQnOiAnQlRDL0lOUicsICdzeW1ib2wnOiAnQlRDL0lOUicsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdJTlInIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZUdldFVzZXJFeGNoYW5nZUJhbmtTdW1tYXJ5ICgpO1xuICAgICAgICBsZXQgYmFsYW5jZSA9IHJlc3BvbnNlWydtZXNzYWdlJ107XG4gICAgICAgIGxldCBjb2luID0ge1xuICAgICAgICAgICAgJ2ZyZWUnOiBiYWxhbmNlWydhdmFpbGFibGVDb2luQmFsYW5jZSddLFxuICAgICAgICAgICAgJ3VzZWQnOiBiYWxhbmNlWydwZW5kaW5nQ29pbkJhbGFuY2UnXSxcbiAgICAgICAgICAgICd0b3RhbCc6IGJhbGFuY2VbJ3RvdGFsQ29pbkJhbGFuY2UnXSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IGZpYXQgPSB7XG4gICAgICAgICAgICAnZnJlZSc6IGJhbGFuY2VbJ2F2YWlsYWJsZUZpYXRCYWxhbmNlJ10sXG4gICAgICAgICAgICAndXNlZCc6IGJhbGFuY2VbJ3BlbmRpbmdGaWF0QmFsYW5jZSddLFxuICAgICAgICAgICAgJ3RvdGFsJzogYmFsYW5jZVsndG90YWxGaWF0QmFsYW5jZSddLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2luZm8nOiBiYWxhbmNlLFxuICAgICAgICAgICAgJ0JUQyc6IGNvaW4sXG4gICAgICAgICAgICAnSU5SJzogZmlhdCxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IGJpZHMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldEV4Y2hhbmdlQmlkT3JkZXJzIChwYXJhbXMpO1xuICAgICAgICBsZXQgYXNrcyA9IGF3YWl0IHRoaXMucHVibGljR2V0RXhjaGFuZ2VBc2tPcmRlcnMgKHBhcmFtcyk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IGJpZHNbJ21lc3NhZ2UnXSxcbiAgICAgICAgICAgICdhc2tzJzogYXNrc1snbWVzc2FnZSddLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IFtdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaWRlcyA9IFsgJ2JpZHMnLCAnYXNrcycgXTtcbiAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBzaWRlcy5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1tzXTtcbiAgICAgICAgICAgIGxldCBvcmRlcnMgPSBvcmRlcmJvb2tbc2lkZV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBvcmRlciA9IG9yZGVyc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgcHJpY2UgPSBvcmRlclsncmF0ZSddO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBvcmRlclsndm9sJ107XG4gICAgICAgICAgICAgICAgcmVzdWx0W3NpZGVdLnB1c2ggKFsgcHJpY2UsIGFtb3VudCBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0RXhjaGFuZ2VUaWNrZXIgKCk7XG4gICAgICAgIGxldCB0aWNrZXIgPSByZXNwb25zZVsnbWVzc2FnZSddO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGlja2VyWyd0aW1lc3RhbXAnXTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2JpZCddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2FzayddKSxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ29wZW4nXSksXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdFByaWNlJ10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsnY29pbnZvbHVtZSddKSxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsnZmlhdHZvbHVtZSddKSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdGhpcy5wdWJsaWNHZXRFeGNoYW5nZVRyYWRlcyAocGFyYW1zKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IG1ldGhvZCA9ICdwcml2YXRlUHV0VXNlckV4Y2hhbmdlJztcbiAgICAgICAgbGV0IG9yZGVyID0ge307XG4gICAgICAgIGlmICh0eXBlID09ICdtYXJrZXQnKSB7XG4gICAgICAgICAgICBtZXRob2QgKz0gJ0luc3RhbnQnICsgdGhpcy5jYXBpdGFsaXplIChzaWRlKTtcbiAgICAgICAgICAgIGlmIChzaWRlID09ICdidXknKVxuICAgICAgICAgICAgICAgIG9yZGVyWydtYXhGaWF0J10gPSBhbW91bnQ7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgb3JkZXJbJ21heFZvbCddID0gYW1vdW50O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IGRpcmVjdGlvbiA9IChzaWRlID09ICdidXknKSA/ICdCaWQnIDogJ0Fzayc7XG4gICAgICAgICAgICBtZXRob2QgKz0gZGlyZWN0aW9uICsgJ05ldyc7XG4gICAgICAgICAgICBvcmRlclsncmF0ZSddID0gcHJpY2U7XG4gICAgICAgICAgICBvcmRlclsndm9sJ10gPSBhbW91bnQ7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpc1ttZXRob2RdIChzZWxmLmV4dGVuZCAob3JkZXIsIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXNwb25zZSxcbiAgICAgICAgICAgICdpZCc6IHJlc3BvbnNlWydtZXNzYWdlJ11bJ29yZGVySUQnXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyBjYW5jZWxPcmRlciAoKSBpcyBub3QgZnVsbHkgaW1wbGVtZW50ZWQgeWV0Jyk7XG4gICAgICAgIGxldCBtZXRob2QgPSAncHJpdmF0ZURlbGV0ZVVzZXJFeGNoYW5nZUFza0NhbmNlbE9yZGVySWQnOyAvLyBUT0RPIGZpeG1lLCBoYXZlIHRvIHNwZWNpZnkgb3JkZXIgc2lkZSBoZXJlXG4gICAgICAgIHJldHVybiB0aGlzW21ldGhvZF0gKHsgJ29yZGVySUQnOiBpZCB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArICcvJyArIHRoaXMudmVyc2lvbiArICcvJyArIHRoaXMuaW1wbG9kZVBhcmFtcyAocGF0aCwgcGFyYW1zKTtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5vbWl0IChwYXJhbXMsIHRoaXMuZXh0cmFjdFBhcmFtcyAocGF0aCkpO1xuICAgICAgICBpZiAoYXBpID09ICdwcml2YXRlJykge1xuICAgICAgICAgICAgaGVhZGVycyA9IHsgJ0F1dGhvcml6YXRpb24nOiB0aGlzLmFwaUtleSB9O1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChxdWVyeSkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgYm9keSA9IHRoaXMuanNvbiAocXVlcnkpO1xuICAgICAgICAgICAgICAgIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gJ2FwcGxpY2F0aW9uL2pzb24nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdzdWNjZXNzJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIGlmIChyZXNwb25zZVsnc3VjY2VzcyddKVxuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgY29pbnNwb3QgPSB7XG5cbiAgICAnaWQnOiAnY29pbnNwb3QnLFxuICAgICduYW1lJzogJ0NvaW5TcG90JyxcbiAgICAnY291bnRyaWVzJzogJ0FVJywgLy8gQXVzdHJhbGlhXG4gICAgJ3JhdGVMaW1pdCc6IDEwMDAsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjgyMDg0MjktM2NhY2RmOWEtNjg5Ni0xMWU3LTg1NGUtNGM3OWE3NzJhMzBmLmpwZycsXG4gICAgICAgICdhcGknOiB7XG4gICAgICAgICAgICAncHVibGljJzogJ2h0dHBzOi8vd3d3LmNvaW5zcG90LmNvbS5hdS9wdWJhcGknLFxuICAgICAgICAgICAgJ3ByaXZhdGUnOiAnaHR0cHM6Ly93d3cuY29pbnNwb3QuY29tLmF1L2FwaScsXG4gICAgICAgIH0sXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly93d3cuY29pbnNwb3QuY29tLmF1JyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL3d3dy5jb2luc3BvdC5jb20uYXUvYXBpJyxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdsYXRlc3QnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnb3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnb3JkZXJzL2hpc3RvcnknLFxuICAgICAgICAgICAgICAgICdteS9jb2luL2RlcG9zaXQnLFxuICAgICAgICAgICAgICAgICdteS9jb2luL3NlbmQnLFxuICAgICAgICAgICAgICAgICdxdW90ZS9idXknLFxuICAgICAgICAgICAgICAgICdxdW90ZS9zZWxsJyxcbiAgICAgICAgICAgICAgICAnbXkvYmFsYW5jZXMnLFxuICAgICAgICAgICAgICAgICdteS9vcmRlcnMnLFxuICAgICAgICAgICAgICAgICdteS9idXknLFxuICAgICAgICAgICAgICAgICdteS9zZWxsJyxcbiAgICAgICAgICAgICAgICAnbXkvYnV5L2NhbmNlbCcsXG4gICAgICAgICAgICAgICAgJ215L3NlbGwvY2FuY2VsJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9BVUQnOiB7ICdpZCc6ICdCVEMnLCAnc3ltYm9sJzogJ0JUQy9BVUQnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnQVVEJyB9LFxuICAgICAgICAnTFRDL0FVRCc6IHsgJ2lkJzogJ0xUQycsICdzeW1ib2wnOiAnTFRDL0FVRCcsICdiYXNlJzogJ0xUQycsICdxdW90ZSc6ICdBVUQnIH0sXG4gICAgICAgICdET0dFL0FVRCc6IHsgJ2lkJzogJ0RPR0UnLCAnc3ltYm9sJzogJ0RPR0UvQVVEJywgJ2Jhc2UnOiAnRE9HRScsICdxdW90ZSc6ICdBVUQnIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RNeUJhbGFuY2VzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IHJlc3BvbnNlIH07XG4gICAgICAgIGlmICgnYmFsYW5jZScgaW4gcmVzcG9uc2UpIHtcbiAgICAgICAgICAgIGxldCBiYWxhbmNlcyA9IHJlc3BvbnNlWydiYWxhbmNlJ107XG4gICAgICAgICAgICBsZXQgY3VycmVuY2llcyA9IE9iamVjdC5rZXlzIChiYWxhbmNlcyk7XG4gICAgICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IGN1cnJlbmNpZXMubGVuZ3RoOyBjKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBjdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgICAgIGxldCB1cHBlcmNhc2UgPSBjdXJyZW5jeS50b1VwcGVyQ2FzZSAoKTtcbiAgICAgICAgICAgICAgICBsZXQgYWNjb3VudCA9IHtcbiAgICAgICAgICAgICAgICAgICAgJ2ZyZWUnOiBiYWxhbmNlc1tjdXJyZW5jeV0sXG4gICAgICAgICAgICAgICAgICAgICd1c2VkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAndG90YWwnOiBiYWxhbmNlc1tjdXJyZW5jeV0sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBpZiAodXBwZXJjYXNlID09ICdEUksnKVxuICAgICAgICAgICAgICAgICAgICB1cHBlcmNhc2UgPSAnREFTSCc7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3VwcGVyY2FzZV0gPSBhY2NvdW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0T3JkZXJzICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2NvaW50eXBlJzogcFsnaWQnXSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdiaWRzJzogW10sXG4gICAgICAgICAgICAnYXNrcyc6IFtdLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHNpZGVzID0geyAnYmlkcyc6ICdidXlvcmRlcnMnLCAnYXNrcyc6ICdzZWxsb3JkZXJzJyB9O1xuICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzIChzaWRlcyk7XG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwga2V5cy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgbGV0IGtleSA9IGtleXNba107XG4gICAgICAgICAgICBsZXQgc2lkZSA9IHNpZGVzW2tleV07XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAob3JkZXJbJ3JhdGUnXSk7XG4gICAgICAgICAgICAgICAgbGV0IGFtb3VudCA9IHBhcnNlRmxvYXQgKG9yZGVyWydhbW91bnQnXSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W2tleV0ucHVzaCAoWyBwcmljZSwgYW1vdW50IF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlc3VsdFsnYmlkcyddID0gdGhpcy5zb3J0QnkgKHJlc3VsdFsnYmlkcyddLCAwLCB0cnVlKTtcbiAgICAgICAgcmVzdWx0Wydhc2tzJ10gPSB0aGlzLnNvcnRCeSAocmVzdWx0Wydhc2tzJ10sIDApO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0TGF0ZXN0ICgpO1xuICAgICAgICBsZXQgaWQgPSB0aGlzLm1hcmtldElkIChtYXJrZXQpO1xuICAgICAgICBpZCA9IGlkLnRvTG93ZXJDYXNlICgpO1xuICAgICAgICBsZXQgdGlja2VyID0gcmVzcG9uc2VbJ3ByaWNlcyddW2lkXTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xvdyc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2JpZCddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2FzayddKSxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdCddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJpdmF0ZVBvc3RPcmRlcnNIaXN0b3J5ICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2NvaW50eXBlJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBtZXRob2QgPSAncHJpdmF0ZVBvc3RNeScgKyB0aGlzLmNhcGl0YWxpemUgKHNpZGUpO1xuICAgICAgICBpZiAodHlwZSA9PSAnbWFya2V0JylcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyBhbGxvd3MgbGltaXQgb3JkZXJzIG9ubHknKTtcbiAgICAgICAgbGV0IG9yZGVyID0ge1xuICAgICAgICAgICAgJ2NvaW50eXBlJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICdhbW91bnQnOiBhbW91bnQsXG4gICAgICAgICAgICAncmF0ZSc6IHByaWNlLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGhpc1ttZXRob2RdICh0aGlzLmV4dGVuZCAob3JkZXIsIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyBjYW5jZWxPcmRlciAoKSBpcyBub3QgZnVsbHkgaW1wbGVtZW50ZWQgeWV0Jyk7XG4gICAgICAgIGxldCBtZXRob2QgPSAncHJpdmF0ZVBvc3RNeUJ1eSc7XG4gICAgICAgIHJldHVybiB0aGlzW21ldGhvZF0gKHsgJ2lkJzogaWQgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmFwaUtleSlcbiAgICAgICAgICAgIHRocm93IG5ldyBBdXRoZW50aWNhdGlvbkVycm9yICh0aGlzLmlkICsgJyByZXF1aXJlcyBhcGlLZXkgZm9yIGFsbCByZXF1ZXN0cycpO1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXVthcGldICsgJy8nICsgcGF0aDtcbiAgICAgICAgaWYgKGFwaSA9PSAncHJpdmF0ZScpIHtcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCk7XG4gICAgICAgICAgICBib2R5ID0gdGhpcy5qc29uICh0aGlzLmV4dGVuZCAoeyAnbm9uY2UnOiBub25jZSB9LCBwYXJhbXMpKTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAnQ29udGVudC1MZW5ndGgnOiBib2R5Lmxlbmd0aCxcbiAgICAgICAgICAgICAgICAna2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ3NpZ24nOiB0aGlzLmhtYWMgKHRoaXMuZW5jb2RlIChib2R5KSwgdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSwgJ3NoYTUxMicpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGNyeXB0b3BpYSA9IHtcblxuICAgICdpZCc6ICdjcnlwdG9waWEnLFxuICAgICduYW1lJzogJ0NyeXB0b3BpYScsXG4gICAgJ3JhdGVMaW1pdCc6IDE1MDAsXG4gICAgJ2NvdW50cmllcyc6ICdOWicsIC8vIE5ldyBaZWFsYW5kXG4gICAgJ2hhc0ZldGNoVGlja2Vycyc6IHRydWUsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjk0ODQzOTQtN2I0ZWE2ZTItODRjNi0xMWU3LTgzZTUtMWZjY2Y0YjJkYzgxLmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly93d3cuY3J5cHRvcGlhLmNvLm56L2FwaScsXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly93d3cuY3J5cHRvcGlhLmNvLm56JyxcbiAgICAgICAgJ2RvYyc6IFtcbiAgICAgICAgICAgICdodHRwczovL3d3dy5jcnlwdG9waWEuY28ubnovRm9ydW0vVGhyZWFkLzI1NScsXG4gICAgICAgICAgICAnaHR0cHM6Ly93d3cuY3J5cHRvcGlhLmNvLm56L0ZvcnVtL1RocmVhZC8yNTYnLFxuICAgICAgICBdLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ0dldEN1cnJlbmNpZXMnLFxuICAgICAgICAgICAgICAgICdHZXRUcmFkZVBhaXJzJyxcbiAgICAgICAgICAgICAgICAnR2V0TWFya2V0cycsXG4gICAgICAgICAgICAgICAgJ0dldE1hcmtldHMve2lkfScsXG4gICAgICAgICAgICAgICAgJ0dldE1hcmtldHMve2hvdXJzfScsXG4gICAgICAgICAgICAgICAgJ0dldE1hcmtldHMve2lkfS97aG91cnN9JyxcbiAgICAgICAgICAgICAgICAnR2V0TWFya2V0L3tpZH0nLFxuICAgICAgICAgICAgICAgICdHZXRNYXJrZXQve2lkfS97aG91cnN9JyxcbiAgICAgICAgICAgICAgICAnR2V0TWFya2V0SGlzdG9yeS97aWR9JyxcbiAgICAgICAgICAgICAgICAnR2V0TWFya2V0SGlzdG9yeS97aWR9L3tob3Vyc30nLFxuICAgICAgICAgICAgICAgICdHZXRNYXJrZXRPcmRlcnMve2lkfScsXG4gICAgICAgICAgICAgICAgJ0dldE1hcmtldE9yZGVycy97aWR9L3tjb3VudH0nLFxuICAgICAgICAgICAgICAgICdHZXRNYXJrZXRPcmRlckdyb3Vwcy97aWRzfS97Y291bnR9JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ0NhbmNlbFRyYWRlJyxcbiAgICAgICAgICAgICAgICAnR2V0QmFsYW5jZScsXG4gICAgICAgICAgICAgICAgJ0dldERlcG9zaXRBZGRyZXNzJyxcbiAgICAgICAgICAgICAgICAnR2V0T3Blbk9yZGVycycsXG4gICAgICAgICAgICAgICAgJ0dldFRyYWRlSGlzdG9yeScsXG4gICAgICAgICAgICAgICAgJ0dldFRyYW5zYWN0aW9ucycsXG4gICAgICAgICAgICAgICAgJ1N1Ym1pdFRpcCcsXG4gICAgICAgICAgICAgICAgJ1N1Ym1pdFRyYWRlJyxcbiAgICAgICAgICAgICAgICAnU3VibWl0VHJhbnNmZXInLFxuICAgICAgICAgICAgICAgICdTdWJtaXRXaXRoZHJhdycsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE1hcmtldHMgKCkge1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgbGV0IG1hcmtldHMgPSByZXNwb25zZVsnRGF0YSddO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1hcmtldHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCBtYXJrZXQgPSBtYXJrZXRzW2ldO1xuICAgICAgICAgICAgbGV0IGlkID0gbWFya2V0WydUcmFkZVBhaXJJZCddO1xuICAgICAgICAgICAgbGV0IHN5bWJvbCA9IG1hcmtldFsnTGFiZWwnXTtcbiAgICAgICAgICAgIGxldCBbIGJhc2UsIHF1b3RlIF0gPSBzeW1ib2wuc3BsaXQgKCcvJyk7XG4gICAgICAgICAgICByZXN1bHQucHVzaCAoe1xuICAgICAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICAgICAgICAgICdzeW1ib2wnOiBzeW1ib2wsXG4gICAgICAgICAgICAgICAgJ2Jhc2UnOiBiYXNlLFxuICAgICAgICAgICAgICAgICdxdW90ZSc6IHF1b3RlLFxuICAgICAgICAgICAgICAgICdpbmZvJzogbWFya2V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRNYXJrZXRPcmRlcnNJZCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdpZCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgb3JkZXJib29rID0gcmVzcG9uc2VbJ0RhdGEnXTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSB7ICdiaWRzJzogJ0J1eScsICdhc2tzJzogJ1NlbGwnIH07XG4gICAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMgKHNpZGVzKTtcbiAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBrZXlzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICBsZXQga2V5ID0ga2V5c1trXTtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNba2V5XTtcbiAgICAgICAgICAgIGxldCBvcmRlcnMgPSBvcmRlcmJvb2tbc2lkZV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBvcmRlciA9IG9yZGVyc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgcHJpY2UgPSBwYXJzZUZsb2F0IChvcmRlclsnUHJpY2UnXSk7XG4gICAgICAgICAgICAgICAgbGV0IGFtb3VudCA9IHBhcnNlRmxvYXQgKG9yZGVyWydUb3RhbCddKTtcbiAgICAgICAgICAgICAgICByZXN1bHRba2V5XS5wdXNoIChbIHByaWNlLCBhbW91bnQgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgcGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KSB7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydIaWdoJ10pLFxuICAgICAgICAgICAgJ2xvdyc6IHBhcnNlRmxvYXQgKHRpY2tlclsnTG93J10pLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnQmlkUHJpY2UnXSksXG4gICAgICAgICAgICAnYXNrJzogcGFyc2VGbG9hdCAodGlja2VyWydBc2tQcmljZSddKSxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ09wZW4nXSksXG4gICAgICAgICAgICAnY2xvc2UnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ0Nsb3NlJ10pLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ0xhc3RQcmljZSddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ0NoYW5nZSddKSxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsnQmFzZVZvbHVtZSddKSxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsnVm9sdW1lJ10pLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBtID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0TWFya2V0SWQgKHtcbiAgICAgICAgICAgICdpZCc6IG1bJ2lkJ10sXG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgdGlja2VyID0gcmVzcG9uc2VbJ0RhdGEnXTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VUaWNrZXIgKHRpY2tlciwgbSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VycyAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0TWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHt9O1xuICAgICAgICBsZXQgdGlja2VycyA9IHJlc3BvbnNlWydEYXRhJ107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGlja2Vycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IHRpY2tlciA9IHRpY2tlcnNbaV07XG4gICAgICAgICAgICBsZXQgaWQgPSB0aWNrZXJbJ1RyYWRlUGFpcklkJ107XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gdGhpcy5tYXJrZXRzX2J5X2lkW2lkXTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBtYXJrZXRbJ3N5bWJvbCddO1xuICAgICAgICAgICAgcmVzdWx0W3N5bWJvbF0gPSB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIG1hcmtldCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgcGFyc2VUcmFkZSAodHJhZGUsIG1hcmtldCkge1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdHJhZGVbJ1RpbWVzdGFtcCddICogMTAwMDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpZCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdpbmZvJzogdHJhZGUsXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ3N5bWJvbCc6IG1hcmtldFsnc3ltYm9sJ10sXG4gICAgICAgICAgICAndHlwZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdzaWRlJzogdHJhZGVbJ1R5cGUnXS50b0xvd2VyQ2FzZSAoKSxcbiAgICAgICAgICAgICdwcmljZSc6IHRyYWRlWydQcmljZSddLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IHRyYWRlWydBbW91bnQnXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG0gPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRNYXJrZXRIaXN0b3J5SWRIb3VycyAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdpZCc6IG1bJ2lkJ10sXG4gICAgICAgICAgICAnaG91cnMnOiAyNCwgLy8gZGVmYXVsdFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IHRyYWRlcyA9IHJlc3BvbnNlWydEYXRhJ107XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlVHJhZGVzICh0cmFkZXMsIG0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0R2V0QmFsYW5jZSAoKTtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gcmVzcG9uc2VbJ0RhdGEnXTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiByZXNwb25zZSB9O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJhbGFuY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgYmFsYW5jZSA9IGJhbGFuY2VzW2ldO1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gYmFsYW5jZVsnU3ltYm9sJ107XG4gICAgICAgICAgICBsZXQgYWNjb3VudCA9IHtcbiAgICAgICAgICAgICAgICAnZnJlZSc6IGJhbGFuY2VbJ0F2YWlsYWJsZSddLFxuICAgICAgICAgICAgICAgICd1c2VkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IGJhbGFuY2VbJ1RvdGFsJ10sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYWNjb3VudFsndXNlZCddID0gYWNjb3VudFsndG90YWwnXSAtIGFjY291bnRbJ2ZyZWUnXTtcbiAgICAgICAgICAgIHJlc3VsdFtjdXJyZW5jeV0gPSBhY2NvdW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdNYXJrZXQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICAgICAgJ1R5cGUnOiB0aGlzLmNhcGl0YWxpemUgKHNpZGUpLFxuICAgICAgICAgICAgJ1JhdGUnOiBwcmljZSxcbiAgICAgICAgICAgICdBbW91bnQnOiBhbW91bnQsXG4gICAgICAgIH07XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RTdWJtaXRUcmFkZSAodGhpcy5leHRlbmQgKG9yZGVyLCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnRGF0YSddWydPcmRlcklkJ10udG9TdHJpbmcgKCksXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdENhbmNlbFRyYWRlICh7XG4gICAgICAgICAgICAnVHlwZSc6ICdUcmFkZScsXG4gICAgICAgICAgICAnT3JkZXJJZCc6IGlkLFxuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArICcvJyArIHRoaXMuaW1wbG9kZVBhcmFtcyAocGF0aCwgcGFyYW1zKTtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5vbWl0IChwYXJhbXMsIHRoaXMuZXh0cmFjdFBhcmFtcyAocGF0aCkpO1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHF1ZXJ5KS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChxdWVyeSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpLnRvU3RyaW5nICgpO1xuICAgICAgICAgICAgYm9keSA9IHRoaXMuanNvbiAocXVlcnkpO1xuICAgICAgICAgICAgbGV0IGhhc2ggPSB0aGlzLmhhc2ggKHRoaXMuZW5jb2RlIChib2R5KSwgJ21kNScsICdiYXNlNjQnKTtcbiAgICAgICAgICAgIGxldCBzZWNyZXQgPSB0aGlzLmJhc2U2NFRvQmluYXJ5ICh0aGlzLnNlY3JldCk7XG4gICAgICAgICAgICBsZXQgdXJpID0gdGhpcy5lbmNvZGVVUklDb21wb25lbnQgKHVybCk7XG4gICAgICAgICAgICBsZXQgbG93ZXJjYXNlID0gdXJpLnRvTG93ZXJDYXNlICgpO1xuICAgICAgICAgICAgbGV0IHBheWxvYWQgPSB0aGlzLmFwaUtleSArIG1ldGhvZCArIGxvd2VyY2FzZSArIG5vbmNlICsgdGhpcy5iaW5hcnlUb1N0cmluZyAoaGFzaCk7XG4gICAgICAgICAgICBsZXQgc2lnbmF0dXJlID0gdGhpcy5obWFjICh0aGlzLmVuY29kZSAocGF5bG9hZCksIHNlY3JldCwgJ3NoYTI1NicsICdiYXNlNjQnKTtcbiAgICAgICAgICAgIGxldCBhdXRoID0gJ2FteCAnICsgdGhpcy5hcGlLZXkgKyAnOicgKyB0aGlzLmJpbmFyeVRvU3RyaW5nIChzaWduYXR1cmUpICsgJzonICsgbm9uY2U7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtTGVuZ3RoJzogYm9keS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgJ0F1dGhvcml6YXRpb24nOiBhdXRoLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgICAgIGlmICgnU3VjY2VzcycgaW4gcmVzcG9uc2UpXG4gICAgICAgICAgICBpZiAocmVzcG9uc2VbJ1N1Y2Nlc3MnXSlcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGRzeCA9IHtcblxuICAgICdpZCc6ICdkc3gnLFxuICAgICduYW1lJzogJ0RTWCcsXG4gICAgJ2NvdW50cmllcyc6ICdVSycsXG4gICAgJ3JhdGVMaW1pdCc6IDE1MDAsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc5OTAyNzUtMTQxMzE1OGEtNjQ1YS0xMWU3LTkzMWMtOTQ3MTdmNzUxMGUzLmpwZycsXG4gICAgICAgICdhcGknOiB7XG4gICAgICAgICAgICAnbWFwaSc6ICdodHRwczovL2RzeC51ay9tYXBpJywgIC8vIG1hcmtldCBkYXRhXG4gICAgICAgICAgICAndGFwaSc6ICdodHRwczovL2RzeC51ay90YXBpJywgIC8vIHRyYWRpbmdcbiAgICAgICAgICAgICdkd2FwaSc6ICdodHRwczovL2RzeC51ay9kd2FwaScsIC8vIGRlcG9zaXQvd2l0aGRyYXdcbiAgICAgICAgfSxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL2RzeC51aycsXG4gICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAnaHR0cHM6Ly9hcGkuZHN4LnVrJyxcbiAgICAgICAgICAgICdodHRwczovL2RzeC51ay9hcGlfZG9jcy9wdWJsaWMnLFxuICAgICAgICAgICAgJ2h0dHBzOi8vZHN4LnVrL2FwaV9kb2NzL3ByaXZhdGUnLFxuICAgICAgICAgICAgJycsXG4gICAgICAgIF0sXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAnbWFwaSc6IHsgLy8gbWFya2V0IGRhdGEgKHB1YmxpYylcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ2JhcnNGcm9tTW9tZW50L3tpZH0ve3BlcmlvZH0ve3N0YXJ0fScsIC8vIGVtcHR5IHJlcGx5IDpcXFxuICAgICAgICAgICAgICAgICdkZXB0aC97aWR9JyxcbiAgICAgICAgICAgICAgICAnaW5mbycsXG4gICAgICAgICAgICAgICAgJ2xhc3RCYXJzL3tpZH0ve3BlcmlvZH0ve2Ftb3VudH0nLCAvLyBwZXJpb2QgaXMgKG0sIGggb3IgZClcbiAgICAgICAgICAgICAgICAncGVyaW9kQmFycy97aWR9L3twZXJpb2R9L3tzdGFydH0ve2VuZH0nLFxuICAgICAgICAgICAgICAgICd0aWNrZXIve2lkfScsXG4gICAgICAgICAgICAgICAgJ3RyYWRlcy97aWR9JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICd0YXBpJzogeyAvLyB0cmFkaW5nIChwcml2YXRlKVxuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2dldEluZm8nLFxuICAgICAgICAgICAgICAgICdUcmFuc0hpc3RvcnknLFxuICAgICAgICAgICAgICAgICdUcmFkZUhpc3RvcnknLFxuICAgICAgICAgICAgICAgICdPcmRlckhpc3RvcnknLFxuICAgICAgICAgICAgICAgICdBY3RpdmVPcmRlcnMnLFxuICAgICAgICAgICAgICAgICdUcmFkZScsXG4gICAgICAgICAgICAgICAgJ0NhbmNlbE9yZGVyJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdkd2FwaSc6IHsgLy8gZGVwb3NpdCAvIHdpdGhkcmF3IChwcml2YXRlKVxuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2dldENyeXB0b0RlcG9zaXRBZGRyZXNzJyxcbiAgICAgICAgICAgICAgICAnY3J5cHRvV2l0aGRyYXcnLFxuICAgICAgICAgICAgICAgICdmaWF0V2l0aGRyYXcnLFxuICAgICAgICAgICAgICAgICdnZXRUcmFuc2FjdGlvblN0YXR1cycsXG4gICAgICAgICAgICAgICAgJ2dldFRyYW5zYWN0aW9ucycsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE1hcmtldHMgKCkge1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLm1hcGlHZXRJbmZvICgpO1xuICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzIChyZXNwb25zZVsncGFpcnMnXSk7XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgcCA9IDA7IHAgPCBrZXlzLmxlbmd0aDsgcCsrKSB7XG4gICAgICAgICAgICBsZXQgaWQgPSBrZXlzW3BdO1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IHJlc3BvbnNlWydwYWlycyddW2lkXTtcbiAgICAgICAgICAgIGxldCBiYXNlID0gaWQuc2xpY2UgKDAsIDMpO1xuICAgICAgICAgICAgbGV0IHF1b3RlID0gaWQuc2xpY2UgKDMsIDYpO1xuICAgICAgICAgICAgYmFzZSA9IGJhc2UudG9VcHBlckNhc2UgKCk7XG4gICAgICAgICAgICBxdW90ZSA9IHF1b3RlLnRvVXBwZXJDYXNlICgpO1xuICAgICAgICAgICAgbGV0IHN5bWJvbCA9IGJhc2UgKyAnLycgKyBxdW90ZTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoICh7XG4gICAgICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgICAgICAgICAgJ3N5bWJvbCc6IHN5bWJvbCxcbiAgICAgICAgICAgICAgICAnYmFzZSc6IGJhc2UsXG4gICAgICAgICAgICAgICAgJ3F1b3RlJzogcXVvdGUsXG4gICAgICAgICAgICAgICAgJ2luZm8nOiBtYXJrZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnRhcGlQb3N0R2V0SW5mbyAoKTtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gcmVzcG9uc2VbJ3JldHVybiddO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGJhbGFuY2VzIH07XG4gICAgICAgIGxldCBjdXJyZW5jaWVzID0gT2JqZWN0LmtleXMgKGJhbGFuY2VzWyd0b3RhbCddKTtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBjdXJyZW5jaWVzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBjdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiBiYWxhbmNlc1snZnVuZHMnXVtjdXJyZW5jeV0sXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogYmFsYW5jZXNbJ3RvdGFsJ11bY3VycmVuY3ldLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGFjY291bnRbJ3VzZWQnXSA9IGFjY291bnRbJ3RvdGFsJ10gLSBhY2NvdW50WydmcmVlJ107XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLm1hcGlHZXREZXB0aElkICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2lkJzogcFsnaWQnXSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSByZXNwb25zZVtwWydpZCddXTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gb3JkZXJbMF07XG4gICAgICAgICAgICAgICAgbGV0IGFtb3VudCA9IG9yZGVyWzFdO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtzaWRlXS5wdXNoIChbIHByaWNlLCBhbW91bnQgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLm1hcGlHZXRUaWNrZXJJZCAoe1xuICAgICAgICAgICAgJ2lkJzogcFsnaWQnXSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aWNrZXIgPSByZXNwb25zZVtwWydpZCddXTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRpY2tlclsndXBkYXRlZCddICogMTAwMDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2J1eSddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3NlbGwnXSksXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xhc3QnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYXZnJ10pLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbCddKSxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndm9sX2N1ciddKSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBpR2V0VHJhZGVzSWQgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnaWQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgaWYgKHR5cGUgPT0gJ21hcmtldCcpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgYWxsb3dzIGxpbWl0IG9yZGVycyBvbmx5Jyk7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdwYWlyJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICd0eXBlJzogc2lkZSxcbiAgICAgICAgICAgICdyYXRlJzogcHJpY2UsXG4gICAgICAgICAgICAnYW1vdW50JzogYW1vdW50LFxuICAgICAgICB9O1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnRhcGlQb3N0VHJhZGUgKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ2lkJzogcmVzcG9uc2VbJ3JldHVybiddWydvcmRlcklkJ10udG9TdHJpbmcgKCksXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy50YXBpUG9zdENhbmNlbE9yZGVyICh7ICdvcmRlcklkJzogaWQgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdtYXBpJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddW2FwaV07XG4gICAgICAgIGlmICgoYXBpID09ICdtYXBpJykgfHwgKGFwaSA9PSAnZHdhcGknKSlcbiAgICAgICAgICAgIHVybCArPSAnLycgKyB0aGlzLmltcGxvZGVQYXJhbXMgKHBhdGgsIHBhcmFtcyk7XG4gICAgICAgIGxldCBxdWVyeSA9IHRoaXMub21pdCAocGFyYW1zLCB0aGlzLmV4dHJhY3RQYXJhbXMgKHBhdGgpKTtcbiAgICAgICAgaWYgKGFwaSA9PSAnbWFwaScpIHtcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyAocXVlcnkpLmxlbmd0aClcbiAgICAgICAgICAgICAgICB1cmwgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHF1ZXJ5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCk7XG4gICAgICAgICAgICBsZXQgbWV0aG9kID0gcGF0aDtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLnVybGVuY29kZSAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICAgICAnbWV0aG9kJzogcGF0aCxcbiAgICAgICAgICAgICAgICAnbm9uY2UnOiBub25jZSxcbiAgICAgICAgICAgIH0sIHF1ZXJ5KSk7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICAgICAgICAnQ29udGVudC1MZW5ndGgnOiBib2R5Lmxlbmd0aCxcbiAgICAgICAgICAgICAgICAnS2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ1NpZ24nOiB0aGlzLmhtYWMgKHRoaXMuZW5jb2RlIChib2R5KSwgdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSwgJ3NoYTUxMicsICdiYXNlNjQnKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgICAgICBpZiAoYXBpID09ICdtYXBpJylcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgaWYgKCdzdWNjZXNzJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIGlmIChyZXNwb25zZVsnc3VjY2VzcyddKVxuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgZXhtbyA9IHtcblxuICAgICdpZCc6ICdleG1vJyxcbiAgICAnbmFtZSc6ICdFWE1PJyxcbiAgICAnY291bnRyaWVzJzogWyAnRVMnLCAnUlUnIF0sIC8vIFNwYWluLCBSdXNzaWFcbiAgICAncmF0ZUxpbWl0JzogMTAwMCwgLy8gb25jZSBldmVyeSAzNTAgbXMg4omIIDE4MCByZXF1ZXN0cyBwZXIgbWludXRlIOKJiCAzIHJlcXVlc3RzIHBlciBzZWNvbmRcbiAgICAndmVyc2lvbic6ICd2MScsXG4gICAgJ2hhc0ZldGNoVGlja2Vycyc6IHRydWUsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc3NjY0OTEtMWIwZWE5NTYtNWVkYS0xMWU3LTkyMjUtNDBkNjdiNDgxYjhkLmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly9hcGkuZXhtby5jb20nLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vZXhtby5tZScsXG4gICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAnaHR0cHM6Ly9leG1vLm1lL3J1L2FwaV9kb2MnLFxuICAgICAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS9leG1vLWRldi9leG1vX2FwaV9saWIvdHJlZS9tYXN0ZXIvbm9kZWpzJyxcbiAgICAgICAgXSxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdjdXJyZW5jeScsXG4gICAgICAgICAgICAgICAgJ29yZGVyX2Jvb2snLFxuICAgICAgICAgICAgICAgICdwYWlyX3NldHRpbmdzJyxcbiAgICAgICAgICAgICAgICAndGlja2VyJyxcbiAgICAgICAgICAgICAgICAndHJhZGVzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ3VzZXJfaW5mbycsXG4gICAgICAgICAgICAgICAgJ29yZGVyX2NyZWF0ZScsXG4gICAgICAgICAgICAgICAgJ29yZGVyX2NhbmNlbCcsXG4gICAgICAgICAgICAgICAgJ3VzZXJfb3Blbl9vcmRlcnMnLFxuICAgICAgICAgICAgICAgICd1c2VyX3RyYWRlcycsXG4gICAgICAgICAgICAgICAgJ3VzZXJfY2FuY2VsbGVkX29yZGVycycsXG4gICAgICAgICAgICAgICAgJ29yZGVyX3RyYWRlcycsXG4gICAgICAgICAgICAgICAgJ3JlcXVpcmVkX2Ftb3VudCcsXG4gICAgICAgICAgICAgICAgJ2RlcG9zaXRfYWRkcmVzcycsXG4gICAgICAgICAgICAgICAgJ3dpdGhkcmF3X2NyeXB0JyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXdfZ2V0X3R4aWQnLFxuICAgICAgICAgICAgICAgICdleGNvZGVfY3JlYXRlJyxcbiAgICAgICAgICAgICAgICAnZXhjb2RlX2xvYWQnLFxuICAgICAgICAgICAgICAgICd3YWxsZXRfaGlzdG9yeScsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE1hcmtldHMgKCkge1xuICAgICAgICBsZXQgbWFya2V0cyA9IGF3YWl0IHRoaXMucHVibGljR2V0UGFpclNldHRpbmdzICgpO1xuICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzIChtYXJrZXRzKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGxldCBwID0gMDsgcCA8IGtleXMubGVuZ3RoOyBwKyspIHtcbiAgICAgICAgICAgIGxldCBpZCA9IGtleXNbcF07XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gbWFya2V0c1tpZF07XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gaWQucmVwbGFjZSAoJ18nLCAnLycpO1xuICAgICAgICAgICAgbGV0IFsgYmFzZSwgcXVvdGUgXSA9IHN5bWJvbC5zcGxpdCAoJy8nKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoICh7XG4gICAgICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgICAgICAgICAgJ3N5bWJvbCc6IHN5bWJvbCxcbiAgICAgICAgICAgICAgICAnYmFzZSc6IGJhc2UsXG4gICAgICAgICAgICAgICAgJ3F1b3RlJzogcXVvdGUsXG4gICAgICAgICAgICAgICAgJ2luZm8nOiBtYXJrZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0VXNlckluZm8gKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogcmVzcG9uc2UgfTtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCB0aGlzLmN1cnJlbmNpZXMubGVuZ3RoOyBjKyspIHtcbiAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IHRoaXMuY3VycmVuY2llc1tjXTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd1c2VkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoY3VycmVuY3kgaW4gcmVzcG9uc2VbJ2JhbGFuY2VzJ10pXG4gICAgICAgICAgICAgICAgYWNjb3VudFsnZnJlZSddID0gcGFyc2VGbG9hdCAocmVzcG9uc2VbJ2JhbGFuY2VzJ11bY3VycmVuY3ldKTtcbiAgICAgICAgICAgIGlmIChjdXJyZW5jeSBpbiByZXNwb25zZVsncmVzZXJ2ZWQnXSlcbiAgICAgICAgICAgICAgICBhY2NvdW50Wyd1c2VkJ10gPSBwYXJzZUZsb2F0IChyZXNwb25zZVsncmVzZXJ2ZWQnXVtjdXJyZW5jeV0pO1xuICAgICAgICAgICAgYWNjb3VudFsndG90YWwnXSA9IHRoaXMuc3VtIChhY2NvdW50WydmcmVlJ10sIGFjY291bnRbJ3VzZWQnXSk7XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldE9yZGVyQm9vayAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdwYWlyJzogcFsnaWQnXSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSByZXNwb25zZVtwWydpZCddXTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSB7ICdiaWRzJzogJ2JpZCcsICdhc2tzJzogJ2FzaycgfTtcbiAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyAoc2lkZXMpO1xuICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGtleXMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgIGxldCBrZXkgPSBrZXlzW2tdO1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1trZXldO1xuICAgICAgICAgICAgbGV0IG9yZGVycyA9IG9yZGVyYm9va1tzaWRlXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9yZGVyID0gb3JkZXJzW2ldO1xuICAgICAgICAgICAgICAgIGxldCBwcmljZSA9IHBhcnNlRmxvYXQgKG9yZGVyWzBdKTtcbiAgICAgICAgICAgICAgICBsZXQgYW1vdW50ID0gcGFyc2VGbG9hdCAob3JkZXJbMV0pO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldLnB1c2ggKFsgcHJpY2UsIGFtb3VudCBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBwYXJzZVRpY2tlciAodGlja2VyLCBtYXJrZXQpIHtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRpY2tlclsndXBkYXRlZCddICogMTAwMDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2J1eV9wcmljZSddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3NlbGxfcHJpY2UnXSksXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xhc3RfdHJhZGUnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYXZnJ10pLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbCddKSxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndm9sX2N1cnInXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXJzIChjdXJyZW5jeSA9ICdVU0QnKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0VGlja2VyICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge307XG4gICAgICAgIGxldCBpZHMgPSBPYmplY3Qua2V5cyAocmVzcG9uc2UpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IGlkID0gaWRzW2ldO1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IHRoaXMubWFya2V0c19ieV9pZFtpZF07XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gbWFya2V0WydzeW1ib2wnXTtcbiAgICAgICAgICAgIGxldCB0aWNrZXIgPSByZXNwb25zZVtpZF07XG4gICAgICAgICAgICByZXN1bHRbc3ltYm9sXSA9IHRoaXMucGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0VGlja2VyICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVRpY2tlciAocmVzcG9uc2VbcFsnaWQnXV0sIHApO1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wdWJsaWNHZXRUcmFkZXMgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAncGFpcic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcHJlZml4ID0gJyc7XG4gICAgICAgIGlmICh0eXBlID09ICdtYXJrZXQnKVxuICAgICAgICAgICAgcHJlZml4ID0gJ21hcmtldF8nO1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAncGFpcic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgICAgICAncXVhbnRpdHknOiBhbW91bnQsXG4gICAgICAgICAgICAncHJpY2UnOiBwcmljZSB8fCAwLFxuICAgICAgICAgICAgJ3R5cGUnOiBwcmVmaXggKyBzaWRlLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0T3JkZXJDcmVhdGUgKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ2lkJzogcmVzcG9uc2VbJ29yZGVyX2lkJ10udG9TdHJpbmcgKCksXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdE9yZGVyQ2FuY2VsICh7ICdvcmRlcl9pZCc6IGlkIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgJy8nICsgdGhpcy52ZXJzaW9uICsgJy8nICsgcGF0aDtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChwYXJhbXMpLmxlbmd0aClcbiAgICAgICAgICAgICAgICB1cmwgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHBhcmFtcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpO1xuICAgICAgICAgICAgYm9keSA9IHRoaXMudXJsZW5jb2RlICh0aGlzLmV4dGVuZCAoeyAnbm9uY2UnOiBub25jZSB9LCBwYXJhbXMpKTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgICAgICAgICdDb250ZW50LUxlbmd0aCc6IGJvZHkubGVuZ3RoLFxuICAgICAgICAgICAgICAgICdLZXknOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgICAgICAnU2lnbic6IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKGJvZHkpLCB0aGlzLmVuY29kZSAodGhpcy5zZWNyZXQpLCAnc2hhNTEyJyksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdyZXN1bHQnIGluIHJlc3BvbnNlKSB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2VbJ3Jlc3VsdCddKVxuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBmbG93YnRjID0ge1xuXG4gICAgJ2lkJzogJ2Zsb3didGMnLFxuICAgICduYW1lJzogJ2Zsb3dCVEMnLFxuICAgICdjb3VudHJpZXMnOiAnQlInLCAvLyBCcmF6aWxcbiAgICAndmVyc2lvbic6ICd2MScsXG4gICAgJ3JhdGVMaW1pdCc6IDEwMDAsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjgxNjI0NjUtY2Q4MTVkNGMtNjdjZi0xMWU3LThlNTctNDM4YmVhMDUyM2EyLmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly9hcGkuZmxvd2J0Yy5jb206ODQwMC9hamF4JyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3RyYWRlci5mbG93YnRjLmNvbScsXG4gICAgICAgICdkb2MnOiAnaHR0cDovL3d3dy5mbG93YnRjLmNvbS5ici9hcGkvJyxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnR2V0VGlja2VyJyxcbiAgICAgICAgICAgICAgICAnR2V0VHJhZGVzJyxcbiAgICAgICAgICAgICAgICAnR2V0VHJhZGVzQnlEYXRlJyxcbiAgICAgICAgICAgICAgICAnR2V0T3JkZXJCb29rJyxcbiAgICAgICAgICAgICAgICAnR2V0UHJvZHVjdFBhaXJzJyxcbiAgICAgICAgICAgICAgICAnR2V0UHJvZHVjdHMnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnQ3JlYXRlQWNjb3VudCcsXG4gICAgICAgICAgICAgICAgJ0dldFVzZXJJbmZvJyxcbiAgICAgICAgICAgICAgICAnU2V0VXNlckluZm8nLFxuICAgICAgICAgICAgICAgICdHZXRBY2NvdW50SW5mbycsXG4gICAgICAgICAgICAgICAgJ0dldEFjY291bnRUcmFkZXMnLFxuICAgICAgICAgICAgICAgICdHZXREZXBvc2l0QWRkcmVzc2VzJyxcbiAgICAgICAgICAgICAgICAnV2l0aGRyYXcnLFxuICAgICAgICAgICAgICAgICdDcmVhdGVPcmRlcicsXG4gICAgICAgICAgICAgICAgJ01vZGlmeU9yZGVyJyxcbiAgICAgICAgICAgICAgICAnQ2FuY2VsT3JkZXInLFxuICAgICAgICAgICAgICAgICdDYW5jZWxBbGxPcmRlcnMnLFxuICAgICAgICAgICAgICAgICdHZXRBY2NvdW50T3Blbk9yZGVycycsXG4gICAgICAgICAgICAgICAgJ0dldE9yZGVyRmVlJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoTWFya2V0cyAoKSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljUG9zdEdldFByb2R1Y3RQYWlycyAoKTtcbiAgICAgICAgbGV0IG1hcmtldHMgPSByZXNwb25zZVsncHJvZHVjdFBhaXJzJ107XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgcCA9IDA7IHAgPCBtYXJrZXRzLmxlbmd0aDsgcCsrKSB7XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gbWFya2V0c1twXTtcbiAgICAgICAgICAgIGxldCBpZCA9IG1hcmtldFsnbmFtZSddO1xuICAgICAgICAgICAgbGV0IGJhc2UgPSBtYXJrZXRbJ3Byb2R1Y3QxTGFiZWwnXTtcbiAgICAgICAgICAgIGxldCBxdW90ZSA9IG1hcmtldFsncHJvZHVjdDJMYWJlbCddO1xuICAgICAgICAgICAgbGV0IHN5bWJvbCA9IGJhc2UgKyAnLycgKyBxdW90ZTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoICh7XG4gICAgICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgICAgICAgICAgJ3N5bWJvbCc6IHN5bWJvbCxcbiAgICAgICAgICAgICAgICAnYmFzZSc6IGJhc2UsXG4gICAgICAgICAgICAgICAgJ3F1b3RlJzogcXVvdGUsXG4gICAgICAgICAgICAgICAgJ2luZm8nOiBtYXJrZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0R2V0QWNjb3VudEluZm8gKCk7XG4gICAgICAgIGxldCBiYWxhbmNlcyA9IHJlc3BvbnNlWydjdXJyZW5jaWVzJ107XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogcmVzcG9uc2UgfTtcbiAgICAgICAgZm9yIChsZXQgYiA9IDA7IGIgPCBiYWxhbmNlcy5sZW5ndGg7IGIrKykge1xuICAgICAgICAgICAgbGV0IGJhbGFuY2UgPSBiYWxhbmNlc1tiXTtcbiAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IGJhbGFuY2VbJ25hbWUnXTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogYmFsYW5jZVsnYmFsYW5jZSddLFxuICAgICAgICAgICAgICAgICd1c2VkJzogYmFsYW5jZVsnaG9sZCddLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhY2NvdW50Wyd0b3RhbCddID0gdGhpcy5zdW0gKGFjY291bnRbJ2ZyZWUnXSwgYWNjb3VudFsndXNlZCddKTtcbiAgICAgICAgICAgIHJlc3VsdFtjdXJyZW5jeV0gPSBhY2NvdW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSBhd2FpdCB0aGlzLnB1YmxpY1Bvc3RHZXRPcmRlckJvb2sgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAncHJvZHVjdFBhaXInOiBwWydpZCddLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAob3JkZXJbJ3B4J10pO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBwYXJzZUZsb2F0IChvcmRlclsncXR5J10pO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtzaWRlXS5wdXNoIChbIHByaWNlLCBhbW91bnQgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgdGlja2VyID0gYXdhaXQgdGhpcy5wdWJsaWNQb3N0R2V0VGlja2VyICh7XG4gICAgICAgICAgICAncHJvZHVjdFBhaXInOiBwWydpZCddLFxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydoaWdoJ10pLFxuICAgICAgICAgICAgJ2xvdyc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbG93J10pLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYmlkJ10pLFxuICAgICAgICAgICAgJ2Fzayc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYXNrJ10pLFxuICAgICAgICAgICAgJ3Z3YXAnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnb3Blbic6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjbG9zZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdmaXJzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsYXN0JzogcGFyc2VGbG9hdCAodGlja2VyWydsYXN0J10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndm9sdW1lMjRociddKSxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndm9sdW1lMjRoclByb2R1Y3QyJ10pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY1Bvc3RHZXRUcmFkZXMgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnaW5zJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBvcmRlclR5cGUgPSAodHlwZSA9PSAnbWFya2V0JykgPyAxIDogMDtcbiAgICAgICAgbGV0IG9yZGVyID0ge1xuICAgICAgICAgICAgJ2lucyc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgICAgICAnc2lkZSc6IHNpZGUsXG4gICAgICAgICAgICAnb3JkZXJUeXBlJzogb3JkZXJUeXBlLFxuICAgICAgICAgICAgJ3F0eSc6IGFtb3VudCxcbiAgICAgICAgICAgICdweCc6IHByaWNlLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0Q3JlYXRlT3JkZXIgKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ2lkJzogcmVzcG9uc2VbJ3NlcnZlck9yZGVySWQnXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBpZiAoJ2lucycgaW4gcGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdENhbmNlbE9yZGVyICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgICAgICdzZXJ2ZXJPcmRlcklkJzogaWQsXG4gICAgICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgcmVxdWlyZXMgYGluc2Agc3ltYm9sIHBhcmFtZXRlciBmb3IgY2FuY2VsbGluZyBhbiBvcmRlcicpO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgJy8nICsgdGhpcy52ZXJzaW9uICsgJy8nICsgcGF0aDtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChwYXJhbXMpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGJvZHkgPSB0aGlzLmpzb24gKHBhcmFtcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMudWlkKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBBdXRoZW50aWNhdGlvbkVycm9yICh0aGlzLmlkICsgJyByZXF1aXJlcyBgJyArIHRoaXMuaWQgKyAnLnVpZGAgcHJvcGVydHkgZm9yIGF1dGhlbnRpY2F0aW9uJyk7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpO1xuICAgICAgICAgICAgbGV0IGF1dGggPSBub25jZS50b1N0cmluZyAoKSArIHRoaXMudWlkICsgdGhpcy5hcGlLZXk7XG4gICAgICAgICAgICBsZXQgc2lnbmF0dXJlID0gdGhpcy5obWFjICh0aGlzLmVuY29kZSAoYXV0aCksIHRoaXMuZW5jb2RlICh0aGlzLnNlY3JldCkpO1xuICAgICAgICAgICAgYm9keSA9IHRoaXMuanNvbiAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICAgICAnYXBpS2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ2FwaU5vbmNlJzogbm9uY2UsXG4gICAgICAgICAgICAgICAgJ2FwaVNpZyc6IHNpZ25hdHVyZS50b1VwcGVyQ2FzZSAoKSxcbiAgICAgICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICdDb250ZW50LUxlbmd0aCc6IGJvZHkubGVuZ3RoLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgICAgIGlmICgnaXNBY2NlcHRlZCcgaW4gcmVzcG9uc2UpXG4gICAgICAgICAgICBpZiAocmVzcG9uc2VbJ2lzQWNjZXB0ZWQnXSlcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGZveGJpdCA9IGV4dGVuZCAoYmxpbmt0cmFkZSwge1xuICAgICdpZCc6ICdmb3hiaXQnLFxuICAgICduYW1lJzogJ0ZveEJpdCcsXG4gICAgJ2NvdW50cmllcyc6ICdCUicsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc5OTE0MTMtMTFiNDBkNDItNjQ3Zi0xMWU3LTkxZWUtNzhjZWQ4NzRkZDA5LmpwZycsXG4gICAgICAgICdhcGknOiB7XG4gICAgICAgICAgICAncHVibGljJzogJ2h0dHBzOi8vYXBpLmJsaW5rdHJhZGUuY29tL2FwaScsXG4gICAgICAgICAgICAncHJpdmF0ZSc6ICdodHRwczovL2FwaS5ibGlua3RyYWRlLmNvbS90YXBpJyxcbiAgICAgICAgfSxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL2ZveGJpdC5leGNoYW5nZScsXG4gICAgICAgICdkb2MnOiAnaHR0cHM6Ly9ibGlua3RyYWRlLmNvbS9kb2NzJyxcbiAgICB9LFxuICAgICdjb21tZW50JzogJ0JsaW5rdHJhZGUgQVBJJyxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9CUkwnOiB7ICdpZCc6ICdCVENCUkwnLCAnc3ltYm9sJzogJ0JUQy9CUkwnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnQlJMJywgJ2Jyb2tlcklkJzogNCwgJ2Jyb2tlcic6ICdGb3hCaXQnIH0sXG4gICAgfSxcbn0pXG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGZ5YiA9IHtcblxuICAgICdyYXRlTGltaXQnOiAxNTAwLFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICd0aWNrZXInLFxuICAgICAgICAgICAgICAgICd0aWNrZXJkZXRhaWxlZCcsXG4gICAgICAgICAgICAgICAgJ29yZGVyYm9vaycsXG4gICAgICAgICAgICAgICAgJ3RyYWRlcycsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAncHJpdmF0ZSc6IHtcbiAgICAgICAgICAgICdwb3N0JzogW1xuICAgICAgICAgICAgICAgICd0ZXN0JyxcbiAgICAgICAgICAgICAgICAnZ2V0YWNjaW5mbycsXG4gICAgICAgICAgICAgICAgJ2dldHBlbmRpbmdvcmRlcnMnLFxuICAgICAgICAgICAgICAgICdnZXRvcmRlcmhpc3RvcnknLFxuICAgICAgICAgICAgICAgICdjYW5jZWxwZW5kaW5nb3JkZXInLFxuICAgICAgICAgICAgICAgICdwbGFjZW9yZGVyJyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXcnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgbGV0IGJhbGFuY2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0R2V0YWNjaW5mbyAoKTtcbiAgICAgICAgbGV0IGJ0YyA9IHBhcnNlRmxvYXQgKGJhbGFuY2VbJ2J0Y0JhbCddKTtcbiAgICAgICAgbGV0IHN5bWJvbCA9IHRoaXMuc3ltYm9sc1swXTtcbiAgICAgICAgbGV0IHF1b3RlID0gdGhpcy5tYXJrZXRzW3N5bWJvbF1bJ3F1b3RlJ107XG4gICAgICAgIGxldCBsb3dlcmNhc2UgPSBxdW90ZS50b0xvd2VyQ2FzZSAoKSArICdCYWwnO1xuICAgICAgICBsZXQgZmlhdCA9IHBhcnNlRmxvYXQgKGJhbGFuY2VbbG93ZXJjYXNlXSk7XG4gICAgICAgIGxldCBjcnlwdG8gPSB7XG4gICAgICAgICAgICAnZnJlZSc6IGJ0YyxcbiAgICAgICAgICAgICd1c2VkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3RvdGFsJzogYnRjLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgYWNjb3VudHMgPSB7ICdCVEMnOiBjcnlwdG8gfTtcbiAgICAgICAgYWNjb3VudHNbcXVvdGVdID0ge1xuICAgICAgICAgICAgJ2ZyZWUnOiBmaWF0LFxuICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAndG90YWwnOiBmaWF0LFxuICAgICAgICB9O1xuICAgICAgICBhY2NvdW50c1snaW5mbyddID0gYmFsYW5jZTtcbiAgICAgICAgcmV0dXJuIGFjY291bnRzO1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRPcmRlcmJvb2sgKHBhcmFtcyk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdiaWRzJzogW10sXG4gICAgICAgICAgICAnYXNrcyc6IFtdLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHNpZGVzID0gWyAnYmlkcycsICdhc2tzJyBdO1xuICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IHNpZGVzLmxlbmd0aDsgcysrKSB7XG4gICAgICAgICAgICBsZXQgc2lkZSA9IHNpZGVzW3NdO1xuICAgICAgICAgICAgbGV0IG9yZGVycyA9IG9yZGVyYm9va1tzaWRlXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9yZGVyID0gb3JkZXJzW2ldO1xuICAgICAgICAgICAgICAgIGxldCBwcmljZSA9IHBhcnNlRmxvYXQgKG9yZGVyWzBdKTtcbiAgICAgICAgICAgICAgICBsZXQgYW1vdW50ID0gcGFyc2VGbG9hdCAob3JkZXJbMV0pO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtzaWRlXS5wdXNoIChbIHByaWNlLCBhbW91bnQgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBsZXQgdGlja2VyID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRUaWNrZXJkZXRhaWxlZCAoKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgbGFzdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IHZvbHVtZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKCdsYXN0JyBpbiB0aWNrZXIpXG4gICAgICAgICAgICBsYXN0ID0gcGFyc2VGbG9hdCAodGlja2VyWydsYXN0J10pO1xuICAgICAgICBpZiAoJ3ZvbCcgaW4gdGlja2VyKVxuICAgICAgICAgICAgdm9sdW1lID0gcGFyc2VGbG9hdCAodGlja2VyWyd2b2wnXSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbG93JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYmlkJ10pLFxuICAgICAgICAgICAgJ2Fzayc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYXNrJ10pLFxuICAgICAgICAgICAgJ3Z3YXAnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnb3Blbic6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjbG9zZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdmaXJzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsYXN0JzogbGFzdCxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiB2b2x1bWUsXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0VHJhZGVzIChwYXJhbXMpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0UGxhY2VvcmRlciAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdxdHknOiBhbW91bnQsXG4gICAgICAgICAgICAncHJpY2UnOiBwcmljZSxcbiAgICAgICAgICAgICd0eXBlJzogc2lkZVswXS50b1VwcGVyQ2FzZSAoKVxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsncGVuZGluZ19vaWQnXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0Q2FuY2VscGVuZGluZ29yZGVyICh7ICdvcmRlck5vJzogaWQgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ10gKyAnLycgKyBwYXRoO1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICB1cmwgKz0gJy5qc29uJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCk7XG4gICAgICAgICAgICBib2R5ID0gdGhpcy51cmxlbmNvZGUgKHRoaXMuZXh0ZW5kICh7ICd0aW1lc3RhbXAnOiBub25jZSB9LCBwYXJhbXMpKTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgICAgICAgICdrZXknOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgICAgICAnc2lnJzogdGhpcy5obWFjICh0aGlzLmVuY29kZSAoYm9keSksIHRoaXMuZW5jb2RlICh0aGlzLnNlY3JldCksICdzaGExJylcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgICAgICBpZiAoYXBpID09ICdwcml2YXRlJylcbiAgICAgICAgICAgIGlmICgnZXJyb3InIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZVsnZXJyb3InXSlcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBmeWJzZSA9IGV4dGVuZCAoZnliLCB7XG4gICAgJ2lkJzogJ2Z5YnNlJyxcbiAgICAnbmFtZSc6ICdGWUItU0UnLFxuICAgICdjb3VudHJpZXMnOiAnU0UnLCAvLyBTd2VkZW5cbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yNzc2NjUxMi0zMTAxOTc3Mi01ZWRiLTExZTctODI0MS0yZTY3NWU2Nzk3ZjEuanBnJyxcbiAgICAgICAgJ2FwaSc6ICdodHRwczovL3d3dy5meWJzZS5zZS9hcGkvU0VLJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy5meWJzZS5zZScsXG4gICAgICAgICdkb2MnOiAnaHR0cDovL2RvY3MuZnliLmFwaWFyeS5pbycsXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9TRUsnOiB7ICdpZCc6ICdTRUsnLCAnc3ltYm9sJzogJ0JUQy9TRUsnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnU0VLJyB9LFxuICAgIH0sXG59KVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBmeWJzZyA9IGV4dGVuZCAoZnliLCB7XG4gICAgJ2lkJzogJ2Z5YnNnJyxcbiAgICAnbmFtZSc6ICdGWUItU0cnLFxuICAgICdjb3VudHJpZXMnOiAnU0cnLCAvLyBTaW5nYXBvcmVcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yNzc2NjUxMy0zMzY0ZDU2YS01ZWRiLTExZTctOWU2Yi1kNTg5OGJiODljODEuanBnJyxcbiAgICAgICAgJ2FwaSc6ICdodHRwczovL3d3dy5meWJzZy5jb20vYXBpL1NHRCcsXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly93d3cuZnlic2cuY29tJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwOi8vZG9jcy5meWIuYXBpYXJ5LmlvJyxcbiAgICB9LFxuICAgICdtYXJrZXRzJzoge1xuICAgICAgICAnQlRDL1NHRCc6IHsgJ2lkJzogJ1NHRCcsICdzeW1ib2wnOiAnQlRDL1NHRCcsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdTR0QnIH0sXG4gICAgfSxcbn0pXG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGdhdGVjb2luID0ge1xuXG4gICAgJ2lkJzogJ2dhdGVjb2luJyxcbiAgICAnbmFtZSc6ICdHYXRlY29pbicsXG4gICAgJ3JhdGVMaW1pdCc6IDIwMDAsXG4gICAgJ2NvdW50cmllcyc6ICdISycsIC8vIEhvbmcgS29uZ1xuICAgICdjb21tZW50JzogJ2EgcmVndWxhdGVkL2xpY2Vuc2VkIGV4Y2hhbmdlJyxcbiAgICAnaGFzRmV0Y2hUaWNrZXJzJzogdHJ1ZSxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yODY0NjgxNy01MDg0NTdmMi03MjZjLTExZTctOWVlYi0zNTI4ZDI0MTNhNTguanBnJyxcbiAgICAgICAgJ2FwaSc6ICdodHRwczovL2FwaS5nYXRlY29pbi5jb20nLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vZ2F0ZWNvaW4uY29tJyxcbiAgICAgICAgJ2RvYyc6IFtcbiAgICAgICAgICAgICdodHRwczovL2dhdGVjb2luLmNvbS9hcGknLFxuICAgICAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS9HYXRlY29pbi9SRVNUZnVsLUFQSS1JbXBsZW1lbnRhdGlvbicsXG4gICAgICAgICAgICAnaHR0cHM6Ly9hcGkuZ2F0ZWNvaW4uY29tL3N3YWdnZXItdWkvaW5kZXguaHRtbCcsXG4gICAgICAgIF0sXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnUHVibGljL0V4Y2hhbmdlUmF0ZScsIC8vIEdldCB0aGUgZXhjaGFuZ2UgcmF0ZXNcbiAgICAgICAgICAgICAgICAnUHVibGljL0xpdmVUaWNrZXInLCAvLyBHZXQgbGl2ZSB0aWNrZXIgZm9yIGFsbCBjdXJyZW5jeVxuICAgICAgICAgICAgICAgICdQdWJsaWMvTGl2ZVRpY2tlci97Q3VycmVuY3lQYWlyfScsIC8vIEdldCBsaXZlIHRpY2tlciBieSBjdXJyZW5jeVxuICAgICAgICAgICAgICAgICdQdWJsaWMvTGl2ZVRpY2tlcnMnLCAvLyBHZXQgbGl2ZSB0aWNrZXIgZm9yIGFsbCBjdXJyZW5jeVxuICAgICAgICAgICAgICAgICdQdWJsaWMvTWFya2V0RGVwdGgve0N1cnJlbmN5UGFpcn0nLCAvLyBHZXRzIHByaWNlcyBhbmQgbWFya2V0IGRlcHRoIGZvciB0aGUgY3VycmVuY3kgcGFpci5cbiAgICAgICAgICAgICAgICAnUHVibGljL05ldHdvcmtTdGF0aXN0aWNzL3tEaWdpQ3VycmVuY3l9JywgLy8gR2V0IHRoZSBuZXR3b3JrIHN0YXR1cyBvZiBhIHNwZWNpZmljIGRpZ2l0YWwgY3VycmVuY3lcbiAgICAgICAgICAgICAgICAnUHVibGljL1N0YXRpc3RpY0hpc3Rvcnkve0RpZ2lDdXJyZW5jeX0ve1R5cGVvZmRhdGF9JywgLy8gR2V0IHRoZSBoaXN0b3JpY2FsIGRhdGEgb2YgYSBzcGVjaWZpYyBkaWdpdGFsIGN1cnJlbmN5XG4gICAgICAgICAgICAgICAgJ1B1YmxpYy9UaWNrZXJIaXN0b3J5L3tDdXJyZW5jeVBhaXJ9L3tUaW1lZnJhbWV9JywgLy8gR2V0IHRpY2tlciBoaXN0b3J5XG4gICAgICAgICAgICAgICAgJ1B1YmxpYy9UcmFuc2FjdGlvbnMve0N1cnJlbmN5UGFpcn0nLCAvLyBHZXRzIHJlY2VudCB0cmFuc2FjdGlvbnNcbiAgICAgICAgICAgICAgICAnUHVibGljL1RyYW5zYWN0aW9uc0hpc3Rvcnkve0N1cnJlbmN5UGFpcn0nLCAvLyBHZXRzIGFsbCB0cmFuc2FjdGlvbnNcbiAgICAgICAgICAgICAgICAnUmVmZXJlbmNlL0J1c2luZXNzTmF0dXJlTGlzdCcsIC8vIEdldCB0aGUgYnVzaW5lc3MgbmF0dXJlIGxpc3QuXG4gICAgICAgICAgICAgICAgJ1JlZmVyZW5jZS9Db3VudHJpZXMnLCAvLyBHZXQgdGhlIGNvdW50cnkgbGlzdC5cbiAgICAgICAgICAgICAgICAnUmVmZXJlbmNlL0N1cnJlbmNpZXMnLCAvLyBHZXQgdGhlIGN1cnJlbmN5IGxpc3QuXG4gICAgICAgICAgICAgICAgJ1JlZmVyZW5jZS9DdXJyZW5jeVBhaXJzJywgLy8gR2V0IHRoZSBjdXJyZW5jeSBwYWlyIGxpc3QuXG4gICAgICAgICAgICAgICAgJ1JlZmVyZW5jZS9DdXJyZW50U3RhdHVzTGlzdCcsIC8vIEdldCB0aGUgY3VycmVudCBzdGF0dXMgbGlzdC5cbiAgICAgICAgICAgICAgICAnUmVmZXJlbmNlL0lkZW50eWRvY3VtZW50VHlwZXMnLCAvLyBHZXQgdGhlIGRpZmZlcmVudCB0eXBlcyBvZiBpZGVudGl0eSBkb2N1bWVudHMgcG9zc2libGUuXG4gICAgICAgICAgICAgICAgJ1JlZmVyZW5jZS9JbmNvbWVSYW5nZUxpc3QnLCAvLyBHZXQgdGhlIGluY29tZSByYW5nZSBsaXN0LlxuICAgICAgICAgICAgICAgICdSZWZlcmVuY2UvSW5jb21lU291cmNlTGlzdCcsIC8vIEdldCB0aGUgaW5jb21lIHNvdXJjZSBsaXN0LlxuICAgICAgICAgICAgICAgICdSZWZlcmVuY2UvVmVyaWZpY2F0aW9uTGV2ZWxMaXN0JywgLy8gR2V0IHRoZSB2ZXJpZiBsZXZlbCBsaXN0LlxuICAgICAgICAgICAgICAgICdTdHJlYW0vUHVibGljQ2hhbm5lbCcsIC8vIEdldCB0aGUgcHVibGljIHB1Ym51YiBjaGFubmVsIGxpc3RcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnRXhwb3J0L1RyYW5zYWN0aW9ucycsIC8vIFJlcXVlc3QgYSBleHBvcnQgb2YgYWxsIHRyYWRlcyBmcm9tIGJhc2VkIG9uIGN1cnJlbmN5cGFpciwgc3RhcnQgZGF0ZSBhbmQgZW5kIGRhdGVcbiAgICAgICAgICAgICAgICAnUGluZycsIC8vIFBvc3QgYSBzdHJpbmcsIHRoZW4gZ2V0IGl0IGJhY2suXG4gICAgICAgICAgICAgICAgJ1B1YmxpYy9VbnN1YnNjcmliZS97RW1haWxDb2RlfScsIC8vIExldHMgdGhlIHVzZXIgdW5zdWJzY3JpYmUgZnJvbSBlbWFpbHNcbiAgICAgICAgICAgICAgICAnUmVnaXN0ZXJVc2VyJywgLy8gSW5pdGlhbCB0cmFkZXIgcmVnaXN0cmF0aW9uLlxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdBY2NvdW50L0NvcnBvcmF0ZURhdGEnLCAvLyBHZXQgY29ycG9yYXRlIGFjY291bnQgZGF0YVxuICAgICAgICAgICAgICAgICdBY2NvdW50L0RvY3VtZW50QWRkcmVzcycsIC8vIENoZWNrIGlmIHJlc2lkZW5jZSBwcm9vZiB1cGxvYWRlZFxuICAgICAgICAgICAgICAgICdBY2NvdW50L0RvY3VtZW50Q29ycG9yYXRpb24nLCAvLyBDaGVjayBpZiByZWdpc3RlcmVkIGRvY3VtZW50IHVwbG9hZGVkXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvRG9jdW1lbnRJRCcsIC8vIENoZWNrIGlmIElEIGRvY3VtZW50IGNvcHkgdXBsb2FkZWRcbiAgICAgICAgICAgICAgICAnQWNjb3VudC9Eb2N1bWVudEluZm9ybWF0aW9uJywgLy8gR2V0IFN0ZXAzIERhdGFcbiAgICAgICAgICAgICAgICAnQWNjb3VudC9FbWFpbCcsIC8vIEdldCB1c2VyIGVtYWlsXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvRmVlUmF0ZScsIC8vIEdldCBmZWUgcmF0ZSBvZiBsb2dnZWQgaW4gdXNlclxuICAgICAgICAgICAgICAgICdBY2NvdW50L0xldmVsJywgLy8gR2V0IHZlcmlmIGxldmVsIG9mIGxvZ2dlZCBpbiB1c2VyXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvUGVyc29uYWxJbmZvcm1hdGlvbicsIC8vIEdldCBTdGVwMSBEYXRhXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvUGhvbmUnLCAvLyBHZXQgdXNlciBwaG9uZSBudW1iZXJcbiAgICAgICAgICAgICAgICAnQWNjb3VudC9Qcm9maWxlJywgLy8gR2V0IHRyYWRlciBwcm9maWxlXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvUXVlc3Rpb25uYWlyZScsIC8vIEZpbGwgdGhlIHF1ZXN0aW9ubmFpcmVcbiAgICAgICAgICAgICAgICAnQWNjb3VudC9SZWZlcnJhbCcsIC8vIEdldCByZWZlcnJhbCBpbmZvcm1hdGlvblxuICAgICAgICAgICAgICAgICdBY2NvdW50L1JlZmVycmFsQ29kZScsIC8vIEdldCB0aGUgcmVmZXJyYWwgY29kZSBvZiB0aGUgbG9nZ2VkIGluIHVzZXJcbiAgICAgICAgICAgICAgICAnQWNjb3VudC9SZWZlcnJhbE5hbWVzJywgLy8gR2V0IG5hbWVzIG9mIHJlZmVycmVkIHRyYWRlcnNcbiAgICAgICAgICAgICAgICAnQWNjb3VudC9SZWZlcnJhbFJld2FyZCcsIC8vIEdldCByZWZlcnJhbCByZXdhcmQgaW5mb3JtYXRpb25cbiAgICAgICAgICAgICAgICAnQWNjb3VudC9SZWZlcnJlZENvZGUnLCAvLyBHZXQgcmVmZXJyYWwgY29kZVxuICAgICAgICAgICAgICAgICdBY2NvdW50L1Jlc2lkZW50SW5mb3JtYXRpb24nLCAvLyBHZXQgU3RlcDIgRGF0YVxuICAgICAgICAgICAgICAgICdBY2NvdW50L1NlY3VyaXR5U2V0dGluZ3MnLCAvLyBHZXQgdmVyaWYgZGV0YWlscyBvZiBsb2dnZWQgaW4gdXNlclxuICAgICAgICAgICAgICAgICdBY2NvdW50L1VzZXInLCAvLyBHZXQgYWxsIHVzZXIgaW5mb1xuICAgICAgICAgICAgICAgICdBUElLZXkvQVBJS2V5JywgLy8gR2V0IEFQSSBLZXkgZm9yIGxvZ2dlZCBpbiB1c2VyXG4gICAgICAgICAgICAgICAgJ0F1dGgvQ29ubmVjdGlvbkhpc3RvcnknLCAvLyBHZXRzIGNvbm5lY3Rpb24gaGlzdG9yeSBvZiBsb2dnZWQgaW4gdXNlclxuICAgICAgICAgICAgICAgICdCYWxhbmNlL0JhbGFuY2VzJywgLy8gR2V0cyB0aGUgYXZhaWxhYmxlIGJhbGFuY2UgZm9yIGVhY2ggY3VycmVuY3kgZm9yIHRoZSBsb2dnZWQgaW4gYWNjb3VudC5cbiAgICAgICAgICAgICAgICAnQmFsYW5jZS9CYWxhbmNlcy97Q3VycmVuY3l9JywgLy8gR2V0cyB0aGUgYXZhaWxhYmxlIGJhbGFuY2UgZm9yIHMgY3VycmVuY3kgZm9yIHRoZSBsb2dnZWQgaW4gYWNjb3VudC5cbiAgICAgICAgICAgICAgICAnQmFsYW5jZS9EZXBvc2l0cycsIC8vIEdldCBhbGwgYWNjb3VudCBkZXBvc2l0cywgaW5jbHVkaW5nIHdpcmUgYW5kIGRpZ2l0YWwgY3VycmVuY3ksIG9mIHRoZSBsb2dnZWQgaW4gdXNlclxuICAgICAgICAgICAgICAgICdCYWxhbmNlL1dpdGhkcmF3YWxzJywgLy8gR2V0IGFsbCBhY2NvdW50IHdpdGhkcmF3YWxzLCBpbmNsdWRpbmcgd2lyZSBhbmQgZGlnaXRhbCBjdXJyZW5jeSwgb2YgdGhlIGxvZ2dlZCBpbiB1c2VyXG4gICAgICAgICAgICAgICAgJ0JhbmsvQWNjb3VudHMve0N1cnJlbmN5fS97TG9jYXRpb259JywgLy8gR2V0IGludGVybmFsIGJhbmsgYWNjb3VudCBmb3IgZGVwb3NpdFxuICAgICAgICAgICAgICAgICdCYW5rL1RyYW5zYWN0aW9ucycsIC8vIEdldCBhbGwgYWNjb3VudCB0cmFuc2FjdGlvbnMgb2YgdGhlIGxvZ2dlZCBpbiB1c2VyXG4gICAgICAgICAgICAgICAgJ0JhbmsvVXNlckFjY291bnRzJywgLy8gR2V0cyBhbGwgdGhlIGJhbmsgYWNjb3VudHMgcmVsYXRlZCB0byB0aGUgbG9nZ2VkIGluIHVzZXIuXG4gICAgICAgICAgICAgICAgJ0JhbmsvVXNlckFjY291bnRzL3tDdXJyZW5jeX0nLCAvLyBHZXRzIGFsbCB0aGUgYmFuayBhY2NvdW50cyByZWxhdGVkIHRvIHRoZSBsb2dnZWQgaW4gdXNlci5cbiAgICAgICAgICAgICAgICAnRWxlY3Ryb25pY1dhbGxldC9EZXBvc2l0V2FsbGV0cycsIC8vIEdldHMgYWxsIGNyeXB0byBjdXJyZW5jeSBhZGRyZXNzZXMgcmVsYXRlZCBkZXBvc2l0cyB0byB0aGUgbG9nZ2VkIGluIHVzZXIuXG4gICAgICAgICAgICAgICAgJ0VsZWN0cm9uaWNXYWxsZXQvRGVwb3NpdFdhbGxldHMve0RpZ2lDdXJyZW5jeX0nLCAvLyBHZXRzIGFsbCBjcnlwdG8gY3VycmVuY3kgYWRkcmVzc2VzIHJlbGF0ZWQgZGVwb3NpdHMgdG8gdGhlIGxvZ2dlZCBpbiB1c2VyIGJ5IGN1cnJlbmN5LlxuICAgICAgICAgICAgICAgICdFbGVjdHJvbmljV2FsbGV0L1RyYW5zYWN0aW9ucycsIC8vIEdldCBhbGwgZGlnaXRhbCBjdXJyZW5jeSB0cmFuc2FjdGlvbnMgb2YgdGhlIGxvZ2dlZCBpbiB1c2VyXG4gICAgICAgICAgICAgICAgJ0VsZWN0cm9uaWNXYWxsZXQvVHJhbnNhY3Rpb25zL3tEaWdpQ3VycmVuY3l9JywgLy8gR2V0IGFsbCBkaWdpdGFsIGN1cnJlbmN5IHRyYW5zYWN0aW9ucyBvZiB0aGUgbG9nZ2VkIGluIHVzZXJcbiAgICAgICAgICAgICAgICAnRWxlY3Ryb25pY1dhbGxldC9Vc2VyV2FsbGV0cycsIC8vIEdldHMgYWxsIGV4dGVybmFsIGRpZ2l0YWwgY3VycmVuY3kgYWRkcmVzc2VzIHJlbGF0ZWQgdG8gdGhlIGxvZ2dlZCBpbiB1c2VyLlxuICAgICAgICAgICAgICAgICdFbGVjdHJvbmljV2FsbGV0L1VzZXJXYWxsZXRzL3tEaWdpQ3VycmVuY3l9JywgLy8gR2V0cyBhbGwgZXh0ZXJuYWwgZGlnaXRhbCBjdXJyZW5jeSBhZGRyZXNzZXMgcmVsYXRlZCB0byB0aGUgbG9nZ2VkIGluIHVzZXIgYnkgY3VycmVuY3kuXG4gICAgICAgICAgICAgICAgJ0luZm8vUmVmZXJlbmNlQ3VycmVuY3knLCAvLyBHZXQgdXNlcidzIHJlZmVyZW5jZSBjdXJyZW5jeVxuICAgICAgICAgICAgICAgICdJbmZvL1JlZmVyZW5jZUxhbmd1YWdlJywgLy8gR2V0IHVzZXIncyByZWZlcmVuY2UgbGFuZ3VhZ2VcbiAgICAgICAgICAgICAgICAnTm90aWZpY2F0aW9uL01lc3NhZ2VzJywgLy8gR2V0IGZyb20gb2xkZXN0IHVucmVhZCArIDMgcmVhZCBtZXNzYWdlIHRvIG5ld2VzdCBtZXNzYWdlc1xuICAgICAgICAgICAgICAgICdUcmFkZS9PcmRlcnMnLCAvLyBHZXRzIG9wZW4gb3JkZXJzIGZvciB0aGUgbG9nZ2VkIGluIHRyYWRlci5cbiAgICAgICAgICAgICAgICAnVHJhZGUvT3JkZXJzL3tPcmRlcklEfScsIC8vIEdldHMgYW4gb3JkZXIgZm9yIHRoZSBsb2dnZWQgaW4gdHJhZGVyLlxuICAgICAgICAgICAgICAgICdUcmFkZS9TdG9wT3JkZXJzJywgLy8gR2V0cyBhbGwgc3RvcCBvcmRlcnMgZm9yIHRoZSBsb2dnZWQgaW4gdHJhZGVyLiBNYXggMTAwMCByZWNvcmQuXG4gICAgICAgICAgICAgICAgJ1RyYWRlL1N0b3BPcmRlcnNIaXN0b3J5JywgLy8gR2V0cyBhbGwgc3RvcCBvcmRlcnMgZm9yIHRoZSBsb2dnZWQgaW4gdHJhZGVyLiBNYXggMTAwMCByZWNvcmQuXG4gICAgICAgICAgICAgICAgJ1RyYWRlL1RyYWRlcycsIC8vIEdldHMgYWxsIHRyYW5zYWN0aW9ucyBvZiBsb2dnZWQgaW4gdXNlclxuICAgICAgICAgICAgICAgICdUcmFkZS9Vc2VyVHJhZGVzJywgLy8gR2V0cyBhbGwgdHJhbnNhY3Rpb25zIG9mIGxvZ2dlZCBpbiB1c2VyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvRG9jdW1lbnRBZGRyZXNzJywgLy8gVXBsb2FkIGFkZHJlc3MgcHJvb2YgZG9jdW1lbnRcbiAgICAgICAgICAgICAgICAnQWNjb3VudC9Eb2N1bWVudENvcnBvcmF0aW9uJywgLy8gVXBsb2FkIHJlZ2lzdGVyZWQgZG9jdW1lbnQgZG9jdW1lbnRcbiAgICAgICAgICAgICAgICAnQWNjb3VudC9Eb2N1bWVudElEJywgLy8gVXBsb2FkIElEIGRvY3VtZW50IGNvcHlcbiAgICAgICAgICAgICAgICAnQWNjb3VudC9FbWFpbC9SZXF1ZXN0VmVyaWZ5JywgLy8gUmVxdWVzdCBmb3IgdmVyaWZpY2F0aW9uIGVtYWlsXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvRW1haWwvVmVyaWZ5JywgLy8gVmVyaWZpY2F0aW9uIGVtYWlsXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvR29vZ2xlQXV0aCcsIC8vIEVuYWJsZSBnb29nbGUgYXV0aFxuICAgICAgICAgICAgICAgICdBY2NvdW50L0xldmVsJywgLy8gUmVxdWVzdCB2ZXJpZiBsZXZlbCBvZiBsb2dnZWQgaW4gdXNlclxuICAgICAgICAgICAgICAgICdBY2NvdW50L1F1ZXN0aW9ubmFpcmUnLCAvLyBGaWxsIHRoZSBxdWVzdGlvbm5haXJlXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvUmVmZXJyYWwnLCAvLyBQb3N0IGEgcmVmZXJyYWwgZW1haWxcbiAgICAgICAgICAgICAgICAnQVBJS2V5L0FQSUtleScsIC8vIENyZWF0ZSBhIG5ldyBBUEkga2V5IGZvciBsb2dnZWQgaW4gdXNlclxuICAgICAgICAgICAgICAgICdBdXRoL0NoYW5nZVBhc3N3b3JkJywgLy8gQ2hhbmdlIHBhc3N3b3JkLlxuICAgICAgICAgICAgICAgICdBdXRoL0ZvcmdvdFBhc3N3b3JkJywgLy8gUmVxdWVzdCByZXNldCBwYXNzd29yZFxuICAgICAgICAgICAgICAgICdBdXRoL0ZvcmdvdFVzZXJJRCcsIC8vIFJlcXVlc3QgdXNlciBpZFxuICAgICAgICAgICAgICAgICdBdXRoL0xvZ2luJywgLy8gVHJhZGVyIHNlc3Npb24gbG9nIGluLlxuICAgICAgICAgICAgICAgICdBdXRoL0xvZ291dCcsIC8vIExvZ291dCBmcm9tIHRoZSBjdXJyZW50IHNlc3Npb24uXG4gICAgICAgICAgICAgICAgJ0F1dGgvTG9nb3V0T3RoZXJTZXNzaW9ucycsIC8vIExvZ291dCBvdGhlciBzZXNzaW9ucy5cbiAgICAgICAgICAgICAgICAnQXV0aC9SZXNldFBhc3N3b3JkJywgLy8gUmVzZXQgcGFzc3dvcmRcbiAgICAgICAgICAgICAgICAnQmFuay9UcmFuc2FjdGlvbnMnLCAvLyBSZXF1ZXN0IGEgdHJhbnNmZXIgZnJvbSB0aGUgdHJhZGVycyBhY2NvdW50IG9mIHRoZSBsb2dnZWQgaW4gdXNlci4gVGhpcyBpcyBvbmx5IGF2YWlsYWJsZSBmb3IgYmFuayBhY2NvdW50XG4gICAgICAgICAgICAgICAgJ0JhbmsvVXNlckFjY291bnRzJywgLy8gQWRkIGFuIGFjY291bnQgdGhlIGxvZ2dlZCBpbiB1c2VyXG4gICAgICAgICAgICAgICAgJ0VsZWN0cm9uaWNXYWxsZXQvRGVwb3NpdFdhbGxldHMve0RpZ2lDdXJyZW5jeX0nLCAvLyBBZGQgYW4gZGlnaXRhbCBjdXJyZW5jeSBhZGRyZXNzZXMgdG8gdGhlIGxvZ2dlZCBpbiB1c2VyLlxuICAgICAgICAgICAgICAgICdFbGVjdHJvbmljV2FsbGV0L1RyYW5zYWN0aW9ucy9EZXBvc2l0cy97RGlnaUN1cnJlbmN5fScsIC8vIEdldCBhbGwgaW50ZXJuYWwgZGlnaXRhbCBjdXJyZW5jeSB0cmFuc2FjdGlvbnMgb2YgdGhlIGxvZ2dlZCBpbiB1c2VyXG4gICAgICAgICAgICAgICAgJ0VsZWN0cm9uaWNXYWxsZXQvVHJhbnNhY3Rpb25zL1dpdGhkcmF3YWxzL3tEaWdpQ3VycmVuY3l9JywgLy8gR2V0IGFsbCBleHRlcm5hbCBkaWdpdGFsIGN1cnJlbmN5IHRyYW5zYWN0aW9ucyBvZiB0aGUgbG9nZ2VkIGluIHVzZXJcbiAgICAgICAgICAgICAgICAnRWxlY3Ryb25pY1dhbGxldC9Vc2VyV2FsbGV0cy97RGlnaUN1cnJlbmN5fScsIC8vIEFkZCBhbiBleHRlcm5hbCBkaWdpdGFsIGN1cnJlbmN5IGFkZHJlc3NlcyB0byB0aGUgbG9nZ2VkIGluIHVzZXIuXG4gICAgICAgICAgICAgICAgJ0VsZWN0cm9uaWNXYWxsZXQvV2l0aGRyYXdhbHMve0RpZ2lDdXJyZW5jeX0nLCAvLyBSZXF1ZXN0IGEgdHJhbnNmZXIgZnJvbSB0aGUgdHJhZGVycyBhY2NvdW50IHRvIGFuIGV4dGVybmFsIGFkZHJlc3MuIFRoaXMgaXMgb25seSBhdmFpbGFibGUgZm9yIGNyeXB0byBjdXJyZW5jaWVzLlxuICAgICAgICAgICAgICAgICdOb3RpZmljYXRpb24vTWVzc2FnZXMnLCAvLyBNYXJrIGFsbCBhcyByZWFkXG4gICAgICAgICAgICAgICAgJ05vdGlmaWNhdGlvbi9NZXNzYWdlcy97SUR9JywgLy8gTWFyayBhcyByZWFkXG4gICAgICAgICAgICAgICAgJ1RyYWRlL09yZGVycycsIC8vIFBsYWNlIGFuIG9yZGVyIGF0IHRoZSBleGNoYW5nZS5cbiAgICAgICAgICAgICAgICAnVHJhZGUvU3RvcE9yZGVycycsIC8vIFBsYWNlIGEgc3RvcCBvcmRlciBhdCB0aGUgZXhjaGFuZ2UuXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ3B1dCc6IFtcbiAgICAgICAgICAgICAgICAnQWNjb3VudC9Db3Jwb3JhdGVEYXRhJywgLy8gVXBkYXRlIHVzZXIgY29tcGFueSBkYXRhIGZvciBjb3Jwb3JhdGUgYWNjb3VudFxuICAgICAgICAgICAgICAgICdBY2NvdW50L0RvY3VtZW50SUQnLCAvLyBVcGRhdGUgSUQgZG9jdW1lbnQgbWV0YSBkYXRhXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvRG9jdW1lbnRJbmZvcm1hdGlvbicsIC8vIFVwZGF0ZSBTdGVwMyBEYXRhXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvRW1haWwnLCAvLyBVcGRhdGUgdXNlciBlbWFpbFxuICAgICAgICAgICAgICAgICdBY2NvdW50L1BlcnNvbmFsSW5mb3JtYXRpb24nLCAvLyBVcGRhdGUgU3RlcDEgRGF0YVxuICAgICAgICAgICAgICAgICdBY2NvdW50L1Bob25lJywgLy8gVXBkYXRlIHVzZXIgcGhvbmUgbnVtYmVyXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvUXVlc3Rpb25uYWlyZScsIC8vIHVwZGF0ZSB0aGUgcXVlc3Rpb25uYWlyZVxuICAgICAgICAgICAgICAgICdBY2NvdW50L1JlZmVycmVkQ29kZScsIC8vIFVwZGF0ZSByZWZlcnJhbCBjb2RlXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvUmVzaWRlbnRJbmZvcm1hdGlvbicsIC8vIFVwZGF0ZSBTdGVwMiBEYXRhXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvU2VjdXJpdHlTZXR0aW5ncycsIC8vIFVwZGF0ZSB2ZXJpZiBkZXRhaWxzIG9mIGxvZ2dlZCBpbiB1c2VyXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvVXNlcicsIC8vIFVwZGF0ZSBhbGwgdXNlciBpbmZvXG4gICAgICAgICAgICAgICAgJ0JhbmsvVXNlckFjY291bnRzJywgLy8gVXBkYXRlIHRoZSBsYWJlbCBvZiBleGlzdGluZyB1c2VyIGJhbmsgYWNjb3VubnRcbiAgICAgICAgICAgICAgICAnRWxlY3Ryb25pY1dhbGxldC9EZXBvc2l0V2FsbGV0cy97RGlnaUN1cnJlbmN5fS97QWRkcmVzc05hbWV9JywgLy8gVXBkYXRlIHRoZSBuYW1lIG9mIGFuIGFkZHJlc3NcbiAgICAgICAgICAgICAgICAnRWxlY3Ryb25pY1dhbGxldC9Vc2VyV2FsbGV0cy97RGlnaUN1cnJlbmN5fScsIC8vIFVwZGF0ZSB0aGUgbmFtZSBvZiBhbiBleHRlcm5hbCBhZGRyZXNzXG4gICAgICAgICAgICAgICAgJ0luZm8vUmVmZXJlbmNlQ3VycmVuY3knLCAvLyBVc2VyJ3MgcmVmZXJlbmNlIGN1cnJlbmN5XG4gICAgICAgICAgICAgICAgJ0luZm8vUmVmZXJlbmNlTGFuZ3VhZ2UnLCAvLyBVcGRhdGUgdXNlcidzIHJlZmVyZW5jZSBsYW5ndWFnZVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICdkZWxldGUnOiBbXG4gICAgICAgICAgICAgICAgJ0FQSUtleS9BUElLZXkve1B1YmxpY0tleX0nLCAvLyBSZW1vdmUgYW4gQVBJIGtleVxuICAgICAgICAgICAgICAgICdCYW5rL1RyYW5zYWN0aW9ucy97UmVxdWVzdElEfScsIC8vIERlbGV0ZSBwZW5kaW5nIGFjY291bnQgd2l0aGRyYXcgb2YgdGhlIGxvZ2dlZCBpbiB1c2VyXG4gICAgICAgICAgICAgICAgJ0JhbmsvVXNlckFjY291bnRzL3tDdXJyZW5jeX0ve0xhYmVsfScsIC8vIERlbGV0ZSBhbiBhY2NvdW50IG9mIHRoZSBsb2dnZWQgaW4gdXNlclxuICAgICAgICAgICAgICAgICdFbGVjdHJvbmljV2FsbGV0L0RlcG9zaXRXYWxsZXRzL3tEaWdpQ3VycmVuY3l9L3tBZGRyZXNzTmFtZX0nLCAvLyBEZWxldGUgYW4gZGlnaXRhbCBjdXJyZW5jeSBhZGRyZXNzZXMgcmVsYXRlZCB0byB0aGUgbG9nZ2VkIGluIHVzZXIuXG4gICAgICAgICAgICAgICAgJ0VsZWN0cm9uaWNXYWxsZXQvVXNlcldhbGxldHMve0RpZ2lDdXJyZW5jeX0ve0FkZHJlc3NOYW1lfScsIC8vIERlbGV0ZSBhbiBleHRlcm5hbCBkaWdpdGFsIGN1cnJlbmN5IGFkZHJlc3NlcyByZWxhdGVkIHRvIHRoZSBsb2dnZWQgaW4gdXNlci5cbiAgICAgICAgICAgICAgICAnVHJhZGUvT3JkZXJzJywgLy8gQ2FuY2VscyBhbGwgZXhpc3Rpbmcgb3JkZXJcbiAgICAgICAgICAgICAgICAnVHJhZGUvT3JkZXJzL3tPcmRlcklEfScsIC8vIENhbmNlbHMgYW4gZXhpc3Rpbmcgb3JkZXJcbiAgICAgICAgICAgICAgICAnVHJhZGUvU3RvcE9yZGVycycsIC8vIENhbmNlbHMgYWxsIGV4aXN0aW5nIHN0b3Agb3JkZXJzXG4gICAgICAgICAgICAgICAgJ1RyYWRlL1N0b3BPcmRlcnMve0lEfScsIC8vIENhbmNlbHMgYW4gZXhpc3Rpbmcgc3RvcCBvcmRlclxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hNYXJrZXRzICgpIHtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRQdWJsaWNMaXZlVGlja2VycyAoKTtcbiAgICAgICAgbGV0IG1hcmtldHMgPSByZXNwb25zZVsndGlja2VycyddO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgbWFya2V0cy5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IG1hcmtldHNbcF07XG4gICAgICAgICAgICBsZXQgaWQgPSBtYXJrZXRbJ2N1cnJlbmN5UGFpciddO1xuICAgICAgICAgICAgbGV0IGJhc2UgPSBpZC5zbGljZSAoMCwgMyk7XG4gICAgICAgICAgICBsZXQgcXVvdGUgPSBpZC5zbGljZSAoMywgNik7XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gYmFzZSArICcvJyArIHF1b3RlO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2ggKHtcbiAgICAgICAgICAgICAgICAnaWQnOiBpZCxcbiAgICAgICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgICAgICdiYXNlJzogYmFzZSxcbiAgICAgICAgICAgICAgICAncXVvdGUnOiBxdW90ZSxcbiAgICAgICAgICAgICAgICAnaW5mbyc6IG1hcmtldCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZUdldEJhbGFuY2VCYWxhbmNlcyAoKTtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gcmVzcG9uc2VbJ2JhbGFuY2VzJ107XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogYmFsYW5jZXMgfTtcbiAgICAgICAgZm9yIChsZXQgYiA9IDA7IGIgPCBiYWxhbmNlcy5sZW5ndGg7IGIrKykge1xuICAgICAgICAgICAgbGV0IGJhbGFuY2UgPSBiYWxhbmNlc1tiXTtcbiAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IGJhbGFuY2VbJ2N1cnJlbmN5J107XG4gICAgICAgICAgICBsZXQgYWNjb3VudCA9IHtcbiAgICAgICAgICAgICAgICAnZnJlZSc6IGJhbGFuY2VbJ2F2YWlsYWJsZUJhbGFuY2UnXSxcbiAgICAgICAgICAgICAgICAndXNlZCc6IHRoaXMuc3VtIChcbiAgICAgICAgICAgICAgICAgICAgYmFsYW5jZVsncGVuZGluZ0luY29taW5nJ10sXG4gICAgICAgICAgICAgICAgICAgIGJhbGFuY2VbJ3BlbmRpbmdPdXRnb2luZyddLFxuICAgICAgICAgICAgICAgICAgICBiYWxhbmNlWydvcGVuT3JkZXInXSksXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogYmFsYW5jZVsnYmFsYW5jZSddLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlc3VsdFtjdXJyZW5jeV0gPSBhY2NvdW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFB1YmxpY01hcmtldERlcHRoQ3VycmVuY3lQYWlyICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ0N1cnJlbmN5UGFpcic6IHBbJ2lkJ10sXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IFtdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaWRlcyA9IFsgJ2JpZHMnLCAnYXNrcycgXTtcbiAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBzaWRlcy5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1tzXTtcbiAgICAgICAgICAgIGxldCBvcmRlcnMgPSBvcmRlcmJvb2tbc2lkZV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBvcmRlciA9IG9yZGVyc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgcHJpY2UgPSBwYXJzZUZsb2F0IChvcmRlclsncHJpY2UnXSk7XG4gICAgICAgICAgICAgICAgbGV0IGFtb3VudCA9IHBhcnNlRmxvYXQgKG9yZGVyWyd2b2x1bWUnXSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3NpZGVdLnB1c2ggKFsgcHJpY2UsIGFtb3VudCBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBwYXJzZVRpY2tlciAodGlja2VyLCBtYXJrZXQpIHtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHBhcnNlSW50ICh0aWNrZXJbJ2NyZWF0ZURhdGVUaW1lJ10pICogMTAwMDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2JpZCddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2FzayddKSxcbiAgICAgICAgICAgICd2d2FwJzogcGFyc2VGbG9hdCAodGlja2VyWyd2d2FwJ10pLFxuICAgICAgICAgICAgJ29wZW4nOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ29wZW4nXSksXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdCddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbHVtZSddKSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlcnMgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFB1YmxpY0xpdmVUaWNrZXJzICgpO1xuICAgICAgICBsZXQgdGlja2VycyA9IHJlc3BvbnNlWyd0aWNrZXJzJ107XG4gICAgICAgIGxldCByZXN1bHQgPSB7fTtcbiAgICAgICAgZm9yIChsZXQgdCA9IDA7IHQgPCB0aWNrZXJzLmxlbmd0aDsgdCsrKSB7XG4gICAgICAgICAgICBsZXQgdGlja2VyID0gdGlja2Vyc1t0XTtcbiAgICAgICAgICAgIGxldCBpZCA9IHRpY2tlclsnY3VycmVuY3lQYWlyJ107XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gdGhpcy5tYXJrZXRzX2J5X2lkW2lkXTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBtYXJrZXRbJ3N5bWJvbCddO1xuICAgICAgICAgICAgcmVzdWx0W3N5bWJvbF0gPSB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIG1hcmtldCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFB1YmxpY0xpdmVUaWNrZXJDdXJyZW5jeVBhaXIgKHtcbiAgICAgICAgICAgICdDdXJyZW5jeVBhaXInOiBwWydpZCddLFxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IHRpY2tlciA9IHJlc3BvbnNlWyd0aWNrZXInXTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VUaWNrZXIgKHRpY2tlciwgcCk7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldFB1YmxpY1RyYW5zYWN0aW9uc0N1cnJlbmN5UGFpciAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdDdXJyZW5jeVBhaXInOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG9yZGVyID0ge1xuICAgICAgICAgICAgJ0NvZGUnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICAgICAgJ1dheSc6IChzaWRlID09ICdidXknKSA/ICdCaWQnIDogJ0FzaycsXG4gICAgICAgICAgICAnQW1vdW50JzogYW1vdW50LFxuICAgICAgICB9O1xuICAgICAgICBpZiAodHlwZSA9PSAnbGltaXQnKVxuICAgICAgICAgICAgb3JkZXJbJ1ByaWNlJ10gPSBwcmljZTtcbiAgICAgICAgaWYgKHRoaXMudHdvZmEpIHtcbiAgICAgICAgICAgIGlmICgnVmFsaWRhdGlvbkNvZGUnIGluIHBhcmFtcylcbiAgICAgICAgICAgICAgICBvcmRlclsnVmFsaWRhdGlvbkNvZGUnXSA9IHBhcmFtc1snVmFsaWRhdGlvbkNvZGUnXTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXV0aGVudGljYXRpb25FcnJvciAodGhpcy5pZCArICcgdHdvLWZhY3RvciBhdXRoZW50aWNhdGlvbiByZXF1aXJlcyBhIG1pc3NpbmcgVmFsaWRhdGlvbkNvZGUgcGFyYW1ldGVyJyk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdFRyYWRlT3JkZXJzICh0aGlzLmV4dGVuZCAob3JkZXIsIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXNwb25zZSxcbiAgICAgICAgICAgICdpZCc6IHJlc3BvbnNlWydjbE9yZGVySWQnXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVEZWxldGVUcmFkZU9yZGVyc09yZGVySUQgKHsgJ09yZGVySUQnOiBpZCB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArICcvJyArIHRoaXMuaW1wbG9kZVBhcmFtcyAocGF0aCwgcGFyYW1zKTtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5vbWl0IChwYXJhbXMsIHRoaXMuZXh0cmFjdFBhcmFtcyAocGF0aCkpO1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHF1ZXJ5KS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChxdWVyeSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpO1xuICAgICAgICAgICAgbGV0IGNvbnRlbnRUeXBlID0gKG1ldGhvZCA9PSAnR0VUJykgPyAnJyA6ICdhcHBsaWNhdGlvbi9qc29uJztcbiAgICAgICAgICAgIGxldCBhdXRoID0gbWV0aG9kICsgdXJsICsgY29udGVudFR5cGUgKyBub25jZS50b1N0cmluZyAoKTtcbiAgICAgICAgICAgIGF1dGggPSBhdXRoLnRvTG93ZXJDYXNlICgpO1xuICAgICAgICAgICAgbGV0IHNpZ25hdHVyZSA9IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKGF1dGgpLCB0aGlzLmVuY29kZSAodGhpcy5zZWNyZXQpLCAnc2hhMjU2JywgJ2Jhc2U2NCcpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQVBJX1BVQkxJQ19LRVknOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgICAgICAnQVBJX1JFUVVFU1RfU0lHTkFUVVJFJzogc2lnbmF0dXJlLFxuICAgICAgICAgICAgICAgICdBUElfUkVRVUVTVF9EQVRFJzogbm9uY2UsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKG1ldGhvZCAhPSAnR0VUJykge1xuICAgICAgICAgICAgICAgIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gY29udGVudFR5cGU7XG4gICAgICAgICAgICAgICAgYm9keSA9IHRoaXMuanNvbiAodGhpcy5leHRlbmQgKHsgJ25vbmNlJzogbm9uY2UgfSwgcGFyYW1zKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgICAgICBpZiAoJ3Jlc3BvbnNlU3RhdHVzJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIGlmICgnbWVzc2FnZScgaW4gcmVzcG9uc2VbJ3Jlc3BvbnNlU3RhdHVzJ10pXG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlWydyZXNwb25zZVN0YXR1cyddWydtZXNzYWdlJ10gPT0gJ09LJylcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgJyArIHRoaXMuanNvbiAocmVzcG9uc2UpKTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBnZGF4ID0ge1xuICAgICdpZCc6ICdnZGF4JyxcbiAgICAnbmFtZSc6ICdHREFYJyxcbiAgICAnY291bnRyaWVzJzogJ1VTJyxcbiAgICAncmF0ZUxpbWl0JzogMTAwMCxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ3Rlc3QnOiAnaHR0cHM6Ly9hcGktcHVibGljLnNhbmRib3guZ2RheC5jb20nLFxuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2NTI3LWIxYmU0MWM2LTVlZGItMTFlNy05NWY2LTViNDk2YzQ2OWUyYy5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vYXBpLmdkYXguY29tJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy5nZGF4LmNvbScsXG4gICAgICAgICdkb2MnOiAnaHR0cHM6Ly9kb2NzLmdkYXguY29tJyxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdjdXJyZW5jaWVzJyxcbiAgICAgICAgICAgICAgICAncHJvZHVjdHMnLFxuICAgICAgICAgICAgICAgICdwcm9kdWN0cy97aWR9L2Jvb2snLFxuICAgICAgICAgICAgICAgICdwcm9kdWN0cy97aWR9L2NhbmRsZXMnLFxuICAgICAgICAgICAgICAgICdwcm9kdWN0cy97aWR9L3N0YXRzJyxcbiAgICAgICAgICAgICAgICAncHJvZHVjdHMve2lkfS90aWNrZXInLFxuICAgICAgICAgICAgICAgICdwcm9kdWN0cy97aWR9L3RyYWRlcycsXG4gICAgICAgICAgICAgICAgJ3RpbWUnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdhY2NvdW50cycsXG4gICAgICAgICAgICAgICAgJ2FjY291bnRzL3tpZH0nLFxuICAgICAgICAgICAgICAgICdhY2NvdW50cy97aWR9L2hvbGRzJyxcbiAgICAgICAgICAgICAgICAnYWNjb3VudHMve2lkfS9sZWRnZXInLFxuICAgICAgICAgICAgICAgICdjb2luYmFzZS1hY2NvdW50cycsXG4gICAgICAgICAgICAgICAgJ2ZpbGxzJyxcbiAgICAgICAgICAgICAgICAnZnVuZGluZycsXG4gICAgICAgICAgICAgICAgJ29yZGVycycsXG4gICAgICAgICAgICAgICAgJ29yZGVycy97aWR9JyxcbiAgICAgICAgICAgICAgICAncGF5bWVudC1tZXRob2RzJyxcbiAgICAgICAgICAgICAgICAncG9zaXRpb24nLFxuICAgICAgICAgICAgICAgICdyZXBvcnRzL3tpZH0nLFxuICAgICAgICAgICAgICAgICd1c2Vycy9zZWxmL3RyYWlsaW5nLXZvbHVtZScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2RlcG9zaXRzL2NvaW5iYXNlLWFjY291bnQnLFxuICAgICAgICAgICAgICAgICdkZXBvc2l0cy9wYXltZW50LW1ldGhvZCcsXG4gICAgICAgICAgICAgICAgJ2Z1bmRpbmcvcmVwYXknLFxuICAgICAgICAgICAgICAgICdvcmRlcnMnLFxuICAgICAgICAgICAgICAgICdwb3NpdGlvbi9jbG9zZScsXG4gICAgICAgICAgICAgICAgJ3Byb2ZpbGVzL21hcmdpbi10cmFuc2ZlcicsXG4gICAgICAgICAgICAgICAgJ3JlcG9ydHMnLFxuICAgICAgICAgICAgICAgICd3aXRoZHJhd2Fscy9jb2luYmFzZScsXG4gICAgICAgICAgICAgICAgJ3dpdGhkcmF3YWxzL2NyeXB0bycsXG4gICAgICAgICAgICAgICAgJ3dpdGhkcmF3YWxzL3BheW1lbnQtbWV0aG9kJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAnZGVsZXRlJzogW1xuICAgICAgICAgICAgICAgICdvcmRlcnMnLFxuICAgICAgICAgICAgICAgICdvcmRlcnMve2lkfScsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE1hcmtldHMgKCkge1xuICAgICAgICBsZXQgbWFya2V0cyA9IGF3YWl0IHRoaXMucHVibGljR2V0UHJvZHVjdHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgcCA9IDA7IHAgPCBtYXJrZXRzLmxlbmd0aDsgcCsrKSB7XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gbWFya2V0c1twXTtcbiAgICAgICAgICAgIGxldCBpZCA9IG1hcmtldFsnaWQnXTtcbiAgICAgICAgICAgIGxldCBiYXNlID0gbWFya2V0WydiYXNlX2N1cnJlbmN5J107XG4gICAgICAgICAgICBsZXQgcXVvdGUgPSBtYXJrZXRbJ3F1b3RlX2N1cnJlbmN5J107XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gYmFzZSArICcvJyArIHF1b3RlO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2ggKHtcbiAgICAgICAgICAgICAgICAnaWQnOiBpZCxcbiAgICAgICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgICAgICdiYXNlJzogYmFzZSxcbiAgICAgICAgICAgICAgICAncXVvdGUnOiBxdW90ZSxcbiAgICAgICAgICAgICAgICAnaW5mbyc6IG1hcmtldCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBiYWxhbmNlcyA9IGF3YWl0IHRoaXMucHJpdmF0ZUdldEFjY291bnRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGJhbGFuY2VzIH07XG4gICAgICAgIGZvciAobGV0IGIgPSAwOyBiIDwgYmFsYW5jZXMubGVuZ3RoOyBiKyspIHtcbiAgICAgICAgICAgIGxldCBiYWxhbmNlID0gYmFsYW5jZXNbYl07XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBiYWxhbmNlWydjdXJyZW5jeSddO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiBwYXJzZUZsb2F0IChiYWxhbmNlWydhdmFpbGFibGUnXSksXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiBwYXJzZUZsb2F0IChiYWxhbmNlWydob2xkJ10pLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHBhcnNlRmxvYXQgKGJhbGFuY2VbJ2JhbGFuY2UnXSksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IGF3YWl0IHRoaXMucHVibGljR2V0UHJvZHVjdHNJZEJvb2sgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnaWQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICAgICAgJ2xldmVsJzogMiwgLy8gMSBiZXN0IGJpZGFzaywgMiBhZ2dyZWdhdGVkLCAzIGZ1bGxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdiaWRzJzogW10sXG4gICAgICAgICAgICAnYXNrcyc6IFtdLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHNpZGVzID0gWyAnYmlkcycsICdhc2tzJyBdO1xuICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IHNpZGVzLmxlbmd0aDsgcysrKSB7XG4gICAgICAgICAgICBsZXQgc2lkZSA9IHNpZGVzW3NdO1xuICAgICAgICAgICAgbGV0IG9yZGVycyA9IG9yZGVyYm9va1tzaWRlXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9yZGVyID0gb3JkZXJzW2ldO1xuICAgICAgICAgICAgICAgIGxldCBwcmljZSA9IHBhcnNlRmxvYXQgKG9yZGVyWzBdKTtcbiAgICAgICAgICAgICAgICBsZXQgYW1vdW50ID0gcGFyc2VGbG9hdCAob3JkZXJbMV0pO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtzaWRlXS5wdXNoIChbIHByaWNlLCBhbW91bnQgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgdGlja2VyID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRQcm9kdWN0c0lkVGlja2VyICh7XG4gICAgICAgICAgICAnaWQnOiBwWydpZCddLFxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IHF1b3RlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRQcm9kdWN0c0lkU3RhdHMgKHtcbiAgICAgICAgICAgICdpZCc6IHBbJ2lkJ10sXG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5wYXJzZTg2MDEgKHRpY2tlclsndGltZSddKTtcbiAgICAgICAgbGV0IGJpZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IGFzayA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKCdiaWQnIGluIHRpY2tlcilcbiAgICAgICAgICAgIGJpZCA9IHBhcnNlRmxvYXQgKHRpY2tlclsnYmlkJ10pO1xuICAgICAgICBpZiAoJ2FzaycgaW4gdGlja2VyKVxuICAgICAgICAgICAgYXNrID0gcGFyc2VGbG9hdCAodGlja2VyWydhc2snXSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiBwYXJzZUZsb2F0IChxdW90ZVsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0IChxdW90ZVsnbG93J10pLFxuICAgICAgICAgICAgJ2JpZCc6IGJpZCxcbiAgICAgICAgICAgICdhc2snOiBhc2ssXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogcGFyc2VGbG9hdCAocXVvdGVbJ29wZW4nXSksXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHF1b3RlWydsYXN0J10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndm9sdW1lJ10pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIHBhcnNlVHJhZGUgKHRyYWRlLCBtYXJrZXQpIHtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMucGFyc2U4NjAxIChbJ3RpbWUnXSk7XG4gICAgICAgIGxldCB0eXBlID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2lkJzogdHJhZGVbJ3RyYWRlX2lkJ10udG9TdHJpbmcgKCksXG4gICAgICAgICAgICAnaW5mbyc6IHRyYWRlLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdzeW1ib2wnOiBtYXJrZXRbJ3N5bWJvbCddLFxuICAgICAgICAgICAgJ3R5cGUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnc2lkZSc6IHRyYWRlWydzaWRlJ10sXG4gICAgICAgICAgICAncHJpY2UnOiBwYXJzZUZsb2F0ICh0cmFkZVsncHJpY2UnXSksXG4gICAgICAgICAgICAnYW1vdW50JzogcGFyc2VGbG9hdCAodHJhZGVbJ3NpemUnXSksXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldFByb2R1Y3RzSWRUcmFkZXMgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnaWQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLCAvLyBmaXhlcyBpc3N1ZSAjMlxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgcGFyc2VPSExDViAob2hsY3YsIG1hcmtldCA9IHVuZGVmaW5lZCwgdGltZWZyYW1lID0gNjAsIHNpbmNlID0gdW5kZWZpbmVkLCBsaW1pdCA9IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgb2hsY3ZbMF0gKiAxMDAwLFxuICAgICAgICAgICAgb2hsY3ZbM10sXG4gICAgICAgICAgICBvaGxjdlsyXSxcbiAgICAgICAgICAgIG9obGN2WzFdLFxuICAgICAgICAgICAgb2hsY3ZbNF0sXG4gICAgICAgICAgICBvaGxjdls1XSxcbiAgICAgICAgXTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPSExDViAobWFya2V0LCB0aW1lZnJhbWUgPSA2MCwgc2luY2UgPSB1bmRlZmluZWQsIGxpbWl0ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCBtID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0UHJvZHVjdHNJZENhbmRsZXMgKHtcbiAgICAgICAgICAgICdpZCc6IG1bJ2lkJ10sXG4gICAgICAgICAgICAnZ3JhbnVsYXJpdHknOiB0aW1lZnJhbWUsXG4gICAgICAgICAgICAnc3RhcnQnOiBzaW5jZSxcbiAgICAgICAgICAgICdlbmQnOiBsaW1pdCxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlT0hMQ1ZzIChtLCByZXNwb25zZSwgdGltZWZyYW1lLCBzaW5jZSwgbGltaXQpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgb2lkID0gdGhpcy5ub25jZSAoKS50b1N0cmluZyAoKTtcbiAgICAgICAgbGV0IG9yZGVyID0ge1xuICAgICAgICAgICAgJ3Byb2R1Y3RfaWQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICAgICAgJ3NpZGUnOiBzaWRlLFxuICAgICAgICAgICAgJ3NpemUnOiBhbW91bnQsXG4gICAgICAgICAgICAndHlwZSc6IHR5cGUsXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlID09ICdsaW1pdCcpXG4gICAgICAgICAgICBvcmRlclsncHJpY2UnXSA9IHByaWNlO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0T3JkZXJzICh0aGlzLmV4dGVuZCAob3JkZXIsIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXNwb25zZSxcbiAgICAgICAgICAgICdpZCc6IHJlc3BvbnNlWydpZCddLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJpdmF0ZURlbGV0ZU9yZGVyc0lkICh7ICdpZCc6IGlkIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCByZXF1ZXN0ID0gJy8nICsgdGhpcy5pbXBsb2RlUGFyYW1zIChwYXRoLCBwYXJhbXMpO1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArIHJlcXVlc3Q7XG4gICAgICAgIGxldCBxdWVyeSA9IHRoaXMub21pdCAocGFyYW1zLCB0aGlzLmV4dHJhY3RQYXJhbXMgKHBhdGgpKTtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChxdWVyeSkubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmFwaUtleSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXV0aGVudGljYXRpb25FcnJvciAodGhpcy5pZCArICcgcmVxdWlyZXMgYXBpS2V5IHByb3BlcnR5IGZvciBhdXRoZW50aWNhdGlvbiBhbmQgdHJhZGluZycpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLnNlY3JldClcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXV0aGVudGljYXRpb25FcnJvciAodGhpcy5pZCArICcgcmVxdWlyZXMgc2VjcmV0IHByb3BlcnR5IGZvciBhdXRoZW50aWNhdGlvbiBhbmQgdHJhZGluZycpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLnBhc3N3b3JkKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBBdXRoZW50aWNhdGlvbkVycm9yICh0aGlzLmlkICsgJyByZXF1aXJlcyBwYXNzd29yZCBwcm9wZXJ0eSBmb3IgYXV0aGVudGljYXRpb24gYW5kIHRyYWRpbmcnKTtcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCkudG9TdHJpbmcgKCk7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHF1ZXJ5KS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgYm9keSA9IHRoaXMuanNvbiAocXVlcnkpO1xuICAgICAgICAgICAgbGV0IHdoYXQgPSBub25jZSArIG1ldGhvZCArIHJlcXVlc3QgKyAoYm9keSB8fCAnJyk7XG4gICAgICAgICAgICBsZXQgc2VjcmV0ID0gdGhpcy5iYXNlNjRUb0JpbmFyeSAodGhpcy5zZWNyZXQpO1xuICAgICAgICAgICAgbGV0IHNpZ25hdHVyZSA9IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKHdoYXQpLCBzZWNyZXQsICdzaGEyNTYnLCAnYmFzZTY0Jyk7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdDQi1BQ0NFU1MtS0VZJzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ0NCLUFDQ0VTUy1TSUdOJzogdGhpcy5kZWNvZGUgKHNpZ25hdHVyZSksXG4gICAgICAgICAgICAgICAgJ0NCLUFDQ0VTUy1USU1FU1RBTVAnOiBub25jZSxcbiAgICAgICAgICAgICAgICAnQ0ItQUNDRVNTLVBBU1NQSFJBU0UnOiB0aGlzLnBhc3N3b3JkLFxuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdtZXNzYWdlJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgZ2VtaW5pID0ge1xuICAgICdpZCc6ICdnZW1pbmknLFxuICAgICduYW1lJzogJ0dlbWluaScsXG4gICAgJ2NvdW50cmllcyc6ICdVUycsXG4gICAgJ3JhdGVMaW1pdCc6IDE1MDAsIC8vIDIwMCBmb3IgcHJpdmF0ZSBBUElcbiAgICAndmVyc2lvbic6ICd2MScsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc4MTY4NTctY2U3YmU2NDQtNjA5Ni0xMWU3LTgyZDYtM2MyNTcyNjMyMjljLmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly9hcGkuZ2VtaW5pLmNvbScsXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly9nZW1pbmkuY29tJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL2RvY3MuZ2VtaW5pLmNvbS9yZXN0LWFwaScsXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnc3ltYm9scycsXG4gICAgICAgICAgICAgICAgJ3B1YnRpY2tlci97c3ltYm9sfScsXG4gICAgICAgICAgICAgICAgJ2Jvb2sve3N5bWJvbH0nLFxuICAgICAgICAgICAgICAgICd0cmFkZXMve3N5bWJvbH0nLFxuICAgICAgICAgICAgICAgICdhdWN0aW9uL3tzeW1ib2x9JyxcbiAgICAgICAgICAgICAgICAnYXVjdGlvbi97c3ltYm9sfS9oaXN0b3J5JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ29yZGVyL25ldycsXG4gICAgICAgICAgICAgICAgJ29yZGVyL2NhbmNlbCcsXG4gICAgICAgICAgICAgICAgJ29yZGVyL2NhbmNlbC9zZXNzaW9uJyxcbiAgICAgICAgICAgICAgICAnb3JkZXIvY2FuY2VsL2FsbCcsXG4gICAgICAgICAgICAgICAgJ29yZGVyL3N0YXR1cycsXG4gICAgICAgICAgICAgICAgJ29yZGVycycsXG4gICAgICAgICAgICAgICAgJ215dHJhZGVzJyxcbiAgICAgICAgICAgICAgICAndHJhZGV2b2x1bWUnLFxuICAgICAgICAgICAgICAgICdiYWxhbmNlcycsXG4gICAgICAgICAgICAgICAgJ2RlcG9zaXQve2N1cnJlbmN5fS9uZXdBZGRyZXNzJyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXcve2N1cnJlbmN5fScsXG4gICAgICAgICAgICAgICAgJ2hlYXJ0YmVhdCcsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE1hcmtldHMgKCkge1xuICAgICAgICBsZXQgbWFya2V0cyA9IGF3YWl0IHRoaXMucHVibGljR2V0U3ltYm9scyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGxldCBwID0gMDsgcCA8IG1hcmtldHMubGVuZ3RoOyBwKyspIHtcbiAgICAgICAgICAgIGxldCBpZCA9IG1hcmtldHNbcF07XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gaWQ7XG4gICAgICAgICAgICBsZXQgdXBwZXJjYXNlID0gbWFya2V0LnRvVXBwZXJDYXNlICgpO1xuICAgICAgICAgICAgbGV0IGJhc2UgPSB1cHBlcmNhc2Uuc2xpY2UgKDAsIDMpO1xuICAgICAgICAgICAgbGV0IHF1b3RlID0gdXBwZXJjYXNlLnNsaWNlICgzLCA2KTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBiYXNlICsgJy8nICsgcXVvdGU7XG4gICAgICAgICAgICByZXN1bHQucHVzaCAoe1xuICAgICAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICAgICAgICAgICdzeW1ib2wnOiBzeW1ib2wsXG4gICAgICAgICAgICAgICAgJ2Jhc2UnOiBiYXNlLFxuICAgICAgICAgICAgICAgICdxdW90ZSc6IHF1b3RlLFxuICAgICAgICAgICAgICAgICdpbmZvJzogbWFya2V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IGF3YWl0IHRoaXMucHVibGljR2V0Qm9va1N5bWJvbCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAob3JkZXJbJ3ByaWNlJ10pO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBwYXJzZUZsb2F0IChvcmRlclsnYW1vdW50J10pO1xuICAgICAgICAgICAgICAgIGxldCB0aW1lc3RhbXAgPSBwYXJzZUludCAob3JkZXJbJ3RpbWVzdGFtcCddKSAqIDEwMDA7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3NpZGVdLnB1c2ggKFsgcHJpY2UsIGFtb3VudCwgdGltZXN0YW1wIF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHRpY2tlciA9IGF3YWl0IHRoaXMucHVibGljR2V0UHVidGlja2VyU3ltYm9sICh7XG4gICAgICAgICAgICAnc3ltYm9sJzogcFsnaWQnXSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aWNrZXJbJ3ZvbHVtZSddWyd0aW1lc3RhbXAnXTtcbiAgICAgICAgbGV0IGJhc2VWb2x1bWUgPSBwWydiYXNlJ107XG4gICAgICAgIGxldCBxdW90ZVZvbHVtZSA9IHBbJ3F1b3RlJ107XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbG93JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYmlkJ10pLFxuICAgICAgICAgICAgJ2Fzayc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYXNrJ10pLFxuICAgICAgICAgICAgJ3Z3YXAnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnb3Blbic6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjbG9zZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdmaXJzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsYXN0JzogcGFyc2VGbG9hdCAodGlja2VyWydsYXN0J10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndm9sdW1lJ11bYmFzZVZvbHVtZV0pLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWyd2b2x1bWUnXVtxdW90ZVZvbHVtZV0pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldFRyYWRlc1N5bWJvbCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdEJhbGFuY2VzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGJhbGFuY2VzIH07XG4gICAgICAgIGZvciAobGV0IGIgPSAwOyBiIDwgYmFsYW5jZXMubGVuZ3RoOyBiKyspIHtcbiAgICAgICAgICAgIGxldCBiYWxhbmNlID0gYmFsYW5jZXNbYl07XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBiYWxhbmNlWydjdXJyZW5jeSddO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiBwYXJzZUZsb2F0IChiYWxhbmNlWydhdmFpbGFibGUnXSksXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogcGFyc2VGbG9hdCAoYmFsYW5jZVsnYW1vdW50J10pLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGFjY291bnRbJ3VzZWQnXSA9IGFjY291bnRbJ3RvdGFsJ10gLSBhY2NvdW50WydmcmVlJ107XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBpZiAodHlwZSA9PSAnbWFya2V0JylcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyBhbGxvd3MgbGltaXQgb3JkZXJzIG9ubHknKTtcbiAgICAgICAgbGV0IG9yZGVyID0ge1xuICAgICAgICAgICAgJ2NsaWVudF9vcmRlcl9pZCc6IHRoaXMubm9uY2UgKCksXG4gICAgICAgICAgICAnc3ltYm9sJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICdhbW91bnQnOiBhbW91bnQudG9TdHJpbmcgKCksXG4gICAgICAgICAgICAncHJpY2UnOiBwcmljZS50b1N0cmluZyAoKSxcbiAgICAgICAgICAgICdzaWRlJzogc2lkZSxcbiAgICAgICAgICAgICd0eXBlJzogJ2V4Y2hhbmdlIGxpbWl0JywgLy8gZ2VtaW5pIGFsbG93cyBsaW1pdCBvcmRlcnMgb25seVxuICAgICAgICB9O1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0T3JkZXJOZXcgKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ2lkJzogcmVzcG9uc2VbJ29yZGVyX2lkJ10sXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdENhbmNlbE9yZGVyICh7ICdvcmRlcl9pZCc6IGlkIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSAnLycgKyB0aGlzLnZlcnNpb24gKyAnLycgKyB0aGlzLmltcGxvZGVQYXJhbXMgKHBhdGgsIHBhcmFtcyk7XG4gICAgICAgIGxldCBxdWVyeSA9IHRoaXMub21pdCAocGFyYW1zLCB0aGlzLmV4dHJhY3RQYXJhbXMgKHBhdGgpKTtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChxdWVyeSkubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG5vbmNlID0gdGhpcy5ub25jZSAoKTtcbiAgICAgICAgICAgIGxldCByZXF1ZXN0ID0gdGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICAgICAncmVxdWVzdCc6IHVybCxcbiAgICAgICAgICAgICAgICAnbm9uY2UnOiBub25jZSxcbiAgICAgICAgICAgIH0sIHF1ZXJ5KTtcbiAgICAgICAgICAgIGxldCBwYXlsb2FkID0gdGhpcy5qc29uIChyZXF1ZXN0KTtcbiAgICAgICAgICAgIHBheWxvYWQgPSB0aGlzLnN0cmluZ1RvQmFzZTY0ICh0aGlzLmVuY29kZSAocGF5bG9hZCkpO1xuICAgICAgICAgICAgbGV0IHNpZ25hdHVyZSA9IHRoaXMuaG1hYyAocGF5bG9hZCwgdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSwgJ3NoYTM4NCcpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ3RleHQvcGxhaW4nLFxuICAgICAgICAgICAgICAgICdDb250ZW50LUxlbmd0aCc6IDAsXG4gICAgICAgICAgICAgICAgJ1gtR0VNSU5JLUFQSUtFWSc6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgICAgICdYLUdFTUlOSS1QQVlMT0FEJzogcGF5bG9hZCxcbiAgICAgICAgICAgICAgICAnWC1HRU1JTkktU0lHTkFUVVJFJzogc2lnbmF0dXJlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgdXJsO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgICAgIGlmICgncmVzdWx0JyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIGlmIChyZXNwb25zZVsncmVzdWx0J10gPT0gJ2Vycm9yJylcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgJyArIHRoaXMuanNvbiAocmVzcG9uc2UpKTtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGhpdGJ0YyA9IHtcblxuICAgICdpZCc6ICdoaXRidGMnLFxuICAgICduYW1lJzogJ0hpdEJUQycsXG4gICAgJ2NvdW50cmllcyc6ICdISycsIC8vIEhvbmcgS29uZ1xuICAgICdyYXRlTGltaXQnOiAxNTAwLFxuICAgICd2ZXJzaW9uJzogJzEnLFxuICAgICdoYXNGZXRjaFRpY2tlcnMnOiB0cnVlLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2NTU1LThlYWVjMjBlLTVlZGMtMTFlNy05YzViLTZkYzY5ZmM0MmY1ZS5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHA6Ly9hcGkuaGl0YnRjLmNvbScsXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly9oaXRidGMuY29tJyxcbiAgICAgICAgJ2RvYyc6IFtcbiAgICAgICAgICAgICdodHRwczovL2hpdGJ0Yy5jb20vYXBpJyxcbiAgICAgICAgICAgICdodHRwOi8vaGl0YnRjLWNvbS5naXRodWIuaW8vaGl0YnRjLWFwaScsXG4gICAgICAgICAgICAnaHR0cDovL2pzZmlkZGxlLm5ldC9ibWtuaWdodC9ScWJZQicsXG4gICAgICAgIF0sXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAne3N5bWJvbH0vb3JkZXJib29rJyxcbiAgICAgICAgICAgICAgICAne3N5bWJvbH0vdGlja2VyJyxcbiAgICAgICAgICAgICAgICAne3N5bWJvbH0vdHJhZGVzJyxcbiAgICAgICAgICAgICAgICAne3N5bWJvbH0vdHJhZGVzL3JlY2VudCcsXG4gICAgICAgICAgICAgICAgJ3N5bWJvbHMnLFxuICAgICAgICAgICAgICAgICd0aWNrZXInLFxuICAgICAgICAgICAgICAgICd0aW1lLCdcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICd0cmFkaW5nJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnYmFsYW5jZScsXG4gICAgICAgICAgICAgICAgJ29yZGVycy9hY3RpdmUnLFxuICAgICAgICAgICAgICAgICdvcmRlcnMvcmVjZW50JyxcbiAgICAgICAgICAgICAgICAnb3JkZXInLFxuICAgICAgICAgICAgICAgICd0cmFkZXMvYnkvb3JkZXInLFxuICAgICAgICAgICAgICAgICd0cmFkZXMnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICdwb3N0JzogW1xuICAgICAgICAgICAgICAgICduZXdfb3JkZXInLFxuICAgICAgICAgICAgICAgICdjYW5jZWxfb3JkZXInLFxuICAgICAgICAgICAgICAgICdjYW5jZWxfb3JkZXJzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwYXltZW50Jzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnYmFsYW5jZScsXG4gICAgICAgICAgICAgICAgJ2FkZHJlc3Mve2N1cnJlbmN5fScsXG4gICAgICAgICAgICAgICAgJ3RyYW5zYWN0aW9ucycsXG4gICAgICAgICAgICAgICAgJ3RyYW5zYWN0aW9ucy97dHJhbnNhY3Rpb259JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAndHJhbnNmZXJfdG9fdHJhZGluZycsXG4gICAgICAgICAgICAgICAgJ3RyYW5zZmVyX3RvX21haW4nLFxuICAgICAgICAgICAgICAgICdhZGRyZXNzL3tjdXJyZW5jeX0nLFxuICAgICAgICAgICAgICAgICdwYXlvdXQnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE1hcmtldHMgKCkge1xuICAgICAgICBsZXQgbWFya2V0cyA9IGF3YWl0IHRoaXMucHVibGljR2V0U3ltYm9scyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGxldCBwID0gMDsgcCA8IG1hcmtldHNbJ3N5bWJvbHMnXS5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IG1hcmtldHNbJ3N5bWJvbHMnXVtwXTtcbiAgICAgICAgICAgIGxldCBpZCA9IG1hcmtldFsnc3ltYm9sJ107XG4gICAgICAgICAgICBsZXQgYmFzZSA9IG1hcmtldFsnY29tbW9kaXR5J107XG4gICAgICAgICAgICBsZXQgcXVvdGUgPSBtYXJrZXRbJ2N1cnJlbmN5J107XG4gICAgICAgICAgICBsZXQgbG90ID0gcGFyc2VGbG9hdCAobWFya2V0Wydsb3QnXSk7XG4gICAgICAgICAgICBsZXQgc3RlcCA9IHBhcnNlRmxvYXQgKG1hcmtldFsnc3RlcCddKTtcbiAgICAgICAgICAgIGJhc2UgPSB0aGlzLmNvbW1vbkN1cnJlbmN5Q29kZSAoYmFzZSk7XG4gICAgICAgICAgICBxdW90ZSA9IHRoaXMuY29tbW9uQ3VycmVuY3lDb2RlIChxdW90ZSk7XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gYmFzZSArICcvJyArIHF1b3RlO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2ggKHtcbiAgICAgICAgICAgICAgICAnaWQnOiBpZCxcbiAgICAgICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgICAgICdiYXNlJzogYmFzZSxcbiAgICAgICAgICAgICAgICAncXVvdGUnOiBxdW90ZSxcbiAgICAgICAgICAgICAgICAnbG90JzogbG90LFxuICAgICAgICAgICAgICAgICdzdGVwJzogc3RlcCxcbiAgICAgICAgICAgICAgICAnaW5mbyc6IG1hcmtldCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMudHJhZGluZ0dldEJhbGFuY2UgKCk7XG4gICAgICAgIGxldCBiYWxhbmNlcyA9IHJlc3BvbnNlWydiYWxhbmNlJ107XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogYmFsYW5jZXMgfTtcbiAgICAgICAgZm9yIChsZXQgYiA9IDA7IGIgPCBiYWxhbmNlcy5sZW5ndGg7IGIrKykge1xuICAgICAgICAgICAgbGV0IGJhbGFuY2UgPSBiYWxhbmNlc1tiXTtcbiAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IGJhbGFuY2VbJ2N1cnJlbmN5X2NvZGUnXTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogcGFyc2VGbG9hdCAoYmFsYW5jZVsnY2FzaCddKSxcbiAgICAgICAgICAgICAgICAndXNlZCc6IHBhcnNlRmxvYXQgKGJhbGFuY2VbJ3Jlc2VydmVkJ10pLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhY2NvdW50Wyd0b3RhbCddID0gdGhpcy5zdW0gKGFjY291bnRbJ2ZyZWUnXSwgYWNjb3VudFsndXNlZCddKTtcbiAgICAgICAgICAgIHJlc3VsdFtjdXJyZW5jeV0gPSBhY2NvdW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFN5bWJvbE9yZGVyYm9vayAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAob3JkZXJbMF0pO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBwYXJzZUZsb2F0IChvcmRlclsxXSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3NpZGVdLnB1c2ggKFsgcHJpY2UsIGFtb3VudCBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBwYXJzZVRpY2tlciAodGlja2VyLCBtYXJrZXQpIHtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRpY2tlclsndGltZXN0YW1wJ107XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2hpZ2gnXSksXG4gICAgICAgICAgICAnbG93JzogcGFyc2VGbG9hdCAodGlja2VyWydsb3cnXSksXG4gICAgICAgICAgICAnYmlkJzogcGFyc2VGbG9hdCAodGlja2VyWydiaWQnXSksXG4gICAgICAgICAgICAnYXNrJzogcGFyc2VGbG9hdCAodGlja2VyWydhc2snXSksXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogcGFyc2VGbG9hdCAodGlja2VyWydvcGVuJ10pLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xhc3QnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWyd2b2x1bWUnXSksXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbHVtZV9xdW90ZSddKSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlcnMgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgdGlja2VycyA9IGF3YWl0IHRoaXMucHVibGljR2V0VGlja2VyICgpO1xuICAgICAgICBsZXQgaWRzID0gT2JqZWN0LmtleXMgKHRpY2tlcnMpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge307XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgaWQgPSBpZHNbaV07XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gdGhpcy5tYXJrZXRzX2J5X2lkW2lkXTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBtYXJrZXRbJ3N5bWJvbCddO1xuICAgICAgICAgICAgbGV0IHRpY2tlciA9IHRpY2tlcnNbaWRdO1xuICAgICAgICAgICAgcmVzdWx0W3N5bWJvbF0gPSB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIG1hcmtldCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgdGlja2VyID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRTeW1ib2xUaWNrZXIgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiBwWydpZCddLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCdtZXNzYWdlJyBpbiB0aWNrZXIpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgJyArIHRpY2tlclsnbWVzc2FnZSddKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VUaWNrZXIgKHRpY2tlciwgcCk7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldFN5bWJvbFRyYWRlcyAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgLy8gY2hlY2sgaWYgYW1vdW50IGNhbiBiZSBldmVubHkgZGl2aWRlZCBpbnRvIGxvdHNcbiAgICAgICAgLy8gdGhleSB3YW50IGludGVnZXIgcXVhbnRpdHkgaW4gbG90IHVuaXRzXG4gICAgICAgIGxldCBxdWFudGl0eSA9IHBhcnNlRmxvYXQgKGFtb3VudCkgLyBwWydsb3QnXTtcbiAgICAgICAgbGV0IHdob2xlTG90cyA9IE1hdGgucm91bmQgKHF1YW50aXR5KTtcbiAgICAgICAgbGV0IGRpZmZlcmVuY2UgPSBxdWFudGl0eSAtIHdob2xlTG90cztcbiAgICAgICAgaWYgKE1hdGguYWJzIChkaWZmZXJlbmNlKSA+IHBbJ3N0ZXAnXSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyBvcmRlciBhbW91bnQgc2hvdWxkIGJlIGV2ZW5seSBkaXZpc2libGUgYnkgbG90IHVuaXQgc2l6ZSBvZiAnICsgcFsnbG90J10udG9TdHJpbmcgKCkpO1xuICAgICAgICBsZXQgY2xpZW50T3JkZXJJZCA9IHRoaXMubm9uY2UgKCk7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdjbGllbnRPcmRlcklkJzogY2xpZW50T3JkZXJJZC50b1N0cmluZyAoKSxcbiAgICAgICAgICAgICdzeW1ib2wnOiBwWydpZCddLFxuICAgICAgICAgICAgJ3NpZGUnOiBzaWRlLFxuICAgICAgICAgICAgJ3F1YW50aXR5Jzogd2hvbGVMb3RzLnRvU3RyaW5nICgpLCAvLyBxdWFudGl0eSBpbiBpbnRlZ2VyIGxvdCB1bml0c1xuICAgICAgICAgICAgJ3R5cGUnOiB0eXBlLFxuICAgICAgICB9O1xuICAgICAgICBpZiAodHlwZSA9PSAnbGltaXQnKVxuICAgICAgICAgICAgb3JkZXJbJ3ByaWNlJ10gPSAnJS4xMGYnLnNwcmludGYgKHByaWNlKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy50cmFkaW5nUG9zdE5ld09yZGVyICh0aGlzLmV4dGVuZCAob3JkZXIsIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXNwb25zZSxcbiAgICAgICAgICAgICdpZCc6IHJlc3BvbnNlWydFeGVjdXRpb25SZXBvcnQnXVsnY2xpZW50T3JkZXJJZCddLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnRyYWRpbmdQb3N0Q2FuY2VsT3JkZXIgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnY2xpZW50T3JkZXJJZCc6IGlkLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gJy8nICsgJ2FwaScgKyAnLycgKyB0aGlzLnZlcnNpb24gKyAnLycgKyBhcGkgKyAnLycgKyB0aGlzLmltcGxvZGVQYXJhbXMgKHBhdGgsIHBhcmFtcyk7XG4gICAgICAgIGxldCBxdWVyeSA9IHRoaXMub21pdCAocGFyYW1zLCB0aGlzLmV4dHJhY3RQYXJhbXMgKHBhdGgpKTtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChxdWVyeSkubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG5vbmNlID0gdGhpcy5ub25jZSAoKTtcbiAgICAgICAgICAgIHF1ZXJ5ID0gdGhpcy5leHRlbmQgKHsgJ25vbmNlJzogbm9uY2UsICdhcGlrZXknOiB0aGlzLmFwaUtleSB9LCBxdWVyeSk7XG4gICAgICAgICAgICBpZiAobWV0aG9kID09ICdQT1NUJylcbiAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHF1ZXJ5KS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgIGJvZHkgPSB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChxdWVyeSk7XG4gICAgICAgICAgICBsZXQgYXV0aCA9IHVybCArIChib2R5IHx8ICcnKTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgICAgICAgICdYLVNpZ25hdHVyZSc6IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKGF1dGgpLCB0aGlzLmVuY29kZSAodGhpcy5zZWNyZXQpLCAnc2hhNTEyJykudG9Mb3dlckNhc2UgKCksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHVybCA9IHRoaXMudXJsc1snYXBpJ10gKyB1cmw7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdjb2RlJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgaHVvYmkgPSB7XG5cbiAgICAnaWQnOiAnaHVvYmknLFxuICAgICduYW1lJzogJ0h1b2JpJyxcbiAgICAnY291bnRyaWVzJzogJ0NOJyxcbiAgICAncmF0ZUxpbWl0JzogMjAwMCxcbiAgICAndmVyc2lvbic6ICd2MycsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc3NjY1NjktMTVhYTdiOWEtNWVkZC0xMWU3LTllN2YtNDQ3OTFmNGVlNDljLmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cDovL2FwaS5odW9iaS5jb20nLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vd3d3Lmh1b2JpLmNvbScsXG4gICAgICAgICdkb2MnOiAnaHR0cHM6Ly9naXRodWIuY29tL2h1b2JpYXBpL0FQSV9Eb2NzX2VuL3dpa2knLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ3N0YXRpY21hcmtldCc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ3tpZH1fa2xpbmVfe3BlcmlvZH0nLFxuICAgICAgICAgICAgICAgICd0aWNrZXJfe2lkfScsXG4gICAgICAgICAgICAgICAgJ2RlcHRoX3tpZH0nLFxuICAgICAgICAgICAgICAgICdkZXB0aF97aWR9X3tsZW5ndGh9JyxcbiAgICAgICAgICAgICAgICAnZGV0YWlsX3tpZH0nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3VzZG1hcmtldCc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ3tpZH1fa2xpbmVfe3BlcmlvZH0nLFxuICAgICAgICAgICAgICAgICd0aWNrZXJfe2lkfScsXG4gICAgICAgICAgICAgICAgJ2RlcHRoX3tpZH0nLFxuICAgICAgICAgICAgICAgICdkZXB0aF97aWR9X3tsZW5ndGh9JyxcbiAgICAgICAgICAgICAgICAnZGV0YWlsX3tpZH0nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3RyYWRlJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2dldF9hY2NvdW50X2luZm8nLFxuICAgICAgICAgICAgICAgICdnZXRfb3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnb3JkZXJfaW5mbycsXG4gICAgICAgICAgICAgICAgJ2J1eScsXG4gICAgICAgICAgICAgICAgJ3NlbGwnLFxuICAgICAgICAgICAgICAgICdidXlfbWFya2V0JyxcbiAgICAgICAgICAgICAgICAnc2VsbF9tYXJrZXQnLFxuICAgICAgICAgICAgICAgICdjYW5jZWxfb3JkZXInLFxuICAgICAgICAgICAgICAgICdnZXRfbmV3X2RlYWxfb3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnZ2V0X29yZGVyX2lkX2J5X3RyYWRlX2lkJyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXdfY29pbicsXG4gICAgICAgICAgICAgICAgJ2NhbmNlbF93aXRoZHJhd19jb2luJyxcbiAgICAgICAgICAgICAgICAnZ2V0X3dpdGhkcmF3X2NvaW5fcmVzdWx0JyxcbiAgICAgICAgICAgICAgICAndHJhbnNmZXInLFxuICAgICAgICAgICAgICAgICdsb2FuJyxcbiAgICAgICAgICAgICAgICAncmVwYXltZW50JyxcbiAgICAgICAgICAgICAgICAnZ2V0X2xvYW5fYXZhaWxhYmxlJyxcbiAgICAgICAgICAgICAgICAnZ2V0X2xvYW5zJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9DTlknOiB7ICdpZCc6ICdidGMnLCAnc3ltYm9sJzogJ0JUQy9DTlknLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnQ05ZJywgJ3R5cGUnOiAnc3RhdGljbWFya2V0JywgJ2NvaW5UeXBlJzogMSB9LFxuICAgICAgICAnTFRDL0NOWSc6IHsgJ2lkJzogJ2x0YycsICdzeW1ib2wnOiAnTFRDL0NOWScsICdiYXNlJzogJ0xUQycsICdxdW90ZSc6ICdDTlknLCAndHlwZSc6ICdzdGF0aWNtYXJrZXQnLCAnY29pblR5cGUnOiAyIH0sXG4gICAgICAgICdCVEMvVVNEJzogeyAnaWQnOiAnYnRjJywgJ3N5bWJvbCc6ICdCVEMvVVNEJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ1VTRCcsICd0eXBlJzogJ3VzZG1hcmtldCcsICAgICdjb2luVHlwZSc6IDEgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gYXdhaXQgdGhpcy50cmFkZVBvc3RHZXRBY2NvdW50SW5mbyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiBiYWxhbmNlcyB9O1xuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IHRoaXMuY3VycmVuY2llcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gdGhpcy5jdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IGxvd2VyY2FzZSA9IGN1cnJlbmN5LnRvTG93ZXJDYXNlICgpO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGxldCBhdmFpbGFibGUgPSAnYXZhaWxhYmxlXycgKyBsb3dlcmNhc2UgKyAnX2Rpc3BsYXknO1xuICAgICAgICAgICAgbGV0IGZyb3plbiA9ICdmcm96ZW5fJyArIGxvd2VyY2FzZSArICdfZGlzcGxheSc7XG4gICAgICAgICAgICBsZXQgbG9hbiA9ICdsb2FuXycgKyBsb3dlcmNhc2UgKyAnX2Rpc3BsYXknO1xuICAgICAgICAgICAgaWYgKGF2YWlsYWJsZSBpbiBiYWxhbmNlcylcbiAgICAgICAgICAgICAgICBhY2NvdW50WydmcmVlJ10gPSBwYXJzZUZsb2F0IChiYWxhbmNlc1thdmFpbGFibGVdKTtcbiAgICAgICAgICAgIGlmIChmcm96ZW4gaW4gYmFsYW5jZXMpXG4gICAgICAgICAgICAgICAgYWNjb3VudFsndXNlZCddID0gcGFyc2VGbG9hdCAoYmFsYW5jZXNbZnJvemVuXSk7XG4gICAgICAgICAgICBpZiAobG9hbiBpbiBiYWxhbmNlcylcbiAgICAgICAgICAgICAgICBhY2NvdW50Wyd1c2VkJ10gPSB0aGlzLnN1bSAoYWNjb3VudFsndXNlZCddLCBwYXJzZUZsb2F0IChiYWxhbmNlc1tsb2FuXSkpO1xuICAgICAgICAgICAgYWNjb3VudFsndG90YWwnXSA9IHRoaXMuc3VtIChhY2NvdW50WydmcmVlJ10sIGFjY291bnRbJ3VzZWQnXSk7XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgbWV0aG9kID0gcFsndHlwZSddICsgJ0dldERlcHRoSWQnO1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgdGhpc1ttZXRob2RdICh0aGlzLmV4dGVuZCAoeyAnaWQnOiBwWydpZCddIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IG9yZGVyYm9va1snYmlkcyddLFxuICAgICAgICAgICAgJ2Fza3MnOiBvcmRlcmJvb2tbJ2Fza3MnXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IG1ldGhvZCA9IHBbJ3R5cGUnXSArICdHZXRUaWNrZXJJZCc7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXNbbWV0aG9kXSAoeyAnaWQnOiBwWydpZCddIH0pO1xuICAgICAgICBsZXQgdGlja2VyID0gcmVzcG9uc2VbJ3RpY2tlciddO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gcGFyc2VJbnQgKHJlc3BvbnNlWyd0aW1lJ10pICogMTAwMDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2J1eSddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3NlbGwnXSksXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogcGFyc2VGbG9hdCAodGlja2VyWydvcGVuJ10pLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xhc3QnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWyd2b2wnXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IG1ldGhvZCA9IHBbJ3R5cGUnXSArICdHZXREZXRhaWxJZCc7XG4gICAgICAgIHJldHVybiB0aGlzW21ldGhvZF0gKHRoaXMuZXh0ZW5kICh7ICdpZCc6IHBbJ2lkJ10gfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCBtZXRob2QgPSAndHJhZGVQb3N0JyArIHRoaXMuY2FwaXRhbGl6ZSAoc2lkZSk7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdjb2luX3R5cGUnOiBwWydjb2luVHlwZSddLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IGFtb3VudCxcbiAgICAgICAgICAgICdtYXJrZXQnOiBwWydxdW90ZSddLnRvTG93ZXJDYXNlICgpLFxuICAgICAgICB9O1xuICAgICAgICBpZiAodHlwZSA9PSAnbGltaXQnKVxuICAgICAgICAgICAgb3JkZXJbJ3ByaWNlJ10gPSBwcmljZTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgbWV0aG9kICs9IHRoaXMuY2FwaXRhbGl6ZSAodHlwZSk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IHRoaXNbbWV0aG9kXSAodGhpcy5leHRlbmQgKG9yZGVyLCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnaWQnXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyYWRlUG9zdENhbmNlbE9yZGVyICh7ICdpZCc6IGlkIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAndHJhZGUnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ107XG4gICAgICAgIGlmIChhcGkgPT0gJ3RyYWRlJykge1xuICAgICAgICAgICAgdXJsICs9ICcvYXBpJyArIHRoaXMudmVyc2lvbjtcbiAgICAgICAgICAgIGxldCBxdWVyeSA9IHRoaXMua2V5c29ydCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICAgICAnbWV0aG9kJzogcGF0aCxcbiAgICAgICAgICAgICAgICAnYWNjZXNzX2tleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgICAgICdjcmVhdGVkJzogdGhpcy5ub25jZSAoKSxcbiAgICAgICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICAgICAgbGV0IHF1ZXJ5U3RyaW5nID0gdGhpcy51cmxlbmNvZGUgKHRoaXMub21pdCAocXVlcnksICdtYXJrZXQnKSk7XG4gICAgICAgICAgICAvLyBzZWNyZXQga2V5IG11c3QgYmUgYXQgdGhlIGVuZCBvZiBxdWVyeSB0byBiZSBzaWduZWRcbiAgICAgICAgICAgIHF1ZXJ5U3RyaW5nICs9ICcmc2VjcmV0X2tleT0nICsgdGhpcy5zZWNyZXQ7XG4gICAgICAgICAgICBxdWVyeVsnc2lnbiddID0gdGhpcy5oYXNoICh0aGlzLmVuY29kZSAocXVlcnlTdHJpbmcpKTtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtTGVuZ3RoJzogYm9keS5sZW5ndGgsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdXJsICs9ICcvJyArIGFwaSArICcvJyArIHRoaXMuaW1wbG9kZVBhcmFtcyAocGF0aCwgcGFyYW1zKSArICdfanNvbi5qcyc7XG4gICAgICAgICAgICBsZXQgcXVlcnkgPSB0aGlzLm9taXQgKHBhcmFtcywgdGhpcy5leHRyYWN0UGFyYW1zIChwYXRoKSk7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHF1ZXJ5KS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChxdWVyeSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgICAgICBpZiAoJ3N0YXR1cycgaW4gcmVzcG9uc2UpXG4gICAgICAgICAgICBpZiAocmVzcG9uc2VbJ3N0YXR1cyddID09ICdlcnJvcicpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgICAgIGlmICgnY29kZScgaW4gcmVzcG9uc2UpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgJyArIHRoaXMuanNvbiAocmVzcG9uc2UpKTtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGl0Yml0ID0ge1xuXG4gICAgJ2lkJzogJ2l0Yml0JyxcbiAgICAnbmFtZSc6ICdpdEJpdCcsXG4gICAgJ2NvdW50cmllcyc6ICdVUycsXG4gICAgJ3JhdGVMaW1pdCc6IDIwMDAsXG4gICAgJ3ZlcnNpb24nOiAndjEnLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3ODIyMTU5LTY2MTUzNjIwLTYwYWQtMTFlNy04OWU3LTAwNWY2ZDdmM2RlMC5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vYXBpLml0Yml0LmNvbScsXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly93d3cuaXRiaXQuY29tJyxcbiAgICAgICAgJ2RvYyc6IFtcbiAgICAgICAgICAgICdodHRwczovL2FwaS5pdGJpdC5jb20vZG9jcycsXG4gICAgICAgICAgICAnaHR0cHM6Ly93d3cuaXRiaXQuY29tL2FwaScsXG4gICAgICAgIF0sXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnbWFya2V0cy97c3ltYm9sfS90aWNrZXInLFxuICAgICAgICAgICAgICAgICdtYXJrZXRzL3tzeW1ib2x9L29yZGVyX2Jvb2snLFxuICAgICAgICAgICAgICAgICdtYXJrZXRzL3tzeW1ib2x9L3RyYWRlcycsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAncHJpdmF0ZSc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ3dhbGxldHMnLFxuICAgICAgICAgICAgICAgICd3YWxsZXRzL3t3YWxsZXRJZH0nLFxuICAgICAgICAgICAgICAgICd3YWxsZXRzL3t3YWxsZXRJZH0vYmFsYW5jZXMve2N1cnJlbmN5Q29kZX0nLFxuICAgICAgICAgICAgICAgICd3YWxsZXRzL3t3YWxsZXRJZH0vZnVuZGluZ19oaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAnd2FsbGV0cy97d2FsbGV0SWR9L3RyYWRlcycsXG4gICAgICAgICAgICAgICAgJ3dhbGxldHMve3dhbGxldElkfS9vcmRlcnMve2lkfScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ3dhbGxldF90cmFuc2ZlcnMnLFxuICAgICAgICAgICAgICAgICd3YWxsZXRzJyxcbiAgICAgICAgICAgICAgICAnd2FsbGV0cy97d2FsbGV0SWR9L2NyeXB0b2N1cnJlbmN5X2RlcG9zaXRzJyxcbiAgICAgICAgICAgICAgICAnd2FsbGV0cy97d2FsbGV0SWR9L2NyeXB0b2N1cnJlbmN5X3dpdGhkcmF3YWxzJyxcbiAgICAgICAgICAgICAgICAnd2FsbGV0cy97d2FsbGV0SWR9L29yZGVycycsXG4gICAgICAgICAgICAgICAgJ3dpcmVfd2l0aGRyYXdhbCcsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ2RlbGV0ZSc6IFtcbiAgICAgICAgICAgICAgICAnd2FsbGV0cy97d2FsbGV0SWR9L29yZGVycy97aWR9JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9VU0QnOiB7ICdpZCc6ICdYQlRVU0QnLCAnc3ltYm9sJzogJ0JUQy9VU0QnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnVVNEJyB9LFxuICAgICAgICAnQlRDL1NHRCc6IHsgJ2lkJzogJ1hCVFNHRCcsICdzeW1ib2wnOiAnQlRDL1NHRCcsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdTR0QnIH0sXG4gICAgICAgICdCVEMvRVVSJzogeyAnaWQnOiAnWEJURVVSJywgJ3N5bWJvbCc6ICdCVEMvRVVSJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ0VVUicgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IGF3YWl0IHRoaXMucHVibGljR2V0TWFya2V0c1N5bWJvbE9yZGVyQm9vayAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAob3JkZXJbMF0pO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBwYXJzZUZsb2F0IChvcmRlclsxXSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3NpZGVdLnB1c2ggKFsgcHJpY2UsIGFtb3VudCBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGxldCB0aWNrZXIgPSBhd2FpdCB0aGlzLnB1YmxpY0dldE1hcmtldHNTeW1ib2xUaWNrZXIgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMucGFyc2U4NjAxICh0aWNrZXJbJ3NlcnZlclRpbWVVVEMnXSk7XG4gICAgICAgIGxldCBiaWQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGxldCBhc2sgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmICgnYmlkJyBpbiB0aWNrZXIpXG4gICAgICAgICAgICBpZiAodGlja2VyWydiaWQnXSlcbiAgICAgICAgICAgICAgICBiaWQgPSBwYXJzZUZsb2F0ICh0aWNrZXJbJ2JpZCddKTtcbiAgICAgICAgaWYgKCdhc2snIGluIHRpY2tlcilcbiAgICAgICAgICAgIGlmICh0aWNrZXJbJ2FzayddKVxuICAgICAgICAgICAgICAgIGFzayA9IHBhcnNlRmxvYXQgKHRpY2tlclsnYXNrJ10pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydoaWdoMjRoJ10pLFxuICAgICAgICAgICAgJ2xvdyc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbG93MjRoJ10pLFxuICAgICAgICAgICAgJ2JpZCc6IGJpZCxcbiAgICAgICAgICAgICdhc2snOiBhc2ssXG4gICAgICAgICAgICAndndhcCc6IHBhcnNlRmxvYXQgKHRpY2tlclsndndhcDI0aCddKSxcbiAgICAgICAgICAgICdvcGVuJzogcGFyc2VGbG9hdCAodGlja2VyWydvcGVuVG9kYXknXSksXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdFByaWNlJ10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndm9sdW1lMjRoJ10pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldE1hcmtldHNTeW1ib2xUcmFkZXMgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnc3ltYm9sJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZUdldEJhbGFuY2VzICgpO1xuICAgICAgICBsZXQgYmFsYW5jZXMgPSByZXNwb25zZVsnYmFsYW5jZXMnXTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiByZXNwb25zZSB9O1xuICAgICAgICBmb3IgKGxldCBiID0gMDsgYiA8IGJhbGFuY2VzLmxlbmd0aDsgYisrKSB7XG4gICAgICAgICAgICBsZXQgYmFsYW5jZSA9IGJhbGFuY2VzW2JdO1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gYmFsYW5jZVsnY3VycmVuY3knXTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogcGFyc2VGbG9hdCAoYmFsYW5jZVsnYXZhaWxhYmxlQmFsYW5jZSddKSxcbiAgICAgICAgICAgICAgICAndXNlZCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAndG90YWwnOiBwYXJzZUZsb2F0IChiYWxhbmNlWyd0b3RhbEJhbGFuY2UnXSksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYWNjb3VudFsndXNlZCddID0gYWNjb3VudFsndG90YWwnXSAtIGFjY291bnRbJ2ZyZWUnXTtcbiAgICAgICAgICAgIHJlc3VsdFtjdXJyZW5jeV0gPSBhY2NvdW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGZldGNoV2FsbGV0cyAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVHZXRXYWxsZXRzICgpO1xuICAgIH0sXG5cbiAgICBub25jZSAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgaWYgKHR5cGUgPT0gJ21hcmtldCcpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgYWxsb3dzIGxpbWl0IG9yZGVycyBvbmx5Jyk7XG4gICAgICAgIGFtb3VudCA9IGFtb3VudC50b1N0cmluZyAoKTtcbiAgICAgICAgcHJpY2UgPSBwcmljZS50b1N0cmluZyAoKTtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IG9yZGVyID0ge1xuICAgICAgICAgICAgJ3NpZGUnOiBzaWRlLFxuICAgICAgICAgICAgJ3R5cGUnOiB0eXBlLFxuICAgICAgICAgICAgJ2N1cnJlbmN5JzogcFsnYmFzZSddLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IGFtb3VudCxcbiAgICAgICAgICAgICdkaXNwbGF5JzogYW1vdW50LFxuICAgICAgICAgICAgJ3ByaWNlJzogcHJpY2UsXG4gICAgICAgICAgICAnaW5zdHJ1bWVudCc6IHBbJ2lkJ10sXG4gICAgICAgIH07XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RUcmFkZUFkZCAodGhpcy5leHRlbmQgKG9yZGVyLCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnaWQnXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlRGVsZXRlV2FsbGV0c1dhbGxldElkT3JkZXJzSWQgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnaWQnOiBpZCxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ10gKyAnLycgKyB0aGlzLnZlcnNpb24gKyAnLycgKyB0aGlzLmltcGxvZGVQYXJhbXMgKHBhdGgsIHBhcmFtcyk7XG4gICAgICAgIGxldCBxdWVyeSA9IHRoaXMub21pdCAocGFyYW1zLCB0aGlzLmV4dHJhY3RQYXJhbXMgKHBhdGgpKTtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChxdWVyeSkubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChxdWVyeSkubGVuZ3RoKVxuICAgICAgICAgICAgICAgIGJvZHkgPSB0aGlzLmpzb24gKHF1ZXJ5KTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBib2R5ID0gJyc7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpLnRvU3RyaW5nICgpO1xuICAgICAgICAgICAgbGV0IHRpbWVzdGFtcCA9IG5vbmNlO1xuICAgICAgICAgICAgbGV0IGF1dGggPSBbIG1ldGhvZCwgdXJsLCBib2R5LCBub25jZSwgdGltZXN0YW1wIF07XG4gICAgICAgICAgICBsZXQgbWVzc2FnZSA9IG5vbmNlICsgdGhpcy5qc29uIChhdXRoKTtcbiAgICAgICAgICAgIGxldCBoYXNoID0gdGhpcy5oYXNoICh0aGlzLmVuY29kZSAobWVzc2FnZSksICdzaGEyNTYnLCAnYmluYXJ5Jyk7XG4gICAgICAgICAgICBsZXQgYmluaGFzaCA9IHRoaXMuYmluYXJ5Q29uY2F0ICh1cmwsIGhhc2gpO1xuICAgICAgICAgICAgbGV0IHNpZ25hdHVyZSA9IHRoaXMuaG1hYyAoYmluaGFzaCwgdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSwgJ3NoYTUxMicsICdiYXNlNjQnKTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0F1dGhvcml6YXRpb24nOiBzZWxmLmFwaUtleSArICc6JyArIHNpZ25hdHVyZSxcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICdYLUF1dGgtVGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgICAgICdYLUF1dGgtTm9uY2UnOiBub25jZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgICAgICBpZiAoJ2NvZGUnIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBqdWJpID0ge1xuXG4gICAgJ2lkJzogJ2p1YmknLFxuICAgICduYW1lJzogJ2p1YmkuY29tJyxcbiAgICAnY291bnRyaWVzJzogJ0NOJyxcbiAgICAncmF0ZUxpbWl0JzogMTUwMCxcbiAgICAndmVyc2lvbic6ICd2MScsXG4gICAgJ2hhc0ZldGNoVGlja2Vycyc6IHRydWUsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc3NjY1ODEtOWQzOTdkOWEtNWVkZC0xMWU3LThmYjktNWQ4MjM2YzBlNjkyLmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly93d3cuanViaS5jb20vYXBpJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy5qdWJpLmNvbScsXG4gICAgICAgICdkb2MnOiAnaHR0cHM6Ly93d3cuanViaS5jb20vaGVscC9hcGkuaHRtbCcsXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnZGVwdGgnLFxuICAgICAgICAgICAgICAgICdvcmRlcnMnLFxuICAgICAgICAgICAgICAgICd0aWNrZXInLFxuICAgICAgICAgICAgICAgICdhbGx0aWNrZXInLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnYmFsYW5jZScsXG4gICAgICAgICAgICAgICAgJ3RyYWRlX2FkZCcsXG4gICAgICAgICAgICAgICAgJ3RyYWRlX2NhbmNlbCcsXG4gICAgICAgICAgICAgICAgJ3RyYWRlX2xpc3QnLFxuICAgICAgICAgICAgICAgICd0cmFkZV92aWV3JyxcbiAgICAgICAgICAgICAgICAnd2FsbGV0JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoTWFya2V0cyAoKSB7XG4gICAgICAgIGxldCBtYXJrZXRzID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRBbGx0aWNrZXIgKCk7XG4gICAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMgKG1hcmtldHMpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwga2V5cy5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgbGV0IGlkID0ga2V5c1twXTtcbiAgICAgICAgICAgIGxldCBiYXNlID0gaWQudG9VcHBlckNhc2UgKCk7XG4gICAgICAgICAgICBsZXQgcXVvdGUgPSAnQ05ZJztcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBiYXNlICsgJy8nICsgcXVvdGU7XG4gICAgICAgICAgICBiYXNlID0gdGhpcy5jb21tb25DdXJyZW5jeUNvZGUgKGJhc2UpO1xuICAgICAgICAgICAgcXVvdGUgPSB0aGlzLmNvbW1vbkN1cnJlbmN5Q29kZSAocXVvdGUpO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2ggKHtcbiAgICAgICAgICAgICAgICAnaWQnOiBpZCxcbiAgICAgICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgICAgICdiYXNlJzogYmFzZSxcbiAgICAgICAgICAgICAgICAncXVvdGUnOiBxdW90ZSxcbiAgICAgICAgICAgICAgICAnaW5mbyc6IGlkLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdEJhbGFuY2UgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogYmFsYW5jZXMgfTtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCB0aGlzLmN1cnJlbmNpZXMubGVuZ3RoOyBjKyspIHtcbiAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IHRoaXMuY3VycmVuY2llc1tjXTtcbiAgICAgICAgICAgIGxldCBsb3dlcmNhc2UgPSBjdXJyZW5jeS50b0xvd2VyQ2FzZSAoKTtcbiAgICAgICAgICAgIGlmIChsb3dlcmNhc2UgPT0gJ2Rhc2gnKVxuICAgICAgICAgICAgICAgIGxvd2VyY2FzZSA9ICdkcmsnO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGxldCBmcmVlID0gbG93ZXJjYXNlICsgJ19iYWxhbmNlJztcbiAgICAgICAgICAgIGxldCB1c2VkID0gbG93ZXJjYXNlICsgJ19sb2NrJztcbiAgICAgICAgICAgIGlmIChmcmVlIGluIGJhbGFuY2VzKVxuICAgICAgICAgICAgICAgIGFjY291bnRbJ2ZyZWUnXSA9IHBhcnNlRmxvYXQgKGJhbGFuY2VzW2ZyZWVdKTtcbiAgICAgICAgICAgIGlmICh1c2VkIGluIGJhbGFuY2VzKVxuICAgICAgICAgICAgICAgIGFjY291bnRbJ3VzZWQnXSA9IHBhcnNlRmxvYXQgKGJhbGFuY2VzW3VzZWRdKTtcbiAgICAgICAgICAgIGFjY291bnRbJ3RvdGFsJ10gPSB0aGlzLnN1bSAoYWNjb3VudFsnZnJlZSddLCBhY2NvdW50Wyd1c2VkJ10pO1xuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IGF3YWl0IHRoaXMucHVibGljR2V0RGVwdGggKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnY29pbic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IG9yZGVyYm9va1snYmlkcyddLFxuICAgICAgICAgICAgJ2Fza3MnOiBvcmRlcmJvb2tbJ2Fza3MnXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIHJlc3VsdFsnYXNrcyddID0gdGhpcy5zb3J0QnkgKHJlc3VsdFsnYXNrcyddLCAwKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgcGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KSB7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2J1eSddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3NlbGwnXSksXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xhc3QnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWyd2b2wnXSksXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbHVtZSddKSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlcnMgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgdGlja2VycyA9IGF3YWl0IHRoaXMucHVibGljR2V0QWxsdGlja2VyICgpO1xuICAgICAgICBsZXQgaWRzID0gT2JqZWN0LmtleXMgKHRpY2tlcnMpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge307XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgaWQgPSBpZHNbaV07XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gdGhpcy5tYXJrZXRzX2J5X2lkW2lkXTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBtYXJrZXRbJ3N5bWJvbCddO1xuICAgICAgICAgICAgbGV0IHRpY2tlciA9IHRpY2tlcnNbaWRdO1xuICAgICAgICAgICAgcmVzdWx0W3N5bWJvbF0gPSB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIG1hcmtldCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgdGlja2VyID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRUaWNrZXIgKHtcbiAgICAgICAgICAgICdjb2luJzogcFsnaWQnXSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIHApO1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wdWJsaWNHZXRPcmRlcnMgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnY29pbic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0VHJhZGVBZGQgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnYW1vdW50JzogYW1vdW50LFxuICAgICAgICAgICAgJ3ByaWNlJzogcHJpY2UsXG4gICAgICAgICAgICAndHlwZSc6IHNpZGUsXG4gICAgICAgICAgICAnY29pbic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXNwb25zZSxcbiAgICAgICAgICAgICdpZCc6IHJlc3BvbnNlWydpZCddLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVEZWxldGVXYWxsZXRzV2FsbGV0SWRPcmRlcnNJZCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArICcvJyArIHRoaXMudmVyc2lvbiArICcvJyArIHBhdGg7XG4gICAgICAgIGlmIChhcGkgPT0gJ3B1YmxpYycpIHtcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyAocGFyYW1zKS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChwYXJhbXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG5vbmNlID0gdGhpcy5ub25jZSAoKS50b1N0cmluZyAoKTtcbiAgICAgICAgICAgIGxldCBxdWVyeSA9IHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAgICAgJ2tleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgICAgICdub25jZSc6IG5vbmNlLFxuICAgICAgICAgICAgfSwgcGFyYW1zKTtcbiAgICAgICAgICAgIGxldCByZXF1ZXN0ID0gdGhpcy51cmxlbmNvZGUgKHF1ZXJ5KTtcbiAgICAgICAgICAgIGxldCBzZWNyZXQgPSB0aGlzLmhhc2ggKHRoaXMuZW5jb2RlICh0aGlzLnNlY3JldCkpO1xuICAgICAgICAgICAgcXVlcnlbJ3NpZ25hdHVyZSddID0gdGhpcy5obWFjICh0aGlzLmVuY29kZSAocmVxdWVzdCksIHRoaXMuZW5jb2RlIChzZWNyZXQpKTtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtTGVuZ3RoJzogYm9keS5sZW5ndGgsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdyZXN1bHQnIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgaWYgKCFyZXNwb25zZVsncmVzdWx0J10pXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBrcmFrZW4gaXMgYWxzbyBvd25lciBvZiBleC4gQ29pbnNldHRlciAvIENhVmlydEV4IC8gQ2xldmVyY29pblxuXG52YXIga3Jha2VuID0ge1xuXG4gICAgJ2lkJzogJ2tyYWtlbicsXG4gICAgJ25hbWUnOiAnS3Jha2VuJyxcbiAgICAnY291bnRyaWVzJzogJ1VTJyxcbiAgICAndmVyc2lvbic6ICcwJyxcbiAgICAncmF0ZUxpbWl0JzogMTUwMCxcbiAgICAnaGFzRmV0Y2hUaWNrZXJzJzogdHJ1ZSxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yNzc2NjU5OS0yMjcwOTMwNC01ZWRlLTExZTctOWRlMS05ZjMzNzMyZTE1MDkuanBnJyxcbiAgICAgICAgJ2FwaSc6ICdodHRwczovL2FwaS5rcmFrZW4uY29tJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy5rcmFrZW4uY29tJyxcbiAgICAgICAgJ2RvYyc6IFtcbiAgICAgICAgICAgICdodHRwczovL3d3dy5rcmFrZW4uY29tL2VuLXVzL2hlbHAvYXBpJyxcbiAgICAgICAgICAgICdodHRwczovL2dpdGh1Yi5jb20vbm90aGluZ2lzZGVhZC9ucG0ta3Jha2VuLWFwaScsXG4gICAgICAgIF0sXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnQXNzZXRzJyxcbiAgICAgICAgICAgICAgICAnQXNzZXRQYWlycycsXG4gICAgICAgICAgICAgICAgJ0RlcHRoJyxcbiAgICAgICAgICAgICAgICAnT0hMQycsXG4gICAgICAgICAgICAgICAgJ1NwcmVhZCcsXG4gICAgICAgICAgICAgICAgJ1RpY2tlcicsXG4gICAgICAgICAgICAgICAgJ1RpbWUnLFxuICAgICAgICAgICAgICAgICdUcmFkZXMnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnQWRkT3JkZXInLFxuICAgICAgICAgICAgICAgICdCYWxhbmNlJyxcbiAgICAgICAgICAgICAgICAnQ2FuY2VsT3JkZXInLFxuICAgICAgICAgICAgICAgICdDbG9zZWRPcmRlcnMnLFxuICAgICAgICAgICAgICAgICdEZXBvc2l0QWRkcmVzc2VzJyxcbiAgICAgICAgICAgICAgICAnRGVwb3NpdE1ldGhvZHMnLFxuICAgICAgICAgICAgICAgICdEZXBvc2l0U3RhdHVzJyxcbiAgICAgICAgICAgICAgICAnTGVkZ2VycycsXG4gICAgICAgICAgICAgICAgJ09wZW5PcmRlcnMnLFxuICAgICAgICAgICAgICAgICdPcGVuUG9zaXRpb25zJyxcbiAgICAgICAgICAgICAgICAnUXVlcnlMZWRnZXJzJyxcbiAgICAgICAgICAgICAgICAnUXVlcnlPcmRlcnMnLFxuICAgICAgICAgICAgICAgICdRdWVyeVRyYWRlcycsXG4gICAgICAgICAgICAgICAgJ1RyYWRlQmFsYW5jZScsXG4gICAgICAgICAgICAgICAgJ1RyYWRlc0hpc3RvcnknLFxuICAgICAgICAgICAgICAgICdUcmFkZVZvbHVtZScsXG4gICAgICAgICAgICAgICAgJ1dpdGhkcmF3JyxcbiAgICAgICAgICAgICAgICAnV2l0aGRyYXdDYW5jZWwnLFxuICAgICAgICAgICAgICAgICdXaXRoZHJhd0luZm8nLFxuICAgICAgICAgICAgICAgICdXaXRoZHJhd1N0YXR1cycsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE1hcmtldHMgKCkge1xuICAgICAgICBsZXQgbWFya2V0cyA9IGF3YWl0IHRoaXMucHVibGljR2V0QXNzZXRQYWlycyAoKTtcbiAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyAobWFya2V0c1sncmVzdWx0J10pO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwga2V5cy5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgbGV0IGlkID0ga2V5c1twXTtcbiAgICAgICAgICAgIGxldCBtYXJrZXQgPSBtYXJrZXRzWydyZXN1bHQnXVtpZF07XG4gICAgICAgICAgICBsZXQgYmFzZSA9IG1hcmtldFsnYmFzZSddO1xuICAgICAgICAgICAgbGV0IHF1b3RlID0gbWFya2V0WydxdW90ZSddO1xuICAgICAgICAgICAgaWYgKChiYXNlWzBdID09ICdYJykgfHwgKGJhc2VbMF0gPT0gJ1onKSlcbiAgICAgICAgICAgICAgICBiYXNlID0gYmFzZS5zbGljZSAoMSk7XG4gICAgICAgICAgICBpZiAoKHF1b3RlWzBdID09ICdYJykgfHwgKHF1b3RlWzBdID09ICdaJykpXG4gICAgICAgICAgICAgICAgcXVvdGUgPSBxdW90ZS5zbGljZSAoMSk7XG4gICAgICAgICAgICBiYXNlID0gdGhpcy5jb21tb25DdXJyZW5jeUNvZGUgKGJhc2UpO1xuICAgICAgICAgICAgcXVvdGUgPSB0aGlzLmNvbW1vbkN1cnJlbmN5Q29kZSAocXVvdGUpO1xuICAgICAgICAgICAgbGV0IGRhcmtwb29sID0gaWQuaW5kZXhPZiAoJy5kJykgPj0gMDtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBkYXJrcG9vbCA/IG1hcmtldFsnYWx0bmFtZSddIDogKGJhc2UgKyAnLycgKyBxdW90ZSk7XG4gICAgICAgICAgICByZXN1bHQucHVzaCAoe1xuICAgICAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICAgICAgICAgICdzeW1ib2wnOiBzeW1ib2wsXG4gICAgICAgICAgICAgICAgJ2Jhc2UnOiBiYXNlLFxuICAgICAgICAgICAgICAgICdxdW90ZSc6IHF1b3RlLFxuICAgICAgICAgICAgICAgICdkYXJrcG9vbCc6IGRhcmtwb29sLFxuICAgICAgICAgICAgICAgICdpbmZvJzogbWFya2V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IGRhcmtwb29sID0gbWFya2V0LmluZGV4T2YgKCcuZCcpID49IDA7XG4gICAgICAgIGlmIChkYXJrcG9vbClcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyBkb2VzIG5vdCBwcm92aWRlIGFuIG9yZGVyIGJvb2sgZm9yIGRhcmtwb29sIHN5bWJvbCAnICsgbWFya2V0KTtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXREZXB0aCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdwYWlyJzogcFsnaWQnXSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSByZXNwb25zZVsncmVzdWx0J11bcFsnaWQnXV07XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdiaWRzJzogW10sXG4gICAgICAgICAgICAnYXNrcyc6IFtdLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHNpZGVzID0gWyAnYmlkcycsICdhc2tzJyBdO1xuICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IHNpZGVzLmxlbmd0aDsgcysrKSB7XG4gICAgICAgICAgICBsZXQgc2lkZSA9IHNpZGVzW3NdO1xuICAgICAgICAgICAgbGV0IG9yZGVycyA9IG9yZGVyYm9va1tzaWRlXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9yZGVyID0gb3JkZXJzW2ldO1xuICAgICAgICAgICAgICAgIGxldCBwcmljZSA9IHBhcnNlRmxvYXQgKG9yZGVyWzBdKTtcbiAgICAgICAgICAgICAgICBsZXQgYW1vdW50ID0gcGFyc2VGbG9hdCAob3JkZXJbMV0pO1xuICAgICAgICAgICAgICAgIGxldCB0aW1lc3RhbXAgPSBvcmRlclsyXSAqIDEwMDA7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3NpZGVdLnB1c2ggKFsgcHJpY2UsIGFtb3VudCwgdGltZXN0YW1wIF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIHBhcnNlVGlja2VyICh0aWNrZXIsIG1hcmtldCkge1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2gnXVsxXSksXG4gICAgICAgICAgICAnbG93JzogcGFyc2VGbG9hdCAodGlja2VyWydsJ11bMV0pLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYiddWzBdKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2EnXVswXSksXG4gICAgICAgICAgICAndndhcCc6IHBhcnNlRmxvYXQgKHRpY2tlclsncCddWzFdKSxcbiAgICAgICAgICAgICdvcGVuJzogcGFyc2VGbG9hdCAodGlja2VyWydvJ10pLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2MnXVswXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWyd2J11bMV0pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VycyAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBwYWlycyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IHRoaXMuc3ltYm9scy5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgbGV0IHN5bWJvbCA9IHRoaXMuc3ltYm9sc1tzXTtcbiAgICAgICAgICAgIGxldCBtYXJrZXQgPSB0aGlzLm1hcmtldHNbc3ltYm9sXTtcbiAgICAgICAgICAgIGlmICghbWFya2V0WydkYXJrcG9vbCddKVxuICAgICAgICAgICAgICAgIHBhaXJzLnB1c2ggKG1hcmtldFsnaWQnXSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGZpbHRlciA9IHBhaXJzLmpvaW4gKCcsJyk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0VGlja2VyICh7XG4gICAgICAgICAgICAncGFpcic6IGZpbHRlcixcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aWNrZXJzID0gcmVzcG9uc2VbJ3Jlc3VsdCddO1xuICAgICAgICBsZXQgaWRzID0gT2JqZWN0LmtleXMgKHRpY2tlcnMpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge307XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgaWQgPSBpZHNbaV07XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gdGhpcy5tYXJrZXRzX2J5X2lkW2lkXTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBtYXJrZXRbJ3N5bWJvbCddO1xuICAgICAgICAgICAgbGV0IHRpY2tlciA9IHRpY2tlcnNbaWRdO1xuICAgICAgICAgICAgcmVzdWx0W3N5bWJvbF0gPSB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIG1hcmtldCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgZGFya3Bvb2wgPSBtYXJrZXQuaW5kZXhPZiAoJy5kJykgPj0gMDtcbiAgICAgICAgaWYgKGRhcmtwb29sKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnIGRvZXMgbm90IHByb3ZpZGUgYSB0aWNrZXIgZm9yIGRhcmtwb29sIHN5bWJvbCAnICsgbWFya2V0KTtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRUaWNrZXIgKHtcbiAgICAgICAgICAgICdwYWlyJzogcFsnaWQnXSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aWNrZXIgPSByZXNwb25zZVsncmVzdWx0J11bcFsnaWQnXV07XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIHApO1xuICAgIH0sXG5cbiAgICBwYXJzZVRyYWRlICh0cmFkZSwgbWFya2V0KSB7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSBwYXJzZUludCAodHJhZGVbMl0gKiAxMDAwKTtcbiAgICAgICAgbGV0IHNpZGUgPSAodHJhZGVbM10gPT0gJ3MnKSA/ICdzZWxsJyA6ICdidXknO1xuICAgICAgICBsZXQgdHlwZSA9ICh0cmFkZVs0XSA9PSAnbCcpID8gJ2xpbWl0JyA6ICdtYXJrZXQnO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiB0cmFkZSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnc3ltYm9sJzogbWFya2V0WydzeW1ib2wnXSxcbiAgICAgICAgICAgICd0eXBlJzogdHlwZSxcbiAgICAgICAgICAgICdzaWRlJzogc2lkZSxcbiAgICAgICAgICAgICdwcmljZSc6IHBhcnNlRmxvYXQgKHRyYWRlWzBdKSxcbiAgICAgICAgICAgICdhbW91bnQnOiBwYXJzZUZsb2F0ICh0cmFkZVsxXSksXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIHBhcnNlT0hMQ1YgKG9obGN2LCBtYXJrZXQgPSB1bmRlZmluZWQsIHRpbWVmcmFtZSA9IDYwLCBzaW5jZSA9IHVuZGVmaW5lZCwgbGltaXQgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG9obGN2WzBdLFxuICAgICAgICAgICAgb2hsY3ZbMV0sXG4gICAgICAgICAgICBvaGxjdlsyXSxcbiAgICAgICAgICAgIG9obGN2WzNdLFxuICAgICAgICAgICAgb2hsY3ZbNF0sXG4gICAgICAgICAgICBvaGxjdls2XSxcbiAgICAgICAgXTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPSExDViAobWFya2V0LCB0aW1lZnJhbWUgPSA2MCwgc2luY2UgPSB1bmRlZmluZWQsIGxpbWl0ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCBtID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0T0hMQyAoe1xuICAgICAgICAgICAgJ3BhaXInOiBtWydpZCddLFxuICAgICAgICAgICAgJ2ludGVydmFsJzogcGFyc2VJbnQgKHRpbWVmcmFtZSAvIDYwKSxcbiAgICAgICAgICAgICdzaW5jZSc6IHNpbmNlLFxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IG9obGN2cyA9IHJlc3BvbnNlW21bJ2lkJ11dO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZU9ITENWcyAobSwgb2hsY3ZzLCB0aW1lZnJhbWUsIHNpbmNlLCBsaW1pdCk7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBtID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCBpZCA9IG1bJ2lkJ107XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0VHJhZGVzICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ3BhaXInOiBpZCxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCB0cmFkZXMgPSByZXNwb25zZVsncmVzdWx0J11baWRdO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVRyYWRlcyAodHJhZGVzLCBtKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdEJhbGFuY2UgKCk7XG4gICAgICAgIGxldCBiYWxhbmNlcyA9IHJlc3BvbnNlWydyZXN1bHQnXTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiBiYWxhbmNlcyB9O1xuICAgICAgICBsZXQgY3VycmVuY2llcyA9IE9iamVjdC5rZXlzIChiYWxhbmNlcyk7XG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgY3VycmVuY2llcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gY3VycmVuY2llc1tjXTtcbiAgICAgICAgICAgIGxldCBjb2RlID0gY3VycmVuY3k7XG4gICAgICAgICAgICAvLyBYLUlTTzQyMTctQTMgc3RhbmRhcmQgY3VycmVuY3kgY29kZXNcbiAgICAgICAgICAgIGlmIChjb2RlWzBdID09ICdYJykge1xuICAgICAgICAgICAgICAgIGNvZGUgPSBjb2RlLnNsaWNlICgxKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29kZVswXSA9PSAnWicpIHtcbiAgICAgICAgICAgICAgICBjb2RlID0gY29kZS5zbGljZSAoMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb2RlID0gdGhpcy5jb21tb25DdXJyZW5jeUNvZGUgKGNvZGUpO1xuICAgICAgICAgICAgbGV0IGJhbGFuY2UgPSBwYXJzZUZsb2F0IChiYWxhbmNlc1tjdXJyZW5jeV0pO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiBiYWxhbmNlLFxuICAgICAgICAgICAgICAgICd1c2VkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IGJhbGFuY2UsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVzdWx0W2NvZGVdID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAncGFpcic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgICAgICAndHlwZSc6IHNpZGUsXG4gICAgICAgICAgICAnb3JkZXJ0eXBlJzogdHlwZSxcbiAgICAgICAgICAgICd2b2x1bWUnOiBhbW91bnQsXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlID09ICdsaW1pdCcpXG4gICAgICAgICAgICBvcmRlclsncHJpY2UnXSA9IHByaWNlO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0QWRkT3JkZXIgKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIGxldCBsZW5ndGggPSByZXNwb25zZVsncmVzdWx0J11bJ3R4aWQnXS5sZW5ndGg7XG4gICAgICAgIGxldCBpZCA9IChsZW5ndGggPiAxKSA/IHJlc3BvbnNlWydyZXN1bHQnXVsndHhpZCddIDogcmVzcG9uc2VbJ3Jlc3VsdCddWyd0eGlkJ11bMF07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdENhbmNlbE9yZGVyICh7ICd0eGlkJzogaWQgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9ICcvJyArIHRoaXMudmVyc2lvbiArICcvJyArIGFwaSArICcvJyArIHBhdGg7XG4gICAgICAgIGlmIChhcGkgPT0gJ3B1YmxpYycpIHtcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyAocGFyYW1zKS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChwYXJhbXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG5vbmNlID0gdGhpcy5ub25jZSAoKS50b1N0cmluZyAoKTtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLnVybGVuY29kZSAodGhpcy5leHRlbmQgKHsgJ25vbmNlJzogbm9uY2UgfSwgcGFyYW1zKSk7XG4gICAgICAgICAgICBsZXQgYXV0aCA9IHRoaXMuZW5jb2RlIChub25jZSArIGJvZHkpO1xuICAgICAgICAgICAgbGV0IGhhc2ggPSB0aGlzLmhhc2ggKGF1dGgsICdzaGEyNTYnLCAnYmluYXJ5Jyk7XG4gICAgICAgICAgICBsZXQgYmluYXJ5ID0gdGhpcy5zdHJpbmdUb0JpbmFyeSAodGhpcy5lbmNvZGUgKHVybCkpO1xuICAgICAgICAgICAgbGV0IGJpbmhhc2ggPSB0aGlzLmJpbmFyeUNvbmNhdCAoYmluYXJ5LCBoYXNoKTtcbiAgICAgICAgICAgIGxldCBzZWNyZXQgPSB0aGlzLmJhc2U2NFRvQmluYXJ5ICh0aGlzLnNlY3JldCk7XG4gICAgICAgICAgICBsZXQgc2lnbmF0dXJlID0gdGhpcy5obWFjIChiaW5oYXNoLCBzZWNyZXQsICdzaGE1MTInLCAnYmFzZTY0Jyk7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdBUEktS2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ0FQSS1TaWduJzogdGhpcy5kZWNvZGUgKHNpZ25hdHVyZSksXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgdXJsO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgICAgIGlmICgnZXJyb3InIGluIHJlc3BvbnNlKSB7XG4gICAgICAgICAgICBsZXQgbnVtRXJyb3JzID0gcmVzcG9uc2VbJ2Vycm9yJ10ubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKG51bUVycm9ycylcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgJyArIHRoaXMuanNvbiAocmVzcG9uc2UpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgbGFrZWJ0YyA9IHtcblxuICAgICdpZCc6ICdsYWtlYnRjJyxcbiAgICAnbmFtZSc6ICdMYWtlQlRDJyxcbiAgICAnY291bnRyaWVzJzogJ1VTJyxcbiAgICAndmVyc2lvbic6ICdhcGlfdjInLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI4MDc0MTIwLTcyYjdjMzhhLTY2NjAtMTFlNy05MmQ5LWQ5MDI3NTAyMjgxZC5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vYXBpLmxha2VidGMuY29tJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy5sYWtlYnRjLmNvbScsXG4gICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAnaHR0cHM6Ly93d3cubGFrZWJ0Yy5jb20vcy9hcGknLFxuICAgICAgICAgICAgJ2h0dHBzOi8vd3d3Lmxha2VidGMuY29tL3MvYXBpX3YyJyxcbiAgICAgICAgXSxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdiY29yZGVyYm9vaycsXG4gICAgICAgICAgICAgICAgJ2JjdHJhZGVzJyxcbiAgICAgICAgICAgICAgICAndGlja2VyJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2J1eU9yZGVyJyxcbiAgICAgICAgICAgICAgICAnY2FuY2VsT3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnZ2V0QWNjb3VudEluZm8nLFxuICAgICAgICAgICAgICAgICdnZXRFeHRlcm5hbEFjY291bnRzJyxcbiAgICAgICAgICAgICAgICAnZ2V0T3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnZ2V0VHJhZGVzJyxcbiAgICAgICAgICAgICAgICAnb3Blbk9yZGVycycsXG4gICAgICAgICAgICAgICAgJ3NlbGxPcmRlcicsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE1hcmtldHMgKCkge1xuICAgICAgICBsZXQgbWFya2V0cyA9IGF3YWl0IHRoaXMucHVibGljR2V0VGlja2VyICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMgKG1hcmtldHMpO1xuICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGtleXMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgIGxldCBpZCA9IGtleXNba107XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gbWFya2V0c1tpZF07XG4gICAgICAgICAgICBsZXQgYmFzZSA9IGlkLnNsaWNlICgwLCAzKTtcbiAgICAgICAgICAgIGxldCBxdW90ZSA9IGlkLnNsaWNlICgzLCA2KTtcbiAgICAgICAgICAgIGJhc2UgPSBiYXNlLnRvVXBwZXJDYXNlICgpO1xuICAgICAgICAgICAgcXVvdGUgPSBxdW90ZS50b1VwcGVyQ2FzZSAoKTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBiYXNlICsgJy8nICsgcXVvdGU7XG4gICAgICAgICAgICByZXN1bHQucHVzaCAoe1xuICAgICAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICAgICAgICAgICdzeW1ib2wnOiBzeW1ib2wsXG4gICAgICAgICAgICAgICAgJ2Jhc2UnOiBiYXNlLFxuICAgICAgICAgICAgICAgICdxdW90ZSc6IHF1b3RlLFxuICAgICAgICAgICAgICAgICdpbmZvJzogbWFya2V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdEdldEFjY291bnRJbmZvICgpO1xuICAgICAgICBsZXQgYmFsYW5jZXMgPSByZXNwb25zZVsnYmFsYW5jZSddO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IHJlc3BvbnNlIH07XG4gICAgICAgIGxldCBjdXJyZW5jaWVzID0gT2JqZWN0LmtleXMgKGJhbGFuY2VzKTtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBjdXJyZW5jaWVzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBjdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IGJhbGFuY2UgPSBwYXJzZUZsb2F0IChiYWxhbmNlc1tjdXJyZW5jeV0pO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiBiYWxhbmNlLFxuICAgICAgICAgICAgICAgICd1c2VkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IGJhbGFuY2UsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IGF3YWl0IHRoaXMucHVibGljR2V0QmNvcmRlcmJvb2sgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnc3ltYm9sJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdiaWRzJzogW10sXG4gICAgICAgICAgICAnYXNrcyc6IFtdLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHNpZGVzID0gWyAnYmlkcycsICdhc2tzJyBdO1xuICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IHNpZGVzLmxlbmd0aDsgcysrKSB7XG4gICAgICAgICAgICBsZXQgc2lkZSA9IHNpZGVzW3NdO1xuICAgICAgICAgICAgbGV0IG9yZGVycyA9IG9yZGVyYm9va1tzaWRlXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9yZGVyID0gb3JkZXJzW2ldO1xuICAgICAgICAgICAgICAgIGxldCBwcmljZSA9IHBhcnNlRmxvYXQgKG9yZGVyWzBdKTtcbiAgICAgICAgICAgICAgICBsZXQgYW1vdW50ID0gcGFyc2VGbG9hdCAob3JkZXJbMV0pO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtzaWRlXS5wdXNoIChbIHByaWNlLCBhbW91bnQgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgdGlja2VycyA9IGF3YWl0IHRoaXMucHVibGljR2V0VGlja2VyICh7XG4gICAgICAgICAgICAnc3ltYm9sJzogcFsnaWQnXSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aWNrZXIgPSB0aWNrZXJzW3BbJ2lkJ11dO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2hpZ2gnXSksXG4gICAgICAgICAgICAnbG93JzogcGFyc2VGbG9hdCAodGlja2VyWydsb3cnXSksXG4gICAgICAgICAgICAnYmlkJzogcGFyc2VGbG9hdCAodGlja2VyWydiaWQnXSksXG4gICAgICAgICAgICAnYXNrJzogcGFyc2VGbG9hdCAodGlja2VyWydhc2snXSksXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xhc3QnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWyd2b2x1bWUnXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0QmN0cmFkZXMgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnc3ltYm9sJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGlmICh0eXBlID09ICdtYXJrZXQnKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnIGFsbG93cyBsaW1pdCBvcmRlcnMgb25seScpO1xuICAgICAgICBsZXQgbWV0aG9kID0gJ3ByaXZhdGVQb3N0JyArIHRoaXMuY2FwaXRhbGl6ZSAoc2lkZSkgKyAnT3JkZXInO1xuICAgICAgICBsZXQgbWFya2V0SWQgPSB0aGlzLm1hcmtldElkIChtYXJrZXQpO1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAncGFyYW1zJzogWyBwcmljZSwgYW1vdW50LCBtYXJrZXRJZCBdLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzW21ldGhvZF0gKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ2lkJzogcmVzcG9uc2VbJ2lkJ10udG9TdHJpbmcgKCksXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdENhbmNlbE9yZGVyICh7ICdwYXJhbXMnOiBpZCB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArICcvJyArIHRoaXMudmVyc2lvbjtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgdXJsICs9ICcvJyArIHBhdGg7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHBhcmFtcykubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocGFyYW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCk7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHBhcmFtcykubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHBhcmFtcyA9IHBhcmFtcy5qb2luICgnLCcpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHBhcmFtcyA9ICcnO1xuICAgICAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy51cmxlbmNvZGUgKHtcbiAgICAgICAgICAgICAgICAndG9uY2UnOiBub25jZSxcbiAgICAgICAgICAgICAgICAnYWNjZXNza2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ3JlcXVlc3RtZXRob2QnOiBtZXRob2QudG9Mb3dlckNhc2UgKCksXG4gICAgICAgICAgICAgICAgJ2lkJzogbm9uY2UsXG4gICAgICAgICAgICAgICAgJ21ldGhvZCc6IHBhdGgsXG4gICAgICAgICAgICAgICAgJ3BhcmFtcyc6IHBhcmFtcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYm9keSA9IHRoaXMuanNvbiAoe1xuICAgICAgICAgICAgICAgICdtZXRob2QnOiBwYXRoLFxuICAgICAgICAgICAgICAgICdwYXJhbXMnOiBwYXJhbXMsXG4gICAgICAgICAgICAgICAgJ2lkJzogbm9uY2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxldCBzaWduYXR1cmUgPSB0aGlzLmhtYWMgKHRoaXMuZW5jb2RlIChxdWVyeSksIHRoaXMuc2VjcmV0LCAnc2hhMScsICdiYXNlNjQnKTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0pzb24tUnBjLVRvbmNlJzogbm9uY2UsXG4gICAgICAgICAgICAgICAgJ0F1dGhvcml6YXRpb24nOiBcIkJhc2ljIFwiICsgdGhpcy5hcGlLZXkgKyAnOicgKyBzaWduYXR1cmUsXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtTGVuZ3RoJzogYm9keS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgICAgICBpZiAoJ2Vycm9yJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgbGl2ZWNvaW4gPSB7XG5cbiAgICAnaWQnOiAnbGl2ZWNvaW4nLFxuICAgICduYW1lJzogJ0xpdmVDb2luJyxcbiAgICAnY291bnRyaWVzJzogWyAnVVMnLCAnVUsnLCAnUlUnIF0sXG4gICAgJ3JhdGVMaW1pdCc6IDEwMDAsXG4gICAgJ2hhc0ZldGNoVGlja2Vycyc6IHRydWUsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc5ODA3NjgtZjIyZmM0MjQtNjM4YS0xMWU3LTg5YzktNjAxMGE1NGZmOWJlLmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly9hcGkubGl2ZWNvaW4ubmV0JyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy5saXZlY29pbi5uZXQnLFxuICAgICAgICAnZG9jJzogJ2h0dHBzOi8vd3d3LmxpdmVjb2luLm5ldC9hcGk/bGFuZz1lbicsXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnZXhjaGFuZ2UvYWxsL29yZGVyX2Jvb2snLFxuICAgICAgICAgICAgICAgICdleGNoYW5nZS9sYXN0X3RyYWRlcycsXG4gICAgICAgICAgICAgICAgJ2V4Y2hhbmdlL21heGJpZF9taW5hc2snLFxuICAgICAgICAgICAgICAgICdleGNoYW5nZS9vcmRlcl9ib29rJyxcbiAgICAgICAgICAgICAgICAnZXhjaGFuZ2UvcmVzdHJpY3Rpb25zJyxcbiAgICAgICAgICAgICAgICAnZXhjaGFuZ2UvdGlja2VyJywgLy8gb21pdCBwYXJhbXMgdG8gZ2V0IGFsbCB0aWNrZXJzIGF0IG9uY2VcbiAgICAgICAgICAgICAgICAnaW5mby9jb2luSW5mbycsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAncHJpdmF0ZSc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ2V4Y2hhbmdlL2NsaWVudF9vcmRlcnMnLFxuICAgICAgICAgICAgICAgICdleGNoYW5nZS9vcmRlcicsXG4gICAgICAgICAgICAgICAgJ2V4Y2hhbmdlL3RyYWRlcycsXG4gICAgICAgICAgICAgICAgJ2V4Y2hhbmdlL2NvbW1pc3Npb24nLFxuICAgICAgICAgICAgICAgICdleGNoYW5nZS9jb21taXNzaW9uQ29tbW9uSW5mbycsXG4gICAgICAgICAgICAgICAgJ3BheW1lbnQvYmFsYW5jZXMnLFxuICAgICAgICAgICAgICAgICdwYXltZW50L2JhbGFuY2UnLFxuICAgICAgICAgICAgICAgICdwYXltZW50L2dldC9hZGRyZXNzJyxcbiAgICAgICAgICAgICAgICAncGF5bWVudC9oaXN0b3J5L3NpemUnLFxuICAgICAgICAgICAgICAgICdwYXltZW50L2hpc3RvcnkvdHJhbnNhY3Rpb25zJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnZXhjaGFuZ2UvYnV5bGltaXQnLFxuICAgICAgICAgICAgICAgICdleGNoYW5nZS9idXltYXJrZXQnLFxuICAgICAgICAgICAgICAgICdleGNoYW5nZS9jYW5jZWxsaW1pdCcsXG4gICAgICAgICAgICAgICAgJ2V4Y2hhbmdlL3NlbGxsaW1pdCcsXG4gICAgICAgICAgICAgICAgJ2V4Y2hhbmdlL3NlbGxtYXJrZXQnLFxuICAgICAgICAgICAgICAgICdwYXltZW50L291dC9jYXBpdGFsaXN0JyxcbiAgICAgICAgICAgICAgICAncGF5bWVudC9vdXQvY2FyZCcsXG4gICAgICAgICAgICAgICAgJ3BheW1lbnQvb3V0L2NvaW4nLFxuICAgICAgICAgICAgICAgICdwYXltZW50L291dC9va3BheScsXG4gICAgICAgICAgICAgICAgJ3BheW1lbnQvb3V0L3BheWVlcicsXG4gICAgICAgICAgICAgICAgJ3BheW1lbnQvb3V0L3BlcmZlY3Rtb25leScsXG4gICAgICAgICAgICAgICAgJ3BheW1lbnQvdm91Y2hlci9hbW91bnQnLFxuICAgICAgICAgICAgICAgICdwYXltZW50L3ZvdWNoZXIvbWFrZScsXG4gICAgICAgICAgICAgICAgJ3BheW1lbnQvdm91Y2hlci9yZWRlZW0nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hNYXJrZXRzICgpIHtcbiAgICAgICAgbGV0IG1hcmtldHMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldEV4Y2hhbmdlVGlja2VyICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgbWFya2V0cy5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IG1hcmtldHNbcF07XG4gICAgICAgICAgICBsZXQgaWQgPSBtYXJrZXRbJ3N5bWJvbCddO1xuICAgICAgICAgICAgbGV0IHN5bWJvbCA9IGlkO1xuICAgICAgICAgICAgbGV0IFsgYmFzZSwgcXVvdGUgXSA9IHN5bWJvbC5zcGxpdCAoJy8nKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoICh7XG4gICAgICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgICAgICAgICAgJ3N5bWJvbCc6IHN5bWJvbCxcbiAgICAgICAgICAgICAgICAnYmFzZSc6IGJhc2UsXG4gICAgICAgICAgICAgICAgJ3F1b3RlJzogcXVvdGUsXG4gICAgICAgICAgICAgICAgJ2luZm8nOiBtYXJrZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgYmFsYW5jZXMgPSBhd2FpdCB0aGlzLnByaXZhdGVHZXRQYXltZW50QmFsYW5jZXMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogYmFsYW5jZXMgfTtcbiAgICAgICAgZm9yIChsZXQgYiA9IDA7IGIgPCB0aGlzLmN1cnJlbmNpZXMubGVuZ3RoOyBiKyspIHtcbiAgICAgICAgICAgIGxldCBiYWxhbmNlID0gYmFsYW5jZXNbYl07XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBiYWxhbmNlWydjdXJyZW5jeSddO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAoY3VycmVuY3kgaW4gcmVzdWx0KVxuICAgICAgICAgICAgICAgIGFjY291bnQgPSByZXN1bHRbY3VycmVuY3ldO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgICAgICdmcmVlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAndXNlZCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgJ3RvdGFsJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoYmFsYW5jZVsndHlwZSddID09ICd0b3RhbCcpXG4gICAgICAgICAgICAgICAgYWNjb3VudFsndG90YWwnXSA9IHBhcnNlRmxvYXQgKGJhbGFuY2VbJ3ZhbHVlJ10pO1xuICAgICAgICAgICAgaWYgKGJhbGFuY2VbJ3R5cGUnXSA9PSAnYXZhaWxhYmxlJylcbiAgICAgICAgICAgICAgICBhY2NvdW50WydmcmVlJ10gPSBwYXJzZUZsb2F0IChiYWxhbmNlWyd2YWx1ZSddKTtcbiAgICAgICAgICAgIGlmIChiYWxhbmNlWyd0eXBlJ10gPT0gJ3RyYWRlJylcbiAgICAgICAgICAgICAgICBhY2NvdW50Wyd1c2VkJ10gPSBwYXJzZUZsb2F0IChiYWxhbmNlWyd2YWx1ZSddKTtcbiAgICAgICAgICAgIHJlc3VsdFtjdXJyZW5jeV0gPSBhY2NvdW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSBhd2FpdCB0aGlzLnB1YmxpY0dldEV4Y2hhbmdlT3JkZXJCb29rICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2N1cnJlbmN5UGFpcic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgICAgICAnZ3JvdXBCeVByaWNlJzogJ2ZhbHNlJyxcbiAgICAgICAgICAgICdkZXB0aCc6IDEwMCxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSBvcmRlcmJvb2tbJ3RpbWVzdGFtcCddO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAob3JkZXJbMF0pO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBwYXJzZUZsb2F0IChvcmRlclsxXSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3NpZGVdLnB1c2ggKFsgcHJpY2UsIGFtb3VudCBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBwYXJzZVRpY2tlciAodGlja2VyLCBtYXJrZXQpIHtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydoaWdoJ10pLFxuICAgICAgICAgICAgJ2xvdyc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbG93J10pLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYmVzdF9iaWQnXSksXG4gICAgICAgICAgICAnYXNrJzogcGFyc2VGbG9hdCAodGlja2VyWydiZXN0X2FzayddKSxcbiAgICAgICAgICAgICd2d2FwJzogcGFyc2VGbG9hdCAodGlja2VyWyd2d2FwJ10pLFxuICAgICAgICAgICAgJ29wZW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdCddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbHVtZSddKSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlcnMgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldEV4Y2hhbmdlVGlja2VyICgpO1xuICAgICAgICBsZXQgdGlja2VycyA9IHRoaXMuaW5kZXhCeSAocmVzcG9uc2UsICdzeW1ib2wnKTtcbiAgICAgICAgbGV0IGlkcyA9IE9iamVjdC5rZXlzICh0aWNrZXJzKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHt9O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IGlkID0gaWRzW2ldO1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IHRoaXMubWFya2V0c19ieV9pZFtpZF07XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gbWFya2V0WydzeW1ib2wnXTtcbiAgICAgICAgICAgIGxldCB0aWNrZXIgPSB0aWNrZXJzW2lkXTtcbiAgICAgICAgICAgIHJlc3VsdFtzeW1ib2xdID0gdGhpcy5wYXJzZVRpY2tlciAodGlja2VyLCBtYXJrZXQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHRpY2tlciA9IGF3YWl0IHRoaXMucHVibGljR2V0RXhjaGFuZ2VUaWNrZXIgKHtcbiAgICAgICAgICAgICdjdXJyZW5jeVBhaXInOiBwWydpZCddLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VUaWNrZXIgKHRpY2tlciwgcCk7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldEV4Y2hhbmdlTGFzdFRyYWRlcyAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdjdXJyZW5jeVBhaXInOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG1ldGhvZCA9ICdwcml2YXRlUG9zdEV4Y2hhbmdlJyArIHRoaXMuY2FwaXRhbGl6ZSAoc2lkZSkgKyB0eXBlO1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAnY3VycmVuY3lQYWlyJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICdxdWFudGl0eSc6IGFtb3VudCxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHR5cGUgPT0gJ2xpbWl0JylcbiAgICAgICAgICAgIG9yZGVyWydwcmljZSddID0gcHJpY2U7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXNbbWV0aG9kXSAodGhpcy5leHRlbmQgKG9yZGVyLCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnaWQnXS50b1N0cmluZyAoKSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdEV4Y2hhbmdlQ2FuY2VsbGltaXQgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnb3JkZXJJZCc6IGlkLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArICcvJyArIHBhdGg7XG4gICAgICAgIGlmIChhcGkgPT0gJ3B1YmxpYycpIHtcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyAocGFyYW1zKS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChwYXJhbXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy51cmxlbmNvZGUgKHRoaXMua2V5c29ydCAocGFyYW1zKSk7XG4gICAgICAgICAgICBpZiAobWV0aG9kID09ICdHRVQnKVxuICAgICAgICAgICAgICAgIGlmIChxdWVyeSlcbiAgICAgICAgICAgICAgICAgICAgdXJsICs9ICc/JyArIHF1ZXJ5O1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGlmIChxdWVyeSlcbiAgICAgICAgICAgICAgICAgICAgYm9keSA9IHF1ZXJ5O1xuICAgICAgICAgICAgbGV0IHNpZ25hdHVyZSA9IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKHF1ZXJ5KSwgdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSwgJ3NoYTI1NicpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQXBpLUtleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgICAgICdTaWduJzogc2lnbmF0dXJlLnRvVXBwZXJDYXNlICgpLFxuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgICAgICBpZiAoJ3N1Y2Nlc3MnIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgaWYgKCFyZXNwb25zZVsnc3VjY2VzcyddKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgbGlxdWkgPSBleHRlbmQgKGJ0Y2UsIHtcbiAgICAnaWQnOiAnbGlxdWknLFxuICAgICduYW1lJzogJ0xpcXVpJyxcbiAgICAnY291bnRyaWVzJzogJ1VBJyxcbiAgICAncmF0ZUxpbWl0JzogMTAwMCxcbiAgICAndmVyc2lvbic6ICczJyxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yNzk4MjAyMi03NWFlYTgyOC02M2EwLTExZTctOTUxMS1jYTU4NGE4ZWRkNzQuanBnJyxcbiAgICAgICAgJ2FwaSc6IHtcbiAgICAgICAgICAgICdwdWJsaWMnOiAnaHR0cHM6Ly9hcGkubGlxdWkuaW8vYXBpJyxcbiAgICAgICAgICAgICdwcml2YXRlJzogJ2h0dHBzOi8vYXBpLmxpcXVpLmlvL3RhcGknLFxuICAgICAgICB9LFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vbGlxdWkuaW8nLFxuICAgICAgICAnZG9jJzogJ2h0dHBzOi8vbGlxdWkuaW8vYXBpJyxcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXVthcGldO1xuICAgICAgICBsZXQgcXVlcnkgPSB0aGlzLm9taXQgKHBhcmFtcywgdGhpcy5leHRyYWN0UGFyYW1zIChwYXRoKSk7XG4gICAgICAgIGlmIChhcGkgPT0gJ3B1YmxpYycpIHtcbiAgICAgICAgICAgIHVybCArPSAgJy8nICsgdGhpcy52ZXJzaW9uICsgJy8nICsgdGhpcy5pbXBsb2RlUGFyYW1zIChwYXRoLCBwYXJhbXMpO1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChxdWVyeSkubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG5vbmNlID0gdGhpcy5ub25jZSAoKTtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLnVybGVuY29kZSAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICAgICAnbm9uY2UnOiBub25jZSxcbiAgICAgICAgICAgICAgICAnbWV0aG9kJzogcGF0aCxcbiAgICAgICAgICAgIH0sIHF1ZXJ5KSk7XG4gICAgICAgICAgICBsZXQgc2lnbmF0dXJlID0gdGhpcy5obWFjICh0aGlzLmVuY29kZSAoYm9keSksIHRoaXMuZW5jb2RlICh0aGlzLnNlY3JldCksICdzaGE1MTInKTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgICAgICAgICdDb250ZW50LUxlbmd0aCc6IGJvZHkubGVuZ3RoLnRvU3RyaW5nICgpLFxuICAgICAgICAgICAgICAgICdLZXknOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgICAgICAnU2lnbic6IHNpZ25hdHVyZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgICAgICBpZiAoJ3N1Y2Nlc3MnIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgaWYgKCFyZXNwb25zZVsnc3VjY2VzcyddKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSxcbn0pXG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGx1bm8gPSB7XG5cbiAgICAnaWQnOiAnbHVubycsXG4gICAgJ25hbWUnOiAnbHVubycsXG4gICAgJ2NvdW50cmllcyc6IFsgJ0dCJywgJ1NHJywgJ1pBJyBdLFxuICAgICdyYXRlTGltaXQnOiAzMDAwLFxuICAgICd2ZXJzaW9uJzogJzEnLFxuICAgICdoYXNGZXRjaFRpY2tlcnMnOiB0cnVlLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2NjA3LThjMWE2OWQ4LTVlZGUtMTFlNy05MzBjLTU0MGI1ZWI5YmUyNC5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vYXBpLm15Yml0eC5jb20vYXBpJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy5sdW5vLmNvbScsXG4gICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAnaHR0cHM6Ly93d3cubHVuby5jb20vZW4vYXBpJyxcbiAgICAgICAgICAgICdodHRwczovL25wbWpzLm9yZy9wYWNrYWdlL2JpdHgnLFxuICAgICAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS9iYXVzbWVpZXIvbm9kZS1iaXR4JyxcbiAgICAgICAgXSxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdvcmRlcmJvb2snLFxuICAgICAgICAgICAgICAgICd0aWNrZXInLFxuICAgICAgICAgICAgICAgICd0aWNrZXJzJyxcbiAgICAgICAgICAgICAgICAndHJhZGVzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnYWNjb3VudHMve2lkfS9wZW5kaW5nJyxcbiAgICAgICAgICAgICAgICAnYWNjb3VudHMve2lkfS90cmFuc2FjdGlvbnMnLFxuICAgICAgICAgICAgICAgICdiYWxhbmNlJyxcbiAgICAgICAgICAgICAgICAnZmVlX2luZm8nLFxuICAgICAgICAgICAgICAgICdmdW5kaW5nX2FkZHJlc3MnLFxuICAgICAgICAgICAgICAgICdsaXN0b3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnbGlzdHRyYWRlcycsXG4gICAgICAgICAgICAgICAgJ29yZGVycy97aWR9JyxcbiAgICAgICAgICAgICAgICAncXVvdGVzL3tpZH0nLFxuICAgICAgICAgICAgICAgICd3aXRoZHJhd2FscycsXG4gICAgICAgICAgICAgICAgJ3dpdGhkcmF3YWxzL3tpZH0nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICdwb3N0JzogW1xuICAgICAgICAgICAgICAgICdhY2NvdW50cycsXG4gICAgICAgICAgICAgICAgJ3Bvc3RvcmRlcicsXG4gICAgICAgICAgICAgICAgJ21hcmtldG9yZGVyJyxcbiAgICAgICAgICAgICAgICAnc3RvcG9yZGVyJyxcbiAgICAgICAgICAgICAgICAnZnVuZGluZ19hZGRyZXNzJyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXdhbHMnLFxuICAgICAgICAgICAgICAgICdzZW5kJyxcbiAgICAgICAgICAgICAgICAncXVvdGVzJyxcbiAgICAgICAgICAgICAgICAnb2F1dGgyL2dyYW50JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAncHV0JzogW1xuICAgICAgICAgICAgICAgICdxdW90ZXMve2lkfScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ2RlbGV0ZSc6IFtcbiAgICAgICAgICAgICAgICAncXVvdGVzL3tpZH0nLFxuICAgICAgICAgICAgICAgICd3aXRoZHJhd2Fscy97aWR9JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoTWFya2V0cyAoKSB7XG4gICAgICAgIGxldCBtYXJrZXRzID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRUaWNrZXJzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgbWFya2V0c1sndGlja2VycyddLmxlbmd0aDsgcCsrKSB7XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gbWFya2V0c1sndGlja2VycyddW3BdO1xuICAgICAgICAgICAgbGV0IGlkID0gbWFya2V0WydwYWlyJ107XG4gICAgICAgICAgICBsZXQgYmFzZSA9IGlkLnNsaWNlICgwLCAzKTtcbiAgICAgICAgICAgIGxldCBxdW90ZSA9IGlkLnNsaWNlICgzLCA2KTtcbiAgICAgICAgICAgIGJhc2UgPSB0aGlzLmNvbW1vbkN1cnJlbmN5Q29kZSAoYmFzZSk7XG4gICAgICAgICAgICBxdW90ZSA9IHRoaXMuY29tbW9uQ3VycmVuY3lDb2RlIChxdW90ZSk7XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gYmFzZSArICcvJyArIHF1b3RlO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2ggKHtcbiAgICAgICAgICAgICAgICAnaWQnOiBpZCxcbiAgICAgICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgICAgICdiYXNlJzogYmFzZSxcbiAgICAgICAgICAgICAgICAncXVvdGUnOiBxdW90ZSxcbiAgICAgICAgICAgICAgICAnaW5mbyc6IG1hcmtldCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZUdldEJhbGFuY2UgKCk7XG4gICAgICAgIGxldCBiYWxhbmNlcyA9IHJlc3BvbnNlWydiYWxhbmNlJ107XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogcmVzcG9uc2UgfTtcbiAgICAgICAgZm9yIChsZXQgYiA9IDA7IGIgPCBiYWxhbmNlcy5sZW5ndGg7IGIrKykge1xuICAgICAgICAgICAgbGV0IGJhbGFuY2UgPSBiYWxhbmNlc1tiXTtcbiAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IHRoaXMuY29tbW9uQ3VycmVuY3lDb2RlIChiYWxhbmNlWydhc3NldCddKTtcbiAgICAgICAgICAgIGxldCByZXNlcnZlZCA9IHBhcnNlRmxvYXQgKGJhbGFuY2VbJ3Jlc2VydmVkJ10pO1xuICAgICAgICAgICAgbGV0IHVuY29uZmlybWVkID0gcGFyc2VGbG9hdCAoYmFsYW5jZVsndW5jb25maXJtZWQnXSk7XG4gICAgICAgICAgICBsZXQgYWNjb3VudCA9IHtcbiAgICAgICAgICAgICAgICAnZnJlZSc6IHBhcnNlRmxvYXQgKGJhbGFuY2VbJ2JhbGFuY2UnXSksXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB0aGlzLnN1bSAocmVzZXJ2ZWQsIHVuY29uZmlybWVkKSxcbiAgICAgICAgICAgICAgICAndG90YWwnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYWNjb3VudFsndG90YWwnXSA9IHRoaXMuc3VtIChhY2NvdW50WydmcmVlJ10sIGFjY291bnRbJ3VzZWQnXSk7XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRPcmRlcmJvb2sgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAncGFpcic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gb3JkZXJib29rWyd0aW1lc3RhbXAnXTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdiaWRzJzogW10sXG4gICAgICAgICAgICAnYXNrcyc6IFtdLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHNpZGVzID0gWyAnYmlkcycsICdhc2tzJyBdO1xuICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IHNpZGVzLmxlbmd0aDsgcysrKSB7XG4gICAgICAgICAgICBsZXQgc2lkZSA9IHNpZGVzW3NdO1xuICAgICAgICAgICAgbGV0IG9yZGVycyA9IG9yZGVyYm9va1tzaWRlXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9yZGVyID0gb3JkZXJzW2ldO1xuICAgICAgICAgICAgICAgIGxldCBwcmljZSA9IHBhcnNlRmxvYXQgKG9yZGVyWydwcmljZSddKTtcbiAgICAgICAgICAgICAgICBsZXQgYW1vdW50ID0gcGFyc2VGbG9hdCAob3JkZXJbJ3ZvbHVtZSddKTtcbiAgICAgICAgICAgICAgICAvLyBsZXQgdGltZXN0YW1wID0gb3JkZXJbMl0gKiAxMDAwO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtzaWRlXS5wdXNoIChbIHByaWNlLCBhbW91bnQgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgcGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KSB7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aWNrZXJbJ3RpbWVzdGFtcCddO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xvdyc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2JpZCddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2FzayddKSxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdF90cmFkZSddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3JvbGxpbmdfMjRfaG91cl92b2x1bWUnXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXJzICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRUaWNrZXJzICgpO1xuICAgICAgICBsZXQgdGlja2VycyA9IHRoaXMuaW5kZXhCeSAocmVzcG9uc2VbJ3RpY2tlcnMnXSwgJ3BhaXInKTtcbiAgICAgICAgbGV0IGlkcyA9IE9iamVjdC5rZXlzICh0aWNrZXJzKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHt9O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IGlkID0gaWRzW2ldO1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IHRoaXMubWFya2V0c19ieV9pZFtpZF07XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gbWFya2V0WydzeW1ib2wnXTtcbiAgICAgICAgICAgIGxldCB0aWNrZXIgPSB0aWNrZXJzW2lkXTtcbiAgICAgICAgICAgIHJlc3VsdFtzeW1ib2xdID0gdGhpcy5wYXJzZVRpY2tlciAodGlja2VyLCBtYXJrZXQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHRpY2tlciA9IGF3YWl0IHRoaXMucHVibGljR2V0VGlja2VyICh7XG4gICAgICAgICAgICAncGFpcic6IHBbJ2lkJ10sXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVRpY2tlciAodGlja2VyLCBwKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0VHJhZGVzICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ3BhaXInOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG1ldGhvZCA9ICdwcml2YXRlUG9zdCc7XG4gICAgICAgIGxldCBvcmRlciA9IHsgJ3BhaXInOiB0aGlzLm1hcmtldElkIChtYXJrZXQpIH07XG4gICAgICAgIGlmICh0eXBlID09ICdtYXJrZXQnKSB7XG4gICAgICAgICAgICBtZXRob2QgKz0gJ01hcmtldG9yZGVyJztcbiAgICAgICAgICAgIG9yZGVyWyd0eXBlJ10gPSBzaWRlLnRvVXBwZXJDYXNlICgpO1xuICAgICAgICAgICAgaWYgKHNpZGUgPT0gJ2J1eScpXG4gICAgICAgICAgICAgICAgb3JkZXJbJ2NvdW50ZXJfdm9sdW1lJ10gPSBhbW91bnQ7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgb3JkZXJbJ2Jhc2Vfdm9sdW1lJ10gPSBhbW91bnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtZXRob2QgKz0gJ09yZGVyJztcbiAgICAgICAgICAgIG9yZGVyWyd2b2x1bWUnXSA9IGFtb3VudDtcbiAgICAgICAgICAgIG9yZGVyWydwcmljZSddID0gcHJpY2U7XG4gICAgICAgICAgICBpZiAoc2lkZSA9PSAnYnV5JylcbiAgICAgICAgICAgICAgICBvcmRlclsndHlwZSddID0gJ0JJRCc7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgb3JkZXJbJ3R5cGUnXSA9ICdBU0snO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXNbbWV0aG9kXSAodGhpcy5leHRlbmQgKG9yZGVyLCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnb3JkZXJfaWQnXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0U3RvcG9yZGVyICh7ICdvcmRlcl9pZCc6IGlkIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgJy8nICsgdGhpcy52ZXJzaW9uICsgJy8nICsgdGhpcy5pbXBsb2RlUGFyYW1zIChwYXRoLCBwYXJhbXMpO1xuICAgICAgICBsZXQgcXVlcnkgPSB0aGlzLm9taXQgKHBhcmFtcywgdGhpcy5leHRyYWN0UGFyYW1zIChwYXRoKSk7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyAocXVlcnkpLmxlbmd0aClcbiAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICBpZiAoYXBpID09ICdwcml2YXRlJykge1xuICAgICAgICAgICAgbGV0IGF1dGggPSB0aGlzLmVuY29kZSAodGhpcy5hcGlLZXkgKyAnOicgKyB0aGlzLnNlY3JldCk7XG4gICAgICAgICAgICBhdXRoID0gdGhpcy5zdHJpbmdUb0Jhc2U2NCAoYXV0aCk7XG4gICAgICAgICAgICBoZWFkZXJzID0geyAnQXV0aG9yaXphdGlvbic6ICdCYXNpYyAnICsgdGhpcy5kZWNvZGUgKGF1dGgpIH07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgICAgICBpZiAoJ2Vycm9yJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgbWVyY2FkbyA9IHtcblxuICAgICdpZCc6ICdtZXJjYWRvJyxcbiAgICAnbmFtZSc6ICdNZXJjYWRvIEJpdGNvaW4nLFxuICAgICdjb3VudHJpZXMnOiAnQlInLCAvLyBCcmF6aWxcbiAgICAncmF0ZUxpbWl0JzogMTAwMCxcbiAgICAndmVyc2lvbic6ICd2MycsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc4MzcwNjAtZTdjNTg3MTQtNjBlYS0xMWU3LTkxOTItZjA1ZTg2YWRiODNmLmpwZycsXG4gICAgICAgICdhcGknOiB7XG4gICAgICAgICAgICAncHVibGljJzogJ2h0dHBzOi8vd3d3Lm1lcmNhZG9iaXRjb2luLm5ldC9hcGknLFxuICAgICAgICAgICAgJ3ByaXZhdGUnOiAnaHR0cHM6Ly93d3cubWVyY2Fkb2JpdGNvaW4ubmV0L3RhcGknLFxuICAgICAgICB9LFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vd3d3Lm1lcmNhZG9iaXRjb2luLmNvbS5icicsXG4gICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAnaHR0cHM6Ly93d3cubWVyY2Fkb2JpdGNvaW4uY29tLmJyL2FwaS1kb2MnLFxuICAgICAgICAgICAgJ2h0dHBzOi8vd3d3Lm1lcmNhZG9iaXRjb2luLmNvbS5ici90cmFkZS1hcGknLFxuICAgICAgICBdLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbIC8vIGxhc3Qgc2xhc2ggY3JpdGljYWxcbiAgICAgICAgICAgICAgICAnb3JkZXJib29rLycsXG4gICAgICAgICAgICAgICAgJ29yZGVyYm9va19saXRlY29pbi8nLFxuICAgICAgICAgICAgICAgICd0aWNrZXIvJyxcbiAgICAgICAgICAgICAgICAndGlja2VyX2xpdGVjb2luLycsXG4gICAgICAgICAgICAgICAgJ3RyYWRlcy8nLFxuICAgICAgICAgICAgICAgICd0cmFkZXNfbGl0ZWNvaW4vJyxcbiAgICAgICAgICAgICAgICAndjIvdGlja2VyLycsXG4gICAgICAgICAgICAgICAgJ3YyL3RpY2tlcl9saXRlY29pbi8nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnY2FuY2VsX29yZGVyJyxcbiAgICAgICAgICAgICAgICAnZ2V0X2FjY291bnRfaW5mbycsXG4gICAgICAgICAgICAgICAgJ2dldF9vcmRlcicsXG4gICAgICAgICAgICAgICAgJ2dldF93aXRoZHJhd2FsJyxcbiAgICAgICAgICAgICAgICAnbGlzdF9zeXN0ZW1fbWVzc2FnZXMnLFxuICAgICAgICAgICAgICAgICdsaXN0X29yZGVycycsXG4gICAgICAgICAgICAgICAgJ2xpc3Rfb3JkZXJib29rJyxcbiAgICAgICAgICAgICAgICAncGxhY2VfYnV5X29yZGVyJyxcbiAgICAgICAgICAgICAgICAncGxhY2Vfc2VsbF9vcmRlcicsXG4gICAgICAgICAgICAgICAgJ3dpdGhkcmF3X2NvaW4nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgICdtYXJrZXRzJzoge1xuICAgICAgICAnQlRDL0JSTCc6IHsgJ2lkJzogJ0JSTEJUQycsICdzeW1ib2wnOiAnQlRDL0JSTCcsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdCUkwnLCAnc3VmZml4JzogJycgfSxcbiAgICAgICAgJ0xUQy9CUkwnOiB7ICdpZCc6ICdCUkxMVEMnLCAnc3ltYm9sJzogJ0xUQy9CUkwnLCAnYmFzZSc6ICdMVEMnLCAncXVvdGUnOiAnQlJMJywgJ3N1ZmZpeCc6ICdMaXRlY29pbicgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IG1ldGhvZCA9ICdwdWJsaWNHZXRPcmRlcmJvb2snICsgdGhpcy5jYXBpdGFsaXplIChwWydzdWZmaXgnXSk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSBhd2FpdCB0aGlzW21ldGhvZF0gKHBhcmFtcyk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdiaWRzJzogb3JkZXJib29rWydiaWRzJ10sXG4gICAgICAgICAgICAnYXNrcyc6IG9yZGVyYm9va1snYXNrcyddLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgbWV0aG9kID0gJ3B1YmxpY0dldFYyVGlja2VyJyArIHRoaXMuY2FwaXRhbGl6ZSAocFsnc3VmZml4J10pO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzW21ldGhvZF0gKCk7XG4gICAgICAgIGxldCB0aWNrZXIgPSByZXNwb25zZVsndGlja2VyJ107XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSBwYXJzZUludCAodGlja2VyWydkYXRlJ10pICogMTAwMDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2J1eSddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3NlbGwnXSksXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xhc3QnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWyd2b2wnXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IG1ldGhvZCA9ICdwdWJsaWNHZXRUcmFkZXMnICsgdGhpcy5jYXBpdGFsaXplIChwWydzdWZmaXgnXSk7XG4gICAgICAgIHJldHVybiB0aGlzW21ldGhvZF0gKHBhcmFtcyk7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RHZXRBY2NvdW50SW5mbyAoKTtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gcmVzcG9uc2VbJ2JhbGFuY2UnXTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiByZXNwb25zZSB9O1xuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IHRoaXMuY3VycmVuY2llcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gdGhpcy5jdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IGxvd2VyY2FzZSA9IGN1cnJlbmN5LnRvTG93ZXJDYXNlICgpO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChsb3dlcmNhc2UgaW4gYmFsYW5jZXMpIHtcbiAgICAgICAgICAgICAgICBhY2NvdW50WydmcmVlJ10gPSBwYXJzZUZsb2F0IChiYWxhbmNlc1tsb3dlcmNhc2VdWydhdmFpbGFibGUnXSk7XG4gICAgICAgICAgICAgICAgYWNjb3VudFsndG90YWwnXSA9IHBhcnNlRmxvYXQgKGJhbGFuY2VzW2xvd2VyY2FzZV1bJ3RvdGFsJ10pO1xuICAgICAgICAgICAgICAgIGFjY291bnRbJ3VzZWQnXSA9IGFjY291bnRbJ3RvdGFsJ10gLSBhY2NvdW50WydmcmVlJ107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBpZiAodHlwZSA9PSAnbWFya2V0JylcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyBhbGxvd3MgbGltaXQgb3JkZXJzIG9ubHknKTtcbiAgICAgICAgbGV0IG1ldGhvZCA9ICdwcml2YXRlUG9zdFBsYWNlJyArIHRoaXMuY2FwaXRhbGl6ZSAoc2lkZSkgKyAnT3JkZXInO1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAnY29pbl9wYWlyJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICdxdWFudGl0eSc6IGFtb3VudCxcbiAgICAgICAgICAgICdsaW1pdF9wcmljZSc6IHByaWNlLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzW21ldGhvZF0gKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ2lkJzogcmVzcG9uc2VbJ3Jlc3BvbnNlX2RhdGEnXVsnb3JkZXInXVsnb3JkZXJfaWQnXS50b1N0cmluZyAoKSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdENhbmNlbE9yZGVyICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ29yZGVyX2lkJzogaWQsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddW2FwaV0gKyAnLyc7XG4gICAgICAgIGlmIChhcGkgPT0gJ3B1YmxpYycpIHtcbiAgICAgICAgICAgIHVybCArPSBwYXRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdXJsICs9IHRoaXMudmVyc2lvbiArICcvJztcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCk7XG4gICAgICAgICAgICBib2R5ID0gdGhpcy51cmxlbmNvZGUgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAgICAgJ3RhcGlfbWV0aG9kJzogcGF0aCxcbiAgICAgICAgICAgICAgICAndGFwaV9ub25jZSc6IG5vbmNlLFxuICAgICAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgICAgICBsZXQgYXV0aCA9ICcvdGFwaS8nICsgdGhpcy52ZXJzaW9uICsgJy8nICsgJz8nICsgYm9keTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgICAgICAgICdUQVBJLUlEJzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ1RBUEktTUFDJzogdGhpcy5obWFjICh0aGlzLmVuY29kZSAoYXV0aCksIHRoaXMuc2VjcmV0LCAnc2hhNTEyJyksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdlcnJvcl9tZXNzYWdlJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gT0tDb2luXG4vLyBDaGluYVxuLy8gaHR0cHM6Ly93d3cub2tjb2luLmNvbS9cbi8vIGh0dHBzOi8vd3d3Lm9rY29pbi5jb20vcmVzdF9nZXRTdGFydGVkLmh0bWxcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9PS0NvaW4vd2Vic29ja2V0XG4vLyBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9va2NvaW4uY29tXG4vLyBodHRwczovL3d3dy5va2NvaW4uY25cbi8vIGh0dHBzOi8vd3d3Lm9rY29pbi5jbi9yZXN0X2dldFN0YXJ0ZWQuaHRtbFxuXG52YXIgb2tjb2luID0ge1xuXG4gICAgJ3ZlcnNpb24nOiAndjEnLFxuICAgICdyYXRlTGltaXQnOiAxMDAwLCAvLyB1cCB0byAzMDAwIHJlcXVlc3RzIHBlciA1IG1pbnV0ZXMg4omIIDYwMCByZXF1ZXN0cyBwZXIgbWludXRlIOKJiCAxMCByZXF1ZXN0cyBwZXIgc2Vjb25kIOKJiCAxMDAgbXNcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnZGVwdGgnLFxuICAgICAgICAgICAgICAgICdleGNoYW5nZV9yYXRlJyxcbiAgICAgICAgICAgICAgICAnZnV0dXJlX2RlcHRoJyxcbiAgICAgICAgICAgICAgICAnZnV0dXJlX2VzdGltYXRlZF9wcmljZScsXG4gICAgICAgICAgICAgICAgJ2Z1dHVyZV9ob2xkX2Ftb3VudCcsXG4gICAgICAgICAgICAgICAgJ2Z1dHVyZV9pbmRleCcsXG4gICAgICAgICAgICAgICAgJ2Z1dHVyZV9rbGluZScsXG4gICAgICAgICAgICAgICAgJ2Z1dHVyZV9wcmljZV9saW1pdCcsXG4gICAgICAgICAgICAgICAgJ2Z1dHVyZV90aWNrZXInLFxuICAgICAgICAgICAgICAgICdmdXR1cmVfdHJhZGVzJyxcbiAgICAgICAgICAgICAgICAna2xpbmUnLFxuICAgICAgICAgICAgICAgICdvdGNzJyxcbiAgICAgICAgICAgICAgICAndGlja2VyJyxcbiAgICAgICAgICAgICAgICAndHJhZGVzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2FjY291bnRfcmVjb3JkcycsXG4gICAgICAgICAgICAgICAgJ2JhdGNoX3RyYWRlJyxcbiAgICAgICAgICAgICAgICAnYm9ycm93X21vbmV5JyxcbiAgICAgICAgICAgICAgICAnYm9ycm93X29yZGVyX2luZm8nLFxuICAgICAgICAgICAgICAgICdib3Jyb3dzX2luZm8nLFxuICAgICAgICAgICAgICAgICdjYW5jZWxfYm9ycm93JyxcbiAgICAgICAgICAgICAgICAnY2FuY2VsX29yZGVyJyxcbiAgICAgICAgICAgICAgICAnY2FuY2VsX290Y19vcmRlcicsXG4gICAgICAgICAgICAgICAgJ2NhbmNlbF93aXRoZHJhdycsXG4gICAgICAgICAgICAgICAgJ2Z1dHVyZV9iYXRjaF90cmFkZScsXG4gICAgICAgICAgICAgICAgJ2Z1dHVyZV9jYW5jZWwnLFxuICAgICAgICAgICAgICAgICdmdXR1cmVfZGV2b2x2ZScsXG4gICAgICAgICAgICAgICAgJ2Z1dHVyZV9leHBsb3NpdmUnLFxuICAgICAgICAgICAgICAgICdmdXR1cmVfb3JkZXJfaW5mbycsXG4gICAgICAgICAgICAgICAgJ2Z1dHVyZV9vcmRlcnNfaW5mbycsXG4gICAgICAgICAgICAgICAgJ2Z1dHVyZV9wb3NpdGlvbicsXG4gICAgICAgICAgICAgICAgJ2Z1dHVyZV9wb3NpdGlvbl80Zml4JyxcbiAgICAgICAgICAgICAgICAnZnV0dXJlX3RyYWRlJyxcbiAgICAgICAgICAgICAgICAnZnV0dXJlX3RyYWRlc19oaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAnZnV0dXJlX3VzZXJpbmZvJyxcbiAgICAgICAgICAgICAgICAnZnV0dXJlX3VzZXJpbmZvXzRmaXgnLFxuICAgICAgICAgICAgICAgICdsZW5kX2RlcHRoJyxcbiAgICAgICAgICAgICAgICAnb3JkZXJfZmVlJyxcbiAgICAgICAgICAgICAgICAnb3JkZXJfaGlzdG9yeScsXG4gICAgICAgICAgICAgICAgJ29yZGVyX2luZm8nLFxuICAgICAgICAgICAgICAgICdvcmRlcnNfaW5mbycsXG4gICAgICAgICAgICAgICAgJ290Y19vcmRlcl9oaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAnb3RjX29yZGVyX2luZm8nLFxuICAgICAgICAgICAgICAgICdyZXBheW1lbnQnLFxuICAgICAgICAgICAgICAgICdzdWJtaXRfb3RjX29yZGVyJyxcbiAgICAgICAgICAgICAgICAndHJhZGUnLFxuICAgICAgICAgICAgICAgICd0cmFkZV9oaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAndHJhZGVfb3RjX29yZGVyJyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXcnLFxuICAgICAgICAgICAgICAgICd3aXRoZHJhd19pbmZvJyxcbiAgICAgICAgICAgICAgICAndW5yZXBheW1lbnRzX2luZm8nLFxuICAgICAgICAgICAgICAgICd1c2VyaW5mbycsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgdGhpcy5wdWJsaWNHZXREZXB0aCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBvcmRlcmJvb2tbJ2JpZHMnXSxcbiAgICAgICAgICAgICdhc2tzJzogdGhpcy5zb3J0QnkgKG9yZGVyYm9va1snYXNrcyddLCAwKSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRUaWNrZXIgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IHRpY2tlciA9IHJlc3BvbnNlWyd0aWNrZXInXTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHBhcnNlSW50IChyZXNwb25zZVsnZGF0ZSddKSAqIDEwMDA7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2hpZ2gnXSksXG4gICAgICAgICAgICAnbG93JzogcGFyc2VGbG9hdCAodGlja2VyWydsb3cnXSksXG4gICAgICAgICAgICAnYmlkJzogcGFyc2VGbG9hdCAodGlja2VyWydidXknXSksXG4gICAgICAgICAgICAnYXNrJzogcGFyc2VGbG9hdCAodGlja2VyWydzZWxsJ10pLFxuICAgICAgICAgICAgJ3Z3YXAnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnb3Blbic6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjbG9zZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdmaXJzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsYXN0JzogcGFyc2VGbG9hdCAodGlja2VyWydsYXN0J10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndm9sJ10pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldFRyYWRlcyAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPSExDViAobWFya2V0LCB0aW1lZnJhbWUgPSA2MCwgc2luY2UgPSB1bmRlZmluZWQsIGxpbWl0ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCBtID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0S2xpbmUgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiBtWydpZCddLFxuICAgICAgICAgICAgJ3R5cGUnOiAnMW1pbicsXG4gICAgICAgICAgICAnc2luY2UnOiBzaW5jZSxcbiAgICAgICAgICAgICdzaXplJzogcGFyc2VJbnQgKGxpbWl0KSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlT0hMQ1ZzIChtLCByZXNwb25zZSwgdGltZWZyYW1lLCBzaW5jZSwgbGltaXQpO1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0VXNlcmluZm8gKCk7XG4gICAgICAgIGxldCBiYWxhbmNlcyA9IHJlc3BvbnNlWydpbmZvJ11bJ2Z1bmRzJ107XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogcmVzcG9uc2UgfTtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCB0aGlzLmN1cnJlbmNpZXMubGVuZ3RoOyBjKyspIHtcbiAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IHRoaXMuY3VycmVuY2llc1tjXTtcbiAgICAgICAgICAgIGxldCBsb3dlcmNhc2UgPSBjdXJyZW5jeS50b0xvd2VyQ2FzZSAoKTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd1c2VkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAobG93ZXJjYXNlIGluIGJhbGFuY2VzWydmcmVlJ10pXG4gICAgICAgICAgICAgICAgYWNjb3VudFsnZnJlZSddID0gcGFyc2VGbG9hdCAoYmFsYW5jZXNbJ2ZyZWUnXVtsb3dlcmNhc2VdKTtcbiAgICAgICAgICAgIGlmIChsb3dlcmNhc2UgaW4gYmFsYW5jZXNbJ2ZyZWV6ZWQnXSlcbiAgICAgICAgICAgICAgICBhY2NvdW50Wyd1c2VkJ10gPSBwYXJzZUZsb2F0IChiYWxhbmNlc1snZnJlZXplZCddW2xvd2VyY2FzZV0pO1xuICAgICAgICAgICAgYWNjb3VudFsndG90YWwnXSA9IHRoaXMuc3VtIChhY2NvdW50WydmcmVlJ10sIGFjY291bnRbJ3VzZWQnXSk7XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAnc3ltYm9sJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICd0eXBlJzogc2lkZSxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHR5cGUgPT0gJ2xpbWl0Jykge1xuICAgICAgICAgICAgb3JkZXJbJ3ByaWNlJ10gPSBwcmljZTtcbiAgICAgICAgICAgIG9yZGVyWydhbW91bnQnXSA9IGFtb3VudDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChzaWRlID09ICdidXknKSB7XG4gICAgICAgICAgICAgICAgb3JkZXJbJ3ByaWNlJ10gPSBwYXJhbXM7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG9yZGVyWydhbW91bnQnXSA9IGFtb3VudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9yZGVyWyd0eXBlJ10gKz0gJ19tYXJrZXQnO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RUcmFkZSAodGhpcy5leHRlbmQgKG9yZGVyLCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnb3JkZXJfaWQnXS50b1N0cmluZyAoKSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdENhbmNlbE9yZGVyICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ29yZGVyX2lkJzogaWQsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSAnLycgKyAnYXBpJyArICcvJyArIHRoaXMudmVyc2lvbiArICcvJyArIHBhdGggKyAnLmRvJztcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChwYXJhbXMpLmxlbmd0aClcbiAgICAgICAgICAgICAgICB1cmwgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHBhcmFtcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgcXVlcnkgPSB0aGlzLmtleXNvcnQgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAgICAgJ2FwaV9rZXknOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICAgICAgLy8gc2VjcmV0IGtleSBtdXN0IGJlIGF0IHRoZSBlbmQgb2YgcXVlcnlcbiAgICAgICAgICAgIGxldCBxdWVyeVN0cmluZyA9IHRoaXMudXJsZW5jb2RlIChxdWVyeSkgKyAnJnNlY3JldF9rZXk9JyArIHRoaXMuc2VjcmV0O1xuICAgICAgICAgICAgcXVlcnlbJ3NpZ24nXSA9IHRoaXMuaGFzaCAodGhpcy5lbmNvZGUgKHF1ZXJ5U3RyaW5nKSkudG9VcHBlckNhc2UgKCk7XG4gICAgICAgICAgICBib2R5ID0gdGhpcy51cmxlbmNvZGUgKHF1ZXJ5KTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyB9O1xuICAgICAgICB9XG4gICAgICAgIHVybCA9IHRoaXMudXJsc1snYXBpJ10gKyB1cmw7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdyZXN1bHQnIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgaWYgKCFyZXNwb25zZVsncmVzdWx0J10pXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBva2NvaW5jbnkgPSBleHRlbmQgKG9rY29pbiwge1xuICAgICdpZCc6ICdva2NvaW5jbnknLFxuICAgICduYW1lJzogJ09LQ29pbiBDTlknLFxuICAgICdjb3VudHJpZXMnOiAnQ04nLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2NzkyLThiZTkxNTdhLTVlZTUtMTFlNy05MjZjLTZkNjliOGQzMzc4ZC5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vd3d3Lm9rY29pbi5jbicsXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly93d3cub2tjb2luLmNuJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL3d3dy5va2NvaW4uY24vcmVzdF9nZXRTdGFydGVkLmh0bWwnLFxuICAgIH0sXG4gICAgJ21hcmtldHMnOiB7XG4gICAgICAgICdCVEMvQ05ZJzogeyAnaWQnOiAnYnRjX2NueScsICdzeW1ib2wnOiAnQlRDL0NOWScsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdDTlknIH0sXG4gICAgICAgICdMVEMvQ05ZJzogeyAnaWQnOiAnbHRjX2NueScsICdzeW1ib2wnOiAnTFRDL0NOWScsICdiYXNlJzogJ0xUQycsICdxdW90ZSc6ICdDTlknIH0sXG4gICAgfSxcbn0pXG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIG9rY29pbnVzZCA9IGV4dGVuZCAob2tjb2luLCB7XG4gICAgJ2lkJzogJ29rY29pbnVzZCcsXG4gICAgJ25hbWUnOiAnT0tDb2luIFVTRCcsXG4gICAgJ2NvdW50cmllcyc6IFsgJ0NOJywgJ1VTJyBdLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2NzkxLTg5ZmZiNTAyLTVlZTUtMTFlNy04YTViLWM1OTUwYjY4YWM2NS5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vd3d3Lm9rY29pbi5jb20nLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vd3d3Lm9rY29pbi5jb20nLFxuICAgICAgICAnZG9jJzogW1xuICAgICAgICAgICAgJ2h0dHBzOi8vd3d3Lm9rY29pbi5jb20vcmVzdF9nZXRTdGFydGVkLmh0bWwnLFxuICAgICAgICAgICAgJ2h0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL29rY29pbi5jb20nLFxuICAgICAgICBdLFxuICAgIH0sXG4gICAgJ21hcmtldHMnOiB7XG4gICAgICAgICdCVEMvVVNEJzogeyAnaWQnOiAnYnRjX3VzZCcsICdzeW1ib2wnOiAnQlRDL1VTRCcsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdVU0QnIH0sXG4gICAgICAgICdMVEMvVVNEJzogeyAnaWQnOiAnbHRjX3VzZCcsICdzeW1ib2wnOiAnTFRDL1VTRCcsICdiYXNlJzogJ0xUQycsICdxdW90ZSc6ICdVU0QnIH0sXG4gICAgICAgICdFVEgvVVNEJzogeyAnaWQnOiAnZXRoX3VzZCcsICdzeW1ib2wnOiAnRVRIL1VTRCcsICdiYXNlJzogJ0VUSCcsICdxdW90ZSc6ICdVU0QnIH0sXG4gICAgICAgICdFVEMvVVNEJzogeyAnaWQnOiAnZXRjX3VzZCcsICdzeW1ib2wnOiAnRVRDL1VTRCcsICdiYXNlJzogJ0VUQycsICdxdW90ZSc6ICdVU0QnIH0sXG4gICAgfSxcbn0pXG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIG9rZXggPSBleHRlbmQgKG9rY29pbiwge1xuICAgICdpZCc6ICdva2V4JyxcbiAgICAnbmFtZSc6ICdPS0VYJyxcbiAgICAnY291bnRyaWVzJzogWyAnQ04nLCAnVVMnIF0sXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjk1NjI1OTMtOTAzOGE5YmMtODc0Mi0xMWU3LTkxY2MtODIwMWY4NDViZmMxLmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly93d3cub2tleC5jb20nLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vd3d3Lm9rZXguY29tJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL3d3dy5va2V4LmNvbS9yZXN0X2dldFN0YXJ0ZWQuaHRtbCcsXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0xUQy9CVEMnOiB7ICdpZCc6ICdsdGNfYnRjJywgJ3N5bWJvbCc6ICdMVEMvQlRDJywgJ2Jhc2UnOiAnTFRDJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ0VUSC9CVEMnOiB7ICdpZCc6ICdldGhfYnRjJywgJ3N5bWJvbCc6ICdFVEgvQlRDJywgJ2Jhc2UnOiAnRVRIJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ0VUQy9CVEMnOiB7ICdpZCc6ICdldGNfYnRjJywgJ3N5bWJvbCc6ICdFVEMvQlRDJywgJ2Jhc2UnOiAnRVRDJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ0JDSC9CVEMnOiB7ICdpZCc6ICdiY2NfYnRjJywgJ3N5bWJvbCc6ICdCQ0gvQlRDJywgJ2Jhc2UnOiAnQkNIJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICB9LFxufSlcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgcGF5bWl1bSA9IHtcblxuICAgICdpZCc6ICdwYXltaXVtJyxcbiAgICAnbmFtZSc6ICdQYXltaXVtJyxcbiAgICAnY291bnRyaWVzJzogWyAnRlInLCAnRVUnIF0sXG4gICAgJ3JhdGVMaW1pdCc6IDIwMDAsXG4gICAgJ3ZlcnNpb24nOiAndjEnLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzkwNTY0LWE5NDVhOWQ0LTVmZjktMTFlNy05ZDJkLWI2MzU3NjNmMmYyNC5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vcGF5bWl1bS5jb20vYXBpJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy5wYXltaXVtLmNvbScsXG4gICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAnaHR0cHM6Ly9naXRodWIuY29tL1BheW1pdW0vYXBpLWRvY3VtZW50YXRpb24nLFxuICAgICAgICAgICAgJ2h0dHBzOi8vd3d3LnBheW1pdW0uY29tL3BhZ2UvZGV2ZWxvcGVycycsXG4gICAgICAgIF0sXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnY291bnRyaWVzJyxcbiAgICAgICAgICAgICAgICAnZGF0YS97aWR9L3RpY2tlcicsXG4gICAgICAgICAgICAgICAgJ2RhdGEve2lkfS90cmFkZXMnLFxuICAgICAgICAgICAgICAgICdkYXRhL3tpZH0vZGVwdGgnLFxuICAgICAgICAgICAgICAgICdiaXRjb2luX2NoYXJ0cy97aWR9L3RyYWRlcycsXG4gICAgICAgICAgICAgICAgJ2JpdGNvaW5fY2hhcnRzL3tpZH0vZGVwdGgnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdtZXJjaGFudC9nZXRfcGF5bWVudC97VVVJRH0nLFxuICAgICAgICAgICAgICAgICd1c2VyJyxcbiAgICAgICAgICAgICAgICAndXNlci9hZGRyZXNzZXMnLFxuICAgICAgICAgICAgICAgICd1c2VyL2FkZHJlc3Nlcy97YnRjX2FkZHJlc3N9JyxcbiAgICAgICAgICAgICAgICAndXNlci9vcmRlcnMnLFxuICAgICAgICAgICAgICAgICd1c2VyL29yZGVycy97VVVJRH0nLFxuICAgICAgICAgICAgICAgICd1c2VyL3ByaWNlX2FsZXJ0cycsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ3VzZXIvb3JkZXJzJyxcbiAgICAgICAgICAgICAgICAndXNlci9hZGRyZXNzZXMnLFxuICAgICAgICAgICAgICAgICd1c2VyL3BheW1lbnRfcmVxdWVzdHMnLFxuICAgICAgICAgICAgICAgICd1c2VyL3ByaWNlX2FsZXJ0cycsXG4gICAgICAgICAgICAgICAgJ21lcmNoYW50L2NyZWF0ZV9wYXltZW50JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAnZGVsZXRlJzogW1xuICAgICAgICAgICAgICAgICd1c2VyL29yZGVycy97VVVJRH0vY2FuY2VsJyxcbiAgICAgICAgICAgICAgICAndXNlci9wcmljZV9hbGVydHMve2lkfScsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgJ21hcmtldHMnOiB7XG4gICAgICAgICdCVEMvRVVSJzogeyAnaWQnOiAnZXVyJywgJ3N5bWJvbCc6ICdCVEMvRVVSJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ0VVUicgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gYXdhaXQgdGhpcy5wcml2YXRlR2V0VXNlciAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiBiYWxhbmNlcyB9O1xuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IHRoaXMuY3VycmVuY2llcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gdGhpcy5jdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IGxvd2VyY2FzZSA9IGN1cnJlbmN5LnRvTG93ZXJDYXNlICgpO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGxldCBiYWxhbmNlID0gJ2JhbGFuY2VfJyArIGxvd2VyY2FzZTtcbiAgICAgICAgICAgIGxldCBsb2NrZWQgPSAnbG9ja2VkXycgKyBsb3dlcmNhc2U7XG4gICAgICAgICAgICBpZiAoYmFsYW5jZSBpbiBiYWxhbmNlcylcbiAgICAgICAgICAgICAgICBhY2NvdW50WydmcmVlJ10gPSBiYWxhbmNlc1tiYWxhbmNlXTtcbiAgICAgICAgICAgIGlmIChsb2NrZWQgaW4gYmFsYW5jZXMpXG4gICAgICAgICAgICAgICAgYWNjb3VudFsndXNlZCddID0gYmFsYW5jZXNbbG9ja2VkXTtcbiAgICAgICAgICAgIGFjY291bnRbJ3RvdGFsJ10gPSB0aGlzLnN1bSAoYWNjb3VudFsnZnJlZSddLCBhY2NvdW50Wyd1c2VkJ10pO1xuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IGF3YWl0IHRoaXMucHVibGljR2V0RGF0YUlkRGVwdGggKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnaWQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gb3JkZXJbJ3ByaWNlJ107XG4gICAgICAgICAgICAgICAgbGV0IGFtb3VudCA9IG9yZGVyWydhbW91bnQnXTtcbiAgICAgICAgICAgICAgICBsZXQgdGltZXN0YW1wID0gb3JkZXJbJ3RpbWVzdGFtcCddICogMTAwMDtcbiAgICAgICAgICAgICAgICByZXN1bHRbc2lkZV0ucHVzaCAoWyBwcmljZSwgYW1vdW50LCB0aW1lc3RhbXAgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0WydiaWRzJ10gPSB0aGlzLnNvcnRCeSAocmVzdWx0WydiaWRzJ10sIDAsIHRydWUpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGxldCB0aWNrZXIgPSBhd2FpdCB0aGlzLnB1YmxpY0dldERhdGFJZFRpY2tlciAoe1xuICAgICAgICAgICAgJ2lkJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aWNrZXJbJ2F0J10gKiAxMDAwO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydoaWdoJ10pLFxuICAgICAgICAgICAgJ2xvdyc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbG93J10pLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYmlkJ10pLFxuICAgICAgICAgICAgJ2Fzayc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYXNrJ10pLFxuICAgICAgICAgICAgJ3Z3YXAnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3Z3YXAnXSksXG4gICAgICAgICAgICAnb3Blbic6IHBhcnNlRmxvYXQgKHRpY2tlclsnb3BlbiddKSxcbiAgICAgICAgICAgICdjbG9zZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdmaXJzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsYXN0JzogcGFyc2VGbG9hdCAodGlja2VyWydwcmljZSddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndmFyaWF0aW9uJ10pLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndm9sdW1lJ10pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldERhdGFJZFRyYWRlcyAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdpZCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAndHlwZSc6IHRoaXMuY2FwaXRhbGl6ZSAodHlwZSkgKyAnT3JkZXInLFxuICAgICAgICAgICAgJ2N1cnJlbmN5JzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICdkaXJlY3Rpb24nOiBzaWRlLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IGFtb3VudCxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHR5cGUgPT0gJ21hcmtldCcpXG4gICAgICAgICAgICBvcmRlclsncHJpY2UnXSA9IHByaWNlO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0VXNlck9yZGVycyAodGhpcy5leHRlbmQgKG9yZGVyLCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsndXVpZCddLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0Q2FuY2VsT3JkZXIgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnb3JkZXJOdW1iZXInOiBpZCxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ10gKyAnLycgKyB0aGlzLnZlcnNpb24gKyAnLycgKyB0aGlzLmltcGxvZGVQYXJhbXMgKHBhdGgsIHBhcmFtcyk7XG4gICAgICAgIGxldCBxdWVyeSA9IHRoaXMub21pdCAocGFyYW1zLCB0aGlzLmV4dHJhY3RQYXJhbXMgKHBhdGgpKTtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChxdWVyeSkubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYm9keSA9IHRoaXMuanNvbiAocGFyYW1zKTtcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCkudG9TdHJpbmcgKCk7XG4gICAgICAgICAgICBsZXQgYXV0aCA9IG5vbmNlICsgdXJsICsgYm9keTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0FwaS1LZXknOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgICAgICAnQXBpLVNpZ25hdHVyZSc6IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKGF1dGgpLCB0aGlzLnNlY3JldCksXG4gICAgICAgICAgICAgICAgJ0FwaS1Ob25jZSc6IG5vbmNlLFxuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdlcnJvcnMnIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBwb2xvbmlleCA9IHtcblxuICAgICdpZCc6ICdwb2xvbmlleCcsXG4gICAgJ25hbWUnOiAnUG9sb25pZXgnLFxuICAgICdjb3VudHJpZXMnOiAnVVMnLFxuICAgICdyYXRlTGltaXQnOiA1MDAsIC8vIDYgY2FsbHMgcGVyIHNlY29uZFxuICAgICdoYXNGZXRjaFRpY2tlcnMnOiB0cnVlLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2ODE3LWU5NDU2MzEyLTVlZTYtMTFlNy05YjNjLWI2MjhjYTU2MjZhNS5qcGcnLFxuICAgICAgICAnYXBpJzoge1xuICAgICAgICAgICAgJ3B1YmxpYyc6ICdodHRwczovL3BvbG9uaWV4LmNvbS9wdWJsaWMnLFxuICAgICAgICAgICAgJ3ByaXZhdGUnOiAnaHR0cHM6Ly9wb2xvbmlleC5jb20vdHJhZGluZ0FwaScsXG4gICAgICAgIH0sXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly9wb2xvbmlleC5jb20nLFxuICAgICAgICAnZG9jJzogW1xuICAgICAgICAgICAgJ2h0dHBzOi8vcG9sb25pZXguY29tL3N1cHBvcnQvYXBpLycsXG4gICAgICAgICAgICAnaHR0cDovL3Bhc3RlYmluLmNvbS9kTVg3bVpFMCcsXG4gICAgICAgIF0sXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAncmV0dXJuMjRoVm9sdW1lJyxcbiAgICAgICAgICAgICAgICAncmV0dXJuQ2hhcnREYXRhJyxcbiAgICAgICAgICAgICAgICAncmV0dXJuQ3VycmVuY2llcycsXG4gICAgICAgICAgICAgICAgJ3JldHVybkxvYW5PcmRlcnMnLFxuICAgICAgICAgICAgICAgICdyZXR1cm5PcmRlckJvb2snLFxuICAgICAgICAgICAgICAgICdyZXR1cm5UaWNrZXInLFxuICAgICAgICAgICAgICAgICdyZXR1cm5UcmFkZUhpc3RvcnknLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnYnV5JyxcbiAgICAgICAgICAgICAgICAnY2FuY2VsTG9hbk9mZmVyJyxcbiAgICAgICAgICAgICAgICAnY2FuY2VsT3JkZXInLFxuICAgICAgICAgICAgICAgICdjbG9zZU1hcmdpblBvc2l0aW9uJyxcbiAgICAgICAgICAgICAgICAnY3JlYXRlTG9hbk9mZmVyJyxcbiAgICAgICAgICAgICAgICAnZ2VuZXJhdGVOZXdBZGRyZXNzJyxcbiAgICAgICAgICAgICAgICAnZ2V0TWFyZ2luUG9zaXRpb24nLFxuICAgICAgICAgICAgICAgICdtYXJnaW5CdXknLFxuICAgICAgICAgICAgICAgICdtYXJnaW5TZWxsJyxcbiAgICAgICAgICAgICAgICAnbW92ZU9yZGVyJyxcbiAgICAgICAgICAgICAgICAncmV0dXJuQWN0aXZlTG9hbnMnLFxuICAgICAgICAgICAgICAgICdyZXR1cm5BdmFpbGFibGVBY2NvdW50QmFsYW5jZXMnLFxuICAgICAgICAgICAgICAgICdyZXR1cm5CYWxhbmNlcycsXG4gICAgICAgICAgICAgICAgJ3JldHVybkNvbXBsZXRlQmFsYW5jZXMnLFxuICAgICAgICAgICAgICAgICdyZXR1cm5EZXBvc2l0QWRkcmVzc2VzJyxcbiAgICAgICAgICAgICAgICAncmV0dXJuRGVwb3NpdHNXaXRoZHJhd2FscycsXG4gICAgICAgICAgICAgICAgJ3JldHVybkZlZUluZm8nLFxuICAgICAgICAgICAgICAgICdyZXR1cm5MZW5kaW5nSGlzdG9yeScsXG4gICAgICAgICAgICAgICAgJ3JldHVybk1hcmdpbkFjY291bnRTdW1tYXJ5JyxcbiAgICAgICAgICAgICAgICAncmV0dXJuT3BlbkxvYW5PZmZlcnMnLFxuICAgICAgICAgICAgICAgICdyZXR1cm5PcGVuT3JkZXJzJyxcbiAgICAgICAgICAgICAgICAncmV0dXJuT3JkZXJUcmFkZXMnLFxuICAgICAgICAgICAgICAgICdyZXR1cm5UcmFkYWJsZUJhbGFuY2VzJyxcbiAgICAgICAgICAgICAgICAncmV0dXJuVHJhZGVIaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAnc2VsbCcsXG4gICAgICAgICAgICAgICAgJ3RvZ2dsZUF1dG9SZW5ldycsXG4gICAgICAgICAgICAgICAgJ3RyYW5zZmVyQmFsYW5jZScsXG4gICAgICAgICAgICAgICAgJ3dpdGhkcmF3JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoTWFya2V0cyAoKSB7XG4gICAgICAgIGxldCBtYXJrZXRzID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRSZXR1cm5UaWNrZXIgKCk7XG4gICAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMgKG1hcmtldHMpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwga2V5cy5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgbGV0IGlkID0ga2V5c1twXTtcbiAgICAgICAgICAgIGxldCBtYXJrZXQgPSBtYXJrZXRzW2lkXTtcbiAgICAgICAgICAgIGxldCBbIHF1b3RlLCBiYXNlIF0gPSBpZC5zcGxpdCAoJ18nKTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBiYXNlICsgJy8nICsgcXVvdGU7XG4gICAgICAgICAgICByZXN1bHQucHVzaCAoe1xuICAgICAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICAgICAgICAgICdzeW1ib2wnOiBzeW1ib2wsXG4gICAgICAgICAgICAgICAgJ2Jhc2UnOiBiYXNlLFxuICAgICAgICAgICAgICAgICdxdW90ZSc6IHF1b3RlLFxuICAgICAgICAgICAgICAgICdpbmZvJzogbWFya2V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdFJldHVybkNvbXBsZXRlQmFsYW5jZXMgKHtcbiAgICAgICAgICAgICdhY2NvdW50JzogJ2FsbCcsXG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGJhbGFuY2VzIH07XG4gICAgICAgIGxldCBjdXJyZW5jaWVzID0gT2JqZWN0LmtleXMgKGJhbGFuY2VzKTtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBjdXJyZW5jaWVzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBjdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IGJhbGFuY2UgPSBiYWxhbmNlc1tjdXJyZW5jeV07XG4gICAgICAgICAgICBsZXQgYWNjb3VudCA9IHtcbiAgICAgICAgICAgICAgICAnZnJlZSc6IHBhcnNlRmxvYXQgKGJhbGFuY2VbJ2F2YWlsYWJsZSddKSxcbiAgICAgICAgICAgICAgICAndXNlZCc6IHBhcnNlRmxvYXQgKGJhbGFuY2VbJ29uT3JkZXJzJ10pLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhY2NvdW50Wyd0b3RhbCddID0gdGhpcy5zdW0gKGFjY291bnRbJ2ZyZWUnXSwgYWNjb3VudFsndXNlZCddKTtcbiAgICAgICAgICAgIHJlc3VsdFtjdXJyZW5jeV0gPSBhY2NvdW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIHBhcnNlQmlkQXNrIChiaWRhc2spIHtcbiAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAoYmlkYXNrWzBdKTtcbiAgICAgICAgbGV0IGFtb3VudCA9IHBhcnNlRmxvYXQgKGJpZGFza1sxXSk7XG4gICAgICAgIHJldHVybiBbIHByaWNlLCBhbW91bnQgXTtcbiAgICB9LFxuXG4gICAgcGFyc2VCaWRBc2tzIChiaWRhc2tzKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiaWRhc2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCAodGhpcy5wYXJzZUJpZEFzayAoYmlkYXNrc1tpXSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFJldHVybk9yZGVyQm9vayAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdjdXJyZW5jeVBhaXInOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICByZXN1bHRbc2lkZV0gPSB0aGlzLnBhcnNlQmlkQXNrcyAob3JkZXJib29rW3NpZGVdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBwYXJzZVRpY2tlciAodGlja2VyLCBtYXJrZXQpIHtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydoaWdoMjRociddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdzI0aHInXSksXG4gICAgICAgICAgICAnYmlkJzogcGFyc2VGbG9hdCAodGlja2VyWydoaWdoZXN0QmlkJ10pLFxuICAgICAgICAgICAgJ2Fzayc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbG93ZXN0QXNrJ10pLFxuICAgICAgICAgICAgJ3Z3YXAnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnb3Blbic6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjbG9zZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdmaXJzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsYXN0JzogcGFyc2VGbG9hdCAodGlja2VyWydsYXN0J10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsncGVyY2VudENoYW5nZSddKSxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYmFzZVZvbHVtZSddKSxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsncXVvdGVWb2x1bWUnXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXJzICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHRpY2tlcnMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFJldHVyblRpY2tlciAoKTtcbiAgICAgICAgbGV0IGlkcyA9IE9iamVjdC5rZXlzICh0aWNrZXJzKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHt9O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IGlkID0gaWRzW2ldO1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IHRoaXMubWFya2V0c19ieV9pZFtpZF07XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gbWFya2V0WydzeW1ib2wnXTtcbiAgICAgICAgICAgIGxldCB0aWNrZXIgPSB0aWNrZXJzW2lkXTtcbiAgICAgICAgICAgIHJlc3VsdFtzeW1ib2xdID0gdGhpcy5wYXJzZVRpY2tlciAodGlja2VyLCBtYXJrZXQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG0gPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHRpY2tlcnMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFJldHVyblRpY2tlciAoKTtcbiAgICAgICAgbGV0IHRpY2tlciA9IHRpY2tlcnNbbVsnaWQnXV07XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIG0pO1xuICAgIH0sXG5cbiAgICBwYXJzZVRyYWRlICh0cmFkZSwgbWFya2V0ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLnBhcnNlODYwMSAodHJhZGVbJ2RhdGUnXSk7XG4gICAgICAgIGxldCBpZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IG9yZGVyID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoJ3RyYWRlSUQnIGluIHRyYWRlKVxuICAgICAgICAgICAgaWQgPSB0cmFkZVsndHJhZGVJRCddO1xuICAgICAgICBpZiAoJ29yZGVyTnVtYmVyJyBpbiB0cmFkZSlcbiAgICAgICAgICAgIG9yZGVyID0gdHJhZGVbJ29yZGVyTnVtYmVyJ107XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHRyYWRlLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdzeW1ib2wnOiBtYXJrZXRbJ3N5bWJvbCddLFxuICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgICAgICAnb3JkZXInOiBvcmRlcixcbiAgICAgICAgICAgICd0eXBlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3NpZGUnOiB0cmFkZVsndHlwZSddLFxuICAgICAgICAgICAgJ3ByaWNlJzogcGFyc2VGbG9hdCAodHJhZGVbJ3JhdGUnXSksXG4gICAgICAgICAgICAnYW1vdW50JzogcGFyc2VGbG9hdCAodHJhZGVbJ2Ftb3VudCddKSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG0gPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHRyYWRlcyA9IGF3YWl0IHRoaXMucHVibGljR2V0UmV0dXJuVHJhZGVIaXN0b3J5ICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2N1cnJlbmN5UGFpcic6IG1bJ2lkJ10sXG4gICAgICAgICAgICAnZW5kJzogdGhpcy5zZWNvbmRzICgpLCAvLyBsYXN0IDUwMDAwIHRyYWRlcyBieSBkZWZhdWx0XG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVRyYWRlcyAodHJhZGVzLCBtKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hNeVRyYWRlcyAobWFya2V0ID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgbm93ID0gdGhpcy5zZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVxdWVzdCA9IHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnY3VycmVuY3lQYWlyJzogJ2FsbCcsXG4gICAgICAgICAgICAnZW5kJzogdGhpcy5zZWNvbmRzICgpLCAvLyBsYXN0IDUwMDAwIHRyYWRlcyBieSBkZWZhdWx0XG4gICAgICAgIH0sIHBhcmFtcyk7XG4gICAgICAgIGlmIChtYXJrZXQpIHtcbiAgICAgICAgICAgIGxldCBtID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgICAgICByZXF1ZXN0WydjdXJyZW5jeVBhaXInXSA9IG1bJ2lkJ107XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHRyYWRlcyA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RSZXR1cm5UcmFkZUhpc3RvcnkgKHJlcXVlc3QpO1xuICAgICAgICBpZiAobWFya2V0KVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VUcmFkZXMgKHRyYWRlcywgbSk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogdHJhZGVzIH07XG4gICAgICAgIGxldCBpZHMgPSBPYmplY3Qua2V5cyAodHJhZGVzKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCBpZCA9IGlkc1tpXTtcbiAgICAgICAgICAgIGxldCB0cmFkZXMgPSB0cmFkZXNbaWRdO1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IHRoaXMubWFya2V0c19ieV9pZFtpZF07XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gbWFya2V0WydzeW1ib2wnXTtcbiAgICAgICAgICAgIHJlc3VsdFtzeW1ib2xdID0gdGhpcy5wYXJzZVRyYWRlcyAodHJhZGVzLCBtYXJrZXQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIHBhcnNlT3JkZXIgKG9yZGVyLCBtYXJrZXQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpZCc6IG9yZGVyWydvcmRlck51bWJlciddLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IG9yZGVyWyd0aW1lc3RhbXAnXSxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAob3JkZXJbJ3RpbWVzdGFtcCddKSxcbiAgICAgICAgICAgICdzdGF0dXMnOiBvcmRlclsnc3RhdHVzJ10sXG4gICAgICAgICAgICAnc3ltYm9sJzogbWFya2V0WydzeW1ib2wnXSxcbiAgICAgICAgICAgICd0eXBlJzogb3JkZXJbJ3R5cGUnXSxcbiAgICAgICAgICAgICdzaWRlJzogb3JkZXJbJ3NpZGUnXSxcbiAgICAgICAgICAgICdwcmljZSc6IG9yZGVyWydwcmljZSddLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IG9yZGVyWydhbW91bnQnXSxcbiAgICAgICAgICAgICd0cmFkZXMnOiB0aGlzLnBhcnNlVHJhZGVzIChvcmRlclsncmVzdWx0aW5nVHJhZGVzJ10sIG1hcmtldCksXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoTXlPcGVuT3JkZXJzIChtYXJrZXQgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBtID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAobWFya2V0KVxuICAgICAgICAgICAgbSA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgcGFpciA9IG0gPyBtWydpZCddIDogJ2FsbCc7XG4gICAgICAgIGxldCBvcmRlcnMgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0UmV0dXJuT3Blbk9yZGVycyAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdjdXJyZW5jeVBhaXInOiBwYWlyLFxuICAgICAgICB9KSk7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlT3JkZXJzIChvcmRlcnMsIG0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBpZiAodHlwZSA9PSAnbWFya2V0JylcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyBhbGxvd3MgbGltaXQgb3JkZXJzIG9ubHknKTtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG1ldGhvZCA9ICdwcml2YXRlUG9zdCcgKyB0aGlzLmNhcGl0YWxpemUgKHNpZGUpO1xuICAgICAgICBsZXQgbSA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzW21ldGhvZF0gKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnY3VycmVuY3lQYWlyJzogbVsnaWQnXSxcbiAgICAgICAgICAgICdyYXRlJzogcHJpY2UsXG4gICAgICAgICAgICAnYW1vdW50JzogYW1vdW50LFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgb3JkZXIgPSB0aGlzLnBhcnNlT3JkZXIgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ3N0YXR1cyc6ICdvcGVuJyxcbiAgICAgICAgICAgICd0eXBlJzogdHlwZSxcbiAgICAgICAgICAgICdzaWRlJzogc2lkZSxcbiAgICAgICAgICAgICdwcmljZSc6IHByaWNlLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IGFtb3VudCxcbiAgICAgICAgfSwgcmVzcG9uc2UpLCBtKTtcbiAgICAgICAgbGV0IGlkID0gb3JkZXJbJ2lkJ107XG4gICAgICAgIHRoaXMub3JkZXJzW2lkXSA9IG9yZGVyO1xuICAgICAgICByZXR1cm4gdGhpcy5leHRlbmQgKHsgJ2luZm8nOiByZXNwb25zZSB9LCBvcmRlcik7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXIgKGlkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBvcmRlcnMgPSBhd2FpdCB0aGlzLmZldGNoTXlPcGVuT3JkZXJzICgpO1xuICAgICAgICBsZXQgaW5kZXggPSB0aGlzLmluZGV4QnkgKG9yZGVycywgJ2lkJyk7XG4gICAgICAgIGlmIChpZCBpbiBpbmRleCkge1xuICAgICAgICAgICAgdGhpcy5vcmRlcnNbaWRdID0gaW5kZXhbaWRdO1xuICAgICAgICAgICAgcmV0dXJuIGluZGV4W2lkXTtcbiAgICAgICAgfSBlbHNlIGlmIChpZCBpbiB0aGlzLm9yZGVycykge1xuICAgICAgICAgICAgdGhpcy5vcmRlcnNbaWRdWydzdGF0dXMnXSA9ICdjbG9zZWQnO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMub3JkZXJzW2lkXTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgb3JkZXIgJyArIGlkICsgJyBub3QgZm91bmQnKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlclRyYWRlcyAoaWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCB0cmFkZXMgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0UmV0dXJuT3JkZXJUcmFkZXMgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnb3JkZXJOdW1iZXInOiBpZCxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlVHJhZGVzICh0cmFkZXMpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0Q2FuY2VsT3JkZXIgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnb3JkZXJOdW1iZXInOiBpZCxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ11bYXBpXTtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5leHRlbmQgKHsgJ2NvbW1hbmQnOiBwYXRoIH0sIHBhcmFtcyk7XG4gICAgICAgIGlmIChhcGkgPT0gJ3B1YmxpYycpIHtcbiAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcXVlcnlbJ25vbmNlJ10gPSB0aGlzLm5vbmNlICgpO1xuICAgICAgICAgICAgYm9keSA9IHRoaXMudXJsZW5jb2RlIChxdWVyeSk7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICAgICAgICAnS2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ1NpZ24nOiB0aGlzLmhtYWMgKHRoaXMuZW5jb2RlIChib2R5KSwgdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSwgJ3NoYTUxMicpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgICAgIGlmICgnZXJyb3InIGluIHJlc3BvbnNlKSB7XG4gICAgICAgICAgICBsZXQgZXJyb3IgPSB0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSk7XG4gICAgICAgICAgICBsZXQgZmFpbGVkID0gcmVzcG9uc2VbJ2Vycm9yJ10uaW5kZXhPZiAoJ05vdCBlbm91Z2gnKSA+PSAwO1xuICAgICAgICAgICAgaWYgKGZhaWxlZClcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW5zdWZmaWNpZW50RnVuZHMgKGVycm9yKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yIChlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIHF1YWRyaWdhY3ggPSB7XG5cbiAgICAnaWQnOiAncXVhZHJpZ2FjeCcsXG4gICAgJ25hbWUnOiAnUXVhZHJpZ2FDWCcsXG4gICAgJ2NvdW50cmllcyc6ICdDQScsXG4gICAgJ3JhdGVMaW1pdCc6IDEwMDAsXG4gICAgJ3ZlcnNpb24nOiAndjInLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2ODI1LTk4YTZkMGRlLTVlZTctMTFlNy05ZmE0LTM4ZTExYTJjNmY1Mi5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vYXBpLnF1YWRyaWdhY3guY29tJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy5xdWFkcmlnYWN4LmNvbScsXG4gICAgICAgICdkb2MnOiAnaHR0cHM6Ly93d3cucXVhZHJpZ2FjeC5jb20vYXBpX2luZm8nLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ29yZGVyX2Jvb2snLFxuICAgICAgICAgICAgICAgICd0aWNrZXInLFxuICAgICAgICAgICAgICAgICd0cmFuc2FjdGlvbnMnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnYmFsYW5jZScsXG4gICAgICAgICAgICAgICAgJ2JpdGNvaW5fZGVwb3NpdF9hZGRyZXNzJyxcbiAgICAgICAgICAgICAgICAnYml0Y29pbl93aXRoZHJhd2FsJyxcbiAgICAgICAgICAgICAgICAnYnV5JyxcbiAgICAgICAgICAgICAgICAnY2FuY2VsX29yZGVyJyxcbiAgICAgICAgICAgICAgICAnZXRoZXJfZGVwb3NpdF9hZGRyZXNzJyxcbiAgICAgICAgICAgICAgICAnZXRoZXJfd2l0aGRyYXdhbCcsXG4gICAgICAgICAgICAgICAgJ2xvb2t1cF9vcmRlcicsXG4gICAgICAgICAgICAgICAgJ29wZW5fb3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnc2VsbCcsXG4gICAgICAgICAgICAgICAgJ3VzZXJfdHJhbnNhY3Rpb25zJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9DQUQnOiB7ICdpZCc6ICdidGNfY2FkJywgJ3N5bWJvbCc6ICdCVEMvQ0FEJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ0NBRCcgfSxcbiAgICAgICAgJ0JUQy9VU0QnOiB7ICdpZCc6ICdidGNfdXNkJywgJ3N5bWJvbCc6ICdCVEMvVVNEJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ1VTRCcgfSxcbiAgICAgICAgJ0VUSC9CVEMnOiB7ICdpZCc6ICdldGhfYnRjJywgJ3N5bWJvbCc6ICdFVEgvQlRDJywgJ2Jhc2UnOiAnRVRIJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ0VUSC9DQUQnOiB7ICdpZCc6ICdldGhfY2FkJywgJ3N5bWJvbCc6ICdFVEgvQ0FEJywgJ2Jhc2UnOiAnRVRIJywgJ3F1b3RlJzogJ0NBRCcgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdEJhbGFuY2UgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogYmFsYW5jZXMgfTtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCB0aGlzLmN1cnJlbmNpZXMubGVuZ3RoOyBjKyspIHtcbiAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IHRoaXMuY3VycmVuY2llc1tjXTtcbiAgICAgICAgICAgIGxldCBsb3dlcmNhc2UgPSBjdXJyZW5jeS50b0xvd2VyQ2FzZSAoKTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogcGFyc2VGbG9hdCAoYmFsYW5jZXNbbG93ZXJjYXNlICsgJ19hdmFpbGFibGUnXSksXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiBwYXJzZUZsb2F0IChiYWxhbmNlc1tsb3dlcmNhc2UgKyAnX3Jlc2VydmVkJ10pLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHBhcnNlRmxvYXQgKGJhbGFuY2VzW2xvd2VyY2FzZSArICdfYmFsYW5jZSddKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRPcmRlckJvb2sgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnYm9vayc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gcGFyc2VJbnQgKG9yZGVyYm9va1sndGltZXN0YW1wJ10pICogMTAwMDtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdiaWRzJzogW10sXG4gICAgICAgICAgICAnYXNrcyc6IFtdLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHNpZGVzID0gWyAnYmlkcycsICdhc2tzJyBdO1xuICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IHNpZGVzLmxlbmd0aDsgcysrKSB7XG4gICAgICAgICAgICBsZXQgc2lkZSA9IHNpZGVzW3NdO1xuICAgICAgICAgICAgbGV0IG9yZGVycyA9IG9yZGVyYm9va1tzaWRlXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9yZGVyID0gb3JkZXJzW2ldO1xuICAgICAgICAgICAgICAgIGxldCBwcmljZSA9IHBhcnNlRmxvYXQgKG9yZGVyWzBdKTtcbiAgICAgICAgICAgICAgICBsZXQgYW1vdW50ID0gcGFyc2VGbG9hdCAob3JkZXJbMV0pO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtzaWRlXS5wdXNoIChbIHByaWNlLCBhbW91bnQgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBsZXQgdGlja2VyID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRUaWNrZXIgKHtcbiAgICAgICAgICAgICdib29rJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSBwYXJzZUludCAodGlja2VyWyd0aW1lc3RhbXAnXSkgKiAxMDAwO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydoaWdoJ10pLFxuICAgICAgICAgICAgJ2xvdyc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbG93J10pLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYmlkJ10pLFxuICAgICAgICAgICAgJ2Fzayc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYXNrJ10pLFxuICAgICAgICAgICAgJ3Z3YXAnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3Z3YXAnXSksXG4gICAgICAgICAgICAnb3Blbic6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjbG9zZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdmaXJzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsYXN0JzogcGFyc2VGbG9hdCAodGlja2VyWydsYXN0J10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndm9sdW1lJ10pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldFRyYW5zYWN0aW9ucyAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdib29rJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBtZXRob2QgPSAncHJpdmF0ZVBvc3QnICsgdGhpcy5jYXBpdGFsaXplIChzaWRlKTtcbiAgICAgICAgbGV0IG9yZGVyID0ge1xuICAgICAgICAgICAgJ2Ftb3VudCc6IGFtb3VudCxcbiAgICAgICAgICAgICdib29rJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHR5cGUgPT0gJ2xpbWl0JylcbiAgICAgICAgICAgIG9yZGVyWydwcmljZSddID0gcHJpY2U7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXNbbWV0aG9kXSAodGhpcy5leHRlbmQgKG9yZGVyLCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnaWQnXS50b1N0cmluZyAoKSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdENhbmNlbE9yZGVyICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgJy8nICsgdGhpcy52ZXJzaW9uICsgJy8nICsgcGF0aDtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChwYXJhbXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnVpZClcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXV0aGVudGljYXRpb25FcnJvciAodGhpcy5pZCArICcgcmVxdWlyZXMgYCcgKyB0aGlzLmlkICsgJy51aWRgIHByb3BlcnR5IGZvciBhdXRoZW50aWNhdGlvbicpO1xuICAgICAgICAgICAgbGV0IG5vbmNlID0gdGhpcy5ub25jZSAoKTtcbiAgICAgICAgICAgIGxldCByZXF1ZXN0ID0gWyBub25jZS50b1N0cmluZyAoKSwgdGhpcy51aWQsIHRoaXMuYXBpS2V5IF0uam9pbiAoJycpO1xuICAgICAgICAgICAgbGV0IHNpZ25hdHVyZSA9IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKHJlcXVlc3QpLCB0aGlzLmVuY29kZSAodGhpcy5zZWNyZXQpKTtcbiAgICAgICAgICAgIGxldCBxdWVyeSA9IHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAgICAgJ2tleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgICAgICdub25jZSc6IG5vbmNlLFxuICAgICAgICAgICAgICAgICdzaWduYXR1cmUnOiBzaWduYXR1cmUsXG4gICAgICAgICAgICB9LCBwYXJhbXMpO1xuICAgICAgICAgICAgYm9keSA9IHRoaXMuanNvbiAocXVlcnkpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICdDb250ZW50LUxlbmd0aCc6IGJvZHkubGVuZ3RoLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgICAgIGlmICgnZXJyb3InIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBxdW9pbmUgPSB7XG5cbiAgICAnaWQnOiAncXVvaW5lJyxcbiAgICAnbmFtZSc6ICdRVU9JTkUnLFxuICAgICdjb3VudHJpZXMnOiBbICdKUCcsICdTRycsICdWTicgXSxcbiAgICAndmVyc2lvbic6ICcyJyxcbiAgICAncmF0ZUxpbWl0JzogMTAwMCxcbiAgICAnaGFzRmV0Y2hUaWNrZXJzJzogdHJ1ZSxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yNzc2Njg0NC05NjE1YTRlOC01ZWU4LTExZTctODgxNC1mY2QwMDRkYjhjZGQuanBnJyxcbiAgICAgICAgJ2FwaSc6ICdodHRwczovL2FwaS5xdW9pbmUuY29tJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy5xdW9pbmUuY29tJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL2RldmVsb3BlcnMucXVvaW5lLmNvbScsXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAncHJvZHVjdHMnLFxuICAgICAgICAgICAgICAgICdwcm9kdWN0cy97aWR9JyxcbiAgICAgICAgICAgICAgICAncHJvZHVjdHMve2lkfS9wcmljZV9sZXZlbHMnLFxuICAgICAgICAgICAgICAgICdleGVjdXRpb25zJyxcbiAgICAgICAgICAgICAgICAnaXJfbGFkZGVycy97Y3VycmVuY3l9JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnYWNjb3VudHMvYmFsYW5jZScsXG4gICAgICAgICAgICAgICAgJ2NyeXB0b19hY2NvdW50cycsXG4gICAgICAgICAgICAgICAgJ2V4ZWN1dGlvbnMvbWUnLFxuICAgICAgICAgICAgICAgICdmaWF0X2FjY291bnRzJyxcbiAgICAgICAgICAgICAgICAnbG9hbl9iaWRzJyxcbiAgICAgICAgICAgICAgICAnbG9hbnMnLFxuICAgICAgICAgICAgICAgICdvcmRlcnMnLFxuICAgICAgICAgICAgICAgICdvcmRlcnMve2lkfScsXG4gICAgICAgICAgICAgICAgJ29yZGVycy97aWR9L3RyYWRlcycsXG4gICAgICAgICAgICAgICAgJ3RyYWRlcycsXG4gICAgICAgICAgICAgICAgJ3RyYWRlcy97aWR9L2xvYW5zJyxcbiAgICAgICAgICAgICAgICAndHJhZGluZ19hY2NvdW50cycsXG4gICAgICAgICAgICAgICAgJ3RyYWRpbmdfYWNjb3VudHMve2lkfScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2ZpYXRfYWNjb3VudHMnLFxuICAgICAgICAgICAgICAgICdsb2FuX2JpZHMnLFxuICAgICAgICAgICAgICAgICdvcmRlcnMnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICdwdXQnOiBbXG4gICAgICAgICAgICAgICAgJ2xvYW5fYmlkcy97aWR9L2Nsb3NlJyxcbiAgICAgICAgICAgICAgICAnbG9hbnMve2lkfScsXG4gICAgICAgICAgICAgICAgJ29yZGVycy97aWR9JyxcbiAgICAgICAgICAgICAgICAnb3JkZXJzL3tpZH0vY2FuY2VsJyxcbiAgICAgICAgICAgICAgICAndHJhZGVzL3tpZH0nLFxuICAgICAgICAgICAgICAgICd0cmFkZXMve2lkfS9jbG9zZScsXG4gICAgICAgICAgICAgICAgJ3RyYWRlcy9jbG9zZV9hbGwnLFxuICAgICAgICAgICAgICAgICd0cmFkaW5nX2FjY291bnRzL3tpZH0nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hNYXJrZXRzICgpIHtcbiAgICAgICAgbGV0IG1hcmtldHMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFByb2R1Y3RzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgbWFya2V0cy5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IG1hcmtldHNbcF07XG4gICAgICAgICAgICBsZXQgaWQgPSBtYXJrZXRbJ2lkJ107XG4gICAgICAgICAgICBsZXQgYmFzZSA9IG1hcmtldFsnYmFzZV9jdXJyZW5jeSddO1xuICAgICAgICAgICAgbGV0IHF1b3RlID0gbWFya2V0WydxdW90ZWRfY3VycmVuY3knXTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBiYXNlICsgJy8nICsgcXVvdGU7XG4gICAgICAgICAgICByZXN1bHQucHVzaCAoe1xuICAgICAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICAgICAgICAgICdzeW1ib2wnOiBzeW1ib2wsXG4gICAgICAgICAgICAgICAgJ2Jhc2UnOiBiYXNlLFxuICAgICAgICAgICAgICAgICdxdW90ZSc6IHF1b3RlLFxuICAgICAgICAgICAgICAgICdpbmZvJzogbWFya2V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gYXdhaXQgdGhpcy5wcml2YXRlR2V0QWNjb3VudHNCYWxhbmNlICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGJhbGFuY2VzIH07XG4gICAgICAgIGZvciAobGV0IGIgPSAwOyBiIDwgYmFsYW5jZXMubGVuZ3RoOyBiKyspIHtcbiAgICAgICAgICAgIGxldCBiYWxhbmNlID0gYmFsYW5jZXNbYl07XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBiYWxhbmNlWydjdXJyZW5jeSddO1xuICAgICAgICAgICAgbGV0IHRvdGFsID0gcGFyc2VGbG9hdCAoYmFsYW5jZVsnYmFsYW5jZSddKTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogdG90YWwsXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogdG90YWwsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IGF3YWl0IHRoaXMucHVibGljR2V0UHJvZHVjdHNJZFByaWNlTGV2ZWxzICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2lkJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdiaWRzJzogW10sXG4gICAgICAgICAgICAnYXNrcyc6IFtdLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHNpZGVzID0geyAnYmlkcyc6ICdidXlfcHJpY2VfbGV2ZWxzJywgJ2Fza3MnOiAnc2VsbF9wcmljZV9sZXZlbHMnIH07XG4gICAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMgKHNpZGVzKTtcbiAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBrZXlzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICBsZXQga2V5ID0ga2V5c1trXTtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNba2V5XTtcbiAgICAgICAgICAgIGxldCBvcmRlcnMgPSBvcmRlcmJvb2tbc2lkZV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBvcmRlciA9IG9yZGVyc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgcHJpY2UgPSBwYXJzZUZsb2F0IChvcmRlclswXSk7XG4gICAgICAgICAgICAgICAgbGV0IGFtb3VudCA9IHBhcnNlRmxvYXQgKG9yZGVyWzFdKTtcbiAgICAgICAgICAgICAgICByZXN1bHRba2V5XS5wdXNoIChbIHByaWNlLCBhbW91bnQgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgcGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KSB7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgbGV0IGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmICgnbGFzdF90cmFkZWRfcHJpY2UnIGluIHRpY2tlcikge1xuICAgICAgICAgICAgaWYgKHRpY2tlclsnbGFzdF90cmFkZWRfcHJpY2UnXSkge1xuICAgICAgICAgICAgICAgIGxldCBsZW5ndGggPSB0aWNrZXJbJ2xhc3RfdHJhZGVkX3ByaWNlJ10ubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGlmIChsZW5ndGggPiAwKVxuICAgICAgICAgICAgICAgICAgICBsYXN0ID0gcGFyc2VGbG9hdCAodGlja2VyWydsYXN0X3RyYWRlZF9wcmljZSddKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydoaWdoX21hcmtldF9hc2snXSksXG4gICAgICAgICAgICAnbG93JzogcGFyc2VGbG9hdCAodGlja2VyWydsb3dfbWFya2V0X2JpZCddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ21hcmtldF9iaWQnXSksXG4gICAgICAgICAgICAnYXNrJzogcGFyc2VGbG9hdCAodGlja2VyWydtYXJrZXRfYXNrJ10pLFxuICAgICAgICAgICAgJ3Z3YXAnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnb3Blbic6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjbG9zZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdmaXJzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsYXN0JzogbGFzdCxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbHVtZV8yNGgnXSksXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXJzICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHRpY2tlcnMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFByb2R1Y3RzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge307XG4gICAgICAgIGZvciAobGV0IHQgPSAwOyB0IDwgdGlja2Vycy5sZW5ndGg7IHQrKykge1xuICAgICAgICAgICAgbGV0IHRpY2tlciA9IHRpY2tlcnNbdF07XG4gICAgICAgICAgICBsZXQgYmFzZSA9IHRpY2tlclsnYmFzZV9jdXJyZW5jeSddO1xuICAgICAgICAgICAgbGV0IHF1b3RlID0gdGlja2VyWydxdW90ZWRfY3VycmVuY3knXTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBiYXNlICsgJy8nICsgcXVvdGU7XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gdGhpcy5tYXJrZXRzW3N5bWJvbF07XG4gICAgICAgICAgICByZXN1bHRbc3ltYm9sXSA9IHRoaXMucGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCB0aWNrZXIgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFByb2R1Y3RzSWQgKHtcbiAgICAgICAgICAgICdpZCc6IHBbJ2lkJ10sXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVRpY2tlciAodGlja2VyLCBwKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0RXhlY3V0aW9ucyAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdwcm9kdWN0X2lkJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdvcmRlcl90eXBlJzogdHlwZSxcbiAgICAgICAgICAgICdwcm9kdWN0X2lkJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICdzaWRlJzogc2lkZSxcbiAgICAgICAgICAgICdxdWFudGl0eSc6IGFtb3VudCxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHR5cGUgPT0gJ2xpbWl0JylcbiAgICAgICAgICAgIG9yZGVyWydwcmljZSddID0gcHJpY2U7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RPcmRlcnMgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnb3JkZXInOiBvcmRlcixcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ2lkJzogcmVzcG9uc2VbJ2lkJ10udG9TdHJpbmcgKCksXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJpdmF0ZVB1dE9yZGVyc0lkQ2FuY2VsICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSAnLycgKyB0aGlzLmltcGxvZGVQYXJhbXMgKHBhdGgsIHBhcmFtcyk7XG4gICAgICAgIGxldCBxdWVyeSA9IHRoaXMub21pdCAocGFyYW1zLCB0aGlzLmV4dHJhY3RQYXJhbXMgKHBhdGgpKTtcbiAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICdYLVF1b2luZS1BUEktVmVyc2lvbic6IHRoaXMudmVyc2lvbixcbiAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgIH07XG4gICAgICAgIGlmIChhcGkgPT0gJ3B1YmxpYycpIHtcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyAocXVlcnkpLmxlbmd0aClcbiAgICAgICAgICAgICAgICB1cmwgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHF1ZXJ5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCk7XG4gICAgICAgICAgICBsZXQgcmVxdWVzdCA9IHtcbiAgICAgICAgICAgICAgICAncGF0aCc6IHVybCxcbiAgICAgICAgICAgICAgICAnbm9uY2UnOiBub25jZSxcbiAgICAgICAgICAgICAgICAndG9rZW5faWQnOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgICAgICAnaWF0JzogTWF0aC5mbG9vciAobm9uY2UgLyAxMDAwKSwgLy8gaXNzdWVkIGF0XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChxdWVyeSkubGVuZ3RoKVxuICAgICAgICAgICAgICAgIGJvZHkgPSB0aGlzLmpzb24gKHF1ZXJ5KTtcbiAgICAgICAgICAgIGhlYWRlcnNbJ1gtUXVvaW5lLUF1dGgnXSA9IHRoaXMuand0IChyZXF1ZXN0LCB0aGlzLnNlY3JldCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCAodGhpcy51cmxzWydhcGknXSArIHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdtZXNzYWdlJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgc291dGh4Y2hhbmdlID0ge1xuXG4gICAgJ2lkJzogJ3NvdXRoeGNoYW5nZScsXG4gICAgJ25hbWUnOiAnU291dGhYY2hhbmdlJyxcbiAgICAnY291bnRyaWVzJzogJ0FSJywgLy8gQXJnZW50aW5hXG4gICAgJ3JhdGVMaW1pdCc6IDEwMDAsXG4gICAgJ2hhc0ZldGNoVGlja2Vycyc6IHRydWUsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc4Mzg5MTItNGY5NGVjOGEtNjBmNi0xMWU3LTllNWQtYmJmOWJkNTBhNTU5LmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly93d3cuc291dGh4Y2hhbmdlLmNvbS9hcGknLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vd3d3LnNvdXRoeGNoYW5nZS5jb20nLFxuICAgICAgICAnZG9jJzogJ2h0dHBzOi8vd3d3LnNvdXRoeGNoYW5nZS5jb20vSG9tZS9BcGknLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ21hcmtldHMnLFxuICAgICAgICAgICAgICAgICdwcmljZS97c3ltYm9sfScsXG4gICAgICAgICAgICAgICAgJ3ByaWNlcycsXG4gICAgICAgICAgICAgICAgJ2Jvb2sve3N5bWJvbH0nLFxuICAgICAgICAgICAgICAgICd0cmFkZXMve3N5bWJvbH0nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnY2FuY2VsTWFya2V0T3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnY2FuY2VsT3JkZXInLFxuICAgICAgICAgICAgICAgICdnZW5lcmF0ZW5ld2FkZHJlc3MnLFxuICAgICAgICAgICAgICAgICdsaXN0T3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnbGlzdEJhbGFuY2VzJyxcbiAgICAgICAgICAgICAgICAncGxhY2VPcmRlcicsXG4gICAgICAgICAgICAgICAgJ3dpdGhkcmF3JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoTWFya2V0cyAoKSB7XG4gICAgICAgIGxldCBtYXJrZXRzID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgbWFya2V0cy5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IG1hcmtldHNbcF07XG4gICAgICAgICAgICBsZXQgYmFzZSA9IG1hcmtldFswXTtcbiAgICAgICAgICAgIGxldCBxdW90ZSA9IG1hcmtldFsxXTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBiYXNlICsgJy8nICsgcXVvdGU7XG4gICAgICAgICAgICBsZXQgaWQgPSBzeW1ib2w7XG4gICAgICAgICAgICByZXN1bHQucHVzaCAoe1xuICAgICAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICAgICAgICAgICdzeW1ib2wnOiBzeW1ib2wsXG4gICAgICAgICAgICAgICAgJ2Jhc2UnOiBiYXNlLFxuICAgICAgICAgICAgICAgICdxdW90ZSc6IHF1b3RlLFxuICAgICAgICAgICAgICAgICdpbmZvJzogbWFya2V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdExpc3RCYWxhbmNlcyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiBiYWxhbmNlcyB9O1xuICAgICAgICBmb3IgKGxldCBiID0gMDsgYiA8IGJhbGFuY2VzLmxlbmd0aDsgYisrKSB7XG4gICAgICAgICAgICBsZXQgYmFsYW5jZSA9IGJhbGFuY2VzW2JdO1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gYmFsYW5jZVsnQ3VycmVuY3knXTtcbiAgICAgICAgICAgIGxldCB1cHBlcmNhc2UgPSBjdXJyZW5jeS51cHBlcmNhc2U7XG4gICAgICAgICAgICBsZXQgZnJlZSA9IHBhcnNlRmxvYXQgKGJhbGFuY2VbJ0F2YWlsYWJsZSddKTtcbiAgICAgICAgICAgIGxldCB1c2VkID0gcGFyc2VGbG9hdCAoYmFsYW5jZVsnVW5jb25maXJtZWQnXSk7XG4gICAgICAgICAgICBsZXQgdG90YWwgPSB0aGlzLnN1bSAoZnJlZSwgdXNlZCk7XG4gICAgICAgICAgICBsZXQgYWNjb3VudCA9IHtcbiAgICAgICAgICAgICAgICAnZnJlZSc6IGZyZWUsXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1c2VkLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHRvdGFsLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlc3VsdFtjdXJyZW5jeV0gPSBhY2NvdW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSBhd2FpdCB0aGlzLnB1YmxpY0dldEJvb2tTeW1ib2wgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnc3ltYm9sJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdiaWRzJzogW10sXG4gICAgICAgICAgICAnYXNrcyc6IFtdLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHNpZGVzID0geyAnYmlkcyc6ICdCdXlPcmRlcnMnLCAnYXNrcyc6ICdTZWxsT3JkZXJzJyB9O1xuICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzIChzaWRlcyk7XG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwga2V5cy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgbGV0IGtleSA9IGtleXNba107XG4gICAgICAgICAgICBsZXQgc2lkZSA9IHNpZGVzW2tleV07XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAob3JkZXJbJ1ByaWNlJ10pO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBwYXJzZUZsb2F0IChvcmRlclsnQW1vdW50J10pO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldLnB1c2ggKFsgcHJpY2UsIGFtb3VudCBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBwYXJzZVRpY2tlciAodGlja2VyLCBtYXJrZXQpIHtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgYmlkID0gdW5kZWZpbmVkO1xuICAgICAgICBsZXQgYXNrID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoJ0JpZCcgaW4gdGlja2VyKVxuICAgICAgICAgICAgaWYgKHRpY2tlclsnQmlkJ10pXG4gICAgICAgICAgICAgICAgYmlkID0gcGFyc2VGbG9hdCAodGlja2VyWydCaWQnXSk7XG4gICAgICAgIGlmICgnQXNrJyBpbiB0aWNrZXIpXG4gICAgICAgICAgICBpZiAodGlja2VyWydBc2snXSlcbiAgICAgICAgICAgICAgICBhc2sgPSBwYXJzZUZsb2F0ICh0aWNrZXJbJ0FzayddKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsb3cnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmlkJzogYmlkLFxuICAgICAgICAgICAgJ2Fzayc6IGFzayxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnTGFzdCddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ1ZhcmlhdGlvbjI0SHInXSksXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ1ZvbHVtZTI0SHInXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXJzICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRQcmljZXMgKCk7XG4gICAgICAgIGxldCB0aWNrZXJzID0gdGhpcy5pbmRleEJ5IChyZXNwb25zZSwgJ01hcmtldCcpO1xuICAgICAgICBsZXQgaWRzID0gT2JqZWN0LmtleXMgKHRpY2tlcnMpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge307XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgaWQgPSBpZHNbaV07XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gdGhpcy5tYXJrZXRzX2J5X2lkW2lkXTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBtYXJrZXRbJ3N5bWJvbCddO1xuICAgICAgICAgICAgbGV0IHRpY2tlciA9IHRpY2tlcnNbaWRdO1xuICAgICAgICAgICAgcmVzdWx0W3N5bWJvbF0gPSB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIG1hcmtldCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgdGlja2VyID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRQcmljZVN5bWJvbCAoe1xuICAgICAgICAgICAgJ3N5bWJvbCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVRpY2tlciAodGlja2VyLCBwKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0VHJhZGVzU3ltYm9sICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ3N5bWJvbCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAnbGlzdGluZ0N1cnJlbmN5JzogcFsnYmFzZSddLFxuICAgICAgICAgICAgJ3JlZmVyZW5jZUN1cnJlbmN5JzogcFsncXVvdGUnXSxcbiAgICAgICAgICAgICd0eXBlJzogc2lkZSxcbiAgICAgICAgICAgICdhbW91bnQnOiBhbW91bnQsXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlID09ICdsaW1pdCcpXG4gICAgICAgICAgICBvcmRlclsnbGltaXRQcmljZSddID0gcHJpY2U7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RQbGFjZU9yZGVyICh0aGlzLmV4dGVuZCAob3JkZXIsIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXNwb25zZSxcbiAgICAgICAgICAgICdpZCc6IHJlc3BvbnNlLnRvU3RyaW5nICgpLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0Q2FuY2VsT3JkZXIgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnb3JkZXJDb2RlJzogaWQsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgJy8nICsgdGhpcy5pbXBsb2RlUGFyYW1zIChwYXRoLCBwYXJhbXMpO1xuICAgICAgICBsZXQgcXVlcnkgPSB0aGlzLm9taXQgKHBhcmFtcywgdGhpcy5leHRyYWN0UGFyYW1zIChwYXRoKSk7XG4gICAgICAgIGlmIChhcGkgPT0gJ3ByaXZhdGUnKSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpO1xuICAgICAgICAgICAgcXVlcnkgPSB0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgICAgICdrZXknOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgICAgICAnbm9uY2UnOiBub25jZSxcbiAgICAgICAgICAgIH0sIHF1ZXJ5KTtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLmpzb24gKHF1ZXJ5KTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAnSGFzaCc6IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKGJvZHkpLCB0aGlzLmVuY29kZSAodGhpcy5zZWNyZXQpLCAnc2hhNTEyJyksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgLy8gaWYgKCFyZXNwb25zZSlcbiAgICAgICAgLy8gICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgc3VyYml0Y29pbiA9IGV4dGVuZCAoYmxpbmt0cmFkZSwge1xuICAgICdpZCc6ICdzdXJiaXRjb2luJyxcbiAgICAnbmFtZSc6ICdTdXJCaXRjb2luJyxcbiAgICAnY291bnRyaWVzJzogJ1ZFJyxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yNzk5MTUxMS1mMGE1MDE5NC02NDgxLTExZTctOTliNS04ZjAyOTMyNDI0Y2MuanBnJyxcbiAgICAgICAgJ2FwaSc6IHtcbiAgICAgICAgICAgICdwdWJsaWMnOiAnaHR0cHM6Ly9hcGkuYmxpbmt0cmFkZS5jb20vYXBpJyxcbiAgICAgICAgICAgICdwcml2YXRlJzogJ2h0dHBzOi8vYXBpLmJsaW5rdHJhZGUuY29tL3RhcGknLFxuICAgICAgICB9LFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vc3VyYml0Y29pbi5jb20nLFxuICAgICAgICAnZG9jJzogJ2h0dHBzOi8vYmxpbmt0cmFkZS5jb20vZG9jcycsXG4gICAgfSxcbiAgICAnY29tbWVudCc6ICdCbGlua3RyYWRlIEFQSScsXG4gICAgJ21hcmtldHMnOiB7XG4gICAgICAgICdCVEMvVkVGJzogeyAnaWQnOiAnQlRDVkVGJywgJ3N5bWJvbCc6ICdCVEMvVkVGJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ1ZFRicsICdicm9rZXJJZCc6IDEsICdicm9rZXInOiAnU3VyQml0Y29pbicgfSxcbiAgICB9LFxufSlcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgdGhlcm9jayA9IHtcblxuICAgICdpZCc6ICd0aGVyb2NrJyxcbiAgICAnbmFtZSc6ICdUaGVSb2NrVHJhZGluZycsXG4gICAgJ2NvdW50cmllcyc6ICdNVCcsXG4gICAgJ3JhdGVMaW1pdCc6IDEwMDAsXG4gICAgJ3ZlcnNpb24nOiAndjEnLFxuICAgICdoYXNGZXRjaFRpY2tlcnMnOiB0cnVlLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2ODY5LTc1MDU3ZmEyLTVlZTktMTFlNy05YTZmLTEzZTY0MWZhNDcwNy5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vYXBpLnRoZXJvY2t0cmFkaW5nLmNvbScsXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly90aGVyb2NrdHJhZGluZy5jb20nLFxuICAgICAgICAnZG9jJzogW1xuICAgICAgICAgICAgJ2h0dHBzOi8vYXBpLnRoZXJvY2t0cmFkaW5nLmNvbS9kb2MvdjEvaW5kZXguaHRtbCcsXG4gICAgICAgICAgICAnaHR0cHM6Ly9hcGkudGhlcm9ja3RyYWRpbmcuY29tL2RvYy8nLFxuICAgICAgICBdLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ2Z1bmRzL3tpZH0vb3JkZXJib29rJyxcbiAgICAgICAgICAgICAgICAnZnVuZHMve2lkfS90aWNrZXInLFxuICAgICAgICAgICAgICAgICdmdW5kcy97aWR9L3RyYWRlcycsXG4gICAgICAgICAgICAgICAgJ2Z1bmRzL3RpY2tlcnMnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdiYWxhbmNlcycsXG4gICAgICAgICAgICAgICAgJ2JhbGFuY2VzL3tpZH0nLFxuICAgICAgICAgICAgICAgICdkaXNjb3VudHMnLFxuICAgICAgICAgICAgICAgICdkaXNjb3VudHMve2lkfScsXG4gICAgICAgICAgICAgICAgJ2Z1bmRzJyxcbiAgICAgICAgICAgICAgICAnZnVuZHMve2lkfScsXG4gICAgICAgICAgICAgICAgJ2Z1bmRzL3tpZH0vdHJhZGVzJyxcbiAgICAgICAgICAgICAgICAnZnVuZHMve2Z1bmRfaWR9L29yZGVycycsXG4gICAgICAgICAgICAgICAgJ2Z1bmRzL3tmdW5kX2lkfS9vcmRlcnMve2lkfScsXG4gICAgICAgICAgICAgICAgJ2Z1bmRzL3tmdW5kX2lkfS9wb3NpdGlvbl9iYWxhbmNlcycsXG4gICAgICAgICAgICAgICAgJ2Z1bmRzL3tmdW5kX2lkfS9wb3NpdGlvbnMnLFxuICAgICAgICAgICAgICAgICdmdW5kcy97ZnVuZF9pZH0vcG9zaXRpb25zL3tpZH0nLFxuICAgICAgICAgICAgICAgICd0cmFuc2FjdGlvbnMnLFxuICAgICAgICAgICAgICAgICd0cmFuc2FjdGlvbnMve2lkfScsXG4gICAgICAgICAgICAgICAgJ3dpdGhkcmF3X2xpbWl0cy97aWR9JyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXdfbGltaXRzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnYXRtcy93aXRoZHJhdycsXG4gICAgICAgICAgICAgICAgJ2Z1bmRzL3tmdW5kX2lkfS9vcmRlcnMnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICdkZWxldGUnOiBbXG4gICAgICAgICAgICAgICAgJ2Z1bmRzL3tmdW5kX2lkfS9vcmRlcnMve2lkfScsXG4gICAgICAgICAgICAgICAgJ2Z1bmRzL3tmdW5kX2lkfS9vcmRlcnMvcmVtb3ZlX2FsbCcsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE1hcmtldHMgKCkge1xuICAgICAgICBsZXQgbWFya2V0cyA9IGF3YWl0IHRoaXMucHVibGljR2V0RnVuZHNUaWNrZXJzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgbWFya2V0c1sndGlja2VycyddLmxlbmd0aDsgcCsrKSB7XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gbWFya2V0c1sndGlja2VycyddW3BdO1xuICAgICAgICAgICAgbGV0IGlkID0gbWFya2V0WydmdW5kX2lkJ107XG4gICAgICAgICAgICBsZXQgYmFzZSA9IGlkLnNsaWNlICgwLCAzKTtcbiAgICAgICAgICAgIGxldCBxdW90ZSA9IGlkLnNsaWNlICgzLCA2KTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBiYXNlICsgJy8nICsgcXVvdGU7XG4gICAgICAgICAgICByZXN1bHQucHVzaCAoe1xuICAgICAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICAgICAgICAgICdzeW1ib2wnOiBzeW1ib2wsXG4gICAgICAgICAgICAgICAgJ2Jhc2UnOiBiYXNlLFxuICAgICAgICAgICAgICAgICdxdW90ZSc6IHF1b3RlLFxuICAgICAgICAgICAgICAgICdpbmZvJzogbWFya2V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlR2V0QmFsYW5jZXMgKCk7XG4gICAgICAgIGxldCBiYWxhbmNlcyA9IHJlc3BvbnNlWydiYWxhbmNlcyddO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IHJlc3BvbnNlIH07XG4gICAgICAgIGZvciAobGV0IGIgPSAwOyBiIDwgYmFsYW5jZXMubGVuZ3RoOyBiKyspIHtcbiAgICAgICAgICAgIGxldCBiYWxhbmNlID0gYmFsYW5jZXNbYl07XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBiYWxhbmNlWydjdXJyZW5jeSddO1xuICAgICAgICAgICAgbGV0IGZyZWUgPSBiYWxhbmNlWyd0cmFkaW5nX2JhbGFuY2UnXTtcbiAgICAgICAgICAgIGxldCB0b3RhbCA9IGJhbGFuY2VbJ2JhbGFuY2UnXTtcbiAgICAgICAgICAgIGxldCB1c2VkID0gdG90YWwgLSBmcmVlO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiBmcmVlLFxuICAgICAgICAgICAgICAgICd1c2VkJzogdXNlZCxcbiAgICAgICAgICAgICAgICAndG90YWwnOiB0b3RhbCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRGdW5kc0lkT3JkZXJib29rICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2lkJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLnBhcnNlODYwMSAob3JkZXJib29rWydkYXRlJ10pO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAob3JkZXJbJ3ByaWNlJ10pO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBwYXJzZUZsb2F0IChvcmRlclsnYW1vdW50J10pO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtzaWRlXS5wdXNoIChbIHByaWNlLCBhbW91bnQgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgcGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KSB7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLnBhcnNlODYwMSAodGlja2VyWydkYXRlJ10pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydoaWdoJ10pLFxuICAgICAgICAgICAgJ2xvdyc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbG93J10pLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYmlkJ10pLFxuICAgICAgICAgICAgJ2Fzayc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYXNrJ10pLFxuICAgICAgICAgICAgJ3Z3YXAnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnb3Blbic6IHBhcnNlRmxvYXQgKHRpY2tlclsnb3BlbiddKSxcbiAgICAgICAgICAgICdjbG9zZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsnY2xvc2UnXSksXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdCddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbHVtZV90cmFkZWQnXSksXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbHVtZSddKSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlcnMgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldEZ1bmRzVGlja2VycyAoKTtcbiAgICAgICAgbGV0IHRpY2tlcnMgPSB0aGlzLmluZGV4QnkgKHJlc3BvbnNlWyd0aWNrZXJzJ10sICdmdW5kX2lkJyk7XG4gICAgICAgIGxldCBpZHMgPSBPYmplY3Qua2V5cyAodGlja2Vycyk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7fTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCBpZCA9IGlkc1tpXTtcbiAgICAgICAgICAgIGxldCBtYXJrZXQgPSB0aGlzLm1hcmtldHNfYnlfaWRbaWRdO1xuICAgICAgICAgICAgbGV0IHN5bWJvbCA9IG1hcmtldFsnc3ltYm9sJ107XG4gICAgICAgICAgICBsZXQgdGlja2VyID0gdGlja2Vyc1tpZF07XG4gICAgICAgICAgICByZXN1bHRbc3ltYm9sXSA9IHRoaXMucGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCB0aWNrZXIgPSBhd2FpdCB0aGlzLnB1YmxpY0dldEZ1bmRzSWRUaWNrZXIgKHtcbiAgICAgICAgICAgICdpZCc6IHBbJ2lkJ10sXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVRpY2tlciAodGlja2VyLCBwKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0RnVuZHNJZFRyYWRlcyAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdpZCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBpZiAodHlwZSA9PSAnbWFya2V0JylcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyBhbGxvd3MgbGltaXQgb3JkZXJzIG9ubHknKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdEZ1bmRzRnVuZElkT3JkZXJzICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2Z1bmRfaWQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICAgICAgJ3NpZGUnOiBzaWRlLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IGFtb3VudCxcbiAgICAgICAgICAgICdwcmljZSc6IHByaWNlLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnaWQnXS50b1N0cmluZyAoKSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlRGVsZXRlRnVuZHNGdW5kSWRPcmRlcnNJZCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArICcvJyArIHRoaXMudmVyc2lvbiArICcvJyArIHRoaXMuaW1wbG9kZVBhcmFtcyAocGF0aCwgcGFyYW1zKTtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5vbWl0IChwYXJhbXMsIHRoaXMuZXh0cmFjdFBhcmFtcyAocGF0aCkpO1xuICAgICAgICBpZiAoYXBpID09ICdwcml2YXRlJykge1xuICAgICAgICAgICAgbGV0IG5vbmNlID0gdGhpcy5ub25jZSAoKS50b1N0cmluZyAoKTtcbiAgICAgICAgICAgIGxldCBhdXRoID0gbm9uY2UgKyB1cmw7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdYLVRSVC1LRVknOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgICAgICAnWC1UUlQtTk9OQ0UnOiBub25jZSxcbiAgICAgICAgICAgICAgICAnWC1UUlQtU0lHTic6IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKGF1dGgpLCB0aGlzLmVuY29kZSAodGhpcy5zZWNyZXQpLCAnc2hhNTEyJyksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChxdWVyeSkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgYm9keSA9IHRoaXMuanNvbiAocXVlcnkpO1xuICAgICAgICAgICAgICAgIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gJ2FwcGxpY2F0aW9uL2pzb24nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdlcnJvcnMnIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciB1cmR1Yml0ID0gZXh0ZW5kIChibGlua3RyYWRlLCB7XG4gICAgJ2lkJzogJ3VyZHViaXQnLFxuICAgICduYW1lJzogJ1VyZHVCaXQnLFxuICAgICdjb3VudHJpZXMnOiAnUEsnLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3OTkxNDUzLTE1NmJmM2FlLTY0ODAtMTFlNy04MmViLTcyOTVmZTFiNWJiNC5qcGcnLFxuICAgICAgICAnYXBpJzoge1xuICAgICAgICAgICAgJ3B1YmxpYyc6ICdodHRwczovL2FwaS5ibGlua3RyYWRlLmNvbS9hcGknLFxuICAgICAgICAgICAgJ3ByaXZhdGUnOiAnaHR0cHM6Ly9hcGkuYmxpbmt0cmFkZS5jb20vdGFwaScsXG4gICAgICAgIH0sXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly91cmR1Yml0LmNvbScsXG4gICAgICAgICdkb2MnOiAnaHR0cHM6Ly9ibGlua3RyYWRlLmNvbS9kb2NzJyxcbiAgICB9LFxuICAgICdjb21tZW50JzogJ0JsaW5rdHJhZGUgQVBJJyxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9QS1InOiB7ICdpZCc6ICdCVENQS1InLCAnc3ltYm9sJzogJ0JUQy9QS1InLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnUEtSJywgJ2Jyb2tlcklkJzogOCwgJ2Jyb2tlcic6ICdVcmR1Qml0JyB9LFxuICAgIH0sXG59KVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciB2YXVsdG9ybyA9IHtcblxuICAgICdpZCc6ICd2YXVsdG9ybycsXG4gICAgJ25hbWUnOiAnVmF1bHRvcm8nLFxuICAgICdjb3VudHJpZXMnOiAnQ0gnLFxuICAgICdyYXRlTGltaXQnOiAxMDAwLFxuICAgICd2ZXJzaW9uJzogJzEnLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2ODgwLWYyMDVlODcwLTVlZTktMTFlNy04ZmUyLTBkNWIxNTg4MDc1Mi5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vYXBpLnZhdWx0b3JvLmNvbScsXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly93d3cudmF1bHRvcm8uY29tJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL2FwaS52YXVsdG9yby5jb20nLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ2JpZGFuZGFzaycsXG4gICAgICAgICAgICAgICAgJ2J1eW9yZGVycycsXG4gICAgICAgICAgICAgICAgJ2xhdGVzdCcsXG4gICAgICAgICAgICAgICAgJ2xhdGVzdHRyYWRlcycsXG4gICAgICAgICAgICAgICAgJ21hcmtldHMnLFxuICAgICAgICAgICAgICAgICdvcmRlcmJvb2snLFxuICAgICAgICAgICAgICAgICdzZWxsb3JkZXJzJyxcbiAgICAgICAgICAgICAgICAndHJhbnNhY3Rpb25zL2RheScsXG4gICAgICAgICAgICAgICAgJ3RyYW5zYWN0aW9ucy9ob3VyJyxcbiAgICAgICAgICAgICAgICAndHJhbnNhY3Rpb25zL21vbnRoJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnYmFsYW5jZScsXG4gICAgICAgICAgICAgICAgJ215dHJhZGVzJyxcbiAgICAgICAgICAgICAgICAnb3JkZXJzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnYnV5L3tzeW1ib2x9L3t0eXBlfScsXG4gICAgICAgICAgICAgICAgJ2NhbmNlbC97aWR9JyxcbiAgICAgICAgICAgICAgICAnc2VsbC97c3ltYm9sfS97dHlwZX0nLFxuICAgICAgICAgICAgICAgICd3aXRoZHJhdycsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE1hcmtldHMgKCkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGxldCBtYXJrZXRzID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgbWFya2V0ID0gbWFya2V0c1snZGF0YSddO1xuICAgICAgICBsZXQgYmFzZSA9IG1hcmtldFsnQmFzZUN1cnJlbmN5J107XG4gICAgICAgIGxldCBxdW90ZSA9IG1hcmtldFsnTWFya2V0Q3VycmVuY3knXTtcbiAgICAgICAgbGV0IHN5bWJvbCA9IGJhc2UgKyAnLycgKyBxdW90ZTtcbiAgICAgICAgbGV0IGJhc2VJZCA9IGJhc2U7XG4gICAgICAgIGxldCBxdW90ZUlkID0gcXVvdGU7XG4gICAgICAgIGxldCBpZCA9IG1hcmtldFsnTWFya2V0TmFtZSddO1xuICAgICAgICByZXN1bHQucHVzaCAoe1xuICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgJ2Jhc2UnOiBiYXNlLFxuICAgICAgICAgICAgJ3F1b3RlJzogcXVvdGUsXG4gICAgICAgICAgICAnYmFzZUlkJzogYmFzZUlkLFxuICAgICAgICAgICAgJ3F1b3RlSWQnOiBxdW90ZUlkLFxuICAgICAgICAgICAgJ2luZm8nOiBtYXJrZXQsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVHZXRCYWxhbmNlICgpO1xuICAgICAgICBsZXQgYmFsYW5jZXMgPSByZXNwb25zZVsnZGF0YSddO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGJhbGFuY2VzIH07XG4gICAgICAgIGZvciAobGV0IGIgPSAwOyBiIDwgYmFsYW5jZXMubGVuZ3RoOyBiKyspIHtcbiAgICAgICAgICAgIGxldCBiYWxhbmNlID0gYmFsYW5jZXNbYl07XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBiYWxhbmNlWydjdXJyZW5jeV9jb2RlJ107XG4gICAgICAgICAgICBsZXQgdXBwZXJjYXNlID0gY3VycmVuY3kudG9VcHBlckNhc2UgKCk7XG4gICAgICAgICAgICBsZXQgZnJlZSA9IGJhbGFuY2VbJ2Nhc2gnXTtcbiAgICAgICAgICAgIGxldCB1c2VkID0gYmFsYW5jZVsncmVzZXJ2ZWQnXTtcbiAgICAgICAgICAgIGxldCB0b3RhbCA9IHRoaXMuc3VtIChmcmVlLCB1c2VkKTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogZnJlZSxcbiAgICAgICAgICAgICAgICAndXNlZCc6IHVzZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogdG90YWwsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRPcmRlcmJvb2sgKHBhcmFtcyk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IHJlc3BvbnNlWydkYXRhJ11bMF1bJ2InXSxcbiAgICAgICAgICAgICdhc2tzJzogcmVzcG9uc2VbJ2RhdGEnXVsxXVsncyddLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IFtdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaWRlcyA9IFsgJ2JpZHMnLCAnYXNrcycgXTtcbiAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBzaWRlcy5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1tzXTtcbiAgICAgICAgICAgIGxldCBvcmRlcnMgPSBvcmRlcmJvb2tbc2lkZV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBvcmRlciA9IG9yZGVyc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgcHJpY2UgPSBvcmRlclsnR29sZF9QcmljZSddO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBvcmRlclsnR29sZF9BbW91bnQnXTtcbiAgICAgICAgICAgICAgICByZXN1bHRbc2lkZV0ucHVzaCAoWyBwcmljZSwgYW1vdW50IF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlc3VsdFsnYmlkcyddID0gdGhpcy5zb3J0QnkgKHJlc3VsdFsnYmlkcyddLCAwLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcXVvdGUgPSBhd2FpdCB0aGlzLnB1YmxpY0dldEJpZGFuZGFzayAoKTtcbiAgICAgICAgbGV0IGJpZHNMZW5ndGggPSBxdW90ZVsnYmlkcyddLmxlbmd0aDtcbiAgICAgICAgbGV0IGJpZCA9IHF1b3RlWydiaWRzJ11bYmlkc0xlbmd0aCAtIDFdO1xuICAgICAgICBsZXQgYXNrID0gcXVvdGVbJ2Fza3MnXVswXTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgdGlja2VyID0gcmVzcG9uc2VbJ2RhdGEnXTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWycyNGhIaWdoJ10pLFxuICAgICAgICAgICAgJ2xvdyc6IHBhcnNlRmxvYXQgKHRpY2tlclsnMjRoTG93J10pLFxuICAgICAgICAgICAgJ2JpZCc6IGJpZFswXSxcbiAgICAgICAgICAgICdhc2snOiBhc2tbMF0sXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ0xhc3RQcmljZSddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJzI0aFZvbHVtZSddKSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wdWJsaWNHZXRUcmFuc2FjdGlvbnNEYXkgKHBhcmFtcyk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCBtZXRob2QgPSAncHJpdmF0ZVBvc3QnICsgdGhpcy5jYXBpdGFsaXplIChzaWRlKSArICdTeW1ib2xUeXBlJztcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpc1ttZXRob2RdICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ3N5bWJvbCc6IHBbJ3F1b3RlSWQnXS50b0xvd2VyQ2FzZSAoKSxcbiAgICAgICAgICAgICd0eXBlJzogdHlwZSxcbiAgICAgICAgICAgICdnbGQnOiBhbW91bnQsXG4gICAgICAgICAgICAncHJpY2UnOiBwcmljZSB8fCAxLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnZGF0YSddWydPcmRlcl9JRCddLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0Q2FuY2VsSWQgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnaWQnOiBpZCxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ10gKyAnLyc7XG4gICAgICAgIGlmIChhcGkgPT0gJ3B1YmxpYycpIHtcbiAgICAgICAgICAgIHVybCArPSBwYXRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG5vbmNlID0gdGhpcy5ub25jZSAoKTtcbiAgICAgICAgICAgIHVybCArPSB0aGlzLnZlcnNpb24gKyAnLycgKyB0aGlzLmltcGxvZGVQYXJhbXMgKHBhdGgsIHBhcmFtcyk7XG4gICAgICAgICAgICBsZXQgcXVlcnkgPSB0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgICAgICdub25jZSc6IG5vbmNlLFxuICAgICAgICAgICAgICAgICdhcGlrZXknOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgIH0sIHRoaXMub21pdCAocGFyYW1zLCB0aGlzLmV4dHJhY3RQYXJhbXMgKHBhdGgpKSk7XG4gICAgICAgICAgICB1cmwgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHF1ZXJ5KTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAnWC1TaWduYXR1cmUnOiB0aGlzLmhtYWMgKHRoaXMuZW5jb2RlICh1cmwpLCB0aGlzLmVuY29kZSAodGhpcy5zZWNyZXQpKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIHZidGMgPSBleHRlbmQgKGJsaW5rdHJhZGUsIHtcbiAgICAnaWQnOiAndmJ0YycsXG4gICAgJ25hbWUnOiAnVkJUQycsXG4gICAgJ2NvdW50cmllcyc6ICdWTicsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc5OTE0ODEtMWY1M2QxZDgtNjQ4MS0xMWU3LTg4NGUtMjFkMTdlNzkzOWRiLmpwZycsXG4gICAgICAgICdhcGknOiB7XG4gICAgICAgICAgICAncHVibGljJzogJ2h0dHBzOi8vYXBpLmJsaW5rdHJhZGUuY29tL2FwaScsXG4gICAgICAgICAgICAncHJpdmF0ZSc6ICdodHRwczovL2FwaS5ibGlua3RyYWRlLmNvbS90YXBpJyxcbiAgICAgICAgfSxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3ZidGMuZXhjaGFuZ2UnLFxuICAgICAgICAnZG9jJzogJ2h0dHBzOi8vYmxpbmt0cmFkZS5jb20vZG9jcycsXG4gICAgfSxcbiAgICAnY29tbWVudCc6ICdCbGlua3RyYWRlIEFQSScsXG4gICAgJ21hcmtldHMnOiB7XG4gICAgICAgICdCVEMvVk5EJzogeyAnaWQnOiAnQlRDVk5EJywgJ3N5bWJvbCc6ICdCVEMvVk5EJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ1ZORCcsICdicm9rZXJJZCc6IDMsICdicm9rZXInOiAnVkJUQycgfSxcbiAgICB9LFxufSlcblxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciB2aXJ3b3ggPSB7XG5cbiAgICAnaWQnOiAndmlyd294JyxcbiAgICAnbmFtZSc6ICdWaXJXb1gnLFxuICAgICdjb3VudHJpZXMnOiAnQVQnLFxuICAgICdyYXRlTGltaXQnOiAxMDAwLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2ODk0LTZkYTlkMzYwLTVlZWEtMTFlNy05MGFhLTQxZjI3MTFiNzQwNS5qcGcnLFxuICAgICAgICAnYXBpJzoge1xuICAgICAgICAgICAgJ3B1YmxpYyc6ICdodHRwOi8vYXBpLnZpcndveC5jb20vYXBpL2pzb24ucGhwJyxcbiAgICAgICAgICAgICdwcml2YXRlJzogJ2h0dHBzOi8vd3d3LnZpcndveC5jb20vYXBpL3RyYWRpbmcucGhwJyxcbiAgICAgICAgfSxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy52aXJ3b3guY29tJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL3d3dy52aXJ3b3guY29tL2RldmVsb3BlcnMucGhwJyxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdnZXRJbnN0cnVtZW50cycsXG4gICAgICAgICAgICAgICAgJ2dldEJlc3RQcmljZXMnLFxuICAgICAgICAgICAgICAgICdnZXRNYXJrZXREZXB0aCcsXG4gICAgICAgICAgICAgICAgJ2VzdGltYXRlTWFya2V0T3JkZXInLFxuICAgICAgICAgICAgICAgICdnZXRUcmFkZWRQcmljZVZvbHVtZScsXG4gICAgICAgICAgICAgICAgJ2dldFJhd1RyYWRlRGF0YScsXG4gICAgICAgICAgICAgICAgJ2dldFN0YXRpc3RpY3MnLFxuICAgICAgICAgICAgICAgICdnZXRUZXJtaW5hbExpc3QnLFxuICAgICAgICAgICAgICAgICdnZXRHcmlkTGlzdCcsXG4gICAgICAgICAgICAgICAgJ2dldEdyaWRTdGF0aXN0aWNzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnZ2V0SW5zdHJ1bWVudHMnLFxuICAgICAgICAgICAgICAgICdnZXRCZXN0UHJpY2VzJyxcbiAgICAgICAgICAgICAgICAnZ2V0TWFya2V0RGVwdGgnLFxuICAgICAgICAgICAgICAgICdlc3RpbWF0ZU1hcmtldE9yZGVyJyxcbiAgICAgICAgICAgICAgICAnZ2V0VHJhZGVkUHJpY2VWb2x1bWUnLFxuICAgICAgICAgICAgICAgICdnZXRSYXdUcmFkZURhdGEnLFxuICAgICAgICAgICAgICAgICdnZXRTdGF0aXN0aWNzJyxcbiAgICAgICAgICAgICAgICAnZ2V0VGVybWluYWxMaXN0JyxcbiAgICAgICAgICAgICAgICAnZ2V0R3JpZExpc3QnLFxuICAgICAgICAgICAgICAgICdnZXRHcmlkU3RhdGlzdGljcycsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAncHJpdmF0ZSc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ2NhbmNlbE9yZGVyJyxcbiAgICAgICAgICAgICAgICAnZ2V0QmFsYW5jZXMnLFxuICAgICAgICAgICAgICAgICdnZXRDb21taXNzaW9uRGlzY291bnQnLFxuICAgICAgICAgICAgICAgICdnZXRPcmRlcnMnLFxuICAgICAgICAgICAgICAgICdnZXRUcmFuc2FjdGlvbnMnLFxuICAgICAgICAgICAgICAgICdwbGFjZU9yZGVyJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnY2FuY2VsT3JkZXInLFxuICAgICAgICAgICAgICAgICdnZXRCYWxhbmNlcycsXG4gICAgICAgICAgICAgICAgJ2dldENvbW1pc3Npb25EaXNjb3VudCcsXG4gICAgICAgICAgICAgICAgJ2dldE9yZGVycycsXG4gICAgICAgICAgICAgICAgJ2dldFRyYW5zYWN0aW9ucycsXG4gICAgICAgICAgICAgICAgJ3BsYWNlT3JkZXInLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hNYXJrZXRzICgpIHtcbiAgICAgICAgbGV0IG1hcmtldHMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldEluc3RydW1lbnRzICgpO1xuICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzIChtYXJrZXRzWydyZXN1bHQnXSk7XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgcCA9IDA7IHAgPCBrZXlzLmxlbmd0aDsgcCsrKSB7XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gbWFya2V0c1sncmVzdWx0J11ba2V5c1twXV07XG4gICAgICAgICAgICBsZXQgaWQgPSBtYXJrZXRbJ2luc3RydW1lbnRJRCddO1xuICAgICAgICAgICAgbGV0IHN5bWJvbCA9IG1hcmtldFsnc3ltYm9sJ107XG4gICAgICAgICAgICBsZXQgYmFzZSA9IG1hcmtldFsnbG9uZ0N1cnJlbmN5J107XG4gICAgICAgICAgICBsZXQgcXVvdGUgPSBtYXJrZXRbJ3Nob3J0Q3VycmVuY3knXTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoICh7XG4gICAgICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgICAgICAgICAgJ3N5bWJvbCc6IHN5bWJvbCxcbiAgICAgICAgICAgICAgICAnYmFzZSc6IGJhc2UsXG4gICAgICAgICAgICAgICAgJ3F1b3RlJzogcXVvdGUsXG4gICAgICAgICAgICAgICAgJ2luZm8nOiBtYXJrZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0R2V0QmFsYW5jZXMgKCk7XG4gICAgICAgIGxldCBiYWxhbmNlcyA9IHJlc3BvbnNlWydyZXN1bHQnXVsnYWNjb3VudExpc3QnXTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiBiYWxhbmNlcyB9O1xuICAgICAgICBmb3IgKGxldCBiID0gMDsgYiA8IGJhbGFuY2VzLmxlbmd0aDsgYisrKSB7XG4gICAgICAgICAgICBsZXQgYmFsYW5jZSA9IGJhbGFuY2VzW2JdO1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gYmFsYW5jZVsnY3VycmVuY3knXTtcbiAgICAgICAgICAgIGxldCB0b3RhbCA9IGJhbGFuY2VbJ2JhbGFuY2UnXTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogdG90YWwsXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogdG90YWwsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCZXN0UHJpY2VzIChtYXJrZXQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljUG9zdEdldEJlc3RQcmljZXMgKHtcbiAgICAgICAgICAgICdzeW1ib2xzJzogWyB0aGlzLnN5bWJvbCAobWFya2V0KSBdLFxuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNQb3N0R2V0TWFya2V0RGVwdGggKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnc3ltYm9scyc6IFsgdGhpcy5zeW1ib2wgKG1hcmtldCkgXSxcbiAgICAgICAgICAgICdidXlEZXB0aCc6IDEwMCxcbiAgICAgICAgICAgICdzZWxsRGVwdGgnOiAxMDAsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgb3JkZXJib29rID0gcmVzcG9uc2VbJ3Jlc3VsdCddWzBdO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IFtdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaWRlcyA9IHsgJ2JpZHMnOiAnYnV5JywgJ2Fza3MnOiAnc2VsbCcgfTtcbiAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyAoc2lkZXMpO1xuICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGtleXMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgIGxldCBrZXkgPSBrZXlzW2tdO1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1trZXldO1xuICAgICAgICAgICAgbGV0IG9yZGVycyA9IG9yZGVyYm9va1tzaWRlXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9yZGVyID0gb3JkZXJzW2ldO1xuICAgICAgICAgICAgICAgIGxldCBwcmljZSA9IHBhcnNlRmxvYXQgKG9yZGVyWydwcmljZSddKTtcbiAgICAgICAgICAgICAgICBsZXQgYW1vdW50ID0gcGFyc2VGbG9hdCAob3JkZXJbJ3ZvbHVtZSddKTtcbiAgICAgICAgICAgICAgICByZXN1bHRba2V5XS5wdXNoIChbIHByaWNlLCBhbW91bnQgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgZW5kID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCBzdGFydCA9IGVuZCAtIDg2NDAwMDAwO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFRyYWRlZFByaWNlVm9sdW1lICh7XG4gICAgICAgICAgICAnaW5zdHJ1bWVudCc6IHRoaXMuc3ltYm9sIChtYXJrZXQpLFxuICAgICAgICAgICAgJ2VuZERhdGUnOiB0aGlzLnl5eXltbWRkaGhtbXNzIChlbmQpLFxuICAgICAgICAgICAgJ3N0YXJ0RGF0ZSc6IHRoaXMueXl5eW1tZGRoaG1tc3MgKHN0YXJ0KSxcbiAgICAgICAgICAgICdITE9DJzogMSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aWNrZXJzID0gcmVzcG9uc2VbJ3Jlc3VsdCddWydwcmljZVZvbHVtZUxpc3QnXTtcbiAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyAodGlja2Vycyk7XG4gICAgICAgIGxldCBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgbGV0IGxhc3RLZXkgPSBrZXlzW2xlbmd0aCAtIDFdO1xuICAgICAgICBsZXQgdGlja2VyID0gdGlja2Vyc1tsYXN0S2V5XTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydoaWdoJ10pLFxuICAgICAgICAgICAgJ2xvdyc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbG93J10pLFxuICAgICAgICAgICAgJ2JpZCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhc2snOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogcGFyc2VGbG9hdCAodGlja2VyWydvcGVuJ10pLFxuICAgICAgICAgICAgJ2Nsb3NlJzogcGFyc2VGbG9hdCAodGlja2VyWydjbG9zZSddKSxcbiAgICAgICAgICAgICdmaXJzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsYXN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbG9uZ1ZvbHVtZSddKSxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsnc2hvcnRWb2x1bWUnXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0UmF3VHJhZGVEYXRhKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnaW5zdHJ1bWVudCc6IHRoaXMuc3ltYm9sIChtYXJrZXQpLFxuICAgICAgICAgICAgJ3RpbWVzcGFuJzogMzYwMCxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdpbnN0cnVtZW50JzogdGhpcy5zeW1ib2wgKG1hcmtldCksXG4gICAgICAgICAgICAnb3JkZXJUeXBlJzogc2lkZS50b1VwcGVyQ2FzZSAoKSxcbiAgICAgICAgICAgICdhbW91bnQnOiBhbW91bnQsXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlID09ICdsaW1pdCcpXG4gICAgICAgICAgICBvcmRlclsncHJpY2UnXSA9IHByaWNlO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0UGxhY2VPcmRlciAodGhpcy5leHRlbmQgKG9yZGVyLCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnb3JkZXJJRCddLnRvU3RyaW5nICgpLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0Q2FuY2VsT3JkZXIgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnb3JkZXJJRCc6IGlkLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXVthcGldO1xuICAgICAgICBsZXQgYXV0aCA9IHt9O1xuICAgICAgICBpZiAoYXBpID09ICdwcml2YXRlJykge1xuICAgICAgICAgICAgYXV0aFsna2V5J10gPSB0aGlzLmFwaUtleTtcbiAgICAgICAgICAgIGF1dGhbJ3VzZXInXSA9IHRoaXMubG9naW47XG4gICAgICAgICAgICBhdXRoWydwYXNzJ10gPSB0aGlzLnBhc3N3b3JkO1xuICAgICAgICB9XG4gICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCk7XG4gICAgICAgIGlmIChtZXRob2QgPT0gJ0dFVCcpIHtcbiAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICAgICAnbWV0aG9kJzogcGF0aCxcbiAgICAgICAgICAgICAgICAnaWQnOiBub25jZSxcbiAgICAgICAgICAgIH0sIGF1dGgsIHBhcmFtcykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaGVhZGVycyA9IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9O1xuICAgICAgICAgICAgYm9keSA9IHRoaXMuanNvbiAoe1xuICAgICAgICAgICAgICAgICdtZXRob2QnOiBwYXRoLFxuICAgICAgICAgICAgICAgICdwYXJhbXMnOiB0aGlzLmV4dGVuZCAoYXV0aCwgcGFyYW1zKSxcbiAgICAgICAgICAgICAgICAnaWQnOiBub25jZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdlcnJvcicgaW4gcmVzcG9uc2UpXG4gICAgICAgICAgICBpZiAocmVzcG9uc2VbJ2Vycm9yJ10pXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciB4YnRjZSA9IHtcblxuICAgICdpZCc6ICd4YnRjZScsXG4gICAgJ25hbWUnOiAneEJUQ2UnLFxuICAgICdjb3VudHJpZXMnOiAnUlUnLFxuICAgICdyYXRlTGltaXQnOiAyMDAwLCAvLyByZXNwb25zZXMgYXJlIGNhY2hlZCBldmVyeSAyIHNlY29uZHNcbiAgICAndmVyc2lvbic6ICd2MScsXG4gICAgJ2hhc0ZldGNoVGlja2Vycyc6IHRydWUsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjgwNTk0MTQtZTIzNTk3MGMtNjYyYy0xMWU3LThjM2EtMDhlMzFmNzg2ODRiLmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly9jcnlwdG90dGxpdmV3ZWJhcGkueGJ0Y2UubmV0Ojg0NDMvYXBpJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy54YnRjZS5jb20nLFxuICAgICAgICAnZG9jJzogW1xuICAgICAgICAgICAgJ2h0dHBzOi8vd3d3LnhidGNlLmNvbS90cmFkZWFwaScsXG4gICAgICAgICAgICAnaHR0cHM6Ly9zdXBwb3J0LnhidGNlLmluZm8vS25vd2xlZGdlYmFzZS9BcnRpY2xlL1ZpZXcvNTIvMjUveGJ0Y2UtZXhjaGFuZ2UtYXBpJyxcbiAgICAgICAgXSxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdjdXJyZW5jeScsXG4gICAgICAgICAgICAgICAgJ2N1cnJlbmN5L3tmaWx0ZXJ9JyxcbiAgICAgICAgICAgICAgICAnbGV2ZWwyJyxcbiAgICAgICAgICAgICAgICAnbGV2ZWwyL3tmaWx0ZXJ9JyxcbiAgICAgICAgICAgICAgICAncXVvdGVoaXN0b3J5L3tzeW1ib2x9L3twZXJpb2RpY2l0eX0vYmFycy9hc2snLFxuICAgICAgICAgICAgICAgICdxdW90ZWhpc3Rvcnkve3N5bWJvbH0ve3BlcmlvZGljaXR5fS9iYXJzL2JpZCcsXG4gICAgICAgICAgICAgICAgJ3F1b3RlaGlzdG9yeS97c3ltYm9sfS9sZXZlbDInLFxuICAgICAgICAgICAgICAgICdxdW90ZWhpc3Rvcnkve3N5bWJvbH0vdGlja3MnLFxuICAgICAgICAgICAgICAgICdzeW1ib2wnLFxuICAgICAgICAgICAgICAgICdzeW1ib2wve2ZpbHRlcn0nLFxuICAgICAgICAgICAgICAgICd0aWNrJyxcbiAgICAgICAgICAgICAgICAndGljay97ZmlsdGVyfScsXG4gICAgICAgICAgICAgICAgJ3RpY2tlcicsXG4gICAgICAgICAgICAgICAgJ3RpY2tlci97ZmlsdGVyfScsXG4gICAgICAgICAgICAgICAgJ3RyYWRlc2Vzc2lvbicsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAncHJpdmF0ZSc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ3RyYWRlc2VydmVyaW5mbycsXG4gICAgICAgICAgICAgICAgJ3RyYWRlc2Vzc2lvbicsXG4gICAgICAgICAgICAgICAgJ2N1cnJlbmN5JyxcbiAgICAgICAgICAgICAgICAnY3VycmVuY3kve2ZpbHRlcn0nLFxuICAgICAgICAgICAgICAgICdsZXZlbDInLFxuICAgICAgICAgICAgICAgICdsZXZlbDIve2ZpbHRlcn0nLFxuICAgICAgICAgICAgICAgICdzeW1ib2wnLFxuICAgICAgICAgICAgICAgICdzeW1ib2wve2ZpbHRlcn0nLFxuICAgICAgICAgICAgICAgICd0aWNrJyxcbiAgICAgICAgICAgICAgICAndGljay97ZmlsdGVyfScsXG4gICAgICAgICAgICAgICAgJ2FjY291bnQnLFxuICAgICAgICAgICAgICAgICdhc3NldCcsXG4gICAgICAgICAgICAgICAgJ2Fzc2V0L3tpZH0nLFxuICAgICAgICAgICAgICAgICdwb3NpdGlvbicsXG4gICAgICAgICAgICAgICAgJ3Bvc2l0aW9uL3tpZH0nLFxuICAgICAgICAgICAgICAgICd0cmFkZScsXG4gICAgICAgICAgICAgICAgJ3RyYWRlL3tpZH0nLFxuICAgICAgICAgICAgICAgICdxdW90ZWhpc3Rvcnkve3N5bWJvbH0ve3BlcmlvZGljaXR5fS9iYXJzL2FzaycsXG4gICAgICAgICAgICAgICAgJ3F1b3RlaGlzdG9yeS97c3ltYm9sfS97cGVyaW9kaWNpdHl9L2JhcnMvYXNrL2luZm8nLFxuICAgICAgICAgICAgICAgICdxdW90ZWhpc3Rvcnkve3N5bWJvbH0ve3BlcmlvZGljaXR5fS9iYXJzL2JpZCcsXG4gICAgICAgICAgICAgICAgJ3F1b3RlaGlzdG9yeS97c3ltYm9sfS97cGVyaW9kaWNpdHl9L2JhcnMvYmlkL2luZm8nLFxuICAgICAgICAgICAgICAgICdxdW90ZWhpc3Rvcnkve3N5bWJvbH0vbGV2ZWwyJyxcbiAgICAgICAgICAgICAgICAncXVvdGVoaXN0b3J5L3tzeW1ib2x9L2xldmVsMi9pbmZvJyxcbiAgICAgICAgICAgICAgICAncXVvdGVoaXN0b3J5L3tzeW1ib2x9L3BlcmlvZGljaXRpZXMnLFxuICAgICAgICAgICAgICAgICdxdW90ZWhpc3Rvcnkve3N5bWJvbH0vdGlja3MnLFxuICAgICAgICAgICAgICAgICdxdW90ZWhpc3Rvcnkve3N5bWJvbH0vdGlja3MvaW5mbycsXG4gICAgICAgICAgICAgICAgJ3F1b3RlaGlzdG9yeS9jYWNoZS97c3ltYm9sfS97cGVyaW9kaWNpdHl9L2JhcnMvYXNrJyxcbiAgICAgICAgICAgICAgICAncXVvdGVoaXN0b3J5L2NhY2hlL3tzeW1ib2x9L3twZXJpb2RpY2l0eX0vYmFycy9iaWQnLFxuICAgICAgICAgICAgICAgICdxdW90ZWhpc3RvcnkvY2FjaGUve3N5bWJvbH0vbGV2ZWwyJyxcbiAgICAgICAgICAgICAgICAncXVvdGVoaXN0b3J5L2NhY2hlL3tzeW1ib2x9L3RpY2tzJyxcbiAgICAgICAgICAgICAgICAncXVvdGVoaXN0b3J5L3N5bWJvbHMnLFxuICAgICAgICAgICAgICAgICdxdW90ZWhpc3RvcnkvdmVyc2lvbicsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ3RyYWRlJyxcbiAgICAgICAgICAgICAgICAndHJhZGVoaXN0b3J5JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAncHV0JzogW1xuICAgICAgICAgICAgICAgICd0cmFkZScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ2RlbGV0ZSc6IFtcbiAgICAgICAgICAgICAgICAndHJhZGUnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hNYXJrZXRzICgpIHtcbiAgICAgICAgbGV0IG1hcmtldHMgPSBhd2FpdCB0aGlzLnByaXZhdGVHZXRTeW1ib2wgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgcCA9IDA7IHAgPCBtYXJrZXRzLmxlbmd0aDsgcCsrKSB7XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gbWFya2V0c1twXTtcbiAgICAgICAgICAgIGxldCBpZCA9IG1hcmtldFsnU3ltYm9sJ107XG4gICAgICAgICAgICBsZXQgYmFzZSA9IG1hcmtldFsnTWFyZ2luQ3VycmVuY3knXTtcbiAgICAgICAgICAgIGxldCBxdW90ZSA9IG1hcmtldFsnUHJvZml0Q3VycmVuY3knXTtcbiAgICAgICAgICAgIGlmIChiYXNlID09ICdEU0gnKVxuICAgICAgICAgICAgICAgIGJhc2UgPSAnREFTSCc7XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gYmFzZSArICcvJyArIHF1b3RlO1xuICAgICAgICAgICAgc3ltYm9sID0gbWFya2V0WydJc1RyYWRlQWxsb3dlZCddID8gc3ltYm9sIDogaWQ7XG4gICAgICAgICAgICByZXN1bHQucHVzaCAoe1xuICAgICAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICAgICAgICAgICdzeW1ib2wnOiBzeW1ib2wsXG4gICAgICAgICAgICAgICAgJ2Jhc2UnOiBiYXNlLFxuICAgICAgICAgICAgICAgICdxdW90ZSc6IHF1b3RlLFxuICAgICAgICAgICAgICAgICdpbmZvJzogbWFya2V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gYXdhaXQgdGhpcy5wcml2YXRlR2V0QXNzZXQgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogYmFsYW5jZXMgfTtcbiAgICAgICAgZm9yIChsZXQgYiA9IDA7IGIgPCBiYWxhbmNlcy5sZW5ndGg7IGIrKykge1xuICAgICAgICAgICAgbGV0IGJhbGFuY2UgPSBiYWxhbmNlc1tiXTtcbiAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IGJhbGFuY2VbJ0N1cnJlbmN5J107XG4gICAgICAgICAgICBsZXQgdXBwZXJjYXNlID0gY3VycmVuY3kudG9VcHBlckNhc2UgKCk7XG4gICAgICAgICAgICAvLyB4YnRjZSBuYW1lcyBEQVNIIGluY29ycmVjdGx5IGFzIERTSFxuICAgICAgICAgICAgaWYgKHVwcGVyY2FzZSA9PSAnRFNIJylcbiAgICAgICAgICAgICAgICB1cHBlcmNhc2UgPSAnREFTSCc7XG4gICAgICAgICAgICBsZXQgdG90YWwgPSBiYWxhbmNlWydiYWxhbmNlJ107XG4gICAgICAgICAgICBsZXQgYWNjb3VudCA9IHtcbiAgICAgICAgICAgICAgICAnZnJlZSc6IGJhbGFuY2VbJ0ZyZWVBbW91bnQnXSxcbiAgICAgICAgICAgICAgICAndXNlZCc6IGJhbGFuY2VbJ0xvY2tlZEFtb3VudCddLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IGJhbGFuY2VbJ0Ftb3VudCddLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlc3VsdFt1cHBlcmNhc2VdID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgdGhpcy5wcml2YXRlR2V0TGV2ZWwyRmlsdGVyICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2ZpbHRlcic6IHBbJ2lkJ10sXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBvcmRlcmJvb2sgPSBvcmRlcmJvb2tbMF07XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSBvcmRlcmJvb2tbJ1RpbWVzdGFtcCddO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICBsZXQgU2lkZSA9IHRoaXMuY2FwaXRhbGl6ZSAoc2lkZSk7XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW1NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAob3JkZXJbJ1ByaWNlJ10pO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBwYXJzZUZsb2F0IChvcmRlclsnVm9sdW1lJ10pO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtzaWRlXS5wdXNoIChbIHByaWNlLCBhbW91bnQgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgcGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KSB7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSAwO1xuICAgICAgICBsZXQgbGFzdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKCdMYXN0QnV5VGltZXN0YW1wJyBpbiB0aWNrZXIpXG4gICAgICAgICAgICBpZiAodGltZXN0YW1wIDwgdGlja2VyWydMYXN0QnV5VGltZXN0YW1wJ10pIHtcbiAgICAgICAgICAgICAgICB0aW1lc3RhbXAgPSB0aWNrZXJbJ0xhc3RCdXlUaW1lc3RhbXAnXTtcbiAgICAgICAgICAgICAgICBsYXN0ID0gdGlja2VyWydMYXN0QnV5UHJpY2UnXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgaWYgKCdMYXN0U2VsbFRpbWVzdGFtcCcgaW4gdGlja2VyKVxuICAgICAgICAgICAgaWYgKHRpbWVzdGFtcCA8IHRpY2tlclsnTGFzdFNlbGxUaW1lc3RhbXAnXSkge1xuICAgICAgICAgICAgICAgIHRpbWVzdGFtcCA9IHRpY2tlclsnTGFzdFNlbGxUaW1lc3RhbXAnXTtcbiAgICAgICAgICAgICAgICBsYXN0ID0gdGlja2VyWydMYXN0U2VsbFByaWNlJ107XG4gICAgICAgICAgICB9XG4gICAgICAgIGlmICghdGltZXN0YW1wKVxuICAgICAgICAgICAgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiB0aWNrZXJbJ0RhaWx5QmVzdEJ1eVByaWNlJ10sXG4gICAgICAgICAgICAnbG93JzogdGlja2VyWydEYWlseUJlc3RTZWxsUHJpY2UnXSxcbiAgICAgICAgICAgICdiaWQnOiB0aWNrZXJbJ0Jlc3RCaWQnXSxcbiAgICAgICAgICAgICdhc2snOiB0aWNrZXJbJ0Jlc3RBc2snXSxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IGxhc3QsXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogdGlja2VyWydEYWlseVRyYWRlZFRvdGFsVm9sdW1lJ10sXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXJzICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHRpY2tlcnMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFRpY2tlciAoKTtcbiAgICAgICAgdGlja2VycyA9IHRoaXMuaW5kZXhCeSAodGlja2VycywgJ1N5bWJvbCcpO1xuICAgICAgICBsZXQgaWRzID0gT2JqZWN0LmtleXMgKHRpY2tlcnMpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge307XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgaWQgPSBpZHNbaV07XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgbGV0IHN5bWJvbCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmIChpZCBpbiB0aGlzLm1hcmtldHNfYnlfaWQpIHtcbiAgICAgICAgICAgICAgICBtYXJrZXQgPSB0aGlzLm1hcmtldHNfYnlfaWRbaWRdO1xuICAgICAgICAgICAgICAgIHN5bWJvbCA9IG1hcmtldFsnc3ltYm9sJ107XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCBiYXNlID0gaWQuc2xpY2UgKDAsIDMpO1xuICAgICAgICAgICAgICAgIGxldCBxdW90ZSA9IGlkLnNsaWNlICgzLCA2KTtcbiAgICAgICAgICAgICAgICBpZiAoYmFzZSA9PSAnRFNIJylcbiAgICAgICAgICAgICAgICAgICAgYmFzZSA9ICdEQVNIJztcbiAgICAgICAgICAgICAgICBpZiAocXVvdGUgPT0gJ0RTSCcpXG4gICAgICAgICAgICAgICAgICAgIHF1b3RlID0gJ0RBU0gnO1xuICAgICAgICAgICAgICAgIHN5bWJvbCA9IGJhc2UgKyAnLycgKyBxdW90ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCB0aWNrZXIgPSB0aWNrZXJzW2lkXTtcbiAgICAgICAgICAgIHJlc3VsdFtzeW1ib2xdID0gdGhpcy5wYXJzZVRpY2tlciAodGlja2VyLCBtYXJrZXQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHRpY2tlcnMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFRpY2tlckZpbHRlciAoe1xuICAgICAgICAgICAgJ2ZpbHRlcic6IHBbJ2lkJ10sXG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgbGVuZ3RoID0gdGlja2Vycy5sZW5ndGg7XG4gICAgICAgIGlmIChsZW5ndGggPCAxKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnIGZldGNoVGlja2VyIHJldHVybmVkIGVtcHR5IHJlc3BvbnNlLCB4QlRDZSBwdWJsaWMgQVBJIGVycm9yJyk7XG4gICAgICAgIHRpY2tlcnMgPSB0aGlzLmluZGV4QnkgKHRpY2tlcnMsICdTeW1ib2wnKTtcbiAgICAgICAgbGV0IHRpY2tlciA9IHRpY2tlcnNbcFsnaWQnXV07XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIHApO1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICAvLyBubyBtZXRob2QgZm9yIHRyYWRlcz9cbiAgICAgICAgcmV0dXJuIHRoaXMucHJpdmF0ZUdldFRyYWRlIChwYXJhbXMpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBpZiAodHlwZSA9PSAnbWFya2V0JylcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyBhbGxvd3MgbGltaXQgb3JkZXJzIG9ubHknKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy50YXBpUG9zdFRyYWRlICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ3BhaXInOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICAgICAgJ3R5cGUnOiBzaWRlLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IGFtb3VudCxcbiAgICAgICAgICAgICdyYXRlJzogcHJpY2UsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXNwb25zZSxcbiAgICAgICAgICAgICdpZCc6IHJlc3BvbnNlWydJZCddLnRvU3RyaW5nICgpLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVEZWxldGVUcmFkZSAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdUeXBlJzogJ0NhbmNlbCcsXG4gICAgICAgICAgICAnSWQnOiBpZCxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIG5vbmNlICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgIH0sXG5cbiAgICByZXF1ZXN0IChwYXRoLCBhcGkgPSAnYXBpJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICghdGhpcy5hcGlLZXkpXG4gICAgICAgICAgICB0aHJvdyBuZXcgQXV0aGVudGljYXRpb25FcnJvciAodGhpcy5pZCArICcgcmVxdWlyZXMgYXBpS2V5IGZvciBhbGwgcmVxdWVzdHMsIHRoZWlyIHB1YmxpYyBBUEkgaXMgYWx3YXlzIGJ1c3knKTtcbiAgICAgICAgaWYgKCF0aGlzLnVpZClcbiAgICAgICAgICAgIHRocm93IG5ldyBBdXRoZW50aWNhdGlvbkVycm9yICh0aGlzLmlkICsgJyByZXF1aXJlcyB1aWQgcHJvcGVydHkgZm9yIGF1dGhlbnRpY2F0aW9uIGFuZCB0cmFkaW5nJyk7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgJy8nICsgdGhpcy52ZXJzaW9uO1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKVxuICAgICAgICAgICAgdXJsICs9ICcvJyArIGFwaTtcbiAgICAgICAgdXJsICs9ICcvJyArIHRoaXMuaW1wbG9kZVBhcmFtcyAocGF0aCwgcGFyYW1zKTtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5vbWl0IChwYXJhbXMsIHRoaXMuZXh0cmFjdFBhcmFtcyAocGF0aCkpO1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHF1ZXJ5KS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChxdWVyeSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBoZWFkZXJzID0geyAnQWNjZXB0LUVuY29kaW5nJzogJ2d6aXAsIGRlZmxhdGUnIH07XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpLnRvU3RyaW5nICgpO1xuICAgICAgICAgICAgaWYgKG1ldGhvZCA9PSAnUE9TVCcpIHtcbiAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHF1ZXJ5KS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSAnYXBwbGljYXRpb24vanNvbic7XG4gICAgICAgICAgICAgICAgICAgIGJvZHkgPSB0aGlzLmpzb24gKHF1ZXJ5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB1cmwgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHF1ZXJ5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBhdXRoID0gbm9uY2UgKyB0aGlzLnVpZCArIHRoaXMuYXBpS2V5ICsgbWV0aG9kICsgdXJsO1xuICAgICAgICAgICAgaWYgKGJvZHkpXG4gICAgICAgICAgICAgICAgYXV0aCArPSBib2R5O1xuICAgICAgICAgICAgbGV0IHNpZ25hdHVyZSA9IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKGF1dGgpLCB0aGlzLmVuY29kZSAodGhpcy5zZWNyZXQpLCAnc2hhMjU2JywgJ2Jhc2U2NCcpO1xuICAgICAgICAgICAgbGV0IGNyZWRlbnRpYWxzID0gdGhpcy51aWQgKyAnOicgKyB0aGlzLmFwaUtleSArICc6JyArIG5vbmNlICsgJzonICsgdGhpcy5iaW5hcnlUb1N0cmluZyAoc2lnbmF0dXJlKTtcbiAgICAgICAgICAgIGhlYWRlcnNbJ0F1dGhvcml6YXRpb24nXSA9ICdITUFDICcgKyBjcmVkZW50aWFscztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIHlvYml0ID0ge1xuXG4gICAgJ2lkJzogJ3lvYml0JyxcbiAgICAnbmFtZSc6ICdZb0JpdCcsXG4gICAgJ2NvdW50cmllcyc6ICdSVScsXG4gICAgJ3JhdGVMaW1pdCc6IDIwMDAsIC8vIHJlc3BvbnNlcyBhcmUgY2FjaGVkIGV2ZXJ5IDIgc2Vjb25kc1xuICAgICd2ZXJzaW9uJzogJzMnLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2OTEwLWNkY2JmZGFlLTVlZWEtMTFlNy05ODU5LTAzZmVhODczMjcyZC5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8veW9iaXQubmV0JyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy55b2JpdC5uZXQnLFxuICAgICAgICAnZG9jJzogJ2h0dHBzOi8vd3d3LnlvYml0Lm5ldC9lbi9hcGkvJyxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdhcGknOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdkZXB0aC97cGFpcnN9JyxcbiAgICAgICAgICAgICAgICAnaW5mbycsXG4gICAgICAgICAgICAgICAgJ3RpY2tlci97cGFpcnN9JyxcbiAgICAgICAgICAgICAgICAndHJhZGVzL3twYWlyc30nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3RhcGknOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnQWN0aXZlT3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnQ2FuY2VsT3JkZXInLFxuICAgICAgICAgICAgICAgICdHZXREZXBvc2l0QWRkcmVzcycsXG4gICAgICAgICAgICAgICAgJ2dldEluZm8nLFxuICAgICAgICAgICAgICAgICdPcmRlckluZm8nLFxuICAgICAgICAgICAgICAgICdUcmFkZScsXG4gICAgICAgICAgICAgICAgJ1RyYWRlSGlzdG9yeScsXG4gICAgICAgICAgICAgICAgJ1dpdGhkcmF3Q29pbnNUb0FkZHJlc3MnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hNYXJrZXRzICgpIHtcbiAgICAgICAgbGV0IG1hcmtldHMgPSBhd2FpdCB0aGlzLmFwaUdldEluZm8gKCk7XG4gICAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMgKG1hcmtldHNbJ3BhaXJzJ10pO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwga2V5cy5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgbGV0IGlkID0ga2V5c1twXTtcbiAgICAgICAgICAgIGxldCBtYXJrZXQgPSBtYXJrZXRzWydwYWlycyddW2lkXTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBpZC50b1VwcGVyQ2FzZSAoKS5yZXBsYWNlICgnXycsICcvJyk7XG4gICAgICAgICAgICBsZXQgWyBiYXNlLCBxdW90ZSBdID0gc3ltYm9sLnNwbGl0ICgnLycpO1xuICAgICAgICAgICAgYmFzZSA9IHRoaXMuY29tbW9uQ3VycmVuY3lDb2RlIChiYXNlKTtcbiAgICAgICAgICAgIHF1b3RlID0gdGhpcy5jb21tb25DdXJyZW5jeUNvZGUgKHF1b3RlKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoICh7XG4gICAgICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgICAgICAgICAgJ3N5bWJvbCc6IHN5bWJvbCxcbiAgICAgICAgICAgICAgICAnYmFzZSc6IGJhc2UsXG4gICAgICAgICAgICAgICAgJ3F1b3RlJzogcXVvdGUsXG4gICAgICAgICAgICAgICAgJ2luZm8nOiBtYXJrZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnRhcGlQb3N0R2V0SW5mbyAoKTtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gcmVzcG9uc2VbJ3JldHVybiddO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGJhbGFuY2VzIH07XG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgdGhpcy5jdXJyZW5jaWVzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSB0aGlzLmN1cnJlbmNpZXNbY107XG4gICAgICAgICAgICBsZXQgbG93ZXJjYXNlID0gY3VycmVuY3kudG9Mb3dlckNhc2UgKCk7XG4gICAgICAgICAgICBsZXQgYWNjb3VudCA9IHtcbiAgICAgICAgICAgICAgICAnZnJlZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAndXNlZCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAndG90YWwnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKCdmdW5kcycgaW4gYmFsYW5jZXMpXG4gICAgICAgICAgICAgICAgaWYgKGxvd2VyY2FzZSBpbiBiYWxhbmNlc1snZnVuZHMnXSlcbiAgICAgICAgICAgICAgICAgICAgYWNjb3VudFsnZnJlZSddID0gYmFsYW5jZXNbJ2Z1bmRzJ11bbG93ZXJjYXNlXTtcbiAgICAgICAgICAgIGlmICgnZnVuZHNfaW5jbF9vcmRlcnMnIGluIGJhbGFuY2VzKVxuICAgICAgICAgICAgICAgIGlmIChsb3dlcmNhc2UgaW4gYmFsYW5jZXNbJ2Z1bmRzX2luY2xfb3JkZXJzJ10pXG4gICAgICAgICAgICAgICAgICAgIGFjY291bnRbJ3RvdGFsJ10gPSBiYWxhbmNlc1snZnVuZHNfaW5jbF9vcmRlcnMnXVtsb3dlcmNhc2VdO1xuICAgICAgICAgICAgaWYgKGFjY291bnRbJ3RvdGFsJ10gJiYgYWNjb3VudFsnZnJlZSddKVxuICAgICAgICAgICAgICAgIGFjY291bnRbJ3VzZWQnXSA9IGFjY291bnRbJ3RvdGFsJ10gLSBhY2NvdW50WydmcmVlJ107XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmFwaUdldERlcHRoUGFpcnMgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAncGFpcnMnOiBwWydpZCddLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IHJlc3BvbnNlW3BbJ2lkJ11dO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCBiaWRzID0gKCdiaWRzJyBpbiBvcmRlcmJvb2spID8gb3JkZXJib29rWydiaWRzJ10gOiBbXTtcbiAgICAgICAgbGV0IGFza3MgPSAoJ2Fza3MnIGluIG9yZGVyYm9vaykgPyBvcmRlcmJvb2tbJ2Fza3MnXSA6IFtdO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBiaWRzLFxuICAgICAgICAgICAgJ2Fza3MnOiBhc2tzLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgdGlja2VycyA9IGF3YWl0IHRoaXMuYXBpR2V0VGlja2VyUGFpcnMgKHtcbiAgICAgICAgICAgICdwYWlycyc6IHBbJ2lkJ10sXG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgdGlja2VyID0gdGlja2Vyc1twWydpZCddXTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRpY2tlclsndXBkYXRlZCddICogMTAwMDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2J1eSddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3NlbGwnXSksXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xhc3QnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYXZnJ10pLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbF9jdXInXSksXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbCddKSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5hcGlHZXRUcmFkZXNQYWlycyAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdwYWlycyc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBpZiAodHlwZSA9PSAnbWFya2V0JylcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyBhbGxvd3MgbGltaXQgb3JkZXJzIG9ubHknKTtcbiAgICAgICAgbGV0IHJhdGUgPSBwcmljZS50b1N0cmluZyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy50YXBpUG9zdFRyYWRlICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ3BhaXInOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICAgICAgJ3R5cGUnOiBzaWRlLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IGFtb3VudCxcbiAgICAgICAgICAgICdyYXRlJzogJyUuOGYnLnNwcmludGYgKHByaWNlKSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ2lkJzogcmVzcG9uc2VbJ3JldHVybiddWydvcmRlcl9pZCddLnRvU3RyaW5nICgpLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnRhcGlQb3N0Q2FuY2VsT3JkZXIgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnb3JkZXJfaWQnOiBpZCxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdhcGknLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ10gKyAnLycgKyBhcGk7XG4gICAgICAgIGlmIChhcGkgPT0gJ2FwaScpIHtcbiAgICAgICAgICAgIHVybCArPSAnLycgKyB0aGlzLnZlcnNpb24gKyAnLycgKyB0aGlzLmltcGxvZGVQYXJhbXMgKHBhdGgsIHBhcmFtcyk7XG4gICAgICAgICAgICBsZXQgcXVlcnkgPSB0aGlzLm9taXQgKHBhcmFtcywgdGhpcy5leHRyYWN0UGFyYW1zIChwYXRoKSk7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHF1ZXJ5KS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChxdWVyeSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpO1xuICAgICAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5leHRlbmQgKHsgJ21ldGhvZCc6IHBhdGgsICdub25jZSc6IG5vbmNlIH0sIHBhcmFtcyk7XG4gICAgICAgICAgICBib2R5ID0gdGhpcy51cmxlbmNvZGUgKHF1ZXJ5KTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgICAgICAgICdrZXknOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgICAgICAnc2lnbic6IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKGJvZHkpLCB0aGlzLmVuY29kZSAodGhpcy5zZWNyZXQpLCAnc2hhNTEyJyksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdlcnJvcicgaW4gcmVzcG9uc2UpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgJyArIHRoaXMuanNvbiAocmVzcG9uc2UpKTtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIHl1bmJpID0ge1xuXG4gICAgJ2lkJzogJ3l1bmJpJyxcbiAgICAnbmFtZSc6ICdZVU5CSScsXG4gICAgJ2NvdW50cmllcyc6ICdDTicsXG4gICAgJ3JhdGVMaW1pdCc6IDEwMDAsXG4gICAgJ3ZlcnNpb24nOiAndjInLFxuICAgICdoYXNGZXRjaFRpY2tlcnMnOiB0cnVlLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI4NTcwNTQ4LTRkNjQ2YzQwLTcxNDctMTFlNy05Y2Y2LTgzOWI5M2U2ZDYyMi5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8veXVuYmkuY29tJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3l1bmJpLmNvbScsXG4gICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAnaHR0cHM6Ly95dW5iaS5jb20vZG9jdW1lbnRzL2FwaS9ndWlkZScsXG4gICAgICAgICAgICAnaHR0cHM6Ly95dW5iaS5jb20vc3dhZ2dlci8nLFxuICAgICAgICBdLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ3RpY2tlcnMnLFxuICAgICAgICAgICAgICAgICd0aWNrZXJzL3ttYXJrZXR9JyxcbiAgICAgICAgICAgICAgICAnbWFya2V0cycsXG4gICAgICAgICAgICAgICAgJ29yZGVyX2Jvb2snLFxuICAgICAgICAgICAgICAgICdrJyxcbiAgICAgICAgICAgICAgICAnZGVwdGgnLFxuICAgICAgICAgICAgICAgICd0cmFkZXMnLFxuICAgICAgICAgICAgICAgICdrX3dpdGhfcGVuZGluZ190cmFkZXMnLFxuICAgICAgICAgICAgICAgICd0aW1lc3RhbXAnLFxuICAgICAgICAgICAgICAgICdhZGRyZXNzZXMve2FkZHJlc3N9JyxcbiAgICAgICAgICAgICAgICAncGFydG5lcnMvb3JkZXJzL3tpZH0vdHJhZGVzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnZGVwb3NpdHMnLFxuICAgICAgICAgICAgICAgICdtZW1iZXJzL21lJyxcbiAgICAgICAgICAgICAgICAnZGVwb3NpdCcsXG4gICAgICAgICAgICAgICAgJ2RlcG9zaXRfYWRkcmVzcycsXG4gICAgICAgICAgICAgICAgJ29yZGVyJyxcbiAgICAgICAgICAgICAgICAnb3JkZXJzJyxcbiAgICAgICAgICAgICAgICAndHJhZGVzL215JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnb3JkZXIvZGVsZXRlJyxcbiAgICAgICAgICAgICAgICAnb3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnb3JkZXJzL211bHRpJyxcbiAgICAgICAgICAgICAgICAnb3JkZXJzL2NsZWFyJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoTWFya2V0cyAoKSB7XG4gICAgICAgIGxldCBtYXJrZXRzID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgbWFya2V0cy5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IG1hcmtldHNbcF07XG4gICAgICAgICAgICBsZXQgaWQgPSBtYXJrZXRbJ2lkJ107XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gbWFya2V0WyduYW1lJ107XG4gICAgICAgICAgICBsZXQgWyBiYXNlLCBxdW90ZSBdID0gc3ltYm9sLnNwbGl0ICgnLycpO1xuICAgICAgICAgICAgYmFzZSA9IHRoaXMuY29tbW9uQ3VycmVuY3lDb2RlIChiYXNlKTtcbiAgICAgICAgICAgIHF1b3RlID0gdGhpcy5jb21tb25DdXJyZW5jeUNvZGUgKHF1b3RlKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoICh7XG4gICAgICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgICAgICAgICAgJ3N5bWJvbCc6IHN5bWJvbCxcbiAgICAgICAgICAgICAgICAnYmFzZSc6IGJhc2UsXG4gICAgICAgICAgICAgICAgJ3F1b3RlJzogcXVvdGUsXG4gICAgICAgICAgICAgICAgJ2luZm8nOiBtYXJrZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVHZXRNZW1iZXJzTWUgKCk7XG4gICAgICAgIGxldCBiYWxhbmNlcyA9IHJlc3BvbnNlWydhY2NvdW50cyddO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGJhbGFuY2VzIH07XG4gICAgICAgIGZvciAobGV0IGIgPSAwOyBiIDwgYmFsYW5jZXMubGVuZ3RoOyBiKyspIHtcbiAgICAgICAgICAgIGxldCBiYWxhbmNlID0gYmFsYW5jZXNbYl07XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBiYWxhbmNlWydjdXJyZW5jeSddO1xuICAgICAgICAgICAgbGV0IHVwcGVyY2FzZSA9IGN1cnJlbmN5LnRvVXBwZXJDYXNlICgpO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiBwYXJzZUZsb2F0IChiYWxhbmNlWydiYWxhbmNlJ10pLFxuICAgICAgICAgICAgICAgICd1c2VkJzogcGFyc2VGbG9hdCAoYmFsYW5jZVsnbG9ja2VkJ10pLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhY2NvdW50Wyd0b3RhbCddID0gdGhpcy5zdW0gKGFjY291bnRbJ2ZyZWUnXSwgYWNjb3VudFsndXNlZCddKTtcbiAgICAgICAgICAgIHJlc3VsdFt1cHBlcmNhc2VdID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgdGhpcy5wdWJsaWNHZXREZXB0aCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdtYXJrZXQnOiBwWydpZCddLFxuICAgICAgICAgICAgJ2xpbWl0JzogMzAwLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IG9yZGVyYm9va1sndGltZXN0YW1wJ10gKiAxMDAwO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAob3JkZXJbMF0pO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBwYXJzZUZsb2F0IChvcmRlclsxXSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3NpZGVdLnB1c2ggKFsgcHJpY2UsIGFtb3VudCBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXN1bHRbJ2JpZHMnXSA9IHRoaXMuc29ydEJ5IChyZXN1bHRbJ2JpZHMnXSwgMCwgdHJ1ZSk7XG4gICAgICAgIHJlc3VsdFsnYXNrcyddID0gdGhpcy5zb3J0QnkgKHJlc3VsdFsnYXNrcyddLCAwKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgcGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KSB7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aWNrZXJbJ2F0J10gKiAxMDAwO1xuICAgICAgICB0aWNrZXIgPSB0aWNrZXJbJ3RpY2tlciddO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydoaWdoJ10pLFxuICAgICAgICAgICAgJ2xvdyc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbG93J10pLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYnV5J10pLFxuICAgICAgICAgICAgJ2Fzayc6IHBhcnNlRmxvYXQgKHRpY2tlclsnc2VsbCddKSxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdCddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbCddKSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlcnMgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgdGlja2VycyA9IGF3YWl0IHRoaXMucHVibGljR2V0VGlja2VycyAoKTtcbiAgICAgICAgbGV0IGlkcyA9IE9iamVjdC5rZXlzICh0aWNrZXJzKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHt9O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IGlkID0gaWRzW2ldO1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBpZDtcbiAgICAgICAgICAgIGlmIChpZCBpbiB0aGlzLm1hcmtldHNfYnlfaWQpIHtcbiAgICAgICAgICAgICAgICBtYXJrZXQgPSB0aGlzLm1hcmtldHNfYnlfaWRbaWRdO1xuICAgICAgICAgICAgICAgIHN5bWJvbCA9IG1hcmtldFsnc3ltYm9sJ107XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCBiYXNlID0gaWQuc2xpY2UgKDAsIDMpO1xuICAgICAgICAgICAgICAgIGxldCBxdW90ZSA9IGlkLnNsaWNlICgzLCA2KTtcbiAgICAgICAgICAgICAgICBiYXNlID0gYmFzZS50b1VwcGVyQ2FzZSAoKTtcbiAgICAgICAgICAgICAgICBxdW90ZSA9IHF1b3RlLnRvVXBwZXJDYXNlICgpO1xuICAgICAgICAgICAgICAgIGJhc2UgPSB0aGlzLmNvbW1vbkN1cnJlbmN5Q29kZSAoYmFzZSk7XG4gICAgICAgICAgICAgICAgcXVvdGUgPSB0aGlzLmNvbW1vbkN1cnJlbmN5Q29kZSAocXVvdGUpO1xuICAgICAgICAgICAgICAgIGxldCBzeW1ib2wgPSBiYXNlICsgJy8nICsgcXVvdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgdGlja2VyID0gdGlja2Vyc1tpZF07XG4gICAgICAgICAgICByZXN1bHRbc3ltYm9sXSA9IHRoaXMucGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0VGlja2Vyc01hcmtldCAoe1xuICAgICAgICAgICAgJ21hcmtldCc6IHBbJ2lkJ10sXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVRpY2tlciAocmVzcG9uc2UsIHApO1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgbSA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICByZXR1cm4gdGhpcy5wdWJsaWNHZXRUcmFkZXMgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnbWFya2V0JzogbVsnaWQnXSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdtYXJrZXQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICAgICAgJ3NpZGUnOiBzaWRlLFxuICAgICAgICAgICAgJ3ZvbHVtZSc6IGFtb3VudC50b1N0cmluZyAoKSxcbiAgICAgICAgICAgICdvcmRfdHlwZSc6IHR5cGUsXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlID09ICdsaW1pdCcpIHtcbiAgICAgICAgICAgIG9yZGVyWydwcmljZSddID0gcHJpY2UudG9TdHJpbmcgKCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdE9yZGVycyAodGhpcy5leHRlbmQgKG9yZGVyLCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnaWQnXS50b1N0cmluZyAoKSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0T3JkZXJEZWxldGUgKHsgJ2lkJzogaWQgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHJlcXVlc3QgPSAnL2FwaS8nICsgdGhpcy52ZXJzaW9uICsgJy8nICsgdGhpcy5pbXBsb2RlUGFyYW1zIChwYXRoLCBwYXJhbXMpICsgJy5qc29uJztcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5vbWl0IChwYXJhbXMsIHRoaXMuZXh0cmFjdFBhcmFtcyAocGF0aCkpO1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArIHJlcXVlc3Q7XG4gICAgICAgIGlmIChhcGkgPT0gJ3B1YmxpYycpIHtcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyAocXVlcnkpLmxlbmd0aClcbiAgICAgICAgICAgICAgICB1cmwgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHF1ZXJ5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCkudG9TdHJpbmcgKCk7XG4gICAgICAgICAgICBsZXQgcXVlcnkgPSB0aGlzLnVybGVuY29kZSAodGhpcy5rZXlzb3J0ICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgICAgICdhY2Nlc3Nfa2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ3RvbmNlJzogbm9uY2UsXG4gICAgICAgICAgICB9LCBwYXJhbXMpKSk7XG4gICAgICAgICAgICBsZXQgYXV0aCA9IG1ldGhvZCArICd8JyArIHJlcXVlc3QgKyAnfCcgKyBxdWVyeTtcbiAgICAgICAgICAgIGxldCBzaWduYXR1cmUgPSB0aGlzLmhtYWMgKHRoaXMuZW5jb2RlIChhdXRoKSwgdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSk7XG4gICAgICAgICAgICBsZXQgc3VmZml4ID0gcXVlcnkgKyAnJnNpZ25hdHVyZT0nICsgc2lnbmF0dXJlO1xuICAgICAgICAgICAgaWYgKG1ldGhvZCA9PSAnR0VUJykge1xuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyBzdWZmaXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGJvZHkgPSBzdWZmaXg7XG4gICAgICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1MZW5ndGgnOiBib2R5Lmxlbmd0aCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdlcnJvcicgaW4gcmVzcG9uc2UpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgJyArIHRoaXMuanNvbiAocmVzcG9uc2UpKTtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIHphaWYgPSB7XG5cbiAgICAnaWQnOiAnemFpZicsXG4gICAgJ25hbWUnOiAnWmFpZicsXG4gICAgJ2NvdW50cmllcyc6ICdKUCcsXG4gICAgJ3JhdGVMaW1pdCc6IDIwMDAsXG4gICAgJ3ZlcnNpb24nOiAnMScsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc3NjY5MjctMzljYTJhZGEtNWVlYi0xMWU3LTk3MmYtMWI0MTk5NTE4Y2E2LmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly9hcGkuemFpZi5qcCcsXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly96YWlmLmpwJyxcbiAgICAgICAgJ2RvYyc6IFtcbiAgICAgICAgICAgICdodHRwOi8vdGVjaGJ1cmVhdS1hcGktZG9jdW1lbnQucmVhZHRoZWRvY3MuaW8vamEvbGF0ZXN0L2luZGV4Lmh0bWwnLFxuICAgICAgICAgICAgJ2h0dHBzOi8vY29ycC56YWlmLmpwL2FwaS1kb2NzJyxcbiAgICAgICAgICAgICdodHRwczovL2NvcnAuemFpZi5qcC9hcGktZG9jcy9hcGlfbGlua3MnLFxuICAgICAgICAgICAgJ2h0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL3phaWYuanAnLFxuICAgICAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS95b3UyMTk3OS9ub2RlLXphaWYnLFxuICAgICAgICBdLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ2FwaSc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ2RlcHRoL3twYWlyfScsXG4gICAgICAgICAgICAgICAgJ2N1cnJlbmNpZXMve3BhaXJ9JyxcbiAgICAgICAgICAgICAgICAnY3VycmVuY2llcy9hbGwnLFxuICAgICAgICAgICAgICAgICdjdXJyZW5jeV9wYWlycy97cGFpcn0nLFxuICAgICAgICAgICAgICAgICdjdXJyZW5jeV9wYWlycy9hbGwnLFxuICAgICAgICAgICAgICAgICdsYXN0X3ByaWNlL3twYWlyfScsXG4gICAgICAgICAgICAgICAgJ3RpY2tlci97cGFpcn0nLFxuICAgICAgICAgICAgICAgICd0cmFkZXMve3BhaXJ9JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICd0YXBpJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2FjdGl2ZV9vcmRlcnMnLFxuICAgICAgICAgICAgICAgICdjYW5jZWxfb3JkZXInLFxuICAgICAgICAgICAgICAgICdkZXBvc2l0X2hpc3RvcnknLFxuICAgICAgICAgICAgICAgICdnZXRfaWRfaW5mbycsXG4gICAgICAgICAgICAgICAgJ2dldF9pbmZvJyxcbiAgICAgICAgICAgICAgICAnZ2V0X2luZm8yJyxcbiAgICAgICAgICAgICAgICAnZ2V0X3BlcnNvbmFsX2luZm8nLFxuICAgICAgICAgICAgICAgICd0cmFkZScsXG4gICAgICAgICAgICAgICAgJ3RyYWRlX2hpc3RvcnknLFxuICAgICAgICAgICAgICAgICd3aXRoZHJhdycsXG4gICAgICAgICAgICAgICAgJ3dpdGhkcmF3X2hpc3RvcnknLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ2VjYXBpJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2NyZWF0ZUludm9pY2UnLFxuICAgICAgICAgICAgICAgICdnZXRJbnZvaWNlJyxcbiAgICAgICAgICAgICAgICAnZ2V0SW52b2ljZUlkc0J5T3JkZXJOdW1iZXInLFxuICAgICAgICAgICAgICAgICdjYW5jZWxJbnZvaWNlJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoTWFya2V0cyAoKSB7XG4gICAgICAgIGxldCBtYXJrZXRzID0gYXdhaXQgdGhpcy5hcGlHZXRDdXJyZW5jeVBhaXJzQWxsICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgbWFya2V0cy5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IG1hcmtldHNbcF07XG4gICAgICAgICAgICBsZXQgaWQgPSBtYXJrZXRbJ2N1cnJlbmN5X3BhaXInXTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBtYXJrZXRbJ25hbWUnXTtcbiAgICAgICAgICAgIGxldCBbIGJhc2UsIHF1b3RlIF0gPSBzeW1ib2wuc3BsaXQgKCcvJyk7XG4gICAgICAgICAgICByZXN1bHQucHVzaCAoe1xuICAgICAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICAgICAgICAgICdzeW1ib2wnOiBzeW1ib2wsXG4gICAgICAgICAgICAgICAgJ2Jhc2UnOiBiYXNlLFxuICAgICAgICAgICAgICAgICdxdW90ZSc6IHF1b3RlLFxuICAgICAgICAgICAgICAgICdpbmZvJzogbWFya2V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy50YXBpUG9zdEdldEluZm8gKCk7XG4gICAgICAgIGxldCBiYWxhbmNlcyA9IHJlc3BvbnNlWydyZXR1cm4nXTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiBiYWxhbmNlcyB9O1xuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IHRoaXMuY3VycmVuY2llcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gdGhpcy5jdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IGxvd2VyY2FzZSA9IGN1cnJlbmN5LnRvTG93ZXJDYXNlICgpO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmICgnZnVuZHMnIGluIGJhbGFuY2VzKVxuICAgICAgICAgICAgICAgIGlmIChsb3dlcmNhc2UgaW4gYmFsYW5jZXNbJ2Z1bmRzJ10pXG4gICAgICAgICAgICAgICAgICAgIGFjY291bnRbJ2ZyZWUnXSA9IGJhbGFuY2VzWydmdW5kcyddW2xvd2VyY2FzZV07XG4gICAgICAgICAgICBpZiAoJ2Z1bmRzX2luY2xfb3JkZXJzJyBpbiBiYWxhbmNlcylcbiAgICAgICAgICAgICAgICBpZiAobG93ZXJjYXNlIGluIGJhbGFuY2VzWydmdW5kc19pbmNsX29yZGVycyddKVxuICAgICAgICAgICAgICAgICAgICBhY2NvdW50Wyd0b3RhbCddID0gYmFsYW5jZXNbJ2Z1bmRzX2luY2xfb3JkZXJzJ11bbG93ZXJjYXNlXTtcbiAgICAgICAgICAgIGlmIChhY2NvdW50Wyd0b3RhbCddICYmIGFjY291bnRbJ2ZyZWUnXSlcbiAgICAgICAgICAgICAgICBhY2NvdW50Wyd1c2VkJ10gPSBhY2NvdW50Wyd0b3RhbCddIC0gYWNjb3VudFsnZnJlZSddO1xuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IGF3YWl0IHRoaXMuYXBpR2V0RGVwdGhQYWlyICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ3BhaXInOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBvcmRlcmJvb2tbJ2JpZHMnXSxcbiAgICAgICAgICAgICdhc2tzJzogb3JkZXJib29rWydhc2tzJ10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCB0aWNrZXIgPSBhd2FpdCB0aGlzLmFwaUdldFRpY2tlclBhaXIgKHtcbiAgICAgICAgICAgICdwYWlyJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHRpY2tlclsnaGlnaCddLFxuICAgICAgICAgICAgJ2xvdyc6IHRpY2tlclsnbG93J10sXG4gICAgICAgICAgICAnYmlkJzogdGlja2VyWydiaWQnXSxcbiAgICAgICAgICAgICdhc2snOiB0aWNrZXJbJ2FzayddLFxuICAgICAgICAgICAgJ3Z3YXAnOiB0aWNrZXJbJ3Z3YXAnXSxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiB0aWNrZXJbJ2xhc3QnXSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiB0aWNrZXJbJ3ZvbHVtZSddLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaUdldFRyYWRlc1BhaXIgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAncGFpcic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBpZiAodHlwZSA9PSAnbWFya2V0JylcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyBhbGxvd3MgbGltaXQgb3JkZXJzIG9ubHknKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy50YXBpUG9zdFRyYWRlICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2N1cnJlbmN5X3BhaXInOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICAgICAgJ2FjdGlvbic6IChzaWRlID09ICdidXknKSA/ICdiaWQnIDogJ2FzaycsXG4gICAgICAgICAgICAnYW1vdW50JzogYW1vdW50LFxuICAgICAgICAgICAgJ3ByaWNlJzogcHJpY2UsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXNwb25zZSxcbiAgICAgICAgICAgICdpZCc6IHJlc3BvbnNlWydyZXR1cm4nXVsnb3JkZXJfaWQnXS50b1N0cmluZyAoKSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy50YXBpUG9zdENhbmNlbE9yZGVyICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ29yZGVyX2lkJzogaWQsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAnYXBpJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgJy8nICsgYXBpO1xuICAgICAgICBpZiAoYXBpID09ICdhcGknKSB7XG4gICAgICAgICAgICB1cmwgKz0gJy8nICsgdGhpcy52ZXJzaW9uICsgJy8nICsgdGhpcy5pbXBsb2RlUGFyYW1zIChwYXRoLCBwYXJhbXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG5vbmNlID0gdGhpcy5ub25jZSAoKTtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLnVybGVuY29kZSAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICAgICAnbWV0aG9kJzogcGF0aCxcbiAgICAgICAgICAgICAgICAnbm9uY2UnOiBub25jZSxcbiAgICAgICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtTGVuZ3RoJzogYm9keS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgJ0tleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgICAgICdTaWduJzogdGhpcy5obWFjICh0aGlzLmVuY29kZSAoYm9keSksIHRoaXMuZW5jb2RlICh0aGlzLnNlY3JldCksICdzaGE1MTInKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgICAgICBpZiAoJ2Vycm9yJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgcmVzcG9uc2VbJ2Vycm9yJ10pO1xuICAgICAgICBpZiAoJ3N1Y2Nlc3MnIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgaWYgKCFyZXNwb25zZVsnc3VjY2VzcyddKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSxcbn1cblxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG52YXIgZXhjaGFuZ2VzID0ge1xuXG4gICAgJ18xYnJva2VyJzogICAgICBfMWJyb2tlcixcbiAgICAnXzFidGN4ZSc6ICAgICAgIF8xYnRjeGUsXG4gICAgJ2FueHBybyc6ICAgICAgICBhbnhwcm8sXG4gICAgJ2JpbmFuY2UnOiAgICAgICBiaW5hbmNlLFxuICAgICdiaXQyYyc6ICAgICAgICAgYml0MmMsXG4gICAgJ2JpdGJheSc6ICAgICAgICBiaXRiYXksXG4gICAgJ2JpdGJheXMnOiAgICAgICBiaXRiYXlzLFxuICAgICdiaXRjb2luY29pZCc6ICAgYml0Y29pbmNvaWQsXG4gICAgJ2JpdGZpbmV4JzogICAgICBiaXRmaW5leCxcbiAgICAnYml0Zmx5ZXInOiAgICAgIGJpdGZseWVyLFxuICAgICdiaXRsaXNoJzogICAgICAgYml0bGlzaCxcbiAgICAnYml0bWFya2V0JzogICAgIGJpdG1hcmtldCxcbiAgICAnYml0bWV4JzogICAgICAgIGJpdG1leCxcbiAgICAnYml0c28nOiAgICAgICAgIGJpdHNvLFxuICAgICdiaXRzdGFtcCc6ICAgICAgYml0c3RhbXAsXG4gICAgJ2JpdHRyZXgnOiAgICAgICBiaXR0cmV4LFxuICAgICdibDNwJzogICAgICAgICAgYmwzcCxcbiAgICAnYnRjY2hpbmEnOiAgICAgIGJ0Y2NoaW5hLFxuICAgICdidGNlJzogICAgICAgICAgYnRjZSxcbiAgICAnYnRjZXhjaGFuZ2UnOiAgIGJ0Y2V4Y2hhbmdlLFxuICAgICdidGNtYXJrZXRzJzogICAgYnRjbWFya2V0cyxcbiAgICAnYnRjdHJhZGV1YSc6ICAgIGJ0Y3RyYWRldWEsXG4gICAgJ2J0Y3R1cmsnOiAgICAgICBidGN0dXJrLFxuICAgICdidGN4JzogICAgICAgICAgYnRjeCxcbiAgICAnYnRlcic6ICAgICAgICAgIGJ0ZXIsXG4gICAgJ2J4aW50aCc6ICAgICAgICBieGludGgsXG4gICAgJ2NjZXgnOiAgICAgICAgICBjY2V4LFxuICAgICdjZXgnOiAgICAgICAgICAgY2V4LFxuICAgICdjaGJ0Yyc6ICAgICAgICAgY2hidGMsXG4gICAgJ2NoaWxlYml0JzogICAgICBjaGlsZWJpdCxcbiAgICAnY29pbmNoZWNrJzogICAgIGNvaW5jaGVjayxcbiAgICAnY29pbmZsb29yJzogICAgIGNvaW5mbG9vcixcbiAgICAnY29pbmdpJzogICAgICAgIGNvaW5naSxcbiAgICAnY29pbm1hcmtldGNhcCc6IGNvaW5tYXJrZXRjYXAsXG4gICAgJ2NvaW5tYXRlJzogICAgICBjb2lubWF0ZSxcbiAgICAnY29pbnNlY3VyZSc6ICAgIGNvaW5zZWN1cmUsXG4gICAgJ2NvaW5zcG90JzogICAgICBjb2luc3BvdCxcbiAgICAnY3J5cHRvcGlhJzogICAgIGNyeXB0b3BpYSxcbiAgICAnZHN4JzogICAgICAgICAgIGRzeCxcbiAgICAnZXhtbyc6ICAgICAgICAgIGV4bW8sXG4gICAgJ2Zsb3didGMnOiAgICAgICBmbG93YnRjLFxuICAgICdmb3hiaXQnOiAgICAgICAgZm94Yml0LFxuICAgICdmeWJzZSc6ICAgICAgICAgZnlic2UsXG4gICAgJ2Z5YnNnJzogICAgICAgICBmeWJzZyxcbiAgICAnZ2F0ZWNvaW4nOiAgICAgIGdhdGVjb2luLFxuICAgICdnZGF4JzogICAgICAgICAgZ2RheCxcbiAgICAnZ2VtaW5pJzogICAgICAgIGdlbWluaSxcbiAgICAnaGl0YnRjJzogICAgICAgIGhpdGJ0YyxcbiAgICAnaHVvYmknOiAgICAgICAgIGh1b2JpLFxuICAgICdpdGJpdCc6ICAgICAgICAgaXRiaXQsXG4gICAgJ2p1YmknOiAgICAgICAgICBqdWJpLFxuICAgICdrcmFrZW4nOiAgICAgICAga3Jha2VuLFxuICAgICdsYWtlYnRjJzogICAgICAgbGFrZWJ0YyxcbiAgICAnbGl2ZWNvaW4nOiAgICAgIGxpdmVjb2luLFxuICAgICdsaXF1aSc6ICAgICAgICAgbGlxdWksXG4gICAgJ2x1bm8nOiAgICAgICAgICBsdW5vLFxuICAgICdtZXJjYWRvJzogICAgICAgbWVyY2FkbyxcbiAgICAnb2tjb2luY255JzogICAgIG9rY29pbmNueSxcbiAgICAnb2tjb2ludXNkJzogICAgIG9rY29pbnVzZCxcbiAgICAnb2tleCc6ICAgICAgICAgIG9rZXgsXG4gICAgJ3BheW1pdW0nOiAgICAgICBwYXltaXVtLFxuICAgICdwb2xvbmlleCc6ICAgICAgcG9sb25pZXgsXG4gICAgJ3F1YWRyaWdhY3gnOiAgICBxdWFkcmlnYWN4LFxuICAgICdxdW9pbmUnOiAgICAgICAgcXVvaW5lLFxuICAgICdzb3V0aHhjaGFuZ2UnOiAgc291dGh4Y2hhbmdlLFxuICAgICdzdXJiaXRjb2luJzogICAgc3VyYml0Y29pbixcbiAgICAndGhlcm9jayc6ICAgICAgIHRoZXJvY2ssXG4gICAgJ3VyZHViaXQnOiAgICAgICB1cmR1Yml0LFxuICAgICd2YXVsdG9ybyc6ICAgICAgdmF1bHRvcm8sXG4gICAgJ3ZidGMnOiAgICAgICAgICB2YnRjLFxuICAgICd2aXJ3b3gnOiAgICAgICAgdmlyd294LFxuICAgICd4YnRjZSc6ICAgICAgICAgeGJ0Y2UsXG4gICAgJ3lvYml0JzogICAgICAgICB5b2JpdCxcbiAgICAneXVuYmknOiAgICAgICAgIHl1bmJpLFxuICAgICd6YWlmJzogICAgICAgICAgemFpZixcbn1cblxubGV0IGRlZmluZUFsbEV4Y2hhbmdlcyA9IGZ1bmN0aW9uIChleGNoYW5nZXMpIHtcbiAgICBsZXQgcmVzdWx0ID0ge31cbiAgICBmb3IgKGxldCBpZCBpbiBleGNoYW5nZXMpXG4gICAgICAgIHJlc3VsdFtpZF0gPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEV4Y2hhbmdlIChleHRlbmQgKGV4Y2hhbmdlc1tpZF0sIHBhcmFtcykpXG4gICAgICAgIH1cbiAgICByZXN1bHQuZXhjaGFuZ2VzID0gT2JqZWN0LmtleXMgKGV4Y2hhbmdlcylcbiAgICByZXR1cm4gcmVzdWx0XG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuY29uc3QgY2N4dCA9IE9iamVjdC5hc3NpZ24gKGRlZmluZUFsbEV4Y2hhbmdlcyAoZXhjaGFuZ2VzKSwge1xuXG4gICAgdmVyc2lvbixcblxuICAgIC8vIGV4Y2VwdGlvbnNcblxuICAgIENDWFRFcnJvcixcbiAgICBFeGNoYW5nZUVycm9yLFxuICAgIE5vdFN1cHBvcnRlZCxcbiAgICBBdXRoZW50aWNhdGlvbkVycm9yLFxuICAgIEluc3VmZmljaWVudEZ1bmRzLFxuICAgIE5ldHdvcmtFcnJvcixcbiAgICBERG9TUHJvdGVjdGlvbixcbiAgICBSZXF1ZXN0VGltZW91dCxcbiAgICBFeGNoYW5nZU5vdEF2YWlsYWJsZSxcblxuICAgIC8vIGNvbW1vbiB1dGlsaXR5IGZ1bmN0aW9uc1xuXG4gICAgc2xlZXAsXG4gICAgdGltZW91dCxcbiAgICBjYXBpdGFsaXplLFxuICAgIGtleXNvcnQsXG4gICAgZXh0ZW5kLFxuICAgIG9taXQsXG4gICAgaW5kZXhCeSxcbiAgICBzb3J0QnksXG4gICAgZmxhdHRlbixcbiAgICB1bmlxdWUsXG4gICAgcGx1Y2ssXG4gICAgdXJsZW5jb2RlLFxuICAgIHN1bSxcbiAgICBkZWNpbWFsLFxuXG4gICAgLy8gdW5kZXJzY29yZSBhbGlhc2VzXG5cbiAgICBpbmRleF9ieTogaW5kZXhCeSxcbiAgICBzb3J0X2J5OiBzb3J0QnksXG5cbiAgICAvLyBjcnlwdG8gZnVuY3Rpb25zXG5cbiAgICBiaW5hcnlDb25jYXQsXG4gICAgc3RyaW5nVG9CaW5hcnksXG4gICAgYmluYXJ5VG9TdHJpbmcsXG4gICAgc3RyaW5nVG9CYXNlNjQsXG4gICAgdXRmMTZUb0Jhc2U2NCxcbiAgICBiYXNlNjRUb0JpbmFyeSxcbiAgICBiYXNlNjRUb1N0cmluZyxcbiAgICB1cmxlbmNvZGVCYXNlNjQsXG4gICAgaGFzaCxcbiAgICBobWFjLFxuICAgIGp3dCxcblxufSlcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5pZiAoaXNDb21tb25KUykge1xuXG4gICAgbW9kdWxlLmV4cG9ydHMgPSBjY3h0XG5cbn0gZWxzZSB7XG5cbiAgICB3aW5kb3cuY2N4dCA9IGNjeHRcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG59KSAoKSAvLyBlbmQgb2YgbmFtZXNwYWNlXG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2NjeHQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTBCQSxDQUFDLFlBQVk7O0FBRWI7QUFDQTs7QUFFQSxRQUFNLFdBQVcsUUFBUyxXQUFULENBQWpCO0FBQUEsUUFDTSxLQUFXLFFBQVMsSUFBVCxDQURqQixDQUxhLENBTW1CO0FBQzVCOztBQUVKO0FBQ0E7O0FBRUEsUUFBTSxVQUFVLFFBQWhCOztBQUVBO0FBQ0E7O0FBRUEsUUFBTSxTQUFjLE9BQU8sTUFBUCxLQUFrQixXQUF0QztBQUFBLFFBQ00sYUFBYyxPQUFPLE1BQVAsS0FBa0IsV0FBbkIsSUFBb0MsT0FBTyxPQUFQLEtBQW1CLFdBRDFFOztBQUdBOztBQXBCYSxRQXNCUCxTQXRCTztBQUFBOztBQXVCVCwyQkFBYSxPQUFiLEVBQXNCO0FBQUE7O0FBRWxCO0FBRmtCLDhIQUNYLE9BRFc7O0FBR2xCLGtCQUFLLFdBQUwsR0FBbUIsU0FBbkI7QUFDQSxrQkFBSyxTQUFMLEdBQW1CLFVBQVUsU0FBN0I7QUFDQSxrQkFBSyxPQUFMLEdBQW1CLE9BQW5CO0FBTGtCO0FBTXJCOztBQTdCUTtBQUFBLE1Bc0JXLEtBdEJYOztBQUFBLFFBZ0NQLGFBaENPO0FBQUE7O0FBaUNULCtCQUFhLE9BQWIsRUFBc0I7QUFBQTs7QUFBQSx1SUFDWCxPQURXOztBQUVsQixtQkFBSyxXQUFMLEdBQW1CLGFBQW5CO0FBQ0EsbUJBQUssU0FBTCxHQUFtQixjQUFjLFNBQWpDO0FBQ0EsbUJBQUssT0FBTCxHQUFtQixPQUFuQjtBQUprQjtBQUtyQjs7QUF0Q1E7QUFBQSxNQWdDZSxTQWhDZjs7QUFBQSxRQXlDUCxZQXpDTztBQUFBOztBQTBDVCw4QkFBYSxPQUFiLEVBQXNCO0FBQUE7O0FBQUEscUlBQ1gsT0FEVzs7QUFFbEIsbUJBQUssV0FBTCxHQUFtQixZQUFuQjtBQUNBLG1CQUFLLFNBQUwsR0FBbUIsYUFBYSxTQUFoQztBQUNBLG1CQUFLLE9BQUwsR0FBbUIsT0FBbkI7QUFKa0I7QUFLckI7O0FBL0NRO0FBQUEsTUF5Q2MsYUF6Q2Q7O0FBQUEsUUFrRFAsbUJBbERPO0FBQUE7O0FBbURULHFDQUFhLE9BQWIsRUFBc0I7QUFBQTs7QUFBQSxtSkFDWCxPQURXOztBQUVsQixtQkFBSyxXQUFMLEdBQW1CLG1CQUFuQjtBQUNBLG1CQUFLLFNBQUwsR0FBbUIsb0JBQW9CLFNBQXZDO0FBQ0EsbUJBQUssT0FBTCxHQUFtQixPQUFuQjtBQUprQjtBQUtyQjs7QUF4RFE7QUFBQSxNQWtEcUIsYUFsRHJCOztBQUFBLFFBMkRQLGlCQTNETztBQUFBOztBQTREVCxtQ0FBYSxPQUFiLEVBQXNCO0FBQUE7O0FBQUEsK0lBQ1gsT0FEVzs7QUFFbEIsbUJBQUssV0FBTCxHQUFtQixpQkFBbkI7QUFDQSxtQkFBSyxTQUFMLEdBQW1CLGtCQUFrQixTQUFyQztBQUNBLG1CQUFLLE9BQUwsR0FBbUIsT0FBbkI7QUFKa0I7QUFLckI7O0FBakVRO0FBQUEsTUEyRG1CLGFBM0RuQjs7QUFBQSxRQW9FUCxZQXBFTztBQUFBOztBQXFFVCw4QkFBYSxPQUFiLEVBQXNCO0FBQUE7O0FBQUEscUlBQ1gsT0FEVzs7QUFFbEIsbUJBQUssV0FBTCxHQUFtQixZQUFuQjtBQUNBLG1CQUFLLFNBQUwsR0FBbUIsYUFBYSxTQUFoQztBQUNBLG1CQUFLLE9BQUwsR0FBbUIsT0FBbkI7QUFKa0I7QUFLckI7O0FBMUVRO0FBQUEsTUFvRWMsU0FwRWQ7O0FBQUEsUUE2RVAsY0E3RU87QUFBQTs7QUE4RVQsZ0NBQWEsT0FBYixFQUFzQjtBQUFBOztBQUFBLHlJQUNYLE9BRFc7O0FBRWxCLG1CQUFLLFdBQUwsR0FBbUIsY0FBbkI7QUFDQSxtQkFBSyxTQUFMLEdBQW1CLGVBQWUsU0FBbEM7QUFDQSxtQkFBSyxPQUFMLEdBQW1CLE9BQW5CO0FBSmtCO0FBS3JCOztBQW5GUTtBQUFBLE1BNkVnQixZQTdFaEI7O0FBQUEsUUFzRlAsY0F0Rk87QUFBQTs7QUF1RlQsZ0NBQWEsT0FBYixFQUFzQjtBQUFBOztBQUFBLHlJQUNYLE9BRFc7O0FBRWxCLG1CQUFLLFdBQUwsR0FBbUIsY0FBbkI7QUFDQSxtQkFBSyxTQUFMLEdBQW1CLGVBQWUsU0FBbEM7QUFDQSxtQkFBSyxPQUFMLEdBQW1CLE9BQW5CO0FBSmtCO0FBS3JCOztBQTVGUTtBQUFBLE1Bc0ZnQixZQXRGaEI7O0FBQUEsUUErRlAsb0JBL0ZPO0FBQUE7O0FBZ0dULHNDQUFhLE9BQWIsRUFBc0I7QUFBQTs7QUFBQSxxSkFDWCxPQURXOztBQUVsQixtQkFBSyxXQUFMLEdBQW1CLG9CQUFuQjtBQUNBLG1CQUFLLFNBQUwsR0FBbUIscUJBQXFCLFNBQXhDO0FBQ0EsbUJBQUssT0FBTCxHQUFtQixPQUFuQjtBQUprQjtBQUtyQjs7QUFyR1E7QUFBQSxNQStGc0IsWUEvRnRCOztBQXdHYjtBQUNBOztBQUVBLFFBQU0sUUFBUSxTQUFSLEtBQVE7QUFBQSxlQUFNLElBQUksT0FBSixDQUFhO0FBQUEsbUJBQVcsV0FBWSxPQUFaLEVBQXFCLEVBQXJCLENBQVg7QUFBQSxTQUFiLENBQU47QUFBQSxLQUFkOztBQUVBLFFBQU0sVUFBVSxTQUFWLE9BQVU7QUFBQSxlQUFTLFdBQVksS0FBWixFQUFtQixRQUFuQixFQUFUO0FBQUEsS0FBaEI7O0FBRUEsUUFBTSxVQUFVLFNBQVYsT0FBVSxDQUFDLEVBQUQsRUFBSyxPQUFMO0FBQUEsZUFDUixRQUFRLElBQVIsQ0FBYyxDQUNWLE9BRFUsRUFFVixNQUFPLEVBQVAsRUFBVyxJQUFYLENBQWlCLFlBQU07QUFBRSxrQkFBTSxJQUFJLGNBQUosQ0FBb0IsbUJBQXBCLENBQU47QUFBZ0QsU0FBekUsQ0FGVSxDQUFkLENBRFE7QUFBQSxLQUFoQjs7QUFNQSxRQUFNLGFBQWEsU0FBYixVQUFhO0FBQUEsZUFBVSxPQUFPLE1BQVAsR0FBaUIsT0FBTyxNQUFQLENBQWUsQ0FBZixFQUFrQixXQUFsQixLQUFtQyxPQUFPLEtBQVAsQ0FBYyxDQUFkLENBQXBELEdBQXdFLE1BQWxGO0FBQUEsS0FBbkI7O0FBRUEsUUFBTSxVQUFVLFNBQVYsT0FBVSxTQUFVO0FBQ3RCLFlBQU0sU0FBUyxFQUFmO0FBQ0EsZUFBTyxJQUFQLENBQWEsTUFBYixFQUFxQixJQUFyQixHQUE2QixPQUE3QixDQUFzQztBQUFBLG1CQUFPLE9BQU8sR0FBUCxJQUFjLE9BQU8sR0FBUCxDQUFyQjtBQUFBLFNBQXRDO0FBQ0EsZUFBTyxNQUFQO0FBQ0gsS0FKRDs7QUFNQSxRQUFNLFNBQVMsU0FBVCxNQUFTLEdBQWE7QUFBQSwwQ0FBVCxJQUFTO0FBQVQsZ0JBQVM7QUFBQTs7QUFDeEIsWUFBTSxTQUFTLEVBQWY7O0FBRHdCLG1DQUVmLENBRmU7QUFHcEIsZ0JBQUksUUFBTyxLQUFLLENBQUwsQ0FBUCxNQUFtQixRQUF2QixFQUNJLE9BQU8sSUFBUCxDQUFhLEtBQUssQ0FBTCxDQUFiLEVBQXNCLE9BQXRCLENBQStCO0FBQUEsdUJBQzFCLE9BQU8sR0FBUCxJQUFjLEtBQUssQ0FBTCxFQUFRLEdBQVIsQ0FEWTtBQUFBLGFBQS9CO0FBSmdCOztBQUV4QixhQUFLLElBQUksSUFBSSxDQUFiLEVBQWdCLElBQUksS0FBSyxNQUF6QixFQUFpQyxHQUFqQztBQUFBLGtCQUFTLENBQVQ7QUFBQSxTQUlBLE9BQU8sTUFBUDtBQUNILEtBUEQ7O0FBU0EsUUFBTSxPQUFPLFNBQVAsSUFBTyxDQUFVLE1BQVYsRUFBa0I7QUFDM0IsWUFBTSxTQUFTLE9BQVEsTUFBUixDQUFmO0FBQ0EsYUFBSyxJQUFJLElBQUksQ0FBYixFQUFnQixJQUFJLFVBQVUsTUFBOUIsRUFBc0MsR0FBdEM7QUFDSSxnQkFBSSxPQUFPLFVBQVUsQ0FBVixDQUFQLEtBQXdCLFFBQTVCLEVBQ0ksT0FBTyxPQUFPLFVBQVUsQ0FBVixDQUFQLENBQVAsQ0FESixLQUVLLElBQUksTUFBTSxPQUFOLENBQWUsVUFBVSxDQUFWLENBQWYsQ0FBSixFQUNELEtBQUssSUFBSSxJQUFJLENBQWIsRUFBZ0IsSUFBSSxVQUFVLENBQVYsRUFBYSxNQUFqQyxFQUF5QyxHQUF6QztBQUNJLHVCQUFPLE9BQU8sVUFBVSxDQUFWLEVBQWEsQ0FBYixDQUFQLENBQVA7QUFESjtBQUpSLFNBTUEsT0FBTyxNQUFQO0FBQ0gsS0FURDs7QUFXQSxRQUFNLFVBQVUsU0FBVixPQUFVLENBQUMsS0FBRCxFQUFRLEdBQVIsRUFBZ0I7QUFDNUIsWUFBTSxTQUFTLEVBQWY7QUFDQSxhQUFLLElBQUksSUFBSSxDQUFiLEVBQWdCLElBQUksTUFBTSxNQUExQixFQUFrQyxHQUFsQyxFQUF1QztBQUNuQyxnQkFBSSxVQUFVLE1BQU0sQ0FBTixDQUFkO0FBQ0EsZ0JBQUksT0FBTyxRQUFRLEdBQVIsQ0FBUCxJQUF1QixXQUEzQixFQUF3QztBQUNwQyx1QkFBTyxRQUFRLEdBQVIsQ0FBUCxJQUF1QixPQUF2QjtBQUNIO0FBQ0o7QUFDRCxlQUFPLE1BQVA7QUFDSCxLQVREOztBQVdBLFFBQU0sU0FBUyxTQUFULE1BQVMsQ0FBQyxLQUFELEVBQVEsR0FBUixFQUFvQztBQUFBLFlBQXZCLFVBQXVCLHVFQUFWLEtBQVU7O0FBQy9DLHFCQUFhLGFBQWEsQ0FBQyxDQUFkLEdBQWtCLENBQS9CO0FBQ0EsZUFBTyxNQUFNLElBQU4sQ0FBWSxVQUFDLENBQUQsRUFBSSxDQUFKO0FBQUEsbUJBQVksRUFBRSxHQUFGLElBQVMsRUFBRSxHQUFGLENBQVYsR0FBb0IsQ0FBQyxVQUFyQixHQUFvQyxFQUFFLEdBQUYsSUFBUyxFQUFFLEdBQUYsQ0FBVixHQUFvQixVQUFwQixHQUFpQyxDQUEvRTtBQUFBLFNBQVosQ0FBUDtBQUNILEtBSEQ7O0FBS0EsUUFBTSxVQUFVLFNBQVYsT0FBVSxDQUFDLEtBQUQsRUFBd0I7QUFBQSxZQUFoQixNQUFnQix1RUFBUCxFQUFPOztBQUNwQyxhQUFLLElBQUksSUFBSSxDQUFSLEVBQVcsU0FBUyxNQUFNLE1BQS9CLEVBQXVDLElBQUksTUFBM0MsRUFBbUQsR0FBbkQsRUFBd0Q7QUFDcEQsZ0JBQU0sUUFBUSxNQUFNLENBQU4sQ0FBZDtBQUNBLGdCQUFJLE1BQU0sT0FBTixDQUFlLEtBQWYsQ0FBSixFQUEyQjtBQUN2Qix3QkFBUyxLQUFULEVBQWdCLE1BQWhCO0FBQ0gsYUFGRCxNQUVPO0FBQ0gsdUJBQU8sSUFBUCxDQUFhLEtBQWI7QUFDSDtBQUNKO0FBQ0QsZUFBTyxNQUFQO0FBQ0gsS0FWRDs7QUFZQSxRQUFNLFNBQVMsU0FBVCxNQUFTO0FBQUEsZUFBUyxNQUFNLE1BQU4sQ0FBYyxVQUFDLEtBQUQsRUFBUSxLQUFSLEVBQWUsSUFBZjtBQUFBLG1CQUF5QixLQUFLLE9BQUwsQ0FBYyxLQUFkLEtBQXdCLEtBQWpEO0FBQUEsU0FBZCxDQUFUO0FBQUEsS0FBZjs7QUFFQSxRQUFNLFFBQVEsU0FBUixLQUFRLENBQUMsS0FBRCxFQUFRLEdBQVI7QUFBQSxlQUFnQixNQUNHLE1BREgsQ0FDVztBQUFBLG1CQUFZLE9BQU8sUUFBUSxHQUFSLENBQVAsSUFBdUIsV0FBbkM7QUFBQSxTQURYLEVBRUcsR0FGSCxDQUVRO0FBQUEsbUJBQVcsUUFBUSxHQUFSLENBQVg7QUFBQSxTQUZSLENBQWhCO0FBQUEsS0FBZDs7QUFJQSxRQUFNLFlBQVksU0FBWixTQUFZO0FBQUEsZUFBVSxHQUFHLFNBQUgsQ0FBYyxNQUFkLENBQVY7QUFBQSxLQUFsQjs7QUFFQSxRQUFNLE1BQU0sU0FBTixHQUFNLEdBQWE7QUFBQSwyQ0FBVCxJQUFTO0FBQVQsZ0JBQVM7QUFBQTs7QUFDckIsWUFBTSxTQUFTLEtBQUssTUFBTCxDQUFhO0FBQUEsbUJBQU8sT0FBTyxHQUFQLElBQWMsV0FBckI7QUFBQSxTQUFiLENBQWY7QUFDQSxlQUFRLE9BQU8sTUFBUCxHQUFnQixDQUFqQixHQUNILE9BQU8sTUFBUCxDQUFlLFVBQUMsR0FBRCxFQUFNLEtBQU47QUFBQSxtQkFBZ0IsTUFBTSxLQUF0QjtBQUFBLFNBQWYsRUFBNEMsQ0FBNUMsQ0FERyxHQUM4QyxTQURyRDtBQUVILEtBSkQ7O0FBTUEsUUFBTSxVQUFVLFNBQVYsT0FBVTtBQUFBLGVBQUssQ0FBTDtBQUFBLEtBQWhCLENBM0xhLENBMkxVOztBQUV2QjtBQUNBOztBQUVBLFFBQU0sWUFBYyxVQUFVLE9BQU8sT0FBUCxDQUFnQixZQUFoQixDQUE5QixDQUFvRTtBQUFwRTtBQUFBLFFBQ00sY0FBZSxPQUFPLE1BQVAsS0FBa0IsV0FBbEIsSUFBaUMsT0FBTyxLQUQ3RCxDQUNvRTtBQURwRTtBQUFBLFFBRU0sV0FBYyxTQUFkLFFBQWMsQ0FBQyxHQUFELEVBQU0sT0FBTjtBQUFBLFlBQWUsT0FBZix1RUFBeUIsS0FBekI7QUFBQSxlQUFnRDtBQUM1QyxnQkFBSSxPQUFKLENBQWEsVUFBQyxPQUFELEVBQVUsTUFBVixFQUFxQjs7QUFFOUIsb0JBQUksT0FBSixFQUNJLFFBQVEsR0FBUixDQUFhLEdBQWIsRUFBa0IsT0FBbEI7O0FBRUosb0JBQU0sTUFBTSxJQUFJLGNBQUosRUFBWjtBQUNBLG9CQUFNLFNBQVMsUUFBUSxNQUFSLElBQWtCLEtBQWpDOztBQUVBLG9CQUFJLElBQUosQ0FBVSxNQUFWLEVBQWtCLEdBQWxCLEVBQXVCLElBQXZCO0FBQ0Esb0JBQUksa0JBQUosR0FBeUIsWUFBTTtBQUMzQix3QkFBSSxJQUFJLFVBQUosSUFBa0IsQ0FBdEIsRUFBeUI7QUFDckIsNEJBQUksSUFBSSxNQUFKLElBQWMsR0FBbEIsRUFDSSxRQUFTLElBQUksWUFBYixFQURKLEtBRUs7QUFBRTtBQUNILGtDQUFNLElBQUksS0FBSixDQUFXLE1BQVgsRUFBbUIsR0FBbkIsRUFBd0IsSUFBSSxNQUE1QixFQUFvQyxJQUFJLFlBQXhDLENBQU47QUFDSDtBQUNKO0FBQ0osaUJBUkQ7O0FBVUEsb0JBQUksT0FBTyxRQUFRLE9BQWYsSUFBMEIsV0FBOUIsRUFDSSxLQUFLLElBQUksTUFBVCxJQUFtQixRQUFRLE9BQTNCO0FBQ0ksd0JBQUksZ0JBQUosQ0FBc0IsTUFBdEIsRUFBOEIsUUFBUSxPQUFSLENBQWdCLE1BQWhCLENBQTlCO0FBREosaUJBR0osSUFBSSxJQUFKLENBQVUsUUFBUSxJQUFsQjtBQUNILGFBeEJEO0FBREo7QUFBQSxLQUZwQjs7QUE2QkEsUUFBTSxRQUFRLGFBQWEsV0FBYixJQUE0QixRQUExQzs7QUFFQTtBQUNBOztBQUVBLFFBQU0saUJBQWlCLFNBQWpCLGNBQWlCLE1BQU87QUFDMUIsWUFBTSxNQUFNLElBQUksVUFBSixDQUFnQixJQUFJLE1BQXBCLENBQVo7QUFDQSxhQUFLLElBQUksSUFBSSxDQUFiLEVBQWdCLElBQUksSUFBSSxNQUF4QixFQUFnQyxHQUFoQyxFQUFxQztBQUFFLGdCQUFJLENBQUosSUFBUyxJQUFJLFVBQUosQ0FBZSxDQUFmLENBQVQ7QUFBNkI7QUFDcEUsZUFBTyxTQUFTLEdBQVQsQ0FBYSxTQUFiLENBQXVCLE1BQXZCLENBQStCLEdBQS9CLENBQVA7QUFDSCxLQUpEOztBQU1BLFFBQU0saUJBQWlCLFNBQWpCLGNBQWlCO0FBQUEsZUFBVSxTQUFTLEdBQVQsQ0FBYSxNQUFiLENBQW9CLEtBQXBCLENBQTJCLE1BQTNCLEVBQW1DLFFBQW5DLENBQTZDLFNBQVMsR0FBVCxDQUFhLE1BQTFELENBQVY7QUFBQSxLQUF2QjtBQUFBLFFBQ00sZ0JBQWlCLFNBQWpCLGFBQWlCO0FBQUEsZUFBVSxTQUFTLEdBQVQsQ0FBYSxLQUFiLENBQW9CLEtBQXBCLENBQTJCLE1BQTNCLEVBQW1DLFFBQW5DLENBQTZDLFNBQVMsR0FBVCxDQUFhLE1BQTFELENBQVY7QUFBQSxLQUR2QjtBQUFBLFFBRU0saUJBQWlCLFNBQWpCLGNBQWlCO0FBQUEsZUFBVSxTQUFTLEdBQVQsQ0FBYSxNQUFiLENBQW9CLEtBQXBCLENBQTJCLE1BQTNCLENBQVY7QUFBQSxLQUZ2QjtBQUFBLFFBR00saUJBQWlCLFNBQWpCLGNBQWlCO0FBQUEsZUFBVSxTQUFTLEdBQVQsQ0FBYSxNQUFiLENBQW9CLEtBQXBCLENBQTJCLE1BQTNCLEVBQW1DLFFBQW5DLENBQTZDLFNBQVMsR0FBVCxDQUFhLElBQTFELENBQVY7QUFBQSxLQUh2QjtBQUFBLFFBSU0saUJBQWlCLFNBQWpCLGNBQWlCO0FBQUEsZUFBVSxNQUFWO0FBQUEsS0FKdkI7O0FBTUEsUUFBTSxlQUFlLFNBQWYsWUFBZTtBQUFBLDJDQUFJLElBQUo7QUFBSSxnQkFBSjtBQUFBOztBQUFBLGVBQWEsS0FBSyxNQUFMLENBQWEsVUFBQyxDQUFELEVBQUksQ0FBSjtBQUFBLG1CQUFVLEVBQUUsTUFBRixDQUFVLENBQVYsQ0FBVjtBQUFBLFNBQWIsQ0FBYjtBQUFBLEtBQXJCOztBQUVBO0FBQ0EsUUFBTSxrQkFBa0IsU0FBbEIsZUFBa0I7QUFBQSxlQUFnQixhQUFhLE9BQWIsQ0FBc0IsT0FBdEIsRUFBK0IsRUFBL0IsRUFDYSxPQURiLENBQ3NCLEtBRHRCLEVBQzZCLEdBRDdCLEVBRWEsT0FGYixDQUVzQixLQUZ0QixFQUU2QixHQUY3QixDQUFoQjtBQUFBLEtBQXhCOztBQUlBO0FBQ0E7O0FBRUEsUUFBTSxPQUFPLGNBQUMsT0FBRCxFQUEyQztBQUFBLFlBQWpDLElBQWlDLHVFQUExQixLQUEwQjtBQUFBLFlBQW5CLE1BQW1CLHVFQUFWLEtBQVU7O0FBQ3BELFlBQU0sU0FBUyxTQUFTLEtBQUssV0FBTCxFQUFULEVBQStCLE9BQS9CLENBQWY7QUFDQSxlQUFRLFVBQVUsUUFBWCxHQUF1QixNQUF2QixHQUFnQyxPQUFPLFFBQVAsQ0FBaUIsU0FBUyxHQUFULENBQWEsV0FBWSxNQUFaLENBQWIsQ0FBakIsQ0FBdkM7QUFDSCxLQUhEOztBQUtBLFFBQU0sT0FBTyxTQUFQLElBQU8sQ0FBQyxPQUFELEVBQVUsTUFBVixFQUFzRDtBQUFBLFlBQXBDLElBQW9DLHVFQUE3QixRQUE2QjtBQUFBLFlBQW5CLE1BQW1CLHVFQUFWLEtBQVU7O0FBQy9ELFlBQU0sV0FBWSxVQUFVLFFBQVgsR0FBdUIsUUFBdkIsR0FBa0MsV0FBWSxNQUFaLENBQW5EO0FBQ0EsZUFBTyxTQUFTLFNBQVMsS0FBSyxXQUFMLEVBQWxCLEVBQXdDLE9BQXhDLEVBQWlELE1BQWpELEVBQXlELFFBQXpELENBQW1FLFNBQVMsR0FBVCxDQUFhLFdBQVksUUFBWixDQUFiLENBQW5FLENBQVA7QUFDSCxLQUhEOztBQUtBO0FBQ0E7O0FBRUEsUUFBTSxNQUFNLFNBQU4sR0FBTSxDQUFDLE9BQUQsRUFBVSxNQUFWLEVBQXFEO0FBQUEsWUFBbkMsR0FBbUMsdUVBQTdCLE9BQTZCO0FBQUEsWUFBcEIsSUFBb0IsdUVBQWIsUUFBYTs7QUFDN0QsWUFBTSxnQkFBZ0IsZ0JBQWlCLGVBQWdCLEtBQUssU0FBTCxDQUFnQixFQUFFLE9BQU8sR0FBVCxFQUFjLE9BQU8sS0FBckIsRUFBaEIsQ0FBaEIsQ0FBakIsQ0FBdEI7QUFBQSxZQUNNLGNBQWMsZ0JBQWlCLGVBQWdCLEtBQUssU0FBTCxDQUFnQixPQUFoQixDQUFoQixDQUFqQixDQURwQjtBQUFBLFlBRU0sUUFBUSxDQUFFLGFBQUYsRUFBaUIsV0FBakIsRUFBK0IsSUFBL0IsQ0FBcUMsR0FBckMsQ0FGZDtBQUFBLFlBR00sWUFBWSxnQkFBaUIsY0FBZSxLQUFNLEtBQU4sRUFBYSxNQUFiLEVBQXFCLElBQXJCLEVBQTJCLE9BQTNCLENBQWYsQ0FBakIsQ0FIbEI7QUFJQSxlQUFPLENBQUUsS0FBRixFQUFTLFNBQVQsRUFBcUIsSUFBckIsQ0FBMkIsR0FBM0IsQ0FBUDtBQUNILEtBTkQ7O0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLFFBQU0sV0FBVyxTQUFYLFFBQVcsQ0FBVSxNQUFWLEVBQWtCO0FBQUE7O0FBRS9CLGFBQUssSUFBTCxHQUFZLElBQVo7QUFDQSxhQUFLLElBQUwsR0FBWSxJQUFaO0FBQ0EsYUFBSyxHQUFMLEdBQVcsR0FBWCxDQUorQixDQUloQjtBQUNmLGFBQUssWUFBTCxHQUFvQixZQUFwQjtBQUNBLGFBQUssY0FBTCxHQUFzQixjQUF0QjtBQUNBLGFBQUssY0FBTCxHQUFzQixjQUF0QjtBQUNBLGFBQUssY0FBTCxHQUFzQixjQUF0QjtBQUNBLGFBQUssY0FBTCxHQUFzQixjQUF0QjtBQUNBLGFBQUssY0FBTCxHQUFzQixjQUF0QjtBQUNBLGFBQUssYUFBTCxHQUFxQixhQUFyQjtBQUNBLGFBQUssU0FBTCxHQUFpQixTQUFqQjtBQUNBLGFBQUssa0JBQUwsR0FBMEIsa0JBQTFCO0FBQ0EsYUFBSyxJQUFMLEdBQVksSUFBWjtBQUNBLGFBQUssS0FBTCxHQUFhLEtBQWI7QUFDQSxhQUFLLE1BQUwsR0FBYyxNQUFkO0FBQ0EsYUFBSyxNQUFMLEdBQWMsTUFBZDtBQUNBLGFBQUssT0FBTCxHQUFlLE9BQWY7QUFDQSxhQUFLLE9BQUwsR0FBZSxPQUFmO0FBQ0EsYUFBSyxNQUFMLEdBQWMsTUFBZDtBQUNBLGFBQUssT0FBTCxHQUFlLE9BQWY7QUFDQSxhQUFLLE9BQUwsR0FBZSxPQUFmO0FBQ0EsYUFBSyxVQUFMLEdBQWtCLFVBQWxCO0FBQ0EsYUFBSyxJQUFMLEdBQVksS0FBSyxTQUFqQjtBQUNBLGFBQUssR0FBTCxHQUFXLEdBQVg7QUFDQSxhQUFLLE9BQUwsR0FBZSxPQUFmOztBQUVBLGFBQUssTUFBTCxHQUFjO0FBQUEsbUJBQVUsTUFBVjtBQUFBLFNBQWQ7QUFDQSxhQUFLLE1BQUwsR0FBYztBQUFBLG1CQUFVLE1BQVY7QUFBQSxTQUFkOztBQUVBLFlBQUksTUFBSixFQUNJLEtBQUssV0FBTCxHQUFtQixRQUFRLE9BQVIsQ0FBZ0IsS0FBaEIsQ0FBdUIsY0FBdkIsRUFBd0MsQ0FBeEMsQ0FBbkI7O0FBRUosYUFBSyxJQUFMLEdBQVksWUFBWTtBQUNwQixpQkFBSyxNQUFMLEdBQWMsRUFBZDtBQUNBLGlCQUFLLE1BQUwsR0FBYyxFQUFkO0FBQ0EsZ0JBQUksS0FBSyxHQUFULEVBQ0ksS0FBSyxhQUFMLENBQW9CLEtBQUssR0FBekIsRUFBOEIsU0FBOUI7QUFDSixnQkFBSSxLQUFLLE9BQVQsRUFDSSxLQUFLLFVBQUwsQ0FBaUIsS0FBSyxPQUF0QjtBQUNQLFNBUEQ7O0FBU0EsYUFBSyxhQUFMLEdBQXFCLFVBQVUsR0FBVixFQUFlLFVBQWYsRUFBeUM7QUFBQTs7QUFBQSxnQkFBZCxPQUFjLHVFQUFKLEVBQUk7O0FBQzFELG1CQUFPLElBQVAsQ0FBYSxHQUFiLEVBQWtCLE9BQWxCLENBQTJCLGdCQUFRO0FBQy9CLHVCQUFPLElBQVAsQ0FBYSxJQUFJLElBQUosQ0FBYixFQUF3QixPQUF4QixDQUFpQyxzQkFBYztBQUMzQyx3QkFBSSxPQUFPLElBQUksSUFBSixFQUFVLFVBQVYsQ0FBWDs7QUFEMkMsaURBRWxDLENBRmtDO0FBR3ZDLDRCQUFJLE1BQU0sS0FBSyxDQUFMLEVBQVEsSUFBUixFQUFWO0FBQ0EsNEJBQUksWUFBWSxJQUFJLEtBQUosQ0FBVyxjQUFYLENBQWhCOztBQUVBLDRCQUFJLGtCQUFtQixXQUFXLFdBQVgsRUFBdkI7QUFDQSw0QkFBSSxrQkFBbUIsV0FBVyxXQUFYLEVBQXZCO0FBQ0EsNEJBQUksa0JBQW1CLFdBQVksZUFBWixDQUF2QjtBQUNBLDRCQUFJLGtCQUFtQixVQUFVLEdBQVYsQ0FBZSxVQUFmLEVBQTJCLElBQTNCLENBQWlDLEVBQWpDLENBQXZCO0FBQ0EsNEJBQUksbUJBQW1CLFVBQVUsR0FBVixDQUFlO0FBQUEsbUNBQUssRUFBRSxJQUFGLEdBQVUsV0FBVixFQUFMO0FBQUEseUJBQWYsRUFBOEMsTUFBOUMsQ0FBc0Q7QUFBQSxtQ0FBSyxFQUFFLE1BQUYsR0FBVyxDQUFoQjtBQUFBLHlCQUF0RCxFQUF5RSxJQUF6RSxDQUErRSxHQUEvRSxDQUF2Qjs7QUFFQSw0QkFBSSxnQkFBZ0IsT0FBaEIsQ0FBeUIsZUFBekIsTUFBOEMsQ0FBbEQsRUFDSSxrQkFBa0IsZ0JBQWdCLEtBQWhCLENBQXVCLGdCQUFnQixNQUF2QyxDQUFsQjs7QUFFSiw0QkFBSSxpQkFBaUIsT0FBakIsQ0FBMEIsZUFBMUIsTUFBK0MsQ0FBbkQsRUFDSSxtQkFBbUIsaUJBQWlCLEtBQWpCLENBQXdCLGdCQUFnQixNQUF4QyxDQUFuQjs7QUFFSiw0QkFBSSxZQUFhLE9BQU8sZUFBUCxHQUF5QixXQUFZLGVBQVosQ0FBMUM7QUFDQSw0QkFBSSxhQUFhLE9BQU8sR0FBUCxHQUFhLGVBQWIsR0FBK0IsR0FBL0IsR0FBcUMsZ0JBQXREOztBQUVBLDRCQUFJLGNBQWMsT0FBbEIsRUFBMkI7QUFDdkIsZ0NBQUksZUFBZSxRQUFRLFVBQVIsQ0FBbkIsRUFDSSxhQUFhLFFBQVEsVUFBUixFQUFvQixXQUFwQixDQUFiO0FBQ0osZ0NBQUksZ0JBQWdCLFFBQVEsUUFBNUIsRUFDSSxjQUFjLFFBQVEsVUFBUixFQUFvQixZQUFwQixDQUFkO0FBQ1A7O0FBRUQsNEJBQUksdUJBQXVCLE9BQTNCLEVBQ0ksY0FBYyxRQUFRLGdCQUF0QjtBQUNKLDRCQUFJLHNCQUFzQixPQUExQixFQUNJLGFBQWEsUUFBUSxlQUFyQjs7QUFFSiw0QkFBSSxVQUFVLFNBQVYsT0FBVTtBQUFBLG1DQUFVLFFBQUssVUFBTCxFQUFrQixHQUFsQixFQUF1QixJQUF2QixFQUE2QixlQUE3QixFQUE4QyxNQUE5QyxDQUFWO0FBQUEseUJBQWQ7O0FBRUEsZ0NBQUssU0FBTCxJQUFtQixPQUFuQjtBQUNBLGdDQUFLLFVBQUwsSUFBbUIsT0FBbkI7QUFwQ3VDOztBQUUzQyx5QkFBSyxJQUFJLElBQUksQ0FBYixFQUFnQixJQUFJLEtBQUssTUFBekIsRUFBaUMsR0FBakMsRUFBc0M7QUFBQSwrQkFBN0IsQ0FBNkI7QUFtQ3JDO0FBQ0osaUJBdENEO0FBdUNILGFBeENEO0FBeUNILFNBMUNEOztBQTRDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxhQUFLLEtBQUwsR0FBYSxVQUFVLEdBQVYsRUFBc0U7QUFBQSxnQkFBdkQsTUFBdUQsdUVBQTlDLEtBQThDOztBQUFBOztBQUFBLGdCQUF2QyxPQUF1Qyx1RUFBN0IsU0FBNkI7QUFBQSxnQkFBbEIsSUFBa0IsdUVBQVgsU0FBVzs7O0FBRS9FLGdCQUFJLFVBQVUsS0FBSyxTQUFuQixFQUNJLElBQUksT0FBTyxLQUFLLFNBQVosSUFBeUIsUUFBN0IsRUFDSSxVQUFVLE9BQVEsRUFBRSxjQUFjLEtBQUssU0FBckIsRUFBUixFQUEwQyxPQUExQyxDQUFWLENBREosS0FFSyxJQUFLLFFBQU8sS0FBSyxTQUFaLEtBQXlCLFFBQTFCLElBQXdDLGdCQUFnQixLQUFLLFNBQWpFLEVBQ0QsVUFBVSxPQUFRLEtBQUssU0FBYixFQUF3QixPQUF4QixDQUFWOztBQUVSLGdCQUFJLEtBQUssS0FBTCxDQUFXLE1BQWYsRUFDSSxVQUFVLE9BQVEsRUFBRSxVQUFVLEdBQVosRUFBUixFQUEyQixPQUEzQixDQUFWOztBQUVKLGdCQUFJLFVBQVUsRUFBRSxVQUFVLE1BQVosRUFBb0IsV0FBVyxPQUEvQixFQUF3QyxRQUFRLElBQWhELEVBQWQ7O0FBRUEsa0JBQU0sS0FBSyxLQUFMLEdBQWEsR0FBbkI7O0FBRUEsZ0JBQUksS0FBSyxPQUFULEVBQ0ksUUFBUSxHQUFSLENBQWEsS0FBSyxFQUFsQixFQUFzQixNQUF0QixFQUE4QixHQUE5QixFQUFtQyxjQUFuQyxFQUFtRCxPQUFuRDs7QUFFSixtQkFBTyxRQUFTLEtBQUssT0FBZCxFQUF1QixNQUFPLEdBQVAsRUFBWSxPQUFaLEVBQ3pCLEtBRHlCLENBQ2xCLGFBQUs7QUFDVCxvQkFBSSxNQUFKLEVBQVk7QUFDUiwwQkFBTSxJQUFJLG9CQUFKLENBQTBCLENBQUUsUUFBSyxFQUFQLEVBQVcsTUFBWCxFQUFtQixHQUFuQixFQUF3QixFQUFFLElBQTFCLEVBQWdDLEVBQUUsT0FBbEMsRUFBNEMsSUFBNUMsQ0FBa0QsR0FBbEQsQ0FBMUIsQ0FBTjtBQUNIO0FBQ0Qsc0JBQU0sQ0FBTixDQUpTLENBSUQ7QUFDWCxhQU55QixFQU96QixJQVB5QixDQU9uQixvQkFBWTs7QUFFZixvQkFBSSxPQUFPLFFBQVAsSUFBbUIsUUFBdkIsRUFDSSxPQUFPLFFBQVA7O0FBRUosdUJBQU8sU0FBUyxJQUFULEdBQWlCLElBQWpCLENBQXVCLGdCQUFRO0FBQ2xDLHdCQUFJLFFBQUssT0FBVCxFQUNJLFFBQVEsR0FBUixDQUFhLFFBQUssRUFBbEIsRUFBc0IsTUFBdEIsRUFBOEIsR0FBOUIsRUFBbUMsT0FBUSxrQkFBa0IsSUFBMUIsR0FBa0MsRUFBckU7QUFDSix3QkFBSyxTQUFTLE1BQVQsSUFBbUIsR0FBcEIsSUFBNkIsU0FBUyxNQUFULElBQW1CLEdBQXBELEVBQ0ksT0FBTyxJQUFQO0FBQ0osd0JBQUksUUFBUSxTQUFaO0FBQ0Esd0JBQUksVUFBVSxJQUFkO0FBQ0Esd0JBQUksQ0FBRSxHQUFGLEVBQVEsT0FBUixDQUFpQixTQUFTLE1BQTFCLEtBQXFDLENBQXpDLEVBQTRDO0FBQ3hDLGdDQUFRLGNBQVI7QUFDSCxxQkFGRCxNQUVPLElBQUksQ0FBRSxHQUFGLEVBQU8sR0FBUCxFQUFZLEdBQVosRUFBaUIsR0FBakIsRUFBc0IsR0FBdEIsRUFBMkIsR0FBM0IsRUFBZ0MsR0FBaEMsRUFBcUMsR0FBckMsRUFBMkMsT0FBM0MsQ0FBb0QsU0FBUyxNQUE3RCxLQUF3RSxDQUE1RSxFQUErRTtBQUNsRixnQ0FBUSxvQkFBUjtBQUNILHFCQUZNLE1BRUEsSUFBSSxDQUFFLEdBQUYsRUFBTyxHQUFQLEVBQVksR0FBWixFQUFpQixHQUFqQixFQUF1QixPQUF2QixDQUFnQyxTQUFTLE1BQXpDLEtBQW9ELENBQXhELEVBQTJEO0FBQzlELDRCQUFJLGlCQUFpQixLQUFLLEtBQUwsQ0FBWSx1QkFBWixDQUFyQjtBQUNBLDRCQUFJLGNBQUosRUFBb0I7QUFDaEIsb0NBQVEsY0FBUjtBQUNILHlCQUZELE1BRU87QUFDSCxvQ0FBUSxvQkFBUjtBQUNBLHNDQUFVLE9BQU8sc0JBQVAsR0FBZ0MsQ0FDdEMsa0JBRHNDLEVBRXRDLGtCQUZzQyxFQUd0Qyw2QkFIc0MsRUFJdEMsZ0JBSnNDLEVBS3RDLGlCQUxzQyxFQU10QyxlQU5zQyxFQU94QyxJQVB3QyxDQU9sQyxJQVBrQyxDQUFoQyxHQU9NLEdBUGhCO0FBUUg7QUFDSixxQkFmTSxNQWVBLElBQUksQ0FBRSxHQUFGLEVBQU8sR0FBUCxFQUFhLE9BQWIsQ0FBc0IsU0FBUyxNQUEvQixLQUEwQyxDQUE5QyxFQUFpRDtBQUNwRCxnQ0FBUSxjQUFSO0FBQ0gscUJBRk0sTUFFQSxJQUFJLENBQUUsR0FBRixFQUFPLEdBQVAsRUFBWSxHQUFaLEVBQWtCLE9BQWxCLENBQTJCLFNBQVMsTUFBcEMsS0FBK0MsQ0FBbkQsRUFBc0Q7QUFDekQsZ0NBQVEsbUJBQVI7QUFDSCxxQkFGTSxNQUVBO0FBQ0gsZ0NBQVEsS0FBUjtBQUNIO0FBQ0QsMEJBQU0sSUFBSSxLQUFKLENBQVcsQ0FBRSxRQUFLLEVBQVAsRUFBVyxNQUFYLEVBQW1CLEdBQW5CLEVBQXdCLFNBQVMsTUFBakMsRUFBeUMsU0FBUyxVQUFsRCxFQUE4RCxPQUE5RCxFQUF3RSxJQUF4RSxDQUE4RSxHQUE5RSxDQUFYLENBQU47QUFDSCxpQkFsQ00sQ0FBUDtBQW1DSCxhQS9DeUIsRUErQ3ZCLElBL0N1QixDQStDakI7QUFBQSx1QkFBWSxRQUFLLGNBQUwsQ0FBcUIsR0FBckIsRUFBMEIsTUFBMUIsRUFBa0MsT0FBbEMsRUFBMkMsUUFBM0MsQ0FBWjtBQUFBLGFBL0NpQixDQUF2QixDQUFQO0FBZ0RILFNBL0hEOztBQWlJQSxhQUFLLGNBQUwsR0FBc0IsVUFBVSxHQUFWLEVBQXNFO0FBQUEsZ0JBQXZELE1BQXVELHVFQUE5QyxLQUE4QztBQUFBLGdCQUF2QyxPQUF1Qyx1RUFBN0IsU0FBNkI7QUFBQSxnQkFBbEIsSUFBa0IsdUVBQVgsU0FBVzs7O0FBRXhGLGdCQUFJOztBQUVBLHVCQUFPLEtBQUssS0FBTCxDQUFZLElBQVosQ0FBUDtBQUVILGFBSkQsQ0FJRSxPQUFPLENBQVAsRUFBVTs7QUFFUixvQkFBSSxjQUFjLEtBQUssS0FBTCxDQUFZLHlFQUFaLENBQWxCO0FBQ0Esb0JBQUksaUJBQWlCLEtBQUssS0FBTCxDQUFZLGdDQUFaLENBQXJCOztBQUVBLG9CQUFJLGFBQWEsV0FBakIsRUFBOEI7O0FBRTFCLHdCQUFJLFFBQVEsb0JBQVo7QUFDQSx3QkFBSSxVQUFVLGlEQUFkO0FBQ0Esd0JBQUksV0FBSixFQUNJLFVBQVUseUVBQVY7QUFDSix3QkFBSSxjQUFKLEVBQ0ksUUFBUSxjQUFSO0FBQ0osMEJBQU0sSUFBSSxLQUFKLENBQVcsQ0FBRSxLQUFLLEVBQVAsRUFBVyxNQUFYLEVBQW1CLEdBQW5CLEVBQXdCLE9BQXhCLEVBQWtDLElBQWxDLENBQXdDLEdBQXhDLENBQVgsQ0FBTjtBQUNIOztBQUVELG9CQUFJLEtBQUssT0FBVCxFQUNJLFFBQVEsR0FBUixDQUFhLEtBQUssRUFBbEIsRUFBc0IsTUFBdEIsRUFBOEIsR0FBOUIsRUFBbUMsT0FBbkMsRUFBNEMsQ0FBNUMsRUFBK0Msc0JBQXNCLElBQXRCLEdBQTZCLEdBQTVFOztBQUVKLHNCQUFNLENBQU47QUFDSDtBQUNKLFNBM0JEOztBQTZCQSxhQUFLLFdBQUwsR0FDQSxLQUFLLFVBQUwsR0FBa0IsVUFBVSxPQUFWLEVBQW1CO0FBQ2pDLGdCQUFJLFNBQVMsY0FBZSxPQUFmLENBQWI7QUFDQSxpQkFBSyxPQUFMLEdBQWUsUUFBUyxNQUFULEVBQWlCLFFBQWpCLENBQWY7QUFDQSxpQkFBSyxXQUFMLEdBQW1CLFFBQVMsT0FBVCxFQUFrQixJQUFsQixDQUFuQjtBQUNBLGlCQUFLLGFBQUwsR0FBcUIsS0FBSyxXQUExQjtBQUNBLGlCQUFLLE9BQUwsR0FBZSxPQUFPLElBQVAsQ0FBYSxLQUFLLE9BQWxCLENBQWY7QUFDQSxnQkFBSSxPQUFPLEtBQUssS0FBTCxDQUFZLE9BQU8sTUFBUCxDQUFlO0FBQUEsdUJBQVUsVUFBVSxNQUFwQjtBQUFBLGFBQWYsQ0FBWixFQUF3RCxNQUF4RCxDQUFYO0FBQ0EsZ0JBQUksUUFBUSxLQUFLLEtBQUwsQ0FBWSxPQUFPLE1BQVAsQ0FBZTtBQUFBLHVCQUFVLFdBQVcsTUFBckI7QUFBQSxhQUFmLENBQVosRUFBeUQsT0FBekQsQ0FBWjtBQUNBLGlCQUFLLFVBQUwsR0FBa0IsS0FBSyxNQUFMLENBQWEsS0FBSyxNQUFMLENBQWEsS0FBYixDQUFiLENBQWxCO0FBQ0EsbUJBQU8sS0FBSyxPQUFaO0FBQ0gsU0FYRDs7QUFhQSxhQUFLLFlBQUwsR0FDQSxLQUFLLFdBQUwsR0FBbUIsWUFBMEI7QUFBQTs7QUFBQSxnQkFBaEIsTUFBZ0IsdUVBQVAsS0FBTzs7QUFDekMsZ0JBQUksQ0FBQyxNQUFELElBQVcsS0FBSyxPQUFwQixFQUE2QjtBQUN6QixvQkFBSSxDQUFDLEtBQUssV0FBVixFQUF1QjtBQUNuQiwyQkFBTyxJQUFJLE9BQUosQ0FBYSxVQUFDLE9BQUQsRUFBVSxNQUFWO0FBQUEsK0JBQXFCLFFBQVMsUUFBSyxVQUFMLENBQWlCLFFBQUssT0FBdEIsQ0FBVCxDQUFyQjtBQUFBLHFCQUFiLENBQVA7QUFDSDtBQUNELHVCQUFPLElBQUksT0FBSixDQUFhLFVBQUMsT0FBRCxFQUFVLE1BQVY7QUFBQSwyQkFBcUIsUUFBUyxRQUFLLE9BQWQsQ0FBckI7QUFBQSxpQkFBYixDQUFQO0FBQ0g7QUFDRCxtQkFBTyxLQUFLLFlBQUwsR0FBcUIsSUFBckIsQ0FBMkIsbUJBQVc7QUFDekMsdUJBQU8sUUFBSyxVQUFMLENBQWlCLE9BQWpCLENBQVA7QUFDSCxhQUZNLENBQVA7QUFHSCxTQVhEOztBQWFBLGFBQUssYUFBTCxHQUFxQixZQUFZO0FBQzdCLG1CQUFPLEtBQUssWUFBTCxFQUFQO0FBQ0gsU0FGRDs7QUFJQSxhQUFLLFlBQUwsR0FBb0IsWUFBWTtBQUM1QixrQkFBTSxJQUFJLFlBQUosQ0FBa0IsS0FBSyxFQUFMLEdBQVUsaUdBQTVCLENBQU47QUFDSCxTQUZEOztBQUlBLGFBQUssYUFBTCxHQUFxQixZQUFZO0FBQzdCLG1CQUFPLEtBQUssWUFBTCxFQUFQO0FBQ0gsU0FGRDs7QUFJQSxhQUFLLFlBQUwsR0FBb0IsWUFBWTtBQUFBOztBQUM1QixtQkFBTyxJQUFJLE9BQUosQ0FBYSxVQUFDLE9BQUQsRUFBVSxNQUFWO0FBQUEsdUJBQXFCLFFBQVMsUUFBSyxPQUFkLENBQXJCO0FBQUEsYUFBYixDQUFQO0FBQ0gsU0FGRDs7QUFJQSxhQUFLLGtCQUFMLEdBQTBCLFVBQVUsUUFBVixFQUFvQjtBQUMxQyxnQkFBSSxDQUFDLEtBQUssNkJBQVYsRUFDSSxPQUFPLFFBQVA7QUFDSixnQkFBSSxZQUFZLEtBQWhCLEVBQ0ksT0FBTyxLQUFQO0FBQ0osZ0JBQUksWUFBWSxLQUFoQixFQUNJLE9BQU8sS0FBUDtBQUNKLGdCQUFJLFlBQVksS0FBaEIsRUFDSSxPQUFPLE1BQVA7QUFDSixtQkFBTyxRQUFQO0FBQ0gsU0FWRDs7QUFZQSxhQUFLLE1BQUwsR0FBYyxVQUFVLE1BQVYsRUFBa0I7QUFDNUIsbUJBQVUsT0FBTyxNQUFQLEtBQWtCLFFBQW5CLElBQ0osT0FBTyxLQUFLLE9BQVosSUFBdUIsV0FEbkIsSUFFSixPQUFPLEtBQUssT0FBTCxDQUFhLE1BQWIsQ0FBUCxJQUErQixXQUY1QixHQUdBLEtBQUssT0FBTCxDQUFhLE1BQWIsQ0FIQSxHQUlBLE1BSlI7QUFLSCxTQU5EOztBQVFBLGFBQUssU0FBTCxHQUNBLEtBQUssUUFBTCxHQUFnQixVQUFVLE1BQVYsRUFBa0I7QUFDOUIsbUJBQU8sS0FBSyxNQUFMLENBQWEsTUFBYixFQUFxQixFQUFyQixJQUEyQixNQUFsQztBQUNILFNBSEQ7O0FBS0EsYUFBSyxNQUFMLEdBQWMsVUFBVSxNQUFWLEVBQWtCO0FBQzVCLG1CQUFPLEtBQUssTUFBTCxDQUFhLE1BQWIsRUFBcUIsTUFBckIsSUFBK0IsTUFBdEM7QUFDSCxTQUZEOztBQUlBLGFBQUssY0FBTCxHQUNBLEtBQUssYUFBTCxHQUFxQixVQUFVLE1BQVYsRUFBa0I7QUFDbkMsZ0JBQUksS0FBSyxxQkFBVDtBQUNBLGdCQUFJLFVBQVUsRUFBZDtBQUNBLGdCQUFJLGNBQUo7QUFDQSxtQkFBTyxRQUFRLEdBQUcsSUFBSCxDQUFTLE1BQVQsQ0FBZjtBQUNJLHdCQUFRLElBQVIsQ0FBYyxNQUFNLENBQU4sQ0FBZDtBQURKLGFBRUEsT0FBTyxPQUFQO0FBQ0gsU0FSRDs7QUFVQSxhQUFLLGNBQUwsR0FDQSxLQUFLLGFBQUwsR0FBcUIsVUFBVSxNQUFWLEVBQWtCLE1BQWxCLEVBQTBCO0FBQzNDLGlCQUFLLElBQUksUUFBVCxJQUFxQixNQUFyQjtBQUNJLHlCQUFTLE9BQU8sT0FBUCxDQUFnQixNQUFNLFFBQU4sR0FBaUIsR0FBakMsRUFBc0MsT0FBTyxRQUFQLENBQXRDLENBQVQ7QUFESixhQUVBLE9BQU8sTUFBUDtBQUNILFNBTEQ7O0FBT0EsYUFBSyxHQUFMLEdBQVcsVUFBVSxJQUFWLEVBQTZCO0FBQUEsZ0JBQWIsTUFBYSx1RUFBSixFQUFJOztBQUNwQyxnQkFBSSxTQUFTLEtBQUssYUFBTCxDQUFvQixJQUFwQixFQUEwQixNQUExQixDQUFiO0FBQ0EsZ0JBQUksUUFBUSxLQUFLLElBQUwsQ0FBVyxNQUFYLEVBQW1CLEtBQUssYUFBTCxDQUFvQixJQUFwQixDQUFuQixDQUFaO0FBQ0EsZ0JBQUksT0FBTyxJQUFQLENBQWEsS0FBYixFQUFvQixNQUF4QixFQUNJLFVBQVUsTUFBTSxLQUFLLFNBQUwsQ0FBZ0IsS0FBaEIsQ0FBaEI7QUFDSixtQkFBTyxNQUFQO0FBQ0gsU0FORDs7QUFRQSxhQUFLLFlBQUwsR0FDQSxLQUFLLFdBQUwsR0FBbUIsVUFBVSxNQUFWLEVBQXNDO0FBQUEsZ0JBQXBCLE1BQW9CLHVFQUFYLFNBQVc7O0FBQ3JELGdCQUFJLFNBQVMsRUFBYjtBQUNBLGlCQUFLLElBQUksSUFBSSxDQUFiLEVBQWdCLElBQUksT0FBTyxNQUEzQixFQUFtQyxHQUFuQyxFQUF3QztBQUNwQyx1QkFBTyxJQUFQLENBQWEsS0FBSyxVQUFMLENBQWlCLE9BQU8sQ0FBUCxDQUFqQixFQUE0QixNQUE1QixDQUFiO0FBQ0g7QUFDRCxtQkFBTyxNQUFQO0FBQ0gsU0FQRDs7QUFTQSxhQUFLLFlBQUwsR0FDQSxLQUFLLFdBQUwsR0FBbUIsVUFBVSxLQUFWLEVBQXFDO0FBQUEsZ0JBQXBCLE1BQW9CLHVFQUFYLFNBQVc7O0FBQ3BELGdCQUFJLFNBQVMsRUFBYjtBQUNBLGlCQUFLLElBQUksSUFBSSxDQUFiLEVBQWdCLElBQUksTUFBTSxNQUExQixFQUFrQyxHQUFsQyxFQUF1QztBQUNuQyx1QkFBTyxJQUFQLENBQWEsS0FBSyxVQUFMLENBQWlCLE1BQU0sQ0FBTixDQUFqQixFQUEyQixNQUEzQixDQUFiO0FBQ0g7QUFDRCxtQkFBTyxNQUFQO0FBQ0gsU0FQRDs7QUFTQSxhQUFLLFdBQUwsR0FDQSxLQUFLLFVBQUwsR0FBa0IsVUFBVSxLQUFWLEVBQTJGO0FBQUEsZ0JBQTFFLE1BQTBFLHVFQUFqRSxTQUFpRTtBQUFBLGdCQUF0RCxTQUFzRCx1RUFBMUMsRUFBMEM7QUFBQSxnQkFBdEMsS0FBc0MsdUVBQTlCLFNBQThCO0FBQUEsZ0JBQW5CLEtBQW1CLHVFQUFYLFNBQVc7O0FBQ3pHLG1CQUFPLEtBQVA7QUFDSCxTQUhEOztBQUtBLGFBQUssWUFBTCxHQUNBLEtBQUssV0FBTCxHQUFtQixVQUFVLE1BQVYsRUFBNEY7QUFBQSxnQkFBMUUsTUFBMEUsdUVBQWpFLFNBQWlFO0FBQUEsZ0JBQXRELFNBQXNELHVFQUExQyxFQUEwQztBQUFBLGdCQUF0QyxLQUFzQyx1RUFBOUIsU0FBOEI7QUFBQSxnQkFBbkIsS0FBbUIsdUVBQVgsU0FBVzs7QUFDM0csZ0JBQUksU0FBUyxFQUFiO0FBQ0EsaUJBQUssSUFBSSxJQUFJLENBQWIsRUFBZ0IsSUFBSSxPQUFPLE1BQTNCLEVBQW1DLEdBQW5DLEVBQXdDO0FBQ3BDLHVCQUFPLElBQVAsQ0FBYSxLQUFLLFVBQUwsQ0FBaUIsT0FBTyxDQUFQLENBQWpCLEVBQTRCLE1BQTVCLEVBQW9DLFNBQXBDLEVBQStDLEtBQS9DLEVBQXNELEtBQXRELENBQWI7QUFDSDtBQUNELG1CQUFPLE1BQVA7QUFDSCxTQVBEOztBQVNBLGFBQUssc0JBQUwsR0FDQSxLQUFLLG1CQUFMLEdBQTJCLFVBQVUsTUFBVixFQUFrQixNQUFsQixFQUEwQixLQUExQixFQUE4QztBQUFBLGdCQUFiLE1BQWEsdUVBQUosRUFBSTs7QUFDckUsbUJBQU8sS0FBSyxXQUFMLENBQW1CLE1BQW5CLEVBQTJCLE9BQTNCLEVBQW9DLEtBQXBDLEVBQTJDLE1BQTNDLEVBQW1ELEtBQW5ELEVBQTBELE1BQTFELENBQVA7QUFDSCxTQUhEOztBQUtBLGFBQUssdUJBQUwsR0FDQSxLQUFLLG9CQUFMLEdBQTRCLFVBQVUsTUFBVixFQUFrQixNQUFsQixFQUEwQixLQUExQixFQUE4QztBQUFBLGdCQUFiLE1BQWEsdUVBQUosRUFBSTs7QUFDdEUsbUJBQU8sS0FBSyxXQUFMLENBQWtCLE1BQWxCLEVBQTBCLE9BQTFCLEVBQW1DLE1BQW5DLEVBQTJDLE1BQTNDLEVBQW1ELEtBQW5ELEVBQTBELE1BQTFELENBQVA7QUFDSCxTQUhEOztBQUtBLGFBQUssdUJBQUwsR0FDQSxLQUFLLG9CQUFMLEdBQTRCLFVBQVUsTUFBVixFQUFrQixNQUFsQixFQUF1QztBQUFBLGdCQUFiLE1BQWEsdUVBQUosRUFBSTs7QUFDL0QsbUJBQU8sS0FBSyxXQUFMLENBQWtCLE1BQWxCLEVBQTBCLFFBQTFCLEVBQW9DLEtBQXBDLEVBQTJDLE1BQTNDLEVBQW1ELFNBQW5ELEVBQThELE1BQTlELENBQVA7QUFDSCxTQUhEOztBQUtBLGFBQUssd0JBQUwsR0FDQSxLQUFLLHFCQUFMLEdBQTZCLFVBQVUsTUFBVixFQUFrQixNQUFsQixFQUF1QztBQUFBLGdCQUFiLE1BQWEsdUVBQUosRUFBSTs7QUFDaEUsbUJBQU8sS0FBSyxXQUFMLENBQWtCLE1BQWxCLEVBQTBCLFFBQTFCLEVBQW9DLE1BQXBDLEVBQTRDLE1BQTVDLEVBQW9ELFNBQXBELEVBQStELE1BQS9ELENBQVA7QUFDSCxTQUhEOztBQUtBLGFBQUssT0FBTCxHQUFzQjtBQUFBLG1CQUFhLElBQUksSUFBSixDQUFVLFNBQVYsRUFBcUIsV0FBckIsRUFBYjtBQUFBLFNBQXRCO0FBQ0EsYUFBSyxTQUFMLEdBQXNCLEtBQUssS0FBM0I7QUFDQSxhQUFLLE9BQUwsR0FBc0I7QUFBQSxtQkFBTSxLQUFLLEtBQUwsQ0FBWSxRQUFLLFlBQUwsS0FBdUIsSUFBbkMsQ0FBTjtBQUFBLFNBQXRCO0FBQ0EsYUFBSyxZQUFMLEdBQXNCO0FBQUEsbUJBQU0sS0FBSyxLQUFMLENBQVksUUFBSyxZQUFMLEtBQXVCLElBQW5DLENBQU47QUFBQSxTQUF0QjtBQUNBLGFBQUssWUFBTCxHQUFzQixLQUFLLEdBQTNCO0FBQ0EsYUFBSyxLQUFMLEdBQXNCLEtBQUssT0FBM0I7QUFDQSxhQUFLLEVBQUwsR0FBc0IsU0FBdEI7QUFDQSxhQUFLLFNBQUwsR0FBc0IsSUFBdEIsQ0FwVytCLENBb1dIO0FBQzVCLGFBQUssT0FBTCxHQUFzQixLQUF0QixDQXJXK0IsQ0FxV0g7QUFDNUIsYUFBSyxPQUFMLEdBQXNCLEtBQXRCO0FBQ0EsYUFBSyxTQUFMLEdBQXNCLEtBQXRCO0FBQ0EsYUFBSyxLQUFMLEdBQXNCLEtBQXRCLENBeFcrQixDQXdXSDtBQUM1QixhQUFLLDZCQUFMLEdBQXFDLElBQXJDO0FBQ0EsYUFBSyxjQUFMLEdBQXNCLHFCQUFhO0FBQy9CLGdCQUFJLE9BQU8sSUFBSSxJQUFKLENBQVUsU0FBVixDQUFYO0FBQ0EsZ0JBQUksT0FBTyxLQUFLLGNBQUwsRUFBWDtBQUNBLGdCQUFJLEtBQUssS0FBSyxXQUFMLEVBQVQ7QUFDQSxnQkFBSSxLQUFLLEtBQUssU0FBTCxFQUFUO0FBQ0EsZ0JBQUksS0FBSyxLQUFLLFdBQUwsRUFBVDtBQUNBLGdCQUFJLEtBQUssS0FBSyxhQUFMLEVBQVQ7QUFDQSxnQkFBSSxLQUFLLEtBQUssYUFBTCxFQUFUO0FBQ0EsaUJBQUssS0FBSyxFQUFMLEdBQVcsTUFBTSxFQUFqQixHQUF1QixFQUE1QjtBQUNBLGlCQUFLLEtBQUssRUFBTCxHQUFXLE1BQU0sRUFBakIsR0FBdUIsRUFBNUI7QUFDQSxpQkFBSyxLQUFLLEVBQUwsR0FBVyxNQUFNLEVBQWpCLEdBQXVCLEVBQTVCO0FBQ0EsaUJBQUssS0FBSyxFQUFMLEdBQVcsTUFBTSxFQUFqQixHQUF1QixFQUE1QjtBQUNBLGlCQUFLLEtBQUssRUFBTCxHQUFXLE1BQU0sRUFBakIsR0FBdUIsRUFBNUI7QUFDQSxtQkFBTyxPQUFPLEdBQVAsR0FBYSxFQUFiLEdBQWtCLEdBQWxCLEdBQXdCLEVBQXhCLEdBQTZCLEdBQTdCLEdBQW1DLEVBQW5DLEdBQXdDLEdBQXhDLEdBQThDLEVBQTlDLEdBQW1ELEdBQW5ELEdBQXlELEVBQWhFO0FBQ0gsU0FkRDs7QUFnQkEsWUFBSSxNQUFKLEVBQ0ksS0FBSyxTQUFMLEdBQWlCO0FBQ2IsMEJBQWMsVUFBVSxPQUFWLEdBQ1YscUNBRFUsR0FFVixXQUZVLEdBRUksS0FBSyxXQUZULEdBRXVCOztBQUc3QztBQU5xQixTQUFqQixDQU9KLEtBQUssS0FBTCxHQUFhLEVBQWI7O0FBRUEsYUFBSyxlQUFMLEdBQXVCLEtBQXZCOztBQUVBLGFBQUssSUFBSSxRQUFULElBQXFCLE1BQXJCO0FBQ0ksaUJBQUssUUFBTCxJQUFpQixPQUFPLFFBQVAsQ0FBakI7QUFESixTQUdBLEtBQUssYUFBTCxHQUF3QixLQUFLLFlBQTdCO0FBQ0EsYUFBSyxnQkFBTCxHQUF3QixLQUFLLGNBQTdCO0FBQ0EsYUFBSyxZQUFMLEdBQXdCLEtBQUssV0FBN0I7QUFDQSxhQUFLLFlBQUwsR0FBd0IsS0FBSyxXQUE3Qjs7QUFFQSxhQUFLLElBQUw7QUFDSCxLQS9ZRDs7QUFpWkE7O0FBRUEsUUFBSSxXQUFXOztBQUVYLGNBQU0sVUFGSztBQUdYLGdCQUFRLFNBSEc7QUFJWCxxQkFBYSxJQUpGO0FBS1gscUJBQWEsSUFMRjtBQU1YLG1CQUFXLElBTkE7QUFPWCxnQkFBUTtBQUNKLG9CQUFRLHFHQURKO0FBRUosbUJBQU8seUJBRkg7QUFHSixtQkFBTyxxQkFISDtBQUlKLG1CQUFPO0FBSkgsU0FQRztBQWFYLGVBQU87QUFDSCx1QkFBVztBQUNQLHVCQUFPLENBQ0gsYUFERyxFQUVILG1CQUZHLEVBR0gsZ0JBSEcsRUFJSCxhQUpHLEVBS0gsZUFMRyxFQU1ILGNBTkcsRUFPSCxjQVBHLEVBUUgsY0FSRyxFQVNILFlBVEcsRUFVSCxnQkFWRyxFQVdILHVCQVhHLEVBWUgsZUFaRyxFQWFILGtCQWJHLEVBY0gsZUFkRyxFQWVILHFCQWZHLEVBZ0JILDJCQWhCRyxFQWlCSCx1QkFqQkcsRUFrQkgsOEJBbEJHLEVBbUJILGNBbkJHLEVBb0JILGVBcEJHLEVBcUJILG1CQXJCRyxFQXNCSCxzQkF0Qkc7QUFEQTtBQURSLFNBYkk7O0FBMENMLHVCQTFDSztBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkEyQ2dCLFFBQUssMEJBQUwsRUEzQ2hCO0FBQUE7QUEyQ0gsMEJBM0NHOztBQTRDUCx1QkFBTyxXQUFXLFVBQVgsQ0FBUDtBQTVDTztBQUFBO0FBK0NMLG9CQS9DSztBQUFBO0FBQUEsb0JBbURTLElBQUksV0FBVyxNQW5EeEI7QUFBQTtBQW9EQyxnQ0FwREQsR0FvRFksV0FBVyxDQUFYLENBcERaO0FBQUEsK0JBcURpQixNQUFNLG9CQUFOLENBQTRCO0FBQzVDLHdDQUFZLFNBQVMsV0FBVDtBQURnQyx5QkFBNUIsQ0FyRGpCO0FBQUE7QUFxREMsK0JBckREOztBQXdESCw2QkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFFBQVEsVUFBUixFQUFvQixNQUF4QyxFQUFnRCxHQUFoRCxFQUFxRDtBQUM3QyxrQ0FENkMsR0FDcEMsUUFBUSxVQUFSLEVBQW9CLENBQXBCLENBRG9DO0FBRTdDLDhCQUY2QyxHQUV4QyxPQUFPLFFBQVAsQ0FGd0M7QUFHN0Msa0NBSDZDLEdBR3BDLFNBSG9DO0FBSTdDLGdDQUo2QyxHQUl0QyxTQUpzQztBQUs3QyxpQ0FMNkMsR0FLckMsU0FMcUM7O0FBTWpELGdDQUFLLFlBQVksT0FBYixJQUEwQixZQUFZLFFBQTFDLEVBQXFEO0FBQ2pELHlDQUFTLE9BQU8sTUFBUCxDQUFUO0FBQ0kscUNBRjZDLEdBRXJDLE9BQU8sS0FBUCxDQUFjLEdBQWQsQ0FGcUM7O0FBR2pELHVDQUFPLE1BQU0sQ0FBTixDQUFQO0FBQ0Esd0NBQVEsTUFBTSxDQUFOLENBQVI7QUFDSCw2QkFMRCxNQUtPO0FBQ0gsdUNBQU8sRUFBUDtBQUNBLHdDQUFRLEtBQVI7QUFDQSx5Q0FBUyxPQUFPLEdBQVAsR0FBYSxLQUF0QjtBQUNIO0FBQ0QsbUNBQU8sTUFBTSxrQkFBTixDQUEwQixJQUExQixDQUFQO0FBQ0Esb0NBQVEsTUFBTSxrQkFBTixDQUEwQixLQUExQixDQUFSO0FBQ0EsbUNBQU8sSUFBUCxDQUFhO0FBQ1Qsc0NBQU0sRUFERztBQUVULDBDQUFVLE1BRkQ7QUFHVCx3Q0FBUSxJQUhDO0FBSVQseUNBQVMsS0FKQTtBQUtULHdDQUFRO0FBTEMsNkJBQWI7QUFPSDtBQTlCa0MsMkJBbkRoQztBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFnREgscUJBaERHLFlBZ0RXOztBQWhEWCx1QkFpRGdCLFFBQUssZUFBTCxFQWpEaEI7QUFBQTtBQWlESCwwQkFqREc7QUFrREgsc0JBbERHLEdBa0RNLEVBbEROO0FBbURFLGlCQW5ERixHQW1ETSxDQW5ETjtBQUFBO0FBQUE7QUFtRlAsdUJBQU8sTUFBUDtBQW5GTztBQUFBO0FBc0ZMLG9CQXRGSztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQXVGRCxRQUFLLFdBQUwsRUF2RkM7QUFBQTtBQUFBLHVCQXdGYSxRQUFLLHNCQUFMLEVBeEZiO0FBQUE7QUF3RkgsdUJBeEZHO0FBeUZILHdCQXpGRyxHQXlGUSxRQUFRLFVBQVIsQ0F6RlI7QUEwRkgsc0JBMUZHLEdBMEZNO0FBQ1QsNEJBQVE7QUFEQyxpQkExRk47O0FBNkZQLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksUUFBSyxVQUFMLENBQWdCLE1BQXBDLEVBQTRDLEdBQTVDLEVBQWlEO0FBQ3pDLDRCQUR5QyxHQUM5QixRQUFLLFVBQUwsQ0FBZ0IsQ0FBaEIsQ0FEOEI7O0FBRTdDLDJCQUFPLFFBQVAsSUFBbUI7QUFDZixnQ0FBUSxTQURPO0FBRWYsZ0NBQVEsU0FGTztBQUdmLGlDQUFTO0FBSE0scUJBQW5CO0FBS0g7QUFDRCx1QkFBTyxLQUFQLEVBQWMsTUFBZCxJQUF3QixXQUFZLFNBQVMsU0FBVCxDQUFaLENBQXhCO0FBQ0EsdUJBQU8sS0FBUCxFQUFjLE9BQWQsSUFBeUIsT0FBTyxLQUFQLEVBQWMsTUFBZCxDQUF6QjtBQUNBLHVCQUFPLE1BQVA7QUF2R087QUFBQTtBQTBHTCxzQkExR0ssMEJBMEdXLE1BMUdYO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUEwR21CLHNCQTFHbkIsNkVBMEc0QixFQTFHNUI7QUFBQSx1QkEyR0QsUUFBSyxXQUFMLEVBM0dDO0FBQUE7QUFBQSx1QkE0R2MsUUFBSyxzQkFBTCxDQUE2QixRQUFLLE1BQUwsQ0FBYTtBQUMzRCwrQkFBVyxRQUFLLFFBQUwsQ0FBZSxNQUFmO0FBRGdELGlCQUFiLEVBRS9DLE1BRitDLENBQTdCLENBNUdkO0FBQUE7QUE0R0gsd0JBNUdHO0FBK0dILHlCQS9HRyxHQStHUyxTQUFTLFVBQVQsRUFBcUIsQ0FBckIsQ0EvR1Q7QUFnSEgseUJBaEhHLEdBZ0hTLFFBQUssU0FBTCxDQUFnQixVQUFVLFNBQVYsQ0FBaEIsQ0FoSFQ7QUFpSEgsd0JBakhHLEdBaUhRLFdBQVksVUFBVSxLQUFWLENBQVosQ0FqSFI7QUFrSEgsd0JBbEhHLEdBa0hRLFdBQVksVUFBVSxLQUFWLENBQVosQ0FsSFI7QUFtSEgsbUJBbkhHLEdBbUhHLENBQUUsUUFBRixFQUFZLFNBQVosQ0FuSEg7QUFvSEgsbUJBcEhHLEdBb0hHLENBQUUsUUFBRixFQUFZLFNBQVosQ0FwSEg7O0FBcUhQLHVCQUFPO0FBQ0gsaUNBQWEsU0FEVjtBQUVILGdDQUFZLFFBQUssT0FBTCxDQUFjLFNBQWQsQ0FGVDtBQUdILDRCQUFRLENBQUUsR0FBRixDQUhMO0FBSUgsNEJBQVEsQ0FBRSxHQUFGO0FBSkwsaUJBQVA7QUFySE87QUFBQTtBQTZITCxtQkE3SEssdUJBNkhRLE1BN0hSO0FBQUE7O0FBOEhQLGtCQUFNLElBQUksYUFBSixDQUFtQixRQUFLLEVBQUwsR0FBVSw0Q0FBN0IsQ0FBTjtBQTlITztBQWlJTCxtQkFqSUssdUJBaUlRLE1BaklSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQWtJRCxRQUFLLFdBQUwsRUFsSUM7QUFBQTtBQUFBLHVCQW1JWSxRQUFLLG9CQUFMLENBQTJCO0FBQzFDLDhCQUFVLFFBQUssUUFBTCxDQUFlLE1BQWYsQ0FEZ0M7QUFFMUMsa0NBQWMsRUFGNEI7QUFHMUMsNkJBQVM7QUFIaUMsaUJBQTNCLENBbklaO0FBQUE7QUFtSUgsc0JBbklHO0FBQUEsdUJBd0llLFFBQUssY0FBTCxDQUFxQixNQUFyQixDQXhJZjtBQUFBO0FBd0lILHlCQXhJRztBQXlJSCxzQkF6SUcsR0F5SU0sT0FBTyxVQUFQLEVBQW1CLENBQW5CLENBeklOO0FBMElILHlCQTFJRyxHQTBJUyxRQUFLLFNBQUwsQ0FBZ0IsT0FBTyxNQUFQLENBQWhCLENBMUlUOztBQTJJUCx1QkFBTztBQUNILGlDQUFhLFNBRFY7QUFFSCxnQ0FBWSxRQUFLLE9BQUwsQ0FBYyxTQUFkLENBRlQ7QUFHSCw0QkFBUSxXQUFZLE9BQU8sR0FBUCxDQUFaLENBSEw7QUFJSCwyQkFBTyxXQUFZLE9BQU8sR0FBUCxDQUFaLENBSko7QUFLSCwyQkFBTyxVQUFVLE1BQVYsRUFBa0IsQ0FBbEIsRUFBcUIsQ0FBckIsQ0FMSjtBQU1ILDJCQUFPLFVBQVUsTUFBVixFQUFrQixDQUFsQixFQUFxQixDQUFyQixDQU5KO0FBT0gsNEJBQVEsU0FQTDtBQVFILDRCQUFRLFdBQVksT0FBTyxHQUFQLENBQVosQ0FSTDtBQVNILDZCQUFTLFdBQVksT0FBTyxHQUFQLENBQVosQ0FUTjtBQVVILDZCQUFTLFNBVk47QUFXSCw0QkFBUSxTQVhMO0FBWUgsOEJBQVUsU0FaUDtBQWFILGtDQUFjLFNBYlg7QUFjSCwrQkFBVyxTQWRSO0FBZUgsa0NBQWMsU0FmWDtBQWdCSCxtQ0FBZTtBQWhCWixpQkFBUDtBQTNJTztBQUFBO0FBK0pMLG1CQS9KSyx1QkErSlEsTUEvSlIsRUErSmdCLElBL0poQixFQStKc0IsSUEvSnRCLEVBK0o0QixNQS9KNUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUErSm9DLHFCQS9KcEMsZ0ZBK0o0QyxTQS9KNUM7QUErSnVELHNCQS9KdkQsZ0ZBK0pnRSxFQS9KaEU7QUFBQSx1QkFnS0QsUUFBSyxXQUFMLEVBaEtDO0FBQUE7QUFpS0gscUJBaktHLEdBaUtLO0FBQ1IsOEJBQVUsUUFBSyxRQUFMLENBQWUsTUFBZixDQURGO0FBRVIsOEJBQVUsTUFGRjtBQUdSLGlDQUFjLFFBQVEsTUFBVCxHQUFtQixPQUFuQixHQUE2QixNQUhsQztBQUlSLGdDQUFZLENBSko7QUFLUiw0QkFBUTtBQUxBLGlCQWpLTDs7QUF3S1Asb0JBQUksUUFBUSxPQUFaO0FBQ0ksMEJBQU0sT0FBTixJQUFpQixLQUFqQjtBQURKO0FBR0ksMEJBQU0sTUFBTixLQUFpQixTQUFqQjtBQUhKLGlCQXhLTyxPQTRLWSxRQUFLLHFCQUFMLENBQTRCLFFBQUssTUFBTCxDQUFhLEtBQWIsRUFBb0IsTUFBcEIsQ0FBNUIsQ0E1S1o7QUFBQTtBQTRLSCxzQkE1S0c7O0FBNktQLHVCQUFPO0FBQ0gsNEJBQVEsTUFETDtBQUVILDBCQUFNLE9BQU8sVUFBUCxFQUFtQixVQUFuQjtBQUZILGlCQUFQO0FBN0tPO0FBQUE7QUFtTEwsbUJBbkxLLHVCQW1MUSxFQW5MUjtBQUFBOztBQUFBO0FBQUEsdUJBb0xELFFBQUssV0FBTCxFQXBMQztBQUFBO0FBcUxQLHVCQUFPLFFBQUssc0JBQUwsQ0FBNkIsRUFBRSxZQUFZLEVBQWQsRUFBN0IsQ0FBUDtBQXJMTztBQUFBO0FBd0xMLGVBeExLLG1CQXdMSSxJQXhMSjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBd0xVLG1CQXhMVixnRkF3TGdCLFFBeExoQjtBQXdMMEIsc0JBeEwxQixnRkF3TG1DLEtBeExuQztBQXdMMEMsc0JBeEwxQyxnRkF3TG1ELEVBeExuRDtBQXdMdUQsdUJBeEx2RCxnRkF3TGlFLFNBeExqRTtBQXdMNEUsb0JBeEw1RSxnRkF3TG1GLFNBeExuRjs7QUF5TFAsb0JBQUksQ0FBQyxRQUFLLE1BQVY7QUFDSSwwQkFBTSxJQUFJLG1CQUFKLENBQXlCLFFBQUssRUFBTCxHQUFVLG1DQUFuQyxDQUFOO0FBREosaUJBRUksR0EzTEcsR0EyTEcsUUFBSyxJQUFMLENBQVUsS0FBVixJQUFtQixHQUFuQixHQUF5QixRQUFLLE9BQTlCLEdBQXdDLEdBQXhDLEdBQThDLElBQTlDLEdBQXFELE1BM0x4RDtBQTRMSCxxQkE1TEcsR0E0TEssUUFBSyxNQUFMLENBQWEsRUFBRSxTQUFTLFFBQUssTUFBaEIsRUFBYixFQUF1QyxNQUF2QyxDQTVMTDs7QUE2TFAsdUJBQU8sTUFBTSxRQUFLLFNBQUwsQ0FBZ0IsS0FBaEIsQ0FBYjtBQTdMTyx1QkE4TGMsUUFBSyxLQUFMLENBQVksR0FBWixFQUFpQixNQUFqQixDQTlMZDtBQUFBO0FBOExILHdCQTlMRzs7QUErTFAsb0JBQUksYUFBYSxRQUFqQjtBQUNJLHdCQUFJLFNBQVMsU0FBVCxDQUFKO0FBQ0ksOEJBQU0sSUFBSSxhQUFKLENBQW1CLFFBQUssRUFBTCxHQUFVLFlBQVYsR0FBeUIsU0FBUyxpQkFBVCxDQUE1QyxDQUFOO0FBREo7QUFESixpQkFHQSxJQUFJLFdBQVcsUUFBZjtBQUNJLHdCQUFJLFNBQVMsT0FBVCxDQUFKO0FBQ0ksOEJBQU0sSUFBSSxhQUFKLENBQW1CLFFBQUssRUFBTCxHQUFVLFVBQVYsR0FBdUIsU0FBUyxZQUFULENBQXZCLEdBQWdELFNBQVMsZUFBVCxDQUFuRSxDQUFOO0FBREo7QUFESixpQkFHQSxPQUFPLFFBQVA7QUFyTU87QUFBQTtBQUFBLEtBQWY7O0FBeU1BOztBQUVBLFFBQUksZ0JBQWdCOztBQUVoQixjQUFNLGVBRlU7QUFHaEIsZ0JBQVEsZ0JBSFE7QUFJaEIsbUJBQVcsb0JBSks7QUFLaEIscUJBQWEsSUFMRyxFQUtHO0FBQ25CLGdCQUFRO0FBQ0osb0JBQVEscUdBREo7QUFFSixtQkFBTywwQkFGSDtBQUdKLG1CQUFPO0FBSEgsU0FOUTtBQVdoQixlQUFPO0FBQ0gsc0JBQVU7QUFDTix1QkFBTyxDQUNILE9BREcsRUFFSCxtQkFGRyxFQUdILFlBSEcsRUFJSCxjQUpHO0FBREQsYUFEUDtBQVNILHVCQUFXO0FBQ1Asd0JBQVEsQ0FDSixtQkFESSxFQUVKLGFBRkksRUFHSixtQkFISSxFQUlKLHlCQUpJLEVBS0oseUJBTEksRUFNSixjQU5JLEVBT0osaUJBUEksRUFRSixZQVJJLEVBU0osYUFUSSxFQVVKLGVBVkksRUFXSixlQVhJLEVBWUosaUJBWkk7QUFERDtBQVRSLFNBWFM7O0FBc0NWLG9CQXRDVTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBdUNTLFFBQUssMEJBQUwsRUF2Q1Q7QUFBQTtBQXVDUix3QkF2Q1E7QUF3Q1IsdUJBeENRLEdBd0NFLFNBQVMsbUJBQVQsQ0F4Q0Y7QUF5Q1Isc0JBekNRLEdBeUNDLEVBQUUsUUFBUSxPQUFWLEVBekNEOztBQTBDWixxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFFBQUssVUFBTCxDQUFnQixNQUFwQyxFQUE0QyxHQUE1QyxFQUFpRDtBQUN6Qyw0QkFEeUMsR0FDOUIsUUFBSyxVQUFMLENBQWdCLENBQWhCLENBRDhCO0FBRXpDLDJCQUZ5QyxHQUUvQjtBQUNWLGdDQUFRLFNBREU7QUFFVixnQ0FBUSxTQUZFO0FBR1YsaUNBQVM7QUFIQyxxQkFGK0I7O0FBTzdDLHdCQUFJLFlBQVksUUFBUSxXQUFSLENBQWhCO0FBQ0ksZ0NBQVEsTUFBUixJQUFrQixXQUFZLFFBQVEsV0FBUixFQUFxQixRQUFyQixDQUFaLENBQWxCO0FBREoscUJBRUEsSUFBSSxZQUFZLFFBQVEsU0FBUixDQUFoQjtBQUNJLGdDQUFRLE1BQVIsSUFBa0IsV0FBWSxRQUFRLFNBQVIsRUFBbUIsUUFBbkIsQ0FBWixDQUFsQjtBQURKLHFCQUVBLFFBQVEsT0FBUixJQUFtQixRQUFLLEdBQUwsQ0FBVSxRQUFRLE1BQVIsQ0FBVixFQUEyQixRQUFRLE1BQVIsQ0FBM0IsQ0FBbkI7QUFDQSwyQkFBTyxRQUFQLElBQW1CLE9BQW5CO0FBQ0g7QUFDRCx1QkFBTyxNQUFQO0FBeERZO0FBQUE7QUEyRFYsc0JBM0RVLDBCQTJETSxNQTNETjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQTJEYyxzQkEzRGQsZ0ZBMkR1QixFQTNEdkI7QUFBQSx1QkE0RFMsUUFBSyxrQkFBTCxDQUF5QixRQUFLLE1BQUwsQ0FBYTtBQUN2RCxnQ0FBWSxRQUFLLFFBQUwsQ0FBZSxNQUFmO0FBRDJDLGlCQUFiLEVBRTNDLE1BRjJDLENBQXpCLENBNURUO0FBQUE7QUE0RFIsd0JBNURRO0FBK0RSLHlCQS9EUSxHQStESSxTQUFTLFlBQVQsQ0EvREo7QUFnRVIseUJBaEVRLEdBZ0VJLFFBQUssWUFBTCxFQWhFSjtBQWlFUixzQkFqRVEsR0FpRUM7QUFDVCw0QkFBUSxFQURDO0FBRVQsNEJBQVEsRUFGQztBQUdULGlDQUFhLFNBSEo7QUFJVCxnQ0FBWSxRQUFLLE9BQUwsQ0FBYyxTQUFkO0FBSkgsaUJBakVEO0FBdUVSLHFCQXZFUSxHQXVFQSxFQUFFLFFBQVEsS0FBVixFQUFpQixRQUFRLEtBQXpCLEVBdkVBO0FBd0VSLG9CQXhFUSxHQXdFRCxPQUFPLElBQVAsQ0FBYSxLQUFiLENBeEVDOztBQXlFWixxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLEtBQUssTUFBekIsRUFBaUMsR0FBakMsRUFBc0M7QUFDOUIsdUJBRDhCLEdBQ3hCLEtBQUssQ0FBTCxDQUR3QjtBQUU5Qix3QkFGOEIsR0FFdkIsTUFBTSxHQUFOLENBRnVCO0FBRzlCLDBCQUg4QixHQUdyQixVQUFVLElBQVYsQ0FIcUI7O0FBSWxDLHlCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksT0FBTyxNQUEzQixFQUFtQyxHQUFuQyxFQUF3QztBQUNoQyw2QkFEZ0MsR0FDeEIsT0FBTyxDQUFQLENBRHdCO0FBRWhDLGtDQUZnQyxHQUVwQixTQUFVLE1BQU0sV0FBTixDQUFWLElBQWdDLElBRlo7QUFHaEMsNkJBSGdDLEdBR3hCLFdBQVksTUFBTSxPQUFOLENBQVosQ0FId0I7QUFJaEMsOEJBSmdDLEdBSXZCLFdBQVksTUFBTSxjQUFOLENBQVosQ0FKdUI7O0FBS3BDLCtCQUFPLEdBQVAsRUFBWSxJQUFaLENBQWtCLENBQUUsS0FBRixFQUFTLE1BQVQsRUFBaUIsVUFBakIsQ0FBbEI7QUFDSDtBQUNKO0FBQ0QsdUJBQU8sTUFBUDtBQXJGWTtBQUFBO0FBd0ZWLG1CQXhGVSx1QkF3RkcsTUF4Rkg7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQXlGUyxRQUFLLGNBQUwsQ0FBcUI7QUFDdEMsZ0NBQVksUUFBSyxRQUFMLENBQWUsTUFBZjtBQUQwQixpQkFBckIsQ0F6RlQ7QUFBQTtBQXlGUix3QkF6RlE7QUE0RlIsc0JBNUZRLEdBNEZDLFNBQVMsT0FBVCxDQTVGRDtBQTZGUix5QkE3RlEsR0E2RkksUUFBSyxZQUFMLEVBN0ZKOztBQThGWix1QkFBTztBQUNILGlDQUFhLFNBRFY7QUFFSCxnQ0FBWSxRQUFLLE9BQUwsQ0FBYyxTQUFkLENBRlQ7QUFHSCw0QkFBUSxXQUFZLE9BQU8sS0FBUCxDQUFaLENBSEw7QUFJSCwyQkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBSko7QUFLSCwyQkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBTEo7QUFNSCwyQkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBTko7QUFPSCw0QkFBUSxTQVBMO0FBUUgsNEJBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQVJMO0FBU0gsNkJBQVMsU0FUTjtBQVVILDZCQUFTLFNBVk47QUFXSCw0QkFBUSxXQUFZLE9BQU8sWUFBUCxDQUFaLENBWEw7QUFZSCw4QkFBVSxXQUFZLE9BQU8sY0FBUCxDQUFaLENBWlA7QUFhSCxrQ0FBYyxTQWJYO0FBY0gsK0JBQVcsU0FkUjtBQWVILGtDQUFjLFNBZlg7QUFnQkgsbUNBQWUsV0FBWSxPQUFPLGtCQUFQLENBQVo7QUFoQlosaUJBQVA7QUE5Rlk7QUFBQTtBQWtIVixtQkFsSFUsdUJBa0hHLE1BbEhIO0FBQUE7QUFBQTtBQUFBOztBQWtIVyxrQkFsSFgsZ0ZBa0hvQixFQWxIcEI7O0FBbUhaLG1CQUFPLFFBQUsscUJBQUwsQ0FBNEIsUUFBSyxNQUFMLENBQWE7QUFDNUMsNEJBQVksUUFBSyxRQUFMLENBQWUsTUFBZjtBQURnQyxhQUFiLEVBRWhDLE1BRmdDLENBQTVCLENBQVA7QUFuSFk7QUF3SFYsbUJBeEhVLHVCQXdIRyxNQXhISCxFQXdIVyxJQXhIWCxFQXdIaUIsSUF4SGpCLEVBd0h1QixNQXhIdkI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUF3SCtCLHFCQXhIL0IsZ0ZBd0h1QyxTQXhIdkM7QUF3SGtELHNCQXhIbEQsZ0ZBd0gyRCxFQXhIM0Q7QUF5SFIscUJBekhRLEdBeUhBO0FBQ1IsNEJBQVEsSUFEQTtBQUVSLDRCQUFRLElBRkE7QUFHUixnQ0FBWSxRQUFLLFFBQUwsQ0FBZSxNQUFmLENBSEo7QUFJUiw4QkFBVTtBQUpGLGlCQXpIQTs7QUErSFosb0JBQUksUUFBUSxPQUFaO0FBQ0ksMEJBQU0sYUFBTixJQUF1QixLQUF2QjtBQURKLGlCQS9IWSxPQWlJTyxRQUFLLG9CQUFMLENBQTJCLFFBQUssTUFBTCxDQUFhLEtBQWIsRUFBb0IsTUFBcEIsQ0FBM0IsQ0FqSVA7QUFBQTtBQWlJUixzQkFqSVE7O0FBa0laLHVCQUFPO0FBQ0gsNEJBQVEsTUFETDtBQUVILDBCQUFNO0FBRkgsaUJBQVA7QUFsSVk7QUFBQTtBQXdJVixtQkF4SVUsdUJBd0lHLEVBeElIO0FBQUE7O0FBeUlaLG1CQUFPLFFBQUssdUJBQUwsQ0FBOEIsRUFBRSxNQUFNLEVBQVIsRUFBOUIsQ0FBUDtBQXpJWTtBQTRJVixlQTVJVSxtQkE0SUQsSUE1SUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBNElLLG1CQTVJTCxnRkE0SVcsUUE1SVg7QUE0SXFCLHNCQTVJckIsZ0ZBNEk4QixLQTVJOUI7QUE0SXFDLHNCQTVJckMsZ0ZBNEk4QyxFQTVJOUM7QUE0SWtELHVCQTVJbEQsZ0ZBNEk0RCxTQTVJNUQ7QUE0SXVFLG9CQTVJdkUsZ0ZBNEk4RSxTQTVJOUU7O0FBNklaLG9CQUFJLFFBQUssRUFBTCxJQUFXLGVBQWY7QUFDSSwwQkFBTSxJQUFJLGFBQUosQ0FBbUIsUUFBSyxFQUFMLEdBQVUsc0NBQTdCLENBQU47QUFESixpQkFFSSxHQS9JUSxHQStJRixRQUFLLElBQUwsQ0FBVSxLQUFWLElBQW1CLEdBQW5CLEdBQXlCLElBL0l2Qjs7QUFnSlosb0JBQUksT0FBTyxRQUFYLEVBQXFCO0FBQ2pCLHdCQUFJLE9BQU8sSUFBUCxDQUFhLE1BQWIsRUFBcUIsTUFBekI7QUFDSSwrQkFBTyxNQUFNLFFBQUssU0FBTCxDQUFnQixNQUFoQixDQUFiO0FBREo7QUFFSCxpQkFIRCxNQUdPO0FBQ0MseUJBREQsR0FDUyxRQUFLLE1BQUwsQ0FBYTtBQUNyQixtQ0FBVyxRQUFLLE1BREs7QUFFckIsaUNBQVMsUUFBSyxLQUFMO0FBRlkscUJBQWIsRUFHVCxNQUhTLENBRFQ7QUFLQywyQkFMRCxHQUtXLFFBQUssSUFBTCxDQUFXLEtBQVgsQ0FMWDs7QUFNSCwwQkFBTSxXQUFOLElBQXFCLFFBQUssSUFBTCxDQUFXLFFBQUssTUFBTCxDQUFhLE9BQWIsQ0FBWCxFQUFrQyxRQUFLLE1BQUwsQ0FBYSxRQUFLLE1BQWxCLENBQWxDLENBQXJCO0FBQ0EsMkJBQU8sUUFBSyxJQUFMLENBQVcsS0FBWCxDQUFQO0FBQ0EsOEJBQVUsRUFBRSxnQkFBZ0Isa0JBQWxCLEVBQVY7QUFDSDtBQTVKVyx1QkE2SlMsUUFBSyxLQUFMLENBQVksR0FBWixFQUFpQixNQUFqQixFQUF5QixPQUF6QixFQUFrQyxJQUFsQyxDQTdKVDtBQUFBO0FBNkpSLHdCQTdKUTs7QUE4Slosb0JBQUksWUFBWSxRQUFoQixFQUEwQjtBQUNsQiwwQkFEa0IsR0FDVCxFQURTOztBQUV0Qix5QkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFNBQVMsUUFBVCxFQUFtQixNQUF2QyxFQUErQyxHQUEvQyxFQUFvRDtBQUM1Qyw2QkFENEMsR0FDcEMsU0FBUyxRQUFULEVBQW1CLENBQW5CLENBRG9DOztBQUVoRCwrQkFBTyxJQUFQLENBQWEsTUFBTSxNQUFOLElBQWdCLElBQWhCLEdBQXVCLE1BQU0sU0FBTixDQUFwQztBQUNIO0FBQ0QsNkJBQVMsT0FBTyxJQUFQLENBQWEsR0FBYixDQUFUO0FBQ0EsMEJBQU0sSUFBSSxhQUFKLENBQW1CLFFBQUssRUFBTCxHQUFVLEdBQVYsR0FBZ0IsTUFBbkMsQ0FBTjtBQUNIO0FBQ0QsdUJBQU8sUUFBSyxLQUFMLENBQVksR0FBWixFQUFpQixNQUFqQixFQUF5QixPQUF6QixFQUFrQyxJQUFsQyxDQUFQO0FBdktZO0FBQUE7QUFBQSxLQUFwQjs7QUEyS0E7O0FBRUEsUUFBSSxVQUFVLE9BQVEsYUFBUixFQUF1Qjs7QUFFakMsY0FBTSxTQUYyQjtBQUdqQyxnQkFBUSxRQUh5QjtBQUlqQyxxQkFBYSxJQUpvQixFQUlkO0FBQ25CLG1CQUFXLG9CQUxzQjtBQU1qQyxnQkFBUTtBQUNKLG9CQUFRLHFHQURKO0FBRUosbUJBQU8sd0JBRkg7QUFHSixtQkFBTyxvQkFISDtBQUlKLG1CQUFPO0FBSkgsU0FOeUI7QUFZakMsbUJBQVc7QUFDUCx1QkFBVyxFQUFFLE1BQU0sS0FBUixFQUFlLFVBQVUsU0FBekIsRUFBb0MsUUFBUSxLQUE1QyxFQUFtRCxTQUFTLEtBQTVELEVBREo7QUFFUCx1QkFBVyxFQUFFLE1BQU0sS0FBUixFQUFlLFVBQVUsU0FBekIsRUFBb0MsUUFBUSxLQUE1QyxFQUFtRCxTQUFTLEtBQTVELEVBRko7QUFHUCx1QkFBVyxFQUFFLE1BQU0sS0FBUixFQUFlLFVBQVUsU0FBekIsRUFBb0MsUUFBUSxLQUE1QyxFQUFtRCxTQUFTLEtBQTVELEVBSEo7QUFJUCx1QkFBVyxFQUFFLE1BQU0sS0FBUixFQUFlLFVBQVUsU0FBekIsRUFBb0MsUUFBUSxLQUE1QyxFQUFtRCxTQUFTLEtBQTVELEVBSko7QUFLUCx1QkFBVyxFQUFFLE1BQU0sS0FBUixFQUFlLFVBQVUsU0FBekIsRUFBb0MsUUFBUSxLQUE1QyxFQUFtRCxTQUFTLEtBQTVELEVBTEo7QUFNUCx1QkFBVyxFQUFFLE1BQU0sS0FBUixFQUFlLFVBQVUsU0FBekIsRUFBb0MsUUFBUSxLQUE1QyxFQUFtRCxTQUFTLEtBQTVELEVBTko7QUFPUCx1QkFBVyxFQUFFLE1BQU0sS0FBUixFQUFlLFVBQVUsU0FBekIsRUFBb0MsUUFBUSxLQUE1QyxFQUFtRCxTQUFTLEtBQTVELEVBUEo7QUFRUCx1QkFBVyxFQUFFLE1BQU0sS0FBUixFQUFlLFVBQVUsU0FBekIsRUFBb0MsUUFBUSxLQUE1QyxFQUFtRCxTQUFTLEtBQTVELEVBUko7QUFTUCx1QkFBVyxFQUFFLE1BQU0sS0FBUixFQUFlLFVBQVUsU0FBekIsRUFBb0MsUUFBUSxLQUE1QyxFQUFtRCxTQUFTLEtBQTVELEVBVEo7QUFVUCx1QkFBVyxFQUFFLE1BQU0sS0FBUixFQUFlLFVBQVUsU0FBekIsRUFBb0MsUUFBUSxLQUE1QyxFQUFtRCxTQUFTLEtBQTVELEVBVko7QUFXUCx1QkFBVyxFQUFFLE1BQU0sS0FBUixFQUFlLFVBQVUsU0FBekIsRUFBb0MsUUFBUSxLQUE1QyxFQUFtRCxTQUFTLEtBQTVELEVBWEo7QUFZUCx1QkFBVyxFQUFFLE1BQU0sS0FBUixFQUFlLFVBQVUsU0FBekIsRUFBb0MsUUFBUSxLQUE1QyxFQUFtRCxTQUFTLEtBQTVELEVBWko7QUFhUCx1QkFBVyxFQUFFLE1BQU0sS0FBUixFQUFlLFVBQVUsU0FBekIsRUFBb0MsUUFBUSxLQUE1QyxFQUFtRCxTQUFTLEtBQTVELEVBYko7QUFjUCx1QkFBVyxFQUFFLE1BQU0sS0FBUixFQUFlLFVBQVUsU0FBekIsRUFBb0MsUUFBUSxLQUE1QyxFQUFtRCxTQUFTLEtBQTVELEVBZEo7QUFlUCx1QkFBVyxFQUFFLE1BQU0sS0FBUixFQUFlLFVBQVUsU0FBekIsRUFBb0MsUUFBUSxLQUE1QyxFQUFtRCxTQUFTLEtBQTVELEVBZko7QUFnQlAsdUJBQVcsRUFBRSxNQUFNLEtBQVIsRUFBZSxVQUFVLFNBQXpCLEVBQW9DLFFBQVEsS0FBNUMsRUFBbUQsU0FBUyxLQUE1RCxFQWhCSjtBQWlCUCx1QkFBVyxFQUFFLE1BQU0sS0FBUixFQUFlLFVBQVUsU0FBekIsRUFBb0MsUUFBUSxLQUE1QyxFQUFtRCxTQUFTLEtBQTVELEVBakJKO0FBa0JQLHVCQUFXLEVBQUUsTUFBTSxLQUFSLEVBQWUsVUFBVSxTQUF6QixFQUFvQyxRQUFRLEtBQTVDLEVBQW1ELFNBQVMsS0FBNUQsRUFsQko7QUFtQlAsdUJBQVcsRUFBRSxNQUFNLEtBQVIsRUFBZSxVQUFVLFNBQXpCLEVBQW9DLFFBQVEsS0FBNUMsRUFBbUQsU0FBUyxLQUE1RCxFQW5CSjtBQW9CUCx1QkFBVyxFQUFFLE1BQU0sS0FBUixFQUFlLFVBQVUsU0FBekIsRUFBb0MsUUFBUSxLQUE1QyxFQUFtRCxTQUFTLEtBQTVELEVBcEJKO0FBcUJQLHVCQUFXLEVBQUUsTUFBTSxLQUFSLEVBQWUsVUFBVSxTQUF6QixFQUFvQyxRQUFRLEtBQTVDLEVBQW1ELFNBQVMsS0FBNUQsRUFyQko7QUFzQlAsdUJBQVcsRUFBRSxNQUFNLEtBQVIsRUFBZSxVQUFVLFNBQXpCLEVBQW9DLFFBQVEsS0FBNUMsRUFBbUQsU0FBUyxLQUE1RCxFQXRCSjtBQXVCUCx1QkFBVyxFQUFFLE1BQU0sS0FBUixFQUFlLFVBQVUsU0FBekIsRUFBb0MsUUFBUSxLQUE1QyxFQUFtRCxTQUFTLEtBQTVELEVBdkJKO0FBd0JQLHVCQUFXLEVBQUUsTUFBTSxLQUFSLEVBQWUsVUFBVSxTQUF6QixFQUFvQyxRQUFRLEtBQTVDLEVBQW1ELFNBQVMsS0FBNUQsRUF4Qko7QUF5QlAsdUJBQVcsRUFBRSxNQUFNLEtBQVIsRUFBZSxVQUFVLFNBQXpCLEVBQW9DLFFBQVEsS0FBNUMsRUFBbUQsU0FBUyxLQUE1RCxFQXpCSjtBQTBCUCx1QkFBVyxFQUFFLE1BQU0sS0FBUixFQUFlLFVBQVUsU0FBekIsRUFBb0MsUUFBUSxLQUE1QyxFQUFtRCxTQUFTLEtBQTVELEVBMUJKO0FBMkJQLHVCQUFXLEVBQUUsTUFBTSxLQUFSLEVBQWUsVUFBVSxTQUF6QixFQUFvQyxRQUFRLEtBQTVDLEVBQW1ELFNBQVMsS0FBNUQsRUEzQko7QUE0QlAsdUJBQVcsRUFBRSxNQUFNLEtBQVIsRUFBZSxVQUFVLFNBQXpCLEVBQW9DLFFBQVEsS0FBNUMsRUFBbUQsU0FBUyxLQUE1RCxFQTVCSjtBQTZCUCx1QkFBVyxFQUFFLE1BQU0sS0FBUixFQUFlLFVBQVUsU0FBekIsRUFBb0MsUUFBUSxLQUE1QyxFQUFtRCxTQUFTLEtBQTVEO0FBN0JKO0FBWnNCLEtBQXZCLENBQWQ7O0FBNkNBOztBQUVBLFFBQUksU0FBUzs7QUFFVCxjQUFNLFFBRkc7QUFHVCxnQkFBUSxRQUhDO0FBSVQscUJBQWEsQ0FBRSxJQUFGLEVBQVEsSUFBUixFQUFjLElBQWQsRUFBb0IsSUFBcEIsQ0FKSjtBQUtULG1CQUFXLEdBTEY7QUFNVCxxQkFBYSxJQU5KO0FBT1QsZ0JBQVE7QUFDSixvQkFBUSxxR0FESjtBQUVKLG1CQUFPLHdCQUZIO0FBR0osbUJBQU8sb0JBSEg7QUFJSixtQkFBTyxDQUNILDZCQURHLEVBRUgsOEJBRkc7QUFKSCxTQVBDO0FBZ0JULGVBQU87QUFDSCxzQkFBVTtBQUNOLHVCQUFPLENBQ0gsOEJBREcsRUFFSCxrQ0FGRyxFQUdILG1DQUhHO0FBREQsYUFEUDtBQVFILHVCQUFXO0FBQ1Asd0JBQVEsQ0FDSixpQ0FESSxFQUVKLG9DQUZJLEVBR0osbUNBSEksRUFJSixvQ0FKSSxFQUtKLDhCQUxJLEVBTUosMEJBTkksRUFPSiw4QkFQSSxFQVFKLFlBUkksRUFTSixrQkFUSSxFQVVKLHNCQVZJO0FBREQ7QUFSUixTQWhCRTtBQXVDVCxtQkFBVztBQUNQLHVCQUFXLEVBQUUsTUFBTSxRQUFSLEVBQWtCLFVBQVUsU0FBNUIsRUFBdUMsUUFBUSxLQUEvQyxFQUFzRCxTQUFTLEtBQS9ELEVBREo7QUFFUCx1QkFBVyxFQUFFLE1BQU0sUUFBUixFQUFrQixVQUFVLFNBQTVCLEVBQXVDLFFBQVEsS0FBL0MsRUFBc0QsU0FBUyxLQUEvRCxFQUZKO0FBR1AsdUJBQVcsRUFBRSxNQUFNLFFBQVIsRUFBa0IsVUFBVSxTQUE1QixFQUF1QyxRQUFRLEtBQS9DLEVBQXNELFNBQVMsS0FBL0QsRUFISjtBQUlQLHVCQUFXLEVBQUUsTUFBTSxRQUFSLEVBQWtCLFVBQVUsU0FBNUIsRUFBdUMsUUFBUSxLQUEvQyxFQUFzRCxTQUFTLEtBQS9ELEVBSko7QUFLUCx1QkFBVyxFQUFFLE1BQU0sUUFBUixFQUFrQixVQUFVLFNBQTVCLEVBQXVDLFFBQVEsS0FBL0MsRUFBc0QsU0FBUyxLQUEvRCxFQUxKO0FBTVAsdUJBQVcsRUFBRSxNQUFNLFFBQVIsRUFBa0IsVUFBVSxTQUE1QixFQUF1QyxRQUFRLEtBQS9DLEVBQXNELFNBQVMsS0FBL0QsRUFOSjtBQU9QLHVCQUFXLEVBQUUsTUFBTSxRQUFSLEVBQWtCLFVBQVUsU0FBNUIsRUFBdUMsUUFBUSxLQUEvQyxFQUFzRCxTQUFTLEtBQS9ELEVBUEo7QUFRUCx1QkFBVyxFQUFFLE1BQU0sUUFBUixFQUFrQixVQUFVLFNBQTVCLEVBQXVDLFFBQVEsS0FBL0MsRUFBc0QsU0FBUyxLQUEvRCxFQVJKO0FBU1AsdUJBQVcsRUFBRSxNQUFNLFFBQVIsRUFBa0IsVUFBVSxTQUE1QixFQUF1QyxRQUFRLEtBQS9DLEVBQXNELFNBQVMsS0FBL0QsRUFUSjtBQVVQLHVCQUFXLEVBQUUsTUFBTSxRQUFSLEVBQWtCLFVBQVUsU0FBNUIsRUFBdUMsUUFBUSxLQUEvQyxFQUFzRCxTQUFTLEtBQS9ELEVBVko7QUFXUCx3QkFBWSxFQUFFLE1BQU0sU0FBUixFQUFtQixVQUFVLFVBQTdCLEVBQXlDLFFBQVEsTUFBakQsRUFBeUQsU0FBUyxLQUFsRSxFQVhMO0FBWVAsdUJBQVcsRUFBRSxNQUFNLFFBQVIsRUFBa0IsVUFBVSxTQUE1QixFQUF1QyxRQUFRLEtBQS9DLEVBQXNELFNBQVMsS0FBL0QsRUFaSjtBQWFQLHVCQUFXLEVBQUUsTUFBTSxRQUFSLEVBQWtCLFVBQVUsU0FBNUIsRUFBdUMsUUFBUSxLQUEvQyxFQUFzRCxTQUFTLEtBQS9EO0FBYkosU0F2Q0Y7O0FBdURILG9CQXZERztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQXdEZ0IsUUFBSyxvQkFBTCxFQXhEaEI7QUFBQTtBQXdERCx3QkF4REM7QUF5REQsdUJBekRDLEdBeURTLFNBQVMsTUFBVCxDQXpEVDtBQTBERCwwQkExREMsR0EwRFksT0FBTyxJQUFQLENBQWEsUUFBUSxTQUFSLENBQWIsQ0ExRFo7QUEyREQsc0JBM0RDLEdBMkRRLEVBQUUsUUFBUSxPQUFWLEVBM0RSOztBQTRETCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFdBQVcsTUFBL0IsRUFBdUMsR0FBdkMsRUFBNEM7QUFDcEMsNEJBRG9DLEdBQ3pCLFdBQVcsQ0FBWCxDQUR5QjtBQUVwQywyQkFGb0MsR0FFMUI7QUFDVixnQ0FBUSxTQURFO0FBRVYsZ0NBQVEsU0FGRTtBQUdWLGlDQUFTO0FBSEMscUJBRjBCOztBQU94Qyx3QkFBSSxZQUFZLFFBQVEsU0FBUixDQUFoQixFQUFvQztBQUM1Qiw4QkFENEIsR0FDbkIsUUFBUSxTQUFSLEVBQW1CLFFBQW5CLENBRG1COztBQUVoQyxnQ0FBUSxNQUFSLElBQWtCLFdBQVksT0FBTyxtQkFBUCxFQUE0QixPQUE1QixDQUFaLENBQWxCO0FBQ0EsZ0NBQVEsT0FBUixJQUFtQixXQUFZLE9BQU8sU0FBUCxFQUFrQixPQUFsQixDQUFaLENBQW5CO0FBQ0EsZ0NBQVEsTUFBUixJQUFrQixRQUFRLE9BQVIsSUFBbUIsUUFBUSxNQUFSLENBQXJDO0FBQ0g7QUFDRCwyQkFBTyxRQUFQLElBQW1CLE9BQW5CO0FBQ0g7QUFDRCx1QkFBTyxNQUFQO0FBM0VLO0FBQUE7QUE4RUgsc0JBOUVHLDBCQThFYSxNQTlFYjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBOEVxQixzQkE5RXJCLGdGQThFOEIsRUE5RTlCO0FBQUEsdUJBK0VnQixRQUFLLG1DQUFMLENBQTBDLFFBQUssTUFBTCxDQUFhO0FBQ3hFLHFDQUFpQixRQUFLLFFBQUwsQ0FBZSxNQUFmO0FBRHVELGlCQUFiLEVBRTVELE1BRjRELENBQTFDLENBL0VoQjtBQUFBO0FBK0VELHdCQS9FQztBQWtGRCx5QkFsRkMsR0FrRlcsU0FBUyxNQUFULENBbEZYO0FBbUZELGlCQW5GQyxHQW1GRyxTQUFVLFVBQVUsZ0JBQVYsQ0FBVixDQW5GSDtBQW9GRCx5QkFwRkMsR0FvRlcsU0FBVSxJQUFJLElBQWQsQ0FwRlg7QUFxRkQsc0JBckZDLEdBcUZRO0FBQ1QsNEJBQVEsRUFEQztBQUVULDRCQUFRLEVBRkM7QUFHVCxpQ0FBYSxTQUhKO0FBSVQsZ0NBQVksUUFBSyxPQUFMLENBQWMsU0FBZDtBQUpILGlCQXJGUjtBQTJGRCxxQkEzRkMsR0EyRk8sQ0FBRSxNQUFGLEVBQVUsTUFBVixDQTNGUDs7QUE0RkwscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxNQUFNLE1BQTFCLEVBQWtDLEdBQWxDLEVBQXVDO0FBQy9CLHdCQUQrQixHQUN4QixNQUFNLENBQU4sQ0FEd0I7QUFFL0IsMEJBRitCLEdBRXRCLFVBQVUsSUFBVixDQUZzQjs7QUFHbkMseUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxPQUFPLE1BQTNCLEVBQW1DLEdBQW5DLEVBQXdDO0FBQ2hDLDZCQURnQyxHQUN4QixPQUFPLENBQVAsQ0FEd0I7QUFFaEMsNkJBRmdDLEdBRXhCLFdBQVksTUFBTSxPQUFOLENBQVosQ0FGd0I7QUFHaEMsOEJBSGdDLEdBR3ZCLFdBQVksTUFBTSxRQUFOLENBQVosQ0FIdUI7O0FBSXBDLCtCQUFPLElBQVAsRUFBYSxJQUFiLENBQW1CLENBQUUsS0FBRixFQUFTLE1BQVQsQ0FBbkI7QUFDSDtBQUNKO0FBQ0QsdUJBQU8sTUFBUDtBQXRHSztBQUFBO0FBeUdILG1CQXpHRyx1QkF5R1UsTUF6R1Y7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQTBHZ0IsUUFBSyxnQ0FBTCxDQUF1QztBQUN4RCxxQ0FBaUIsUUFBSyxRQUFMLENBQWUsTUFBZjtBQUR1QyxpQkFBdkMsQ0ExR2hCO0FBQUE7QUEwR0Qsd0JBMUdDO0FBNkdELHNCQTdHQyxHQTZHUSxTQUFTLE1BQVQsQ0E3R1I7QUE4R0QsaUJBOUdDLEdBOEdHLFNBQVUsT0FBTyxnQkFBUCxDQUFWLENBOUdIO0FBK0dELHlCQS9HQyxHQStHVyxTQUFVLElBQUksSUFBZCxDQS9HWDtBQWdIRCxtQkFoSEMsR0FnSEssU0FoSEw7QUFpSEQsbUJBakhDLEdBaUhLLFNBakhMOztBQWtITCxvQkFBSSxPQUFPLEtBQVAsRUFBYyxPQUFkLENBQUo7QUFDSSwwQkFBTSxXQUFZLE9BQU8sS0FBUCxFQUFjLE9BQWQsQ0FBWixDQUFOO0FBREosaUJBRUEsSUFBSSxPQUFPLE1BQVAsRUFBZSxPQUFmLENBQUo7QUFDSSwwQkFBTSxXQUFZLE9BQU8sTUFBUCxFQUFlLE9BQWYsQ0FBWixDQUFOO0FBREosaUJBRUEsT0FBTztBQUNILGlDQUFhLFNBRFY7QUFFSCxnQ0FBWSxRQUFLLE9BQUwsQ0FBYyxTQUFkLENBRlQ7QUFHSCw0QkFBUSxXQUFZLE9BQU8sTUFBUCxFQUFlLE9BQWYsQ0FBWixDQUhMO0FBSUgsMkJBQU8sV0FBWSxPQUFPLEtBQVAsRUFBYyxPQUFkLENBQVosQ0FKSjtBQUtILDJCQUFPLEdBTEo7QUFNSCwyQkFBTyxHQU5KO0FBT0gsNEJBQVEsV0FBWSxPQUFPLE1BQVAsRUFBZSxPQUFmLENBQVosQ0FQTDtBQVFILDRCQUFRLFNBUkw7QUFTSCw2QkFBUyxTQVROO0FBVUgsNkJBQVMsU0FWTjtBQVdILDRCQUFRLFdBQVksT0FBTyxNQUFQLEVBQWUsT0FBZixDQUFaLENBWEw7QUFZSCw4QkFBVSxTQVpQO0FBYUgsa0NBQWMsU0FiWDtBQWNILCtCQUFXLFdBQVksT0FBTyxLQUFQLEVBQWMsT0FBZCxDQUFaLENBZFI7QUFlSCxrQ0FBYyxTQWZYO0FBZ0JILG1DQUFlLFdBQVksT0FBTyxLQUFQLEVBQWMsT0FBZCxDQUFaO0FBaEJaLGlCQUFQO0FBdEhLO0FBQUE7QUEwSUgsbUJBMUlHLHVCQTBJVSxNQTFJVjtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQTBJa0Isa0JBMUlsQixnRkEwSTJCLEVBMUkzQjtBQTJJRCxpQkEzSUMsR0EySU8sUUFBSyxFQUFMLEdBQVUsNklBM0lqQjs7QUE0SUwsa0JBQU0sSUFBSSxhQUFKLENBQW1CLEtBQW5CLENBQU47QUFDQSxtQkFBTyxRQUFLLG9DQUFMLENBQTJDLFFBQUssTUFBTCxDQUFhO0FBQzNELGlDQUFpQixRQUFLLFFBQUwsQ0FBZSxNQUFmO0FBRDBDLGFBQWIsRUFFL0MsTUFGK0MsQ0FBM0MsQ0FBUDtBQTdJSztBQWtKSCxtQkFsSkcsdUJBa0pVLE1BbEpWLEVBa0prQixJQWxKbEIsRUFrSndCLElBbEp4QixFQWtKOEIsTUFsSjlCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBa0pzQyxxQkFsSnRDLGdGQWtKOEMsU0FsSjlDO0FBa0p5RCxzQkFsSnpELGdGQWtKa0UsRUFsSmxFO0FBbUpELHFCQW5KQyxHQW1KTztBQUNSLHFDQUFpQixRQUFLLFFBQUwsQ0FBZSxNQUFmLENBRFQ7QUFFUixrQ0FBYyxNQUZOO0FBR1IsNEJBQVE7QUFIQSxpQkFuSlA7O0FBd0pMLG9CQUFJLFFBQVEsT0FBWjtBQUNJLDBCQUFNLFdBQU4sSUFBcUIsS0FBckI7QUFESixpQkF4SkssT0EwSmMsUUFBSywrQkFBTCxDQUFzQyxRQUFLLE1BQUwsQ0FBYSxLQUFiLEVBQW9CLE1BQXBCLENBQXRDLENBMUpkO0FBQUE7QUEwSkQsc0JBMUpDOztBQTJKTCx1QkFBTztBQUNILDRCQUFRLE1BREw7QUFFSCwwQkFBTSxPQUFPLE1BQVA7QUFGSCxpQkFBUDtBQTNKSztBQUFBO0FBaUtILG1CQWpLRyx1QkFpS1UsRUFqS1Y7QUFBQTs7QUFrS0wsbUJBQU8sUUFBSyxrQ0FBTCxDQUF5QyxFQUFFLE9BQU8sRUFBVCxFQUF6QyxDQUFQO0FBbEtLO0FBcUtULGFBcktTLG1CQXFLQTtBQUNMLG1CQUFPLEtBQUssWUFBTCxFQUFQO0FBQ0gsU0F2S1E7QUF5S0gsZUF6S0csbUJBeUtNLElBektOO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBeUtZLG1CQXpLWixnRkF5S2tCLFFBektsQjtBQXlLNEIsc0JBeks1QixnRkF5S3FDLEtBektyQztBQXlLNEMsc0JBeks1QyxnRkF5S3FELEVBektyRDtBQXlLeUQsdUJBekt6RCxnRkF5S21FLFNBektuRTtBQXlLOEUsb0JBeks5RSxnRkF5S3FGLFNBektyRjtBQTBLRCx1QkExS0MsR0EwS1MsUUFBSyxhQUFMLENBQW9CLElBQXBCLEVBQTBCLE1BQTFCLENBMUtUO0FBMktELHFCQTNLQyxHQTJLTyxRQUFLLElBQUwsQ0FBVyxNQUFYLEVBQW1CLFFBQUssYUFBTCxDQUFvQixJQUFwQixDQUFuQixDQTNLUDtBQTRLRCxtQkE1S0MsR0E0S0ssUUFBSyxJQUFMLENBQVUsS0FBVixJQUFtQixHQUFuQixHQUF5QixRQUFLLE9BQTlCLEdBQXdDLEdBQXhDLEdBQThDLE9BNUtuRDs7QUE2S0wsb0JBQUksT0FBTyxRQUFYLEVBQXFCO0FBQ2pCLHdCQUFJLE9BQU8sSUFBUCxDQUFhLEtBQWIsRUFBb0IsTUFBeEI7QUFDSSwrQkFBTyxNQUFNLFFBQUssU0FBTCxDQUFnQixLQUFoQixDQUFiO0FBREo7QUFFSCxpQkFIRCxNQUdPO0FBQ0MseUJBREQsR0FDUyxRQUFLLEtBQUwsRUFEVDs7QUFFSCwyQkFBTyxRQUFLLFNBQUwsQ0FBZ0IsUUFBSyxNQUFMLENBQWEsRUFBRSxTQUFTLEtBQVgsRUFBYixFQUFpQyxLQUFqQyxDQUFoQixDQUFQO0FBQ0ksMEJBSEQsR0FHVSxRQUFLLGNBQUwsQ0FBcUIsUUFBSyxNQUExQixDQUhWO0FBSUMsd0JBSkQsR0FJUSxVQUFVLElBQVYsR0FBaUIsSUFKekI7O0FBS0gsOEJBQVU7QUFDTix3Q0FBZ0IsbUNBRFY7QUFFTixvQ0FBWSxRQUFLLE1BRlg7QUFHTixxQ0FBYSxRQUFLLElBQUwsQ0FBVyxRQUFLLE1BQUwsQ0FBYSxJQUFiLENBQVgsRUFBK0IsTUFBL0IsRUFBdUMsUUFBdkMsRUFBaUQsUUFBakQ7QUFIUCxxQkFBVjtBQUtIO0FBMUxJLHVCQTJMZ0IsUUFBSyxLQUFMLENBQVksR0FBWixFQUFpQixNQUFqQixFQUF5QixPQUF6QixFQUFrQyxJQUFsQyxDQTNMaEI7QUFBQTtBQTJMRCx3QkEzTEM7QUFBQSx3QkE0TEQsWUFBWSxRQTVMWDs7QUE2TEQsNkJBQUksU0FBUyxRQUFULEtBQXNCLFNBQTFCO0FBQ0ksMkJBQU8sUUFBUDtBQURKO0FBRUosMEJBQU0sSUFBSSxhQUFKLENBQW1CLFFBQUssRUFBTCxHQUFVLEdBQVYsR0FBZ0IsUUFBSyxJQUFMLENBQVcsUUFBWCxDQUFuQyxDQUFOO0FBRkk7QUE3TEM7QUFBQTtBQUFBLEtBQWI7O0FBbU1BOztBQUVBLFFBQUksVUFBVTs7QUFFVixjQUFNLFNBRkk7QUFHVixnQkFBUSxTQUhFO0FBSVYscUJBQWEsSUFKSCxFQUlTO0FBQ25CLHFCQUFhLElBTEg7QUFNVixtQkFBVyxJQU5EO0FBT1YsZ0JBQVE7QUFDSixvQkFBUSxxR0FESjtBQUVKLG1CQUFPLDZCQUZIO0FBR0osbUJBQU8seUJBSEg7QUFJSixtQkFBTztBQUpILFNBUEU7QUFhVixlQUFPO0FBQ0gsc0JBQVU7QUFDTix1QkFBTyxDQUNILE1BREcsRUFFSCxNQUZHLEVBR0gsT0FIRyxFQUlILFdBSkcsRUFLSCxRQUxHLEVBTUgsYUFORztBQURELGFBRFA7QUFXSCx1QkFBVztBQUNQLHVCQUFPLENBQ0gsT0FERyxFQUVILFlBRkcsRUFHSCxXQUhHLEVBSUgsU0FKRyxFQUtILFVBTEcsQ0FEQTtBQVFQLHdCQUFRLENBQ0osT0FESSxFQUVKLFlBRkksRUFHSixnQkFISSxDQVJEO0FBYVAsdUJBQU8sQ0FDSCxnQkFERyxDQWJBO0FBZ0JQLDBCQUFVLENBQ04sT0FETSxFQUVOLGdCQUZNO0FBaEJIO0FBWFIsU0FiRztBQThDVixtQkFBVztBQUNQLHVCQUFXLEVBQUUsTUFBTSxRQUFSLEVBQWtCLFVBQVUsU0FBNUIsRUFBdUMsUUFBUSxLQUEvQyxFQUFzRCxTQUFTLEtBQS9ELEVBREo7QUFFUCx1QkFBVyxFQUFFLE1BQU0sUUFBUixFQUFrQixVQUFVLFNBQTVCLEVBQXVDLFFBQVEsS0FBL0MsRUFBc0QsU0FBUyxLQUEvRCxFQUZKO0FBR1AsdUJBQVcsRUFBRSxNQUFNLFFBQVIsRUFBa0IsVUFBVSxTQUE1QixFQUF1QyxRQUFRLEtBQS9DLEVBQXNELFNBQVMsS0FBL0QsRUFISjtBQUlQLHVCQUFXLEVBQUUsTUFBTSxRQUFSLEVBQWtCLFVBQVUsU0FBNUIsRUFBdUMsUUFBUSxLQUEvQyxFQUFzRCxTQUFTLEtBQS9ELEVBSko7QUFLUCx1QkFBVyxFQUFFLE1BQU0sUUFBUixFQUFrQixVQUFVLFNBQTVCLEVBQXVDLFFBQVEsS0FBL0MsRUFBc0QsU0FBUyxLQUEvRCxFQUxKO0FBTVAsdUJBQVcsRUFBRSxNQUFNLFFBQVIsRUFBa0IsVUFBVSxTQUE1QixFQUF1QyxRQUFRLEtBQS9DLEVBQXNELFNBQVMsS0FBL0QsRUFOSjtBQU9QLHVCQUFXLEVBQUUsTUFBTSxRQUFSLEVBQWtCLFVBQVUsU0FBNUIsRUFBdUMsUUFBUSxLQUEvQyxFQUFzRCxTQUFTLEtBQS9ELEVBUEo7QUFRUCx1QkFBVyxFQUFFLE1BQU0sUUFBUixFQUFrQixVQUFVLFNBQTVCLEVBQXVDLFFBQVEsS0FBL0MsRUFBc0QsU0FBUyxLQUEvRCxFQVJKO0FBU1AsdUJBQVcsRUFBRSxNQUFNLFFBQVIsRUFBa0IsVUFBVSxTQUE1QixFQUF1QyxRQUFRLEtBQS9DLEVBQXNELFNBQVMsS0FBL0QsRUFUSjtBQVVQLHVCQUFXLEVBQUUsTUFBTSxRQUFSLEVBQWtCLFVBQVUsU0FBNUIsRUFBdUMsUUFBUSxLQUEvQyxFQUFzRCxTQUFTLEtBQS9ELEVBVko7QUFXUCx1QkFBVyxFQUFFLE1BQU0sUUFBUixFQUFrQixVQUFVLFNBQTVCLEVBQXVDLFFBQVEsS0FBL0MsRUFBc0QsU0FBUyxLQUEvRCxFQVhKO0FBWVAsdUJBQVcsRUFBRSxNQUFNLFFBQVIsRUFBa0IsVUFBVSxTQUE1QixFQUF1QyxRQUFRLEtBQS9DLEVBQXNELFNBQVMsS0FBL0QsRUFaSjtBQWFQLHVCQUFXLEVBQUUsTUFBTSxRQUFSLEVBQWtCLFVBQVUsU0FBNUIsRUFBdUMsUUFBUSxLQUEvQyxFQUFzRCxTQUFTLEtBQS9ELEVBYko7QUFjUCx1QkFBVyxFQUFFLE1BQU0sUUFBUixFQUFrQixVQUFVLFNBQTVCLEVBQXVDLFFBQVEsS0FBL0MsRUFBc0QsU0FBUyxLQUEvRCxFQWRKO0FBZVAsdUJBQVcsRUFBRSxNQUFNLFFBQVIsRUFBa0IsVUFBVSxTQUE1QixFQUF1QyxRQUFRLEtBQS9DLEVBQXNELFNBQVMsS0FBL0QsRUFmSjtBQWdCUCx1QkFBVyxFQUFFLE1BQU0sUUFBUixFQUFrQixVQUFVLFNBQTVCLEVBQXVDLFFBQVEsS0FBL0MsRUFBc0QsU0FBUyxLQUEvRCxFQWhCSjtBQWlCUCx1QkFBVyxFQUFFLE1BQU0sUUFBUixFQUFrQixVQUFVLFNBQTVCLEVBQXVDLFFBQVEsS0FBL0MsRUFBc0QsU0FBUyxLQUEvRCxFQWpCSjtBQWtCUCx3QkFBWSxFQUFFLE1BQU0sU0FBUixFQUFtQixVQUFVLFVBQTdCLEVBQXlDLFFBQVEsS0FBakQsRUFBd0QsU0FBUyxNQUFqRSxFQWxCTDtBQW1CUCx3QkFBWSxFQUFFLE1BQU0sU0FBUixFQUFtQixVQUFVLFVBQTdCLEVBQXlDLFFBQVEsS0FBakQsRUFBd0QsU0FBUyxNQUFqRSxFQW5CTDtBQW9CUCx3QkFBWSxFQUFFLE1BQU0sU0FBUixFQUFtQixVQUFVLFVBQTdCLEVBQXlDLFFBQVEsTUFBakQsRUFBeUQsU0FBUyxLQUFsRTtBQXBCTCxTQTlDRDs7QUFxRUosb0JBckVJO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBc0VlLFFBQUssaUJBQUwsRUF0RWY7QUFBQTtBQXNFRix3QkF0RUU7QUF1RUYsc0JBdkVFLEdBdUVPLEVBQUUsUUFBUSxRQUFWLEVBdkVQO0FBd0VGLHdCQXhFRSxHQXdFUyxTQUFTLFVBQVQsQ0F4RVQ7O0FBeUVOLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksU0FBUyxNQUE3QixFQUFxQyxHQUFyQyxFQUEwQztBQUNsQywyQkFEa0MsR0FDeEIsU0FBUyxDQUFULENBRHdCO0FBRWxDLHlCQUZrQyxHQUUxQixRQUFRLE9BQVIsQ0FGMEI7QUFHbEMsNEJBSGtDLEdBR3ZCLFFBQUssa0JBQUwsQ0FBeUIsS0FBekIsQ0FIdUI7QUFJbEMsMkJBSmtDLEdBSXhCO0FBQ1YsZ0NBQVEsV0FBWSxRQUFRLE1BQVIsQ0FBWixDQURFO0FBRVYsZ0NBQVEsV0FBWSxRQUFRLFFBQVIsQ0FBWixDQUZFO0FBR1YsaUNBQVM7QUFIQyxxQkFKd0I7O0FBU3RDLDRCQUFRLE9BQVIsSUFBbUIsUUFBSyxHQUFMLENBQVUsUUFBUSxNQUFSLENBQVYsRUFBMkIsUUFBUSxNQUFSLENBQTNCLENBQW5CO0FBQ0EsMkJBQU8sUUFBUCxJQUFtQixPQUFuQjtBQUNIO0FBQ0QsdUJBQU8sTUFBUDtBQXJGTTtBQUFBO0FBd0ZKLHNCQXhGSSwwQkF3RlksTUF4Rlo7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUF3Rm9CLHNCQXhGcEIsZ0ZBd0Y2QixFQXhGN0I7QUF5RkYsaUJBekZFLEdBeUZFLFFBQUssTUFBTCxDQUFhLE1BQWIsQ0F6RkY7QUFBQSx1QkEwRmdCLFFBQUssY0FBTCxDQUFxQixRQUFLLE1BQUwsQ0FBYTtBQUNwRCw4QkFBVSxFQUFFLElBQUYsQ0FEMEM7QUFFcEQsNkJBQVMsR0FGMkMsQ0FFdEM7QUFGc0MsaUJBQWIsRUFHeEMsTUFId0MsQ0FBckIsQ0ExRmhCO0FBQUE7QUEwRkYseUJBMUZFO0FBOEZGLHlCQTlGRSxHQThGVSxRQUFLLFlBQUwsRUE5RlY7QUErRkYsc0JBL0ZFLEdBK0ZPO0FBQ1QsNEJBQVEsRUFEQztBQUVULDRCQUFRLEVBRkM7QUFHVCxpQ0FBYSxTQUhKO0FBSVQsZ0NBQVksUUFBSyxPQUFMLENBQWMsU0FBZDtBQUpILGlCQS9GUDtBQXFHRixxQkFyR0UsR0FxR00sQ0FBRSxNQUFGLEVBQVUsTUFBVixDQXJHTjs7QUFzR04scUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxNQUFNLE1BQTFCLEVBQWtDLEdBQWxDLEVBQXVDO0FBQy9CLHdCQUQrQixHQUN4QixNQUFNLENBQU4sQ0FEd0I7QUFFL0IsMEJBRitCLEdBRXRCLFVBQVUsSUFBVixDQUZzQjs7QUFHbkMseUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxPQUFPLE1BQTNCLEVBQW1DLEdBQW5DLEVBQXdDO0FBQ2hDLDZCQURnQyxHQUN4QixPQUFPLENBQVAsQ0FEd0I7QUFFaEMsNkJBRmdDLEdBRXhCLFdBQVksTUFBTSxDQUFOLENBQVosQ0FGd0I7QUFHaEMsOEJBSGdDLEdBR3ZCLFdBQVksTUFBTSxDQUFOLENBQVosQ0FIdUI7O0FBSXBDLCtCQUFPLElBQVAsRUFBYSxJQUFiLENBQW1CLENBQUUsS0FBRixFQUFTLE1BQVQsQ0FBbkI7QUFDSDtBQUNKO0FBQ0QsdUJBQU8sTUFBUDtBQWhITTtBQUFBO0FBbUhWLG1CQW5IVSx1QkFtSEcsTUFuSEgsRUFtSFcsTUFuSFgsRUFtSG1CO0FBQ3pCLGdCQUFJLFlBQVksT0FBTyxXQUFQLENBQWhCO0FBQ0EsbUJBQU87QUFDSCw2QkFBYSxTQURWO0FBRUgsNEJBQVksS0FBSyxPQUFMLENBQWMsU0FBZCxDQUZUO0FBR0gsd0JBQVEsV0FBWSxPQUFPLFdBQVAsQ0FBWixDQUhMO0FBSUgsdUJBQU8sV0FBWSxPQUFPLFVBQVAsQ0FBWixDQUpKO0FBS0gsdUJBQU8sV0FBWSxPQUFPLFVBQVAsQ0FBWixDQUxKO0FBTUgsdUJBQU8sV0FBWSxPQUFPLFVBQVAsQ0FBWixDQU5KO0FBT0gsd0JBQVEsV0FBWSxPQUFPLGtCQUFQLENBQVosQ0FQTDtBQVFILHdCQUFRLFdBQVksT0FBTyxXQUFQLENBQVosQ0FSTDtBQVNILHlCQUFTLFdBQVksT0FBTyxnQkFBUCxDQUFaLENBVE47QUFVSCx5QkFBUyxTQVZOO0FBV0gsd0JBQVEsV0FBWSxPQUFPLFdBQVAsQ0FBWixDQVhMO0FBWUgsMEJBQVUsV0FBWSxPQUFPLG9CQUFQLENBQVosQ0FaUDtBQWFILDhCQUFjLFNBYlg7QUFjSCwyQkFBVyxTQWRSO0FBZUgsOEJBQWMsU0FmWDtBQWdCSCwrQkFBZSxXQUFZLE9BQU8sUUFBUCxDQUFaLENBaEJaO0FBaUJILHdCQUFRO0FBakJMLGFBQVA7QUFtQkgsU0F4SVM7QUEwSUosbUJBMUlJLHVCQTBJUyxNQTFJVDtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQTJJRixpQkEzSUUsR0EySUUsUUFBSyxNQUFMLENBQWEsTUFBYixDQTNJRjtBQUFBLHVCQTRJZSxRQUFLLG1CQUFMLENBQTBCO0FBQzNDLDhCQUFVLEVBQUUsSUFBRjtBQURpQyxpQkFBMUIsQ0E1SWY7QUFBQTtBQTRJRix3QkE1SUU7O0FBK0lOLHVCQUFPLFFBQUssV0FBTCxDQUFrQixRQUFsQixFQUE0QixDQUE1QixDQUFQO0FBL0lNO0FBQUE7QUFrSkosa0JBbEpJLHNCQWtKUSxNQWxKUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBa0pnQixxQkFsSmhCLGdGQWtKNEIsRUFsSjVCO0FBa0pnQyxpQkFsSmhDLGdGQWtKd0MsU0FsSnhDO0FBa0ptRCxpQkFsSm5ELGdGQWtKMkQsU0FsSjNEOztBQW1KTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQU0sSUFBSSxjQUFKLENBQW9CLFFBQUssRUFBTCxHQUFVLG9DQUE5QixDQUFOO0FBN0tNO0FBZ0xWLGtCQWhMVSxzQkFnTEUsS0FoTEYsRUFnTDZCO0FBQUEsZ0JBQXBCLE1BQW9CLHVFQUFYLFNBQVc7O0FBQ25DLGdCQUFJLGlCQUFrQixPQUFPLEtBQVIsR0FBaUIsR0FBakIsR0FBdUIsTUFBNUM7QUFDQSxnQkFBSSxZQUFZLE1BQU0sY0FBTixDQUFoQjtBQUNBLGdCQUFJLGFBQWMsT0FBTyxLQUFSLEdBQWlCLEdBQWpCLEdBQXVCLE9BQXhDO0FBQ0EsZ0JBQUksUUFBUSxXQUFZLE1BQU0sVUFBTixDQUFaLENBQVo7QUFDQSxnQkFBSSxjQUFlLE9BQU8sS0FBUixHQUFpQixHQUFqQixHQUF1QixLQUF6QztBQUNBLGdCQUFJLFNBQVMsV0FBWSxNQUFNLFdBQU4sQ0FBWixDQUFiO0FBQ0EsZ0JBQUksVUFBVyxPQUFPLEtBQVIsR0FBaUIsR0FBakIsR0FBdUIsSUFBckM7QUFDQSxnQkFBSSxLQUFLLE1BQU0sT0FBTixFQUFlLFFBQWYsRUFBVDtBQUNBLGdCQUFJLE9BQU8sU0FBWDtBQUNBLGdCQUFJLE9BQU8sS0FBWCxFQUFrQjtBQUNkLHVCQUFPLE1BQVA7QUFDQSxvQkFBSSxNQUFNLEdBQU4sQ0FBSixFQUNJLE9BQU8sS0FBUDtBQUNQLGFBSkQsTUFJTztBQUNILG9CQUFJLFVBQVUsTUFBTSxTQUFOLENBQWQ7QUFDQSxvQkFBSSxVQUFVLE1BQU0sU0FBTixDQUFkO0FBQ0Esb0JBQUksT0FBSixFQUFhO0FBQ1QsMkJBQU8sVUFBVSxNQUFWLEdBQW1CLEtBQTFCO0FBQ0gsaUJBRkQsTUFFTztBQUNILDJCQUFPLFVBQVUsS0FBVixHQUFrQixNQUF6QjtBQUNIO0FBQ0o7QUFDRCxtQkFBTztBQUNILHdCQUFRLEtBREw7QUFFSCw2QkFBYSxTQUZWO0FBR0gsNEJBQVksS0FBSyxPQUFMLENBQWMsU0FBZCxDQUhUO0FBSUgsMEJBQVUsT0FBTyxRQUFQLENBSlA7QUFLSCxzQkFBTSxFQUxIO0FBTUgsd0JBQVEsU0FOTDtBQU9ILHdCQUFRLElBUEw7QUFRSCx5QkFBUyxLQVJOO0FBU0gsMEJBQVU7QUFUUCxhQUFQO0FBV0gsU0FsTlM7QUFvTkosbUJBcE5JLHVCQW9OUyxNQXBOVDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFvTmlCLHNCQXBOakIsZ0ZBb04wQixFQXBOMUI7QUFxTkYsaUJBck5FLEdBcU5FLFFBQUssTUFBTCxDQUFhLE1BQWIsQ0FyTkY7QUFBQSx1QkFzTmUsUUFBSyxrQkFBTCxDQUF5QixRQUFLLE1BQUwsQ0FBYTtBQUN2RCw4QkFBVSxFQUFFLElBQUYsQ0FENkM7QUFFdkQ7QUFDQTtBQUNBO0FBQ0EsNkJBQVMsR0FMOEMsQ0FLbEM7QUFMa0MsaUJBQWIsRUFNM0MsTUFOMkMsQ0FBekIsQ0F0TmY7QUFBQTtBQXNORix3QkF0TkU7O0FBNk5OLHVCQUFPLFFBQUssV0FBTCxDQUFrQixRQUFsQixFQUE0QixDQUE1QixDQUFQO0FBN05NO0FBQUE7QUFnT1Ysa0JBaE9VLHNCQWdPRSxLQWhPRixFQWdPUztBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFNLElBQUksY0FBSixDQUFvQixLQUFLLEVBQUwsR0FBVSxvQ0FBOUIsQ0FBTjtBQUNILFNBalBTO0FBbVBKLG1CQW5QSSx1QkFtUFMsTUFuUFQsRUFtUGlCLElBblBqQixFQW1QdUIsSUFuUHZCLEVBbVA2QixNQW5QN0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFtUHFDLHFCQW5QckMsZ0ZBbVA2QyxTQW5QN0M7QUFtUHdELHNCQW5QeEQsZ0ZBbVBpRSxFQW5QakU7QUFvUEYscUJBcFBFLEdBb1BNO0FBQ1IsOEJBQVUsUUFBSyxRQUFMLENBQWUsTUFBZixDQURGO0FBRVIsZ0NBQVksS0FBSyxPQUFMLENBQWMsTUFBZCxDQUZKO0FBR1IsNkJBQVMsS0FBSyxPQUFMLENBQWMsS0FBZCxDQUhEO0FBSVIsNEJBQVEsS0FBSyxXQUFMLEVBSkE7QUFLUiw0QkFBUSxLQUFLLFdBQUwsRUFMQTtBQU1SLG1DQUFlLEtBTlAsQ0FNYztBQUN0QjtBQVBRLGlCQXBQTjtBQUFBLHVCQTZQZSxRQUFLLGdCQUFMLENBQXVCLFFBQUssTUFBTCxDQUFhLEtBQWIsRUFBb0IsTUFBcEIsQ0FBdkIsQ0E3UGY7QUFBQTtBQTZQRix3QkE3UEU7O0FBOFBOLHVCQUFPO0FBQ0gsNEJBQVEsUUFETDtBQUVILDBCQUFNLFNBQVMsU0FBVCxFQUFvQixRQUFwQjtBQUZILGlCQUFQO0FBOVBNO0FBQUE7QUFvUUosa0JBcFFJLHNCQW9RUSxFQXBRUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQW9RWSxzQkFwUVosZ0ZBb1FxQixFQXBRckI7QUFxUUYsc0JBclFFLEdBcVFRLFlBQVksTUFyUXBCOztBQXNRTixvQkFBSSxDQUFDLE1BQUw7QUFDSSwwQkFBTSxJQUFJLGFBQUosQ0FBbUIsUUFBSyxFQUFMLEdBQVUscUNBQTdCLENBQU47QUFESixpQkFFSSxDQXhRRSxHQXdRRSxRQUFLLE1BQUwsQ0FBYSxNQUFiLENBeFFGO0FBQUEsdUJBeVFlLFFBQUssZUFBTCxDQUFzQixRQUFLLE1BQUwsQ0FBYSxNQUFiLEVBQXFCO0FBQzVELDhCQUFVLEVBQUUsSUFBRixDQURrRDtBQUU1RCwrQkFBVyxHQUFHLFFBQUg7QUFGaUQsaUJBQXJCLENBQXRCLENBelFmO0FBQUE7QUF5UUYsd0JBelFFOztBQTZRTix1QkFBTyxRQUFLLFVBQUwsQ0FBaUIsUUFBakIsQ0FBUDtBQTdRTTtBQUFBO0FBZ1JKLG1CQWhSSTtBQUFBOztBQWlSTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBTSxJQUFJLGNBQUosQ0FBb0IsUUFBSyxFQUFMLEdBQVUsa0NBQTlCLENBQU47QUF2Uk07QUEwUkoseUJBMVJJO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBMFJlLHNCQTFSZixnRkEwUndCLFNBMVJ4QjtBQTBSbUMsc0JBMVJuQyxnRkEwUjRDLEVBMVI1Qzs7QUEyUk4sb0JBQUksQ0FBQyxNQUFMO0FBQ0ksMEJBQU0sSUFBSSxhQUFKLENBQW1CLFFBQUssRUFBTCxHQUFVLHNDQUE3QixDQUFOO0FBREosaUJBRUksQ0E3UkUsR0E2UkUsUUFBSyxNQUFMLENBQWEsTUFBYixDQTdSRjtBQUFBLHVCQThSZSxRQUFLLG9CQUFMLENBQTJCO0FBQzVDLDhCQUFVLEVBQUUsSUFBRjtBQURrQyxpQkFBM0IsQ0E5UmY7QUFBQTtBQThSRix3QkE5UkU7O0FBaVNOLHVCQUFPLFFBQUssV0FBTCxDQUFrQixRQUFsQixFQUE0QixDQUE1QixDQUFQO0FBalNNO0FBQUE7QUFvU0osbUJBcFNJLHVCQW9TUyxFQXBTVDtBQUFBO0FBQUE7QUFBQTs7QUFvU2Esa0JBcFNiLGdGQW9Tc0IsRUFwU3RCOztBQXFTTixtQkFBTyxRQUFLLHNCQUFMLENBQTZCLFFBQUssTUFBTCxDQUFhO0FBQzdDLDJCQUFXLFNBQVUsRUFBVjtBQUNYO0FBRjZDLGFBQWIsRUFHakMsTUFIaUMsQ0FBN0IsQ0FBUDtBQXJTTTtBQTJTVixhQTNTVSxtQkEyU0Q7QUFDTCxtQkFBTyxLQUFLLFlBQUwsRUFBUDtBQUNILFNBN1NTO0FBK1NKLGVBL1NJLG1CQStTSyxJQS9TTDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBK1NXLG1CQS9TWCxnRkErU2lCLFFBL1NqQjtBQStTMkIsc0JBL1MzQixnRkErU29DLEtBL1NwQztBQStTMkMsc0JBL1MzQyxnRkErU29ELEVBL1NwRDtBQStTd0QsdUJBL1N4RCxnRkErU2tFLFNBL1NsRTtBQStTNkUsb0JBL1M3RSxnRkErU29GLFNBL1NwRjtBQWdURixtQkFoVEUsR0FnVEksUUFBSyxJQUFMLENBQVUsS0FBVixJQUFtQixHQUFuQixHQUF5QixRQUFLLE9BQTlCLEdBQXdDLEdBQXhDLEdBQThDLElBaFRsRDs7QUFpVE4sb0JBQUksT0FBTyxRQUFYLEVBQXFCO0FBQ2pCLHdCQUFJLE9BQU8sSUFBUCxDQUFhLE1BQWIsRUFBcUIsTUFBekI7QUFDSSwrQkFBTyxNQUFNLFFBQUssU0FBTCxDQUFnQixNQUFoQixDQUFiO0FBREo7QUFFSCxpQkFIRCxNQUdPO0FBQ0MseUJBREQsR0FDUyxRQUFLLEtBQUwsRUFEVDtBQUVDLHlCQUZELEdBRVMsUUFBSyxTQUFMLENBQWdCLFFBQUssTUFBTCxDQUFhLEVBQUUsYUFBYSxLQUFmLEVBQWIsRUFBcUMsTUFBckMsQ0FBaEIsQ0FGVDtBQUdDLHdCQUhELEdBR1EsUUFBSyxNQUFMLEdBQWMsR0FBZCxHQUFvQixLQUg1QjtBQUlDLDZCQUpELEdBSWEsUUFBSyxJQUFMLENBQVcsUUFBSyxNQUFMLENBQWEsSUFBYixDQUFYLEVBQStCLFFBQS9CLENBSmI7O0FBS0gsNkJBQVMsTUFBTSxZQUFOLEdBQXFCLFNBQTlCO0FBQ0EsOEJBQVU7QUFDTix3Q0FBZ0IsUUFBSztBQURmLHFCQUFWO0FBR0Esd0JBQUksVUFBVSxLQUFkLEVBQXFCO0FBQ2pCLCtCQUFPLE1BQU0sS0FBYjtBQUNILHFCQUZELE1BRU87QUFDSCwrQkFBTyxLQUFQO0FBQ0EsZ0NBQVEsY0FBUixJQUEwQixtQ0FBMUI7QUFDSDtBQUNKO0FBblVLLHVCQW9VZSxRQUFLLEtBQUwsQ0FBWSxHQUFaLEVBQWlCLE1BQWpCLEVBQXlCLE9BQXpCLEVBQWtDLElBQWxDLENBcFVmO0FBQUE7QUFvVUYsd0JBcFVFOztBQXFVTixvQkFBSSxVQUFVLFFBQWQsRUFBd0I7QUFDcEIsd0JBQUksU0FBUyxNQUFULElBQW1CLENBQXZCO0FBQ0ksOEJBQU0sSUFBSSxhQUFKLENBQW1CLFFBQUssRUFBTCxHQUFVLEdBQVYsR0FBZ0IsUUFBSyxJQUFMLENBQVcsUUFBWCxDQUFuQyxDQUFOO0FBREo7QUFFSDtBQUNELHVCQUFPLFFBQVA7QUF6VU07QUFBQTtBQUFBLEtBQWQ7O0FBNlVBOztBQUVBLFFBQUksUUFBUTs7QUFFUixjQUFNLE9BRkU7QUFHUixnQkFBUSxPQUhBO0FBSVIscUJBQWEsSUFKTCxFQUlXO0FBQ25CLHFCQUFhLElBTEw7QUFNUixnQkFBUTtBQUNKLG9CQUFRLHFHQURKO0FBRUosbUJBQU8seUJBRkg7QUFHSixtQkFBTyx5QkFISDtBQUlKLG1CQUFPLENBQ0gsa0NBREcsRUFFSCxnQ0FGRztBQUpILFNBTkE7QUFlUixlQUFPO0FBQ0gsc0JBQVU7QUFDTix1QkFBTyxDQUNILHlCQURHLEVBRUgsNEJBRkcsRUFHSCx5QkFIRztBQURELGFBRFA7QUFRSCx1QkFBVztBQUNQLHdCQUFRLENBQ0osaUJBREksRUFFSixvQkFGSSxFQUdKLHlCQUhJLEVBSUosc0JBSkksRUFLSiwyQkFMSSxFQU1KLGVBTkksRUFPSixnQkFQSSxFQVFKLDhCQVJJLEVBU0osK0JBVEksRUFVSixtQkFWSSxFQVdKLGdCQVhJLEVBWUosaUJBWkksRUFhSixjQWJJO0FBREQ7QUFSUixTQWZDO0FBeUNSLG1CQUFXO0FBQ1AsdUJBQVcsRUFBRSxNQUFNLFFBQVIsRUFBa0IsVUFBVSxTQUE1QixFQUF1QyxRQUFRLEtBQS9DLEVBQXNELFNBQVMsS0FBL0QsRUFESjtBQUVQLHVCQUFXLEVBQUUsTUFBTSxRQUFSLEVBQWtCLFVBQVUsU0FBNUIsRUFBdUMsUUFBUSxLQUEvQyxFQUFzRCxTQUFTLEtBQS9ELEVBRko7QUFHUCx1QkFBVyxFQUFFLE1BQU0sUUFBUixFQUFrQixVQUFVLFNBQTVCLEVBQXVDLFFBQVEsS0FBL0MsRUFBc0QsU0FBUyxLQUEvRDtBQUhKLFNBekNIOztBQStDRixvQkEvQ0U7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQWdEZ0IsUUFBSywyQkFBTCxFQWhEaEI7QUFBQTtBQWdEQSx1QkFoREE7QUFpREEsc0JBakRBLEdBaURTLEVBQUUsUUFBUSxPQUFWLEVBakRUOztBQWtESixxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFFBQUssVUFBTCxDQUFnQixNQUFwQyxFQUE0QyxHQUE1QyxFQUFpRDtBQUN6Qyw0QkFEeUMsR0FDOUIsUUFBSyxVQUFMLENBQWdCLENBQWhCLENBRDhCO0FBRXpDLDJCQUZ5QyxHQUUvQjtBQUNWLGdDQUFRLFNBREU7QUFFVixnQ0FBUSxTQUZFO0FBR1YsaUNBQVM7QUFIQyxxQkFGK0I7O0FBTzdDLHdCQUFJLFlBQVksT0FBaEIsRUFBeUI7QUFDakIsaUNBRGlCLEdBQ0wsZUFBZSxRQURWOztBQUVyQixnQ0FBUSxNQUFSLElBQWtCLFFBQVEsU0FBUixDQUFsQjtBQUNBLGdDQUFRLE9BQVIsSUFBbUIsUUFBUSxRQUFSLENBQW5CO0FBQ0EsZ0NBQVEsTUFBUixJQUFrQixRQUFRLE9BQVIsSUFBbUIsUUFBUSxNQUFSLENBQXJDO0FBQ0g7QUFDRCwyQkFBTyxRQUFQLElBQW1CLE9BQW5CO0FBQ0g7QUFDRCx1QkFBTyxNQUFQO0FBakVJO0FBQUE7QUFvRUYsc0JBcEVFLDBCQW9FYyxNQXBFZDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQW9Fc0Isc0JBcEV0QixnRkFvRStCLEVBcEUvQjtBQUFBLHVCQXFFa0IsUUFBSywrQkFBTCxDQUFzQyxRQUFLLE1BQUwsQ0FBYTtBQUNyRSw0QkFBUSxRQUFLLFFBQUwsQ0FBZSxNQUFmO0FBRDZELGlCQUFiLEVBRXpELE1BRnlELENBQXRDLENBckVsQjtBQUFBO0FBcUVBLHlCQXJFQTtBQXdFQSx5QkF4RUEsR0F3RVksUUFBSyxZQUFMLEVBeEVaO0FBeUVBLHNCQXpFQSxHQXlFUztBQUNULDRCQUFRLEVBREM7QUFFVCw0QkFBUSxFQUZDO0FBR1QsaUNBQWEsU0FISjtBQUlULGdDQUFZLFFBQUssT0FBTCxDQUFjLFNBQWQ7QUFKSCxpQkF6RVQ7QUErRUEscUJBL0VBLEdBK0VRLENBQUUsTUFBRixFQUFVLE1BQVYsQ0EvRVI7O0FBZ0ZKLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksTUFBTSxNQUExQixFQUFrQyxHQUFsQyxFQUF1QztBQUMvQix3QkFEK0IsR0FDeEIsTUFBTSxDQUFOLENBRHdCO0FBRS9CLDBCQUYrQixHQUV0QixVQUFVLElBQVYsQ0FGc0I7O0FBR25DLHlCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksT0FBTyxNQUEzQixFQUFtQyxHQUFuQyxFQUF3QztBQUNoQyw2QkFEZ0MsR0FDeEIsT0FBTyxDQUFQLENBRHdCO0FBRWhDLDZCQUZnQyxHQUV4QixNQUFNLENBQU4sQ0FGd0I7QUFHaEMsOEJBSGdDLEdBR3ZCLE1BQU0sQ0FBTixDQUh1QjtBQUloQyxtQ0FKZ0MsR0FJcEIsTUFBTSxDQUFOLElBQVcsSUFKUzs7QUFLcEMsK0JBQU8sSUFBUCxFQUFhLElBQWIsQ0FBbUIsQ0FBRSxLQUFGLEVBQVMsTUFBVCxFQUFpQixXQUFqQixDQUFuQjtBQUNIO0FBQ0o7QUFDRCx1QkFBTyxNQUFQO0FBM0ZJO0FBQUE7QUE4RkYsbUJBOUZFLHVCQThGVyxNQTlGWDtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQStGZSxRQUFLLDRCQUFMLENBQW1DO0FBQ2xELDRCQUFRLFFBQUssUUFBTCxDQUFlLE1BQWY7QUFEMEMsaUJBQW5DLENBL0ZmO0FBQUE7QUErRkEsc0JBL0ZBO0FBa0dBLHlCQWxHQSxHQWtHWSxRQUFLLFlBQUwsRUFsR1o7O0FBbUdKLHVCQUFPO0FBQ0gsaUNBQWEsU0FEVjtBQUVILGdDQUFZLFFBQUssT0FBTCxDQUFjLFNBQWQsQ0FGVDtBQUdILDRCQUFRLFdBQVksT0FBTyxHQUFQLENBQVosQ0FITDtBQUlILDJCQUFPLFdBQVksT0FBTyxHQUFQLENBQVosQ0FKSjtBQUtILDJCQUFPLFNBTEo7QUFNSCwyQkFBTyxTQU5KO0FBT0gsNEJBQVEsU0FQTDtBQVFILDRCQUFRLFNBUkw7QUFTSCw2QkFBUyxTQVROO0FBVUgsNkJBQVMsU0FWTjtBQVdILDRCQUFRLFdBQVksT0FBTyxJQUFQLENBQVosQ0FYTDtBQVlILDhCQUFVLFNBWlA7QUFhSCxrQ0FBYyxTQWJYO0FBY0gsK0JBQVcsV0FBWSxPQUFPLElBQVAsQ0FBWixDQWRSO0FBZUgsa0NBQWMsU0FmWDtBQWdCSCxtQ0FBZSxXQUFZLE9BQU8sR0FBUCxDQUFaO0FBaEJaLGlCQUFQO0FBbkdJO0FBQUE7QUF1SEYsbUJBdkhFLHVCQXVIVyxNQXZIWDtBQUFBO0FBQUE7QUFBQTs7QUF1SG1CLGtCQXZIbkIsZ0ZBdUg0QixFQXZINUI7O0FBd0hKLG1CQUFPLFFBQUssNEJBQUwsQ0FBbUMsUUFBSyxNQUFMLENBQWE7QUFDbkQsd0JBQVEsUUFBSyxRQUFMLENBQWUsTUFBZjtBQUQyQyxhQUFiLEVBRXZDLE1BRnVDLENBQW5DLENBQVA7QUF4SEk7QUE2SEYsbUJBN0hFLHVCQTZIVyxNQTdIWCxFQTZIbUIsSUE3SG5CLEVBNkh5QixJQTdIekIsRUE2SCtCLE1BN0gvQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBNkh1QyxxQkE3SHZDLGdGQTZIK0MsU0E3SC9DO0FBNkgwRCxzQkE3SDFELGdGQTZIbUUsRUE3SG5FO0FBOEhBLHNCQTlIQSxHQThIUywwQkE5SFQ7QUErSEEscUJBL0hBLEdBK0hRO0FBQ1IsOEJBQVUsTUFERjtBQUVSLDRCQUFRLFFBQUssUUFBTCxDQUFlLE1BQWY7QUFGQSxpQkEvSFI7O0FBbUlKLG9CQUFJLFFBQVEsUUFBWixFQUFzQjtBQUNsQiw4QkFBVSxnQkFBZ0IsUUFBSyxVQUFMLENBQWlCLElBQWpCLENBQTFCO0FBQ0gsaUJBRkQsTUFFTztBQUNILDBCQUFNLE9BQU4sSUFBaUIsS0FBakI7QUFDQSwwQkFBTSxPQUFOLElBQWlCLFNBQVMsS0FBMUI7QUFDQSwwQkFBTSxPQUFOLElBQWtCLFFBQVEsS0FBMUI7QUFDSDtBQXpJRyx1QkEwSWUsUUFBSyxNQUFMLEVBQWMsUUFBSyxNQUFMLENBQWEsS0FBYixFQUFvQixNQUFwQixDQUFkLENBMUlmO0FBQUE7QUEwSUEsc0JBMUlBOztBQTJJSix1QkFBTztBQUNILDRCQUFRLE1BREw7QUFFSCwwQkFBTSxPQUFPLFVBQVAsRUFBbUIsSUFBbkI7QUFGSCxpQkFBUDtBQTNJSTtBQUFBO0FBaUpGLG1CQWpKRSx1QkFpSlcsRUFqSlg7QUFBQTs7QUFrSkosbUJBQU8sUUFBSywyQkFBTCxDQUFrQyxFQUFFLE1BQU0sRUFBUixFQUFsQyxDQUFQO0FBbEpJO0FBcUpSLGVBckpRLG1CQXFKQyxJQXJKRCxFQXFKMkY7QUFBQSxnQkFBcEYsR0FBb0YsdUVBQTlFLFFBQThFO0FBQUEsZ0JBQXBFLE1BQW9FLHVFQUEzRCxLQUEyRDtBQUFBLGdCQUFwRCxNQUFvRCx1RUFBM0MsRUFBMkM7QUFBQSxnQkFBdkMsT0FBdUMsdUVBQTdCLFNBQTZCO0FBQUEsZ0JBQWxCLElBQWtCLHVFQUFYLFNBQVc7O0FBQy9GLGdCQUFJLE1BQU0sS0FBSyxJQUFMLENBQVUsS0FBVixJQUFtQixHQUFuQixHQUF5QixLQUFLLGFBQUwsQ0FBb0IsSUFBcEIsRUFBMEIsTUFBMUIsQ0FBbkM7QUFDQSxnQkFBSSxPQUFPLFFBQVgsRUFBcUI7QUFDakIsdUJBQU8sT0FBUDtBQUNILGFBRkQsTUFFTztBQUNILG9CQUFJLFFBQVEsS0FBSyxLQUFMLEVBQVo7QUFDQSxvQkFBSSxRQUFRLEtBQUssTUFBTCxDQUFhLEVBQUUsU0FBUyxLQUFYLEVBQWIsRUFBaUMsTUFBakMsQ0FBWjtBQUNBLHVCQUFPLEtBQUssU0FBTCxDQUFnQixLQUFoQixDQUFQO0FBQ0EsMEJBQVU7QUFDTixvQ0FBZ0IsbUNBRFY7QUFFTixzQ0FBa0IsS0FBSyxNQUZqQjtBQUdOLDJCQUFPLEtBQUssTUFITjtBQUlOLDRCQUFRLEtBQUssSUFBTCxDQUFXLEtBQUssTUFBTCxDQUFhLElBQWIsQ0FBWCxFQUErQixLQUFLLE1BQUwsQ0FBYSxLQUFLLE1BQWxCLENBQS9CLEVBQTBELFFBQTFELEVBQW9FLFFBQXBFO0FBSkYsaUJBQVY7QUFNSDtBQUNELG1CQUFPLEtBQUssS0FBTCxDQUFZLEdBQVosRUFBaUIsTUFBakIsRUFBeUIsT0FBekIsRUFBa0MsSUFBbEMsQ0FBUDtBQUNIO0FBcktPLEtBQVo7O0FBd0tBOztBQUVBLFFBQUksU0FBUzs7QUFFVCxjQUFNLFFBRkc7QUFHVCxnQkFBUSxRQUhDO0FBSVQscUJBQWEsQ0FBRSxJQUFGLEVBQVEsSUFBUixDQUpKLEVBSW9CO0FBQzdCLHFCQUFhLElBTEo7QUFNVCxnQkFBUTtBQUNKLG9CQUFRLHFHQURKO0FBRUosbUJBQU8sb0JBRkg7QUFHSixtQkFBTztBQUNILDBCQUFVLCtCQURQO0FBRUgsMkJBQVc7QUFGUixhQUhIO0FBT0osbUJBQU8sQ0FDSCwrQkFERyxFQUVILG9DQUZHLEVBR0gsa0NBSEc7QUFQSCxTQU5DO0FBbUJULGVBQU87QUFDSCxzQkFBVTtBQUNOLHVCQUFPLENBQ0gsVUFERyxFQUVILGFBRkcsRUFHSCxnQkFIRyxFQUlILGFBSkcsRUFLSCxhQUxHO0FBREQsYUFEUDtBQVVILHVCQUFXO0FBQ1Asd0JBQVEsQ0FDSixNQURJLEVBRUosT0FGSSxFQUdKLFFBSEksRUFJSixXQUpJLEVBS0osUUFMSSxFQU1KLFVBTkksRUFPSixVQVBJLEVBUUosU0FSSSxFQVNKLGNBVEk7QUFERDtBQVZSLFNBbkJFO0FBMkNULG1CQUFXO0FBQ1AsdUJBQVcsRUFBRSxNQUFNLFFBQVIsRUFBa0IsVUFBVSxTQUE1QixFQUF1QyxRQUFRLEtBQS9DLEVBQXNELFNBQVMsS0FBL0QsRUFESjtBQUVQLHVCQUFXLEVBQUUsTUFBTSxRQUFSLEVBQWtCLFVBQVUsU0FBNUIsRUFBdUMsUUFBUSxLQUEvQyxFQUFzRCxTQUFTLEtBQS9ELEVBRko7QUFHUCx1QkFBVyxFQUFFLE1BQU0sUUFBUixFQUFrQixVQUFVLFNBQTVCLEVBQXVDLFFBQVEsS0FBL0MsRUFBc0QsU0FBUyxLQUEvRCxFQUhKO0FBSVAsdUJBQVcsRUFBRSxNQUFNLFFBQVIsRUFBa0IsVUFBVSxTQUE1QixFQUF1QyxRQUFRLEtBQS9DLEVBQXNELFNBQVMsS0FBL0QsRUFKSjtBQUtQLHVCQUFXLEVBQUUsTUFBTSxRQUFSLEVBQWtCLFVBQVUsU0FBNUIsRUFBdUMsUUFBUSxLQUEvQyxFQUFzRCxTQUFTLEtBQS9ELEVBTEo7QUFNUCx1QkFBVyxFQUFFLE1BQU0sUUFBUixFQUFrQixVQUFVLFNBQTVCLEVBQXVDLFFBQVEsS0FBL0MsRUFBc0QsU0FBUyxLQUEvRCxFQU5KO0FBT1AsdUJBQVcsRUFBRSxNQUFNLFFBQVIsRUFBa0IsVUFBVSxTQUE1QixFQUF1QyxRQUFRLEtBQS9DLEVBQXNELFNBQVMsS0FBL0QsRUFQSjtBQVFQLHVCQUFXLEVBQUUsTUFBTSxRQUFSLEVBQWtCLFVBQVUsU0FBNUIsRUFBdUMsUUFBUSxLQUEvQyxFQUFzRCxTQUFTLEtBQS9ELEVBUko7QUFTUCx1QkFBVyxFQUFFLE1BQU0sUUFBUixFQUFrQixVQUFVLFNBQTVCLEVBQXVDLFFBQVEsS0FBL0MsRUFBc0QsU0FBUyxLQUEvRCxFQVRKO0FBVVAsdUJBQVcsRUFBRSxNQUFNLFFBQVIsRUFBa0IsVUFBVSxTQUE1QixFQUF1QyxRQUFRLEtBQS9DLEVBQXNELFNBQVMsS0FBL0QsRUFWSjtBQVdQLHVCQUFXLEVBQUUsTUFBTSxRQUFSLEVBQWtCLFVBQVUsU0FBNUIsRUFBdUMsUUFBUSxLQUEvQyxFQUFzRCxTQUFTLEtBQS9ELEVBWEo7QUFZUCx1QkFBVyxFQUFFLE1BQU0sUUFBUixFQUFrQixVQUFVLFNBQTVCLEVBQXVDLFFBQVEsS0FBL0MsRUFBc0QsU0FBUyxLQUEvRCxFQVpKO0FBYVAsdUJBQVcsRUFBRSxNQUFNLFFBQVIsRUFBa0IsVUFBVSxTQUE1QixFQUF1QyxRQUFRLEtBQS9DLEVBQXNELFNBQVMsS0FBL0QsRUFiSjtBQWNQLHVCQUFXLEVBQUUsTUFBTSxRQUFSLEVBQWtCLFVBQVUsU0FBNUIsRUFBdUMsUUFBUSxLQUEvQyxFQUFzRCxTQUFTLEtBQS9ELEVBZEo7QUFlUCx1QkFBVyxFQUFFLE1BQU0sUUFBUixFQUFrQixVQUFVLFNBQTVCLEVBQXVDLFFBQVEsS0FBL0MsRUFBc0QsU0FBUyxLQUEvRDtBQWZKLFNBM0NGOztBQTZESCxvQkE3REc7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQThEZ0IsUUFBSyxlQUFMLEVBOURoQjtBQUFBO0FBOERELHdCQTlEQztBQStERCx1QkEvREMsR0ErRFMsU0FBUyxVQUFULENBL0RUO0FBZ0VELHNCQWhFQyxHQWdFUSxFQUFFLFFBQVEsT0FBVixFQWhFUjs7QUFpRUwscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxRQUFLLFVBQUwsQ0FBZ0IsTUFBcEMsRUFBNEMsR0FBNUMsRUFBaUQ7QUFDekMsNEJBRHlDLEdBQzlCLFFBQUssVUFBTCxDQUFnQixDQUFoQixDQUQ4QjtBQUV6QywyQkFGeUMsR0FFL0I7QUFDVixnQ0FBUSxTQURFO0FBRVYsZ0NBQVEsU0FGRTtBQUdWLGlDQUFTO0FBSEMscUJBRitCOztBQU83Qyx3QkFBSSxZQUFZLE9BQWhCLEVBQXlCO0FBQ3JCLGdDQUFRLE1BQVIsSUFBa0IsV0FBWSxRQUFRLFFBQVIsRUFBa0IsV0FBbEIsQ0FBWixDQUFsQjtBQUNBLGdDQUFRLE1BQVIsSUFBa0IsV0FBWSxRQUFRLFFBQVIsRUFBa0IsUUFBbEIsQ0FBWixDQUFsQjtBQUNBLGdDQUFRLE9BQVIsSUFBbUIsUUFBSyxHQUFMLENBQVUsUUFBUSxNQUFSLENBQVYsRUFBMkIsUUFBUSxNQUFSLENBQTNCLENBQW5CO0FBQ0g7QUFDRCwyQkFBTyxRQUFQLElBQW1CLE9BQW5CO0FBQ0g7QUFDRCx1QkFBTyxNQUFQO0FBL0VLO0FBQUE7QUFrRkgsc0JBbEZHLDBCQWtGYSxNQWxGYjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQWtGcUIsc0JBbEZyQixnRkFrRjhCLEVBbEY5QjtBQUFBLHVCQW1GaUIsUUFBSyxvQkFBTCxDQUEyQixRQUFLLE1BQUwsQ0FBYTtBQUMxRCwwQkFBTSxRQUFLLFFBQUwsQ0FBZSxNQUFmO0FBRG9ELGlCQUFiLEVBRTlDLE1BRjhDLENBQTNCLENBbkZqQjtBQUFBO0FBbUZELHlCQW5GQztBQXNGRCx5QkF0RkMsR0FzRlcsUUFBSyxZQUFMLEVBdEZYO0FBdUZELHNCQXZGQyxHQXVGUTtBQUNULDRCQUFRLFVBQVUsTUFBVixDQURDO0FBRVQsNEJBQVEsVUFBVSxNQUFWLENBRkM7QUFHVCxpQ0FBYSxTQUhKO0FBSVQsZ0NBQVksUUFBSyxPQUFMLENBQWMsU0FBZDtBQUpILGlCQXZGUjs7QUE2RkwsdUJBQU8sTUFBUDtBQTdGSztBQUFBO0FBZ0dILG1CQWhHRyx1QkFnR1UsTUFoR1Y7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkFpR2MsUUFBSyxpQkFBTCxDQUF3QjtBQUN2QywwQkFBTSxRQUFLLFFBQUwsQ0FBZSxNQUFmO0FBRGlDLGlCQUF4QixDQWpHZDtBQUFBO0FBaUdELHNCQWpHQztBQW9HRCx5QkFwR0MsR0FvR1csUUFBSyxZQUFMLEVBcEdYOztBQXFHTCx1QkFBTztBQUNILGlDQUFhLFNBRFY7QUFFSCxnQ0FBWSxRQUFLLE9BQUwsQ0FBYyxTQUFkLENBRlQ7QUFHSCw0QkFBUSxXQUFZLE9BQU8sS0FBUCxDQUFaLENBSEw7QUFJSCwyQkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBSko7QUFLSCwyQkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBTEo7QUFNSCwyQkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBTko7QUFPSCw0QkFBUSxXQUFZLE9BQU8sTUFBUCxDQUFaLENBUEw7QUFRSCw0QkFBUSxTQVJMO0FBU0gsNkJBQVMsU0FUTjtBQVVILDZCQUFTLFNBVk47QUFXSCw0QkFBUSxXQUFZLE9BQU8sTUFBUCxDQUFaLENBWEw7QUFZSCw4QkFBVSxTQVpQO0FBYUgsa0NBQWMsU0FiWDtBQWNILCtCQUFXLFdBQVksT0FBTyxTQUFQLENBQVosQ0FkUjtBQWVILGtDQUFjLFNBZlg7QUFnQkgsbUNBQWUsV0FBWSxPQUFPLFFBQVAsQ0FBWixDQWhCWjtBQWlCSCw0QkFBUTtBQWpCTCxpQkFBUDtBQXJHSztBQUFBO0FBMEhILG1CQTFIRyx1QkEwSFUsTUExSFY7QUFBQTtBQUFBO0FBQUE7O0FBMEhrQixrQkExSGxCLGdGQTBIMkIsRUExSDNCOztBQTJITCxtQkFBTyxRQUFLLGlCQUFMLENBQXdCLFFBQUssTUFBTCxDQUFhO0FBQ3hDLHNCQUFNLFFBQUssUUFBTCxDQUFlLE1BQWY7QUFEa0MsYUFBYixFQUU1QixNQUY0QixDQUF4QixDQUFQO0FBM0hLO0FBaUlILG1CQWpJRyx1QkFpSVUsTUFqSVYsRUFpSWtCLElBaklsQixFQWlJd0IsSUFqSXhCLEVBaUk4QixNQWpJOUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQWlJc0MsaUJBakl0QyxnRkFpSThDLFNBakk5QztBQWlJeUQsa0JBakl6RCxnRkFpSWtFLEVBaklsRTtBQWtJRCxhQWxJQyxHQWtJRyxRQUFLLE1BQUwsQ0FBYSxNQUFiLENBbElIOztBQW1JTCxtQkFBTyxRQUFLLGdCQUFMLENBQXVCLFFBQUssTUFBTCxDQUFhO0FBQ3ZDLHdCQUFRLElBRCtCO0FBRXZDLDRCQUFZLEVBQUUsTUFBRixDQUYyQjtBQUd2QywwQkFBVSxNQUg2QjtBQUl2QyxvQ0FBb0IsRUFBRSxPQUFGLENBSm1CO0FBS3ZDLHdCQUFRO0FBTCtCLGFBQWIsRUFNM0IsTUFOMkIsQ0FBdkIsQ0FBUDtBQW5JSztBQTRJSCxtQkE1SUcsdUJBNElVLEVBNUlWO0FBQUE7O0FBNklMLG1CQUFPLFFBQUssaUJBQUwsQ0FBd0IsRUFBRSxNQUFNLEVBQVIsRUFBeEIsQ0FBUDtBQTdJSztBQWdKVCxlQWhKUyxtQkFnSkEsSUFoSkEsRUFnSjBGO0FBQUEsZ0JBQXBGLEdBQW9GLHVFQUE5RSxRQUE4RTtBQUFBLGdCQUFwRSxNQUFvRSx1RUFBM0QsS0FBMkQ7QUFBQSxnQkFBcEQsTUFBb0QsdUVBQTNDLEVBQTJDO0FBQUEsZ0JBQXZDLE9BQXVDLHVFQUE3QixTQUE2QjtBQUFBLGdCQUFsQixJQUFrQix1RUFBWCxTQUFXOztBQUMvRixnQkFBSSxNQUFNLEtBQUssSUFBTCxDQUFVLEtBQVYsRUFBaUIsR0FBakIsQ0FBVjtBQUNBLGdCQUFJLE9BQU8sUUFBWCxFQUFxQjtBQUNqQix1QkFBTyxNQUFNLEtBQUssYUFBTCxDQUFvQixJQUFwQixFQUEwQixNQUExQixDQUFOLEdBQTBDLE9BQWpEO0FBQ0gsYUFGRCxNQUVPO0FBQ0gsdUJBQU8sS0FBSyxTQUFMLENBQWdCLEtBQUssTUFBTCxDQUFhO0FBQ2hDLDhCQUFVLElBRHNCO0FBRWhDLDhCQUFVLEtBQUssS0FBTDtBQUZzQixpQkFBYixFQUdwQixNQUhvQixDQUFoQixDQUFQO0FBSUEsMEJBQVU7QUFDTixvQ0FBZ0IsbUNBRFY7QUFFTixzQ0FBa0IsS0FBSyxNQUZqQjtBQUdOLCtCQUFXLEtBQUssTUFIVjtBQUlOLGdDQUFZLEtBQUssSUFBTCxDQUFXLEtBQUssTUFBTCxDQUFhLElBQWIsQ0FBWCxFQUErQixLQUFLLE1BQUwsQ0FBYSxLQUFLLE1BQWxCLENBQS9CLEVBQTBELFFBQTFEO0FBSk4saUJBQVY7QUFNSDtBQUNELG1CQUFPLEtBQUssS0FBTCxDQUFZLEdBQVosRUFBaUIsTUFBakIsRUFBeUIsT0FBekIsRUFBa0MsSUFBbEMsQ0FBUDtBQUNIO0FBaktRLEtBQWI7O0FBb0tBOztBQUVBLFFBQUksVUFBVTs7QUFFVixjQUFNLFNBRkk7QUFHVixnQkFBUSxTQUhFO0FBSVYscUJBQWEsQ0FBRSxJQUFGLEVBQVEsSUFBUixFQUFjLElBQWQsRUFBb0IsSUFBcEIsRUFBMEIsSUFBMUIsQ0FKSDtBQUtWLHFCQUFhLElBTEg7QUFNVixtQkFBVyxJQU5EO0FBT1YsZ0JBQVE7QUFDSixvQkFBUSxxR0FESjtBQUVKLG1CQUFPLHlCQUZIO0FBR0osbUJBQU8scUJBSEg7QUFJSixtQkFBTztBQUpILFNBUEU7QUFhVixlQUFPO0FBQ0gsc0JBQVU7QUFDTix1QkFBTyxDQUNILFFBREcsRUFFSCxRQUZHLEVBR0gsT0FIRztBQURELGFBRFA7QUFRSCx1QkFBVztBQUNQLHdCQUFRLENBQ0osUUFESSxFQUVKLE1BRkksRUFHSixRQUhJLEVBSUosT0FKSSxFQUtKLGNBTEksRUFNSixPQU5JO0FBREQ7QUFSUixTQWJHO0FBZ0NWLG1CQUFXO0FBQ1AsdUJBQVcsRUFBRSxNQUFNLFNBQVIsRUFBbUIsVUFBVSxTQUE3QixFQUF3QyxRQUFRLEtBQWhELEVBQXVELFNBQVMsS0FBaEUsRUFESjtBQUVQLHVCQUFXLEVBQUUsTUFBTSxTQUFSLEVBQW1CLFVBQVUsU0FBN0IsRUFBd0MsUUFBUSxLQUFoRCxFQUF1RCxTQUFTLEtBQWhFLEVBRko7QUFHUCx1QkFBVyxFQUFFLE1BQU0sU0FBUixFQUFtQixVQUFVLFNBQTdCLEVBQXdDLFFBQVEsS0FBaEQsRUFBdUQsU0FBUyxLQUFoRSxFQUhKO0FBSVAsdUJBQVcsRUFBRSxNQUFNLFNBQVIsRUFBbUIsVUFBVSxTQUE3QixFQUF3QyxRQUFRLEtBQWhELEVBQXVELFNBQVMsS0FBaEUsRUFKSjtBQUtQLHVCQUFXLEVBQUUsTUFBTSxTQUFSLEVBQW1CLFVBQVUsU0FBN0IsRUFBd0MsUUFBUSxLQUFoRCxFQUF1RCxTQUFTLEtBQWhFO0FBTEosU0FoQ0Q7O0FBd0NKLG9CQXhDSTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkF5Q2UsUUFBSyxlQUFMLEVBekNmO0FBQUE7QUF5Q0Ysd0JBekNFO0FBMENGLHVCQTFDRSxHQTBDUSxTQUFTLFFBQVQsRUFBbUIsUUFBbkIsQ0ExQ1I7QUEyQ0Ysc0JBM0NFLEdBMkNPLEVBQUUsUUFBUSxPQUFWLEVBM0NQOztBQTRDTixxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFFBQUssVUFBTCxDQUFnQixNQUFwQyxFQUE0QyxHQUE1QyxFQUFpRDtBQUN6Qyw0QkFEeUMsR0FDOUIsUUFBSyxVQUFMLENBQWdCLENBQWhCLENBRDhCO0FBRXpDLDZCQUZ5QyxHQUU3QixTQUFTLFdBQVQsRUFGNkI7QUFHekMsMkJBSHlDLEdBRy9CO0FBQ1YsZ0NBQVEsU0FERTtBQUVWLGdDQUFRLFNBRkU7QUFHVixpQ0FBUztBQUhDLHFCQUgrQjs7QUFRN0Msd0JBQUksYUFBYSxPQUFqQixFQUEwQjtBQUN0QixnQ0FBUSxNQUFSLElBQWtCLFdBQVksUUFBUSxTQUFSLEVBQW1CLE9BQW5CLENBQVosQ0FBbEI7QUFDQSxnQ0FBUSxNQUFSLElBQWtCLFdBQVksUUFBUSxTQUFSLEVBQW1CLE1BQW5CLENBQVosQ0FBbEI7QUFDQSxnQ0FBUSxPQUFSLElBQW1CLFFBQUssR0FBTCxDQUFVLFFBQVEsTUFBUixDQUFWLEVBQTJCLFFBQVEsTUFBUixDQUEzQixDQUFuQjtBQUNIO0FBQ0QsMkJBQU8sUUFBUCxJQUFtQixPQUFuQjtBQUNIO0FBQ0QsdUJBQU8sTUFBUDtBQTNETTtBQUFBO0FBOERKLHNCQTlESSwwQkE4RFksTUE5RFo7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUE4RG9CLHNCQTlEcEIsZ0ZBOEQ2QixFQTlEN0I7QUFBQSx1QkErRGUsUUFBSyxjQUFMLENBQXFCLFFBQUssTUFBTCxDQUFhO0FBQ25ELDhCQUFVLFFBQUssUUFBTCxDQUFlLE1BQWY7QUFEeUMsaUJBQWIsRUFFdkMsTUFGdUMsQ0FBckIsQ0EvRGY7QUFBQTtBQStERix3QkEvREU7QUFrRUYseUJBbEVFLEdBa0VVLFNBQVMsUUFBVCxDQWxFVjtBQW1FRix5QkFuRUUsR0FtRVUsUUFBSyxZQUFMLEVBbkVWO0FBb0VGLHNCQXBFRSxHQW9FTztBQUNULDRCQUFRLEVBREM7QUFFVCw0QkFBUSxFQUZDO0FBR1QsaUNBQWEsU0FISjtBQUlULGdDQUFZLFFBQUssT0FBTCxDQUFjLFNBQWQ7QUFKSCxpQkFwRVA7QUEwRUYscUJBMUVFLEdBMEVNLENBQUUsTUFBRixFQUFVLE1BQVYsQ0ExRU47O0FBMkVOLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksTUFBTSxNQUExQixFQUFrQyxHQUFsQyxFQUF1QztBQUMvQix3QkFEK0IsR0FDeEIsTUFBTSxDQUFOLENBRHdCO0FBRS9CLDBCQUYrQixHQUV0QixVQUFVLElBQVYsQ0FGc0I7O0FBR25DLHlCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksT0FBTyxNQUEzQixFQUFtQyxHQUFuQyxFQUF3QztBQUNoQyw2QkFEZ0MsR0FDeEIsT0FBTyxDQUFQLENBRHdCO0FBRWhDLDZCQUZnQyxHQUV4QixXQUFZLE1BQU0sQ0FBTixDQUFaLENBRndCO0FBR2hDLDhCQUhnQyxHQUd2QixXQUFZLE1BQU0sQ0FBTixDQUFaLENBSHVCOztBQUlwQywrQkFBTyxJQUFQLEVBQWEsSUFBYixDQUFtQixDQUFFLEtBQUYsRUFBUyxNQUFULENBQW5CO0FBQ0g7QUFDSjtBQUNELHVCQUFPLE1BQVA7QUFyRk07QUFBQTtBQXdGSixtQkF4RkksdUJBd0ZTLE1BeEZUO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkF5RmUsUUFBSyxlQUFMLENBQXNCO0FBQ3ZDLDhCQUFVLFFBQUssUUFBTCxDQUFlLE1BQWY7QUFENkIsaUJBQXRCLENBekZmO0FBQUE7QUF5RkYsd0JBekZFO0FBNEZGLHNCQTVGRSxHQTRGTyxTQUFTLFFBQVQsQ0E1RlA7QUE2RkYseUJBN0ZFLEdBNkZVLFFBQUssWUFBTCxFQTdGVjs7QUE4Rk4sdUJBQU87QUFDSCxpQ0FBYSxTQURWO0FBRUgsZ0NBQVksUUFBSyxPQUFMLENBQWMsU0FBZCxDQUZUO0FBR0gsNEJBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQUhMO0FBSUgsMkJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQUpKO0FBS0gsMkJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQUxKO0FBTUgsMkJBQU8sV0FBWSxPQUFPLE1BQVAsQ0FBWixDQU5KO0FBT0gsNEJBQVEsU0FQTDtBQVFILDRCQUFRLFNBUkw7QUFTSCw2QkFBUyxTQVROO0FBVUgsNkJBQVMsU0FWTjtBQVdILDRCQUFRLFdBQVksT0FBTyxNQUFQLENBQVosQ0FYTDtBQVlILDhCQUFVLFNBWlA7QUFhSCxrQ0FBYyxTQWJYO0FBY0gsK0JBQVcsU0FkUjtBQWVILGtDQUFjLFNBZlg7QUFnQkgsbUNBQWUsV0FBWSxPQUFPLEtBQVAsQ0FBWixDQWhCWjtBQWlCSCw0QkFBUTtBQWpCTCxpQkFBUDtBQTlGTTtBQUFBO0FBbUhKLG1CQW5ISSx1QkFtSFMsTUFuSFQ7QUFBQTtBQUFBO0FBQUE7O0FBbUhpQixrQkFuSGpCLGdGQW1IMEIsRUFuSDFCOztBQW9ITixtQkFBTyxRQUFLLGVBQUwsQ0FBc0IsUUFBSyxNQUFMLENBQWE7QUFDdEMsMEJBQVUsUUFBSyxRQUFMLENBQWUsTUFBZjtBQUQ0QixhQUFiLEVBRTFCLE1BRjBCLENBQXRCLENBQVA7QUFwSE07QUF5SEosbUJBekhJLHVCQXlIUyxNQXpIVCxFQXlIaUIsSUF6SGpCLEVBeUh1QixJQXpIdkIsRUF5SDZCLE1Bekg3QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQXlIcUMscUJBekhyQyxnRkF5SDZDLFNBekg3QztBQXlId0Qsc0JBekh4RCxnRkF5SGlFLEVBekhqRTtBQTBIRixxQkExSEUsR0EwSE07QUFDUiw4QkFBVSxRQUFLLFFBQUwsQ0FBZSxNQUFmLENBREY7QUFFUiwwQkFBTSxJQUZFO0FBR1IsOEJBQVU7QUFIRixpQkExSE47O0FBK0hOLG9CQUFJLFFBQVEsUUFBWixFQUFzQjtBQUNsQiwwQkFBTSxZQUFOLElBQXNCLENBQXRCO0FBQ0EsMEJBQU0sT0FBTixJQUFpQixLQUFqQjtBQUNILGlCQUhELE1BR087QUFDSCwwQkFBTSxZQUFOLElBQXNCLENBQXRCO0FBQ0g7QUFwSUssdUJBcUllLFFBQUssZ0JBQUwsQ0FBdUIsUUFBSyxNQUFMLENBQWEsS0FBYixFQUFvQixNQUFwQixDQUF2QixDQXJJZjtBQUFBO0FBcUlGLHdCQXJJRTs7QUFzSU4sdUJBQU87QUFDSCw0QkFBUSxRQURMO0FBRUgsMEJBQU0sU0FBUyxRQUFULEVBQW1CLElBQW5CLEVBQXlCLFFBQXpCO0FBRkgsaUJBQVA7QUF0SU07QUFBQTtBQTRJSixtQkE1SUksdUJBNElTLEVBNUlUO0FBQUE7O0FBNklOLG1CQUFPLFFBQUssaUJBQUwsQ0FBd0IsRUFBRSxNQUFNLEVBQVIsRUFBeEIsQ0FBUDtBQTdJTTtBQWdKSixlQWhKSSxtQkFnSkssSUFoSkw7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBZ0pXLG1CQWhKWCxnRkFnSmlCLFFBaEpqQjtBQWdKMkIsc0JBaEozQixnRkFnSm9DLEtBaEpwQztBQWdKMkMsc0JBaEozQyxnRkFnSm9ELEVBaEpwRDtBQWdKd0QsdUJBaEp4RCxnRkFnSmtFLFNBaEpsRTtBQWdKNkUsb0JBaEo3RSxnRkFnSm9GLFNBaEpwRjtBQWlKRixtQkFqSkUsR0FpSkksUUFBSyxJQUFMLENBQVUsS0FBVixJQUFtQixHQUFuQixHQUF5QixRQUFLLE9BQTlCLEdBQXdDLEdBQXhDLEdBQThDLElBakpsRDs7QUFrSk4sb0JBQUksT0FBTyxRQUFYLEVBQXFCO0FBQ2pCLHdCQUFJLE9BQU8sSUFBUCxDQUFhLE1BQWIsRUFBcUIsTUFBekI7QUFDSSwrQkFBTyxNQUFNLFFBQUssU0FBTCxDQUFnQixNQUFoQixDQUFiO0FBREo7QUFFSCxpQkFIRCxNQUdPO0FBQ0MseUJBREQsR0FDUyxRQUFLLEtBQUwsRUFEVDs7QUFFSCwyQkFBTyxRQUFLLFNBQUwsQ0FBZ0IsUUFBSyxNQUFMLENBQWE7QUFDaEMsaUNBQVM7QUFEdUIscUJBQWIsRUFFcEIsTUFGb0IsQ0FBaEIsQ0FBUDtBQUdBLDhCQUFVO0FBQ04sd0NBQWdCLG1DQURWO0FBRU4sMENBQWtCLEtBQUssTUFGakI7QUFHTiwrQkFBTyxRQUFLLE1BSE47QUFJTixnQ0FBUSxRQUFLLElBQUwsQ0FBVyxRQUFLLE1BQUwsQ0FBYSxJQUFiLENBQVgsRUFBK0IsUUFBSyxNQUFwQyxFQUE0QyxRQUE1QztBQUpGLHFCQUFWO0FBTUg7QUFoS0ssdUJBaUtlLFFBQUssS0FBTCxDQUFZLEdBQVosRUFBaUIsTUFBakIsRUFBeUIsT0FBekIsRUFBa0MsSUFBbEMsQ0FqS2Y7QUFBQTtBQWlLRix3QkFqS0U7QUFBQSx5QkFrS0YsWUFBWSxRQWxLVjs7QUFtS0YsOEJBQUksU0FBUyxRQUFULEtBQXNCLEdBQTFCO0FBQ0ksMkJBQU8sUUFBUDtBQURKO0FBRUosMEJBQU0sSUFBSSxhQUFKLENBQW1CLFFBQUssRUFBTCxHQUFVLEdBQVYsR0FBZ0IsUUFBSyxJQUFMLENBQVcsUUFBWCxDQUFuQyxDQUFOO0FBRkk7QUFuS0U7QUFBQTtBQUFBLEtBQWQ7O0FBeUtBOztBQUVBLFFBQUksY0FBYzs7QUFFZCxjQUFNLGFBRlE7QUFHZCxnQkFBUSxlQUhNO0FBSWQscUJBQWEsSUFKQyxFQUlLO0FBQ25CLGdCQUFRO0FBQ0osb0JBQVEscUdBREo7QUFFSixtQkFBTztBQUNILDBCQUFVLCtCQURQO0FBRUgsMkJBQVc7QUFGUixhQUZIO0FBTUosbUJBQU8sMkJBTkg7QUFPSixtQkFBTyxDQUNILHVFQURHLEVBRUgscUNBRkc7QUFQSCxTQUxNO0FBaUJkLGVBQU87QUFDSCxzQkFBVTtBQUNOLHVCQUFPLENBQ0gsZUFERyxFQUVILGVBRkcsRUFHSCxjQUhHO0FBREQsYUFEUDtBQVFILHVCQUFXO0FBQ1Asd0JBQVEsQ0FDSixTQURJLEVBRUosY0FGSSxFQUdKLE9BSEksRUFJSixjQUpJLEVBS0osWUFMSSxFQU1KLGFBTkk7QUFERDtBQVJSLFNBakJPO0FBb0NkLG1CQUFXO0FBQ1AsdUJBQVksRUFBRSxNQUFNLFNBQVIsRUFBbUIsVUFBVSxTQUE3QixFQUF3QyxRQUFRLEtBQWhELEVBQXVELFNBQVMsS0FBaEUsRUFBdUUsVUFBVSxLQUFqRixFQUF3RixXQUFXLEtBQW5HLEVBREw7QUFFUCx1QkFBWSxFQUFFLE1BQU0sU0FBUixFQUFtQixVQUFVLFNBQTdCLEVBQXdDLFFBQVEsS0FBaEQsRUFBdUQsU0FBUyxLQUFoRSxFQUF1RSxVQUFVLEtBQWpGLEVBQXdGLFdBQVcsS0FBbkcsRUFGTDtBQUdQLHdCQUFZLEVBQUUsTUFBTSxTQUFSLEVBQW1CLFVBQVUsVUFBN0IsRUFBeUMsUUFBUSxNQUFqRCxFQUF5RCxTQUFTLEtBQWxFLEVBQXlFLFVBQVUsS0FBbkYsRUFBMEYsV0FBVyxLQUFyRyxFQUhMO0FBSVAsd0JBQVksRUFBRSxNQUFNLFVBQVIsRUFBb0IsVUFBVSxVQUE5QixFQUEwQyxRQUFRLE1BQWxELEVBQTBELFNBQVMsS0FBbkUsRUFBMEUsVUFBVSxNQUFwRixFQUE0RixXQUFXLEtBQXZHLEVBSkw7QUFLUCx1QkFBWSxFQUFFLE1BQU0sU0FBUixFQUFtQixVQUFVLFNBQTdCLEVBQXdDLFFBQVEsS0FBaEQsRUFBdUQsU0FBUyxLQUFoRSxFQUF1RSxVQUFVLEtBQWpGLEVBQXdGLFdBQVcsS0FBbkcsRUFMTDtBQU1QLHVCQUFZLEVBQUUsTUFBTSxTQUFSLEVBQW1CLFVBQVUsU0FBN0IsRUFBd0MsUUFBUSxLQUFoRCxFQUF1RCxTQUFTLEtBQWhFLEVBQXVFLFVBQVUsS0FBakYsRUFBd0YsV0FBVyxLQUFuRyxFQU5MO0FBT1AsdUJBQVksRUFBRSxNQUFNLFNBQVIsRUFBbUIsVUFBVSxTQUE3QixFQUF3QyxRQUFRLEtBQWhELEVBQXVELFNBQVMsS0FBaEUsRUFBdUUsVUFBVSxLQUFqRixFQUF3RixXQUFXLEtBQW5HLEVBUEw7QUFRUCx1QkFBWSxFQUFFLE1BQU0sU0FBUixFQUFtQixVQUFVLFNBQTdCLEVBQXdDLFFBQVEsS0FBaEQsRUFBdUQsU0FBUyxLQUFoRSxFQUF1RSxVQUFVLEtBQWpGLEVBQXdGLFdBQVcsS0FBbkcsRUFSTDtBQVNQLHVCQUFZLEVBQUUsTUFBTSxTQUFSLEVBQW1CLFVBQVUsU0FBN0IsRUFBd0MsUUFBUSxLQUFoRCxFQUF1RCxTQUFTLEtBQWhFLEVBQXVFLFVBQVUsS0FBakYsRUFBd0YsV0FBVyxLQUFuRyxFQVRMO0FBVVAsdUJBQVksRUFBRSxNQUFNLFNBQVIsRUFBbUIsVUFBVSxTQUE3QixFQUF3QyxRQUFRLEtBQWhELEVBQXVELFNBQVMsS0FBaEUsRUFBdUUsVUFBVSxLQUFqRixFQUF3RixXQUFXLEtBQW5HO0FBVkwsU0FwQ0c7O0FBaURSLG9CQWpEUTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQWtEVyxRQUFLLGtCQUFMLEVBbERYO0FBQUE7QUFrRE4sd0JBbERNO0FBbUROLHVCQW5ETSxHQW1ESSxTQUFTLFFBQVQsRUFBbUIsU0FBbkIsQ0FuREo7QUFvRE4sc0JBcERNLEdBb0RHLFNBQVMsUUFBVCxFQUFtQixjQUFuQixDQXBESDtBQXFETixzQkFyRE0sR0FxREcsRUFBRSxRQUFRLE9BQVYsRUFyREg7O0FBc0RWLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksUUFBSyxVQUFMLENBQWdCLE1BQXBDLEVBQTRDLEdBQTVDLEVBQWlEO0FBQ3pDLDRCQUR5QyxHQUM5QixRQUFLLFVBQUwsQ0FBZ0IsQ0FBaEIsQ0FEOEI7QUFFekMsNkJBRnlDLEdBRTdCLFNBQVMsV0FBVCxFQUY2QjtBQUd6QywyQkFIeUMsR0FHL0I7QUFDVixnQ0FBUSxTQURFO0FBRVYsZ0NBQVEsU0FGRTtBQUdWLGlDQUFTO0FBSEMscUJBSCtCOztBQVE3Qyx3QkFBSSxhQUFhLE9BQWpCLEVBQTBCO0FBQ3RCLGdDQUFRLE1BQVIsSUFBa0IsV0FBWSxRQUFRLFNBQVIsQ0FBWixDQUFsQjtBQUNIO0FBQ0Qsd0JBQUksYUFBYSxNQUFqQixFQUF5QjtBQUNyQixnQ0FBUSxNQUFSLElBQWtCLFdBQVksT0FBTyxTQUFQLENBQVosQ0FBbEI7QUFDSDtBQUNELDRCQUFRLE9BQVIsSUFBbUIsUUFBSyxHQUFMLENBQVUsUUFBUSxNQUFSLENBQVYsRUFBMkIsUUFBUSxNQUFSLENBQTNCLENBQW5CO0FBQ0EsMkJBQU8sUUFBUCxJQUFtQixPQUFuQjtBQUNIO0FBQ0QsdUJBQU8sTUFBUDtBQXZFVTtBQUFBO0FBMEVSLHNCQTFFUSwwQkEwRVEsTUExRVI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQTBFZ0Isc0JBMUVoQixnRkEwRXlCLEVBMUV6QjtBQUFBLHVCQTJFWSxRQUFLLGtCQUFMLENBQXlCLFFBQUssTUFBTCxDQUFhO0FBQ3hELDRCQUFRLFFBQUssUUFBTCxDQUFlLE1BQWY7QUFEZ0QsaUJBQWIsRUFFNUMsTUFGNEMsQ0FBekIsQ0EzRVo7QUFBQTtBQTJFTix5QkEzRU07QUE4RU4seUJBOUVNLEdBOEVNLFFBQUssWUFBTCxFQTlFTjtBQStFTixzQkEvRU0sR0ErRUc7QUFDVCw0QkFBUSxFQURDO0FBRVQsNEJBQVEsRUFGQztBQUdULGlDQUFhLFNBSEo7QUFJVCxnQ0FBWSxRQUFLLE9BQUwsQ0FBYyxTQUFkO0FBSkgsaUJBL0VIO0FBcUZOLHFCQXJGTSxHQXFGRSxFQUFFLFFBQVEsS0FBVixFQUFpQixRQUFRLE1BQXpCLEVBckZGO0FBc0ZOLG9CQXRGTSxHQXNGQyxPQUFPLElBQVAsQ0FBYSxLQUFiLENBdEZEOztBQXVGVixxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLEtBQUssTUFBekIsRUFBaUMsR0FBakMsRUFBc0M7QUFDOUIsdUJBRDhCLEdBQ3hCLEtBQUssQ0FBTCxDQUR3QjtBQUU5Qix3QkFGOEIsR0FFdkIsTUFBTSxHQUFOLENBRnVCO0FBRzlCLDBCQUg4QixHQUdyQixVQUFVLElBQVYsQ0FIcUI7O0FBSWxDLHlCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksT0FBTyxNQUEzQixFQUFtQyxHQUFuQyxFQUF3QztBQUNoQyw2QkFEZ0MsR0FDeEIsT0FBTyxDQUFQLENBRHdCO0FBRWhDLDZCQUZnQyxHQUV4QixXQUFZLE1BQU0sQ0FBTixDQUFaLENBRndCO0FBR2hDLDhCQUhnQyxHQUd2QixXQUFZLE1BQU0sQ0FBTixDQUFaLENBSHVCOztBQUlwQywrQkFBTyxHQUFQLEVBQVksSUFBWixDQUFrQixDQUFFLEtBQUYsRUFBUyxNQUFULENBQWxCO0FBQ0g7QUFDSjtBQUNELHVCQUFPLE1BQVA7QUFsR1U7QUFBQTtBQXFHUixtQkFyR1EsdUJBcUdLLE1BckdMO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFzR04sb0JBdEdNLEdBc0dDLFFBQUssTUFBTCxDQUFhLE1BQWIsQ0F0R0Q7QUFBQSx1QkF1R1csUUFBSyxtQkFBTCxDQUEwQjtBQUMzQyw0QkFBUSxLQUFLLElBQUw7QUFEbUMsaUJBQTFCLENBdkdYO0FBQUE7QUF1R04sd0JBdkdNO0FBMEdOLHNCQTFHTSxHQTBHRyxTQUFTLFFBQVQsQ0ExR0g7QUEyR04seUJBM0dNLEdBMkdNLFdBQVksT0FBTyxhQUFQLENBQVosSUFBcUMsSUEzRzNDO0FBNEdOLDBCQTVHTSxHQTRHTyxTQUFTLEtBQUssUUFBTCxFQUFlLFdBQWYsRUE1R2hCO0FBNkdOLDJCQTdHTSxHQTZHUSxTQUFTLEtBQUssU0FBTCxFQUFnQixXQUFoQixFQTdHakI7O0FBOEdWLHVCQUFPO0FBQ0gsaUNBQWEsU0FEVjtBQUVILGdDQUFZLFFBQUssT0FBTCxDQUFjLFNBQWQsQ0FGVDtBQUdILDRCQUFRLFdBQVksT0FBTyxNQUFQLENBQVosQ0FITDtBQUlILDJCQUFPLFdBQVksT0FBTyxLQUFQLENBQVosQ0FKSjtBQUtILDJCQUFPLFdBQVksT0FBTyxLQUFQLENBQVosQ0FMSjtBQU1ILDJCQUFPLFdBQVksT0FBTyxNQUFQLENBQVosQ0FOSjtBQU9ILDRCQUFRLFNBUEw7QUFRSCw0QkFBUSxTQVJMO0FBU0gsNkJBQVMsU0FUTjtBQVVILDZCQUFTLFNBVk47QUFXSCw0QkFBUSxXQUFZLE9BQU8sTUFBUCxDQUFaLENBWEw7QUFZSCw4QkFBVSxTQVpQO0FBYUgsa0NBQWMsU0FiWDtBQWNILCtCQUFXLFNBZFI7QUFlSCxrQ0FBYyxXQUFZLE9BQU8sVUFBUCxDQUFaLENBZlg7QUFnQkgsbUNBQWUsV0FBWSxPQUFPLFdBQVAsQ0FBWixDQWhCWjtBQWlCSCw0QkFBUTtBQWpCTCxpQkFBUDtBQTlHVTtBQUFBO0FBbUlSLG1CQW5JUSx1QkFtSUssTUFuSUw7QUFBQTtBQUFBO0FBQUE7O0FBbUlhLGtCQW5JYixnRkFtSXNCLEVBbkl0Qjs7QUFvSVYsbUJBQU8sUUFBSyxtQkFBTCxDQUEwQixRQUFLLE1BQUwsQ0FBYTtBQUMxQyx3QkFBUSxRQUFLLFFBQUwsQ0FBZSxNQUFmO0FBRGtDLGFBQWIsRUFFOUIsTUFGOEIsQ0FBMUIsQ0FBUDtBQXBJVTtBQXlJUixtQkF6SVEsdUJBeUlLLE1BeklMLEVBeUlhLElBekliLEVBeUltQixJQXpJbkIsRUF5SXlCLE1Bekl6QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBeUlpQyxpQkF6SWpDLGdGQXlJeUMsU0F6SXpDO0FBeUlvRCxrQkF6SXBELGdGQXlJNkQsRUF6STdEO0FBMElOLGFBMUlNLEdBMElGLFFBQUssTUFBTCxDQUFhLE1BQWIsQ0ExSUU7QUEySU4saUJBM0lNLEdBMklFO0FBQ1Isd0JBQVEsRUFBRSxJQUFGLENBREE7QUFFUix3QkFBUSxJQUZBO0FBR1IseUJBQVM7QUFIRCxhQTNJRjtBQWdKTixnQkFoSk0sR0FnSkMsRUFBRSxNQUFGLEVBQVUsV0FBVixFQWhKRDs7QUFpSlYsa0JBQU0sSUFBTixJQUFjLE1BQWQ7QUFDSSxrQkFsSk0sR0FrSkcsUUFBSyxnQkFBTCxDQUF1QixRQUFLLE1BQUwsQ0FBYSxLQUFiLEVBQW9CLE1BQXBCLENBQXZCLENBbEpIOztBQW1KVixtQkFBTztBQUNILHdCQUFRLE1BREw7QUFFSCxzQkFBTSxPQUFPLFFBQVAsRUFBaUIsVUFBakIsRUFBNkIsUUFBN0I7QUFGSCxhQUFQO0FBbkpVO0FBeUpSLG1CQXpKUSx1QkF5SkssRUF6Skw7QUFBQTtBQUFBO0FBQUE7O0FBeUpTLGtCQXpKVCxnRkF5SmtCLEVBekpsQjs7QUEwSlYsbUJBQU8sUUFBSyxzQkFBTCxDQUE2QixRQUFLLE1BQUwsQ0FBYTtBQUM3QyxzQkFBTTtBQUR1QyxhQUFiLEVBRWpDLE1BRmlDLENBQTdCLENBQVA7QUExSlU7QUErSlIsZUEvSlEsbUJBK0pDLElBL0pEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBK0pPLG1CQS9KUCxnRkErSmEsUUEvSmI7QUErSnVCLHNCQS9KdkIsZ0ZBK0pnQyxLQS9KaEM7QUErSnVDLHNCQS9KdkMsZ0ZBK0pnRCxFQS9KaEQ7QUErSm9ELHVCQS9KcEQsZ0ZBK0o4RCxTQS9KOUQ7QUErSnlFLG9CQS9KekUsZ0ZBK0pnRixTQS9KaEY7QUFnS04sbUJBaEtNLEdBZ0tBLFFBQUssSUFBTCxDQUFVLEtBQVYsRUFBaUIsR0FBakIsQ0FoS0E7O0FBaUtWLG9CQUFJLE9BQU8sUUFBWCxFQUFxQjtBQUNqQiwyQkFBTyxNQUFNLFFBQUssYUFBTCxDQUFvQixJQUFwQixFQUEwQixNQUExQixDQUFiO0FBQ0gsaUJBRkQsTUFFTztBQUNILDJCQUFPLFFBQUssU0FBTCxDQUFnQixRQUFLLE1BQUwsQ0FBYTtBQUNoQyxrQ0FBVSxJQURzQjtBQUVoQyxpQ0FBUyxRQUFLLEtBQUw7QUFGdUIscUJBQWIsRUFHcEIsTUFIb0IsQ0FBaEIsQ0FBUDtBQUlBLDhCQUFVO0FBQ04sd0NBQWdCLG1DQURWO0FBRU4sMENBQWtCLEtBQUssTUFGakI7QUFHTiwrQkFBTyxRQUFLLE1BSE47QUFJTixnQ0FBUSxRQUFLLElBQUwsQ0FBVyxRQUFLLE1BQUwsQ0FBYSxJQUFiLENBQVgsRUFBK0IsUUFBSyxNQUFMLENBQWEsUUFBSyxNQUFsQixDQUEvQixFQUEwRCxRQUExRDtBQUpGLHFCQUFWO0FBTUg7QUE5S1MsdUJBK0tXLFFBQUssS0FBTCxDQUFZLEdBQVosRUFBaUIsTUFBakIsRUFBeUIsT0FBekIsRUFBa0MsSUFBbEMsQ0EvS1g7QUFBQTtBQStLTix3QkEvS007O0FBZ0xWLG9CQUFJLFdBQVcsUUFBZjtBQUNJLDBCQUFNLElBQUksYUFBSixDQUFtQixRQUFLLEVBQUwsR0FBVSxHQUFWLEdBQWdCLFNBQVMsT0FBVCxDQUFuQyxDQUFOO0FBREosaUJBRUEsT0FBTyxRQUFQO0FBbExVO0FBQUE7QUFBQSxLQUFsQjs7QUFzTEE7O0FBRUEsUUFBSSxXQUFXOztBQUVYLGNBQU0sVUFGSztBQUdYLGdCQUFRLFVBSEc7QUFJWCxxQkFBYSxJQUpGO0FBS1gsbUJBQVcsSUFMQTtBQU1YLHFCQUFhLElBTkY7QUFPWCxnQkFBUTtBQUNKLG9CQUFRLHFHQURKO0FBRUosbUJBQU8sMEJBRkg7QUFHSixtQkFBTywwQkFISDtBQUlKLG1CQUFPLENBQ0gsb0NBREcsRUFFSCxvQ0FGRyxFQUdILGtEQUhHO0FBSkgsU0FQRztBQWlCWCxlQUFPO0FBQ0gsc0JBQVU7QUFDTix1QkFBTyxDQUNILGVBREcsRUFFSCxrQkFGRyxFQUdILHFCQUhHLEVBSUgsa0JBSkcsRUFLSCxvQkFMRyxFQU1ILGdCQU5HLEVBT0gsU0FQRyxFQVFILGlCQVJHLEVBU0gsT0FURyxFQVVILGlCQVZHO0FBREQsYUFEUDtBQWVILHVCQUFXO0FBQ1Asd0JBQVEsQ0FDSixlQURJLEVBRUosVUFGSSxFQUdKLGVBSEksRUFJSixTQUpJLEVBS0osYUFMSSxFQU1KLGVBTkksRUFPSixTQVBJLEVBUUosbUJBUkksRUFTSixVQVRJLEVBVUosY0FWSSxFQVdKLFVBWEksRUFZSixjQVpJLEVBYUosV0FiSSxFQWNKLGNBZEksRUFlSixRQWZJLEVBZ0JKLGNBaEJJLEVBaUJKLGtCQWpCSSxFQWtCSixvQkFsQkksRUFtQkosc0JBbkJJLEVBb0JKLFdBcEJJLEVBcUJKLGlCQXJCSSxFQXNCSixjQXRCSSxFQXVCSixRQXZCSSxFQXdCSixnQkF4QkksRUF5QkosV0F6QkksRUEwQkosU0ExQkksRUEyQkosYUEzQkksRUE0QkosbUJBNUJJLEVBNkJKLFVBN0JJLEVBOEJKLG9CQTlCSSxFQStCSixVQS9CSTtBQUREO0FBZlIsU0FqQkk7O0FBcUVMLG9CQXJFSztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkFzRWEsUUFBSyx1QkFBTCxFQXRFYjtBQUFBO0FBc0VILHVCQXRFRztBQXVFSCxzQkF2RUcsR0F1RU0sRUF2RU47O0FBd0VQLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksUUFBUSxNQUE1QixFQUFvQyxHQUFwQyxFQUF5QztBQUNqQywwQkFEaUMsR0FDeEIsUUFBUSxDQUFSLENBRHdCO0FBRWpDLHNCQUZpQyxHQUU1QixPQUFPLE1BQVAsRUFBZSxXQUFmLEVBRjRCO0FBR2pDLDBCQUhpQyxHQUd4QixHQUFHLEtBQUgsQ0FBVSxDQUFWLEVBQWEsQ0FBYixDQUh3QjtBQUlqQywyQkFKaUMsR0FJdkIsR0FBRyxLQUFILENBQVUsQ0FBVixFQUFhLENBQWIsQ0FKdUI7QUFLakMsd0JBTGlDLEdBSzFCLE1BTDBCO0FBTWpDLHlCQU5pQyxHQU16QixPQU55QjtBQU9yQzs7QUFDQSx3QkFBSSxRQUFRLEtBQVo7QUFDSSwrQkFBTyxNQUFQO0FBREoscUJBRUksTUFWaUMsR0FVeEIsT0FBTyxHQUFQLEdBQWEsS0FWVzs7QUFXckMsMkJBQU8sSUFBUCxDQUFhO0FBQ1QsOEJBQU0sRUFERztBQUVULGtDQUFVLE1BRkQ7QUFHVCxnQ0FBUSxJQUhDO0FBSVQsaUNBQVMsS0FKQTtBQUtULGtDQUFVLE1BTEQ7QUFNVCxtQ0FBVyxPQU5GO0FBT1QsZ0NBQVE7QUFQQyxxQkFBYjtBQVNIO0FBQ0QsdUJBQU8sTUFBUDtBQTdGTztBQUFBO0FBZ0dMLG9CQWhHSztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkFpR0QsUUFBSyxXQUFMLEVBakdDO0FBQUE7QUFBQSx1QkFrR2MsUUFBSyxtQkFBTCxFQWxHZDtBQUFBO0FBa0dILHdCQWxHRztBQW1HSCx3QkFuR0csR0FtR1EsRUFuR1I7O0FBb0dQLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksU0FBUyxNQUE3QixFQUFxQyxHQUFyQyxFQUEwQztBQUNsQywyQkFEa0MsR0FDeEIsU0FBUyxDQUFULENBRHdCOztBQUV0Qyx3QkFBSSxRQUFRLE1BQVIsS0FBbUIsVUFBdkIsRUFBbUM7QUFDM0IsZ0NBRDJCLEdBQ2hCLFFBQVEsVUFBUixDQURnQjtBQUUvQjs7QUFDQSw0QkFBSSxZQUFZLEtBQWhCO0FBQ0ksdUNBQVcsTUFBWDtBQURKLHlCQUVJLFNBTDJCLEdBS2YsU0FBUyxXQUFULEVBTGU7O0FBTS9CLGlDQUFTLFNBQVQsSUFBc0IsT0FBdEI7QUFDSDtBQUNKO0FBQ0csc0JBL0dHLEdBK0dNLEVBQUUsUUFBUSxRQUFWLEVBL0dOOztBQWdIUCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFFBQUssVUFBTCxDQUFnQixNQUFwQyxFQUE0QyxHQUE1QyxFQUFpRDtBQUN6Qyw2QkFEeUMsR0FDOUIsUUFBSyxVQUFMLENBQWdCLENBQWhCLENBRDhCO0FBRXpDLDRCQUZ5QyxHQUUvQjtBQUNWLGdDQUFRLFNBREU7QUFFVixnQ0FBUSxTQUZFO0FBR1YsaUNBQVM7QUFIQyxxQkFGK0I7O0FBTzdDLHdCQUFJLGFBQVksUUFBaEIsRUFBMEI7QUFDdEIsaUNBQVEsTUFBUixJQUFrQixXQUFZLFNBQVMsU0FBVCxFQUFtQixXQUFuQixDQUFaLENBQWxCO0FBQ0EsaUNBQVEsT0FBUixJQUFtQixXQUFZLFNBQVMsU0FBVCxFQUFtQixRQUFuQixDQUFaLENBQW5CO0FBQ0EsaUNBQVEsTUFBUixJQUFrQixTQUFRLE9BQVIsSUFBbUIsU0FBUSxNQUFSLENBQXJDO0FBQ0g7QUFDRCwyQkFBTyxTQUFQLElBQW1CLFFBQW5CO0FBQ0g7QUFDRCx1QkFBTyxNQUFQO0FBOUhPO0FBQUE7QUFpSUwsc0JBaklLLDBCQWlJVyxNQWpJWDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQWlJbUIsc0JBakluQixnRkFpSTRCLEVBakk1QjtBQUFBLHVCQWtJRCxRQUFLLFdBQUwsRUFsSUM7QUFBQTtBQUFBLHVCQW1JZSxRQUFLLG1CQUFMLENBQTBCLFFBQUssTUFBTCxDQUFhO0FBQ3pELDhCQUFVLFFBQUssUUFBTCxDQUFlLE1BQWY7QUFEK0MsaUJBQWIsRUFFN0MsTUFGNkMsQ0FBMUIsQ0FuSWY7QUFBQTtBQW1JSCx5QkFuSUc7QUFzSUgseUJBdElHLEdBc0lTLFFBQUssWUFBTCxFQXRJVDtBQXVJSCxzQkF2SUcsR0F1SU07QUFDVCw0QkFBUSxFQURDO0FBRVQsNEJBQVEsRUFGQztBQUdULGlDQUFhLFNBSEo7QUFJVCxnQ0FBWSxRQUFLLE9BQUwsQ0FBYyxTQUFkO0FBSkgsaUJBdklOO0FBNklILHFCQTdJRyxHQTZJSyxDQUFFLE1BQUYsRUFBVSxNQUFWLENBN0lMOztBQThJUCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLE1BQU0sTUFBMUIsRUFBa0MsR0FBbEMsRUFBdUM7QUFDL0Isd0JBRCtCLEdBQ3hCLE1BQU0sQ0FBTixDQUR3QjtBQUUvQiwwQkFGK0IsR0FFdEIsVUFBVSxJQUFWLENBRnNCOztBQUduQyx5QkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLE9BQU8sTUFBM0IsRUFBbUMsR0FBbkMsRUFBd0M7QUFDaEMsNkJBRGdDLEdBQ3hCLE9BQU8sQ0FBUCxDQUR3QjtBQUVoQyw2QkFGZ0MsR0FFeEIsV0FBWSxNQUFNLE9BQU4sQ0FBWixDQUZ3QjtBQUdoQyw4QkFIZ0MsR0FHdkIsV0FBWSxNQUFNLFFBQU4sQ0FBWixDQUh1QjtBQUloQyxtQ0FKZ0MsR0FJcEIsU0FBVSxXQUFZLE1BQU0sV0FBTixDQUFaLENBQVYsQ0FKb0I7O0FBS3BDLCtCQUFPLElBQVAsRUFBYSxJQUFiLENBQW1CLENBQUUsS0FBRixFQUFTLE1BQVQsRUFBaUIsV0FBakIsQ0FBbkI7QUFDSDtBQUNKO0FBQ0QsdUJBQU8sTUFBUDtBQXpKTztBQUFBO0FBNEpMLG1CQTVKSyx1QkE0SlEsTUE1SlI7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkE2SkQsUUFBSyxXQUFMLEVBN0pDO0FBQUE7QUFBQSx1QkE4SlksUUFBSyx3QkFBTCxDQUErQjtBQUM5Qyw4QkFBVSxRQUFLLFFBQUwsQ0FBZSxNQUFmO0FBRG9DLGlCQUEvQixDQTlKWjtBQUFBO0FBOEpILHNCQTlKRztBQWlLSCx5QkFqS0csR0FpS1MsV0FBWSxPQUFPLFdBQVAsQ0FBWixJQUFtQyxJQWpLNUM7O0FBa0tQLHVCQUFPO0FBQ0gsaUNBQWEsU0FEVjtBQUVILGdDQUFZLFFBQUssT0FBTCxDQUFjLFNBQWQsQ0FGVDtBQUdILDRCQUFRLFdBQVksT0FBTyxNQUFQLENBQVosQ0FITDtBQUlILDJCQUFPLFdBQVksT0FBTyxLQUFQLENBQVosQ0FKSjtBQUtILDJCQUFPLFdBQVksT0FBTyxLQUFQLENBQVosQ0FMSjtBQU1ILDJCQUFPLFdBQVksT0FBTyxLQUFQLENBQVosQ0FOSjtBQU9ILDRCQUFRLFNBUEw7QUFRSCw0QkFBUSxTQVJMO0FBU0gsNkJBQVMsU0FUTjtBQVVILDZCQUFTLFNBVk47QUFXSCw0QkFBUSxXQUFZLE9BQU8sWUFBUCxDQUFaLENBWEw7QUFZSCw4QkFBVSxTQVpQO0FBYUgsa0NBQWMsU0FiWDtBQWNILCtCQUFXLFdBQVksT0FBTyxLQUFQLENBQVosQ0FkUjtBQWVILGtDQUFjLFNBZlg7QUFnQkgsbUNBQWUsV0FBWSxPQUFPLFFBQVAsQ0FBWixDQWhCWjtBQWlCSCw0QkFBUTtBQWpCTCxpQkFBUDtBQWxLTztBQUFBO0FBdUxYLGtCQXZMVyxzQkF1TEMsS0F2TEQsRUF1TFEsTUF2TFIsRUF1TGdCO0FBQ3ZCLGdCQUFJLFlBQVksTUFBTSxXQUFOLElBQXFCLElBQXJDO0FBQ0EsbUJBQU87QUFDSCxzQkFBTSxNQUFNLEtBQU4sRUFBYSxRQUFiLEVBREg7QUFFSCx3QkFBUSxLQUZMO0FBR0gsNkJBQWEsU0FIVjtBQUlILDRCQUFZLEtBQUssT0FBTCxDQUFjLFNBQWQsQ0FKVDtBQUtILDBCQUFVLE9BQU8sUUFBUCxDQUxQO0FBTUgsd0JBQVEsU0FOTDtBQU9ILHdCQUFRLE1BQU0sTUFBTixDQVBMO0FBUUgseUJBQVMsV0FBWSxNQUFNLE9BQU4sQ0FBWixDQVJOO0FBU0gsMEJBQVUsV0FBWSxNQUFNLFFBQU4sQ0FBWjtBQVRQLGFBQVA7QUFXSCxTQXBNVTtBQXNNTCxtQkF0TUssdUJBc01RLE1BdE1SO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQXNNZ0Isc0JBdE1oQixnRkFzTXlCLEVBdE16QjtBQUFBLHVCQXVNRCxRQUFLLFdBQUwsRUF2TUM7QUFBQTtBQXdNSCxpQkF4TUcsR0F3TUMsUUFBSyxNQUFMLENBQWEsTUFBYixDQXhNRDtBQUFBLHVCQXlNWSxRQUFLLHFCQUFMLENBQTRCLFFBQUssTUFBTCxDQUFhO0FBQ3hELDhCQUFVLEVBQUUsSUFBRjtBQUQ4QyxpQkFBYixFQUU1QyxNQUY0QyxDQUE1QixDQXpNWjtBQUFBO0FBeU1ILHNCQXpNRzs7QUE0TVAsdUJBQU8sUUFBSyxXQUFMLENBQWtCLE1BQWxCLEVBQTBCLENBQTFCLENBQVA7QUE1TU87QUFBQTtBQStNTCxtQkEvTUssdUJBK01RLE1BL01SLEVBK01nQixJQS9NaEIsRUErTXNCLElBL010QixFQStNNEIsTUEvTTVCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBK01vQyxxQkEvTXBDLGdGQStNNEMsU0EvTTVDO0FBK011RCxzQkEvTXZELGdGQStNZ0UsRUEvTWhFO0FBQUEsdUJBZ05ELFFBQUssV0FBTCxFQWhOQztBQUFBO0FBaU5ILHFCQWpORyxHQWlOSztBQUNSLDhCQUFVLFFBQUssUUFBTCxDQUFlLE1BQWYsQ0FERjtBQUVSLDhCQUFVLE9BQU8sUUFBUCxFQUZGO0FBR1IsNEJBQVEsSUFIQTtBQUlSLDRCQUFRLGNBQWMsSUFKZDtBQUtSLGdDQUFZLEtBTEo7QUFNUixxQ0FBaUIsQ0FOVDtBQU9SLHNDQUFrQjtBQVBWLGlCQWpOTDs7QUEwTlAsb0JBQUksUUFBUSxRQUFaLEVBQXNCO0FBQ2xCLDBCQUFNLE9BQU4sSUFBaUIsUUFBSyxLQUFMLEdBQWMsUUFBZCxFQUFqQjtBQUNILGlCQUZELE1BRU87QUFDSCwwQkFBTSxPQUFOLElBQWlCLE1BQU0sUUFBTixFQUFqQjtBQUNIO0FBOU5NLHVCQStOWSxRQUFLLG1CQUFMLENBQTBCLFFBQUssTUFBTCxDQUFhLEtBQWIsRUFBb0IsTUFBcEIsQ0FBMUIsQ0EvTlo7QUFBQTtBQStOSCxzQkEvTkc7O0FBZ09QLHVCQUFPO0FBQ0gsNEJBQVEsTUFETDtBQUVILDBCQUFNLE9BQU8sVUFBUCxFQUFtQixRQUFuQjtBQUZILGlCQUFQO0FBaE9PO0FBQUE7QUFzT0wsbUJBdE9LLHVCQXNPUSxFQXRPUjtBQUFBOztBQUFBO0FBQUEsdUJBdU9ELFFBQUssV0FBTCxFQXZPQztBQUFBO0FBd09QLHVCQUFPLFFBQUssc0JBQUwsQ0FBNkIsRUFBRSxZQUFZLEVBQWQsRUFBN0IsQ0FBUDtBQXhPTztBQUFBO0FBMk9YLGFBM09XLG1CQTJPRjtBQUNMLG1CQUFPLEtBQUssWUFBTCxFQUFQO0FBQ0gsU0E3T1U7QUErT0wsZUEvT0ssbUJBK09JLElBL09KO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBK09VLG1CQS9PVixnRkErT2dCLFFBL09oQjtBQStPMEIsc0JBL08xQixnRkErT21DLEtBL09uQztBQStPMEMsc0JBL08xQyxnRkErT21ELEVBL09uRDtBQStPdUQsdUJBL092RCxnRkErT2lFLFNBL09qRTtBQStPNEUsb0JBL081RSxnRkErT21GLFNBL09uRjtBQWdQSCx1QkFoUEcsR0FnUE8sTUFBTSxRQUFLLE9BQVgsR0FBcUIsR0FBckIsR0FBMkIsUUFBSyxhQUFMLENBQW9CLElBQXBCLEVBQTBCLE1BQTFCLENBaFBsQztBQWlQSCxxQkFqUEcsR0FpUEssUUFBSyxJQUFMLENBQVcsTUFBWCxFQUFtQixRQUFLLGFBQUwsQ0FBb0IsSUFBcEIsQ0FBbkIsQ0FqUEw7QUFrUEgsbUJBbFBHLEdBa1BHLFFBQUssSUFBTCxDQUFVLEtBQVYsSUFBbUIsT0FsUHRCOztBQW1QUCxvQkFBSSxPQUFPLFFBQVgsRUFBcUI7QUFDakIsd0JBQUksT0FBTyxJQUFQLENBQWEsS0FBYixFQUFvQixNQUF4QjtBQUNJLCtCQUFPLE1BQU0sUUFBSyxTQUFMLENBQWdCLEtBQWhCLENBQWI7QUFESjtBQUVILGlCQUhELE1BR087QUFDQyx5QkFERCxHQUNTLFFBQUssS0FBTCxFQURUOztBQUVILDRCQUFRLFFBQUssTUFBTCxDQUFhO0FBQ2pCLGlDQUFTLE1BQU0sUUFBTixFQURRO0FBRWpCLG1DQUFXO0FBRk0scUJBQWIsRUFHTCxLQUhLLENBQVI7QUFJQSw0QkFBUSxRQUFLLElBQUwsQ0FBVyxLQUFYLENBQVI7QUFDQSw0QkFBUSxRQUFLLE1BQUwsQ0FBYSxLQUFiLENBQVI7QUFDSSwyQkFSRCxHQVFXLFFBQUssY0FBTCxDQUFxQixLQUFyQixDQVJYO0FBU0MsMEJBVEQsR0FTVSxRQUFLLE1BQUwsQ0FBYSxRQUFLLE1BQWxCLENBVFY7QUFVQyw2QkFWRCxHQVVhLFFBQUssSUFBTCxDQUFXLE9BQVgsRUFBb0IsTUFBcEIsRUFBNEIsUUFBNUIsQ0FWYjs7QUFXSCw4QkFBVTtBQUNOLHdDQUFnQixRQUFLLE1BRGY7QUFFTix5Q0FBaUIsUUFBSyxNQUFMLENBQWEsT0FBYixDQUZYO0FBR04sMkNBQW1CO0FBSGIscUJBQVY7QUFLSDtBQXRRTSx1QkF1UWMsUUFBSyxLQUFMLENBQVksR0FBWixFQUFpQixNQUFqQixFQUF5QixPQUF6QixFQUFrQyxJQUFsQyxDQXZRZDtBQUFBO0FBdVFILHdCQXZRRzs7QUF3UVAsb0JBQUksYUFBYSxRQUFqQjtBQUNJLDBCQUFNLElBQUksYUFBSixDQUFtQixRQUFLLEVBQUwsR0FBVSxHQUFWLEdBQWdCLFFBQUssSUFBTCxDQUFXLFFBQVgsQ0FBbkMsQ0FBTjtBQURKLGlCQUVBLE9BQU8sUUFBUDtBQTFRTztBQUFBO0FBQUEsS0FBZjs7QUE4UUE7O0FBRUEsUUFBSSxXQUFXOztBQUVYLGNBQU0sVUFGSztBQUdYLGdCQUFRLFVBSEc7QUFJWCxxQkFBYSxJQUpGO0FBS1gsbUJBQVcsSUFMQTtBQU1YLHFCQUFhLEdBTkY7QUFPWCxnQkFBUTtBQUNKLG9CQUFRLHFHQURKO0FBRUosbUJBQU8seUJBRkg7QUFHSixtQkFBTyxxQkFISDtBQUlKLG1CQUFPO0FBSkgsU0FQRztBQWFYLGVBQU87QUFDSCxzQkFBVTtBQUNOLHVCQUFPLENBQ0gsWUFERyxFQUNjO0FBQ2pCLDBCQUZHLEVBRWM7QUFDakIsMkJBSEcsRUFHYztBQUNqQiwrQkFKRyxFQUljO0FBQ2pCLDJCQUxHLEVBTUgsVUFORztBQURELGFBRFA7QUFXSCx1QkFBVztBQUNQLHVCQUFPLENBQ0gsZ0JBREcsRUFFSCxZQUZHLEVBR0gsZUFIRyxFQUlILHVCQUpHLEVBS0gsY0FMRyxFQU1ILFlBTkcsRUFPSCxhQVBHLEVBUUgsaUJBUkcsRUFTSCxhQVRHLEVBVUgsZ0JBVkcsRUFXSCxnQkFYRyxFQVlILGlCQVpHLEVBYUgsZ0JBYkcsRUFjSCxlQWRHLEVBZUgsY0FmRyxFQWdCSCxzQkFoQkcsQ0FEQTtBQW1CUCx3QkFBUSxDQUNKLFVBREksRUFFSixVQUZJLEVBR0osZ0JBSEksRUFJSixrQkFKSSxFQUtKLGlCQUxJLEVBTUosbUJBTkksRUFPSixzQkFQSTtBQW5CRDtBQVhSLFNBYkk7O0FBdURMLG9CQXZESztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkF3RGEsUUFBSyxnQkFBTCxFQXhEYjtBQUFBO0FBd0RILHVCQXhERztBQXlESCxzQkF6REcsR0F5RE0sRUF6RE47O0FBMERQLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksUUFBUSxNQUE1QixFQUFvQyxHQUFwQyxFQUF5QztBQUNqQywwQkFEaUMsR0FDeEIsUUFBUSxDQUFSLENBRHdCO0FBRWpDLHNCQUZpQyxHQUU1QixPQUFPLGNBQVAsQ0FGNEI7QUFHakMsOEJBSGlDLEdBR3BCLEdBQUcsS0FBSCxDQUFVLEdBQVYsQ0FIb0I7QUFJakMsd0JBSmlDLEdBSTFCLFNBSjBCO0FBS2pDLHlCQUxpQyxHQUt6QixTQUx5QjtBQU1qQywwQkFOaUMsR0FNeEIsRUFOd0I7QUFPakMsaUNBUGlDLEdBT2pCLFdBQVcsTUFQTTs7QUFRckMsd0JBQUksaUJBQWlCLENBQXJCLEVBQXdCO0FBQ3BCLCtCQUFPLFdBQVcsQ0FBWCxDQUFQO0FBQ0EsZ0NBQVEsV0FBVyxDQUFYLENBQVI7QUFDQSxpQ0FBUyxPQUFPLEdBQVAsR0FBYSxLQUF0QjtBQUNIO0FBQ0QsMkJBQU8sSUFBUCxDQUFhO0FBQ1QsOEJBQU0sRUFERztBQUVULGtDQUFVLE1BRkQ7QUFHVCxnQ0FBUSxJQUhDO0FBSVQsaUNBQVMsS0FKQTtBQUtULGdDQUFRO0FBTEMscUJBQWI7QUFPSDtBQUNELHVCQUFPLE1BQVA7QUEvRU87QUFBQTtBQWtGTCxvQkFsRks7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQW1GRCxRQUFLLFdBQUwsRUFuRkM7QUFBQTtBQUFBLHVCQW9GYyxRQUFLLGlCQUFMLEVBcEZkO0FBQUE7QUFvRkgsd0JBcEZHO0FBcUZILHdCQXJGRyxHQXFGUSxFQXJGUjs7QUFzRlAscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxTQUFTLE1BQTdCLEVBQXFDLEdBQXJDLEVBQTBDO0FBQ2xDLDJCQURrQyxHQUN4QixTQUFTLENBQVQsQ0FEd0I7QUFFbEMsNEJBRmtDLEdBRXZCLFFBQVEsZUFBUixDQUZ1Qjs7QUFHdEMsNkJBQVMsUUFBVCxJQUFxQixPQUFyQjtBQUNIO0FBQ0csc0JBM0ZHLEdBMkZNLEVBQUUsUUFBUSxRQUFWLEVBM0ZOOztBQTRGUCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFFBQUssVUFBTCxDQUFnQixNQUFwQyxFQUE0QyxHQUE1QyxFQUFpRDtBQUN6Qyw4QkFEeUMsR0FDOUIsUUFBSyxVQUFMLENBQWdCLENBQWhCLENBRDhCO0FBRXpDLDZCQUZ5QyxHQUUvQjtBQUNWLGdDQUFRLFNBREU7QUFFVixnQ0FBUSxTQUZFO0FBR1YsaUNBQVM7QUFIQyxxQkFGK0I7O0FBTzdDLHdCQUFJLGNBQVksUUFBaEIsRUFBMEI7QUFDdEIsa0NBQVEsT0FBUixJQUFtQixTQUFTLFVBQVQsRUFBbUIsUUFBbkIsQ0FBbkI7QUFDQSxrQ0FBUSxNQUFSLElBQWtCLFNBQVMsVUFBVCxFQUFtQixXQUFuQixDQUFsQjtBQUNBLGtDQUFRLE1BQVIsSUFBa0IsVUFBUSxPQUFSLElBQW1CLFVBQVEsTUFBUixDQUFyQztBQUNIO0FBQ0QsMkJBQU8sVUFBUCxJQUFtQixTQUFuQjtBQUNIO0FBQ0QsdUJBQU8sTUFBUDtBQTFHTztBQUFBO0FBNkdMLHNCQTdHSywwQkE2R1csTUE3R1g7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBNkdtQixzQkE3R25CLGdGQTZHNEIsRUE3RzVCO0FBQUEsdUJBOEdELFFBQUssV0FBTCxFQTlHQztBQUFBO0FBQUEsdUJBK0dlLFFBQUssY0FBTCxDQUFxQixRQUFLLE1BQUwsQ0FBYTtBQUNwRCxvQ0FBZ0IsUUFBSyxRQUFMLENBQWUsTUFBZjtBQURvQyxpQkFBYixFQUV4QyxNQUZ3QyxDQUFyQixDQS9HZjtBQUFBO0FBK0dILHlCQS9HRztBQWtISCx5QkFsSEcsR0FrSFMsUUFBSyxZQUFMLEVBbEhUO0FBbUhILHNCQW5IRyxHQW1ITTtBQUNULDRCQUFRLEVBREM7QUFFVCw0QkFBUSxFQUZDO0FBR1QsaUNBQWEsU0FISjtBQUlULGdDQUFZLFFBQUssT0FBTCxDQUFjLFNBQWQ7QUFKSCxpQkFuSE47QUF5SEgscUJBekhHLEdBeUhLLENBQUUsTUFBRixFQUFVLE1BQVYsQ0F6SEw7O0FBMEhQLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksTUFBTSxNQUExQixFQUFrQyxHQUFsQyxFQUF1QztBQUMvQix3QkFEK0IsR0FDeEIsTUFBTSxDQUFOLENBRHdCO0FBRS9CLDBCQUYrQixHQUV0QixVQUFVLElBQVYsQ0FGc0I7O0FBR25DLHlCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksT0FBTyxNQUEzQixFQUFtQyxHQUFuQyxFQUF3QztBQUNoQyw2QkFEZ0MsR0FDeEIsT0FBTyxDQUFQLENBRHdCO0FBRWhDLDZCQUZnQyxHQUV4QixXQUFZLE1BQU0sT0FBTixDQUFaLENBRndCO0FBR2hDLDhCQUhnQyxHQUd2QixXQUFZLE1BQU0sTUFBTixDQUFaLENBSHVCOztBQUlwQywrQkFBTyxJQUFQLEVBQWEsSUFBYixDQUFtQixDQUFFLEtBQUYsRUFBUyxNQUFULENBQW5CO0FBQ0g7QUFDSjtBQUNELHVCQUFPLE1BQVA7QUFwSU87QUFBQTtBQXVJTCxtQkF2SUssdUJBdUlRLE1BdklSO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBd0lELFFBQUssV0FBTCxFQXhJQztBQUFBO0FBQUEsdUJBeUlZLFFBQUssZUFBTCxDQUFzQjtBQUNyQyxvQ0FBZ0IsUUFBSyxRQUFMLENBQWUsTUFBZjtBQURxQixpQkFBdEIsQ0F6SVo7QUFBQTtBQXlJSCxzQkF6SUc7QUE0SUgseUJBNUlHLEdBNElTLFFBQUssU0FBTCxDQUFnQixPQUFPLFdBQVAsQ0FBaEIsQ0E1SVQ7O0FBNklQLHVCQUFPO0FBQ0gsaUNBQWEsU0FEVjtBQUVILGdDQUFZLFFBQUssT0FBTCxDQUFjLFNBQWQsQ0FGVDtBQUdILDRCQUFRLFNBSEw7QUFJSCwyQkFBTyxTQUpKO0FBS0gsMkJBQU8sV0FBWSxPQUFPLFVBQVAsQ0FBWixDQUxKO0FBTUgsMkJBQU8sV0FBWSxPQUFPLFVBQVAsQ0FBWixDQU5KO0FBT0gsNEJBQVEsU0FQTDtBQVFILDRCQUFRLFNBUkw7QUFTSCw2QkFBUyxTQVROO0FBVUgsNkJBQVMsU0FWTjtBQVdILDRCQUFRLFdBQVksT0FBTyxLQUFQLENBQVosQ0FYTDtBQVlILDhCQUFVLFNBWlA7QUFhSCxrQ0FBYyxTQWJYO0FBY0gsK0JBQVcsU0FkUjtBQWVILGtDQUFjLFdBQVksT0FBTyxtQkFBUCxDQUFaLENBZlg7QUFnQkgsbUNBQWUsV0FBWSxPQUFPLFFBQVAsQ0FBWixDQWhCWjtBQWlCSCw0QkFBUTtBQWpCTCxpQkFBUDtBQTdJTztBQUFBO0FBa0tMLG1CQWxLSyx1QkFrS1EsTUFsS1I7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFrS2dCLHNCQWxLaEIsZ0ZBa0t5QixFQWxLekI7QUFBQSx1QkFtS0QsUUFBSyxXQUFMLEVBbktDO0FBQUE7QUFvS1AsdUJBQU8sUUFBSyxtQkFBTCxDQUEwQixRQUFLLE1BQUwsQ0FBYTtBQUMxQyxvQ0FBZ0IsUUFBSyxRQUFMLENBQWUsTUFBZjtBQUQwQixpQkFBYixFQUU5QixNQUY4QixDQUExQixDQUFQO0FBcEtPO0FBQUE7QUF5S0wsbUJBektLLHVCQXlLUSxNQXpLUixFQXlLZ0IsSUF6S2hCLEVBeUtzQixJQXpLdEIsRUF5SzRCLE1Beks1QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQXlLb0MscUJBektwQyxnRkF5SzRDLFNBeks1QztBQXlLdUQsc0JBekt2RCxnRkF5S2dFLEVBektoRTtBQUFBLHVCQTBLRCxRQUFLLFdBQUwsRUExS0M7QUFBQTtBQTJLSCxxQkEzS0csR0EyS0s7QUFDUixvQ0FBZ0IsUUFBSyxRQUFMLENBQWUsTUFBZixDQURSO0FBRVIsd0NBQW9CLEtBQUssV0FBTCxFQUZaO0FBR1IsNEJBQVEsS0FBSyxXQUFMLEVBSEE7QUFJUiw2QkFBUyxLQUpEO0FBS1IsNEJBQVE7QUFMQSxpQkEzS0w7QUFBQSx1QkFrTFksUUFBSyx5QkFBTCxDQUFnQyxRQUFLLE1BQUwsQ0FBYSxLQUFiLEVBQW9CLE1BQXBCLENBQWhDLENBbExaO0FBQUE7QUFrTEgsc0JBbExHOztBQW1MUCx1QkFBTztBQUNILDRCQUFRLE1BREw7QUFFSCwwQkFBTSxPQUFPLDJCQUFQO0FBRkgsaUJBQVA7QUFuTE87QUFBQTtBQXlMTCxtQkF6TEssdUJBeUxRLEVBekxSO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBeUxZLHNCQXpMWixnRkF5THFCLEVBekxyQjtBQUFBLHVCQTBMRCxRQUFLLFdBQUwsRUExTEM7QUFBQTtBQTJMUCx1QkFBTyxRQUFLLDJCQUFMLENBQWtDLFFBQUssTUFBTCxDQUFhO0FBQ2xELHVDQUFtQjtBQUQrQixpQkFBYixFQUV0QyxNQUZzQyxDQUFsQyxDQUFQO0FBM0xPO0FBQUE7QUFnTUwsZUFoTUssbUJBZ01JLElBaE1KO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFnTVUsZUFoTVYsZ0ZBZ01nQixRQWhNaEI7QUFnTTBCLGtCQWhNMUIsZ0ZBZ01tQyxLQWhNbkM7QUFnTTBDLGtCQWhNMUMsZ0ZBZ01tRCxFQWhNbkQ7QUFnTXVELG1CQWhNdkQsZ0ZBZ01pRSxTQWhNakU7QUFnTTRFLGdCQWhNNUUsZ0ZBZ01tRixTQWhNbkY7QUFpTUgsbUJBak1HLEdBaU1PLE1BQU0sUUFBSyxPQUFYLEdBQXFCLEdBak01Qjs7QUFrTVAsZ0JBQUksT0FBTyxTQUFYO0FBQ0ksMkJBQVcsS0FBWDtBQURKLGFBRUEsV0FBVyxJQUFYO0FBQ0ksZUFyTUcsR0FxTUcsUUFBSyxJQUFMLENBQVUsS0FBVixJQUFtQixPQXJNdEI7O0FBc01QLGdCQUFJLE9BQU8sUUFBWCxFQUFxQjtBQUNqQixvQkFBSSxPQUFPLElBQVAsQ0FBYSxNQUFiLEVBQXFCLE1BQXpCO0FBQ0ksMkJBQU8sTUFBTSxRQUFLLFNBQUwsQ0FBZ0IsTUFBaEIsQ0FBYjtBQURKO0FBRUgsYUFIRCxNQUdPO0FBQ0MscUJBREQsR0FDUyxRQUFLLEtBQUwsR0FBYyxRQUFkLEVBRFQ7O0FBRUgsdUJBQU8sUUFBSyxJQUFMLENBQVcsTUFBWCxDQUFQO0FBQ0ksb0JBSEQsR0FHUSxDQUFFLEtBQUYsRUFBUyxNQUFULEVBQWlCLE9BQWpCLEVBQTBCLElBQTFCLEVBQWlDLElBQWpDLENBQXVDLEVBQXZDLENBSFI7O0FBSUgsMEJBQVU7QUFDTixrQ0FBYyxRQUFLLE1BRGI7QUFFTix3Q0FBb0IsS0FGZDtBQUdOLG1DQUFlLFFBQUssSUFBTCxDQUFXLFFBQUssTUFBTCxDQUFhLElBQWIsQ0FBWCxFQUErQixRQUFLLE1BQXBDLENBSFQ7QUFJTixvQ0FBZ0I7QUFKVixpQkFBVjtBQU1IO0FBQ0QsbUJBQU8sUUFBSyxLQUFMLENBQVksR0FBWixFQUFpQixNQUFqQixFQUF5QixPQUF6QixFQUFrQyxJQUFsQyxDQUFQO0FBcE5PO0FBQUEsS0FBZjs7QUF3TkE7O0FBRUEsUUFBSSxVQUFVOztBQUVWLGNBQU0sU0FGSTtBQUdWLGdCQUFRLFNBSEU7QUFJVixxQkFBYSxDQUFFLElBQUYsRUFBUSxJQUFSLEVBQWMsSUFBZCxDQUpIO0FBS1YscUJBQWEsSUFMSDtBQU1WLG1CQUFXLElBTkQ7QUFPViwyQkFBbUIsSUFQVDtBQVFWLGdCQUFRO0FBQ0osb0JBQVEscUdBREo7QUFFSixtQkFBTyx5QkFGSDtBQUdKLG1CQUFPLHFCQUhIO0FBSUosbUJBQU87QUFKSCxTQVJFO0FBY1YsZUFBTztBQUNILHNCQUFVO0FBQ04sdUJBQU8sQ0FDSCxhQURHLEVBRUgsT0FGRyxFQUdILE9BSEcsRUFJSCxTQUpHLEVBS0gsY0FMRyxFQU1ILGdCQU5HO0FBREQsYUFEUDtBQVdILHVCQUFXO0FBQ1Asd0JBQVEsQ0FDSixxQkFESSxFQUVKLFNBRkksRUFHSixjQUhJLEVBSUosc0JBSkksRUFLSixtQkFMSSxFQU1KLGNBTkksRUFPSix3QkFQSSxFQVFKLGNBUkksRUFTSixTQVRJLEVBVUosa0NBVkksRUFXSixvQkFYSSxFQVlKLGFBWkksRUFhSix5QkFiSSxFQWNKLGdCQWRJLEVBZUosdUJBZkksRUFnQkosc0JBaEJJLEVBaUJKLGVBakJJLEVBa0JKLGFBbEJJLEVBbUJKLFFBbkJJLEVBb0JKLFFBcEJJLEVBcUJKLFNBckJJLEVBc0JKLGVBdEJJLEVBdUJKLGVBdkJJLEVBd0JKLFVBeEJJLEVBeUJKLGdCQXpCSTtBQUREO0FBWFIsU0FkRzs7QUF3REosb0JBeERJO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBeURjLFFBQUssY0FBTCxFQXpEZDtBQUFBO0FBeURGLHVCQXpERTtBQTBERixzQkExREUsR0EwRE8sRUExRFA7QUEyREYsb0JBM0RFLEdBMkRLLE9BQU8sSUFBUCxDQUFhLE9BQWIsQ0EzREw7O0FBNEROLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksS0FBSyxNQUF6QixFQUFpQyxHQUFqQyxFQUFzQztBQUM5QiwwQkFEOEIsR0FDckIsUUFBUSxLQUFLLENBQUwsQ0FBUixDQURxQjtBQUU5QixzQkFGOEIsR0FFekIsT0FBTyxJQUFQLENBRnlCO0FBRzlCLDBCQUg4QixHQUdyQixPQUFPLE1BQVAsQ0FIcUI7QUFBQSxvQ0FJWixPQUFPLEtBQVAsQ0FBYyxHQUFkLENBSlk7QUFBQTtBQUk1Qix3QkFKNEI7QUFJdEIseUJBSnNCO0FBS2xDOztBQUNBLHdCQUFJLFFBQVEsS0FBWjtBQUNJLCtCQUFPLE1BQVA7QUFESixxQkFFQSxTQUFTLE9BQU8sR0FBUCxHQUFhLEtBQXRCO0FBQ0EsMkJBQU8sSUFBUCxDQUFhO0FBQ1QsOEJBQU0sRUFERztBQUVULGtDQUFVLE1BRkQ7QUFHVCxnQ0FBUSxJQUhDO0FBSVQsaUNBQVMsS0FKQTtBQUtULGdDQUFRO0FBTEMscUJBQWI7QUFPSDtBQUNELHVCQUFPLE1BQVA7QUE3RU07QUFBQTtBQWdGVixtQkFoRlUsdUJBZ0ZHLE1BaEZILEVBZ0ZXLE1BaEZYLEVBZ0ZtQjtBQUN6QixnQkFBSSxZQUFZLEtBQUssWUFBTCxFQUFoQjtBQUNBLG1CQUFPO0FBQ0gsNkJBQWEsU0FEVjtBQUVILDRCQUFZLEtBQUssT0FBTCxDQUFjLFNBQWQsQ0FGVDtBQUdILHdCQUFRLFdBQVksT0FBTyxLQUFQLENBQVosQ0FITDtBQUlILHVCQUFPLFdBQVksT0FBTyxLQUFQLENBQVosQ0FKSjtBQUtILHVCQUFPLFNBTEo7QUFNSCx1QkFBTyxTQU5KO0FBT0gsd0JBQVEsU0FQTDtBQVFILHdCQUFRLFNBUkw7QUFTSCx5QkFBUyxTQVROO0FBVUgseUJBQVMsV0FBWSxPQUFPLE9BQVAsQ0FBWixDQVZOO0FBV0gsd0JBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQVhMO0FBWUgsMEJBQVUsU0FaUDtBQWFILDhCQUFjLFNBYlg7QUFjSCwyQkFBVyxTQWRSO0FBZUgsOEJBQWMsU0FmWDtBQWdCSCwrQkFBZSxTQWhCWjtBQWlCSCx3QkFBUTtBQWpCTCxhQUFQO0FBbUJILFNBckdTO0FBdUdKLG9CQXZHSTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQXdHQSxRQUFLLFdBQUwsRUF4R0E7QUFBQTtBQUFBLHVCQXlHYyxRQUFLLGdCQUFMLEVBekdkO0FBQUE7QUF5R0YsdUJBekdFO0FBMEdGLG1CQTFHRSxHQTBHSSxPQUFPLElBQVAsQ0FBYSxPQUFiLENBMUdKO0FBMkdGLHNCQTNHRSxHQTJHTyxFQTNHUDs7QUE0R04scUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxJQUFJLE1BQXhCLEVBQWdDLEdBQWhDLEVBQXFDO0FBQzdCLHNCQUQ2QixHQUN4QixJQUFJLENBQUosQ0FEd0I7QUFFN0IsMEJBRjZCLEdBRXBCLFFBQUssYUFBTCxDQUFtQixFQUFuQixDQUZvQjtBQUc3QiwwQkFINkIsR0FHcEIsT0FBTyxRQUFQLENBSG9CO0FBSTdCLDBCQUo2QixHQUlwQixRQUFRLEVBQVIsQ0FKb0I7O0FBS2pDLDJCQUFPLE1BQVAsSUFBaUIsUUFBSyxXQUFMLENBQWtCLE1BQWxCLEVBQTBCLE1BQTFCLENBQWpCO0FBQ0g7QUFDRCx1QkFBTyxNQUFQO0FBbkhNO0FBQUE7QUFzSEosbUJBdEhJLHVCQXNIUyxNQXRIVDtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBdUhBLFFBQUssV0FBTCxFQXZIQTtBQUFBO0FBd0hGLGlCQXhIRSxHQXdIRSxRQUFLLE1BQUwsQ0FBYSxNQUFiLENBeEhGO0FBQUEsdUJBeUhjLFFBQUssZ0JBQUwsRUF6SGQ7QUFBQTtBQXlIRix1QkF6SEU7QUEwSEYsc0JBMUhFLEdBMEhPLFFBQVEsRUFBRSxJQUFGLENBQVIsQ0ExSFA7O0FBMkhOLHVCQUFPLFFBQUssV0FBTCxDQUFrQixNQUFsQixFQUEwQixDQUExQixDQUFQO0FBM0hNO0FBQUE7QUE4SEosc0JBOUhJLDBCQThIWSxNQTlIWjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBOEhvQixzQkE5SHBCLGdGQThINkIsRUE5SDdCO0FBQUEsdUJBK0hBLFFBQUssV0FBTCxFQS9IQTtBQUFBO0FBQUEsdUJBZ0lnQixRQUFLLG9CQUFMLENBQTJCLFFBQUssTUFBTCxDQUFhO0FBQzFELCtCQUFXLFFBQUssUUFBTCxDQUFlLE1BQWY7QUFEK0MsaUJBQWIsRUFFOUMsTUFGOEMsQ0FBM0IsQ0FoSWhCO0FBQUE7QUFnSUYseUJBaElFO0FBbUlGLHlCQW5JRSxHQW1JVSxTQUFVLFNBQVUsVUFBVSxNQUFWLENBQVYsSUFBK0IsSUFBekMsQ0FuSVY7QUFvSUYsc0JBcElFLEdBb0lPO0FBQ1QsNEJBQVEsRUFEQztBQUVULDRCQUFRLEVBRkM7QUFHVCxpQ0FBYSxTQUhKO0FBSVQsZ0NBQVksUUFBSyxPQUFMLENBQWMsU0FBZDtBQUpILGlCQXBJUDtBQTBJRixxQkExSUUsR0EwSU0sRUFBRSxRQUFRLEtBQVYsRUFBaUIsUUFBUSxLQUF6QixFQTFJTjtBQTJJRixvQkEzSUUsR0EySUssT0FBTyxJQUFQLENBQWEsS0FBYixDQTNJTDs7QUE0SU4scUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxLQUFLLE1BQXpCLEVBQWlDLEdBQWpDLEVBQXNDO0FBQzlCLHVCQUQ4QixHQUN4QixLQUFLLENBQUwsQ0FEd0I7QUFFOUIsd0JBRjhCLEdBRXZCLE1BQU0sR0FBTixDQUZ1QjtBQUc5QiwwQkFIOEIsR0FHckIsVUFBVSxJQUFWLENBSHFCOztBQUlsQyx5QkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLE9BQU8sTUFBM0IsRUFBbUMsR0FBbkMsRUFBd0M7QUFDaEMsNkJBRGdDLEdBQ3hCLE9BQU8sQ0FBUCxDQUR3QjtBQUVoQyw2QkFGZ0MsR0FFeEIsV0FBWSxNQUFNLE9BQU4sQ0FBWixDQUZ3QjtBQUdoQyw4QkFIZ0MsR0FHdkIsV0FBWSxNQUFNLFFBQU4sQ0FBWixDQUh1Qjs7QUFJcEMsK0JBQU8sR0FBUCxFQUFZLElBQVosQ0FBa0IsQ0FBRSxLQUFGLEVBQVMsTUFBVCxDQUFsQjtBQUNIO0FBQ0o7QUFDRCx1QkFBTyxNQUFQO0FBdkpNO0FBQUE7QUEwSkosbUJBMUpJLHVCQTBKUyxNQTFKVDtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQTBKaUIsc0JBMUpqQixnRkEwSjBCLEVBMUoxQjtBQUFBLHVCQTJKQSxRQUFLLFdBQUwsRUEzSkE7QUFBQTtBQTRKTix1QkFBTyxRQUFLLHNCQUFMLENBQTZCLFFBQUssTUFBTCxDQUFhO0FBQzdDLCtCQUFXLFFBQUssUUFBTCxDQUFlLE1BQWY7QUFEa0MsaUJBQWIsRUFFakMsTUFGaUMsQ0FBN0IsQ0FBUDtBQTVKTTtBQUFBO0FBaUtKLG9CQWpLSTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkFrS0EsUUFBSyxXQUFMLEVBbEtBO0FBQUE7QUFBQSx1QkFtS2UsUUFBSyxrQkFBTCxFQW5LZjtBQUFBO0FBbUtGLHdCQW5LRTtBQW9LRixzQkFwS0UsR0FvS08sRUFBRSxRQUFRLFFBQVYsRUFwS1A7QUFxS0YsMEJBcktFLEdBcUtXLE9BQU8sSUFBUCxDQUFhLFFBQWIsQ0FyS1g7QUFzS0YsdUJBdEtFLEdBc0tRLEVBdEtSOztBQXVLTixxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFdBQVcsTUFBL0IsRUFBdUMsR0FBdkMsRUFBNEM7QUFDcEMsNEJBRG9DLEdBQ3pCLFdBQVcsQ0FBWCxDQUR5QjtBQUVwQywyQkFGb0MsR0FFMUIsU0FBUyxRQUFULENBRjBCOztBQUd4QywrQkFBVyxTQUFTLFdBQVQsRUFBWDtBQUNBO0FBQ0Esd0JBQUksWUFBWSxLQUFoQjtBQUNJLG1DQUFXLE1BQVg7QUFESixxQkFFQSxRQUFRLFFBQVIsSUFBb0IsT0FBcEI7QUFDSDtBQUNELHFCQUFTLEVBQVQsR0FBYSxDQUFiLEVBQWdCLEtBQUksUUFBSyxVQUFMLENBQWdCLE1BQXBDLEVBQTRDLElBQTVDLEVBQWlEO0FBQ3pDLDhCQUR5QyxHQUM5QixRQUFLLFVBQUwsQ0FBZ0IsRUFBaEIsQ0FEOEI7QUFFekMsNkJBRnlDLEdBRS9CO0FBQ1YsZ0NBQVEsU0FERTtBQUVWLGdDQUFRLFNBRkU7QUFHVixpQ0FBUztBQUhDLHFCQUYrQjs7QUFPN0Msd0JBQUksY0FBWSxPQUFoQixFQUF5QjtBQUNyQixrQ0FBUSxNQUFSLElBQWtCLFdBQVksUUFBUSxVQUFSLEVBQWtCLE9BQWxCLENBQVosQ0FBbEI7QUFDQSxrQ0FBUSxNQUFSLElBQWtCLFdBQVksUUFBUSxVQUFSLEVBQWtCLFFBQWxCLENBQVosQ0FBbEI7QUFDQSxrQ0FBUSxPQUFSLElBQW1CLFFBQUssR0FBTCxDQUFVLFVBQVEsTUFBUixDQUFWLEVBQTJCLFVBQVEsTUFBUixDQUEzQixDQUFuQjtBQUNIO0FBQ0QsMkJBQU8sVUFBUCxJQUFtQixTQUFuQjtBQUNIO0FBQ0QsdUJBQU8sTUFBUDtBQTlMTTtBQUFBO0FBaU1WLGNBak1VLG9CQWlNQTtBQUNOLG1CQUFPLEtBQUssaUJBQUwsQ0FBd0I7QUFDM0IseUJBQVMsS0FBSyxLQURhO0FBRTNCLDBCQUFVLEtBQUs7QUFGWSxhQUF4QixDQUFQO0FBSUgsU0F0TVM7QUF3TUosbUJBeE1JLHVCQXdNUyxNQXhNVCxFQXdNaUIsSUF4TWpCLEVBd011QixJQXhNdkIsRUF3TTZCLE1BeE03QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQXdNcUMscUJBeE1yQyxnRkF3TTZDLFNBeE03QztBQXdNd0Qsc0JBeE14RCxnRkF3TWlFLEVBeE1qRTtBQUFBLHVCQXlNQSxTQUFLLFdBQUwsRUF6TUE7QUFBQTtBQTBNRixxQkExTUUsR0EwTU07QUFDUiwrQkFBVyxTQUFLLFFBQUwsQ0FBZSxNQUFmLENBREg7QUFFUiwyQkFBUSxRQUFRLEtBQVQsR0FBa0IsS0FBbEIsR0FBMEIsS0FGekI7QUFHUiw4QkFBVTtBQUhGLGlCQTFNTjs7QUErTU4sb0JBQUksUUFBUSxPQUFaO0FBQ0ksMEJBQU0sT0FBTixJQUFpQixLQUFqQjtBQURKLGlCQS9NTSxPQWlOYSxTQUFLLHNCQUFMLENBQTZCLFNBQUssTUFBTCxDQUFhLEtBQWIsRUFBb0IsTUFBcEIsQ0FBN0IsQ0FqTmI7QUFBQTtBQWlORixzQkFqTkU7O0FBa05OLHVCQUFPO0FBQ0gsNEJBQVEsTUFETDtBQUVILDBCQUFNLE9BQU8sSUFBUDtBQUZILGlCQUFQO0FBbE5NO0FBQUE7QUF3TkosbUJBeE5JLHVCQXdOUyxFQXhOVDtBQUFBOztBQUFBO0FBQUEsdUJBeU5BLFNBQUssV0FBTCxFQXpOQTtBQUFBO0FBME5OLHVCQUFPLFNBQUssc0JBQUwsQ0FBNkIsRUFBRSxNQUFNLEVBQVIsRUFBN0IsQ0FBUDtBQTFOTTtBQUFBO0FBNk5WLGVBN05VLG1CQTZORCxJQTdOQyxFQTZOeUY7QUFBQSxnQkFBcEYsR0FBb0YsdUVBQTlFLFFBQThFO0FBQUEsZ0JBQXBFLE1BQW9FLHVFQUEzRCxLQUEyRDtBQUFBLGdCQUFwRCxNQUFvRCx1RUFBM0MsRUFBMkM7QUFBQSxnQkFBdkMsT0FBdUMsdUVBQTdCLFNBQTZCO0FBQUEsZ0JBQWxCLElBQWtCLHVFQUFYLFNBQVc7O0FBQy9GLGdCQUFJLE1BQU0sS0FBSyxJQUFMLENBQVUsS0FBVixJQUFtQixHQUFuQixHQUF5QixLQUFLLE9BQTlCLEdBQXdDLEdBQXhDLEdBQThDLElBQXhEO0FBQ0EsZ0JBQUksT0FBTyxRQUFYLEVBQXFCO0FBQ2pCLG9CQUFJLE9BQU8sSUFBUCxDQUFhLE1BQWIsRUFBcUIsTUFBekIsRUFDSSxPQUFPLE1BQU0sS0FBSyxTQUFMLENBQWdCLE1BQWhCLENBQWI7QUFDUCxhQUhELE1BR087QUFDSCx1QkFBTyxLQUFLLElBQUwsQ0FBVyxLQUFLLE1BQUwsQ0FBYSxFQUFFLFNBQVMsS0FBSyxNQUFoQixFQUFiLEVBQXVDLE1BQXZDLENBQVgsQ0FBUDtBQUNBLDBCQUFVLEVBQUUsZ0JBQWdCLGtCQUFsQixFQUFWO0FBQ0g7QUFDRCxtQkFBTyxLQUFLLEtBQUwsQ0FBWSxHQUFaLEVBQWlCLE1BQWpCLEVBQXlCLE9BQXpCLEVBQWtDLElBQWxDLENBQVA7QUFDSDtBQXZPUyxLQUFkOztBQTBPQTs7QUFFQSxRQUFJLFlBQVk7O0FBRVosY0FBTSxXQUZNO0FBR1osZ0JBQVEsV0FISTtBQUlaLHFCQUFhLENBQUUsSUFBRixFQUFRLElBQVIsQ0FKRDtBQUtaLHFCQUFhLElBTEQ7QUFNWixnQkFBUTtBQUNKLG9CQUFRLHFHQURKO0FBRUosbUJBQU87QUFDSCwwQkFBVSwyQkFEUDtBQUVILDJCQUFXLGdDQUZSLENBRTBDO0FBRjFDLGFBRkg7QUFNSixtQkFBTyxDQUNILDBCQURHLEVBRUgsMkJBRkcsQ0FOSDtBQVVKLG1CQUFPLENBQ0gseURBREcsRUFFSCwwREFGRyxFQUdILHNDQUhHO0FBVkgsU0FOSTtBQXNCWixlQUFPO0FBQ0gsc0JBQVU7QUFDTix1QkFBTyxDQUNILHNCQURHLEVBRUgseUJBRkcsRUFHSCxzQkFIRyxFQUlILGdCQUpHLEVBS0gscUJBTEcsRUFNSCxvQkFORyxFQU9ILG9CQVBHLEVBUUgsb0JBUkcsRUFTSCxvQkFURyxFQVVILG9CQVZHLEVBV0gsb0JBWEcsRUFZSCxvQkFaRztBQURELGFBRFA7QUFpQkgsdUJBQVc7QUFDUCx3QkFBUSxDQUNKLE1BREksRUFFSixPQUZJLEVBR0osUUFISSxFQUlKLFFBSkksRUFLSixRQUxJLEVBTUosU0FOSSxFQU9KLGFBUEksRUFRSixhQVJJLEVBU0osbUJBVEksRUFVSixvQkFWSSxFQVdKLG1CQVhJLEVBWUoseUJBWkksRUFhSiwwQkFiSSxFQWNKLFVBZEksRUFlSixjQWZJLEVBZ0JKLGVBaEJJLEVBaUJKLGtCQWpCSSxFQWtCSixTQWxCSSxFQW1CSixVQW5CSSxFQW9CSixXQXBCSSxFQXFCSixZQXJCSSxFQXNCSixZQXRCSSxFQXVCSixhQXZCSSxFQXdCSixjQXhCSSxFQXlCSixjQXpCSSxFQTBCSixrQkExQkksRUEyQkoscUJBM0JJLEVBNEJKLFVBNUJJLEVBNkJKLFVBN0JJLEVBOEJKLFdBOUJJO0FBREQ7QUFqQlIsU0F0Qks7QUEwRVosbUJBQVc7QUFDUCx1QkFBVyxFQUFFLE1BQU0sUUFBUixFQUFrQixVQUFVLFNBQTVCLEVBQXVDLFFBQVEsS0FBL0MsRUFBc0QsU0FBUyxLQUEvRCxFQURKO0FBRVAsdUJBQVcsRUFBRSxNQUFNLFFBQVIsRUFBa0IsVUFBVSxTQUE1QixFQUF1QyxRQUFRLEtBQS9DLEVBQXNELFNBQVMsS0FBL0QsRUFGSjtBQUdQLHVCQUFXLEVBQUUsTUFBTSxRQUFSLEVBQWtCLFVBQVUsU0FBNUIsRUFBdUMsUUFBUSxLQUEvQyxFQUFzRCxTQUFTLEtBQS9ELEVBSEo7QUFJUCx1QkFBVyxFQUFFLE1BQU0sUUFBUixFQUFrQixVQUFVLFNBQTVCLEVBQXVDLFFBQVEsS0FBL0MsRUFBc0QsU0FBUyxLQUEvRCxFQUpKO0FBS1AsNkJBQWlCLEVBQUUsTUFBTSxjQUFSLEVBQXdCLFVBQVUsZUFBbEMsRUFBbUQsUUFBUSxXQUEzRCxFQUF3RSxTQUFTLEtBQWpGLEVBTFY7QUFNUCx3QkFBWSxFQUFFLE1BQU0sU0FBUixFQUFtQixVQUFVLFVBQTdCLEVBQXlDLFFBQVEsTUFBakQsRUFBeUQsU0FBUyxLQUFsRTtBQU5MLFNBMUVDOztBQW1GTixvQkFuRk07QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBb0ZGLFNBQUssV0FBTCxFQXBGRTtBQUFBO0FBQUEsdUJBcUZhLFNBQUssZUFBTCxFQXJGYjtBQUFBO0FBcUZKLHdCQXJGSTtBQXNGSixvQkF0RkksR0FzRkcsU0FBUyxNQUFULENBdEZIO0FBdUZKLHVCQXZGSSxHQXVGTSxLQUFLLFVBQUwsQ0F2Rk47QUF3Rkosc0JBeEZJLEdBd0ZLLEVBQUUsUUFBUSxJQUFWLEVBeEZMOztBQXlGUixxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFNBQUssVUFBTCxDQUFnQixNQUFwQyxFQUE0QyxHQUE1QyxFQUFpRDtBQUN6Qyw0QkFEeUMsR0FDOUIsU0FBSyxVQUFMLENBQWdCLENBQWhCLENBRDhCO0FBRXpDLDJCQUZ5QyxHQUUvQjtBQUNWLGdDQUFRLFNBREU7QUFFVixnQ0FBUSxTQUZFO0FBR1YsaUNBQVM7QUFIQyxxQkFGK0I7O0FBTzdDLHdCQUFJLFlBQVksUUFBUSxXQUFSLENBQWhCO0FBQ0ksZ0NBQVEsTUFBUixJQUFrQixRQUFRLFdBQVIsRUFBcUIsUUFBckIsQ0FBbEI7QUFESixxQkFFQSxJQUFJLFlBQVksUUFBUSxTQUFSLENBQWhCO0FBQ0ksZ0NBQVEsTUFBUixJQUFrQixRQUFRLFNBQVIsRUFBbUIsUUFBbkIsQ0FBbEI7QUFESixxQkFFQSxRQUFRLE9BQVIsSUFBbUIsU0FBSyxHQUFMLENBQVUsUUFBUSxNQUFSLENBQVYsRUFBMkIsUUFBUSxNQUFSLENBQTNCLENBQW5CO0FBQ0EsMkJBQU8sUUFBUCxJQUFtQixPQUFuQjtBQUNIO0FBQ0QsdUJBQU8sTUFBUDtBQXZHUTtBQUFBO0FBMEdOLHNCQTFHTSwwQkEwR1UsTUExR1Y7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUEwR2tCLHNCQTFHbEIsZ0ZBMEcyQixFQTFHM0I7QUFBQSx1QkEyR2MsU0FBSyw0QkFBTCxDQUFtQyxTQUFLLE1BQUwsQ0FBYTtBQUNsRSw4QkFBVSxTQUFLLFFBQUwsQ0FBZSxNQUFmO0FBRHdELGlCQUFiLEVBRXRELE1BRnNELENBQW5DLENBM0dkO0FBQUE7QUEyR0oseUJBM0dJO0FBOEdKLHlCQTlHSSxHQThHUSxTQUFLLFlBQUwsRUE5R1I7QUErR0osc0JBL0dJLEdBK0dLO0FBQ1QsNEJBQVEsVUFBVSxNQUFWLENBREM7QUFFVCw0QkFBUSxVQUFVLE1BQVYsQ0FGQztBQUdULGlDQUFhLFNBSEo7QUFJVCxnQ0FBWSxTQUFLLE9BQUwsQ0FBYyxTQUFkO0FBSkgsaUJBL0dMOztBQXFIUix1QkFBTyxNQUFQO0FBckhRO0FBQUE7QUF5SE4sbUJBekhNLHVCQXlITyxNQXpIUDtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQTBIVyxTQUFLLHlCQUFMLENBQWdDO0FBQy9DLDhCQUFVLFNBQUssUUFBTCxDQUFlLE1BQWY7QUFEcUMsaUJBQWhDLENBMUhYO0FBQUE7QUEwSEosc0JBMUhJO0FBNkhKLHlCQTdISSxHQTZIUSxTQUFLLFlBQUwsRUE3SFI7O0FBOEhSLHVCQUFPO0FBQ0gsaUNBQWEsU0FEVjtBQUVILGdDQUFZLFNBQUssT0FBTCxDQUFjLFNBQWQsQ0FGVDtBQUdILDRCQUFRLFdBQVksT0FBTyxNQUFQLENBQVosQ0FITDtBQUlILDJCQUFPLFdBQVksT0FBTyxLQUFQLENBQVosQ0FKSjtBQUtILDJCQUFPLFdBQVksT0FBTyxLQUFQLENBQVosQ0FMSjtBQU1ILDJCQUFPLFdBQVksT0FBTyxLQUFQLENBQVosQ0FOSjtBQU9ILDRCQUFRLFdBQVksT0FBTyxNQUFQLENBQVosQ0FQTDtBQVFILDRCQUFRLFNBUkw7QUFTSCw2QkFBUyxTQVROO0FBVUgsNkJBQVMsU0FWTjtBQVdILDRCQUFRLFdBQVksT0FBTyxNQUFQLENBQVosQ0FYTDtBQVlILDhCQUFVLFNBWlA7QUFhSCxrQ0FBYyxTQWJYO0FBY0gsK0JBQVcsU0FkUjtBQWVILGtDQUFjLFNBZlg7QUFnQkgsbUNBQWUsV0FBWSxPQUFPLFFBQVAsQ0FBWixDQWhCWjtBQWlCSCw0QkFBUTtBQWpCTCxpQkFBUDtBQTlIUTtBQUFBO0FBbUpOLG1CQW5KTSx1QkFtSk8sTUFuSlA7QUFBQTtBQUFBO0FBQUE7O0FBbUplLGtCQW5KZixnRkFtSndCLEVBbkp4Qjs7QUFvSlIsbUJBQU8sU0FBSyx5QkFBTCxDQUFnQyxTQUFLLE1BQUwsQ0FBYTtBQUNoRCwwQkFBVSxTQUFLLFFBQUwsQ0FBZSxNQUFmO0FBRHNDLGFBQWIsRUFFcEMsTUFGb0MsQ0FBaEMsQ0FBUDtBQXBKUTtBQXlKTixtQkF6Sk0sdUJBeUpPLE1BekpQLEVBeUplLElBekpmLEVBeUpxQixJQXpKckIsRUF5SjJCLE1BekozQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQXlKbUMscUJBekpuQyxnRkF5SjJDLFNBekozQztBQXlKc0Qsc0JBekp0RCxnRkF5SitELEVBekovRDtBQUFBLHVCQTBKYSxTQUFLLGdCQUFMLENBQXVCLFNBQUssTUFBTCxDQUFhO0FBQ3JELDhCQUFVLFNBQUssUUFBTCxDQUFlLE1BQWYsQ0FEMkM7QUFFckQsNEJBQVEsSUFGNkM7QUFHckQsOEJBQVUsTUFIMkM7QUFJckQsNEJBQVE7QUFKNkMsaUJBQWIsRUFLekMsTUFMeUMsQ0FBdkIsQ0ExSmI7QUFBQTtBQTBKSix3QkExSkk7QUFnS0osc0JBaEtJLEdBZ0tLO0FBQ1QsNEJBQVE7QUFEQyxpQkFoS0w7O0FBbUtSLG9CQUFJLFFBQVEsU0FBUyxPQUFULENBQVo7QUFDSSwyQkFBTyxJQUFQLElBQWUsU0FBUyxJQUFULENBQWY7QUFESixpQkFFQSxPQUFPLE1BQVA7QUFyS1E7QUFBQTtBQXdLTixtQkF4S00sdUJBd0tPLEVBeEtQO0FBQUE7O0FBeUtSLG1CQUFPLFNBQUssaUJBQUwsQ0FBd0IsRUFBRSxNQUFNLEVBQVIsRUFBeEIsQ0FBUDtBQXpLUTtBQTRLWixlQTVLWSxtQkE0S0gsSUE1S0csRUE0S3VGO0FBQUEsZ0JBQXBGLEdBQW9GLHVFQUE5RSxRQUE4RTtBQUFBLGdCQUFwRSxNQUFvRSx1RUFBM0QsS0FBMkQ7QUFBQSxnQkFBcEQsTUFBb0QsdUVBQTNDLEVBQTJDO0FBQUEsZ0JBQXZDLE9BQXVDLHVFQUE3QixTQUE2QjtBQUFBLGdCQUFsQixJQUFrQix1RUFBWCxTQUFXOztBQUMvRixnQkFBSSxNQUFNLEtBQUssSUFBTCxDQUFVLEtBQVYsRUFBaUIsR0FBakIsQ0FBVjtBQUNBLGdCQUFJLE9BQU8sUUFBWCxFQUFxQjtBQUNqQix1QkFBTyxNQUFNLEtBQUssYUFBTCxDQUFvQixPQUFPLE9BQTNCLEVBQW9DLE1BQXBDLENBQWI7QUFDSCxhQUZELE1BRU87QUFDSCxvQkFBSSxRQUFRLEtBQUssS0FBTCxFQUFaO0FBQ0Esb0JBQUksUUFBUSxLQUFLLE1BQUwsQ0FBYTtBQUNyQiw2QkFBUyxLQURZO0FBRXJCLDhCQUFVO0FBRlcsaUJBQWIsRUFHVCxNQUhTLENBQVo7QUFJQSx1QkFBTyxLQUFLLFNBQUwsQ0FBZ0IsS0FBaEIsQ0FBUDtBQUNBLDBCQUFVO0FBQ04sK0JBQVcsS0FBSyxNQURWO0FBRU4sZ0NBQVksS0FBSyxJQUFMLENBQVcsS0FBSyxNQUFMLENBQWEsSUFBYixDQUFYLEVBQStCLEtBQUssTUFBTCxDQUFhLEtBQUssTUFBbEIsQ0FBL0IsRUFBMEQsUUFBMUQ7QUFGTixpQkFBVjtBQUlIO0FBQ0QsbUJBQU8sS0FBSyxLQUFMLENBQVksR0FBWixFQUFpQixNQUFqQixFQUF5QixPQUF6QixFQUFrQyxJQUFsQyxDQUFQO0FBQ0g7QUE3TFcsS0FBaEI7O0FBZ01BOztBQUVBLFFBQUksU0FBUzs7QUFFVCxjQUFNLFFBRkc7QUFHVCxnQkFBUSxRQUhDO0FBSVQscUJBQWEsSUFKSixFQUlVO0FBQ25CLG1CQUFXLElBTEY7QUFNVCxxQkFBYSxJQU5KO0FBT1QsZ0JBQVE7QUFDSixvQkFBUSxxR0FESjtBQUVKLG1CQUFPLHdCQUZIO0FBR0osbUJBQU8sd0JBSEg7QUFJSixtQkFBTyxDQUNILHdDQURHLEVBRUgsb0VBRkc7QUFKSCxTQVBDO0FBZ0JULGVBQU87QUFDSCxzQkFBVTtBQUNOLHVCQUFPLENBQ0gsY0FERyxFQUVILHFCQUZHLEVBR0gsU0FIRyxFQUlILFlBSkcsRUFLSCxtQkFMRyxFQU1ILDZCQU5HLEVBT0gsNEJBUEcsRUFRSCwyQkFSRyxFQVNILG9CQVRHLEVBVUgsV0FWRyxFQVdILGFBWEcsRUFZSCxhQVpHLEVBYUgsV0FiRyxFQWNILGNBZEcsRUFlSCxPQWZHLEVBZ0JILGdCQWhCRyxFQWlCSCxRQWpCRyxFQWtCSCxzQkFsQkcsRUFtQkgsWUFuQkcsRUFvQkgsT0FwQkcsRUFxQkgsZUFyQkcsRUFzQkgsT0F0QkcsRUF1QkgsZ0JBdkJHO0FBREQsYUFEUDtBQTRCSCx1QkFBVztBQUNQLHVCQUFPLENBQ0gsUUFERyxFQUVILE1BRkcsRUFHSCxlQUhHLEVBSUgsZ0JBSkcsRUFLSCxXQUxHLEVBTUgsd0JBTkcsRUFPSCxjQVBHLEVBUUgsT0FSRyxFQVNILFVBVEcsRUFVSCxNQVZHLEVBV0gsc0JBWEcsRUFZSCx3QkFaRyxFQWFILGlCQWJHLEVBY0gscUJBZEcsRUFlSCxhQWZHLEVBZ0JILHVCQWhCRyxFQWlCSCxhQWpCRyxFQWtCSCxvQkFsQkcsRUFtQkgsb0JBbkJHLENBREE7QUFzQlAsd0JBQVEsQ0FDSixRQURJLEVBRUosZ0JBRkksRUFHSixlQUhJLEVBSUosTUFKSSxFQUtKLE9BTEksRUFNSixZQU5JLEVBT0osc0JBUEksRUFRSixxQkFSSSxFQVNKLGtCQVRJLEVBVUosbUJBVkksRUFXSixvQkFYSSxFQVlKLHlCQVpJLEVBYUosdUJBYkksRUFjSixtQkFkSSxFQWVKLHVCQWZJLEVBZ0JKLHdCQWhCSSxFQWlCSixpQkFqQkksRUFrQkosYUFsQkksRUFtQkosZ0JBbkJJLEVBb0JKLGtCQXBCSSxFQXFCSix1QkFyQkksRUFzQkosd0JBdEJJLENBdEJEO0FBOENQLHVCQUFPLENBQ0gsT0FERyxFQUVILFlBRkcsRUFHSCxNQUhHLENBOUNBO0FBbURQLDBCQUFVLENBQ04sUUFETSxFQUVOLE9BRk0sRUFHTixXQUhNO0FBbkRIO0FBNUJSLFNBaEJFOztBQXVHSCxvQkF2R0c7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQXdHZSxTQUFLLHlCQUFMLEVBeEdmO0FBQUE7QUF3R0QsdUJBeEdDO0FBeUdELHNCQXpHQyxHQXlHUSxFQXpHUjs7QUEwR0wscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxRQUFRLE1BQTVCLEVBQW9DLEdBQXBDLEVBQXlDO0FBQ2pDLDBCQURpQyxHQUN4QixRQUFRLENBQVIsQ0FEd0I7QUFFakMsc0JBRmlDLEdBRTVCLE9BQU8sUUFBUCxDQUY0QjtBQUdqQyx3QkFIaUMsR0FHMUIsT0FBTyxZQUFQLENBSDBCO0FBSWpDLHlCQUppQyxHQUl6QixPQUFPLGVBQVAsQ0FKeUI7QUFLakMscUNBTGlDLEdBS2IsTUFBTyxPQUFPLEtBTEQ7O0FBTXJDLDJCQUFPLFNBQUssa0JBQUwsQ0FBeUIsSUFBekIsQ0FBUDtBQUNBLDRCQUFRLFNBQUssa0JBQUwsQ0FBeUIsS0FBekIsQ0FBUjtBQUNJLDBCQVJpQyxHQVF4QixvQkFBb0IsRUFBcEIsR0FBMEIsT0FBTyxHQUFQLEdBQWEsS0FSZjs7QUFTckMsMkJBQU8sSUFBUCxDQUFhO0FBQ1QsOEJBQU0sRUFERztBQUVULGtDQUFVLE1BRkQ7QUFHVCxnQ0FBUSxJQUhDO0FBSVQsaUNBQVMsS0FKQTtBQUtULGdDQUFRO0FBTEMscUJBQWI7QUFPSDtBQUNELHVCQUFPLE1BQVA7QUEzSEs7QUFBQTtBQThISCxvQkE5SEc7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQStIQyxTQUFLLFdBQUwsRUEvSEQ7QUFBQTtBQUFBLHVCQWdJZ0IsU0FBSyxvQkFBTCxDQUEyQixFQUFFLFlBQVksS0FBZCxFQUEzQixDQWhJaEI7QUFBQTtBQWdJRCx3QkFoSUM7QUFpSUQsc0JBaklDLEdBaUlRLEVBQUUsUUFBUSxRQUFWLEVBaklSOztBQWtJTCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFNBQVMsTUFBN0IsRUFBcUMsR0FBckMsRUFBMEM7QUFDbEMsMkJBRGtDLEdBQ3hCLFNBQVMsQ0FBVCxDQUR3QjtBQUVsQyw0QkFGa0MsR0FFdkIsUUFBUSxVQUFSLEVBQW9CLFdBQXBCLEVBRnVCOztBQUd0QywrQkFBVyxTQUFLLGtCQUFMLENBQXlCLFFBQXpCLENBQVg7QUFDSSwyQkFKa0MsR0FJeEI7QUFDVixnQ0FBUSxRQUFRLGlCQUFSLENBREU7QUFFVixnQ0FBUSxTQUZFO0FBR1YsaUNBQVMsUUFBUSxRQUFSO0FBSEMscUJBSndCOztBQVN0Qyx3QkFBSSxZQUFZLEtBQWhCLEVBQXVCO0FBQ25CLGdDQUFRLE1BQVIsSUFBa0IsUUFBUSxNQUFSLElBQWtCLFVBQXBDO0FBQ0EsZ0NBQVEsT0FBUixJQUFtQixRQUFRLE9BQVIsSUFBbUIsVUFBdEM7QUFDSDtBQUNELDRCQUFRLE1BQVIsSUFBa0IsUUFBUSxPQUFSLElBQW1CLFFBQVEsTUFBUixDQUFyQztBQUNBLDJCQUFPLFFBQVAsSUFBbUIsT0FBbkI7QUFDSDtBQUNELHVCQUFPLE1BQVA7QUFsSks7QUFBQTtBQXFKSCxzQkFySkcsMEJBcUphLE1BckpiO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQXFKcUIsc0JBckpyQixnRkFxSjhCLEVBcko5QjtBQUFBLHVCQXNKQyxTQUFLLFdBQUwsRUF0SkQ7QUFBQTtBQUFBLHVCQXVKaUIsU0FBSyxvQkFBTCxDQUEyQixTQUFLLE1BQUwsQ0FBYTtBQUMxRCw4QkFBVSxTQUFLLFFBQUwsQ0FBZSxNQUFmO0FBRGdELGlCQUFiLEVBRTlDLE1BRjhDLENBQTNCLENBdkpqQjtBQUFBO0FBdUpELHlCQXZKQztBQTBKRCx5QkExSkMsR0EwSlcsU0FBSyxZQUFMLEVBMUpYO0FBMkpELHNCQTNKQyxHQTJKUTtBQUNULDRCQUFRLEVBREM7QUFFVCw0QkFBUSxFQUZDO0FBR1QsaUNBQWEsU0FISjtBQUlULGdDQUFZLFNBQUssT0FBTCxDQUFjLFNBQWQ7QUFKSCxpQkEzSlI7O0FBaUtMLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksVUFBVSxNQUE5QixFQUFzQyxHQUF0QyxFQUEyQztBQUNuQyx5QkFEbUMsR0FDM0IsVUFBVSxDQUFWLENBRDJCO0FBRW5DLHdCQUZtQyxHQUUzQixNQUFNLE1BQU4sS0FBaUIsTUFBbEIsR0FBNEIsTUFBNUIsR0FBcUMsTUFGVDtBQUduQywwQkFIbUMsR0FHMUIsTUFBTSxNQUFOLENBSDBCO0FBSW5DLHlCQUptQyxHQUkzQixNQUFNLE9BQU4sQ0FKMkI7O0FBS3ZDLDJCQUFPLElBQVAsRUFBYSxJQUFiLENBQW1CLENBQUUsS0FBRixFQUFTLE1BQVQsQ0FBbkI7QUFDSDtBQUNELHVCQUFPLE1BQVAsSUFBaUIsU0FBSyxNQUFMLENBQWEsT0FBTyxNQUFQLENBQWIsRUFBNkIsQ0FBN0IsRUFBZ0MsSUFBaEMsQ0FBakI7QUFDQSx1QkFBTyxNQUFQLElBQWlCLFNBQUssTUFBTCxDQUFhLE9BQU8sTUFBUCxDQUFiLEVBQTZCLENBQTdCLENBQWpCO0FBQ0EsdUJBQU8sTUFBUDtBQTFLSztBQUFBO0FBNktILG1CQTdLRyx1QkE2S1UsTUE3S1Y7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBOEtDLFNBQUssV0FBTCxFQTlLRDtBQUFBO0FBK0tELHVCQS9LQyxHQStLUztBQUNWLDhCQUFVLFNBQUssUUFBTCxDQUFlLE1BQWYsQ0FEQTtBQUVWLCtCQUFXLElBRkQ7QUFHViwrQkFBVyxJQUhEO0FBSVYsNkJBQVMsQ0FKQztBQUtWLCtCQUFXO0FBTEQsaUJBL0tUO0FBQUEsdUJBc0xjLFNBQUssc0JBQUwsQ0FBNkIsT0FBN0IsQ0F0TGQ7QUFBQTtBQXNMRCxzQkF0TEM7QUF1TEQsNEJBdkxDLEdBdUxjLE9BQU8sTUF2THJCO0FBd0xELHFCQXhMQyxHQXdMTyxPQUFPLGVBQWUsQ0FBdEIsQ0F4TFA7QUFBQSx1QkF5TGUsU0FBSyxzQkFBTCxDQUE2QixPQUE3QixDQXpMZjtBQUFBO0FBeUxELHVCQXpMQztBQTBMRCxzQkExTEMsR0EwTFEsUUFBUSxDQUFSLENBMUxSO0FBMkxELHlCQTNMQyxHQTJMVyxTQUFLLFlBQUwsRUEzTFg7O0FBNExMLHVCQUFPO0FBQ0gsaUNBQWEsU0FEVjtBQUVILGdDQUFZLFNBQUssT0FBTCxDQUFjLFNBQWQsQ0FGVDtBQUdILDRCQUFRLFdBQVksT0FBTyxNQUFQLENBQVosQ0FITDtBQUlILDJCQUFPLFdBQVksT0FBTyxLQUFQLENBQVosQ0FKSjtBQUtILDJCQUFPLFdBQVksTUFBTSxVQUFOLENBQVosQ0FMSjtBQU1ILDJCQUFPLFdBQVksTUFBTSxVQUFOLENBQVosQ0FOSjtBQU9ILDRCQUFRLFdBQVksT0FBTyxNQUFQLENBQVosQ0FQTDtBQVFILDRCQUFRLFNBUkw7QUFTSCw2QkFBUyxXQUFZLE9BQU8sT0FBUCxDQUFaLENBVE47QUFVSCw2QkFBUyxTQVZOO0FBV0gsNEJBQVEsU0FYTDtBQVlILDhCQUFVLFNBWlA7QUFhSCxrQ0FBYyxTQWJYO0FBY0gsK0JBQVcsU0FkUjtBQWVILGtDQUFjLFdBQVksT0FBTyxjQUFQLENBQVosQ0FmWDtBQWdCSCxtQ0FBZSxXQUFZLE9BQU8saUJBQVAsQ0FBWixDQWhCWjtBQWlCSCw0QkFBUTtBQWpCTCxpQkFBUDtBQTVMSztBQUFBO0FBaU5ILG1CQWpORyx1QkFpTlUsTUFqTlY7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFpTmtCLHNCQWpObEIsZ0ZBaU4yQixFQWpOM0I7QUFBQSx1QkFrTkMsU0FBSyxXQUFMLEVBbE5EO0FBQUE7QUFtTkwsdUJBQU8sU0FBSyxjQUFMLENBQXFCLFNBQUssTUFBTCxDQUFhO0FBQ3JDLDhCQUFVLFNBQUssUUFBTCxDQUFlLE1BQWY7QUFEMkIsaUJBQWIsRUFFekIsTUFGeUIsQ0FBckIsQ0FBUDtBQW5OSztBQUFBO0FBd05ILG1CQXhORyx1QkF3TlUsTUF4TlYsRUF3TmtCLElBeE5sQixFQXdOd0IsSUF4TnhCLEVBd044QixNQXhOOUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUF3TnNDLHFCQXhOdEMsZ0ZBd044QyxTQXhOOUM7QUF3TnlELHNCQXhOekQsZ0ZBd05rRSxFQXhObEU7QUFBQSx1QkF5TkMsU0FBSyxXQUFMLEVBek5EO0FBQUE7QUEwTkQscUJBMU5DLEdBME5PO0FBQ1IsOEJBQVUsU0FBSyxRQUFMLENBQWUsTUFBZixDQURGO0FBRVIsNEJBQVEsU0FBSyxVQUFMLENBQWlCLElBQWpCLENBRkE7QUFHUixnQ0FBWSxNQUhKO0FBSVIsK0JBQVcsU0FBSyxVQUFMLENBQWlCLElBQWpCO0FBSkgsaUJBMU5QOztBQWdPTCxvQkFBSSxRQUFRLE9BQVo7QUFDSSwwQkFBTSxNQUFOLElBQWdCLEtBQWhCO0FBREosaUJBaE9LLE9Ba09nQixTQUFLLGdCQUFMLENBQXVCLFNBQUssTUFBTCxDQUFhLEtBQWIsRUFBb0IsTUFBcEIsQ0FBdkIsQ0FsT2hCO0FBQUE7QUFrT0Qsd0JBbE9DOztBQW1PTCx1QkFBTztBQUNILDRCQUFRLFFBREw7QUFFSCwwQkFBTSxTQUFTLFNBQVQ7QUFGSCxpQkFBUDtBQW5PSztBQUFBO0FBeU9ILG1CQXpPRyx1QkF5T1UsRUF6T1Y7QUFBQTs7QUFBQTtBQUFBLHVCQTBPQyxTQUFLLFdBQUwsRUExT0Q7QUFBQTtBQTJPTCx1QkFBTyxTQUFLLGtCQUFMLENBQXlCLEVBQUUsV0FBVyxFQUFiLEVBQXpCLENBQVA7QUEzT0s7QUFBQTtBQThPVCxlQTlPUyxtQkE4T0EsSUE5T0EsRUE4TzBGO0FBQUEsZ0JBQXBGLEdBQW9GLHVFQUE5RSxRQUE4RTtBQUFBLGdCQUFwRSxNQUFvRSx1RUFBM0QsS0FBMkQ7QUFBQSxnQkFBcEQsTUFBb0QsdUVBQTNDLEVBQTJDO0FBQUEsZ0JBQXZDLE9BQXVDLHVFQUE3QixTQUE2QjtBQUFBLGdCQUFsQixJQUFrQix1RUFBWCxTQUFXOztBQUMvRixnQkFBSSxRQUFRLFVBQVUsS0FBSyxPQUFmLEdBQXlCLEdBQXpCLEdBQStCLElBQTNDO0FBQ0EsZ0JBQUksT0FBTyxJQUFQLENBQWEsTUFBYixFQUFxQixNQUF6QixFQUNJLFNBQVMsTUFBTSxLQUFLLFNBQUwsQ0FBZ0IsTUFBaEIsQ0FBZjtBQUNKLGdCQUFJLE1BQU0sS0FBSyxJQUFMLENBQVUsS0FBVixJQUFtQixLQUE3QjtBQUNBLGdCQUFJLE9BQU8sU0FBWCxFQUFzQjtBQUNsQixvQkFBSSxRQUFRLEtBQUssS0FBTCxHQUFjLFFBQWQsRUFBWjtBQUNBLG9CQUFJLFVBQVUsTUFBZCxFQUNJLElBQUksT0FBTyxJQUFQLENBQWEsTUFBYixFQUFxQixNQUF6QixFQUNJLE9BQU8sS0FBSyxJQUFMLENBQVcsTUFBWCxDQUFQO0FBQ1Isb0JBQUksVUFBVSxDQUFFLE1BQUYsRUFBVSxLQUFWLEVBQWlCLEtBQWpCLEVBQXdCLFFBQVEsRUFBaEMsRUFBb0MsSUFBcEMsQ0FBMEMsRUFBMUMsQ0FBZDtBQUNBLDBCQUFVO0FBQ04sb0NBQWdCLGtCQURWO0FBRU4saUNBQWEsS0FGUDtBQUdOLCtCQUFXLEtBQUssTUFIVjtBQUlOLHFDQUFpQixLQUFLLElBQUwsQ0FBVyxLQUFLLE1BQUwsQ0FBYSxPQUFiLENBQVgsRUFBa0MsS0FBSyxNQUFMLENBQWEsS0FBSyxNQUFsQixDQUFsQztBQUpYLGlCQUFWO0FBTUg7QUFDRCxtQkFBTyxLQUFLLEtBQUwsQ0FBWSxHQUFaLEVBQWlCLE1BQWpCLEVBQXlCLE9BQXpCLEVBQWtDLElBQWxDLENBQVA7QUFDSDtBQWpRUSxLQUFiOztBQW9RQTs7QUFFQSxRQUFJLFFBQVE7O0FBRVIsY0FBTSxPQUZFO0FBR1IsZ0JBQVEsT0FIQTtBQUlSLHFCQUFhLElBSkwsRUFJVztBQUNuQixxQkFBYSxJQUxMLEVBS1c7QUFDbkIsbUJBQVcsSUFOSDtBQU9SLGdCQUFRO0FBQ0osb0JBQVEscUdBREo7QUFFSixtQkFBTyx1QkFGSDtBQUdKLG1CQUFPLG1CQUhIO0FBSUosbUJBQU87QUFKSCxTQVBBO0FBYVIsZUFBTztBQUNILHNCQUFVO0FBQ04sdUJBQU8sQ0FDSCxpQkFERyxFQUVILFFBRkcsRUFHSCxZQUhHLEVBSUgsUUFKRztBQURELGFBRFA7QUFTSCx1QkFBVztBQUNQLHVCQUFPLENBQ0gsZ0JBREcsRUFFSCxTQUZHLEVBR0gsTUFIRyxFQUlILFVBSkcsRUFLSCxnQkFMRyxFQU1ILHFCQU5HLEVBT0gsZUFQRyxFQVFILFFBUkcsRUFTSCxlQVRHLEVBVUgsYUFWRyxFQVdILGlCQVhHLEVBWUgsb0JBWkcsRUFhSCxlQWJHLEVBY0gsYUFkRyxFQWVILG9CQWZHLEVBZ0JILGNBaEJHLEVBaUJILGFBakJHLEVBa0JILG1CQWxCRyxFQW1CSCxjQW5CRyxFQW9CSCxtQkFwQkcsQ0FEQTtBQXVCUCx3QkFBUSxDQUNKLG9CQURJLEVBRUosdUJBRkksRUFHSixrQkFISSxFQUlKLFFBSkksRUFLSixjQUxJLEVBTUosb0JBTkksRUFPSixrQkFQSSxFQVFKLGlCQVJJLENBdkJEO0FBaUNQLDBCQUFVLENBQ04sY0FETSxFQUVOLFlBRk07QUFqQ0g7QUFUUixTQWJDOztBQThERixvQkE5REU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBK0RnQixTQUFLLHVCQUFMLEVBL0RoQjtBQUFBO0FBK0RBLHVCQS9EQTtBQWdFQSxzQkFoRUEsR0FnRVMsRUFoRVQ7O0FBaUVKLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksUUFBUSxTQUFSLEVBQW1CLE1BQXZDLEVBQStDLEdBQS9DLEVBQW9EO0FBQzVDLDBCQUQ0QyxHQUNuQyxRQUFRLFNBQVIsRUFBbUIsQ0FBbkIsQ0FEbUM7QUFFNUMsc0JBRjRDLEdBRXZDLE9BQU8sTUFBUCxDQUZ1QztBQUc1QywwQkFINEMsR0FHbkMsR0FBRyxXQUFILEdBQWtCLE9BQWxCLENBQTJCLEdBQTNCLEVBQWdDLEdBQWhDLENBSG1DO0FBQUEscUNBSTFCLE9BQU8sS0FBUCxDQUFjLEdBQWQsQ0FKMEI7QUFBQTtBQUkxQyx3QkFKMEM7QUFJcEMseUJBSm9DOztBQUtoRCwyQkFBTyxJQUFQLENBQWE7QUFDVCw4QkFBTSxFQURHO0FBRVQsa0NBQVUsTUFGRDtBQUdULGdDQUFRLElBSEM7QUFJVCxpQ0FBUyxLQUpBO0FBS1QsZ0NBQVE7QUFMQyxxQkFBYjtBQU9IO0FBQ0QsdUJBQU8sTUFBUDtBQTlFSTtBQUFBO0FBaUZGLG9CQWpGRTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkFrRkUsU0FBSyxXQUFMLEVBbEZGO0FBQUE7QUFBQSx1QkFtRmlCLFNBQUssaUJBQUwsRUFuRmpCO0FBQUE7QUFtRkEsd0JBbkZBO0FBb0ZBLHdCQXBGQSxHQW9GVyxTQUFTLFNBQVQsRUFBb0IsVUFBcEIsQ0FwRlg7QUFxRkEsc0JBckZBLEdBcUZTLEVBQUUsUUFBUSxRQUFWLEVBckZUOztBQXNGSixxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFNBQVMsTUFBN0IsRUFBcUMsR0FBckMsRUFBMEM7QUFDbEMsMkJBRGtDLEdBQ3hCLFNBQVMsQ0FBVCxDQUR3QjtBQUVsQyw0QkFGa0MsR0FFdkIsUUFBUSxVQUFSLEVBQW9CLFdBQXBCLEVBRnVCO0FBR2xDLDJCQUhrQyxHQUd4QjtBQUNWLGdDQUFRLFdBQVksUUFBUSxXQUFSLENBQVosQ0FERTtBQUVWLGdDQUFRLFdBQVksUUFBUSxRQUFSLENBQVosQ0FGRTtBQUdWLGlDQUFTLFdBQVksUUFBUSxPQUFSLENBQVo7QUFIQyxxQkFId0I7O0FBUXRDLDJCQUFPLFFBQVAsSUFBbUIsT0FBbkI7QUFDSDtBQUNELHVCQUFPLE1BQVA7QUFoR0k7QUFBQTtBQW1HRixzQkFuR0UsMEJBbUdjLE1BbkdkO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBbUdzQixzQkFuR3RCLG1GQW1HK0IsRUFuRy9CO0FBQUEsdUJBb0dFLFNBQUssV0FBTCxFQXBHRjtBQUFBO0FBQUEsdUJBcUdpQixTQUFLLGtCQUFMLENBQXlCLFNBQUssTUFBTCxDQUFhO0FBQ3ZELDRCQUFRLFNBQUssUUFBTCxDQUFlLE1BQWY7QUFEK0MsaUJBQWIsRUFFM0MsTUFGMkMsQ0FBekIsQ0FyR2pCO0FBQUE7QUFxR0Esd0JBckdBO0FBd0dBLHlCQXhHQSxHQXdHWSxTQUFTLFNBQVQsQ0F4R1o7QUF5R0EseUJBekdBLEdBeUdZLFNBQUssU0FBTCxDQUFnQixVQUFVLFlBQVYsQ0FBaEIsQ0F6R1o7QUEwR0Esc0JBMUdBLEdBMEdTO0FBQ1QsNEJBQVEsRUFEQztBQUVULDRCQUFRLEVBRkM7QUFHVCxpQ0FBYSxTQUhKO0FBSVQsZ0NBQVksU0FBSyxPQUFMLENBQWMsU0FBZDtBQUpILGlCQTFHVDtBQWdIQSxxQkFoSEEsR0FnSFEsQ0FBRSxNQUFGLEVBQVUsTUFBVixDQWhIUjs7QUFpSEoscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxNQUFNLE1BQTFCLEVBQWtDLEdBQWxDLEVBQXVDO0FBQy9CLHdCQUQrQixHQUN4QixNQUFNLENBQU4sQ0FEd0I7QUFFL0IsMEJBRitCLEdBRXRCLFVBQVUsSUFBVixDQUZzQjs7QUFHbkMseUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxPQUFPLE1BQTNCLEVBQW1DLEdBQW5DLEVBQXdDO0FBQ2hDLDZCQURnQyxHQUN4QixPQUFPLENBQVAsQ0FEd0I7QUFFaEMsNkJBRmdDLEdBRXhCLFdBQVksTUFBTSxPQUFOLENBQVosQ0FGd0I7QUFHaEMsOEJBSGdDLEdBR3ZCLFdBQVksTUFBTSxRQUFOLENBQVosQ0FIdUI7O0FBSXBDLCtCQUFPLElBQVAsRUFBYSxJQUFiLENBQW1CLENBQUUsS0FBRixFQUFTLE1BQVQsQ0FBbkI7QUFDSDtBQUNKO0FBQ0QsdUJBQU8sTUFBUDtBQTNISTtBQUFBO0FBK0hGLG1CQS9IRSx1QkErSFcsTUEvSFg7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQWdJRSxTQUFLLFdBQUwsRUFoSUY7QUFBQTtBQUFBLHVCQWlJaUIsU0FBSyxlQUFMLENBQXNCO0FBQ3ZDLDRCQUFRLFNBQUssUUFBTCxDQUFlLE1BQWY7QUFEK0IsaUJBQXRCLENBaklqQjtBQUFBO0FBaUlBLHdCQWpJQTtBQW9JQSxzQkFwSUEsR0FvSVMsU0FBUyxTQUFULENBcElUO0FBcUlBLHlCQXJJQSxHQXFJWSxTQUFLLFNBQUwsQ0FBZ0IsT0FBTyxZQUFQLENBQWhCLENBcklaOztBQXNJSix1QkFBTztBQUNILGlDQUFhLFNBRFY7QUFFSCxnQ0FBWSxTQUFLLE9BQUwsQ0FBYyxTQUFkLENBRlQ7QUFHSCw0QkFBUSxXQUFZLE9BQU8sTUFBUCxDQUFaLENBSEw7QUFJSCwyQkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBSko7QUFLSCwyQkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBTEo7QUFNSCwyQkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBTko7QUFPSCw0QkFBUSxXQUFZLE9BQU8sTUFBUCxDQUFaLENBUEw7QUFRSCw0QkFBUSxTQVJMO0FBU0gsNkJBQVMsU0FUTjtBQVVILDZCQUFTLFNBVk47QUFXSCw0QkFBUSxTQVhMO0FBWUgsOEJBQVUsU0FaUDtBQWFILGtDQUFjLFNBYlg7QUFjSCwrQkFBVyxTQWRSO0FBZUgsa0NBQWMsU0FmWDtBQWdCSCxtQ0FBZSxXQUFZLE9BQU8sUUFBUCxDQUFaLENBaEJaO0FBaUJILDRCQUFRO0FBakJMLGlCQUFQO0FBdElJO0FBQUE7QUEySkYsbUJBM0pFLHVCQTJKVyxNQTNKWDtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQTJKbUIsc0JBM0puQixtRkEySjRCLEVBM0o1QjtBQUFBLHVCQTRKRSxTQUFLLFdBQUwsRUE1SkY7QUFBQTtBQTZKSix1QkFBTyxTQUFLLGVBQUwsQ0FBc0IsU0FBSyxNQUFMLENBQWE7QUFDdEMsNEJBQVEsU0FBSyxRQUFMLENBQWUsTUFBZjtBQUQ4QixpQkFBYixFQUUxQixNQUYwQixDQUF0QixDQUFQO0FBN0pJO0FBQUE7QUFrS0YsbUJBbEtFLHVCQWtLVyxNQWxLWCxFQWtLbUIsSUFsS25CLEVBa0t5QixJQWxLekIsRUFrSytCLE1BbEsvQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQWtLdUMscUJBbEt2QyxtRkFrSytDLFNBbEsvQztBQWtLMEQsc0JBbEsxRCxtRkFrS21FLEVBbEtuRTtBQUFBLHVCQW1LRSxTQUFLLFdBQUwsRUFuS0Y7QUFBQTtBQW9LQSxxQkFwS0EsR0FvS1E7QUFDUiw0QkFBUSxTQUFLLFFBQUwsQ0FBZSxNQUFmLENBREE7QUFFUiw0QkFBUSxJQUZBO0FBR1IsNEJBQVEsSUFIQTtBQUlSLDZCQUFTO0FBSkQsaUJBcEtSOztBQTBLSixvQkFBSSxRQUFRLE9BQVo7QUFDSSwwQkFBTSxPQUFOLElBQWlCLEtBQWpCO0FBREosaUJBMUtJLE9BNEtpQixTQUFLLGlCQUFMLENBQXdCLFNBQUssTUFBTCxDQUFhLEtBQWIsRUFBb0IsTUFBcEIsQ0FBeEIsQ0E1S2pCO0FBQUE7QUE0S0Esd0JBNUtBOztBQTZLSix1QkFBTztBQUNILDRCQUFRLFFBREw7QUFFSCwwQkFBTSxTQUFTLFNBQVQsRUFBb0IsS0FBcEI7QUFGSCxpQkFBUDtBQTdLSTtBQUFBO0FBbUxGLG1CQW5MRSx1QkFtTFcsRUFuTFg7QUFBQTs7QUFBQTtBQUFBLHVCQW9MRSxTQUFLLFdBQUwsRUFwTEY7QUFBQTtBQXFMSix1QkFBTyxTQUFLLG1CQUFMLENBQTBCLEVBQUUsT0FBTyxFQUFULEVBQTFCLENBQVA7QUFyTEk7QUFBQTtBQXdMRixlQXhMRSxtQkF3TE8sSUF4TFA7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUF3TGEsbUJBeExiLG1GQXdMbUIsUUF4TG5CO0FBd0w2QixzQkF4TDdCLG1GQXdMc0MsS0F4THRDO0FBd0w2QyxzQkF4TDdDLG1GQXdMc0QsRUF4THREO0FBd0wwRCx1QkF4TDFELG1GQXdMb0UsU0F4THBFO0FBd0wrRSxvQkF4TC9FLG1GQXdMc0YsU0F4THRGO0FBeUxBLHFCQXpMQSxHQXlMUSxNQUFNLFNBQUssT0FBWCxHQUFxQixHQUFyQixHQUEyQixTQUFLLGFBQUwsQ0FBb0IsSUFBcEIsRUFBMEIsTUFBMUIsQ0F6TG5DO0FBMExBLG1CQTFMQSxHQTBMTSxTQUFLLElBQUwsQ0FBVSxLQUFWLElBQW1CLEtBMUx6Qjs7QUEyTEosb0JBQUksT0FBTyxRQUFYLEVBQXFCO0FBQ2pCLHdCQUFJLE9BQU8sSUFBUCxDQUFhLE1BQWIsRUFBcUIsTUFBekI7QUFDSSwrQkFBTyxNQUFNLFNBQUssU0FBTCxDQUFnQixNQUFoQixDQUFiO0FBREo7QUFFSCxpQkFIRCxNQUdPO0FBQ0gsd0JBQUksT0FBTyxJQUFQLENBQWEsTUFBYixFQUFxQixNQUF6QjtBQUNJLCtCQUFPLFNBQUssSUFBTCxDQUFXLE1BQVgsQ0FBUDtBQURKLHFCQUVJLEtBSEQsR0FHUyxTQUFLLEtBQUwsR0FBYyxRQUFkLEVBSFQ7QUFJQywyQkFKRCxHQUlXLENBQUUsS0FBRixFQUFTLE1BQVQsRUFBaUIsS0FBakIsRUFBd0IsUUFBUSxFQUFoQyxFQUFxQyxJQUFyQyxDQUEyQyxFQUEzQyxDQUpYO0FBS0MsNkJBTEQsR0FLYSxTQUFLLElBQUwsQ0FBVyxTQUFLLE1BQUwsQ0FBYSxPQUFiLENBQVgsRUFBa0MsU0FBSyxNQUFMLENBQWEsU0FBSyxNQUFsQixDQUFsQyxDQUxiO0FBTUMsd0JBTkQsR0FNUSxTQUFLLE1BQUwsR0FBYyxHQUFkLEdBQW9CLEtBQXBCLEdBQTRCLEdBQTVCLEdBQWtDLFNBTjFDOztBQU9ILDhCQUFVLEVBQUUsaUJBQWlCLFdBQVcsSUFBOUIsRUFBVjtBQUNIO0FBdE1HLHVCQXVNaUIsU0FBSyxLQUFMLENBQVksR0FBWixFQUFpQixNQUFqQixFQUF5QixPQUF6QixFQUFrQyxJQUFsQyxDQXZNakI7QUFBQTtBQXVNQSx3QkF2TUE7QUFBQSx5QkF3TUEsYUFBYSxRQXhNYjs7QUF5TUEsOEJBQUksU0FBUyxTQUFULENBQUo7QUFDSSwyQkFBTyxRQUFQO0FBREo7QUFFSiwwQkFBTSxJQUFJLGFBQUosQ0FBbUIsU0FBSyxFQUFMLEdBQVUsR0FBVixHQUFnQixTQUFLLElBQUwsQ0FBVyxRQUFYLENBQW5DLENBQU47QUFGSTtBQXpNQTtBQUFBO0FBQUEsS0FBWjs7QUErTUE7O0FBRUEsUUFBSSxXQUFXOztBQUVYLGNBQU0sVUFGSztBQUdYLGdCQUFRLFVBSEc7QUFJWCxxQkFBYSxJQUpGO0FBS1gscUJBQWEsSUFMRjtBQU1YLG1CQUFXLElBTkE7QUFPWCxnQkFBUTtBQUNKLG9CQUFRLHFHQURKO0FBRUosbUJBQU8sOEJBRkg7QUFHSixtQkFBTywwQkFISDtBQUlKLG1CQUFPO0FBSkgsU0FQRztBQWFYLGVBQU87QUFDSCxzQkFBVTtBQUNOLHVCQUFPLENBQ0gsa0JBREcsRUFFSCxtQkFGRyxFQUdILGNBSEcsRUFJSCxvQkFKRztBQURELGFBRFA7QUFTSCx1QkFBVztBQUNQLHdCQUFRLENBQ0osVUFESSxFQUVKLGVBRkksRUFHSixXQUhJLEVBSUosa0JBSkksRUFLSixlQUxJLEVBTUosMkJBTkksRUFPSiwwQkFQSSxFQVFKLGtCQVJJLEVBU0osbUJBVEksRUFVSixZQVZJLEVBV0osbUJBWEksRUFZSixxQkFaSSxFQWFKLG1CQWJJLEVBY0osb0JBZEksRUFlSix5QkFmSSxFQWdCSixvQkFoQkksRUFpQkosa0JBakJJLEVBa0JKLG9CQWxCSSxFQW1CSixjQW5CSSxFQW9CSixpQkFwQkk7QUFERDtBQVRSLFNBYkk7QUErQ1gsbUJBQVc7QUFDUCx1QkFBVyxFQUFFLE1BQU0sUUFBUixFQUFrQixVQUFVLFNBQTVCLEVBQXVDLFFBQVEsS0FBL0MsRUFBc0QsU0FBUyxLQUEvRCxFQURKO0FBRVAsdUJBQVcsRUFBRSxNQUFNLFFBQVIsRUFBa0IsVUFBVSxTQUE1QixFQUF1QyxRQUFRLEtBQS9DLEVBQXNELFNBQVMsS0FBL0QsRUFGSjtBQUdQLHVCQUFXLEVBQUUsTUFBTSxRQUFSLEVBQWtCLFVBQVUsU0FBNUIsRUFBdUMsUUFBUSxLQUEvQyxFQUFzRCxTQUFTLEtBQS9ELEVBSEo7QUFJUCx1QkFBVyxFQUFFLE1BQU0sUUFBUixFQUFrQixVQUFVLFNBQTVCLEVBQXVDLFFBQVEsS0FBL0MsRUFBc0QsU0FBUyxLQUEvRCxFQUpKO0FBS1AsdUJBQVcsRUFBRSxNQUFNLFFBQVIsRUFBa0IsVUFBVSxTQUE1QixFQUF1QyxRQUFRLEtBQS9DLEVBQXNELFNBQVMsS0FBL0QsRUFMSjtBQU1QLHVCQUFXLEVBQUUsTUFBTSxRQUFSLEVBQWtCLFVBQVUsU0FBNUIsRUFBdUMsUUFBUSxLQUEvQyxFQUFzRCxTQUFTLEtBQS9ELEVBTko7QUFPUCx1QkFBVyxFQUFFLE1BQU0sUUFBUixFQUFrQixVQUFVLFNBQTVCLEVBQXVDLFFBQVEsS0FBL0MsRUFBc0QsU0FBUyxLQUEvRCxFQVBKO0FBUVAsdUJBQVcsRUFBRSxNQUFNLFFBQVIsRUFBa0IsVUFBVSxTQUE1QixFQUF1QyxRQUFRLEtBQS9DLEVBQXNELFNBQVMsS0FBL0QsRUFSSjtBQVNQLHVCQUFXLEVBQUUsTUFBTSxRQUFSLEVBQWtCLFVBQVUsU0FBNUIsRUFBdUMsUUFBUSxLQUEvQyxFQUFzRCxTQUFTLEtBQS9ELEVBVEo7QUFVUCx1QkFBVyxFQUFFLE1BQU0sUUFBUixFQUFrQixVQUFVLFNBQTVCLEVBQXVDLFFBQVEsS0FBL0MsRUFBc0QsU0FBUyxLQUEvRCxFQVZKO0FBV1AsdUJBQVcsRUFBRSxNQUFNLFFBQVIsRUFBa0IsVUFBVSxTQUE1QixFQUF1QyxRQUFRLEtBQS9DLEVBQXNELFNBQVMsS0FBL0QsRUFYSjtBQVlQLHVCQUFXLEVBQUUsTUFBTSxRQUFSLEVBQWtCLFVBQVUsU0FBNUIsRUFBdUMsUUFBUSxLQUEvQyxFQUFzRCxTQUFTLEtBQS9EO0FBWkosU0EvQ0E7O0FBOERMLHNCQTlESywwQkE4RFcsTUE5RFg7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBOERtQixzQkE5RG5CLG1GQThENEIsRUE5RDVCO0FBQUEsdUJBK0RlLFNBQUssb0JBQUwsQ0FBMkIsU0FBSyxNQUFMLENBQWE7QUFDMUQsMEJBQU0sU0FBSyxRQUFMLENBQWUsTUFBZjtBQURvRCxpQkFBYixFQUU5QyxNQUY4QyxDQUEzQixDQS9EZjtBQUFBO0FBK0RILHlCQS9ERztBQWtFSCx5QkFsRUcsR0FrRVMsU0FBVSxVQUFVLFdBQVYsQ0FBVixJQUFvQyxJQWxFN0M7QUFtRUgsc0JBbkVHLEdBbUVNO0FBQ1QsNEJBQVEsRUFEQztBQUVULDRCQUFRLEVBRkM7QUFHVCxpQ0FBYSxTQUhKO0FBSVQsZ0NBQVksU0FBSyxPQUFMLENBQWMsU0FBZDtBQUpILGlCQW5FTjtBQXlFSCxxQkF6RUcsR0F5RUssQ0FBRSxNQUFGLEVBQVUsTUFBVixDQXpFTDs7QUEwRVAscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxNQUFNLE1BQTFCLEVBQWtDLEdBQWxDLEVBQXVDO0FBQy9CLHdCQUQrQixHQUN4QixNQUFNLENBQU4sQ0FEd0I7QUFFL0IsMEJBRitCLEdBRXRCLFVBQVUsSUFBVixDQUZzQjs7QUFHbkMseUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxPQUFPLE1BQTNCLEVBQW1DLEdBQW5DLEVBQXdDO0FBQ2hDLDZCQURnQyxHQUN4QixPQUFPLENBQVAsQ0FEd0I7QUFFaEMsNkJBRmdDLEdBRXhCLFdBQVksTUFBTSxDQUFOLENBQVosQ0FGd0I7QUFHaEMsOEJBSGdDLEdBR3ZCLFdBQVksTUFBTSxDQUFOLENBQVosQ0FIdUI7O0FBSXBDLCtCQUFPLElBQVAsRUFBYSxJQUFiLENBQW1CLENBQUUsS0FBRixFQUFTLE1BQVQsQ0FBbkI7QUFDSDtBQUNKO0FBQ0QsdUJBQU8sTUFBUDtBQXBGTztBQUFBO0FBdUZMLG1CQXZGSyx1QkF1RlEsTUF2RlI7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkF3RlksU0FBSyxpQkFBTCxDQUF3QjtBQUN2QywwQkFBTSxTQUFLLFFBQUwsQ0FBZSxNQUFmO0FBRGlDLGlCQUF4QixDQXhGWjtBQUFBO0FBd0ZILHNCQXhGRztBQTJGSCx5QkEzRkcsR0EyRlMsU0FBVSxPQUFPLFdBQVAsQ0FBVixJQUFpQyxJQTNGMUM7O0FBNEZQLHVCQUFPO0FBQ0gsaUNBQWEsU0FEVjtBQUVILGdDQUFZLFNBQUssT0FBTCxDQUFjLFNBQWQsQ0FGVDtBQUdILDRCQUFRLFdBQVksT0FBTyxNQUFQLENBQVosQ0FITDtBQUlILDJCQUFPLFdBQVksT0FBTyxLQUFQLENBQVosQ0FKSjtBQUtILDJCQUFPLFdBQVksT0FBTyxLQUFQLENBQVosQ0FMSjtBQU1ILDJCQUFPLFdBQVksT0FBTyxLQUFQLENBQVosQ0FOSjtBQU9ILDRCQUFRLFdBQVksT0FBTyxNQUFQLENBQVosQ0FQTDtBQVFILDRCQUFRLFdBQVksT0FBTyxNQUFQLENBQVosQ0FSTDtBQVNILDZCQUFTLFNBVE47QUFVSCw2QkFBUyxTQVZOO0FBV0gsNEJBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQVhMO0FBWUgsOEJBQVUsU0FaUDtBQWFILGtDQUFjLFNBYlg7QUFjSCwrQkFBVyxTQWRSO0FBZUgsa0NBQWMsU0FmWDtBQWdCSCxtQ0FBZSxXQUFZLE9BQU8sUUFBUCxDQUFaLENBaEJaO0FBaUJILDRCQUFRO0FBakJMLGlCQUFQO0FBNUZPO0FBQUE7QUFpSFgsa0JBakhXLHNCQWlIQyxLQWpIRCxFQWlIUSxNQWpIUixFQWlIZ0I7QUFDdkIsZ0JBQUksWUFBWSxTQUFVLE1BQU0sTUFBTixDQUFWLENBQWhCO0FBQ0EsZ0JBQUksT0FBUSxNQUFNLE1BQU4sS0FBaUIsQ0FBbEIsR0FBdUIsS0FBdkIsR0FBK0IsTUFBMUM7QUFDQSxtQkFBTztBQUNILHNCQUFNLE1BQU0sS0FBTixFQUFhLFFBQWIsRUFESDtBQUVILHdCQUFRLEtBRkw7QUFHSCw2QkFBYSxTQUhWO0FBSUgsNEJBQVksS0FBSyxPQUFMLENBQWMsU0FBZCxDQUpUO0FBS0gsMEJBQVUsT0FBTyxRQUFQLENBTFA7QUFNSCx3QkFBUSxTQU5MO0FBT0gsd0JBQVEsSUFQTDtBQVFILHlCQUFTLFdBQVksTUFBTSxPQUFOLENBQVosQ0FSTjtBQVNILDBCQUFVLFdBQVksTUFBTSxRQUFOLENBQVo7QUFUUCxhQUFQO0FBV0gsU0EvSFU7QUFpSUwsbUJBaklLLHVCQWlJUSxNQWpJUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFpSWdCLHNCQWpJaEIsbUZBaUl5QixFQWpJekI7QUFrSUgsaUJBbElHLEdBa0lDLFNBQUssTUFBTCxDQUFhLE1BQWIsQ0FsSUQ7QUFBQSx1QkFtSWMsU0FBSyx1QkFBTCxDQUE4QixTQUFLLE1BQUwsQ0FBYTtBQUM1RCwwQkFBTSxFQUFFLElBQUYsQ0FEc0Q7QUFFNUQsNEJBQVE7QUFGb0QsaUJBQWIsRUFHaEQsTUFIZ0QsQ0FBOUIsQ0FuSWQ7QUFBQTtBQW1JSCx3QkFuSUc7O0FBdUlQLHVCQUFPLFNBQUssV0FBTCxDQUFrQixRQUFsQixFQUE0QixDQUE1QixDQUFQO0FBdklPO0FBQUE7QUEwSUwsb0JBMUlLO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkEySWEsU0FBSyxrQkFBTCxFQTNJYjtBQUFBO0FBMklILHVCQTNJRztBQTRJSCxzQkE1SUcsR0E0SU0sRUFBRSxRQUFRLE9BQVYsRUE1SU47O0FBNklQLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksU0FBSyxVQUFMLENBQWdCLE1BQXBDLEVBQTRDLEdBQTVDLEVBQWlEO0FBQ3pDLDRCQUR5QyxHQUM5QixTQUFLLFVBQUwsQ0FBZ0IsQ0FBaEIsQ0FEOEI7QUFFekMsNkJBRnlDLEdBRTdCLFNBQVMsV0FBVCxFQUY2QjtBQUd6Qyx5QkFIeUMsR0FHakMsWUFBWSxVQUhxQjtBQUl6Qyx3QkFKeUMsR0FJbEMsWUFBWSxZQUpzQjtBQUt6Qyx3QkFMeUMsR0FLbEMsWUFBWSxXQUxzQjtBQU16QywyQkFOeUMsR0FNL0I7QUFDVixnQ0FBUSxTQURFO0FBRVYsZ0NBQVEsU0FGRTtBQUdWLGlDQUFTO0FBSEMscUJBTitCOztBQVc3Qyx3QkFBSSxRQUFRLE9BQVo7QUFDSSxnQ0FBUSxNQUFSLElBQWtCLFdBQVksUUFBUSxJQUFSLENBQVosQ0FBbEI7QUFESixxQkFFQSxJQUFJLFFBQVEsT0FBWjtBQUNJLGdDQUFRLE1BQVIsSUFBa0IsV0FBWSxRQUFRLElBQVIsQ0FBWixDQUFsQjtBQURKLHFCQUVBLElBQUksU0FBUyxPQUFiO0FBQ0ksZ0NBQVEsT0FBUixJQUFtQixXQUFZLFFBQVEsS0FBUixDQUFaLENBQW5CO0FBREoscUJBRUEsT0FBTyxRQUFQLElBQW1CLE9BQW5CO0FBQ0g7QUFDRCx1QkFBTyxNQUFQO0FBaEtPO0FBQUE7QUFtS0wsbUJBbktLLHVCQW1LUSxNQW5LUixFQW1LZ0IsSUFuS2hCLEVBbUtzQixJQW5LdEIsRUFtSzRCLE1Bbks1QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBbUtvQyxxQkFuS3BDLG1GQW1LNEMsU0FuSzVDO0FBbUt1RCxzQkFuS3ZELG1GQW1LZ0UsRUFuS2hFO0FBb0tILHNCQXBLRyxHQW9LTSxnQkFBZ0IsU0FBSyxVQUFMLENBQWlCLElBQWpCLENBcEt0QjtBQXFLSCxxQkFyS0csR0FxS0s7QUFDUiwwQkFBTSxTQUFLLFFBQUwsQ0FBZSxNQUFmLENBREU7QUFFUiw4QkFBVTtBQUZGLGlCQXJLTDs7QUF5S1Asb0JBQUksUUFBUSxRQUFaO0FBQ0ksOEJBQVUsUUFBVjtBQURKO0FBR0ksMEJBQU0sT0FBTixJQUFpQixLQUFqQjtBQUhKLGlCQUlBLFVBQVUsSUFBVjtBQTdLTyx1QkE4S2MsU0FBSyxNQUFMLEVBQWMsU0FBSyxNQUFMLENBQWEsS0FBYixFQUFvQixNQUFwQixDQUFkLENBOUtkO0FBQUE7QUE4S0gsd0JBOUtHOztBQStLUCx1QkFBTztBQUNILDRCQUFRLFFBREw7QUFFSCwwQkFBTSxTQUFTLElBQVQ7QUFGSCxpQkFBUDtBQS9LTztBQUFBO0FBcUxMLG1CQXJMSyx1QkFxTFEsRUFyTFI7QUFBQTs7QUFzTFAsbUJBQU8sU0FBSyxzQkFBTCxDQUE2QixFQUFFLE1BQU0sRUFBUixFQUE3QixDQUFQO0FBdExPO0FBeUxMLGVBekxLLG1CQXlMSSxJQXpMSjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBeUxVLG1CQXpMVixtRkF5TGdCLFFBekxoQjtBQXlMMEIsc0JBekwxQixtRkF5TG1DLEtBekxuQztBQXlMMEMsc0JBekwxQyxtRkF5TG1ELEVBekxuRDtBQXlMdUQsdUJBekx2RCxtRkF5TGlFLFNBekxqRTtBQXlMNEUsb0JBekw1RSxtRkF5TG1GLFNBekxuRjtBQTBMSCxtQkExTEcsR0EwTEcsU0FBSyxJQUFMLENBQVUsS0FBVixJQUFtQixHQUFuQixHQUF5QixTQUFLLE9BQTlCLEdBQXdDLEdBQXhDLEdBQThDLFNBQUssYUFBTCxDQUFvQixJQUFwQixFQUEwQixNQUExQixDQTFMakQ7QUEyTEgscUJBM0xHLEdBMkxLLFNBQUssSUFBTCxDQUFXLE1BQVgsRUFBbUIsU0FBSyxhQUFMLENBQW9CLElBQXBCLENBQW5CLENBM0xMOztBQTRMUCxvQkFBSSxPQUFPLFFBQVgsRUFBcUI7QUFDakIsd0JBQUksT0FBTyxJQUFQLENBQWEsS0FBYixFQUFvQixNQUF4QjtBQUNJLCtCQUFPLE1BQU0sU0FBSyxTQUFMLENBQWdCLEtBQWhCLENBQWI7QUFESjtBQUVILGlCQUhELE1BR087QUFDSCx3QkFBSSxDQUFDLFNBQUssR0FBVjtBQUNJLDhCQUFNLElBQUksbUJBQUosQ0FBeUIsU0FBSyxFQUFMLEdBQVUsYUFBVixHQUEwQixTQUFLLEVBQS9CLEdBQW9DLG1DQUE3RCxDQUFOO0FBREoscUJBRUksS0FIRCxHQUdTLFNBQUssS0FBTCxHQUFjLFFBQWQsRUFIVDtBQUlDLHdCQUpELEdBSVEsUUFBUSxTQUFLLEdBQWIsR0FBbUIsU0FBSyxNQUpoQztBQUtDLDZCQUxELEdBS2EsU0FBSyxNQUFMLENBQWEsU0FBSyxJQUFMLENBQVcsU0FBSyxNQUFMLENBQWEsSUFBYixDQUFYLEVBQStCLFNBQUssTUFBTCxDQUFhLFNBQUssTUFBbEIsQ0FBL0IsQ0FBYixDQUxiOztBQU1ILDRCQUFRLFNBQUssTUFBTCxDQUFhO0FBQ2pCLCtCQUFPLFNBQUssTUFESztBQUVqQixxQ0FBYSxVQUFVLFdBQVYsRUFGSTtBQUdqQixpQ0FBUztBQUhRLHFCQUFiLEVBSUwsS0FKSyxDQUFSO0FBS0EsMkJBQU8sU0FBSyxTQUFMLENBQWdCLEtBQWhCLENBQVA7QUFDQSw4QkFBVTtBQUNOLHdDQUFnQixtQ0FEVjtBQUVOLDBDQUFrQixLQUFLLE1BQUwsQ0FBWSxRQUFaO0FBRloscUJBQVY7QUFJSDtBQS9NTSx1QkFnTmMsU0FBSyxLQUFMLENBQVksR0FBWixFQUFpQixNQUFqQixFQUF5QixPQUF6QixFQUFrQyxJQUFsQyxDQWhOZDtBQUFBO0FBZ05ILHdCQWhORzs7QUFpTlAsb0JBQUksWUFBWSxRQUFoQjtBQUNJLHdCQUFJLFNBQVMsUUFBVCxLQUFzQixPQUExQjtBQUNJLDhCQUFNLElBQUksYUFBSixDQUFtQixTQUFLLEVBQUwsR0FBVSxHQUFWLEdBQWdCLFNBQUssSUFBTCxDQUFXLFFBQVgsQ0FBbkMsQ0FBTjtBQURKO0FBREosaUJBR0EsT0FBTyxRQUFQO0FBcE5PO0FBQUE7QUFBQSxLQUFmOztBQXdOQTs7QUFFQSxRQUFJLFVBQVU7O0FBRVYsY0FBTSxTQUZJO0FBR1YsZ0JBQVEsU0FIRTtBQUlWLHFCQUFhLElBSkg7QUFLVixtQkFBVyxNQUxEO0FBTVYscUJBQWEsSUFOSDtBQU9WLDJCQUFtQixJQVBUO0FBUVYsZ0JBQVE7QUFDSixvQkFBUSxxR0FESjtBQUVKLG1CQUFPLHlCQUZIO0FBR0osbUJBQU8scUJBSEg7QUFJSixtQkFBTyxDQUNILDhCQURHLEVBRUgsZ0RBRkc7QUFKSCxTQVJFO0FBaUJWLGVBQU87QUFDSCxzQkFBVTtBQUNOLHVCQUFPLENBQ0gsWUFERyxFQUVILGVBRkcsRUFHSCxTQUhHLEVBSUgsaUJBSkcsRUFLSCxlQUxHLEVBTUgsV0FORyxFQU9ILFFBUEc7QUFERCxhQURQO0FBWUgsdUJBQVc7QUFDUCx1QkFBTyxDQUNILFNBREcsRUFFSCxVQUZHLEVBR0gsZ0JBSEcsRUFJSCxnQkFKRyxFQUtILE9BTEcsRUFNSCxjQU5HLEVBT0gsbUJBUEcsRUFRSCxVQVJHO0FBREEsYUFaUjtBQXdCSCxzQkFBVTtBQUNOLHVCQUFPLENBQ0gsVUFERyxFQUVILFdBRkcsRUFHSCxRQUhHLEVBSUgsWUFKRyxFQUtILFdBTEcsRUFNSCxZQU5HO0FBREQ7QUF4QlAsU0FqQkc7O0FBcURKLG9CQXJESTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQXNEYyxTQUFLLGdCQUFMLEVBdERkO0FBQUE7QUFzREYsdUJBdERFO0FBdURGLHNCQXZERSxHQXVETyxFQXZEUDs7QUF3RE4scUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxRQUFRLFFBQVIsRUFBa0IsTUFBdEMsRUFBOEMsR0FBOUMsRUFBbUQ7QUFDM0MsMEJBRDJDLEdBQ2xDLFFBQVEsUUFBUixFQUFrQixDQUFsQixDQURrQztBQUUzQyxzQkFGMkMsR0FFdEMsT0FBTyxZQUFQLENBRnNDO0FBRzNDLHdCQUgyQyxHQUdwQyxPQUFPLGdCQUFQLENBSG9DO0FBSTNDLHlCQUoyQyxHQUluQyxPQUFPLGNBQVAsQ0FKbUM7O0FBSy9DLDJCQUFPLFNBQUssa0JBQUwsQ0FBeUIsSUFBekIsQ0FBUDtBQUNBLDRCQUFRLFNBQUssa0JBQUwsQ0FBeUIsS0FBekIsQ0FBUjtBQUNJLDBCQVAyQyxHQU9sQyxPQUFPLEdBQVAsR0FBYSxLQVBxQjs7QUFRL0MsMkJBQU8sSUFBUCxDQUFhO0FBQ1QsOEJBQU0sRUFERztBQUVULGtDQUFVLE1BRkQ7QUFHVCxnQ0FBUSxJQUhDO0FBSVQsaUNBQVMsS0FKQTtBQUtULGdDQUFRO0FBTEMscUJBQWI7QUFPSDtBQUNELHVCQUFPLE1BQVA7QUF4RU07QUFBQTtBQTJFSixvQkEzRUk7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkE0RUEsU0FBSyxXQUFMLEVBNUVBO0FBQUE7QUFBQSx1QkE2RWUsU0FBSyxrQkFBTCxFQTdFZjtBQUFBO0FBNkVGLHdCQTdFRTtBQThFRix3QkE5RUUsR0E4RVMsU0FBUyxRQUFULENBOUVUO0FBK0VGLHNCQS9FRSxHQStFTyxFQUFFLFFBQVEsUUFBVixFQS9FUDtBQWdGRix1QkFoRkUsR0FnRlEsU0FBSyxPQUFMLENBQWMsUUFBZCxFQUF3QixVQUF4QixDQWhGUjs7QUFpRk4scUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxTQUFLLFVBQUwsQ0FBZ0IsTUFBcEMsRUFBNEMsR0FBNUMsRUFBaUQ7QUFDekMsNEJBRHlDLEdBQzlCLFNBQUssVUFBTCxDQUFnQixDQUFoQixDQUQ4QjtBQUV6QywyQkFGeUMsR0FFL0I7QUFDVixnQ0FBUSxTQURFO0FBRVYsZ0NBQVEsU0FGRTtBQUdWLGlDQUFTO0FBSEMscUJBRitCOztBQU83Qyx3QkFBSSxZQUFZLE9BQWhCLEVBQXlCO0FBQ2pCLCtCQURpQixHQUNQLFFBQVEsUUFBUixDQURPOztBQUVyQixnQ0FBUSxNQUFSLElBQWtCLFFBQVEsV0FBUixDQUFsQjtBQUNBLGdDQUFRLE1BQVIsSUFBa0IsUUFBUSxTQUFSLElBQXFCLFFBQVEsV0FBUixDQUF2QztBQUNBLGdDQUFRLE9BQVIsSUFBbUIsUUFBUSxTQUFSLENBQW5CO0FBQ0g7QUFDRCwyQkFBTyxRQUFQLElBQW1CLE9BQW5CO0FBQ0g7QUFDRCx1QkFBTyxNQUFQO0FBaEdNO0FBQUE7QUFtR1YsbUJBbkdVLHVCQW1HRyxNQW5HSCxFQW1HVztBQUNqQixnQkFBSSxRQUFRLFdBQVksT0FBTyxNQUFQLENBQVosQ0FBWjtBQUNBLGdCQUFJLFNBQVMsV0FBWSxPQUFPLFVBQVAsQ0FBWixDQUFiO0FBQ0EsbUJBQU8sQ0FBRSxLQUFGLEVBQVMsTUFBVCxDQUFQO0FBQ0gsU0F2R1M7QUF5R1Ysb0JBekdVLHdCQXlHSSxPQXpHSixFQXlHYTtBQUNuQixnQkFBSSxTQUFTLEVBQWI7QUFDQSxpQkFBSyxJQUFJLElBQUksQ0FBYixFQUFnQixJQUFJLFFBQVEsTUFBNUIsRUFBb0MsR0FBcEMsRUFBeUM7QUFDckMsdUJBQU8sSUFBUCxDQUFhLEtBQUssV0FBTCxDQUFrQixRQUFRLENBQVIsQ0FBbEIsQ0FBYjtBQUNIO0FBQ0QsbUJBQU8sTUFBUDtBQUNILFNBL0dTO0FBaUhKLHNCQWpISSwwQkFpSFksTUFqSFo7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFpSG9CLHNCQWpIcEIsbUZBaUg2QixFQWpIN0I7QUFBQSx1QkFrSEEsU0FBSyxXQUFMLEVBbEhBO0FBQUE7QUFBQSx1QkFtSGUsU0FBSyxrQkFBTCxDQUF5QixTQUFLLE1BQUwsQ0FBYTtBQUN2RCw4QkFBVSxTQUFLLFFBQUwsQ0FBZSxNQUFmLENBRDZDO0FBRXZELDRCQUFRLE1BRitDO0FBR3ZELDZCQUFTO0FBSDhDLGlCQUFiLEVBSTNDLE1BSjJDLENBQXpCLENBbkhmO0FBQUE7QUFtSEYsd0JBbkhFO0FBd0hGLHlCQXhIRSxHQXdIVSxTQUFTLFFBQVQsQ0F4SFY7QUF5SEYseUJBekhFLEdBeUhVLFNBQUssWUFBTCxFQXpIVjtBQTBIRixzQkExSEUsR0EwSE87QUFDVCw0QkFBUSxFQURDO0FBRVQsNEJBQVEsRUFGQztBQUdULGlDQUFhLFNBSEo7QUFJVCxnQ0FBWSxTQUFLLE9BQUwsQ0FBYyxTQUFkO0FBSkgsaUJBMUhQO0FBZ0lGLHFCQWhJRSxHQWdJTSxFQUFFLFFBQVEsS0FBVixFQUFpQixRQUFRLE1BQXpCLEVBaElOO0FBaUlGLG9CQWpJRSxHQWlJSyxPQUFPLElBQVAsQ0FBYSxLQUFiLENBaklMOztBQWtJTixxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLEtBQUssTUFBekIsRUFBaUMsR0FBakMsRUFBc0M7QUFDOUIsdUJBRDhCLEdBQ3hCLEtBQUssQ0FBTCxDQUR3QjtBQUU5Qix3QkFGOEIsR0FFdkIsTUFBTSxHQUFOLENBRnVCOztBQUdsQywyQkFBTyxHQUFQLElBQWMsU0FBSyxZQUFMLENBQW1CLFVBQVUsSUFBVixDQUFuQixDQUFkO0FBQ0g7QUFDRCx1QkFBTyxNQUFQO0FBdklNO0FBQUE7QUEwSVYsbUJBMUlVLHVCQTBJRyxNQTFJSCxFQTBJVyxNQTFJWCxFQTBJbUI7QUFDekIsZ0JBQUksWUFBWSxLQUFLLFNBQUwsQ0FBZ0IsT0FBTyxXQUFQLENBQWhCLENBQWhCO0FBQ0EsbUJBQU87QUFDSCw2QkFBYSxTQURWO0FBRUgsNEJBQVksS0FBSyxPQUFMLENBQWMsU0FBZCxDQUZUO0FBR0gsd0JBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQUhMO0FBSUgsdUJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQUpKO0FBS0gsdUJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQUxKO0FBTUgsdUJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQU5KO0FBT0gsd0JBQVEsU0FQTDtBQVFILHdCQUFRLFNBUkw7QUFTSCx5QkFBUyxTQVROO0FBVUgseUJBQVMsU0FWTjtBQVdILHdCQUFRLFdBQVksT0FBTyxNQUFQLENBQVosQ0FYTDtBQVlILDBCQUFVLFNBWlA7QUFhSCw4QkFBYyxTQWJYO0FBY0gsMkJBQVcsU0FkUjtBQWVILDhCQUFjLFdBQVksT0FBTyxZQUFQLENBQVosQ0FmWDtBQWdCSCwrQkFBZSxXQUFZLE9BQU8sUUFBUCxDQUFaLENBaEJaO0FBaUJILHdCQUFRO0FBakJMLGFBQVA7QUFtQkgsU0EvSlM7QUFpS0osb0JBaktJO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkFrS0EsU0FBSyxXQUFMLEVBbEtBO0FBQUE7QUFBQSx1QkFtS2UsU0FBSyx3QkFBTCxFQW5LZjtBQUFBO0FBbUtGLHdCQW5LRTtBQW9LRix1QkFwS0UsR0FvS1EsU0FBUyxRQUFULENBcEtSO0FBcUtGLHNCQXJLRSxHQXFLTyxFQXJLUDs7QUFzS04scUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxRQUFRLE1BQTVCLEVBQW9DLEdBQXBDLEVBQXlDO0FBQ2pDLDBCQURpQyxHQUN4QixRQUFRLENBQVIsQ0FEd0I7QUFFakMsc0JBRmlDLEdBRTVCLE9BQU8sWUFBUCxDQUY0QjtBQUdqQywwQkFIaUMsR0FHeEIsU0FId0I7QUFJakMsMEJBSmlDLEdBSXhCLEVBSndCOztBQUtyQyx3QkFBSSxNQUFNLFNBQUssYUFBZixFQUE4QjtBQUMxQixpQ0FBUyxTQUFLLGFBQUwsQ0FBbUIsRUFBbkIsQ0FBVDtBQUNBLGlDQUFTLE9BQU8sUUFBUCxDQUFUO0FBQ0gscUJBSEQsTUFHTztBQUFBLG9DQUNtQixHQUFHLEtBQUgsQ0FBVSxHQUFWLENBRG5CO0FBQUE7QUFDRyw2QkFESDtBQUNVLDRCQURWOztBQUVILCtCQUFPLFNBQUssa0JBQUwsQ0FBeUIsSUFBekIsQ0FBUDtBQUNBLGdDQUFRLFNBQUssa0JBQUwsQ0FBeUIsS0FBekIsQ0FBUjtBQUNBLGlDQUFTLE9BQU8sR0FBUCxHQUFhLEtBQXRCO0FBQ0g7QUFDRCwyQkFBTyxNQUFQLElBQWlCLFNBQUssV0FBTCxDQUFrQixNQUFsQixFQUEwQixNQUExQixDQUFqQjtBQUNIO0FBQ0QsdUJBQU8sTUFBUDtBQXRMTTtBQUFBO0FBeUxKLG1CQXpMSSx1QkF5TFMsTUF6TFQ7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQTBMQSxTQUFLLFdBQUwsRUExTEE7QUFBQTtBQTJMRixpQkEzTEUsR0EyTEUsU0FBSyxNQUFMLENBQWEsTUFBYixDQTNMRjtBQUFBLHVCQTRMZSxTQUFLLHNCQUFMLENBQTZCO0FBQzlDLDhCQUFVLEVBQUUsSUFBRjtBQURvQyxpQkFBN0IsQ0E1TGY7QUFBQTtBQTRMRix3QkE1TEU7QUErTEYsc0JBL0xFLEdBK0xPLFNBQVMsUUFBVCxFQUFtQixDQUFuQixDQS9MUDs7QUFnTU4sdUJBQU8sU0FBSyxXQUFMLENBQWtCLE1BQWxCLEVBQTBCLENBQTFCLENBQVA7QUFoTU07QUFBQTtBQW1NVixrQkFuTVUsc0JBbU1FLEtBbk1GLEVBbU02QjtBQUFBLGdCQUFwQixNQUFvQix1RUFBWCxTQUFXOztBQUNuQyxnQkFBSSxZQUFZLEtBQUssU0FBTCxDQUFnQixNQUFNLFdBQU4sQ0FBaEIsQ0FBaEI7QUFDQSxnQkFBSSxPQUFPLFNBQVg7QUFDQSxnQkFBSSxNQUFNLFdBQU4sS0FBc0IsS0FBMUIsRUFBaUM7QUFDN0IsdUJBQU8sS0FBUDtBQUNILGFBRkQsTUFFTyxJQUFJLE1BQU0sV0FBTixLQUFzQixNQUExQixFQUFrQztBQUNyQyx1QkFBTyxNQUFQO0FBQ0g7QUFDRCxnQkFBSSxPQUFPLFNBQVg7QUFDQSxtQkFBTztBQUNILHNCQUFNLE1BQU0sSUFBTixFQUFZLFFBQVosRUFESDtBQUVILHdCQUFRLEtBRkw7QUFHSCw2QkFBYSxTQUhWO0FBSUgsNEJBQVksS0FBSyxPQUFMLENBQWMsU0FBZCxDQUpUO0FBS0gsMEJBQVUsT0FBTyxRQUFQLENBTFA7QUFNSCx3QkFBUSxTQU5MO0FBT0gsd0JBQVEsSUFQTDtBQVFILHlCQUFTLE1BQU0sT0FBTixDQVJOO0FBU0gsMEJBQVUsTUFBTSxVQUFOO0FBVFAsYUFBUDtBQVdILFNBdk5TO0FBeU5KLG1CQXpOSSx1QkF5TlMsTUF6TlQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBeU5pQixzQkF6TmpCLG1GQXlOMEIsRUF6TjFCO0FBQUEsdUJBME5BLFNBQUssV0FBTCxFQTFOQTtBQUFBO0FBMk5GLGlCQTNORSxHQTJORSxTQUFLLE1BQUwsQ0FBYSxNQUFiLENBM05GO0FBQUEsdUJBNE5lLFNBQUssc0JBQUwsQ0FBNkIsU0FBSyxNQUFMLENBQWE7QUFDM0QsOEJBQVUsRUFBRSxJQUFGO0FBRGlELGlCQUFiLEVBRS9DLE1BRitDLENBQTdCLENBNU5mO0FBQUE7QUE0TkYsd0JBNU5FOztBQStOTix1QkFBTyxTQUFLLFdBQUwsQ0FBa0IsU0FBUyxRQUFULENBQWxCLEVBQXNDLENBQXRDLENBQVA7QUEvTk07QUFBQTtBQWtPSix5QkFsT0k7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFrT2Usc0JBbE9mLG1GQWtPd0IsU0FsT3hCO0FBa09tQyxzQkFsT25DLG1GQWtPNEMsRUFsTzVDO0FBbU9GLGlCQW5PRSxHQW1PRSxTQUFLLE1BQUwsQ0FBYSxNQUFiLENBbk9GO0FBQUEsdUJBb09lLFNBQUssMkJBQUwsQ0FBa0MsU0FBSyxNQUFMLENBQWE7QUFDaEUsb0NBQWdCLEVBQUUsSUFBRjtBQURnRCxpQkFBYixDQUFsQyxDQXBPZjtBQUFBO0FBb09GLHdCQXBPRTs7QUF1T04sdUJBQU8sU0FBSyxXQUFMLENBQWtCLFNBQVMsUUFBVCxDQUFsQixFQUFzQyxNQUF0QyxDQUFQO0FBdk9NO0FBQUE7QUEwT0osbUJBMU9JLHVCQTBPUyxNQTFPVCxFQTBPaUIsSUExT2pCLEVBME91QixJQTFPdkIsRUEwTzZCLE1BMU83QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUEwT3FDLHFCQTFPckMsbUZBME82QyxTQTFPN0M7QUEwT3dELHNCQTFPeEQsbUZBME9pRSxFQTFPakU7QUFBQSx1QkEyT0EsU0FBSyxXQUFMLEVBM09BO0FBQUE7QUE0T0Ysc0JBNU9FLEdBNE9PLGNBQWMsU0FBSyxVQUFMLENBQWlCLElBQWpCLENBQWQsR0FBdUMsSUE1TzlDO0FBNk9GLHFCQTdPRSxHQTZPTTtBQUNSLDhCQUFVLFNBQUssUUFBTCxDQUFlLE1BQWYsQ0FERjtBQUVSLGdDQUFZO0FBRkosaUJBN09OOztBQWlQTixvQkFBSSxRQUFRLE9BQVo7QUFDSSwwQkFBTSxNQUFOLElBQWdCLEtBQWhCO0FBREosaUJBalBNLE9BbVBlLFNBQUssTUFBTCxFQUFjLFNBQUssTUFBTCxDQUFhLEtBQWIsRUFBb0IsTUFBcEIsQ0FBZCxDQW5QZjtBQUFBO0FBbVBGLHdCQW5QRTtBQW9QRixzQkFwUEUsR0FvUE87QUFDVCw0QkFBUSxRQURDO0FBRVQsMEJBQU0sU0FBUyxRQUFULEVBQW1CLE1BQW5CO0FBRkcsaUJBcFBQOztBQXdQTix1QkFBTyxNQUFQO0FBeFBNO0FBQUE7QUEyUEosbUJBM1BJLHVCQTJQUyxFQTNQVDtBQUFBOztBQUFBO0FBQUEsdUJBNFBBLFNBQUssV0FBTCxFQTVQQTtBQUFBO0FBNlBOLHVCQUFPLFNBQUssZUFBTCxDQUFzQixFQUFFLFFBQVEsRUFBVixFQUF0QixDQUFQO0FBN1BNO0FBQUE7QUFnUVYsa0JBaFFVLHNCQWdRRSxLQWhRRixFQWdRNkI7QUFBQSxnQkFBcEIsTUFBb0IsdUVBQVgsU0FBVzs7QUFDbkMsZ0JBQUksT0FBUSxNQUFNLE1BQU4sS0FBaUIsV0FBbEIsR0FBaUMsS0FBakMsR0FBeUMsTUFBcEQ7QUFDQSxnQkFBSSxPQUFPLE1BQU0sUUFBTixDQUFYO0FBQ0EsZ0JBQUksV0FBVyxNQUFNLGlCQUFOLENBQWY7QUFDQSxnQkFBSSxTQUFTLFNBQWI7QUFDQSxnQkFBSSxJQUFKLEVBQVU7QUFDTix5QkFBUyxNQUFUO0FBQ0gsYUFGRCxNQUVPLElBQUksUUFBSixFQUFjO0FBQ2pCLHlCQUFTLFVBQVQ7QUFDSCxhQUZNLE1BRUE7QUFDSCx5QkFBUyxRQUFUO0FBQ0g7QUFDRCxnQkFBSSxTQUFTLFNBQWI7QUFDQSxnQkFBSSxNQUFKLEVBQVk7QUFDUix5QkFBUyxPQUFPLFFBQVAsQ0FBVDtBQUNILGFBRkQsTUFFTztBQUNILG9CQUFJLFdBQVcsTUFBTSxVQUFOLENBQWY7QUFDQSxvQkFBSSxZQUFZLEtBQUssYUFBckIsRUFBb0M7QUFDaEMsNkJBQVMsS0FBSyxhQUFMLENBQW1CLFFBQW5CLENBQVQ7QUFDQSw2QkFBUyxDQUFDLFFBQUQsQ0FBVDtBQUNIO0FBQ0o7QUFDRCxnQkFBSSxZQUFZLEtBQUssU0FBTCxDQUFnQixNQUFNLFFBQU4sQ0FBaEIsQ0FBaEI7QUFDQSxnQkFBSSxTQUFTO0FBQ1Qsd0JBQVEsS0FEQztBQUVULHNCQUFNLE1BQU0sV0FBTixDQUZHO0FBR1QsNkJBQWEsU0FISjtBQUlULDRCQUFZLEtBQUssT0FBTCxDQUFjLFNBQWQsQ0FKSDtBQUtULDBCQUFVLE1BTEQ7QUFNVCx3QkFBUSxPQU5DO0FBT1Qsd0JBQVEsSUFQQztBQVFULHlCQUFTLE1BQU0sY0FBTixDQVJBO0FBU1QsMEJBQVUsTUFBTSxVQUFOLENBVEQ7QUFVVCw2QkFBYSxNQUFNLG1CQUFOLENBVko7QUFXVCwwQkFBVTtBQVhELGFBQWI7QUFhQSxtQkFBTyxNQUFQO0FBQ0gsU0FyU1M7QUF1U0osa0JBdlNJLHNCQXVTUSxFQXZTUjtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkF3U0EsU0FBSyxXQUFMLEVBeFNBO0FBQUE7QUFBQSx1QkF5U2UsU0FBSyxlQUFMLENBQXNCLEVBQUUsUUFBUSxFQUFWLEVBQXRCLENBelNmO0FBQUE7QUF5U0Ysd0JBelNFOztBQTBTTix1QkFBTyxTQUFLLFVBQUwsQ0FBaUIsU0FBUyxRQUFULENBQWpCLENBQVA7QUExU007QUFBQTtBQTZTSixlQTdTSSxtQkE2U0ssSUE3U0w7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUE2U1csbUJBN1NYLG1GQTZTaUIsUUE3U2pCO0FBNlMyQixzQkE3UzNCLG1GQTZTb0MsS0E3U3BDO0FBNlMyQyxzQkE3UzNDLG1GQTZTb0QsRUE3U3BEO0FBNlN3RCx1QkE3U3hELG1GQTZTa0UsU0E3U2xFO0FBNlM2RSxvQkE3UzdFLG1GQTZTb0YsU0E3U3BGO0FBOFNGLG1CQTlTRSxHQThTSSxTQUFLLElBQUwsQ0FBVSxLQUFWLElBQW1CLEdBQW5CLEdBQXlCLFNBQUssT0FBOUIsR0FBd0MsR0E5UzVDOztBQStTTixvQkFBSSxPQUFPLFFBQVgsRUFBcUI7QUFDakIsMkJBQU8sTUFBTSxHQUFOLEdBQVksT0FBTyxXQUFQLEVBQVosR0FBb0MsSUFBM0M7QUFDQSx3QkFBSSxPQUFPLElBQVAsQ0FBYSxNQUFiLEVBQXFCLE1BQXpCO0FBQ0ksK0JBQU8sTUFBTSxTQUFLLFNBQUwsQ0FBZ0IsTUFBaEIsQ0FBYjtBQURKO0FBRUgsaUJBSkQsTUFJTztBQUNDLHlCQURELEdBQ1MsU0FBSyxLQUFMLEVBRFQ7O0FBRUgsMkJBQU8sTUFBTSxHQUFiO0FBQ0Esd0JBQU0sT0FBTyxTQUFSLElBQXVCLFFBQVEsVUFBaEMsSUFBaUQsUUFBUSxZQUE3RDtBQUNJLCtCQUFPLE9BQU8sV0FBUCxFQUFQO0FBREoscUJBRUEsT0FBTyxPQUFPLEdBQVAsR0FBYSxTQUFLLFNBQUwsQ0FBZ0IsU0FBSyxNQUFMLENBQWE7QUFDN0MsaUNBQVMsS0FEb0M7QUFFN0Msa0NBQVUsU0FBSztBQUY4QixxQkFBYixFQUdqQyxNQUhpQyxDQUFoQixDQUFwQjtBQUlJLDZCQVRELEdBU2EsU0FBSyxJQUFMLENBQVcsU0FBSyxNQUFMLENBQWEsR0FBYixDQUFYLEVBQThCLFNBQUssTUFBTCxDQUFhLFNBQUssTUFBbEIsQ0FBOUIsRUFBeUQsUUFBekQsQ0FUYjs7QUFVSCw4QkFBVSxFQUFFLFdBQVcsU0FBYixFQUFWO0FBQ0g7QUE5VEssdUJBK1RlLFNBQUssS0FBTCxDQUFZLEdBQVosRUFBaUIsTUFBakIsRUFBeUIsT0FBekIsRUFBa0MsSUFBbEMsQ0EvVGY7QUFBQTtBQStURix3QkEvVEU7QUFBQSx5QkFnVUYsYUFBYSxRQWhVWDs7QUFpVUYsOEJBQUksU0FBUyxTQUFULENBQUo7QUFDSSwyQkFBTyxRQUFQO0FBREo7QUFFSiwwQkFBTSxJQUFJLGFBQUosQ0FBbUIsU0FBSyxFQUFMLEdBQVUsR0FBVixHQUFnQixTQUFLLElBQUwsQ0FBVyxRQUFYLENBQW5DLENBQU47QUFGSTtBQWpVRTtBQUFBO0FBQUEsS0FBZDs7QUF1VUE7O0FBRUEsUUFBSSxhQUFhOztBQUViLGNBQU0sWUFGTztBQUdiLGdCQUFRLFlBSEs7QUFJYixxQkFBYSxDQUFFLElBQUYsRUFBUSxJQUFSLEVBQWMsSUFBZCxFQUFvQixJQUFwQixFQUEwQixJQUExQixFQUFnQyxJQUFoQyxDQUpBO0FBS2IscUJBQWEsSUFMQTtBQU1iLG1CQUFXLElBTkU7QUFPYixnQkFBUTtBQUNKLG9CQUFRLHFHQURKO0FBRUosbUJBQU87QUFDSCwwQkFBVSxnQ0FEUDtBQUVILDJCQUFXO0FBRlIsYUFGSDtBQU1KLG1CQUFPLHdCQU5IO0FBT0osbUJBQU87QUFQSCxTQVBLO0FBZ0JiLGVBQU87QUFDSCxzQkFBVTtBQUNOLHVCQUFPLENBQ0gsbUJBREcsRUFDcUI7QUFDeEIsc0NBRkcsRUFFcUI7QUFDeEIsbUNBSEc7QUFERCxhQURQO0FBUUgsdUJBQVc7QUFDUCx3QkFBUSxDQUNKLEdBREksRUFDRztBQUNQLG1CQUZJLEVBRUc7QUFDUCxvQkFISSxFQUdHO0FBQ1Asb0JBSkksRUFJRztBQUNQLG9CQUxJLEVBS0c7QUFDUCxxQkFOSSxFQU1HO0FBQ1AscUJBUEksRUFPRztBQUNQLHFCQVJJLEVBUUc7QUFDUCxxQkFUSSxFQVNHO0FBQ1AscUJBVkksRUFVRztBQUNQLHFCQVhJO0FBREQ7QUFSUixTQWhCTTtBQXdDYixtQkFBVztBQUNQLHVCQUFXLEVBQUUsTUFBTSxRQUFSLEVBQWtCLFVBQVUsU0FBNUIsRUFBdUMsUUFBUSxLQUEvQyxFQUFzRCxTQUFTLEtBQS9ELEVBQXNFLFlBQVksQ0FBbEYsRUFBcUYsVUFBVSxZQUEvRixFQURKO0FBRVAsdUJBQVcsRUFBRSxNQUFNLFFBQVIsRUFBa0IsVUFBVSxTQUE1QixFQUF1QyxRQUFRLEtBQS9DLEVBQXNELFNBQVMsS0FBL0QsRUFBc0UsWUFBWSxDQUFsRixFQUFxRixVQUFVLE1BQS9GLEVBRko7QUFHUCx1QkFBVyxFQUFFLE1BQU0sUUFBUixFQUFrQixVQUFVLFNBQTVCLEVBQXVDLFFBQVEsS0FBL0MsRUFBc0QsU0FBUyxLQUEvRCxFQUFzRSxZQUFZLENBQWxGLEVBQXFGLFVBQVUsUUFBL0YsRUFISjtBQUlQLHVCQUFXLEVBQUUsTUFBTSxRQUFSLEVBQWtCLFVBQVUsU0FBNUIsRUFBdUMsUUFBUSxLQUEvQyxFQUFzRCxTQUFTLEtBQS9ELEVBQXNFLFlBQVksQ0FBbEYsRUFBcUYsVUFBVSxTQUEvRixFQUpKO0FBS1AsdUJBQVcsRUFBRSxNQUFNLFFBQVIsRUFBa0IsVUFBVSxTQUE1QixFQUF1QyxRQUFRLEtBQS9DLEVBQXNELFNBQVMsS0FBL0QsRUFBc0UsWUFBWSxDQUFsRixFQUFxRixVQUFVLFVBQS9GO0FBTEosU0F4Q0U7O0FBZ0RQLG9CQWhETztBQUFBOztBQWlEVCxtQkFBTyxTQUFLLGFBQUwsQ0FBb0I7QUFDdkIsZ0NBQWdCLFNBQUssS0FBTDtBQURPLGFBQXBCLENBQVA7QUFqRFM7QUFzRFAsc0JBdERPLDBCQXNEUyxNQXREVDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQXNEaUIsc0JBdERqQixtRkFzRDBCLEVBdEQxQjtBQXVETCxpQkF2REssR0F1REQsU0FBSyxNQUFMLENBQWEsTUFBYixDQXZEQztBQUFBLHVCQXdEYSxTQUFLLDBCQUFMLENBQWlDLFNBQUssTUFBTCxDQUFhO0FBQ2hFLGdDQUFZLEVBQUUsT0FBRixDQURvRDtBQUVoRSx1Q0FBbUIsRUFBRSxNQUFGO0FBRjZDLGlCQUFiLEVBR3BELE1BSG9ELENBQWpDLENBeERiO0FBQUE7QUF3REwseUJBeERLO0FBNERMLHlCQTVESyxHQTRETyxTQUFLLFlBQUwsRUE1RFA7QUE2REwsc0JBN0RLLEdBNkRJO0FBQ1QsNEJBQVEsRUFEQztBQUVULDRCQUFRLEVBRkM7QUFHVCxpQ0FBYSxTQUhKO0FBSVQsZ0NBQVksU0FBSyxPQUFMLENBQWMsU0FBZDtBQUpILGlCQTdESjtBQW1FTCxxQkFuRUssR0FtRUcsQ0FBRSxNQUFGLEVBQVUsTUFBVixDQW5FSDs7QUFvRVQscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxNQUFNLE1BQTFCLEVBQWtDLEdBQWxDLEVBQXVDO0FBQy9CLHdCQUQrQixHQUN4QixNQUFNLENBQU4sQ0FEd0I7QUFFL0IsMEJBRitCLEdBRXRCLFVBQVUsSUFBVixDQUZzQjs7QUFHbkMseUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxPQUFPLE1BQTNCLEVBQW1DLEdBQW5DLEVBQXdDO0FBQ2hDLDZCQURnQyxHQUN4QixPQUFPLENBQVAsQ0FEd0I7QUFFaEMsNkJBRmdDLEdBRXhCLFdBQVksTUFBTSxDQUFOLENBQVosQ0FGd0I7QUFHaEMsOEJBSGdDLEdBR3ZCLFdBQVksTUFBTSxDQUFOLENBQVosQ0FIdUI7O0FBSXBDLCtCQUFPLElBQVAsRUFBYSxJQUFiLENBQW1CLENBQUUsS0FBRixFQUFTLE1BQVQsQ0FBbkI7QUFDSDtBQUNKO0FBQ0QsdUJBQU8sTUFBUDtBQTlFUztBQUFBO0FBaUZQLG1CQWpGTyx1QkFpRk0sTUFqRk47QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFrRkwsaUJBbEZLLEdBa0ZELFNBQUssTUFBTCxDQUFhLE1BQWIsQ0FsRkM7QUFBQSx1QkFtRlUsU0FBSyx1QkFBTCxDQUE4QjtBQUM3QyxnQ0FBWSxFQUFFLE9BQUYsQ0FEaUM7QUFFN0MsdUNBQW1CLEVBQUUsTUFBRjtBQUYwQixpQkFBOUIsQ0FuRlY7QUFBQTtBQW1GTCxzQkFuRks7QUF1RkwseUJBdkZLLEdBdUZPLFNBQUssWUFBTCxFQXZGUDtBQXdGTCw4QkF4RkssR0F3RlksRUFBRSxPQUFGLEVBQVcsV0FBWCxFQXhGWjtBQXlGTCwyQkF6RkssR0F5RlMsU0FBUyxjQXpGbEI7O0FBMEZULHVCQUFPO0FBQ0gsaUNBQWEsU0FEVjtBQUVILGdDQUFZLFNBQUssT0FBTCxDQUFjLFNBQWQsQ0FGVDtBQUdILDRCQUFRLFdBQVksT0FBTyxNQUFQLENBQVosQ0FITDtBQUlILDJCQUFPLFdBQVksT0FBTyxLQUFQLENBQVosQ0FKSjtBQUtILDJCQUFPLFdBQVksT0FBTyxLQUFQLENBQVosQ0FMSjtBQU1ILDJCQUFPLFdBQVksT0FBTyxNQUFQLENBQVosQ0FOSjtBQU9ILDRCQUFRLFNBUEw7QUFRSCw0QkFBUSxTQVJMO0FBU0gsNkJBQVMsU0FUTjtBQVVILDZCQUFTLFNBVk47QUFXSCw0QkFBUSxXQUFZLE9BQU8sTUFBUCxDQUFaLENBWEw7QUFZSCw4QkFBVSxTQVpQO0FBYUgsa0NBQWMsU0FiWDtBQWNILCtCQUFXLFNBZFI7QUFlSCxrQ0FBYyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBZlg7QUFnQkgsbUNBQWUsV0FBWSxPQUFPLFdBQVAsQ0FBWixDQWhCWjtBQWlCSCw0QkFBUTtBQWpCTCxpQkFBUDtBQTFGUztBQUFBO0FBK0dQLG1CQS9HTyx1QkErR00sTUEvR047QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUErR2Msa0JBL0dkLG1GQStHdUIsRUEvR3ZCO0FBZ0hMLGFBaEhLLEdBZ0hELFNBQUssTUFBTCxDQUFhLE1BQWIsQ0FoSEM7O0FBaUhULG1CQUFPLFNBQUssdUJBQUwsQ0FBOEIsU0FBSyxNQUFMLENBQWE7QUFDOUMsNEJBQVksRUFBRSxPQUFGLENBRGtDO0FBRTlDLG1DQUFtQixFQUFFLE1BQUY7QUFGMkIsYUFBYixFQUdsQyxNQUhrQyxDQUE5QixDQUFQO0FBakhTO0FBdUhQLG1CQXZITyx1QkF1SE0sTUF2SE4sRUF1SGMsSUF2SGQsRUF1SG9CLElBdkhwQixFQXVIMEIsTUF2SDFCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUF1SGtDLHFCQXZIbEMsbUZBdUgwQyxTQXZIMUM7QUF1SHFELHNCQXZIckQsbUZBdUg4RCxFQXZIOUQ7O0FBd0hULG9CQUFJLFFBQVEsUUFBWjtBQUNJLDBCQUFNLElBQUksYUFBSixDQUFtQixTQUFLLEVBQUwsR0FBVSwyQkFBN0IsQ0FBTjtBQURKLGlCQUVJLENBMUhLLEdBMEhELFNBQUssTUFBTCxDQUFhLE1BQWIsQ0ExSEM7QUEySEwscUJBM0hLLEdBMkhHO0FBQ1IsK0JBQVcsU0FBSyxLQUFMLEVBREg7QUFFUiw4QkFBVSxFQUFFLElBQUYsQ0FGRjtBQUdSLDRCQUFRLFNBQUssVUFBTCxDQUFpQixJQUFqQixDQUhBO0FBSVIsK0JBQVcsQ0FKSDtBQUtSLDZCQUFTLEtBTEQ7QUFNUixnQ0FBWSxNQU5KO0FBT1IsZ0NBQVksRUFBRSxVQUFGO0FBUEosaUJBM0hIO0FBQUEsdUJBb0lZLFNBQUssWUFBTCxDQUFtQixTQUFLLE1BQUwsQ0FBYSxLQUFiLEVBQW9CLE1BQXBCLENBQW5CLENBcElaO0FBQUE7QUFvSUwsd0JBcElLOztBQXFJVCx1QkFBTztBQUNILDRCQUFRLFFBREw7QUFFSCwwQkFBTSxTQUFTLFNBQVQ7QUFGSCxpQkFBUDtBQXJJUztBQUFBO0FBMklQLG1CQTNJTyx1QkEySU0sRUEzSU47QUFBQTtBQUFBO0FBQUE7O0FBMklVLGtCQTNJVixtRkEySW1CLEVBM0luQjs7QUE0SVQsbUJBQU8sU0FBSyxZQUFMLENBQW1CLFNBQUssTUFBTCxDQUFhO0FBQ25DLDJCQUFXO0FBRHdCLGFBQWIsRUFFdkIsTUFGdUIsQ0FBbkIsQ0FBUDtBQTVJUztBQWlKYixlQWpKYSxtQkFpSkosSUFqSkksRUFpSnNGO0FBQUEsZ0JBQXBGLEdBQW9GLHVFQUE5RSxRQUE4RTtBQUFBLGdCQUFwRSxNQUFvRSx1RUFBM0QsS0FBMkQ7QUFBQSxnQkFBcEQsTUFBb0QsdUVBQTNDLEVBQTJDO0FBQUEsZ0JBQXZDLE9BQXVDLHVFQUE3QixTQUE2QjtBQUFBLGdCQUFsQixJQUFrQix1RUFBWCxTQUFXOztBQUMvRixnQkFBSSxNQUFNLEtBQUssSUFBTCxDQUFVLEtBQVYsRUFBaUIsR0FBakIsSUFBd0IsR0FBeEIsR0FBOEIsS0FBSyxPQUFuQyxHQUE2QyxHQUE3QyxHQUFtRCxLQUFLLGFBQUwsQ0FBb0IsSUFBcEIsRUFBMEIsTUFBMUIsQ0FBN0Q7QUFDQSxnQkFBSSxRQUFRLEtBQUssSUFBTCxDQUFXLE1BQVgsRUFBbUIsS0FBSyxhQUFMLENBQW9CLElBQXBCLENBQW5CLENBQVo7QUFDQSxnQkFBSSxPQUFPLFFBQVgsRUFBcUI7QUFDakIsb0JBQUksT0FBTyxJQUFQLENBQWEsS0FBYixFQUFvQixNQUF4QixFQUNJLE9BQU8sTUFBTSxLQUFLLFNBQUwsQ0FBZ0IsS0FBaEIsQ0FBYjtBQUNQLGFBSEQsTUFHTztBQUNILG9CQUFJLFFBQVEsS0FBSyxLQUFMLEdBQWMsUUFBZCxFQUFaO0FBQ0Esb0JBQUksVUFBVSxLQUFLLE1BQUwsQ0FBYSxFQUFFLFdBQVcsSUFBYixFQUFiLEVBQWtDLEtBQWxDLENBQWQ7QUFDQSx1QkFBTyxLQUFLLElBQUwsQ0FBVyxPQUFYLENBQVA7QUFDQSwwQkFBVTtBQUNOLDhCQUFVLEtBQUssTUFEVDtBQUVOLDZCQUFTLEtBRkg7QUFHTixpQ0FBYSxLQUFLLElBQUwsQ0FBVyxLQUFLLE1BQUwsQ0FBYSxLQUFiLENBQVgsRUFBZ0MsS0FBSyxNQUFMLENBQWEsS0FBSyxNQUFsQixDQUFoQyxDQUhQO0FBSU4sb0NBQWdCO0FBSlYsaUJBQVY7QUFNSDtBQUNELG1CQUFPLEtBQUssS0FBTCxDQUFZLEdBQVosRUFBaUIsTUFBakIsRUFBeUIsT0FBekIsRUFBa0MsSUFBbEMsQ0FBUDtBQUNIO0FBbktZLEtBQWpCOztBQXNLQTs7QUFFQSxRQUFJLE9BQU87O0FBRVAsY0FBTSxNQUZDO0FBR1AsZ0JBQVEsTUFIRDtBQUlQLHFCQUFhLENBQUUsSUFBRixFQUFRLElBQVIsQ0FKTixFQUlzQjtBQUM3QixxQkFBYSxJQUxOO0FBTVAsbUJBQVcsR0FOSjtBQU9QLG1CQUFXLGlDQVBKO0FBUVAsZ0JBQVE7QUFDSixvQkFBUSxxR0FESjtBQUVKLG1CQUFPLHFCQUZIO0FBR0osbUJBQU8sQ0FDSCxpQkFERyxFQUVILG9CQUZHLENBSEg7QUFPSixtQkFBTyxDQUNILHdEQURHLEVBRUgscUJBRkcsRUFHSCwyQkFIRztBQVBILFNBUkQ7QUFxQlAsZUFBTztBQUNILHNCQUFVO0FBQ04sdUJBQU8sQ0FDSCxpQkFERyxFQUVILG9CQUZHLEVBR0gsaUJBSEc7QUFERCxhQURQO0FBUUgsdUJBQVc7QUFDUCx3QkFBUSxDQUNKLDJCQURJLEVBRUosMEJBRkksRUFHSiw2QkFISSxFQUlKLDZCQUpJLEVBS0osdUJBTEksRUFNSiwrQkFOSSxFQU9KLDZCQVBJLEVBUUosbUJBUkksRUFTSiw4QkFUSSxFQVVKLGtDQVZJLEVBV0osNkJBWEksRUFZSix1QkFaSTtBQUREO0FBUlIsU0FyQkE7QUE4Q1AsbUJBQVc7QUFDUCx1QkFBVyxFQUFFLE1BQU0sUUFBUixFQUFrQixVQUFVLFNBQTVCLEVBQXVDLFFBQVEsS0FBL0MsRUFBc0QsU0FBUyxLQUEvRCxFQURKO0FBRVAsdUJBQVcsRUFBRSxNQUFNLFFBQVIsRUFBa0IsVUFBVSxTQUE1QixFQUF1QyxRQUFRLEtBQS9DLEVBQXNELFNBQVMsS0FBL0Q7QUFGSixTQTlDSjs7QUFtREQsb0JBbkRDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQW9Ea0IsU0FBSywwQkFBTCxFQXBEbEI7QUFBQTtBQW9EQyx3QkFwREQ7QUFxREMsb0JBckRELEdBcURRLFNBQVMsTUFBVCxDQXJEUjtBQXNEQyx1QkF0REQsR0FzRFcsS0FBSyxTQUFMLENBdERYO0FBdURDLHNCQXZERCxHQXVEVSxFQUFFLFFBQVEsSUFBVixFQXZEVjs7QUF3REgscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxTQUFLLFVBQUwsQ0FBZ0IsTUFBcEMsRUFBNEMsR0FBNUMsRUFBaUQ7QUFDekMsNEJBRHlDLEdBQzlCLFNBQUssVUFBTCxDQUFnQixDQUFoQixDQUQ4QjtBQUV6QywyQkFGeUMsR0FFL0I7QUFDVixnQ0FBUSxTQURFO0FBRVYsZ0NBQVEsU0FGRTtBQUdWLGlDQUFTO0FBSEMscUJBRitCOztBQU83Qyx3QkFBSSxZQUFZLE9BQWhCLEVBQXlCO0FBQ3JCLDRCQUFJLGVBQWUsUUFBUSxRQUFSLENBQW5CLEVBQXNDO0FBQ2xDLG9DQUFRLE1BQVIsSUFBa0IsV0FBWSxRQUFRLFFBQVIsRUFBa0IsV0FBbEIsRUFBK0IsT0FBL0IsQ0FBWixDQUFsQjtBQUNIO0FBQ0o7QUFDRCx3QkFBSSxZQUFZLE9BQWhCLEVBQXlCO0FBQ3JCLDRCQUFJLGFBQWEsUUFBUSxRQUFSLENBQWpCLEVBQW9DO0FBQ2hDLG9DQUFRLE9BQVIsSUFBbUIsV0FBWSxRQUFRLFFBQVIsRUFBa0IsU0FBbEIsRUFBNkIsT0FBN0IsQ0FBWixDQUFuQjtBQUNIO0FBQ0o7QUFDRCx3QkFBSSxRQUFRLE9BQVIsQ0FBSixFQUFzQjtBQUNsQiw0QkFBSSxRQUFRLE1BQVIsQ0FBSixFQUFxQjtBQUNqQixvQ0FBUSxNQUFSLElBQWtCLFFBQVEsT0FBUixJQUFtQixRQUFRLE1BQVIsQ0FBckM7QUFDSDtBQUNKO0FBQ0QsMkJBQU8sUUFBUCxJQUFtQixPQUFuQjtBQUNIO0FBQ0QsdUJBQU8sTUFBUDtBQWhGRztBQUFBO0FBbUZELHNCQW5GQywwQkFtRmUsTUFuRmY7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQW1GdUIsc0JBbkZ2QixtRkFtRmdDLEVBbkZoQztBQW9GQyxpQkFwRkQsR0FvRkssU0FBSyxNQUFMLENBQWEsTUFBYixDQXBGTDtBQUFBLHVCQXFGa0IsU0FBSyx3QkFBTCxDQUErQixTQUFLLE1BQUwsQ0FBYTtBQUM3RCw4QkFBVSxFQUFFLElBQUY7QUFEbUQsaUJBQWIsRUFFakQsTUFGaUQsQ0FBL0IsQ0FyRmxCO0FBQUE7QUFxRkMsd0JBckZEO0FBd0ZDLHlCQXhGRCxHQXdGYSxTQUFTLE1BQVQsQ0F4RmI7QUF5RkMseUJBekZELEdBeUZhLFNBQUssWUFBTCxFQXpGYjtBQTBGQyxzQkExRkQsR0EwRlU7QUFDVCw0QkFBUSxFQURDO0FBRVQsNEJBQVEsRUFGQztBQUdULGlDQUFhLFNBSEo7QUFJVCxnQ0FBWSxTQUFLLE9BQUwsQ0FBYyxTQUFkO0FBSkgsaUJBMUZWO0FBZ0dDLHFCQWhHRCxHQWdHUyxDQUFFLE1BQUYsRUFBVSxNQUFWLENBaEdUOztBQWlHSCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLE1BQU0sTUFBMUIsRUFBa0MsR0FBbEMsRUFBdUM7QUFDL0Isd0JBRCtCLEdBQ3hCLE1BQU0sQ0FBTixDQUR3QjtBQUUvQiwwQkFGK0IsR0FFdEIsVUFBVSxJQUFWLENBRnNCOztBQUduQyx5QkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLE9BQU8sTUFBM0IsRUFBbUMsR0FBbkMsRUFBd0M7QUFDaEMsNkJBRGdDLEdBQ3hCLE9BQU8sQ0FBUCxDQUR3QjtBQUVoQyw2QkFGZ0MsR0FFeEIsTUFBTSxXQUFOLElBQXFCLE1BRkc7QUFHaEMsOEJBSGdDLEdBR3ZCLE1BQU0sWUFBTixJQUFzQixTQUhDOztBQUlwQywrQkFBTyxJQUFQLEVBQWEsSUFBYixDQUFtQixDQUFFLEtBQUYsRUFBUyxNQUFULENBQW5CO0FBQ0g7QUFDSjtBQUNELHVCQUFPLE1BQVA7QUEzR0c7QUFBQTtBQThHRCxtQkE5R0MsdUJBOEdZLE1BOUdaO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBK0dnQixTQUFLLHFCQUFMLENBQTRCO0FBQzNDLDhCQUFVLFNBQUssUUFBTCxDQUFlLE1BQWY7QUFEaUMsaUJBQTVCLENBL0doQjtBQUFBO0FBK0dDLHNCQS9HRDtBQWtIQyx5QkFsSEQsR0FrSGEsT0FBTyxXQUFQLElBQXNCLElBbEhuQzs7QUFtSEgsdUJBQU87QUFDSCxpQ0FBYSxTQURWO0FBRUgsZ0NBQVksU0FBSyxPQUFMLENBQWMsU0FBZCxDQUZUO0FBR0gsNEJBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQUhMO0FBSUgsMkJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQUpKO0FBS0gsMkJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQUxKO0FBTUgsMkJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQU5KO0FBT0gsNEJBQVEsU0FQTDtBQVFILDRCQUFRLFNBUkw7QUFTSCw2QkFBUyxTQVROO0FBVUgsNkJBQVMsU0FWTjtBQVdILDRCQUFRLFdBQVksT0FBTyxNQUFQLENBQVosQ0FYTDtBQVlILDhCQUFVLFNBWlA7QUFhSCxrQ0FBYyxTQWJYO0FBY0gsK0JBQVcsU0FkUjtBQWVILGtDQUFjLFNBZlg7QUFnQkgsbUNBQWUsV0FBWSxPQUFPLFFBQVAsRUFBaUIsS0FBakIsQ0FBWixDQWhCWjtBQWlCSCw0QkFBUTtBQWpCTCxpQkFBUDtBQW5IRztBQUFBO0FBd0lELG1CQXhJQyx1QkF3SVksTUF4SVo7QUFBQTtBQUFBO0FBQUE7O0FBd0lvQixrQkF4SXBCLG1GQXdJNkIsRUF4STdCOztBQXlJSCxtQkFBTyxTQUFLLHFCQUFMLENBQTRCLFNBQUssTUFBTCxDQUFhO0FBQzVDLDBCQUFVLFNBQUssUUFBTCxDQUFlLE1BQWY7QUFEa0MsYUFBYixFQUVoQyxNQUZnQyxDQUE1QixDQUFQO0FBeklHO0FBOElELG1CQTlJQyx1QkE4SVksTUE5SVosRUE4SW9CLElBOUlwQixFQThJMEIsSUE5STFCLEVBOElnQyxNQTlJaEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQThJd0MscUJBOUl4QyxtRkE4SWdELFNBOUloRDtBQThJMkQsc0JBOUkzRCxtRkE4SW9FLEVBOUlwRTtBQStJQyxpQkEvSUQsR0ErSUssU0FBSyxNQUFMLENBQWEsTUFBYixDQS9JTDtBQWdKQyxxQkFoSkQsR0FnSlM7QUFDUiw4QkFBVSxFQUFFLElBQUYsQ0FERjtBQUVSLGtDQUFjLE1BRk47QUFHUixvQ0FBZ0IsRUFBRSxPQUFGLENBSFI7QUFJUiw0QkFBUyxRQUFRLEtBQVQsR0FBa0IsS0FBbEIsR0FBMEI7QUFKMUIsaUJBaEpUOztBQXNKSCxvQkFBSSxRQUFRLE9BQVo7QUFDSSwwQkFBTSxXQUFOLElBQXFCLEtBQXJCO0FBREosaUJBdEpHLE9Bd0prQixTQUFLLDhCQUFMLENBQXFDLFNBQUssTUFBTCxDQUFhLEtBQWIsRUFBb0IsTUFBcEIsQ0FBckMsQ0F4SmxCO0FBQUE7QUF3SkMsd0JBeEpEOztBQXlKSCx1QkFBTztBQUNILDRCQUFRLFFBREw7QUFFSCwwQkFBTSxTQUFTLFVBQVQsRUFBcUIsUUFBckI7QUFGSCxpQkFBUDtBQXpKRztBQUFBO0FBK0pELG1CQS9KQyx1QkErSlksRUEvSlo7QUFBQTs7QUFnS0gsbUJBQU8sU0FBSyxpQ0FBTCxDQUF3QyxFQUFFLFlBQVksRUFBZCxFQUF4QyxDQUFQO0FBaEtHO0FBbUtELGVBbktDLG1CQW1LUSxJQW5LUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBbUtjLGVBbktkLG1GQW1Lb0IsUUFuS3BCO0FBbUs4QixrQkFuSzlCLG1GQW1LdUMsS0FuS3ZDO0FBbUs4QyxrQkFuSzlDLG1GQW1LdUQsRUFuS3ZEO0FBbUsyRCxtQkFuSzNELG1GQW1LcUUsU0FuS3JFO0FBbUtnRixnQkFuS2hGLG1GQW1LdUYsU0FuS3ZGO0FBb0tDLG1CQXBLRCxHQW9LVyxTQUFLLGFBQUwsQ0FBb0IsSUFBcEIsRUFBMEIsTUFBMUIsQ0FwS1g7QUFxS0MsZUFyS0QsR0FxS08sU0FBSyxJQUFMLENBQVUsS0FBVixJQUFtQixHQUFuQixHQUF5QixTQUFLLE9BQTlCLEdBQXdDLEdBQXhDLEdBQThDLE9BcktyRDtBQXNLQyxpQkF0S0QsR0FzS1MsU0FBSyxJQUFMLENBQVcsTUFBWCxFQUFtQixTQUFLLGFBQUwsQ0FBb0IsSUFBcEIsQ0FBbkIsQ0F0S1Q7O0FBdUtILGdCQUFJLE9BQU8sUUFBWCxFQUFxQjtBQUNqQixvQkFBSSxPQUFPLElBQVAsQ0FBYSxLQUFiLEVBQW9CLE1BQXhCO0FBQ0ksMkJBQU8sTUFBTSxTQUFLLFNBQUwsQ0FBZ0IsS0FBaEIsQ0FBYjtBQURKO0FBRUgsYUFIRCxNQUdPO0FBQ0MscUJBREQsR0FDUyxTQUFLLEtBQUwsRUFEVDs7QUFFSCx1QkFBTyxTQUFLLFNBQUwsQ0FBZ0IsU0FBSyxNQUFMLENBQWEsRUFBRSxTQUFTLEtBQVgsRUFBYixFQUFpQyxLQUFqQyxDQUFoQixDQUFQO0FBQ0ksc0JBSEQsR0FHVSxTQUFLLGNBQUwsQ0FBcUIsU0FBSyxNQUExQixDQUhWO0FBSUMsb0JBSkQsR0FJUSxVQUFVLElBQVYsR0FBaUIsSUFKekI7QUFLQyx5QkFMRCxHQUthLFNBQUssSUFBTCxDQUFXLFNBQUssTUFBTCxDQUFhLElBQWIsQ0FBWCxFQUErQixNQUEvQixFQUF1QyxRQUF2QyxFQUFpRCxRQUFqRCxDQUxiOztBQU1ILDBCQUFVO0FBQ04sb0NBQWdCLG1DQURWO0FBRU4sc0NBQWtCLEtBQUssTUFGakI7QUFHTixnQ0FBWSxTQUFLLE1BSFg7QUFJTixpQ0FBYTtBQUpQLGlCQUFWO0FBTUg7QUFDRCxtQkFBTyxTQUFLLEtBQUwsQ0FBWSxHQUFaLEVBQWlCLE1BQWpCLEVBQXlCLE9BQXpCLEVBQWtDLElBQWxDLENBQVA7QUF2TEc7QUFBQSxLQUFYOztBQTJMQTs7QUFFQSxRQUFJLFdBQVc7O0FBRVgsY0FBTSxVQUZLO0FBR1gsZ0JBQVEsVUFIRztBQUlYLHFCQUFhLElBSkY7QUFLWCxxQkFBYSxJQUxGO0FBTVgsbUJBQVcsSUFOQTtBQU9YLGdCQUFRO0FBQ0osb0JBQVEscUdBREo7QUFFSixtQkFBTztBQUNILDBCQUFVLGdDQURQO0FBRUgsMkJBQVc7QUFGUixhQUZIO0FBTUosbUJBQU8sMEJBTkg7QUFPSixtQkFBTztBQVBILFNBUEc7QUFnQlgsZUFBTztBQUNILHNCQUFVO0FBQ04sdUJBQU8sQ0FDSCxhQURHLEVBRUgsV0FGRyxFQUdILFFBSEcsRUFJSCxRQUpHO0FBREQsYUFEUDtBQVNILHVCQUFXO0FBQ1Asd0JBQVEsQ0FDSixpQkFESSxFQUVKLFVBRkksRUFHSixXQUhJLEVBSUosY0FKSSxFQUtKLG9CQUxJLEVBTUosYUFOSSxFQU9KLGlCQVBJLEVBUUosZ0JBUkksRUFTSixrQkFUSSxFQVVKLG1CQVZJLEVBV0osYUFYSSxFQVlKLGlCQVpJLEVBYUosa0JBYkksRUFjSixnQkFkSSxFQWVKLGlCQWZJLEVBZ0JKLFVBaEJJLEVBaUJKLFdBakJJLEVBa0JKLGNBbEJJLEVBbUJKLGVBbkJJLEVBb0JKLGlCQXBCSSxFQXFCSixlQXJCSSxFQXNCSixnQkF0QkksRUF1QkosbUJBdkJJLEVBd0JKLGtCQXhCSSxFQXlCSixXQXpCSSxFQTBCSixZQTFCSSxFQTJCSixlQTNCSTtBQUREO0FBVFIsU0FoQkk7O0FBMERMLG9CQTFESztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQTJEYSxTQUFLLGVBQUwsQ0FBc0I7QUFDdEMsOEJBQVU7QUFENEIsaUJBQXRCLENBM0RiO0FBQUE7QUEyREgsdUJBM0RHO0FBOERILHNCQTlERyxHQThETSxFQTlETjtBQStESCxvQkEvREcsR0ErREksT0FBTyxJQUFQLENBQWEsT0FBYixDQS9ESjs7QUFnRVAscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxLQUFLLE1BQXpCLEVBQWlDLEdBQWpDLEVBQXNDO0FBQzlCLHVCQUQ4QixHQUN4QixLQUFLLENBQUwsQ0FEd0I7QUFFOUIsMEJBRjhCLEdBRXJCLFFBQVEsR0FBUixDQUZxQjtBQUc5Qix5QkFIOEIsR0FHdEIsSUFBSSxLQUFKLENBQVcsR0FBWCxDQUhzQjtBQUk5QixzQkFKOEIsR0FJekIsTUFBTSxDQUFOLENBSnlCO0FBSzlCLHdCQUw4QixHQUt2QixHQUFHLEtBQUgsQ0FBVSxDQUFWLEVBQWEsQ0FBYixDQUx1QjtBQU05Qix5QkFOOEIsR0FNdEIsR0FBRyxLQUFILENBQVUsQ0FBVixFQUFhLENBQWIsQ0FOc0I7O0FBT2xDLDJCQUFPLEtBQUssV0FBTCxFQUFQO0FBQ0EsNEJBQVEsTUFBTSxXQUFOLEVBQVI7QUFDSSwwQkFUOEIsR0FTckIsT0FBTyxHQUFQLEdBQWEsS0FUUTs7QUFVbEMsMkJBQU8sSUFBUCxDQUFhO0FBQ1QsOEJBQU0sRUFERztBQUVULGtDQUFVLE1BRkQ7QUFHVCxnQ0FBUSxJQUhDO0FBSVQsaUNBQVMsS0FKQTtBQUtULGdDQUFRO0FBTEMscUJBQWI7QUFPSDtBQUNELHVCQUFPLE1BQVA7QUFsRk87QUFBQTtBQXFGTCxvQkFyRks7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBc0ZELFNBQUssV0FBTCxFQXRGQztBQUFBO0FBQUEsdUJBdUZjLFNBQUsseUJBQUwsRUF2RmQ7QUFBQTtBQXVGSCx3QkF2Rkc7QUF3Rkgsd0JBeEZHLEdBd0ZRLFNBQVMsUUFBVCxDQXhGUjtBQXlGSCxzQkF6RkcsR0F5Rk0sRUFBRSxRQUFRLFFBQVYsRUF6Rk47OztBQTJGUCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFNBQUssVUFBTCxDQUFnQixNQUFwQyxFQUE0QyxHQUE1QyxFQUFpRDtBQUN6Qyw0QkFEeUMsR0FDOUIsU0FBSyxVQUFMLENBQWdCLENBQWhCLENBRDhCO0FBRXpDLDZCQUZ5QyxHQUU3QixTQUFTLFdBQVQsRUFGNkI7QUFHekMsMkJBSHlDLEdBRy9CO0FBQ1YsZ0NBQVEsU0FERTtBQUVWLGdDQUFRLFNBRkU7QUFHVixpQ0FBUztBQUhDLHFCQUgrQjs7QUFRN0Msd0JBQUksYUFBYSxTQUFTLFNBQVQsQ0FBakI7QUFDSSxnQ0FBUSxPQUFSLElBQW1CLFdBQVksU0FBUyxTQUFULEVBQW9CLFNBQXBCLEVBQStCLFFBQS9CLENBQVosQ0FBbkI7QUFESixxQkFFQSxJQUFJLGFBQWEsU0FBUyxRQUFULENBQWpCO0FBQ0ksZ0NBQVEsTUFBUixJQUFrQixXQUFZLFNBQVMsUUFBVCxFQUFtQixTQUFuQixFQUE4QixRQUE5QixDQUFaLENBQWxCO0FBREoscUJBRUEsUUFBUSxNQUFSLElBQWtCLFFBQVEsT0FBUixJQUFtQixRQUFRLE1BQVIsQ0FBckM7QUFDQSwyQkFBTyxRQUFQLElBQW1CLE9BQW5CO0FBQ0g7QUFDRCx1QkFBTyxNQUFQO0FBMUdPO0FBQUE7QUE2R0wsc0JBN0dLLDBCQTZHVyxNQTdHWDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQTZHbUIsc0JBN0duQixtRkE2RzRCLEVBN0c1QjtBQUFBLHVCQThHRCxTQUFLLFdBQUwsRUE5R0M7QUFBQTtBQUFBLHVCQStHZSxTQUFLLGtCQUFMLENBQXlCLFNBQUssTUFBTCxDQUFhO0FBQ3hELDhCQUFVLFNBQUssUUFBTCxDQUFlLE1BQWY7QUFEOEMsaUJBQWIsRUFFNUMsTUFGNEMsQ0FBekIsQ0EvR2Y7QUFBQTtBQStHSCx5QkEvR0c7QUFrSEgseUJBbEhHLEdBa0hTLFVBQVUsTUFBVixJQUFvQixJQWxIN0I7QUFrSGtDO0FBQ3JDLHNCQW5IRyxHQW1ITTtBQUNULDRCQUFRLFVBQVUsTUFBVixDQURDO0FBRVQsNEJBQVEsVUFBVSxNQUFWLENBRkM7QUFHVCxpQ0FBYSxTQUhKO0FBSVQsZ0NBQVksU0FBSyxPQUFMLENBQWMsU0FBZDtBQUpILGlCQW5ITjs7QUF5SFAsdUJBQU8sTUFBUCxJQUFpQixTQUFLLE1BQUwsQ0FBYSxPQUFPLE1BQVAsQ0FBYixFQUE2QixDQUE3QixDQUFqQjtBQUNBLHVCQUFPLE1BQVA7QUExSE87QUFBQTtBQTZITCxtQkE3SEssdUJBNkhRLE1BN0hSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQThIRCxTQUFLLFdBQUwsRUE5SEM7QUFBQTtBQStISCxpQkEvSEcsR0ErSEMsU0FBSyxNQUFMLENBQWEsTUFBYixDQS9IRDtBQUFBLHVCQWdJYSxTQUFLLGVBQUwsQ0FBc0I7QUFDdEMsOEJBQVUsRUFBRSxJQUFGO0FBRDRCLGlCQUF0QixDQWhJYjtBQUFBO0FBZ0lILHVCQWhJRztBQW1JSCxzQkFuSUcsR0FtSU0sUUFBUSxRQUFSLENBbklOO0FBb0lILHlCQXBJRyxHQW9JUyxPQUFPLE1BQVAsSUFBaUIsSUFwSTFCOztBQXFJUCx1QkFBTztBQUNILGlDQUFhLFNBRFY7QUFFSCxnQ0FBWSxTQUFLLE9BQUwsQ0FBYyxTQUFkLENBRlQ7QUFHSCw0QkFBUSxXQUFZLE9BQU8sTUFBUCxDQUFaLENBSEw7QUFJSCwyQkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBSko7QUFLSCwyQkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBTEo7QUFNSCwyQkFBTyxXQUFZLE9BQU8sTUFBUCxDQUFaLENBTko7QUFPSCw0QkFBUSxXQUFZLE9BQU8sTUFBUCxDQUFaLENBUEw7QUFRSCw0QkFBUSxXQUFZLE9BQU8sTUFBUCxDQUFaLENBUkw7QUFTSCw2QkFBUyxXQUFZLE9BQU8sWUFBUCxDQUFaLENBVE47QUFVSCw2QkFBUyxTQVZOO0FBV0gsNEJBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQVhMO0FBWUgsOEJBQVUsU0FaUDtBQWFILGtDQUFjLFNBYlg7QUFjSCwrQkFBVyxTQWRSO0FBZUgsa0NBQWMsU0FmWDtBQWdCSCxtQ0FBZSxXQUFZLE9BQU8sS0FBUCxDQUFaLENBaEJaO0FBaUJILDRCQUFRO0FBakJMLGlCQUFQO0FBcklPO0FBQUE7QUEwSkwsbUJBMUpLLHVCQTBKUSxNQTFKUjtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQTBKZ0Isc0JBMUpoQixtRkEwSnlCLEVBMUp6QjtBQUFBLHVCQTJKRCxTQUFLLFdBQUwsRUEzSkM7QUFBQTtBQTRKUCx1QkFBTyxTQUFLLGVBQUwsQ0FBc0IsU0FBSyxNQUFMLENBQWE7QUFDdEMsOEJBQVUsU0FBSyxRQUFMLENBQWUsTUFBZjtBQUQ0QixpQkFBYixFQUUxQixNQUYwQixDQUF0QixDQUFQO0FBNUpPO0FBQUE7QUFpS0wsbUJBaktLLHVCQWlLUSxNQWpLUixFQWlLZ0IsSUFqS2hCLEVBaUtzQixJQWpLdEIsRUFpSzRCLE1Baks1QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQWlLb0MscUJBaktwQyxtRkFpSzRDLFNBaks1QztBQWlLdUQsc0JBakt2RCxtRkFpS2dFLEVBaktoRTtBQUFBLHVCQWtLRCxTQUFLLFdBQUwsRUFsS0M7QUFBQTtBQW1LSCxpQkFuS0csR0FtS0MsU0FBSyxNQUFMLENBQWEsTUFBYixDQW5LRDtBQW9LSCxzQkFwS0csR0FvS00sZ0JBQWdCLFNBQUssVUFBTCxDQUFpQixJQUFqQixDQUFoQixHQUF5QyxRQXBLL0M7QUFxS0gscUJBcktHLEdBcUtLLEVBcktMO0FBc0tILGtCQXRLRyxHQXNLRSxFQUFFLElBQUYsRUFBUSxXQUFSLEVBdEtGOztBQXVLUCxvQkFBSSxRQUFRLFFBQVosRUFBc0I7QUFDbEIsMEJBQU0sUUFBTixJQUFrQixDQUFFLFNBQUYsRUFBYSxNQUFiLEVBQXFCLEVBQXJCLENBQWxCO0FBQ0gsaUJBRkQsTUFFTztBQUNILDBCQUFNLFFBQU4sSUFBa0IsQ0FBRSxLQUFGLEVBQVMsTUFBVCxFQUFpQixFQUFqQixDQUFsQjtBQUNIO0FBM0tNLHVCQTRLYyxTQUFLLE1BQUwsRUFBYyxTQUFLLE1BQUwsQ0FBYSxLQUFiLEVBQW9CLE1BQXBCLENBQWQsQ0E1S2Q7QUFBQTtBQTRLSCx3QkE1S0c7O0FBNktQLHVCQUFPO0FBQ0gsNEJBQVEsUUFETDtBQUVILDBCQUFNLFNBQVMsSUFBVDtBQUZILGlCQUFQO0FBN0tPO0FBQUE7QUFtTEwsbUJBbkxLLHVCQW1MUSxFQW5MUjtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBbUxZLHNCQW5MWixtRkFtTHFCLEVBbkxyQjtBQUFBLHVCQW9MRCxTQUFLLFdBQUwsRUFwTEM7QUFBQTtBQXFMSCxzQkFyTEcsR0FxTE0sT0FBTyxRQUFQLENBckxOLEVBcUx3Qjs7QUFDL0IsdUJBQU8sU0FBSyxzQkFBTCxDQUE2QixTQUFLLE1BQUwsQ0FBYTtBQUM3Qyw4QkFBVSxDQUFFLEVBQUYsRUFBTSxNQUFOO0FBRG1DLGlCQUFiLEVBRWpDLE1BRmlDLENBQTdCLENBQVA7QUF0TE87QUFBQTtBQTJMWCxhQTNMVyxtQkEyTEY7QUFDTCxtQkFBTyxLQUFLLFlBQUwsRUFBUDtBQUNILFNBN0xVO0FBK0xYLGVBL0xXLG1CQStMRixJQS9MRSxFQStMd0Y7QUFBQSxnQkFBcEYsR0FBb0YsdUVBQTlFLFFBQThFO0FBQUEsZ0JBQXBFLE1BQW9FLHVFQUEzRCxLQUEyRDtBQUFBLGdCQUFwRCxNQUFvRCx1RUFBM0MsRUFBMkM7QUFBQSxnQkFBdkMsT0FBdUMsdUVBQTdCLFNBQTZCO0FBQUEsZ0JBQWxCLElBQWtCLHVFQUFYLFNBQVc7O0FBQy9GLGdCQUFJLE1BQU0sS0FBSyxJQUFMLENBQVUsS0FBVixFQUFpQixHQUFqQixJQUF3QixHQUF4QixHQUE4QixJQUF4QztBQUNBLGdCQUFJLE9BQU8sUUFBWCxFQUFxQjtBQUNqQixvQkFBSSxPQUFPLElBQVAsQ0FBYSxNQUFiLEVBQXFCLE1BQXpCLEVBQ0ksT0FBTyxNQUFNLEtBQUssU0FBTCxDQUFnQixNQUFoQixDQUFiO0FBQ1AsYUFIRCxNQUdPO0FBQ0gsb0JBQUksQ0FBQyxLQUFLLE1BQVYsRUFDSSxNQUFNLElBQUksbUJBQUosQ0FBeUIsS0FBSyxFQUFMLEdBQVUsYUFBVixHQUEwQixLQUFLLEVBQS9CLEdBQW9DLHNDQUE3RCxDQUFOO0FBQ0osb0JBQUksQ0FBQyxLQUFLLE1BQVYsRUFDSSxNQUFNLElBQUksbUJBQUosQ0FBeUIsS0FBSyxFQUFMLEdBQVUsYUFBVixHQUEwQixLQUFLLEVBQS9CLEdBQW9DLHNDQUE3RCxDQUFOO0FBQ0osb0JBQUksSUFBSSxFQUFSO0FBQ0Esb0JBQUksWUFBWSxNQUFoQixFQUNJLElBQUksT0FBTyxRQUFQLENBQUo7QUFDSixvQkFBSSxRQUFRLEtBQUssS0FBTCxFQUFaO0FBQ0Esb0JBQUksVUFBVTtBQUNWLDhCQUFVLElBREE7QUFFViwwQkFBTSxLQUZJO0FBR1YsOEJBQVU7QUFIQSxpQkFBZDtBQUtBLG9CQUFJLEVBQUUsSUFBRixDQUFRLEdBQVIsQ0FBSjtBQUNBLHVCQUFPLEtBQUssSUFBTCxDQUFXLE9BQVgsQ0FBUDtBQUNBLG9CQUFJLFFBQ0EsV0FBVyxLQUFYLEdBQ0EsYUFEQSxHQUNnQixLQUFLLE1BRHJCLEdBRUEsaUJBRkEsR0FFb0IsT0FBTyxXQUFQLEVBRnBCLEdBR0EsTUFIQSxHQUdTLEtBSFQsR0FJQSxVQUpBLEdBSWEsSUFKYixHQUtBLFVBTEEsR0FLYSxDQU5qQjtBQVFBLG9CQUFJLFlBQVksS0FBSyxJQUFMLENBQVcsS0FBSyxNQUFMLENBQWEsS0FBYixDQUFYLEVBQWdDLEtBQUssTUFBTCxDQUFhLEtBQUssTUFBbEIsQ0FBaEMsRUFBMkQsTUFBM0QsQ0FBaEI7QUFDQSxvQkFBSSxPQUFPLEtBQUssTUFBTCxHQUFjLEdBQWQsR0FBb0IsU0FBL0I7QUFDQSwwQkFBVTtBQUNOLHNDQUFrQixLQUFLLE1BRGpCO0FBRU4scUNBQWlCLFdBQVcsS0FBSyxjQUFMLENBQXFCLElBQXJCLENBRnRCO0FBR04sc0NBQWtCO0FBSFosaUJBQVY7QUFLSDtBQUNELG1CQUFPLEtBQUssS0FBTCxDQUFZLEdBQVosRUFBaUIsTUFBakIsRUFBeUIsT0FBekIsRUFBa0MsSUFBbEMsQ0FBUDtBQUNIO0FBck9VLEtBQWY7O0FBd09BOztBQUVBLFFBQUksT0FBTzs7QUFFUCxjQUFNLE1BRkM7QUFHUCxnQkFBUSxPQUhEO0FBSVAscUJBQWEsQ0FBRSxJQUFGLEVBQVEsSUFBUixDQUpOLEVBSXNCO0FBQzdCLG1CQUFXLEdBTEo7QUFNUCxnQkFBUTtBQUNKLG9CQUFRLHFHQURKO0FBRUosbUJBQU87QUFDSCwwQkFBVSx1QkFEUDtBQUVILDJCQUFXO0FBRlIsYUFGSDtBQU1KLG1CQUFPLG1CQU5IO0FBT0osbUJBQU8sQ0FDSCw4QkFERyxFQUVILDZCQUZHO0FBUEgsU0FORDtBQWtCUCxlQUFPO0FBQ0gsc0JBQVU7QUFDTix1QkFBTyxDQUNILE1BREcsRUFFSCxlQUZHLEVBR0gsY0FIRyxFQUlILGVBSkc7QUFERCxhQURQO0FBU0gsdUJBQVc7QUFDUCx3QkFBUSxDQUNKLFNBREksRUFFSixPQUZJLEVBR0osY0FISSxFQUlKLFdBSkksRUFLSixhQUxJLEVBTUosY0FOSSxFQU9KLGNBUEksRUFRSixvQkFSSSxFQVNKLGNBVEksRUFVSixjQVZJLEVBV0osY0FYSTtBQUREO0FBVFIsU0FsQkE7O0FBNENELG9CQTVDQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBNkNrQixTQUFLLGFBQUwsRUE3Q2xCO0FBQUE7QUE2Q0Msd0JBN0NEO0FBOENDLHVCQTlDRCxHQThDVyxTQUFTLE9BQVQsQ0E5Q1g7QUErQ0Msb0JBL0NELEdBK0NRLE9BQU8sSUFBUCxDQUFhLE9BQWIsQ0EvQ1I7QUFnREMsc0JBaERELEdBZ0RVLEVBaERWOztBQWlESCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLEtBQUssTUFBekIsRUFBaUMsR0FBakMsRUFBc0M7QUFDOUIsc0JBRDhCLEdBQ3pCLEtBQUssQ0FBTCxDQUR5QjtBQUU5QiwwQkFGOEIsR0FFckIsUUFBUSxFQUFSLENBRnFCO0FBQUEsaUNBR1osR0FBRyxLQUFILENBQVUsR0FBVixDQUhZO0FBQUE7QUFHNUIsd0JBSDRCO0FBR3RCLHlCQUhzQjs7QUFJbEMsMkJBQU8sS0FBSyxXQUFMLEVBQVA7QUFDQSw0QkFBUSxNQUFNLFdBQU4sRUFBUjtBQUNBLHdCQUFJLFFBQVEsS0FBWjtBQUNJLCtCQUFPLE1BQVA7QUFESixxQkFFQSxPQUFPLFNBQUssa0JBQUwsQ0FBeUIsSUFBekIsQ0FBUDtBQUNBLDRCQUFRLFNBQUssa0JBQUwsQ0FBeUIsS0FBekIsQ0FBUjtBQUNJLDBCQVY4QixHQVVyQixPQUFPLEdBQVAsR0FBYSxLQVZROztBQVdsQywyQkFBTyxJQUFQLENBQWE7QUFDVCw4QkFBTSxFQURHO0FBRVQsa0NBQVUsTUFGRDtBQUdULGdDQUFRLElBSEM7QUFJVCxpQ0FBUyxLQUpBO0FBS1QsZ0NBQVE7QUFMQyxxQkFBYjtBQU9IO0FBQ0QsdUJBQU8sTUFBUDtBQXBFRztBQUFBO0FBdUVELG9CQXZFQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBd0VHLFNBQUssV0FBTCxFQXhFSDtBQUFBO0FBQUEsdUJBeUVrQixTQUFLLGtCQUFMLEVBekVsQjtBQUFBO0FBeUVDLHdCQXpFRDtBQTBFQyx3QkExRUQsR0EwRVksU0FBUyxRQUFULENBMUVaO0FBMkVDLHNCQTNFRCxHQTJFVSxFQUFFLFFBQVEsUUFBVixFQTNFVjtBQTRFQyxxQkE1RUQsR0E0RVMsU0FBUyxPQUFULENBNUVUO0FBNkVDLDBCQTdFRCxHQTZFYyxPQUFPLElBQVAsQ0FBYSxLQUFiLENBN0VkOztBQThFSCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFdBQVcsTUFBL0IsRUFBdUMsR0FBdkMsRUFBNEM7QUFDcEMsNEJBRG9DLEdBQ3pCLFdBQVcsQ0FBWCxDQUR5QjtBQUVwQyw2QkFGb0MsR0FFeEIsU0FBUyxXQUFULEVBRndCO0FBR3hDOztBQUNBLHdCQUFJLGFBQWEsS0FBakI7QUFDSSxvQ0FBWSxNQUFaO0FBREoscUJBRUksT0FOb0MsR0FNMUI7QUFDVixnQ0FBUSxNQUFNLFFBQU4sQ0FERTtBQUVWLGdDQUFRLFNBRkU7QUFHVixpQ0FBUyxNQUFNLFFBQU47QUFIQyxxQkFOMEI7O0FBV3hDLDJCQUFPLFNBQVAsSUFBb0IsT0FBcEI7QUFDSDtBQUNELHVCQUFPLE1BQVA7QUEzRkc7QUFBQTtBQThGRCxzQkE5RkMsMEJBOEZlLE1BOUZmO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQThGdUIsc0JBOUZ2QixtRkE4RmdDLEVBOUZoQztBQUFBLHVCQStGRyxTQUFLLFdBQUwsRUEvRkg7QUFBQTtBQWdHQyxpQkFoR0QsR0FnR0ssU0FBSyxNQUFMLENBQWEsTUFBYixDQWhHTDtBQUFBLHVCQWlHa0IsU0FBSyxrQkFBTCxDQUF5QixTQUFLLE1BQUwsQ0FBYTtBQUN2RCw0QkFBUSxFQUFFLElBQUY7QUFEK0MsaUJBQWIsRUFFM0MsTUFGMkMsQ0FBekIsQ0FqR2xCO0FBQUE7QUFpR0Msd0JBakdEOztBQW9HSCxvQkFBSSxFQUFFLElBQUYsS0FBVyxRQUFmLEVBQXlCO0FBQ2pCLDZCQURpQixHQUNMLFNBQVMsRUFBRSxJQUFGLENBQVQsQ0FESztBQUVqQiw2QkFGaUIsR0FFTCxTQUFLLFlBQUwsRUFGSztBQUdqQiwwQkFIaUIsR0FHUjtBQUNULGdDQUFRLFVBQVUsTUFBVixDQURDO0FBRVQsZ0NBQVEsVUFBVSxNQUFWLENBRkM7QUFHVCxxQ0FBYSxTQUhKO0FBSVQsb0NBQVksU0FBSyxPQUFMLENBQWMsU0FBZDtBQUpILHFCQUhROztBQVNyQiwyQkFBTyxNQUFQLElBQWlCLFNBQUssTUFBTCxDQUFhLE9BQU8sTUFBUCxDQUFiLEVBQTZCLENBQTdCLEVBQWdDLElBQWhDLENBQWpCO0FBQ0EsMkJBQU8sTUFBUCxJQUFpQixTQUFLLE1BQUwsQ0FBYSxPQUFPLE1BQVAsQ0FBYixFQUE2QixDQUE3QixDQUFqQjtBQUNBLDJCQUFPLE1BQVA7QUFDSCxpQkFaRDtBQWFBLDBCQUFNLElBQUksYUFBSixDQUFtQixTQUFLLEVBQUwsR0FBVSxHQUFWLEdBQWdCLEVBQUUsUUFBRixDQUFoQixHQUE4Qix1Q0FBakQsQ0FBTjtBQWJBO0FBcEdHO0FBQUE7QUFvSEQsbUJBcEhDLHVCQW9IWSxNQXBIWjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkFxSEcsU0FBSyxXQUFMLEVBckhIO0FBQUE7QUFzSEMsaUJBdEhELEdBc0hLLFNBQUssTUFBTCxDQUFhLE1BQWIsQ0F0SEw7QUFBQSx1QkF1SGlCLFNBQUssbUJBQUwsQ0FBMEI7QUFDMUMsNEJBQVEsRUFBRSxJQUFGO0FBRGtDLGlCQUExQixDQXZIakI7QUFBQTtBQXVIQyx1QkF2SEQ7QUEwSEMsc0JBMUhELEdBMEhVLFFBQVEsRUFBRSxJQUFGLENBQVIsQ0ExSFY7QUEySEMseUJBM0hELEdBMkhhLE9BQU8sU0FBUCxJQUFvQixJQTNIakM7O0FBNEhILHVCQUFPO0FBQ0gsaUNBQWEsU0FEVjtBQUVILGdDQUFZLFNBQUssT0FBTCxDQUFjLFNBQWQsQ0FGVDtBQUdILDRCQUFRLE9BQU8sTUFBUCxJQUFpQixPQUFPLE1BQVAsQ0FBakIsR0FBa0MsU0FIdkM7QUFJSCwyQkFBTyxPQUFPLEtBQVAsSUFBZ0IsT0FBTyxLQUFQLENBQWhCLEdBQWdDLFNBSnBDO0FBS0gsMkJBQU8sT0FBTyxNQUFQLElBQWlCLE9BQU8sS0FBUCxDQUFqQixHQUFpQyxTQUxyQztBQU1ILDJCQUFPLE9BQU8sS0FBUCxJQUFnQixPQUFPLE1BQVAsQ0FBaEIsR0FBaUMsU0FOckM7QUFPSCw0QkFBUSxTQVBMO0FBUUgsNEJBQVEsU0FSTDtBQVNILDZCQUFTLFNBVE47QUFVSCw2QkFBUyxTQVZOO0FBV0gsNEJBQVEsT0FBTyxNQUFQLElBQWlCLE9BQU8sTUFBUCxDQUFqQixHQUFrQyxTQVh2QztBQVlILDhCQUFVLFNBWlA7QUFhSCxrQ0FBYyxTQWJYO0FBY0gsK0JBQVcsT0FBTyxLQUFQLElBQWdCLE9BQU8sS0FBUCxDQUFoQixHQUFnQyxTQWR4QztBQWVILGtDQUFjLE9BQU8sU0FBUCxJQUFvQixPQUFPLFNBQVAsQ0FBcEIsR0FBd0MsU0FmbkQ7QUFnQkgsbUNBQWUsT0FBTyxLQUFQLElBQWdCLE9BQU8sS0FBUCxDQUFoQixHQUFnQyxTQWhCNUM7QUFpQkgsNEJBQVE7QUFqQkwsaUJBQVA7QUE1SEc7QUFBQTtBQWlKRCxtQkFqSkMsdUJBaUpZLE1BakpaO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBaUpvQixzQkFqSnBCLG1GQWlKNkIsRUFqSjdCO0FBQUEsdUJBa0pHLFNBQUssV0FBTCxFQWxKSDtBQUFBO0FBbUpILHVCQUFPLFNBQUssbUJBQUwsQ0FBMEIsU0FBSyxNQUFMLENBQWE7QUFDMUMsNEJBQVEsU0FBSyxRQUFMLENBQWUsTUFBZjtBQURrQyxpQkFBYixFQUU5QixNQUY4QixDQUExQixDQUFQO0FBbkpHO0FBQUE7QUF3SkQsbUJBeEpDLHVCQXdKWSxNQXhKWixFQXdKb0IsSUF4SnBCLEVBd0owQixJQXhKMUIsRUF3SmdDLE1BeEpoQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQXdKd0MscUJBeEp4QyxtRkF3SmdELFNBeEpoRDtBQXdKMkQsc0JBeEozRCxtRkF3Sm9FLEVBeEpwRTtBQUFBLHVCQXlKRyxTQUFLLFdBQUwsRUF6Skg7QUFBQTtBQTBKQyxxQkExSkQsR0EwSlM7QUFDUiw0QkFBUSxTQUFLLFFBQUwsQ0FBZSxNQUFmLENBREE7QUFFUiw0QkFBUSxJQUZBO0FBR1IsOEJBQVUsTUFIRjtBQUlSLDRCQUFRO0FBSkEsaUJBMUpUO0FBQUEsdUJBZ0trQixTQUFLLGdCQUFMLENBQXVCLFNBQUssTUFBTCxDQUFhLEtBQWIsRUFBb0IsTUFBcEIsQ0FBdkIsQ0FoS2xCO0FBQUE7QUFnS0Msd0JBaEtEOztBQWlLSCx1QkFBTztBQUNILDRCQUFRLFFBREw7QUFFSCwwQkFBTSxTQUFTLFFBQVQsRUFBbUIsVUFBbkI7QUFGSCxpQkFBUDtBQWpLRztBQUFBO0FBdUtELG1CQXZLQyx1QkF1S1ksRUF2S1o7QUFBQTs7QUFBQTtBQUFBLHVCQXdLRyxTQUFLLFdBQUwsRUF4S0g7QUFBQTtBQXlLSCx1QkFBTyxTQUFLLHNCQUFMLENBQTZCLEVBQUUsWUFBWSxFQUFkLEVBQTdCLENBQVA7QUF6S0c7QUFBQTtBQTRLUCxrQkE1S08sc0JBNEtLLEtBNUtMLEVBNEtZO0FBQ2YsZ0JBQUksYUFBYSxNQUFNLFFBQU4sQ0FBakI7QUFDQSxnQkFBSSxTQUFTLFNBQWI7QUFDQSxnQkFBSSxjQUFjLENBQWxCLEVBQXFCO0FBQ2pCLHlCQUFTLE1BQVQ7QUFDSCxhQUZELE1BRU8sSUFBSyxjQUFjLENBQWYsSUFBc0IsY0FBYyxDQUF4QyxFQUE0QztBQUMvQyx5QkFBUyxVQUFUO0FBQ0gsYUFGTSxNQUVBO0FBQ0gseUJBQVMsUUFBVDtBQUNIO0FBQ0QsZ0JBQUksWUFBWSxNQUFNLG1CQUFOLElBQTZCLElBQTdDO0FBQ0EsZ0JBQUksU0FBUyxLQUFLLGFBQUwsQ0FBbUIsTUFBTSxNQUFOLENBQW5CLENBQWI7QUFDQSxnQkFBSSxTQUFTO0FBQ1Qsd0JBQVEsS0FEQztBQUVULHNCQUFNLE1BQU0sSUFBTixDQUZHO0FBR1QsMEJBQVUsT0FBTyxRQUFQLENBSEQ7QUFJVCw2QkFBYSxTQUpKO0FBS1QsNEJBQVksS0FBSyxPQUFMLENBQWMsU0FBZCxDQUxIO0FBTVQsd0JBQVEsT0FOQztBQU9ULHdCQUFRLE1BQU0sTUFBTixDQVBDO0FBUVQseUJBQVMsTUFBTSxNQUFOLENBUkE7QUFTVCwwQkFBVSxNQUFNLGNBQU4sQ0FURDtBQVVULDZCQUFhLE1BQU0sUUFBTixDQVZKO0FBV1QsMEJBQVU7QUFYRCxhQUFiO0FBYUEsbUJBQU8sTUFBUDtBQUNILFNBdE1NO0FBd01ELGtCQXhNQyxzQkF3TVcsRUF4TVg7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkF5TUcsU0FBSyxXQUFMLEVBek1IO0FBQUE7QUFBQSx1QkEwTWtCLFNBQUssb0JBQUwsQ0FBMkIsRUFBRSxZQUFZLEVBQWQsRUFBM0IsQ0ExTWxCO0FBQUE7QUEwTUMsd0JBMU1EO0FBMk1DLHFCQTNNRCxHQTJNUyxTQUFTLFFBQVQsRUFBbUIsRUFBbkIsQ0EzTVQ7O0FBNE1ILHVCQUFPLFNBQUssVUFBTCxDQUFpQixTQUFLLE1BQUwsQ0FBYSxFQUFFLE1BQU0sRUFBUixFQUFiLEVBQTJCLEtBQTNCLENBQWpCLENBQVA7QUE1TUc7QUFBQTtBQStNRCxlQS9NQyxtQkErTVEsSUEvTVI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBK01jLG1CQS9NZCxtRkErTW9CLFFBL01wQjtBQStNOEIsc0JBL005QixtRkErTXVDLEtBL012QztBQStNOEMsc0JBL005QyxtRkErTXVELEVBL012RDtBQStNMkQsdUJBL00zRCxtRkErTXFFLFNBL01yRTtBQStNZ0Ysb0JBL01oRixtRkErTXVGLFNBL012RjtBQWdOQyxtQkFoTkQsR0FnTk8sU0FBSyxJQUFMLENBQVUsS0FBVixFQUFpQixHQUFqQixJQUF3QixHQUF4QixHQUE4QixTQUFLLE9BQW5DLEdBQTZDLEdBQTdDLEdBQW1ELFNBQUssYUFBTCxDQUFvQixJQUFwQixFQUEwQixNQUExQixDQWhOMUQ7QUFpTkMscUJBak5ELEdBaU5TLFNBQUssSUFBTCxDQUFXLE1BQVgsRUFBbUIsU0FBSyxhQUFMLENBQW9CLElBQXBCLENBQW5CLENBak5UOztBQWtOSCxvQkFBSSxPQUFPLFFBQVgsRUFBcUI7QUFDakIsd0JBQUksT0FBTyxJQUFQLENBQWEsS0FBYixFQUFvQixNQUF4QjtBQUNJLCtCQUFPLE1BQU0sU0FBSyxTQUFMLENBQWdCLEtBQWhCLENBQWI7QUFESjtBQUVILGlCQUhELE1BR087QUFDQyx5QkFERCxHQUNTLFNBQUssS0FBTCxFQURUOztBQUVILDJCQUFPLFNBQUssU0FBTCxDQUFnQixTQUFLLE1BQUwsQ0FBYTtBQUNoQyxpQ0FBUyxLQUR1QjtBQUVoQyxrQ0FBVTtBQUZzQixxQkFBYixFQUdwQixLQUhvQixDQUFoQixDQUFQO0FBSUEsOEJBQVU7QUFDTix3Q0FBZ0IsbUNBRFY7QUFFTiwwQ0FBa0IsS0FBSyxNQUZqQjtBQUdOLCtCQUFPLFNBQUssTUFITjtBQUlOLGdDQUFRLFNBQUssSUFBTCxDQUFXLFNBQUssTUFBTCxDQUFhLElBQWIsQ0FBWCxFQUErQixTQUFLLE1BQUwsQ0FBYSxTQUFLLE1BQWxCLENBQS9CLEVBQTBELFFBQTFEO0FBSkYscUJBQVY7QUFNSDtBQWpPRSx1QkFrT2tCLFNBQUssS0FBTCxDQUFZLEdBQVosRUFBaUIsTUFBakIsRUFBeUIsT0FBekIsRUFBa0MsSUFBbEMsQ0FsT2xCO0FBQUE7QUFrT0Msd0JBbE9EOztBQW1PSCxvQkFBSSxhQUFhLFFBQWpCO0FBQ0ksd0JBQUksQ0FBQyxTQUFTLFNBQVQsQ0FBTDtBQUNJLDhCQUFNLElBQUksYUFBSixDQUFtQixTQUFLLEVBQUwsR0FBVSxHQUFWLEdBQWdCLFNBQUssSUFBTCxDQUFXLFFBQVgsQ0FBbkMsQ0FBTjtBQURKO0FBREosaUJBR0EsT0FBTyxRQUFQO0FBdE9HO0FBQUE7QUFBQSxLQUFYOztBQTBPQTs7QUFFQSxRQUFJLGFBQWE7O0FBRWIsY0FBTSxZQUZPO0FBR2IsZ0JBQVEsYUFISztBQUliLHFCQUFhLElBSkEsRUFJTTtBQUNuQixxQkFBYSxJQUxBLEVBS007QUFDbkIsZ0JBQVE7QUFDSixvQkFBUSxxR0FESjtBQUVKLG1CQUFPLDRCQUZIO0FBR0osbUJBQU8seUJBSEg7QUFJSixtQkFBTztBQUpILFNBTks7QUFZYixlQUFPO0FBQ0gsc0JBQVU7QUFDTix1QkFBTyxDQUNILGtCQURHLEVBRUgsdUJBRkcsRUFHSCxvQkFIRztBQURELGFBRFA7QUFRSCx1QkFBVztBQUNQLHVCQUFPLENBQ0gsaUJBREcsRUFFSCx5QkFGRyxDQURBO0FBS1Asd0JBQVEsQ0FDSiw2QkFESSxFQUVKLDBCQUZJLEVBR0osY0FISSxFQUlKLGNBSkksRUFLSixlQUxJLEVBTUosWUFOSSxFQU9KLHFCQVBJLEVBUUosbUJBUkksRUFRaUI7QUFDckIsOEJBVEk7QUFMRDtBQVJSLFNBWk07QUFzQ2IsbUJBQVc7QUFDUCx1QkFBVyxFQUFFLE1BQU0sU0FBUixFQUFtQixVQUFVLFNBQTdCLEVBQXdDLFFBQVEsS0FBaEQsRUFBdUQsU0FBUyxLQUFoRSxFQURKO0FBRVAsdUJBQVcsRUFBRSxNQUFNLFNBQVIsRUFBbUIsVUFBVSxTQUE3QixFQUF3QyxRQUFRLEtBQWhELEVBQXVELFNBQVMsS0FBaEUsRUFGSjtBQUdQLHVCQUFXLEVBQUUsTUFBTSxTQUFSLEVBQW1CLFVBQVUsU0FBN0IsRUFBd0MsUUFBUSxLQUFoRCxFQUF1RCxTQUFTLEtBQWhFLEVBSEo7QUFJUCx1QkFBVyxFQUFFLE1BQU0sU0FBUixFQUFtQixVQUFVLFNBQTdCLEVBQXdDLFFBQVEsS0FBaEQsRUFBdUQsU0FBUyxLQUFoRSxFQUpKO0FBS1AsdUJBQVcsRUFBRSxNQUFNLFNBQVIsRUFBbUIsVUFBVSxTQUE3QixFQUF3QyxRQUFRLEtBQWhELEVBQXVELFNBQVMsS0FBaEUsRUFMSjtBQU1QLHVCQUFXLEVBQUUsTUFBTSxTQUFSLEVBQW1CLFVBQVUsU0FBN0IsRUFBd0MsUUFBUSxLQUFoRCxFQUF1RCxTQUFTLEtBQWhFLEVBTko7QUFPUCx1QkFBVyxFQUFFLE1BQU0sU0FBUixFQUFtQixVQUFVLFNBQTdCLEVBQXdDLFFBQVEsS0FBaEQsRUFBdUQsU0FBUyxLQUFoRSxFQVBKO0FBUVAsdUJBQVcsRUFBRSxNQUFNLFNBQVIsRUFBbUIsVUFBVSxTQUE3QixFQUF3QyxRQUFRLEtBQWhELEVBQXVELFNBQVMsS0FBaEUsRUFSSjtBQVNQLHVCQUFXLEVBQUUsTUFBTSxTQUFSLEVBQW1CLFVBQVUsU0FBN0IsRUFBd0MsUUFBUSxLQUFoRCxFQUF1RCxTQUFTLEtBQWhFLEVBVEo7QUFVUCx1QkFBVyxFQUFFLE1BQU0sU0FBUixFQUFtQixVQUFVLFNBQTdCLEVBQXdDLFFBQVEsS0FBaEQsRUFBdUQsU0FBUyxLQUFoRSxFQVZKO0FBV1AsdUJBQVcsRUFBRSxNQUFNLFNBQVIsRUFBbUIsVUFBVSxTQUE3QixFQUF3QyxRQUFRLEtBQWhELEVBQXVELFNBQVMsS0FBaEU7QUFYSixTQXRDRTs7QUFvRFAsb0JBcERPO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkFxREgsU0FBSyxXQUFMLEVBckRHO0FBQUE7QUFBQSx1QkFzRFksU0FBSyx3QkFBTCxFQXREWjtBQUFBO0FBc0RMLHdCQXRESztBQXVETCxzQkF2REssR0F1REksRUFBRSxRQUFRLFFBQVYsRUF2REo7O0FBd0RULHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksU0FBUyxNQUE3QixFQUFxQyxHQUFyQyxFQUEwQztBQUNsQywyQkFEa0MsR0FDeEIsU0FBUyxDQUFULENBRHdCO0FBRWxDLDRCQUZrQyxHQUV2QixRQUFRLFVBQVIsQ0FGdUI7QUFHbEMsOEJBSGtDLEdBR3JCLFNBSHFCO0FBSWxDLHdCQUprQyxHQUkzQixXQUFZLFFBQVEsU0FBUixJQUFxQixVQUFqQyxDQUoyQjtBQUtsQyx3QkFMa0MsR0FLM0IsV0FBWSxRQUFRLGNBQVIsSUFBMEIsVUFBdEMsQ0FMMkI7QUFNbEMsMkJBTmtDLEdBTXhCO0FBQ1YsZ0NBQVEsSUFERTtBQUVWLGdDQUFRLElBRkU7QUFHVixpQ0FBUyxTQUFLLEdBQUwsQ0FBVSxJQUFWLEVBQWdCLElBQWhCO0FBSEMscUJBTndCOztBQVd0QywyQkFBTyxRQUFQLElBQW1CLE9BQW5CO0FBQ0g7QUFDRCx1QkFBTyxNQUFQO0FBckVTO0FBQUE7QUF3RWIsbUJBeEVhLHVCQXdFQSxNQXhFQSxFQXdFUTtBQUNqQixnQkFBSSxRQUFRLE9BQU8sQ0FBUCxDQUFaO0FBQ0EsZ0JBQUksU0FBUyxPQUFPLENBQVAsQ0FBYjtBQUNBLG1CQUFPLENBQUUsS0FBRixFQUFTLE1BQVQsQ0FBUDtBQUNILFNBNUVZO0FBOEViLG9CQTlFYSx3QkE4RUMsT0E5RUQsRUE4RVU7QUFDbkIsZ0JBQUksU0FBUyxFQUFiO0FBQ0EsaUJBQUssSUFBSSxJQUFJLENBQWIsRUFBZ0IsSUFBSSxRQUFRLE1BQTVCLEVBQW9DLEdBQXBDLEVBQXlDO0FBQ3JDLHVCQUFPLElBQVAsQ0FBYSxLQUFLLFdBQUwsQ0FBa0IsUUFBUSxDQUFSLENBQWxCLENBQWI7QUFDSDtBQUNELG1CQUFPLE1BQVA7QUFDSCxTQXBGWTtBQXNGUCxzQkF0Rk8sMEJBc0ZTLE1BdEZUO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFzRmlCLHNCQXRGakIsbUZBc0YwQixFQXRGMUI7QUFBQSx1QkF1RkgsU0FBSyxXQUFMLEVBdkZHO0FBQUE7QUF3RkwsaUJBeEZLLEdBd0ZELFNBQUssTUFBTCxDQUFhLE1BQWIsQ0F4RkM7QUFBQSx1QkF5RmEsU0FBSywwQkFBTCxDQUFpQyxTQUFLLE1BQUwsQ0FBYTtBQUNoRSwwQkFBTSxFQUFFLElBQUY7QUFEMEQsaUJBQWIsRUFFcEQsTUFGb0QsQ0FBakMsQ0F6RmI7QUFBQTtBQXlGTCx5QkF6Rks7QUE0RkwseUJBNUZLLEdBNEZPLFVBQVUsV0FBVixJQUF5QixJQTVGaEM7QUE2Rkwsc0JBN0ZLLEdBNkZJO0FBQ1QsNEJBQVEsRUFEQztBQUVULDRCQUFRLEVBRkM7QUFHVCxpQ0FBYSxTQUhKO0FBSVQsZ0NBQVksU0FBSyxPQUFMLENBQWMsU0FBZDtBQUpILGlCQTdGSjtBQW1HTCxxQkFuR0ssR0FtR0csQ0FBRSxNQUFGLEVBQVUsTUFBVixDQW5HSDs7QUFvR1QscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxNQUFNLE1BQTFCLEVBQWtDLEdBQWxDLEVBQXVDO0FBQy9CLHdCQUQrQixHQUN4QixNQUFNLENBQU4sQ0FEd0I7O0FBRW5DLDJCQUFPLElBQVAsSUFBZSxTQUFLLFlBQUwsQ0FBbUIsVUFBVSxJQUFWLENBQW5CLENBQWY7QUFDSDtBQUNELHVCQUFPLE1BQVA7QUF4R1M7QUFBQTtBQTJHYixtQkEzR2EsdUJBMkdBLE1BM0dBLEVBMkdRLE1BM0dSLEVBMkdnQjtBQUN6QixnQkFBSSxZQUFZLE9BQU8sV0FBUCxJQUFzQixJQUF0QztBQUNBLG1CQUFPO0FBQ0gsNkJBQWEsU0FEVjtBQUVILDRCQUFZLEtBQUssT0FBTCxDQUFjLFNBQWQsQ0FGVDtBQUdILHdCQUFRLFNBSEw7QUFJSCx1QkFBTyxTQUpKO0FBS0gsdUJBQU8sV0FBWSxPQUFPLFNBQVAsQ0FBWixDQUxKO0FBTUgsdUJBQU8sV0FBWSxPQUFPLFNBQVAsQ0FBWixDQU5KO0FBT0gsd0JBQVEsU0FQTDtBQVFILHdCQUFRLFNBUkw7QUFTSCx5QkFBUyxTQVROO0FBVUgseUJBQVMsU0FWTjtBQVdILHdCQUFRLFdBQVksT0FBTyxXQUFQLENBQVosQ0FYTDtBQVlILDBCQUFVLFNBWlA7QUFhSCw4QkFBYyxTQWJYO0FBY0gsMkJBQVcsU0FkUjtBQWVILDhCQUFjLFNBZlg7QUFnQkgsK0JBQWUsV0FBWSxPQUFPLFdBQVAsQ0FBWixDQWhCWjtBQWlCSCx3QkFBUTtBQWpCTCxhQUFQO0FBbUJILFNBaElZO0FBa0lQLG1CQWxJTyx1QkFrSU0sTUFsSU47QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkFtSUgsU0FBSyxXQUFMLEVBbklHO0FBQUE7QUFvSUwsaUJBcElLLEdBb0lELFNBQUssTUFBTCxDQUFhLE1BQWIsQ0FwSUM7QUFBQSx1QkFxSVUsU0FBSyxxQkFBTCxDQUE0QjtBQUMzQywwQkFBTSxFQUFFLElBQUY7QUFEcUMsaUJBQTVCLENBcklWO0FBQUE7QUFxSUwsc0JBcklLOztBQXdJVCx1QkFBTyxTQUFLLFdBQUwsQ0FBa0IsTUFBbEIsRUFBMEIsQ0FBMUIsQ0FBUDtBQXhJUztBQUFBO0FBMklQLG1CQTNJTyx1QkEySU0sTUEzSU47QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUEySWMsc0JBM0lkLG1GQTJJdUIsRUEzSXZCO0FBQUEsdUJBNElILFNBQUssV0FBTCxFQTVJRztBQUFBO0FBNklULHVCQUFPLFNBQUssdUJBQUwsQ0FBOEIsU0FBSyxNQUFMLENBQWE7QUFDOUM7QUFDQSwwQkFBTSxTQUFLLFFBQUwsQ0FBZSxNQUFmO0FBRndDLGlCQUFiLEVBR2xDLE1BSGtDLENBQTlCLENBQVA7QUE3SVM7QUFBQTtBQW1KUCxtQkFuSk8sdUJBbUpNLE1BbkpOLEVBbUpjLElBbkpkLEVBbUpvQixJQW5KcEIsRUFtSjBCLE1BbkoxQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQW1Ka0MscUJBbkpsQyxtRkFtSjBDLFNBbkoxQztBQW1KcUQsc0JBbkpyRCxtRkFtSjhELEVBbko5RDtBQUFBLHVCQW9KSCxTQUFLLFdBQUwsRUFwSkc7QUFBQTtBQXFKTCxpQkFySkssR0FxSkQsU0FBSyxNQUFMLENBQWEsTUFBYixDQXJKQztBQXNKTCwwQkF0SkssR0FzSlEsU0F0SlIsRUFzSm1CO0FBQzVCOztBQUNJLHlCQXhKSyxHQXdKUSxRQUFRLEtBQVQsR0FBa0IsS0FBbEIsR0FBMEIsS0F4SmpDO0FBeUpMLHFCQXpKSyxHQXlKRyxTQUFLLE9BQUwsQ0FBYztBQUN0QixnQ0FBWSxFQUFFLE9BQUYsQ0FEVTtBQUV0QixrQ0FBYyxFQUFFLE1BQUYsQ0FGUTtBQUd0Qiw2QkFBUyxRQUFRLFVBSEs7QUFJdEIsOEJBQVUsU0FBUyxVQUpHO0FBS3RCLGlDQUFhLFNBTFM7QUFNdEIsaUNBQWEsU0FBSyxVQUFMLENBQWlCLElBQWpCLENBTlM7QUFPdEIsdUNBQW1CLFNBQUssS0FBTCxHQUFjLFFBQWQ7QUFQRyxpQkFBZCxDQXpKSDtBQUFBLHVCQWtLWSxTQUFLLHNCQUFMLENBQTZCLFNBQUssTUFBTCxDQUFhLEtBQWIsRUFBb0IsTUFBcEIsQ0FBN0IsQ0FsS1o7QUFBQTtBQWtLTCx3QkFsS0s7O0FBbUtULHVCQUFPO0FBQ0gsNEJBQVEsUUFETDtBQUVILDBCQUFNLFNBQVMsSUFBVCxFQUFlLFFBQWY7QUFGSCxpQkFBUDtBQW5LUztBQUFBO0FBeUtQLG9CQXpLTyx3QkF5S08sR0F6S1A7QUFBQTs7QUFBQTtBQUFBLHVCQTBLSCxTQUFLLFdBQUwsRUExS0c7QUFBQTtBQTJLVCx1QkFBTyxTQUFLLHNCQUFMLENBQTZCLEVBQUUsYUFBYSxHQUFmLEVBQTdCLENBQVA7QUEzS1M7QUFBQTtBQThLUCxtQkE5S08sdUJBOEtNLEVBOUtOO0FBQUE7O0FBQUE7QUFBQSx1QkErS0gsU0FBSyxXQUFMLEVBL0tHO0FBQUE7QUFnTFQsdUJBQU8sU0FBSyxZQUFMLENBQW1CLENBQUUsRUFBRixDQUFuQixDQUFQO0FBaExTO0FBQUE7QUFtTGIsYUFuTGEsbUJBbUxKO0FBQ0wsbUJBQU8sS0FBSyxZQUFMLEVBQVA7QUFDSCxTQXJMWTtBQXVMUCxlQXZMTyxtQkF1TEUsSUF2TEY7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQXVMUSxtQkF2TFIsbUZBdUxjLFFBdkxkO0FBdUx3QixzQkF2THhCLG1GQXVMaUMsS0F2TGpDO0FBdUx3QyxzQkF2THhDLG1GQXVMaUQsRUF2TGpEO0FBdUxxRCx1QkF2THJELG1GQXVMK0QsU0F2TC9EO0FBdUwwRSxvQkF2TDFFLG1GQXVMaUYsU0F2TGpGO0FBd0xMLG1CQXhMSyxHQXdMQyxNQUFNLFNBQUssYUFBTCxDQUFvQixJQUFwQixFQUEwQixNQUExQixDQXhMUDtBQXlMTCxtQkF6TEssR0F5TEMsU0FBSyxJQUFMLENBQVUsS0FBVixJQUFtQixHQXpMcEI7QUEwTEwscUJBMUxLLEdBMExHLFNBQUssSUFBTCxDQUFXLE1BQVgsRUFBbUIsU0FBSyxhQUFMLENBQW9CLElBQXBCLENBQW5CLENBMUxIOztBQTJMVCxvQkFBSSxPQUFPLFFBQVgsRUFBcUI7QUFDakIsd0JBQUksT0FBTyxJQUFQLENBQWEsTUFBYixFQUFxQixNQUF6QjtBQUNJLCtCQUFPLE1BQU0sU0FBSyxTQUFMLENBQWdCLE1BQWhCLENBQWI7QUFESjtBQUVILGlCQUhELE1BR087QUFDQyx5QkFERCxHQUNTLFNBQUssS0FBTCxHQUFjLFFBQWQsRUFEVDtBQUVDLHdCQUZELEdBRVEsTUFBTSxJQUFOLEdBQWEsS0FBYixHQUFxQixJQUY3Qjs7QUFHSCw4QkFBVTtBQUNOLHdDQUFnQixrQkFEVjtBQUVOLGtDQUFVLFNBQUssTUFGVDtBQUdOLHFDQUFhO0FBSFAscUJBQVY7QUFLQSx3QkFBSSxVQUFVLE1BQWQsRUFBc0I7QUFDbEIsK0JBQU8sU0FBSyxTQUFMLENBQWdCLEtBQWhCLENBQVA7QUFDQSxnQ0FBUSxnQkFBUixJQUE0QixLQUFLLE1BQWpDO0FBQ0EsZ0NBQVEsSUFBUjtBQUNIO0FBQ0csMEJBYkQsR0FhVSxTQUFLLGNBQUwsQ0FBcUIsU0FBSyxNQUExQixDQWJWO0FBY0MsNkJBZEQsR0FjYSxTQUFLLElBQUwsQ0FBVyxTQUFLLE1BQUwsQ0FBYSxJQUFiLENBQVgsRUFBK0IsTUFBL0IsRUFBdUMsUUFBdkMsRUFBaUQsUUFBakQsQ0FkYjs7QUFlSCw0QkFBUSxXQUFSLElBQXVCLFNBQXZCO0FBQ0g7QUE5TVEsdUJBK01ZLFNBQUssS0FBTCxDQUFZLEdBQVosRUFBaUIsTUFBakIsRUFBeUIsT0FBekIsRUFBa0MsSUFBbEMsQ0EvTVo7QUFBQTtBQStNTCx3QkEvTUs7QUFBQSx5QkFnTkwsT0FBTyxTQWhORjs7QUFpTkwsOEJBQUksYUFBYSxRQUFqQjtBQUNJLHdCQUFJLENBQUMsU0FBUyxTQUFULENBQUw7QUFDSSw4QkFBTSxJQUFJLGFBQUosQ0FBbUIsU0FBSyxFQUFMLEdBQVUsR0FBVixHQUFnQixTQUFLLElBQUwsQ0FBVyxRQUFYLENBQW5DLENBQU47QUFESjtBQURKO0FBak5LO0FBb05MLDJCQUFPLFFBQVA7QUFwTks7QUFzTlQsMkJBQU8sUUFBUDtBQXROUztBQUFBO0FBQUE7QUFBQSxLQUFqQjs7QUEwTkE7O0FBRUEsUUFBSSxZQUFZOztBQUVaLGNBQU0sV0FGTTtBQUdaLGdCQUFRLFdBSEk7QUFJWixxQkFBYSxDQUFFLElBQUYsRUFBUSxJQUFSLEVBQWMsSUFBZCxDQUpELEVBSXVCO0FBQ25DLHFCQUFhLElBTEQ7QUFNWixtQkFBVyxtQ0FOQztBQU9aLGdCQUFRO0FBQ0osb0JBQVEscUdBREo7QUFFSixtQkFBTywrQkFGSDtBQUdKLG1CQUFPLDJCQUhIO0FBSUosbUJBQU87QUFKSCxTQVBJO0FBYVosZUFBTztBQUNILHNCQUFVO0FBQ04sdUJBQU8sQ0FDSCxVQURHLEVBQ1M7QUFDWiwyQkFGRyxFQUdILFFBSEcsRUFJSCxRQUpHO0FBREQsYUFEUDtBQVNILHVCQUFXO0FBQ1AsdUJBQU8sQ0FDSCxTQURHLEVBRUgsWUFGRyxFQUdILGtCQUhHLENBREE7QUFNUCx3QkFBUSxDQUNKLEtBREksRUFFSixhQUZJLEVBR0osTUFISTtBQU5EO0FBVFIsU0FiSzs7QUFvQ04sb0JBcENNO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkFxQ2EsU0FBSyxpQkFBTCxFQXJDYjtBQUFBO0FBcUNKLHdCQXJDSTtBQXNDSixzQkF0Q0ksR0FzQ0ssRUFBRSxRQUFRLFFBQVYsRUF0Q0w7QUF1Q0osb0JBdkNJLEdBdUNHO0FBQ1AsNEJBQVEsU0FBUyxtQkFBVCxDQUREO0FBRVAsNEJBQVEsU0FBUyxrQkFBVCxDQUZEO0FBR1AsNkJBQVMsU0FBUyxpQkFBVDtBQUhGLGlCQXZDSDtBQTRDSixxQkE1Q0ksR0E0Q0k7QUFDUiw0QkFBUSxTQUFTLGlCQUFULENBREE7QUFFUiw0QkFBUSxTQUFTLGdCQUFULENBRkE7QUFHUiw2QkFBUyxTQUFTLGVBQVQ7QUFIRCxpQkE1Q0o7QUFpREosc0JBakRJLEdBaURLLFNBQUssT0FBTCxDQUFhLENBQWIsQ0FqREw7QUFrREosc0JBbERJLEdBa0RLLFNBQUssT0FBTCxDQUFhLE1BQWIsQ0FsREw7O0FBbURSLHVCQUFPLE9BQU8sTUFBUCxDQUFQLElBQXlCLElBQXpCO0FBQ0EsdUJBQU8sT0FBTyxPQUFQLENBQVAsSUFBMEIsS0FBMUI7QUFDQSx1QkFBTyxNQUFQO0FBckRRO0FBQUE7QUF3RE4sc0JBeERNLDBCQXdEVSxNQXhEVjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUF3RGtCLHNCQXhEbEIsbUZBd0QyQixFQXhEM0I7QUFBQSx1QkF5RGMsU0FBSyxrQkFBTCxDQUF5QixNQUF6QixDQXpEZDtBQUFBO0FBeURKLHlCQXpESTtBQTBESix5QkExREksR0EwRFEsU0FBVSxVQUFVLFdBQVYsSUFBeUIsSUFBbkMsQ0ExRFI7QUEyREosc0JBM0RJLEdBMkRLO0FBQ1QsNEJBQVEsRUFEQztBQUVULDRCQUFRLEVBRkM7QUFHVCxpQ0FBYSxTQUhKO0FBSVQsZ0NBQVksU0FBSyxPQUFMLENBQWMsU0FBZDtBQUpILGlCQTNETDtBQWlFSixxQkFqRUksR0FpRUksQ0FBRSxNQUFGLEVBQVUsTUFBVixDQWpFSjs7QUFrRVIscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxNQUFNLE1BQTFCLEVBQWtDLEdBQWxDLEVBQXVDO0FBQy9CLHdCQUQrQixHQUN4QixNQUFNLENBQU4sQ0FEd0I7QUFFL0IsMEJBRitCLEdBRXRCLFVBQVUsSUFBVixDQUZzQjs7QUFHbkMseUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxPQUFPLE1BQTNCLEVBQW1DLEdBQW5DLEVBQXdDO0FBQ2hDLDZCQURnQyxHQUN4QixPQUFPLENBQVAsQ0FEd0I7QUFFaEMsNkJBRmdDLEdBRXhCLFdBQVksTUFBTSxDQUFOLENBQVosQ0FGd0I7QUFHaEMsOEJBSGdDLEdBR3ZCLFdBQVksTUFBTSxDQUFOLENBQVosQ0FIdUI7O0FBSXBDLCtCQUFPLElBQVAsRUFBYSxJQUFiLENBQW1CLENBQUUsS0FBRixFQUFTLE1BQVQsQ0FBbkI7QUFDSDtBQUNKO0FBQ0QsdUJBQU8sTUFBUDtBQTVFUTtBQUFBO0FBK0VOLG1CQS9FTSx1QkErRU8sTUEvRVA7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkFnRlcsU0FBSyxlQUFMLEVBaEZYO0FBQUE7QUFnRkosc0JBaEZJO0FBaUZKLHlCQWpGSSxHQWlGUSxTQUFVLE9BQU8sV0FBUCxJQUFzQixJQUFoQyxDQWpGUjs7QUFrRlIsdUJBQU87QUFDSCxpQ0FBYSxTQURWO0FBRUgsZ0NBQVksU0FBSyxPQUFMLENBQWMsU0FBZCxDQUZUO0FBR0gsNEJBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQUhMO0FBSUgsMkJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQUpKO0FBS0gsMkJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQUxKO0FBTUgsMkJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQU5KO0FBT0gsNEJBQVEsU0FQTDtBQVFILDRCQUFRLFdBQVksT0FBTyxNQUFQLENBQVosQ0FSTDtBQVNILDZCQUFTLFNBVE47QUFVSCw2QkFBUyxTQVZOO0FBV0gsNEJBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQVhMO0FBWUgsOEJBQVUsU0FaUDtBQWFILGtDQUFjLFNBYlg7QUFjSCwrQkFBVyxXQUFZLE9BQU8sU0FBUCxDQUFaLENBZFI7QUFlSCxrQ0FBYyxTQWZYO0FBZ0JILG1DQUFlLFdBQVksT0FBTyxRQUFQLENBQVosQ0FoQlo7QUFpQkgsNEJBQVE7QUFqQkwsaUJBQVA7QUFsRlE7QUFBQTtBQXVHTixtQkF2R00sdUJBdUdPLE1BdkdQO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBdUdlLGtCQXZHZixtRkF1R3dCLEVBdkd4QjtBQXdHSixvQkF4R0ksR0F3R08sRUF4R1A7O0FBeUdSLG1CQUFPLFNBQUssZUFBTCxDQUFzQixNQUF0QixDQUFQO0FBekdRO0FBNEdOLG1CQTVHTSx1QkE0R08sTUE1R1AsRUE0R2UsSUE1R2YsRUE0R3FCLElBNUdyQixFQTRHMkIsTUE1RzNCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUE0R21DLHFCQTVHbkMsbUZBNEcyQyxTQTVHM0M7QUE0R3NELHNCQTVHdEQsbUZBNEcrRCxFQTVHL0Q7QUE2R0osc0JBN0dJLEdBNkdLLGdCQUFnQixTQUFLLFVBQUwsQ0FBaUIsSUFBakIsQ0E3R3JCO0FBOEdKLHFCQTlHSSxHQThHSTtBQUNSLDRCQUFTLFFBQVEsS0FBVCxHQUFrQixRQUFsQixHQUE2QixRQUQ3QjtBQUVSLHFDQUFrQixRQUFRLFFBQVQsR0FBcUIsQ0FBckIsR0FBeUI7QUFGbEMsaUJBOUdKOztBQWtIUixvQkFBSSxRQUFRLFFBQVosRUFBc0I7QUFDbEIsd0JBQUksUUFBUSxLQUFaO0FBQ0ksOEJBQU0sT0FBTixJQUFpQixNQUFqQjtBQURKO0FBR0ksOEJBQU0sUUFBTixJQUFrQixNQUFsQjtBQUhKO0FBSUgsaUJBTEQsTUFLTztBQUNILDBCQUFNLE9BQU4sSUFBaUIsS0FBakI7QUFDQSwwQkFBTSxRQUFOLElBQWtCLE1BQWxCO0FBQ0g7QUExSE8sdUJBMkhhLFNBQUssTUFBTCxFQUFjLFNBQUssTUFBTCxDQUFhLEtBQWIsRUFBb0IsTUFBcEIsQ0FBZCxDQTNIYjtBQUFBO0FBMkhKLHdCQTNISTs7QUE0SFIsdUJBQU87QUFDSCw0QkFBUSxRQURMO0FBRUgsMEJBQU0sU0FBUyxJQUFUO0FBRkgsaUJBQVA7QUE1SFE7QUFBQTtBQWtJTixtQkFsSU0sdUJBa0lPLEVBbElQO0FBQUE7O0FBbUlSLG1CQUFPLFNBQUssc0JBQUwsQ0FBNkIsRUFBRSxNQUFNLEVBQVIsRUFBN0IsQ0FBUDtBQW5JUTtBQXNJWixlQXRJWSxtQkFzSUgsSUF0SUcsRUFzSXVGO0FBQUEsZ0JBQXBGLEdBQW9GLHVFQUE5RSxRQUE4RTtBQUFBLGdCQUFwRSxNQUFvRSx1RUFBM0QsS0FBMkQ7QUFBQSxnQkFBcEQsTUFBb0QsdUVBQTNDLEVBQTJDO0FBQUEsZ0JBQXZDLE9BQXVDLHVFQUE3QixTQUE2QjtBQUFBLGdCQUFsQixJQUFrQix1RUFBWCxTQUFXOztBQUMvRixnQkFBSSxLQUFLLEVBQUwsSUFBVyxXQUFmLEVBQ0ksTUFBTSxJQUFJLGFBQUosQ0FBbUIsS0FBSyxFQUFMLEdBQVUsbURBQTdCLENBQU47QUFDSixnQkFBSSxNQUFNLEtBQUssSUFBTCxDQUFVLEtBQVYsSUFBbUIsR0FBbkIsR0FBeUIsSUFBbkM7QUFDQSxnQkFBSSxPQUFPLFFBQVgsRUFBcUI7QUFDakIsb0JBQUksT0FBTyxJQUFQLENBQWEsTUFBYixFQUFxQixNQUF6QixFQUNJLE9BQU8sTUFBTSxLQUFLLFNBQUwsQ0FBZ0IsTUFBaEIsQ0FBYjtBQUNQLGFBSEQsTUFHTztBQUNILG9CQUFJLFFBQVEsS0FBSyxLQUFMLEdBQWMsUUFBMUI7QUFDQSx1QkFBTyxLQUFLLFNBQUwsQ0FBZ0IsTUFBaEIsQ0FBUDtBQUNBLG9CQUFJLFNBQVMsS0FBSyxjQUFMLENBQXFCLEtBQUssTUFBMUIsQ0FBYjtBQUNBLG9CQUFJLE9BQU8sS0FBSyxNQUFMLEdBQWMsS0FBekI7QUFDQSwwQkFBVTtBQUNOLDZCQUFTLEtBQUssTUFEUjtBQUVOLCtCQUFXLE1BQU0sUUFBTixFQUZMO0FBR04sbUNBQWUsS0FBSyxJQUFMLENBQVcsS0FBSyxNQUFMLENBQWEsSUFBYixDQUFYLEVBQStCLE1BQS9CLEVBQXVDLFFBQXZDLEVBQWlELFFBQWpELENBSFQ7QUFJTixvQ0FBZ0IsbUNBSlY7QUFLTixzQ0FBa0IsS0FBSztBQUxqQixpQkFBVjtBQU9IO0FBQ0QsbUJBQU8sS0FBSyxLQUFMLENBQVksR0FBWixFQUFpQixNQUFqQixFQUF5QixPQUF6QixFQUFrQyxJQUFsQyxDQUFQO0FBQ0g7QUEzSlcsS0FBaEI7O0FBOEpBOztBQUVBLFFBQUksY0FBYyxPQUFRLFNBQVIsRUFBbUI7O0FBRWpDLGNBQU0sYUFGMkI7QUFHakMsZ0JBQVEsYUFIeUI7QUFJakMscUJBQWEsSUFKb0IsRUFJZDtBQUNuQixxQkFBYSxJQUxvQjtBQU1qQyxnQkFBUTtBQUNKLG9CQUFRLHFHQURKO0FBRUosbUJBQU8sZ0NBRkg7QUFHSixtQkFBTyw0QkFISDtBQUlKLG1CQUFPO0FBSkgsU0FOeUI7QUFZakMsbUJBQVc7QUFDUCx1QkFBVyxFQUFFLE1BQU0sU0FBUixFQUFtQixVQUFVLFNBQTdCLEVBQXdDLFFBQVEsS0FBaEQsRUFBdUQsU0FBUyxLQUFoRTtBQURKO0FBWnNCLEtBQW5CLENBQWxCOztBQWlCQTs7QUFFQSxRQUFJLGFBQWE7O0FBRWIsY0FBTSxZQUZPO0FBR2IsZ0JBQVEsY0FISztBQUliLHFCQUFhLElBSkEsRUFJTTtBQUNuQixxQkFBYSxJQUxBO0FBTWIsZ0JBQVE7QUFDSixvQkFBUSxxR0FESjtBQUVKLG1CQUFPLDhCQUZIO0FBR0osbUJBQU8sMEJBSEg7QUFJSixtQkFBTztBQUpILFNBTks7QUFZYixlQUFPO0FBQ0gsc0JBQVU7QUFDTix1QkFBTyxDQUNILGdCQURHLEVBRUgsc0JBRkcsRUFHSCxxQkFIRyxFQUlILDBCQUpHO0FBREQsYUFEUDtBQVNILHVCQUFXO0FBQ1Asd0JBQVEsQ0FDSixNQURJLEVBRUosY0FGSSxFQUdKLFNBSEksRUFJSixjQUpJLEVBS0osY0FMSSxFQU1KLG9CQU5JLEVBT0osbUJBUEksRUFRSixtQkFSSSxFQVNKLGVBVEk7QUFERDtBQVRSLFNBWk07QUFtQ2IsbUJBQVc7QUFDUCx1QkFBVyxFQUFFLE1BQU0sU0FBUixFQUFtQixVQUFVLFNBQTdCLEVBQXdDLFFBQVEsS0FBaEQsRUFBdUQsU0FBUyxLQUFoRSxFQURKO0FBRVAsdUJBQVcsRUFBRSxNQUFNLFNBQVIsRUFBbUIsVUFBVSxTQUE3QixFQUF3QyxRQUFRLEtBQWhELEVBQXVELFNBQVMsS0FBaEUsRUFGSjtBQUdQLHVCQUFXLEVBQUUsTUFBTSxTQUFSLEVBQW1CLFVBQVUsU0FBN0IsRUFBd0MsUUFBUSxLQUFoRCxFQUF1RCxTQUFTLEtBQWhFLEVBSEo7QUFJUCx3QkFBWSxFQUFFLE1BQU0sVUFBUixFQUFvQixVQUFVLFVBQTlCLEVBQTBDLFFBQVEsTUFBbEQsRUFBMEQsU0FBUyxLQUFuRSxFQUpMO0FBS1Asd0JBQVksRUFBRSxNQUFNLFVBQVIsRUFBb0IsVUFBVSxVQUE5QixFQUEwQyxRQUFRLE1BQWxELEVBQTBELFNBQVMsS0FBbkUsRUFMTDtBQU1QLHVCQUFXLEVBQUUsTUFBTSxTQUFSLEVBQW1CLFVBQVUsU0FBN0IsRUFBd0MsUUFBUSxLQUFoRCxFQUF1RCxTQUFTLEtBQWhFLEVBTko7QUFPUCx1QkFBVyxFQUFFLE1BQU0sU0FBUixFQUFtQixVQUFVLFNBQTdCLEVBQXdDLFFBQVEsS0FBaEQsRUFBdUQsU0FBUyxLQUFoRSxFQVBKO0FBUVAsdUJBQVcsRUFBRSxNQUFNLFNBQVIsRUFBbUIsVUFBVSxTQUE3QixFQUF3QyxRQUFRLEtBQWhELEVBQXVELFNBQVMsS0FBaEUsRUFSSjtBQVNQLHVCQUFXLEVBQUUsTUFBTSxTQUFSLEVBQW1CLFVBQVUsU0FBN0IsRUFBd0MsUUFBUSxLQUFoRCxFQUF1RCxTQUFTLEtBQWhFLEVBVEo7QUFVUCx1QkFBVyxFQUFFLE1BQU0sU0FBUixFQUFtQixVQUFVLFNBQTdCLEVBQXdDLFFBQVEsS0FBaEQsRUFBdUQsU0FBUyxLQUFoRSxFQVZKO0FBV1AsdUJBQVcsRUFBRSxNQUFNLFNBQVIsRUFBbUIsVUFBVSxTQUE3QixFQUF3QyxRQUFRLEtBQWhELEVBQXVELFNBQVMsS0FBaEUsRUFYSjtBQVlQLHdCQUFZLEVBQUUsTUFBTSxVQUFSLEVBQW9CLFVBQVUsVUFBOUIsRUFBMEMsUUFBUSxNQUFsRCxFQUEwRCxTQUFTLEtBQW5FLEVBWkw7QUFhUCx3QkFBWSxFQUFFLE1BQU0sVUFBUixFQUFvQixVQUFVLFVBQTlCLEVBQTBDLFFBQVEsTUFBbEQsRUFBMEQsU0FBUyxLQUFuRTtBQWJMLFNBbkNFOztBQW1EYixjQW5EYSxvQkFtREg7QUFDTixtQkFBTyxLQUFLLGVBQUwsRUFBUDtBQUNILFNBckRZO0FBdURQLG9CQXZETztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkF3RFksU0FBSyxrQkFBTCxFQXhEWjtBQUFBO0FBd0RMLHdCQXhESztBQXlETCxzQkF6REssR0F5REksRUFBRSxRQUFRLFFBQVYsRUF6REo7O0FBMERULG9CQUFJLGNBQWMsTUFBbEIsRUFBMEI7QUFDbEIsNEJBRGtCLEdBQ1AsU0FBUyxVQUFULENBRE87O0FBRXRCLHlCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksU0FBUyxNQUE3QixFQUFxQyxHQUFyQyxFQUEwQztBQUNsQywrQkFEa0MsR0FDeEIsU0FBUyxDQUFULENBRHdCO0FBRWxDLGdDQUZrQyxHQUV2QixRQUFRLFVBQVIsQ0FGdUI7QUFHbEMsK0JBSGtDLEdBR3hCLFdBQVksUUFBUSxTQUFSLENBQVosQ0FId0I7O0FBSXRDLCtCQUFPLFFBQVAsSUFBbUI7QUFDZixvQ0FBUSxPQURPO0FBRWYsb0NBQVEsU0FGTztBQUdmLHFDQUFTO0FBSE0seUJBQW5CO0FBS0g7QUFDSjtBQUNELHVCQUFPLE1BQVA7QUF2RVM7QUFBQTtBQTBFUCxzQkExRU8sMEJBMEVTLE1BMUVUO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQTBFaUIsc0JBMUVqQixtRkEwRTBCLEVBMUUxQjtBQTJFTCxpQkEzRUssR0EyRUQsU0FBSyxNQUFMLENBQWEsTUFBYixDQTNFQztBQUFBLHVCQTRFUSxTQUFLLHdCQUFMLENBQStCLFNBQUssTUFBTCxDQUFhO0FBQ3pELDhCQUFVLEVBQUUsSUFBRjtBQUQrQyxpQkFBYixFQUU3QyxNQUY2QyxDQUEvQixDQTVFUjtBQUFBO0FBNEVMLG9CQTVFSztBQUFBLHVCQStFUSxTQUFLLHlCQUFMLENBQWdDLFNBQUssTUFBTCxDQUFhO0FBQzFELDhCQUFVLEVBQUUsSUFBRjtBQURnRCxpQkFBYixFQUU5QyxNQUY4QyxDQUFoQyxDQS9FUjtBQUFBO0FBK0VMLG9CQS9FSztBQWtGTCx5QkFsRkssR0FrRk87QUFDWiw0QkFBUSxFQURJO0FBRVosNEJBQVE7QUFGSSxpQkFsRlA7O0FBc0ZULG9CQUFJLElBQUosRUFBVTtBQUNOLHdCQUFJLFVBQVUsSUFBZDtBQUNJLGtDQUFVLE1BQVYsSUFBb0IsS0FBSyxNQUFMLENBQXBCO0FBREo7QUFFSDtBQUNELG9CQUFJLElBQUosRUFBVTtBQUNOLHdCQUFJLFVBQVUsSUFBZDtBQUNJLGtDQUFVLE1BQVYsSUFBb0IsS0FBSyxNQUFMLENBQXBCO0FBREo7QUFFSDtBQUNHLHlCQTlGSyxHQThGTyxTQUFLLFlBQUwsRUE5RlA7QUErRkwsc0JBL0ZLLEdBK0ZJO0FBQ1QsNEJBQVEsRUFEQztBQUVULDRCQUFRLEVBRkM7QUFHVCxpQ0FBYSxTQUhKO0FBSVQsZ0NBQVksU0FBSyxPQUFMLENBQWMsU0FBZDtBQUpILGlCQS9GSjtBQXFHTCxxQkFyR0ssR0FxR0csQ0FBRSxNQUFGLEVBQVUsTUFBVixDQXJHSDs7QUFzR1QscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxNQUFNLE1BQTFCLEVBQWtDLEdBQWxDLEVBQXVDO0FBQy9CLHdCQUQrQixHQUN4QixNQUFNLENBQU4sQ0FEd0I7QUFFL0IsMEJBRitCLEdBRXRCLFVBQVUsSUFBVixDQUZzQjs7QUFHbkMseUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxPQUFPLE1BQTNCLEVBQW1DLEdBQW5DLEVBQXdDO0FBQ2hDLDZCQURnQyxHQUN4QixPQUFPLENBQVAsQ0FEd0I7QUFFaEMsNkJBRmdDLEdBRXhCLFdBQVksTUFBTSxPQUFOLENBQVosQ0FGd0I7QUFHaEMsOEJBSGdDLEdBR3ZCLFdBQVksTUFBTSxnQkFBTixDQUFaLENBSHVCOztBQUlwQywrQkFBTyxJQUFQLEVBQWEsSUFBYixDQUFtQixDQUFFLEtBQUYsRUFBUyxNQUFULENBQW5CO0FBQ0g7QUFDSjtBQUNELHVCQUFPLE1BQVA7QUFoSFM7QUFBQTtBQW1IUCxtQkFuSE8sdUJBbUhNLE1BbkhOO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkFvSFksU0FBSyw0QkFBTCxDQUFtQztBQUNwRCw4QkFBVSxTQUFLLFFBQUwsQ0FBZSxNQUFmO0FBRDBDLGlCQUFuQyxDQXBIWjtBQUFBO0FBb0hMLHdCQXBISztBQXVITCxzQkF2SEssR0F1SEksU0FBUyxRQUFULENBdkhKO0FBd0hMLHlCQXhISyxHQXdITyxTQUFLLFlBQUwsRUF4SFA7QUF5SEwsc0JBekhLLEdBeUhJO0FBQ1QsaUNBQWEsU0FESjtBQUVULGdDQUFZLFNBQUssT0FBTCxDQUFjLFNBQWQsQ0FGSDtBQUdULDRCQUFRLFNBSEM7QUFJVCwyQkFBTyxTQUpFO0FBS1QsMkJBQU8sU0FMRTtBQU1ULDJCQUFPLFNBTkU7QUFPVCw0QkFBUSxTQVBDO0FBUVQsNEJBQVEsU0FSQztBQVNULDZCQUFTLFNBVEE7QUFVVCw2QkFBUyxTQVZBO0FBV1QsNEJBQVEsU0FYQztBQVlULDhCQUFVLFNBWkQ7QUFhVCxrQ0FBYyxTQWJMO0FBY1QsK0JBQVcsU0FkRjtBQWVULGtDQUFjLFNBZkw7QUFnQlQsbUNBQWUsU0FoQk47QUFpQlQsNEJBQVE7QUFqQkMsaUJBekhKO0FBNElMLDRCQTVJSyxHQTRJVSxPQUFPLE1BNUlqQjs7QUE2SVQsb0JBQUksZUFBZSxDQUFuQixFQUFzQjtBQUNkLHlCQURjLEdBQ04sS0FBSyxHQUFMLENBQVUsZUFBZSxFQUF6QixFQUE2QixDQUE3QixDQURNOztBQUVsQix5QkFBUyxDQUFULEdBQWEsS0FBYixFQUFvQixJQUFJLE9BQU8sTUFBL0IsRUFBdUMsR0FBdkMsRUFBNEM7QUFDcEMsOEJBRG9DLEdBQzNCLE9BQU8sQ0FBUCxDQUQyQjs7QUFFeEMsNEJBQUksT0FBTyxPQUFPLE1BQVAsQ0FBUCxJQUF5QixXQUE3QjtBQUNJLG1DQUFPLE1BQVAsSUFBaUIsT0FBTyxDQUFQLENBQWpCO0FBREoseUJBRUEsSUFBSyxPQUFPLE9BQU8sTUFBUCxDQUFQLElBQXlCLFdBQTFCLElBQTJDLE9BQU8sTUFBUCxJQUFpQixPQUFPLENBQVAsQ0FBaEU7QUFDSSxtQ0FBTyxNQUFQLElBQWlCLE9BQU8sQ0FBUCxDQUFqQjtBQURKLHlCQUVBLElBQUssT0FBTyxPQUFPLEtBQVAsQ0FBUCxJQUF3QixXQUF6QixJQUEwQyxPQUFPLEtBQVAsSUFBZ0IsT0FBTyxDQUFQLENBQTlEO0FBQ0ksbUNBQU8sS0FBUCxJQUFnQixPQUFPLENBQVAsQ0FBaEI7QUFESix5QkFFQSxJQUFJLE9BQU8sT0FBTyxhQUFQLENBQVAsSUFBZ0MsV0FBcEM7QUFDSSxtQ0FBTyxhQUFQLElBQXdCLENBQUMsT0FBTyxDQUFQLENBQXpCO0FBREo7QUFHSSxtQ0FBTyxhQUFQLEtBQXlCLE9BQU8sQ0FBUCxDQUF6QjtBQUhKO0FBSUg7QUFDRyx3QkFmYyxHQWVQLGVBQWUsQ0FmUjs7QUFnQmxCLDJCQUFPLE9BQVAsSUFBa0IsT0FBTyxJQUFQLEVBQWEsQ0FBYixDQUFsQjtBQUNBLDJCQUFPLGFBQVAsSUFBd0IsQ0FBQyxDQUFELEdBQUssT0FBTyxhQUFQLENBQTdCO0FBQ0g7QUFDRCx1QkFBTyxNQUFQO0FBaEtTO0FBQUE7QUFtS1AsbUJBbktPLHVCQW1LTSxNQW5LTjtBQUFBO0FBQUE7QUFBQTs7QUFtS2Msa0JBbktkLG1GQW1LdUIsRUFuS3ZCOztBQW9LVCxtQkFBTyxTQUFLLG9CQUFMLENBQTJCLFNBQUssTUFBTCxDQUFhO0FBQzNDLDBCQUFVLFNBQUssUUFBTCxDQUFlLE1BQWY7QUFEaUMsYUFBYixFQUUvQixNQUYrQixDQUEzQixDQUFQO0FBcEtTO0FBeUtQLG1CQXpLTyx1QkF5S00sTUF6S04sRUF5S2MsSUF6S2QsRUF5S29CLElBektwQixFQXlLMEIsTUF6SzFCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBeUtrQyxpQkF6S2xDLG1GQXlLMEMsU0F6SzFDO0FBeUtxRCxrQkF6S3JELG1GQXlLOEQsRUF6SzlEOztBQTBLVCxnQkFBSSxRQUFRLFFBQVo7QUFDSSxzQkFBTSxJQUFJLGFBQUosQ0FBbUIsU0FBSyxFQUFMLEdBQVUsMkJBQTdCLENBQU47QUFESixhQUVJLENBNUtLLEdBNEtELFNBQUssTUFBTCxDQUFhLE1BQWIsQ0E1S0M7QUE2S0wsa0JBN0tLLEdBNktJLGdCQUFnQixTQUFLLFVBQUwsQ0FBaUIsSUFBakIsQ0FBaEIsR0FBeUMsSUE3SzdDO0FBOEtMLGlCQTlLSyxHQThLRztBQUNSLHlCQUFTLE1BREQ7QUFFUiw2QkFBYSxFQUFFLE9BQUYsQ0FGTDtBQUdSLDRCQUFZLEVBQUUsTUFBRixDQUhKO0FBSVIseUJBQVM7QUFKRCxhQTlLSDs7QUFvTFQsbUJBQU8sU0FBSyxNQUFMLEVBQWMsU0FBSyxNQUFMLENBQWEsS0FBYixFQUFvQixNQUFwQixDQUFkLENBQVA7QUFwTFM7QUF1TFAsbUJBdkxPLHVCQXVMTSxFQXZMTjtBQUFBOztBQXdMVCxtQkFBTyxTQUFLLHdCQUFMLENBQStCLEVBQUUsTUFBTSxFQUFSLEVBQS9CLENBQVA7QUF4TFM7QUEyTGIsZUEzTGEsbUJBMkxKLElBM0xJLEVBMkxzRjtBQUFBLGdCQUFwRixHQUFvRix1RUFBOUUsUUFBOEU7QUFBQSxnQkFBcEUsTUFBb0UsdUVBQTNELEtBQTJEO0FBQUEsZ0JBQXBELE1BQW9ELHVFQUEzQyxFQUEyQztBQUFBLGdCQUF2QyxPQUF1Qyx1RUFBN0IsU0FBNkI7QUFBQSxnQkFBbEIsSUFBa0IsdUVBQVgsU0FBVzs7QUFDL0YsZ0JBQUksTUFBTSxLQUFLLElBQUwsQ0FBVSxLQUFWLElBQW1CLEdBQW5CLEdBQXlCLEtBQUssYUFBTCxDQUFvQixJQUFwQixFQUEwQixNQUExQixDQUFuQztBQUNBLGdCQUFJLFFBQVEsS0FBSyxJQUFMLENBQVcsTUFBWCxFQUFtQixLQUFLLGFBQUwsQ0FBb0IsSUFBcEIsQ0FBbkIsQ0FBWjtBQUNBLGdCQUFJLE9BQU8sUUFBWCxFQUFxQjtBQUNqQixvQkFBSSxPQUFPLElBQVAsQ0FBYSxLQUFiLEVBQW9CLE1BQXhCLEVBQ0ksT0FBTyxLQUFLLGFBQUwsQ0FBb0IsSUFBcEIsRUFBMEIsS0FBMUIsQ0FBUDtBQUNQLGFBSEQsTUFHTztBQUNILG9CQUFJLFFBQVEsS0FBSyxLQUFMLEVBQVo7QUFDQSx1QkFBTyxLQUFLLFNBQUwsQ0FBZ0IsS0FBSyxNQUFMLENBQWE7QUFDaEMsb0NBQWdCLEtBRGdCO0FBRWhDLDZCQUFTO0FBRnVCLGlCQUFiLEVBR3BCLEtBSG9CLENBQWhCLENBQVA7QUFJQSxvQkFBSSxPQUFPLE9BQU8sS0FBSyxNQUF2QjtBQUNBLDBCQUFVO0FBQ04sa0NBQWMsS0FBSyxNQURiO0FBRU4sZ0NBQVksS0FBSyxJQUFMLENBQVcsS0FBSyxNQUFMLENBQWEsSUFBYixDQUFYLEVBQStCLFFBQS9CLENBRk47QUFHTixvQ0FBZ0IsbUNBSFY7QUFJTixzQ0FBa0IsS0FBSztBQUpqQixpQkFBVjtBQU1IO0FBQ0QsbUJBQU8sS0FBSyxLQUFMLENBQVksR0FBWixFQUFpQixNQUFqQixFQUF5QixPQUF6QixFQUFrQyxJQUFsQyxDQUFQO0FBQ0g7QUFoTlksS0FBakI7O0FBbU5BOztBQUVBLFFBQUksVUFBVSxPQUFRLFNBQVIsRUFBbUI7O0FBRTdCLGNBQU0sU0FGdUI7QUFHN0IsZ0JBQVEsU0FIcUI7QUFJN0IscUJBQWEsSUFKZ0IsRUFJVjtBQUNuQixxQkFBYSxJQUxnQjtBQU03QixnQkFBUTtBQUNKLG9CQUFRLHFHQURKO0FBRUosbUJBQU8sNkJBRkg7QUFHSixtQkFBTyx5QkFISDtBQUlKLG1CQUFPO0FBSkgsU0FOcUI7QUFZN0IsbUJBQVc7QUFDUCx1QkFBVyxFQUFFLE1BQU0sU0FBUixFQUFtQixVQUFVLFNBQTdCLEVBQXdDLFFBQVEsS0FBaEQsRUFBdUQsU0FBUyxLQUFoRTtBQURKO0FBWmtCLEtBQW5CLENBQWQ7O0FBaUJBOztBQUVBLFFBQUksT0FBTzs7QUFFUCxjQUFNLE1BRkM7QUFHUCxnQkFBUSxNQUhEO0FBSVAscUJBQWEsQ0FBRSxJQUFGLEVBQVEsSUFBUixFQUFjLElBQWQsQ0FKTjtBQUtQLHFCQUFhLElBTE4sRUFLWTtBQUNuQixtQkFBVyxJQU5KO0FBT1AsZ0JBQVE7QUFDSixvQkFBUSxxR0FESjtBQUVKLG1CQUFPLHNCQUZIO0FBR0osbUJBQU8sa0JBSEg7QUFJSixtQkFBTztBQUpILFNBUEQ7QUFhUCxlQUFPO0FBQ0gsc0JBQVU7QUFDTix1QkFBTyxDQUNILG9CQURHLEVBRUgsYUFGRyxFQUdILG9CQUhHO0FBREQsYUFEUDtBQVFILHVCQUFXO0FBQ1Asd0JBQVEsQ0FDSixTQURJLEVBRUosUUFGSSxFQUdKLFNBSEksRUFJSixPQUpJLEVBS0osUUFMSSxFQU1KLE9BTkksRUFPSixVQVBJO0FBREQ7QUFSUixTQWJBO0FBaUNQLG1CQUFXO0FBQ1AsdUJBQVcsRUFBRSxNQUFNLFNBQVIsRUFBbUIsVUFBVSxTQUE3QixFQUF3QyxRQUFRLEtBQWhELEVBQXVELFNBQVMsS0FBaEUsRUFESjtBQUVQLHVCQUFXLEVBQUUsTUFBTSxTQUFSLEVBQW1CLFVBQVUsU0FBN0IsRUFBd0MsUUFBUSxLQUFoRCxFQUF1RCxTQUFTLEtBQWhFO0FBRkosU0FqQ0o7O0FBc0NELG9CQXRDQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkF1Q2tCLFNBQUssa0JBQUwsRUF2Q2xCO0FBQUE7QUF1Q0Msd0JBdkNEO0FBd0NDLHNCQXhDRCxHQXdDVSxFQUFFLFFBQVEsUUFBVixFQXhDVjtBQXlDQywwQkF6Q0QsR0F5Q2MsT0FBTyxJQUFQLENBQWEsUUFBYixDQXpDZDs7QUEwQ0gscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxXQUFXLE1BQS9CLEVBQXVDLEdBQXZDLEVBQTRDO0FBQ3BDLDRCQURvQyxHQUN6QixXQUFXLENBQVgsQ0FEeUI7QUFFcEMsNkJBRm9DLEdBRXhCLFNBQVMsV0FBVCxFQUZ3QjtBQUdwQywyQkFIb0MsR0FHMUI7QUFDVixnQ0FBUSxTQUFTLFFBQVQsQ0FERTtBQUVWLGdDQUFRLFNBRkU7QUFHVixpQ0FBUyxTQUFTLFFBQVQ7QUFIQyxxQkFIMEI7O0FBUXhDLDJCQUFPLFNBQVAsSUFBb0IsT0FBcEI7QUFDSDtBQUNELHVCQUFPLE1BQVA7QUFwREc7QUFBQTtBQXVERCxzQkF2REMsMEJBdURlLE1BdkRmO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQXVEdUIsc0JBdkR2QixtRkF1RGdDLEVBdkRoQztBQUFBLHVCQXdEbUIsU0FBSyxxQkFBTCxDQUE0QixTQUFLLE1BQUwsQ0FBYTtBQUMzRCwwQkFBTSxTQUFLLFFBQUwsQ0FBZSxNQUFmLENBRHFEO0FBRTNELDZCQUFTO0FBRmtELGlCQUFiLEVBRy9DLE1BSCtDLENBQTVCLENBeERuQjtBQUFBO0FBd0RDLHlCQXhERDtBQTREQyx5QkE1REQsR0E0RGEsU0FBSyxZQUFMLEVBNURiO0FBNkRDLHNCQTdERCxHQTZEVTtBQUNULDRCQUFRLEVBREM7QUFFVCw0QkFBUSxFQUZDO0FBR1QsaUNBQWEsU0FISjtBQUlULGdDQUFZLFNBQUssT0FBTCxDQUFjLFNBQWQ7QUFKSCxpQkE3RFY7QUFtRUMscUJBbkVELEdBbUVTLENBQUUsTUFBRixFQUFVLE1BQVYsQ0FuRVQ7O0FBb0VILHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksTUFBTSxNQUExQixFQUFrQyxHQUFsQyxFQUF1QztBQUMvQix3QkFEK0IsR0FDeEIsTUFBTSxDQUFOLENBRHdCO0FBRS9CLDBCQUYrQixHQUV0QixVQUFVLElBQVYsQ0FGc0I7O0FBR25DLHlCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksT0FBTyxNQUEzQixFQUFtQyxHQUFuQyxFQUF3QztBQUNoQyw2QkFEZ0MsR0FDeEIsT0FBTyxDQUFQLENBRHdCO0FBRWhDLDZCQUZnQyxHQUV4QixNQUFNLE9BQU4sQ0FGd0I7QUFHaEMsOEJBSGdDLEdBR3ZCLE1BQU0sUUFBTixDQUh1Qjs7QUFJcEMsK0JBQU8sSUFBUCxFQUFhLElBQWIsQ0FBbUIsQ0FBRSxLQUFGLEVBQVMsTUFBVCxDQUFuQjtBQUNIO0FBQ0o7QUFDRCx1QkFBTyxNQUFQO0FBOUVHO0FBQUE7QUFpRkQsbUJBakZDLHVCQWlGWSxNQWpGWjtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQWtGZ0IsU0FBSyxpQkFBTCxDQUF3QjtBQUN2QywwQkFBTSxTQUFLLFFBQUwsQ0FBZSxNQUFmO0FBRGlDLGlCQUF4QixDQWxGaEI7QUFBQTtBQWtGQyxzQkFsRkQ7QUFxRkMseUJBckZELEdBcUZhLE9BQU8sTUFBUCxJQUFpQixJQXJGOUI7O0FBc0ZILHVCQUFPO0FBQ0gsaUNBQWEsU0FEVjtBQUVILGdDQUFZLFNBQUssT0FBTCxDQUFjLFNBQWQsQ0FGVDtBQUdILDRCQUFRLFdBQVksT0FBTyxNQUFQLENBQVosQ0FITDtBQUlILDJCQUFPLFdBQVksT0FBTyxLQUFQLENBQVosQ0FKSjtBQUtILDJCQUFPLFdBQVksT0FBTyxNQUFQLENBQVosQ0FMSjtBQU1ILDJCQUFPLFdBQVksT0FBTyxLQUFQLENBQVosQ0FOSjtBQU9ILDRCQUFRLFNBUEw7QUFRSCw0QkFBUSxTQVJMO0FBU0gsNkJBQVMsU0FUTjtBQVVILDZCQUFTLFNBVk47QUFXSCw0QkFBUSxXQUFZLE9BQU8sTUFBUCxDQUFaLENBWEw7QUFZSCw4QkFBVSxTQVpQO0FBYUgsa0NBQWMsU0FiWDtBQWNILCtCQUFXLFNBZFI7QUFlSCxrQ0FBYyxTQWZYO0FBZ0JILG1DQUFlLFdBQVksT0FBTyxRQUFQLENBQVosQ0FoQlo7QUFpQkgsNEJBQVE7QUFqQkwsaUJBQVA7QUF0Rkc7QUFBQTtBQTJHRCxtQkEzR0MsdUJBMkdZLE1BM0daO0FBQUE7QUFBQTtBQUFBOztBQTJHb0Isa0JBM0dwQixtRkEyRzZCLEVBM0c3Qjs7QUE0R0gsbUJBQU8sU0FBSyxxQkFBTCxDQUE0QixTQUFLLE1BQUwsQ0FBYTtBQUM1QyxzQkFBTSxTQUFLLFFBQUwsQ0FBZSxNQUFmLENBRHNDO0FBRTVDLHlCQUFTO0FBRm1DLGFBQWIsRUFHaEMsTUFIZ0MsQ0FBNUIsQ0FBUDtBQTVHRztBQWtIRCxtQkFsSEMsdUJBa0hZLE1BbEhaLEVBa0hvQixJQWxIcEIsRUFrSDBCLElBbEgxQixFQWtIZ0MsTUFsSGhDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQWtId0MscUJBbEh4QyxtRkFrSGdELFNBbEhoRDtBQWtIMkQsc0JBbEgzRCxtRkFrSG9FLEVBbEhwRTtBQUFBLHVCQW1Ia0IsU0FBSyxnQkFBTCxDQUF1QixTQUFLLE1BQUwsQ0FBYTtBQUNyRCw0QkFBUSxLQUFLLFdBQUwsRUFENkM7QUFFckQsOEJBQVUsU0FBSyxRQUFMLENBQWUsTUFBZixDQUYyQztBQUdyRCw4QkFBVSxNQUgyQztBQUlyRCw2QkFBUztBQUo0QyxpQkFBYixFQUt6QyxNQUx5QyxDQUF2QixDQW5IbEI7QUFBQTtBQW1IQyx3QkFuSEQ7O0FBeUhILHVCQUFPO0FBQ0gsNEJBQVEsUUFETDtBQUVILDBCQUFNLFNBQVMsT0FBVCxFQUFrQixJQUFsQjtBQUZILGlCQUFQO0FBekhHO0FBQUE7QUErSEQsbUJBL0hDLHVCQStIWSxFQS9IWjtBQUFBOztBQWdJSCxtQkFBTyxTQUFLLGlCQUFMLENBQXdCLEVBQUUsU0FBUyxFQUFYLEVBQXhCLENBQVA7QUFoSUc7QUFtSUQsZUFuSUMsbUJBbUlRLElBbklSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFtSWMsbUJBbklkLG1GQW1Jb0IsUUFuSXBCO0FBbUk4QixzQkFuSTlCLG1GQW1JdUMsS0FuSXZDO0FBbUk4QyxzQkFuSTlDLG1GQW1JdUQsRUFuSXZEO0FBbUkyRCx1QkFuSTNELG1GQW1JcUUsU0FuSXJFO0FBbUlnRixvQkFuSWhGLG1GQW1JdUYsU0FuSXZGO0FBb0lDLG1CQXBJRCxHQW9JTyxTQUFLLElBQUwsQ0FBVSxLQUFWLElBQW1CLEdBQW5CLEdBQXlCLFNBQUssT0FBOUIsR0FBd0MsR0FwSS9DOztBQXFJSCxvQkFBSSxPQUFPLFFBQVgsRUFBcUI7QUFDakIsMkJBQU8sU0FBSyxhQUFMLENBQW9CLElBQXBCLEVBQTBCLE1BQTFCLENBQVA7QUFDSCxpQkFGRCxNQUVPO0FBQ0MseUJBREQsR0FDUyxTQUFLLEtBQUwsRUFEVDs7QUFFSCwyQkFBTyxHQUFQO0FBQ0EsMkJBQU8sU0FBSyxTQUFMLENBQWdCLFNBQUssTUFBTCxDQUFhO0FBQ2hDLGtDQUFVLEtBQUssV0FBTCxFQURzQjtBQUVoQyxpQ0FBUztBQUZ1QixxQkFBYixFQUdwQixNQUhvQixDQUFoQixDQUFQO0FBSUEsOEJBQVU7QUFDTix3Q0FBZ0IsbUNBRFY7QUFFTiwrQkFBTyxTQUFLLE1BRk47QUFHTixxQ0FBYSxTQUFLLElBQUwsQ0FBVyxTQUFLLE1BQUwsQ0FBYSxJQUFiLENBQVgsRUFBK0IsU0FBSyxNQUFMLENBQWEsU0FBSyxNQUFsQixDQUEvQixFQUEwRCxRQUExRDtBQUhQLHFCQUFWO0FBS0g7QUFuSkUsdUJBb0prQixTQUFLLEtBQUwsQ0FBWSxHQUFaLEVBQWlCLE1BQWpCLEVBQXlCLE9BQXpCLEVBQWtDLElBQWxDLENBcEpsQjtBQUFBO0FBb0pDLHdCQXBKRDs7QUFxSkgsb0JBQUksV0FBVyxRQUFmO0FBQ0ksMEJBQU0sSUFBSSxhQUFKLENBQW1CLFNBQUssRUFBTCxHQUFVLEdBQVYsR0FBZ0IsU0FBSyxJQUFMLENBQVcsU0FBUyxPQUFULENBQVgsQ0FBbkMsQ0FBTjtBQURKLGlCQUVBLE9BQU8sUUFBUDtBQXZKRztBQUFBO0FBQUEsS0FBWDs7QUEySkE7O0FBRUEsUUFBSSxPQUFPO0FBQ1AsY0FBTSxNQURDO0FBRVAsZ0JBQVEsTUFGRDtBQUdQLHFCQUFhLENBQUUsSUFBRixFQUFRLElBQVIsQ0FITixFQUdzQjtBQUM3QixtQkFBVyxHQUpKO0FBS1AsMkJBQW1CLElBTFo7QUFNUCxnQkFBUTtBQUNKLG9CQUFRLHFHQURKO0FBRUosbUJBQU87QUFDSCwwQkFBVSwyQkFEUDtBQUVILDJCQUFXO0FBRlIsYUFGSDtBQU1KLG1CQUFPLGtCQU5IO0FBT0osbUJBQU87QUFQSCxTQU5EO0FBZVAsZUFBTztBQUNILHNCQUFVO0FBQ04sdUJBQU8sQ0FDSCxPQURHLEVBRUgsWUFGRyxFQUdILFlBSEcsRUFJSCxTQUpHLEVBS0gsYUFMRyxFQU1ILGdCQU5HLEVBT0gsWUFQRyxFQVFILG1CQVJHLEVBU0gseUJBVEc7QUFERCxhQURQO0FBY0gsdUJBQVc7QUFDUCx3QkFBUSxDQUNKLFVBREksRUFFSixnQkFGSSxFQUdKLFlBSEksRUFJSixxQkFKSSxFQUtKLEtBTEksRUFNSixNQU5JLEVBT0osYUFQSSxFQVFKLGlCQVJJLEVBU0osVUFUSSxFQVVKLFlBVkksRUFXSixjQVhJLEVBWUosVUFaSTtBQUREO0FBZFIsU0FmQTs7QUErQ0Qsb0JBL0NDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkFnRGtCLFNBQUssbUJBQUwsRUFoRGxCO0FBQUE7QUFnREMsd0JBaEREO0FBaURDLHVCQWpERCxHQWlEVyxTQUFTLE1BQVQsQ0FqRFg7QUFrREMsc0JBbERELEdBa0RVLEVBbERWOztBQW1ESCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFFBQVEsTUFBNUIsRUFBb0MsR0FBcEMsRUFBeUM7QUFDakMsMEJBRGlDLEdBQ3hCLFFBQVEsQ0FBUixDQUR3QjtBQUVqQyxzQkFGaUMsR0FFNUIsT0FBTyxNQUFQLENBRjRCO0FBR2pDLHdCQUhpQyxHQUcxQixPQUFPLFFBQVAsQ0FIMEI7QUFJakMseUJBSmlDLEdBSXpCLE9BQU8sUUFBUCxDQUp5Qjs7QUFLckMsMkJBQU8sU0FBSyxrQkFBTCxDQUF5QixJQUF6QixDQUFQO0FBQ0EsNEJBQVEsU0FBSyxrQkFBTCxDQUF5QixLQUF6QixDQUFSO0FBQ0ksMEJBUGlDLEdBT3hCLE9BQU8sR0FBUCxHQUFhLEtBUFc7O0FBUXJDLDJCQUFPLElBQVAsQ0FBYTtBQUNULDhCQUFNLEVBREc7QUFFVCxrQ0FBVSxNQUZEO0FBR1QsZ0NBQVEsSUFIQztBQUlULGlDQUFTLEtBSkE7QUFLVCxnQ0FBUTtBQUxDLHFCQUFiO0FBT0g7QUFDRCx1QkFBTyxNQUFQO0FBbkVHO0FBQUE7QUFzRUQsb0JBdEVDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkF1RUcsU0FBSyxXQUFMLEVBdkVIO0FBQUE7QUFBQSx1QkF3RWlCLFNBQUssbUJBQUwsRUF4RWpCO0FBQUE7QUF3RUMsdUJBeEVEO0FBeUVDLHNCQXpFRCxHQXlFVSxFQUFFLFFBQVEsT0FBVixFQXpFVjs7QUEwRUgscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxTQUFLLFVBQUwsQ0FBZ0IsTUFBcEMsRUFBNEMsR0FBNUMsRUFBaUQ7QUFDekMsNEJBRHlDLEdBQzlCLFNBQUssVUFBTCxDQUFnQixDQUFoQixDQUQ4QjtBQUV6Qyx3QkFGeUMsR0FFbEMsU0FBSyxrQkFBTCxDQUF5QixRQUF6QixDQUZrQztBQUd6QywyQkFIeUMsR0FHL0I7QUFDVixnQ0FBUSxTQURFO0FBRVYsZ0NBQVEsU0FGRTtBQUdWLGlDQUFTO0FBSEMscUJBSCtCOztBQVE3Qyx3QkFBSSxlQUFlLE9BQW5CLEVBQTRCO0FBQ3hCLDRCQUFJLFlBQVksUUFBUSxXQUFSLENBQWhCLEVBQXNDO0FBQ2xDLG9DQUFRLE1BQVIsSUFBa0IsV0FBWSxRQUFRLFdBQVIsRUFBcUIsUUFBckIsQ0FBWixDQUFsQjtBQUNIO0FBQ0o7QUFDRCx3QkFBSSxZQUFZLE9BQWhCLEVBQXlCO0FBQ3JCLDRCQUFJLFlBQVksUUFBUSxRQUFSLENBQWhCLEVBQW1DO0FBQy9CLG9DQUFRLE1BQVIsSUFBa0IsV0FBWSxRQUFRLFFBQVIsRUFBa0IsUUFBbEIsQ0FBWixDQUFsQjtBQUNIO0FBQ0o7QUFDRCw0QkFBUSxPQUFSLElBQW1CLFNBQUssR0FBTCxDQUFVLFFBQVEsTUFBUixDQUFWLEVBQTJCLFFBQVEsTUFBUixDQUEzQixDQUFuQjtBQUNBLDJCQUFPLElBQVAsSUFBZSxPQUFmO0FBQ0g7QUFDRCx1QkFBTyxNQUFQO0FBL0ZHO0FBQUE7QUFrR0Qsc0JBbEdDLDBCQWtHZSxNQWxHZjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFrR3VCLHNCQWxHdkIsbUZBa0dnQyxFQWxHaEM7QUFBQSx1QkFtR0csU0FBSyxXQUFMLEVBbkdIO0FBQUE7QUFBQSx1QkFvR21CLFNBQUssb0JBQUwsQ0FBMkIsU0FBSyxNQUFMLENBQWE7QUFDMUQsMEJBQU0sU0FBSyxRQUFMLENBQWUsTUFBZjtBQURvRCxpQkFBYixFQUU5QyxNQUY4QyxDQUEzQixDQXBHbkI7QUFBQTtBQW9HQyx5QkFwR0Q7QUF1R0MseUJBdkdELEdBdUdhLFNBQUssWUFBTCxFQXZHYjtBQXdHQyxzQkF4R0QsR0F3R1U7QUFDVCw0QkFBUSxFQURDO0FBRVQsNEJBQVEsRUFGQztBQUdULGlDQUFhLFNBSEo7QUFJVCxnQ0FBWSxTQUFLLE9BQUwsQ0FBYyxTQUFkO0FBSkgsaUJBeEdWO0FBOEdDLHFCQTlHRCxHQThHUyxDQUFFLE1BQUYsRUFBVSxNQUFWLENBOUdUOztBQStHSCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLE1BQU0sTUFBMUIsRUFBa0MsR0FBbEMsRUFBdUM7QUFDL0Isd0JBRCtCLEdBQ3hCLE1BQU0sQ0FBTixDQUR3QjtBQUUvQiwwQkFGK0IsR0FFdEIsVUFBVSxJQUFWLENBRnNCOztBQUduQyx5QkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLE9BQU8sTUFBM0IsRUFBbUMsR0FBbkMsRUFBd0M7QUFDaEMsNkJBRGdDLEdBQ3hCLE9BQU8sQ0FBUCxDQUR3QjtBQUVoQyw2QkFGZ0MsR0FFeEIsV0FBWSxNQUFNLENBQU4sQ0FBWixDQUZ3QjtBQUdoQyw4QkFIZ0MsR0FHdkIsV0FBWSxNQUFNLENBQU4sQ0FBWixDQUh1Qjs7QUFJcEMsK0JBQU8sSUFBUCxFQUFhLElBQWIsQ0FBbUIsQ0FBRSxLQUFGLEVBQVMsTUFBVCxDQUFuQjtBQUNIO0FBQ0o7QUFDRCx1QkFBTyxNQUFQLElBQWlCLFNBQUssTUFBTCxDQUFhLE9BQU8sTUFBUCxDQUFiLEVBQTZCLENBQTdCLENBQWpCO0FBQ0EsdUJBQU8sTUFBUDtBQTFIRztBQUFBO0FBNkhQLG1CQTdITyx1QkE2SE0sTUE3SE4sRUE2SGtDO0FBQUEsZ0JBQXBCLE1BQW9CLHVFQUFYLFNBQVc7O0FBQ3JDLGdCQUFJLFlBQVksS0FBSyxZQUFMLEVBQWhCO0FBQ0EsbUJBQU87QUFDSCw2QkFBYSxTQURWO0FBRUgsNEJBQVksS0FBSyxPQUFMLENBQWMsU0FBZCxDQUZUO0FBR0gsd0JBQVEsV0FBWSxPQUFPLFVBQVAsQ0FBWixDQUhMO0FBSUgsdUJBQU8sV0FBWSxPQUFPLFNBQVAsQ0FBWixDQUpKO0FBS0gsdUJBQU8sV0FBWSxPQUFPLFlBQVAsQ0FBWixDQUxKO0FBTUgsdUJBQU8sV0FBWSxPQUFPLFdBQVAsQ0FBWixDQU5KO0FBT0gsd0JBQVEsU0FQTDtBQVFILHdCQUFRLFNBUkw7QUFTSCx5QkFBUyxTQVROO0FBVUgseUJBQVMsU0FWTjtBQVdILHdCQUFRLFdBQVksT0FBTyxNQUFQLENBQVosQ0FYTDtBQVlILDBCQUFVLFdBQVksT0FBTyxlQUFQLENBQVosQ0FaUDtBQWFILDhCQUFjLFNBYlg7QUFjSCwyQkFBVyxTQWRSO0FBZUgsOEJBQWMsV0FBWSxPQUFPLFlBQVAsQ0FBWixDQWZYO0FBZ0JILCtCQUFlLFdBQVksT0FBTyxhQUFQLENBQVosQ0FoQlo7QUFpQkgsd0JBQVE7QUFqQkwsYUFBUDtBQW1CSCxTQWxKTTtBQW9KRCxvQkFwSkM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkFxSkcsU0FBSyxXQUFMLEVBckpIO0FBQUE7QUFBQSx1QkFzSmlCLFNBQUssZ0JBQUwsRUF0SmpCO0FBQUE7QUFzSkMsdUJBdEpEO0FBdUpDLHNCQXZKRCxHQXVKVSxFQXZKVjtBQXdKQyxtQkF4SkQsR0F3Sk8sT0FBTyxJQUFQLENBQWEsT0FBYixDQXhKUDs7QUF5SkgscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxJQUFJLE1BQXhCLEVBQWdDLEdBQWhDLEVBQXFDO0FBQzdCLHNCQUQ2QixHQUN4QixJQUFJLENBQUosQ0FEd0I7QUFBQSxpQ0FFUCxHQUFHLEtBQUgsQ0FBVSxHQUFWLENBRk87QUFBQTtBQUUzQiwwQkFGMkI7QUFFbkIsMkJBRm1CO0FBRzdCLHdCQUg2QixHQUd0QixPQUFPLFdBQVAsRUFIc0I7QUFJN0IseUJBSjZCLEdBSXJCLFFBQVEsV0FBUixFQUpxQjs7QUFLakMsMkJBQU8sU0FBSyxrQkFBTCxDQUF5QixJQUF6QixDQUFQO0FBQ0EsNEJBQVEsU0FBSyxrQkFBTCxDQUF5QixLQUF6QixDQUFSO0FBQ0ksMEJBUDZCLEdBT3BCLE9BQU8sR0FBUCxHQUFhLEtBUE87QUFRN0IsMEJBUjZCLEdBUXBCLFFBQVEsRUFBUixDQVJvQjtBQVM3QiwwQkFUNkIsR0FTcEIsU0FUb0I7O0FBVWpDLHdCQUFJLFVBQVUsU0FBSyxPQUFuQjtBQUNJLGlDQUFTLFNBQUssT0FBTCxDQUFhLE1BQWIsQ0FBVDtBQURKLHFCQUVBLElBQUksTUFBTSxTQUFLLGFBQWY7QUFDSSxpQ0FBUyxTQUFLLGFBQUwsQ0FBbUIsRUFBbkIsQ0FBVDtBQURKLHFCQUVBLE9BQU8sTUFBUCxJQUFpQixTQUFLLFdBQUwsQ0FBa0IsTUFBbEIsRUFBMEIsTUFBMUIsQ0FBakI7QUFDSDtBQUNELHVCQUFPLE1BQVA7QUF6S0c7QUFBQTtBQTRLRCxtQkE1S0MsdUJBNEtZLE1BNUtaO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBNktHLFNBQUssV0FBTCxFQTdLSDtBQUFBO0FBOEtDLGlCQTlLRCxHQThLSyxTQUFLLE1BQUwsQ0FBYSxNQUFiLENBOUtMO0FBQUEsdUJBK0tnQixTQUFLLGlCQUFMLENBQXdCO0FBQ3ZDLDBCQUFNLEVBQUUsSUFBRjtBQURpQyxpQkFBeEIsQ0EvS2hCO0FBQUE7QUErS0Msc0JBL0tEOztBQWtMSCx1QkFBTyxTQUFLLFdBQUwsQ0FBa0IsTUFBbEIsRUFBMEIsQ0FBMUIsQ0FBUDtBQWxMRztBQUFBO0FBcUxELG1CQXJMQyx1QkFxTFksTUFyTFo7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFxTG9CLHNCQXJMcEIsbUZBcUw2QixFQXJMN0I7QUFBQSx1QkFzTEcsU0FBSyxXQUFMLEVBdExIO0FBQUE7QUF1TEgsdUJBQU8sU0FBSyx1QkFBTCxDQUE4QixTQUFLLE1BQUwsQ0FBYTtBQUM5QywwQkFBTSxTQUFLLFFBQUwsQ0FBZSxNQUFmO0FBRHdDLGlCQUFiLEVBRWxDLE1BRmtDLENBQTlCLENBQVA7QUF2TEc7QUFBQTtBQTRMRCxtQkE1TEMsdUJBNExZLE1BNUxaLEVBNExvQixJQTVMcEIsRUE0TDBCLElBNUwxQixFQTRMZ0MsTUE1TGhDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUE0THdDLHFCQTVMeEMsbUZBNExnRCxTQTVMaEQ7QUE0TDJELHNCQTVMM0QsbUZBNExvRSxFQTVMcEU7O0FBNkxILG9CQUFJLFFBQVEsUUFBWjtBQUNJLDBCQUFNLElBQUksYUFBSixDQUFtQixTQUFLLEVBQUwsR0FBVSwyQkFBN0IsQ0FBTjtBQURKLGlCQTdMRyxPQStMRyxTQUFLLFdBQUwsRUEvTEg7QUFBQTtBQWdNQyxzQkFoTUQsR0FnTVUsZ0JBQWdCLFNBQUssVUFBTCxDQUFpQixJQUFqQixDQWhNMUI7QUFpTUMscUJBak1ELEdBaU1TO0FBQ1Isb0NBQWdCLFNBQUssUUFBTCxDQUFlLE1BQWYsQ0FEUjtBQUVSLDRCQUFRLEtBRkE7QUFHUiw4QkFBVTtBQUhGLGlCQWpNVDtBQUFBLHVCQXNNa0IsU0FBSyxNQUFMLEVBQWMsU0FBSyxNQUFMLENBQWEsS0FBYixFQUFvQixNQUFwQixDQUFkLENBdE1sQjtBQUFBO0FBc01DLHdCQXRNRDs7QUF1TUgsdUJBQU87QUFDSCw0QkFBUSxRQURMO0FBRUgsMEJBQU0sU0FBUyxhQUFUO0FBRkgsaUJBQVA7QUF2TUc7QUFBQTtBQTZNRCxtQkE3TUMsdUJBNk1ZLEVBN01aO0FBQUE7O0FBQUE7QUFBQSx1QkE4TUcsU0FBSyxXQUFMLEVBOU1IO0FBQUE7QUErTUgsdUJBQU8sU0FBSyxzQkFBTCxDQUE2QixFQUFFLGVBQWUsRUFBakIsRUFBN0IsQ0FBUDtBQS9NRztBQUFBO0FBa05ELGVBbE5DLG1CQWtOUSxJQWxOUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFrTmMsbUJBbE5kLG1GQWtOb0IsUUFsTnBCO0FBa044QixzQkFsTjlCLG1GQWtOdUMsS0FsTnZDO0FBa044QyxzQkFsTjlDLG1GQWtOdUQsRUFsTnZEO0FBa04yRCx1QkFsTjNELG1GQWtOcUUsU0FsTnJFO0FBa05nRixvQkFsTmhGLG1GQWtOdUYsU0FsTnZGO0FBbU5DLHNCQW5ORCxHQW1OVyxPQUFPLFNBQVIsR0FBc0IsTUFBTSxHQUE1QixHQUFtQyxFQW5ON0M7QUFvTkMsbUJBcE5ELEdBb05PLFNBQUssSUFBTCxDQUFVLEtBQVYsRUFBaUIsR0FBakIsSUFBd0IsU0FBSyxPQUE3QixHQUF1QyxLQUF2QyxHQUErQyxNQUEvQyxHQUF3RCxTQUFLLGFBQUwsQ0FBb0IsSUFBcEIsRUFBMEIsTUFBMUIsQ0FwTi9EO0FBcU5DLHFCQXJORCxHQXFOUyxTQUFLLElBQUwsQ0FBVyxNQUFYLEVBQW1CLFNBQUssYUFBTCxDQUFvQixJQUFwQixDQUFuQixDQXJOVDs7QUFzTkgsb0JBQUksT0FBTyxRQUFYLEVBQXFCO0FBQ2pCLHdCQUFJLE9BQU8sSUFBUCxDQUFhLEtBQWIsRUFBb0IsTUFBeEI7QUFDSSwrQkFBTyxNQUFNLFNBQUssU0FBTCxDQUFnQixLQUFoQixDQUFiO0FBREo7QUFFSCxpQkFIRCxNQUdPO0FBQ0MseUJBREQsR0FDUyxTQUFLLEtBQUwsRUFEVDtBQUVDLDJCQUZELEdBRVcsRUFBRSxTQUFTLEtBQVgsRUFGWDs7QUFHSCwyQkFBTyxTQUFLLFNBQUwsQ0FBZ0IsU0FBSyxNQUFMLENBQWEsT0FBYixFQUFzQixLQUF0QixDQUFoQixDQUFQO0FBQ0ksNkJBSkQsR0FJYSxTQUFLLElBQUwsQ0FBVyxTQUFLLE1BQUwsQ0FBYSxJQUFiLENBQVgsRUFBK0IsU0FBSyxNQUFMLENBQWEsU0FBSyxNQUFsQixDQUEvQixFQUEwRCxRQUExRCxDQUpiOztBQUtILDhCQUFVO0FBQ04sK0JBQU8sU0FBSyxNQUROO0FBRU4sZ0NBQVEsU0FGRjtBQUdOLHdDQUFnQixtQ0FIVjtBQUlOLDBDQUFrQixLQUFLLE1BQUwsQ0FBWSxRQUFaO0FBSloscUJBQVY7QUFNSDtBQXBPRSx1QkFxT2tCLFNBQUssS0FBTCxDQUFZLEdBQVosRUFBaUIsTUFBakIsRUFBeUIsT0FBekIsRUFBa0MsSUFBbEMsQ0FyT2xCO0FBQUE7QUFxT0Msd0JBck9EOztBQXNPSCxvQkFBSSxZQUFZLFFBQWhCO0FBQ0ksd0JBQUksU0FBUyxRQUFULEtBQXNCLE1BQTFCO0FBQ0ksOEJBQU0sSUFBSSxhQUFKLENBQW1CLFNBQUssRUFBTCxHQUFVLEdBQVYsR0FBZ0IsU0FBSyxJQUFMLENBQVcsUUFBWCxDQUFuQyxDQUFOO0FBREo7QUFESixpQkFHQSxPQUFPLFFBQVA7QUF6T0c7QUFBQTtBQUFBLEtBQVg7O0FBNk9BOztBQUVBLFFBQUksU0FBUzs7QUFFVCxjQUFNLFFBRkc7QUFHVCxnQkFBUSxVQUhDO0FBSVQscUJBQWEsSUFKSixFQUlVO0FBQ25CLHFCQUFhLElBTEo7QUFNVCwyQkFBbUIsSUFOVjtBQU9ULGdCQUFRO0FBQ0osb0JBQVEscUdBREo7QUFFSixtQkFBTyxzQkFGSDtBQUdKLG1CQUFPLGtCQUhIO0FBSUosbUJBQU87QUFKSCxTQVBDO0FBYVQsZUFBTztBQUNILHNCQUFVO0FBQ04sdUJBQU8sQ0FDSCxFQURHLEVBQ0M7QUFDSix5QkFGRyxFQUdILFlBSEcsRUFJSCxXQUpHLEVBS0gsU0FMRyxFQU1ILE9BTkcsRUFPSCxjQVBHO0FBREQsYUFEUDtBQVlILHVCQUFXO0FBQ1Asd0JBQVEsQ0FDSixTQURJLEVBRUosUUFGSSxFQUdKLFdBSEksRUFJSixTQUpJLEVBS0osUUFMSSxFQU1KLFNBTkksRUFPSixXQVBJLEVBUUosU0FSSSxFQVNKLGNBVEksRUFVSixZQVZJLEVBV0osYUFYSSxFQVlKLGdCQVpJLEVBYUosY0FiSSxFQWNKLGtCQWRJLEVBZUosaUJBZkksRUFnQkosZUFoQkksRUFpQkosZ0JBakJJLEVBa0JKLE9BbEJJLEVBbUJKLFlBbkJJLEVBb0JKLG9CQXBCSTtBQUREO0FBWlIsU0FiRTs7QUFtREgsb0JBbkRHO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkFvRGUsU0FBSyxnQkFBTCxFQXBEZjtBQUFBO0FBb0RELHVCQXBEQztBQXFERCxvQkFyREMsR0FxRE0sT0FBTyxJQUFQLENBQWEsT0FBYixDQXJETjtBQXNERCxzQkF0REMsR0FzRFEsRUF0RFI7O0FBdURMLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksS0FBSyxNQUF6QixFQUFpQyxHQUFqQyxFQUFzQztBQUM5QiwwQkFEOEIsR0FDckIsUUFBUSxLQUFLLENBQUwsQ0FBUixDQURxQjtBQUU5QixzQkFGOEIsR0FFekIsT0FBTyxZQUFQLEVBQXFCLFFBQXJCLEVBRnlCO0FBRzlCLHdCQUg4QixHQUd2QixPQUFPLGtCQUFQLENBSHVCO0FBSTlCLHlCQUo4QixHQUl0QixPQUFPLG9CQUFQLENBSnNCOztBQUtsQywyQkFBTyxTQUFLLGtCQUFMLENBQXlCLElBQXpCLENBQVA7QUFDQSw0QkFBUSxTQUFLLGtCQUFMLENBQXlCLEtBQXpCLENBQVI7QUFDSSwwQkFQOEIsR0FPckIsT0FBTyxHQUFQLEdBQWEsS0FQUTs7QUFRbEMsMkJBQU8sSUFBUCxDQUFhO0FBQ1QsOEJBQU0sRUFERztBQUVULGtDQUFVLE1BRkQ7QUFHVCxnQ0FBUSxJQUhDO0FBSVQsaUNBQVMsS0FKQTtBQUtULGdDQUFRO0FBTEMscUJBQWI7QUFPSDtBQUNELHVCQUFPLE1BQVA7QUF2RUs7QUFBQTtBQTBFVCwwQkExRVMsOEJBMEVXLFFBMUVYLEVBMEVxQjtBQUMxQjtBQUNBLGdCQUFJLFlBQVksS0FBaEIsRUFDSSxPQUFPLE1BQVA7QUFDSixnQkFBSSxZQUFZLEtBQWhCLEVBQ0ksT0FBTyxNQUFQO0FBQ0osbUJBQU8sUUFBUDtBQUNILFNBakZRO0FBbUZILG9CQW5GRztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQW9GQyxTQUFLLFdBQUwsRUFwRkQ7QUFBQTtBQUFBLHVCQXFGZ0IsU0FBSyxrQkFBTCxFQXJGaEI7QUFBQTtBQXFGRCx3QkFyRkM7QUFzRkQsdUJBdEZDLEdBc0ZTLFNBQVMsU0FBVCxDQXRGVDtBQXVGRCxzQkF2RkMsR0F1RlEsRUFBRSxRQUFRLE9BQVYsRUF2RlI7QUF3RkQsMEJBeEZDLEdBd0ZZLE9BQU8sSUFBUCxDQUFhLE9BQWIsQ0F4Rlo7O0FBeUZMLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksV0FBVyxNQUEvQixFQUF1QyxHQUF2QyxFQUE0QztBQUNwQyw0QkFEb0MsR0FDekIsV0FBVyxDQUFYLENBRHlCO0FBRXBDLHdCQUZvQyxHQUU3QixTQUFLLGtCQUFMLENBQXlCLFFBQXpCLENBRjZCO0FBR3BDLDJCQUhvQyxHQUcxQjtBQUNWLGdDQUFRLFdBQVksUUFBUSxRQUFSLEVBQWtCLFdBQWxCLENBQVosQ0FERTtBQUVWLGdDQUFRLFNBRkU7QUFHVixpQ0FBUyxXQUFZLFFBQVEsUUFBUixFQUFrQixPQUFsQixDQUFaO0FBSEMscUJBSDBCOztBQVF4Qyw0QkFBUSxNQUFSLElBQWtCLFFBQVEsT0FBUixJQUFtQixRQUFRLE1BQVIsQ0FBckM7QUFDQSwyQkFBTyxJQUFQLElBQWUsT0FBZjtBQUNIO0FBQ0QsdUJBQU8sTUFBUDtBQXBHSztBQUFBO0FBdUdILHNCQXZHRywwQkF1R2EsTUF2R2I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBdUdxQixzQkF2R3JCLG1GQXVHOEIsRUF2RzlCO0FBQUEsdUJBd0dDLFNBQUssV0FBTCxFQXhHRDtBQUFBO0FBQUEsdUJBeUdpQixTQUFLLGtCQUFMLENBQXlCLFNBQUssTUFBTCxDQUFhO0FBQ3hELCtCQUFXLFNBQUssUUFBTCxDQUFlLE1BQWY7QUFENkMsaUJBQWIsRUFFNUMsTUFGNEMsQ0FBekIsQ0F6R2pCO0FBQUE7QUF5R0QseUJBekdDO0FBNEdELHlCQTVHQyxHQTRHVyxTQUFLLFlBQUwsRUE1R1g7QUE2R0Qsc0JBN0dDLEdBNkdRO0FBQ1QsNEJBQVEsRUFEQztBQUVULDRCQUFRLEVBRkM7QUFHVCxpQ0FBYSxTQUhKO0FBSVQsZ0NBQVksU0FBSyxPQUFMLENBQWMsU0FBZDtBQUpILGlCQTdHUjtBQW1IRCxxQkFuSEMsR0FtSE8sQ0FBRSxNQUFGLEVBQVUsTUFBVixDQW5IUDs7QUFvSEwscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxNQUFNLE1BQTFCLEVBQWtDLEdBQWxDLEVBQXVDO0FBQy9CLHdCQUQrQixHQUN4QixNQUFNLENBQU4sQ0FEd0I7QUFFL0IsMEJBRitCLEdBRXRCLFVBQVUsSUFBVixDQUZzQjs7QUFHbkMseUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxPQUFPLE1BQTNCLEVBQW1DLEdBQW5DLEVBQXdDO0FBQ2hDLDZCQURnQyxHQUN4QixPQUFPLENBQVAsQ0FEd0I7QUFFaEMsNkJBRmdDLEdBRXhCLFdBQVksTUFBTSxDQUFOLENBQVosQ0FGd0I7QUFHaEMsOEJBSGdDLEdBR3ZCLFdBQVksTUFBTSxDQUFOLENBQVosQ0FIdUI7O0FBSXBDLCtCQUFPLElBQVAsRUFBYSxJQUFiLENBQW1CLENBQUUsS0FBRixFQUFTLE1BQVQsQ0FBbkI7QUFDSDtBQUNKO0FBQ0QsdUJBQU8sTUFBUDtBQTlISztBQUFBO0FBaUlULG1CQWpJUyx1QkFpSUksTUFqSUosRUFpSVksTUFqSVosRUFpSW9CO0FBQ3pCLGdCQUFJLFlBQVksS0FBSyxZQUFMLEVBQWhCO0FBQ0EsbUJBQU87QUFDSCw2QkFBYSxTQURWO0FBRUgsNEJBQVksS0FBSyxPQUFMLENBQWMsU0FBZCxDQUZUO0FBR0gsd0JBQVEsU0FITDtBQUlILHVCQUFPLFNBSko7QUFLSCx1QkFBTyxXQUFZLE9BQU8sV0FBUCxFQUFvQixNQUFwQixFQUE0QixTQUE1QixDQUFaLENBTEo7QUFNSCx1QkFBTyxXQUFZLE9BQU8sV0FBUCxFQUFvQixNQUFwQixFQUE0QixTQUE1QixDQUFaLENBTko7QUFPSCx3QkFBUSxTQVBMO0FBUUgsd0JBQVEsU0FSTDtBQVNILHlCQUFTLFNBVE47QUFVSCx5QkFBUyxTQVZOO0FBV0gsd0JBQVEsV0FBWSxPQUFPLFlBQVAsQ0FBWixDQVhMO0FBWUgsMEJBQVUsV0FBWSxPQUFPLFFBQVAsQ0FBWixDQVpQO0FBYUgsOEJBQWMsU0FiWDtBQWNILDJCQUFXLFNBZFI7QUFlSCw4QkFBYyxTQWZYO0FBZ0JILCtCQUFlLFdBQVksT0FBTyxnQkFBUCxDQUFaLENBaEJaO0FBaUJILHdCQUFRO0FBakJMLGFBQVA7QUFtQkgsU0F0SlE7QUF3Skgsb0JBeEpHO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBeUpDLFNBQUssV0FBTCxFQXpKRDtBQUFBO0FBQUEsdUJBMEplLFNBQUssU0FBTCxFQTFKZjtBQUFBO0FBMEpELHVCQTFKQztBQTJKRCxzQkEzSkMsR0EySlEsRUEzSlI7QUE0SkQsbUJBNUpDLEdBNEpLLE9BQU8sSUFBUCxDQUFhLE9BQWIsQ0E1Skw7O0FBNkpMLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksSUFBSSxNQUF4QixFQUFnQyxHQUFoQyxFQUFxQztBQUM3QixzQkFENkIsR0FDeEIsSUFBSSxDQUFKLENBRHdCO0FBRTdCLDBCQUY2QixHQUVwQixRQUFRLEVBQVIsQ0FGb0I7QUFHN0IsMEJBSDZCLEdBR3BCLFNBQUssYUFBTCxDQUFtQixFQUFuQixDQUhvQjtBQUk3QiwwQkFKNkIsR0FJcEIsT0FBTyxRQUFQLENBSm9COztBQUtqQywyQkFBTyxNQUFQLElBQWlCLFNBQUssV0FBTCxDQUFrQixNQUFsQixFQUEwQixNQUExQixDQUFqQjtBQUNIO0FBQ0QsdUJBQU8sTUFBUDtBQXBLSztBQUFBO0FBdUtILG1CQXZLRyx1QkF1S1UsTUF2S1Y7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBd0tDLFNBQUssV0FBTCxFQXhLRDtBQUFBO0FBeUtELGlCQXpLQyxHQXlLRyxTQUFLLE1BQUwsQ0FBYSxNQUFiLENBektIO0FBQUEsdUJBMEtlLFNBQUssU0FBTCxDQUFnQixFQUFFLFdBQVcsRUFBRSxJQUFGLENBQWIsRUFBaEIsQ0ExS2Y7QUFBQTtBQTBLRCx1QkExS0M7QUEyS0Qsa0JBM0tDLEdBMktJLEVBQUUsSUFBRixFQUFRLFFBQVIsRUEzS0o7QUE0S0Qsc0JBNUtDLEdBNEtRLFFBQVEsRUFBUixDQTVLUjs7QUE2S0wsdUJBQU8sU0FBSyxXQUFMLENBQWtCLE1BQWxCLEVBQTBCLENBQTFCLENBQVA7QUE3S0s7QUFBQTtBQWdMSCxtQkFoTEcsdUJBZ0xVLE1BaExWO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBZ0xrQixzQkFoTGxCLG1GQWdMMkIsRUFoTDNCO0FBQUEsdUJBaUxDLFNBQUssV0FBTCxFQWpMRDtBQUFBO0FBa0xMLHVCQUFPLFNBQUssY0FBTCxDQUFxQixTQUFLLE1BQUwsQ0FBYTtBQUNyQywrQkFBVyxTQUFLLFFBQUwsQ0FBZSxNQUFmO0FBRDBCLGlCQUFiLEVBRXpCLE1BRnlCLENBQXJCLENBQVA7QUFsTEs7QUFBQTtBQXVMSCxtQkF2TEcsdUJBdUxVLE1BdkxWLEVBdUxrQixJQXZMbEIsRUF1THdCLElBdkx4QixFQXVMOEIsTUF2TDlCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQXVMc0MscUJBdkx0QyxtRkF1TDhDLFNBdkw5QztBQXVMeUQsc0JBdkx6RCxtRkF1TGtFLEVBdkxsRTtBQUFBLHVCQXdMQyxTQUFLLFdBQUwsRUF4TEQ7QUFBQTtBQUFBLHVCQXlMZ0IsU0FBSyxnQkFBTCxDQUF1QixTQUFLLE1BQUwsQ0FBYTtBQUNyRCwrQkFBVyxTQUFLLFFBQUwsQ0FBZSxNQUFmLENBRDBDO0FBRXJELDRCQUFRLElBRjZDO0FBR3JELDhCQUFVLE1BSDJDO0FBSXJELDRCQUFRO0FBSjZDLGlCQUFiLEVBS3pDLE1BTHlDLENBQXZCLENBekxoQjtBQUFBO0FBeUxELHdCQXpMQzs7QUErTEwsdUJBQU87QUFDSCw0QkFBUSxRQURMO0FBRUgsMEJBQU0sU0FBUyxVQUFULEVBQXFCLFFBQXJCO0FBRkgsaUJBQVA7QUEvTEs7QUFBQTtBQXFNSCxtQkFyTUcsdUJBcU1VLEVBck1WO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQXNNQyxTQUFLLFdBQUwsRUF0TUQ7QUFBQTtBQXVNRCx1QkF2TUMsR0F1TVMsU0F2TVQsRUF1TW9COztBQUN6Qix1QkFBTyxTQUFLLGlCQUFMLENBQXdCO0FBQzNCLGdDQUFZLEVBRGU7QUFFM0IsK0JBQVc7QUFGZ0IsaUJBQXhCLENBQVA7QUF4TUs7QUFBQTtBQThNSCxlQTlNRyxtQkE4TU0sSUE5TU47QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQThNWSxtQkE5TVosbUZBOE1rQixRQTlNbEI7QUE4TTRCLHNCQTlNNUIsbUZBOE1xQyxLQTlNckM7QUE4TTRDLHNCQTlNNUMsbUZBOE1xRCxFQTlNckQ7QUE4TXlELHVCQTlNekQsbUZBOE1tRSxTQTlNbkU7QUE4TThFLG9CQTlNOUUsbUZBOE1xRixTQTlNckY7QUErTUQsbUJBL01DLEdBK01LLFNBQUssSUFBTCxDQUFVLEtBQVYsSUFBbUIsR0EvTXhCOztBQWdOTCxvQkFBSSxJQUFKO0FBQ0ksMkJBQU8sT0FBTyxHQUFkO0FBREosaUJBRUEsSUFBSSxPQUFPLElBQVAsQ0FBYSxNQUFiLEVBQXFCLE1BQXpCO0FBQ0ksMkJBQU8sTUFBTSxTQUFLLFNBQUwsQ0FBZ0IsTUFBaEIsQ0FBYjtBQURKLGlCQUVBLElBQUksT0FBTyxTQUFYLEVBQXNCO0FBQ2QseUJBRGMsR0FDTixTQUFLLEtBQUwsRUFETTtBQUVkLHdCQUZjLEdBRVAsU0FBSyxNQUFMLEdBQWMsTUFBTSxRQUFOLEVBQWQsR0FBa0MsU0FBSyxNQUZoQztBQUdkLDZCQUhjLEdBR0YsU0FBSyxJQUFMLENBQVcsU0FBSyxNQUFMLENBQWEsSUFBYixDQUFYLEVBQStCLFFBQS9CLENBSEU7O0FBSWxCLDJCQUFPLFNBQUssU0FBTCxDQUFnQixTQUFLLE1BQUwsQ0FBYTtBQUNoQywrQkFBTyxTQUFLLE1BRG9CO0FBRWhDLGlDQUFTLEtBRnVCO0FBR2hDLHFDQUFhO0FBQ2I7QUFKZ0MscUJBQWIsRUFLcEIsTUFMb0IsQ0FBaEIsQ0FBUDtBQU1BLDhCQUFVO0FBQ04sd0NBQWdCLG1DQURWO0FBRU4sMENBQWtCLEtBQUs7QUFGakIscUJBQVY7QUFJSDtBQWxPSSx1QkFtT2dCLFNBQUssS0FBTCxDQUFZLEdBQVosRUFBaUIsTUFBakIsRUFBeUIsT0FBekIsRUFBa0MsSUFBbEMsQ0FuT2hCO0FBQUE7QUFtT0Qsd0JBbk9DOztBQW9PTCxvQkFBSSxPQUFPLFFBQVg7QUFDSSwyQkFBTyxRQUFQO0FBREo7QUFBQSw2QkFFSSxhQUFhLFFBRmpCOztBQUdJLGtDQUFJLFNBQVMsU0FBVCxDQUFKO0FBQ0ksK0JBQU8sUUFBUDtBQURKO0FBRUosOEJBQU0sSUFBSSxhQUFKLENBQW1CLFNBQUssRUFBTCxHQUFVLEdBQVYsR0FBZ0IsU0FBSyxJQUFMLENBQVcsUUFBWCxDQUFuQyxDQUFOO0FBRkk7QUFISjtBQXBPSztBQUFBO0FBQUEsS0FBYjs7QUE2T0E7O0FBRUEsUUFBSSxPQUFPOztBQUVQLGNBQU0sTUFGQztBQUdQLGdCQUFRLE9BSEQ7QUFJUCxxQkFBYSxDQUFFLElBQUYsRUFBUSxJQUFSLENBSk47QUFLUCxxQkFBYSxJQUxOO0FBTVAsZ0JBQVE7QUFDSixvQkFBUSxxR0FESjtBQUVKLG1CQUFPO0FBQ0gsMkJBQVcscUJBRFI7QUFFSCwwQkFBVSxrQ0FGUDtBQUdILDJCQUFXO0FBSFIsYUFGSDtBQU9KLG1CQUFPLG1CQVBIO0FBUUosbUJBQU87QUFSSCxTQU5EO0FBZ0JQLGVBQU87QUFDSCx1QkFBVztBQUNQLHVCQUFPLENBQ0gsV0FERyxFQUVILFVBRkcsRUFHSCxPQUhHLEVBSUgsUUFKRyxFQUtILGVBTEc7QUFEQSxhQURSO0FBVUgsc0JBQVU7QUFDTix1QkFBTyxDQUNILHFCQURHLEVBRUgsZUFGRyxFQUdILFNBSEcsRUFJSCxpQkFKRyxFQUtILFdBTEc7QUFERCxhQVZQO0FBbUJILHVCQUFXO0FBQ1AsdUJBQU8sQ0FDSCxVQURHLEVBRUgsUUFGRyxFQUdILFlBSEcsRUFJSCxhQUpHLEVBS0gsZUFMRyxFQU1ILFVBTkcsRUFPSCxpQkFQRyxFQVFILFVBUkcsRUFTSCxXQVRHO0FBREE7QUFuQlIsU0FoQkE7O0FBa0RELG9CQWxEQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQW1EaUIsU0FBSyxnQkFBTCxFQW5EakI7QUFBQTtBQW1EQyx1QkFuREQ7QUFvREMsc0JBcERELEdBb0RVLEVBcERWOztBQXFESCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFFBQVEsUUFBUixFQUFrQixNQUF0QyxFQUE4QyxHQUE5QyxFQUFtRDtBQUMzQywwQkFEMkMsR0FDbEMsUUFBUSxRQUFSLEVBQWtCLENBQWxCLENBRGtDO0FBRTNDLHNCQUYyQyxHQUV0QyxPQUFPLFlBQVAsQ0FGc0M7QUFHM0Msd0JBSDJDLEdBR3BDLE9BQU8sZ0JBQVAsQ0FIb0M7QUFJM0MseUJBSjJDLEdBSW5DLE9BQU8sY0FBUCxDQUptQztBQUszQywwQkFMMkMsR0FLbEMsT0FBTyxHQUFQLEdBQWEsS0FMcUI7O0FBTS9DLDJCQUFPLElBQVAsQ0FBYTtBQUNULDhCQUFNLEVBREc7QUFFVCxrQ0FBVSxNQUZEO0FBR1QsZ0NBQVEsSUFIQztBQUlULGlDQUFTLEtBSkE7QUFLVCxnQ0FBUTtBQUxDLHFCQUFiO0FBT0g7QUFDRCx1QkFBTyxNQUFQO0FBbkVHO0FBQUE7QUFzRUQsb0JBdEVDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQXVFRyxTQUFLLFdBQUwsRUF2RUg7QUFBQTtBQUFBLHVCQXdFa0IsU0FBSyxrQkFBTCxFQXhFbEI7QUFBQTtBQXdFQyx3QkF4RUQ7QUF5RUMsd0JBekVELEdBeUVZLFNBQVMsUUFBVCxDQXpFWjtBQTBFQyxzQkExRUQsR0EwRVUsRUFBRSxRQUFRLFFBQVYsRUExRVY7O0FBMkVILHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksU0FBUyxNQUE3QixFQUFxQyxHQUFyQyxFQUEwQztBQUNsQywyQkFEa0MsR0FDeEIsU0FBUyxDQUFULENBRHdCO0FBRWxDLDRCQUZrQyxHQUV2QixRQUFRLFVBQVIsQ0FGdUI7QUFHbEMsMkJBSGtDLEdBR3hCO0FBQ1YsZ0NBQVEsUUFBUSxXQUFSLENBREU7QUFFVixnQ0FBUSxRQUFRLFNBQVIsQ0FGRTtBQUdWLGlDQUFTLFFBQVEsU0FBUjtBQUhDLHFCQUh3Qjs7QUFRdEMsMkJBQU8sUUFBUCxJQUFtQixPQUFuQjtBQUNIO0FBQ0QsdUJBQU8sTUFBUDtBQXJGRztBQUFBO0FBd0ZELHNCQXhGQywwQkF3RmUsTUF4RmY7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBd0Z1QixzQkF4RnZCLG1GQXdGZ0MsRUF4RmhDO0FBQUEsdUJBeUZHLFNBQUssV0FBTCxFQXpGSDtBQUFBO0FBQUEsdUJBMEZrQixTQUFLLGtCQUFMLENBQXlCLFNBQUssTUFBTCxDQUFhO0FBQ3ZELDhCQUFVLFNBQUssUUFBTCxDQUFlLE1BQWYsQ0FENkM7QUFFdkQsNEJBQVEsTUFGK0M7QUFHdkQsNkJBQVM7QUFIOEMsaUJBQWIsRUFJM0MsTUFKMkMsQ0FBekIsQ0ExRmxCO0FBQUE7QUEwRkMsd0JBMUZEO0FBK0ZDLHlCQS9GRCxHQStGYSxTQUFTLFFBQVQsQ0EvRmI7QUFnR0MseUJBaEdELEdBZ0dhLFNBQUssWUFBTCxFQWhHYjtBQWlHQyxzQkFqR0QsR0FpR1U7QUFDVCw0QkFBUSxFQURDO0FBRVQsNEJBQVEsRUFGQztBQUdULGlDQUFhLFNBSEo7QUFJVCxnQ0FBWSxTQUFLLE9BQUwsQ0FBYyxTQUFkO0FBSkgsaUJBakdWO0FBdUdDLHFCQXZHRCxHQXVHUyxFQUFFLFFBQVEsS0FBVixFQUFpQixRQUFRLE1BQXpCLEVBdkdUO0FBd0dDLG9CQXhHRCxHQXdHUSxPQUFPLElBQVAsQ0FBYSxLQUFiLENBeEdSOztBQXlHSCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLEtBQUssTUFBekIsRUFBaUMsR0FBakMsRUFBc0M7QUFDOUIsdUJBRDhCLEdBQ3hCLEtBQUssQ0FBTCxDQUR3QjtBQUU5Qix3QkFGOEIsR0FFdkIsTUFBTSxHQUFOLENBRnVCO0FBRzlCLDBCQUg4QixHQUdyQixVQUFVLElBQVYsQ0FIcUI7O0FBSWxDLHlCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksT0FBTyxNQUEzQixFQUFtQyxHQUFuQyxFQUF3QztBQUNoQyw2QkFEZ0MsR0FDeEIsT0FBTyxDQUFQLENBRHdCO0FBRWhDLDZCQUZnQyxHQUV4QixXQUFZLE1BQU0sTUFBTixDQUFaLENBRndCO0FBR2hDLDhCQUhnQyxHQUd2QixXQUFZLE1BQU0sVUFBTixDQUFaLENBSHVCOztBQUlwQywrQkFBTyxHQUFQLEVBQVksSUFBWixDQUFrQixDQUFFLEtBQUYsRUFBUyxNQUFULENBQWxCO0FBQ0g7QUFDSjtBQUNELHVCQUFPLE1BQVA7QUFwSEc7QUFBQTtBQXVIUCxtQkF2SE8sdUJBdUhNLE1BdkhOLEVBdUhjLE1BdkhkLEVBdUhzQjtBQUN6QixnQkFBSSxZQUFZLE9BQU8sU0FBUCxJQUFvQixJQUFwQztBQUNBLG1CQUFPO0FBQ0gsNkJBQWEsU0FEVjtBQUVILDRCQUFZLEtBQUssT0FBTCxDQUFjLFNBQWQsQ0FGVDtBQUdILHdCQUFRLFdBQVksT0FBTyxNQUFQLENBQVosQ0FITDtBQUlILHVCQUFPLFdBQVksT0FBTyxLQUFQLENBQVosQ0FKSjtBQUtILHVCQUFPLFdBQVksT0FBTyxLQUFQLENBQVosQ0FMSjtBQU1ILHVCQUFPLFdBQVksT0FBTyxNQUFQLENBQVosQ0FOSjtBQU9ILHdCQUFRLFNBUEw7QUFRSCx3QkFBUSxTQVJMO0FBU0gseUJBQVMsU0FUTjtBQVVILHlCQUFTLFNBVk47QUFXSCx3QkFBUSxXQUFZLE9BQU8sV0FBUCxDQUFaLENBWEw7QUFZSCwwQkFBVSxTQVpQO0FBYUgsOEJBQWMsU0FiWDtBQWNILDJCQUFXLFdBQVksT0FBTyxLQUFQLENBQVosQ0FkUjtBQWVILDhCQUFjLFNBZlg7QUFnQkgsK0JBQWUsV0FBWSxPQUFPLFlBQVAsQ0FBWixDQWhCWjtBQWlCSCx3QkFBUTtBQWpCTCxhQUFQO0FBbUJILFNBNUlNO0FBOElELG1CQTlJQyx1QkE4SVksTUE5SVo7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQStJRyxTQUFLLFdBQUwsRUEvSUg7QUFBQTtBQWdKQyxpQkFoSkQsR0FnSkssU0FBSyxNQUFMLENBQWEsTUFBYixDQWhKTDtBQUFBLHVCQWlKa0IsU0FBSyxnQkFBTCxDQUF1QjtBQUN4Qyw4QkFBVSxFQUFFLElBQUYsRUFBUSxXQUFSO0FBRDhCLGlCQUF2QixDQWpKbEI7QUFBQTtBQWlKQyx3QkFqSkQ7QUFvSkMsc0JBcEpELEdBb0pVLFNBQVMsUUFBVCxDQXBKVjs7QUFxSkgsdUJBQU8sU0FBSyxXQUFMLENBQWtCLE1BQWxCLEVBQTBCLENBQTFCLENBQVA7QUFySkc7QUFBQTtBQXdKRCxtQkF4SkMsdUJBd0pZLE1BeEpaO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBd0pvQixzQkF4SnBCLG1GQXdKNkIsRUF4SjdCO0FBQUEsdUJBeUpHLFNBQUssV0FBTCxFQXpKSDtBQUFBO0FBMEpILHVCQUFPLFNBQUssc0JBQUwsQ0FBNkIsU0FBSyxNQUFMLENBQWE7QUFDN0MsOEJBQVUsU0FBSyxRQUFMLENBQWUsTUFBZixDQURtQztBQUU3Qyw0QkFBUSxNQUZxQztBQUc3Qyw2QkFBUztBQUhvQyxpQkFBYixFQUlqQyxNQUppQyxDQUE3QixDQUFQO0FBMUpHO0FBQUE7QUFpS0QsbUJBaktDLHVCQWlLWSxNQWpLWixFQWlLb0IsSUFqS3BCLEVBaUswQixJQWpLMUIsRUFpS2dDLE1BaktoQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQWlLd0MscUJBakt4QyxtRkFpS2dELFNBaktoRDtBQWlLMkQsc0JBakszRCxtRkFpS29FLEVBaktwRTtBQUFBLHVCQWtLRyxTQUFLLFdBQUwsRUFsS0g7QUFBQTtBQW1LQyxzQkFuS0QsR0FtS1UsZUFBZSxTQUFLLFVBQUwsQ0FBaUIsSUFBakIsQ0FBZixHQUF3QyxJQW5LbEQ7QUFBQSx1QkFvS2tCLFNBQUssTUFBTCxFQUFjLFNBQUssTUFBTCxDQUFhO0FBQzVDLDhCQUFVLFNBQUssUUFBTCxDQUFlLE1BQWYsQ0FEa0M7QUFFNUMsZ0NBQVksTUFGZ0M7QUFHNUMsNEJBQVE7QUFIb0MsaUJBQWIsRUFJaEMsTUFKZ0MsQ0FBZCxDQXBLbEI7QUFBQTtBQW9LQyx3QkFwS0Q7O0FBeUtILHVCQUFPO0FBQ0gsNEJBQVEsUUFETDtBQUVILDBCQUFNLFNBQVMsUUFBVCxFQUFtQixNQUFuQjtBQUZILGlCQUFQO0FBektHO0FBQUE7QUErS0QsbUJBL0tDLHVCQStLWSxFQS9LWjtBQUFBOztBQUFBO0FBQUEsdUJBZ0xHLFNBQUssV0FBTCxFQWhMSDtBQUFBO0FBaUxILHVCQUFPLFNBQUssZ0JBQUwsQ0FBdUIsRUFBRSxRQUFRLEVBQVYsRUFBdkIsQ0FBUDtBQWpMRztBQUFBO0FBb0xELGVBcExDLG1CQW9MUSxJQXBMUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQW9MYyxtQkFwTGQsbUZBb0xvQixRQXBMcEI7QUFvTDhCLHNCQXBMOUIsbUZBb0x1QyxLQXBMdkM7QUFvTDhDLHNCQXBMOUMsbUZBb0x1RCxFQXBMdkQ7QUFvTDJELHVCQXBMM0QsbUZBb0xxRSxTQXBMckU7QUFvTGdGLG9CQXBMaEYsbUZBb0x1RixTQXBMdkY7QUFxTEMsbUJBckxELEdBcUxPLFNBQUssSUFBTCxDQUFVLEtBQVYsRUFBaUIsR0FBakIsQ0FyTFA7O0FBc0xILG9CQUFJLE9BQU8sU0FBWCxFQUFzQjtBQUNkLHlCQURjLEdBQ04sU0FBSyxLQUFMLEdBQWMsUUFBZCxFQURNO0FBRWQseUJBRmMsR0FFTixTQUFLLE9BQUwsQ0FBYyxTQUFLLE1BQUwsQ0FBYTtBQUNuQyw2QkFBSyxJQUQ4QjtBQUVuQyxrQ0FBVSxTQUFLLE1BRm9CO0FBR25DLGlDQUFTO0FBSDBCLHFCQUFiLEVBSXZCLE1BSnVCLENBQWQsQ0FGTTs7QUFPbEIsMkJBQU8sTUFBTSxTQUFLLFNBQUwsQ0FBZ0IsS0FBaEIsQ0FBYjtBQUNBLDhCQUFVLEVBQUUsV0FBVyxTQUFLLElBQUwsQ0FBVyxTQUFLLE1BQUwsQ0FBYSxHQUFiLENBQVgsRUFBOEIsU0FBSyxNQUFMLENBQWEsU0FBSyxNQUFsQixDQUE5QixFQUF5RCxRQUF6RCxDQUFiLEVBQVY7QUFDSCxpQkFURDtBQVNPLHdCQUFJLE9BQU8sUUFBWCxFQUFxQjtBQUN4QiwrQkFBTyxNQUFNLFNBQUssU0FBTCxDQUFnQixTQUFLLE1BQUwsQ0FBYTtBQUN0QyxpQ0FBSyxRQUFRO0FBRHlCLHlCQUFiLEVBRTFCLE1BRjBCLENBQWhCLENBQWI7QUFHSCxxQkFKTSxNQUlBO0FBQ0gsK0JBQU8sTUFBTSxTQUFLLGFBQUwsQ0FBb0IsSUFBcEIsRUFBMEIsTUFBMUIsQ0FBTixHQUEwQyxPQUFqRDtBQUNIO0FBZkQsaUJBdExHLE9Bc01rQixTQUFLLEtBQUwsQ0FBWSxHQUFaLEVBQWlCLE1BQWpCLEVBQXlCLE9BQXpCLEVBQWtDLElBQWxDLENBdE1sQjtBQUFBO0FBc01DLHdCQXRNRDs7QUF1TUgsb0JBQUksT0FBTyxTQUFYO0FBQ0ksMkJBQU8sUUFBUDtBQURKO0FBQUEsNkJBRUksYUFBYSxRQUZqQjs7QUFHSSxrQ0FBSSxTQUFTLFNBQVQsQ0FBSjtBQUNJLCtCQUFPLFFBQVA7QUFESjtBQUVKLDhCQUFNLElBQUksYUFBSixDQUFtQixTQUFLLEVBQUwsR0FBVSxHQUFWLEdBQWdCLFNBQUssSUFBTCxDQUFXLFFBQVgsQ0FBbkMsQ0FBTjtBQUZJO0FBSEo7QUF2TUc7QUFBQTtBQUFBLEtBQVg7O0FBZ05BOztBQUVBLFFBQUksTUFBTTs7QUFFTixjQUFNLEtBRkE7QUFHTixnQkFBUSxRQUhGO0FBSU4scUJBQWEsQ0FBRSxJQUFGLEVBQVEsSUFBUixFQUFjLElBQWQsRUFBb0IsSUFBcEIsQ0FKUDtBQUtOLHFCQUFhLElBTFA7QUFNTiwyQkFBbUIsSUFOYjtBQU9OLGdCQUFRO0FBQ0osb0JBQVEscUdBREo7QUFFSixtQkFBTyxvQkFGSDtBQUdKLG1CQUFPLGdCQUhIO0FBSUosbUJBQU87QUFKSCxTQVBGO0FBYU4sZUFBTztBQUNILHNCQUFVO0FBQ04sdUJBQU8sQ0FDSCxpQkFERyxFQUVILG1CQUZHLEVBR0gsMEJBSEcsRUFJSCw0QkFKRyxFQUtILG1CQUxHLEVBTUgsZUFORyxFQU9ILHNCQVBHLEVBUUgsc0JBUkcsQ0FERDtBQVdOLHdCQUFRLENBQ0osZ0JBREksRUFFSixvQkFGSTtBQVhGLGFBRFA7QUFpQkgsdUJBQVc7QUFDUCx3QkFBUSxDQUNKLHVCQURJLEVBRUosd0JBRkksRUFHSixVQUhJLEVBSUosZUFKSSxFQUtKLHNCQUxJLEVBTUosNkJBTkksRUFPSix1QkFQSSxFQVFKLGNBUkksRUFTSixZQVRJLEVBVUosWUFWSSxFQVdKLGVBWEksRUFZSixvQkFaSSxFQWFKLGNBYkksRUFjSixzQkFkSSxFQWVKLHVCQWZJLEVBZ0JKLG9CQWhCSSxFQWlCSixvQkFqQkk7QUFERDtBQWpCUixTQWJEOztBQXFEQSxvQkFyREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBc0RrQixTQUFLLHVCQUFMLEVBdERsQjtBQUFBO0FBc0RFLHVCQXRERjtBQXVERSxzQkF2REYsR0F1RFcsRUF2RFg7O0FBd0RGLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksUUFBUSxNQUFSLEVBQWdCLE9BQWhCLEVBQXlCLE1BQTdDLEVBQXFELEdBQXJELEVBQTBEO0FBQ2xELDBCQURrRCxHQUN6QyxRQUFRLE1BQVIsRUFBZ0IsT0FBaEIsRUFBeUIsQ0FBekIsQ0FEeUM7QUFFbEQsc0JBRmtELEdBRTdDLE9BQU8sU0FBUCxJQUFvQixHQUFwQixHQUEwQixPQUFPLFNBQVAsQ0FGbUI7QUFHbEQsMEJBSGtELEdBR3pDLEVBSHlDO0FBQUEscUNBSWhDLE9BQU8sS0FBUCxDQUFjLEdBQWQsQ0FKZ0M7QUFBQTtBQUloRCx3QkFKZ0Q7QUFJMUMseUJBSjBDOztBQUt0RCwyQkFBTyxJQUFQLENBQWE7QUFDVCw4QkFBTSxFQURHO0FBRVQsa0NBQVUsTUFGRDtBQUdULGdDQUFRLElBSEM7QUFJVCxpQ0FBUyxLQUpBO0FBS1QsZ0NBQVE7QUFMQyxxQkFBYjtBQU9IO0FBQ0QsdUJBQU8sTUFBUDtBQXJFRTtBQUFBO0FBd0VBLG9CQXhFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQXlFSSxTQUFLLFdBQUwsRUF6RUo7QUFBQTtBQUFBLHVCQTBFbUIsU0FBSyxrQkFBTCxFQTFFbkI7QUFBQTtBQTBFRSx3QkExRUY7QUEyRUUsc0JBM0VGLEdBMkVXLEVBQUUsUUFBUSxRQUFWLEVBM0VYOztBQTRFRixxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFNBQUssVUFBTCxDQUFnQixNQUFwQyxFQUE0QyxHQUE1QyxFQUFpRDtBQUN6Qyw0QkFEeUMsR0FDOUIsU0FBSyxVQUFMLENBQWdCLENBQWhCLENBRDhCO0FBRXpDLDJCQUZ5QyxHQUUvQjtBQUNWLGdDQUFRLFdBQVksU0FBUyxRQUFULEVBQW1CLFdBQW5CLENBQVosQ0FERTtBQUVWLGdDQUFRLFdBQVksU0FBUyxRQUFULEVBQW1CLFFBQW5CLENBQVosQ0FGRTtBQUdWLGlDQUFTO0FBSEMscUJBRitCOztBQU83Qyw0QkFBUSxPQUFSLElBQW1CLFNBQUssR0FBTCxDQUFVLFFBQVEsTUFBUixDQUFWLEVBQTJCLFFBQVEsTUFBUixDQUEzQixDQUFuQjtBQUNBLDJCQUFPLFFBQVAsSUFBbUIsT0FBbkI7QUFDSDtBQUNELHVCQUFPLE1BQVA7QUF0RkU7QUFBQTtBQXlGQSxzQkF6RkEsMEJBeUZnQixNQXpGaEI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUF5RndCLHNCQXpGeEIsbUZBeUZpQyxFQXpGakM7QUFBQSx1QkEwRkksU0FBSyxXQUFMLEVBMUZKO0FBQUE7QUFBQSx1QkEyRnFCLFNBQUssc0JBQUwsQ0FBNkIsU0FBSyxNQUFMLENBQWE7QUFDN0QsNEJBQVEsU0FBSyxRQUFMLENBQWUsTUFBZjtBQURxRCxpQkFBYixFQUVqRCxNQUZpRCxDQUE3QixDQTNGckI7QUFBQTtBQTJGRSx5QkEzRkY7QUE4RkUseUJBOUZGLEdBOEZjLFVBQVUsV0FBVixJQUF5QixJQTlGdkM7QUErRkUsc0JBL0ZGLEdBK0ZXO0FBQ1QsNEJBQVEsVUFBVSxNQUFWLENBREM7QUFFVCw0QkFBUSxVQUFVLE1BQVYsQ0FGQztBQUdULGlDQUFhLFNBSEo7QUFJVCxnQ0FBWSxTQUFLLE9BQUwsQ0FBYyxTQUFkO0FBSkgsaUJBL0ZYOztBQXFHRix1QkFBTyxNQUFQO0FBckdFO0FBQUE7QUF3R04sbUJBeEdNLHVCQXdHTyxNQXhHUCxFQXdHZSxNQXhHZixFQXdHdUI7QUFDekIsZ0JBQUksWUFBWSxTQUFVLE9BQU8sV0FBUCxDQUFWLElBQWlDLElBQWpEO0FBQ0EsbUJBQU87QUFDSCw2QkFBYSxTQURWO0FBRUgsNEJBQVksS0FBSyxPQUFMLENBQWMsU0FBZCxDQUZUO0FBR0gsd0JBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQUhMO0FBSUgsdUJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQUpKO0FBS0gsdUJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQUxKO0FBTUgsdUJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQU5KO0FBT0gsd0JBQVEsU0FQTDtBQVFILHdCQUFRLFNBUkw7QUFTSCx5QkFBUyxTQVROO0FBVUgseUJBQVMsU0FWTjtBQVdILHdCQUFRLFdBQVksT0FBTyxNQUFQLENBQVosQ0FYTDtBQVlILDBCQUFVLFNBWlA7QUFhSCw4QkFBYyxTQWJYO0FBY0gsMkJBQVcsU0FkUjtBQWVILDhCQUFjLFNBZlg7QUFnQkgsK0JBQWUsV0FBWSxPQUFPLFFBQVAsQ0FBWixDQWhCWjtBQWlCSCx3QkFBUTtBQWpCTCxhQUFQO0FBbUJILFNBN0hLO0FBK0hBLG9CQS9IQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQWdJSSxTQUFLLFdBQUwsRUFoSUo7QUFBQTtBQWlJRSwwQkFqSUYsR0FpSWUsU0FBSyxVQUFMLENBQWdCLElBQWhCLENBQXNCLEdBQXRCLENBaklmO0FBQUEsdUJBa0ltQixTQUFLLDBCQUFMLENBQWlDO0FBQ2xELGtDQUFjO0FBRG9DLGlCQUFqQyxDQWxJbkI7QUFBQTtBQWtJRSx3QkFsSUY7QUFxSUUsdUJBcklGLEdBcUlZLFNBQVMsTUFBVCxDQXJJWjtBQXNJRSxzQkF0SUYsR0FzSVcsRUF0SVg7O0FBdUlGLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksUUFBUSxNQUE1QixFQUFvQyxHQUFwQyxFQUF5QztBQUNqQywwQkFEaUMsR0FDeEIsUUFBUSxDQUFSLENBRHdCO0FBRWpDLDBCQUZpQyxHQUV4QixPQUFPLE1BQVAsRUFBZSxPQUFmLENBQXdCLEdBQXhCLEVBQTZCLEdBQTdCLENBRndCO0FBR2pDLDBCQUhpQyxHQUd4QixTQUFLLE9BQUwsQ0FBYSxNQUFiLENBSHdCOztBQUlyQywyQkFBTyxNQUFQLElBQWlCLFNBQUssV0FBTCxDQUFrQixNQUFsQixFQUEwQixNQUExQixDQUFqQjtBQUNIO0FBQ0QsdUJBQU8sTUFBUDtBQTdJRTtBQUFBO0FBZ0pBLG1CQWhKQSx1QkFnSmEsTUFoSmI7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkFpSkksU0FBSyxXQUFMLEVBakpKO0FBQUE7QUFrSkUsaUJBbEpGLEdBa0pNLFNBQUssTUFBTCxDQUFhLE1BQWIsQ0FsSk47QUFBQSx1QkFtSmlCLFNBQUssbUJBQUwsQ0FBMEI7QUFDekMsNEJBQVEsRUFBRSxJQUFGO0FBRGlDLGlCQUExQixDQW5KakI7QUFBQTtBQW1KRSxzQkFuSkY7O0FBc0pGLHVCQUFPLFNBQUssV0FBTCxDQUFrQixNQUFsQixFQUEwQixDQUExQixDQUFQO0FBdEpFO0FBQUE7QUF5SkEsbUJBekpBLHVCQXlKYSxNQXpKYjtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQXlKcUIsc0JBekpyQixtRkF5SjhCLEVBeko5QjtBQUFBLHVCQTBKSSxTQUFLLFdBQUwsRUExSko7QUFBQTtBQTJKRix1QkFBTyxTQUFLLHlCQUFMLENBQWdDLFNBQUssTUFBTCxDQUFhO0FBQ2hELDRCQUFRLFNBQUssUUFBTCxDQUFlLE1BQWY7QUFEd0MsaUJBQWIsRUFFcEMsTUFGb0MsQ0FBaEMsQ0FBUDtBQTNKRTtBQUFBO0FBZ0tBLG1CQWhLQSx1QkFnS2EsTUFoS2IsRUFnS3FCLElBaEtyQixFQWdLMkIsSUFoSzNCLEVBZ0tpQyxNQWhLakM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFnS3lDLHFCQWhLekMsbUZBZ0tpRCxTQWhLakQ7QUFnSzRELHNCQWhLNUQsbUZBZ0txRSxFQWhLckU7QUFBQSx1QkFpS0ksU0FBSyxXQUFMLEVBaktKO0FBQUE7QUFrS0UscUJBbEtGLEdBa0tVO0FBQ1IsNEJBQVEsU0FBSyxRQUFMLENBQWUsTUFBZixDQURBO0FBRVIsNEJBQVEsSUFGQTtBQUdSLDhCQUFVO0FBSEYsaUJBbEtWOztBQXVLRixvQkFBSSxRQUFRLE9BQVo7QUFDSSwwQkFBTSxPQUFOLElBQWlCLEtBQWpCO0FBREo7QUFHSSwwQkFBTSxZQUFOLElBQXNCLElBQXRCO0FBSEosaUJBdktFLE9BMkttQixTQUFLLHlCQUFMLENBQWdDLFNBQUssTUFBTCxDQUFhLEtBQWIsRUFBb0IsTUFBcEIsQ0FBaEMsQ0EzS25CO0FBQUE7QUEyS0Usd0JBM0tGOztBQTRLRix1QkFBTztBQUNILDRCQUFRLFFBREw7QUFFSCwwQkFBTSxTQUFTLElBQVQ7QUFGSCxpQkFBUDtBQTVLRTtBQUFBO0FBa0xBLG1CQWxMQSx1QkFrTGEsRUFsTGI7QUFBQTs7QUFBQTtBQUFBLHVCQW1MSSxTQUFLLFdBQUwsRUFuTEo7QUFBQTtBQW9MRix1QkFBTyxTQUFLLHNCQUFMLENBQTZCLEVBQUUsTUFBTSxFQUFSLEVBQTdCLENBQVA7QUFwTEU7QUFBQTtBQXVMQSxlQXZMQSxtQkF1TFMsSUF2TFQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUF1TGUsbUJBdkxmLG1GQXVMcUIsUUF2THJCO0FBdUwrQixzQkF2TC9CLG1GQXVMd0MsS0F2THhDO0FBdUwrQyxzQkF2TC9DLG1GQXVMd0QsRUF2THhEO0FBdUw0RCx1QkF2TDVELG1GQXVMc0UsU0F2THRFO0FBdUxpRixvQkF2TGpGLG1GQXVMd0YsU0F2THhGO0FBd0xFLG1CQXhMRixHQXdMUSxTQUFLLElBQUwsQ0FBVSxLQUFWLElBQW1CLEdBQW5CLEdBQXlCLFNBQUssYUFBTCxDQUFvQixJQUFwQixFQUEwQixNQUExQixDQXhMakM7QUF5TEUscUJBekxGLEdBeUxVLFNBQUssSUFBTCxDQUFXLE1BQVgsRUFBbUIsU0FBSyxhQUFMLENBQW9CLElBQXBCLENBQW5CLENBekxWOztBQTBMRixvQkFBSSxPQUFPLFFBQVgsRUFBcUI7QUFDakIsd0JBQUksT0FBTyxJQUFQLENBQWEsS0FBYixFQUFvQixNQUF4QjtBQUNJLCtCQUFPLE1BQU0sU0FBSyxTQUFMLENBQWdCLEtBQWhCLENBQWI7QUFESjtBQUVILGlCQUhELE1BR087QUFDSCx3QkFBSSxDQUFDLFNBQUssR0FBVjtBQUNJLDhCQUFNLElBQUksbUJBQUosQ0FBeUIsU0FBSyxFQUFMLEdBQVUsYUFBVixHQUEwQixTQUFLLEVBQS9CLEdBQW9DLG1DQUE3RCxDQUFOO0FBREoscUJBRUksS0FIRCxHQUdTLFNBQUssS0FBTCxHQUFjLFFBQWQsRUFIVDtBQUlDLHdCQUpELEdBSVEsUUFBUSxTQUFLLEdBQWIsR0FBbUIsU0FBSyxNQUpoQztBQUtDLDZCQUxELEdBS2EsU0FBSyxJQUFMLENBQVcsU0FBSyxNQUFMLENBQWEsSUFBYixDQUFYLEVBQStCLFNBQUssTUFBTCxDQUFhLFNBQUssTUFBbEIsQ0FBL0IsQ0FMYjs7QUFNSCwyQkFBTyxTQUFLLFNBQUwsQ0FBZ0IsU0FBSyxNQUFMLENBQWE7QUFDaEMsK0JBQU8sU0FBSyxNQURvQjtBQUVoQyxxQ0FBYSxVQUFVLFdBQVYsRUFGbUI7QUFHaEMsaUNBQVM7QUFIdUIscUJBQWIsRUFJcEIsS0FKb0IsQ0FBaEIsQ0FBUDtBQUtBLDhCQUFVO0FBQ04sd0NBQWdCLG1DQURWO0FBRU4sMENBQWtCLEtBQUs7QUFGakIscUJBQVY7QUFJSDtBQTVNQyx1QkE2TW1CLFNBQUssS0FBTCxDQUFZLEdBQVosRUFBaUIsTUFBakIsRUFBeUIsT0FBekIsRUFBa0MsSUFBbEMsQ0E3TW5CO0FBQUE7QUE2TUUsd0JBN01GO0FBQUEseUJBOE1FLE9BQU8sUUE5TVQ7QUFBQSxtQ0ErTU0sUUFBUSxRQS9NZDs7QUFnTk0sOEJBQUksU0FBUyxJQUFULEtBQWtCLElBQXRCO0FBQ0ksMkJBQU8sUUFBUDtBQURKO0FBQUE7QUFFSiw4QkFBTSxJQUFJLGFBQUosQ0FBbUIsU0FBSyxFQUFMLEdBQVUsR0FBVixHQUFnQixTQUFLLElBQUwsQ0FBVyxRQUFYLENBQW5DLENBQU47QUFGSTs7QUFJUiwyQkFBTyxRQUFQO0FBSlE7QUFoTk47QUFBQTtBQUFBLEtBQVY7O0FBd05BOztBQUVBLFFBQUksUUFBUTtBQUNSLGNBQU0sT0FERTtBQUVSLGdCQUFRLE9BRkE7QUFHUixxQkFBYSxJQUhMO0FBSVIscUJBQWEsSUFKTDtBQUtSLG1CQUFXLElBTEg7QUFNUixnQkFBUTtBQUNKLG9CQUFRLHFHQURKO0FBRUosbUJBQU87QUFDSCwwQkFBVSwyQkFEUCxFQUNvQztBQUN2QywyQkFBVztBQUZSLGFBRkg7QUFNSixtQkFBTyw2QkFOSDtBQU9KLG1CQUFPO0FBUEgsU0FOQTtBQWVSLGVBQU87QUFDSCxzQkFBVTtBQUNOLHVCQUFPLENBQ0gsUUFERyxFQUVILE9BRkcsRUFHSCxRQUhHLEVBSUgsT0FKRztBQURELGFBRFA7QUFTSCx1QkFBVztBQUNQLHdCQUFRLENBQ0osT0FESSxFQUVKLGFBRkksRUFHSixVQUhJLEVBSUosV0FKSSxFQUtKLGNBTEksRUFNSiwwQkFOSSxFQU9KLG9DQVBJLEVBUUosZ0JBUkksRUFTSixnQkFUSSxFQVVKLG9CQVZJLEVBV0osbUJBWEksRUFZSixpQkFaSSxFQWFKLHNCQWJJLEVBY0osb0JBZEksRUFlSixVQWZJO0FBREQ7QUFUUixTQWZDO0FBNENSLG1CQUFXO0FBQ1AsdUJBQVcsRUFBRSxNQUFNLFNBQVIsRUFBbUIsVUFBVSxTQUE3QixFQUF3QyxRQUFRLEtBQWhELEVBQXVELFNBQVMsS0FBaEUsRUFESjtBQUVQLHVCQUFXLEVBQUUsTUFBTSxTQUFSLEVBQW1CLFVBQVUsU0FBN0IsRUFBd0MsUUFBUSxLQUFoRCxFQUF1RCxTQUFTLEtBQWhFLEVBRko7QUFHUCx1QkFBVyxFQUFFLE1BQU0sU0FBUixFQUFtQixVQUFVLFNBQTdCLEVBQXdDLFFBQVEsS0FBaEQsRUFBdUQsU0FBUyxLQUFoRSxFQUhKO0FBSVAsdUJBQVcsRUFBRSxNQUFNLFNBQVIsRUFBbUIsVUFBVSxTQUE3QixFQUF3QyxRQUFRLEtBQWhELEVBQXVELFNBQVMsS0FBaEUsRUFKSjtBQUtQLHVCQUFXLEVBQUUsTUFBTSxTQUFSLEVBQW1CLFVBQVUsU0FBN0IsRUFBd0MsUUFBUSxLQUFoRCxFQUF1RCxTQUFTLEtBQWhFLEVBTEo7QUFNUCx1QkFBVyxFQUFFLE1BQU0sU0FBUixFQUFtQixVQUFVLFNBQTdCLEVBQXdDLFFBQVEsS0FBaEQsRUFBdUQsU0FBUyxLQUFoRTtBQU5KLFNBNUNIOztBQXFERixvQkFyREU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQXNEaUIsU0FBSyx5QkFBTCxFQXREakI7QUFBQTtBQXNEQSx3QkF0REE7QUF1REEsd0JBdkRBLEdBdURXLFNBQVMsUUFBVCxDQXZEWDtBQXdEQSxzQkF4REEsR0F3RFMsRUFBRSxRQUFRLFFBQVYsRUF4RFQ7O0FBeURKLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksU0FBSyxVQUFMLENBQWdCLE1BQXBDLEVBQTRDLEdBQTVDLEVBQWlEO0FBQ3pDLDRCQUR5QyxHQUM5QixTQUFLLFVBQUwsQ0FBZ0IsQ0FBaEIsQ0FEOEI7QUFFekMsMkJBRnlDLEdBRS9CO0FBQ1YsZ0NBQVEsU0FERTtBQUVWLGdDQUFRLFNBRkU7QUFHVixpQ0FBUztBQUhDLHFCQUYrQjs7QUFPN0Msd0JBQUksWUFBWSxTQUFTLFNBQVQsQ0FBaEI7QUFDSSxnQ0FBUSxNQUFSLElBQWtCLFNBQVMsU0FBVCxFQUFvQixRQUFwQixFQUE4QixRQUE5QixDQUFsQjtBQURKLHFCQUVBLElBQUksWUFBWSxTQUFTLFFBQVQsQ0FBaEI7QUFDSSxnQ0FBUSxNQUFSLElBQWtCLFNBQVMsUUFBVCxFQUFtQixRQUFuQixFQUE2QixRQUE3QixDQUFsQjtBQURKLHFCQUVBLFFBQVEsT0FBUixJQUFtQixTQUFLLEdBQUwsQ0FBVSxRQUFRLE1BQVIsQ0FBVixFQUEyQixRQUFRLE1BQVIsQ0FBM0IsQ0FBbkI7QUFDQSwyQkFBTyxRQUFQLElBQW1CLE9BQW5CO0FBQ0g7QUFDRCx1QkFBTyxNQUFQO0FBdkVJO0FBQUE7QUEwRUYsc0JBMUVFLDBCQTBFYyxNQTFFZDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQTBFc0Isc0JBMUV0QixtRkEwRStCLEVBMUUvQjtBQTJFQSxpQkEzRUEsR0EyRUksU0FBSyxNQUFMLENBQWEsTUFBYixDQTNFSjtBQUFBLHVCQTRFa0IsU0FBSyxjQUFMLENBQXFCLFNBQUssTUFBTCxDQUFhO0FBQ3BELGdDQUFZLEVBQUUsSUFBRjtBQUR3QyxpQkFBYixFQUV4QyxNQUZ3QyxDQUFyQixDQTVFbEI7QUFBQTtBQTRFQSx5QkE1RUE7QUErRUEseUJBL0VBLEdBK0VZLFNBQUssWUFBTCxFQS9FWjtBQWdGQSxvQkFoRkEsR0FnRk8sU0FoRlA7QUFpRkEsb0JBakZBLEdBaUZPLFNBakZQOztBQWtGSixvQkFBSSxVQUFVLFNBQWQ7QUFDSSwyQkFBTyxVQUFVLE1BQVYsQ0FBUDtBQURKLGlCQUVBLElBQUksVUFBVSxTQUFkO0FBQ0ksMkJBQU8sVUFBVSxNQUFWLENBQVA7QUFESixpQkFFSSxNQXRGQSxHQXNGUztBQUNULDRCQUFRLElBREM7QUFFVCw0QkFBUSxJQUZDO0FBR1QsaUNBQWEsU0FISjtBQUlULGdDQUFZLFNBQUssT0FBTCxDQUFjLFNBQWQ7QUFKSCxpQkF0RlQ7O0FBNEZKLG9CQUFJLE9BQU8sTUFBUCxDQUFKO0FBQ0ksMkJBQU8sTUFBUCxJQUFpQixTQUFLLE1BQUwsQ0FBYSxPQUFPLE1BQVAsQ0FBYixFQUE2QixDQUE3QixFQUFnQyxJQUFoQyxDQUFqQjtBQURKLGlCQUVBLElBQUksT0FBTyxNQUFQLENBQUo7QUFDSSwyQkFBTyxNQUFQLElBQWlCLFNBQUssTUFBTCxDQUFhLE9BQU8sTUFBUCxDQUFiLEVBQTZCLENBQTdCLENBQWpCO0FBREosaUJBRUEsT0FBTyxNQUFQO0FBaEdJO0FBQUE7QUFtR0YsbUJBbkdFLHVCQW1HVyxNQW5HWDtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBb0dpQixTQUFLLGVBQUwsQ0FBc0I7QUFDdkMsZ0NBQVksU0FBSyxRQUFMLENBQWUsTUFBZjtBQUQyQixpQkFBdEIsQ0FwR2pCO0FBQUE7QUFvR0Esd0JBcEdBO0FBdUdBLHNCQXZHQSxHQXVHUyxTQUFTLFFBQVQsQ0F2R1Q7QUF3R0EseUJBeEdBLEdBd0dZLFNBQUssWUFBTCxFQXhHWjs7QUF5R0osdUJBQU87QUFDSCxpQ0FBYSxTQURWO0FBRUgsZ0NBQVksU0FBSyxPQUFMLENBQWMsU0FBZCxDQUZUO0FBR0gsNEJBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQUhMO0FBSUgsMkJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQUpKO0FBS0gsMkJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQUxKO0FBTUgsMkJBQU8sV0FBWSxPQUFPLE1BQVAsQ0FBWixDQU5KO0FBT0gsNEJBQVEsU0FQTDtBQVFILDRCQUFRLFNBUkw7QUFTSCw2QkFBUyxTQVROO0FBVUgsNkJBQVMsU0FWTjtBQVdILDRCQUFRLFdBQVksT0FBTyxNQUFQLENBQVosQ0FYTDtBQVlILDhCQUFVLFNBWlA7QUFhSCxrQ0FBYyxTQWJYO0FBY0gsK0JBQVcsU0FkUjtBQWVILGtDQUFjLFNBZlg7QUFnQkgsbUNBQWUsV0FBWSxPQUFPLEtBQVAsQ0FBWixDQWhCWjtBQWlCSCw0QkFBUTtBQWpCTCxpQkFBUDtBQXpHSTtBQUFBO0FBOEhGLG1CQTlIRSx1QkE4SFcsTUE5SFg7QUFBQTtBQUFBO0FBQUE7O0FBOEhtQixrQkE5SG5CLG1GQThINEIsRUE5SDVCOztBQStISixtQkFBTyxTQUFLLGVBQUwsQ0FBc0IsU0FBSyxNQUFMLENBQWE7QUFDdEMsNEJBQVksU0FBSyxRQUFMLENBQWUsTUFBZjtBQUQwQixhQUFiLEVBRTFCLE1BRjBCLENBQXRCLENBQVA7QUEvSEk7QUFvSUYsbUJBcElFLHVCQW9JVyxNQXBJWCxFQW9JbUIsSUFwSW5CLEVBb0l5QixJQXBJekIsRUFvSStCLE1BcEkvQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBb0l1QyxxQkFwSXZDLG1GQW9JK0MsU0FwSS9DO0FBb0kwRCxzQkFwSTFELG1GQW9JbUUsRUFwSW5FO0FBcUlBLDJCQXJJQSxHQXFJYyxZQUFZLE1BQU0sUUFBTixFQXJJMUI7O0FBc0lKLCtCQUFlLGFBQWEsT0FBTyxRQUFQLEVBQTVCO0FBQ0kseUJBdklBLEdBdUlhLFFBQVEsS0FBVCxHQUFrQixHQUFsQixHQUF3QixHQXZJcEM7O0FBd0lKLCtCQUFlLGdCQUFnQixTQUEvQjtBQUNBLCtCQUFlLGVBQWUsU0FBSyxRQUFMLENBQWUsTUFBZixDQUE5QjtBQXpJSSx1QkEwSWlCLFNBQUssZ0JBQUwsQ0FBdUIsV0FBdkIsQ0ExSWpCO0FBQUE7QUEwSUEsd0JBMUlBOztBQTJJSix1QkFBTztBQUNILDRCQUFRLFFBREw7QUFFSCwwQkFBTSxTQUFTLElBQVQ7QUFGSCxpQkFBUDtBQTNJSTtBQUFBO0FBaUpGLG1CQWpKRSx1QkFpSlcsRUFqSlg7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFpSmUsa0JBakpmLG1GQWlKd0IsRUFqSnhCO0FBa0pBLHVCQWxKQSxHQWtKYyxTQUFTLEdBQUcsUUFBSCxFQWxKdkI7O0FBbUpKLGdCQUFJLGNBQWMsTUFBbEI7QUFDSSwrQkFBZSxlQUFlLE9BQU8sVUFBUCxDQUE5QjtBQURKLGFBRUEsT0FBTyxTQUFLLHNCQUFMLENBQTZCLFdBQTdCLENBQVA7QUFySkk7QUF3SkYsa0JBeEpFLHNCQXdKVSxFQXhKVjtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQXdKYyxrQkF4SmQsbUZBd0p1QixFQXhKdkI7QUF5SkEsdUJBekpBLEdBeUpjLFNBQVMsR0FBRyxRQUFILEVBekp2Qjs7QUEwSkosZ0JBQUksY0FBYyxNQUFsQjtBQUNJLCtCQUFlLGVBQWUsT0FBTyxVQUFQLENBQTlCO0FBREosYUFFQSxPQUFPLFNBQUssbUJBQUwsQ0FBMEIsV0FBMUIsQ0FBUDtBQTVKSTtBQStKUixhQS9KUSxtQkErSkM7QUFDTCxtQkFBTyxLQUFLLFlBQUwsRUFBUDtBQUNILFNBaktPO0FBbUtGLGVBbktFLG1CQW1LTyxJQW5LUDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQW1LYSxtQkFuS2IsbUZBbUttQixRQW5LbkI7QUFtSzZCLHNCQW5LN0IsbUZBbUtzQyxLQW5LdEM7QUFtSzZDLHNCQW5LN0MsbUZBbUtzRCxFQW5LdEQ7QUFtSzBELHVCQW5LMUQsbUZBbUtvRSxTQW5LcEU7QUFtSytFLG9CQW5LL0UsbUZBbUtzRixTQW5LdEY7QUFvS0EsbUJBcEtBLEdBb0tNLFNBQUssSUFBTCxDQUFVLEtBQVYsRUFBaUIsR0FBakIsQ0FwS047O0FBcUtKLG9CQUFJLE9BQU8sUUFBWCxFQUFxQjtBQUNqQiwyQkFBTyxNQUFNLFNBQUssT0FBWCxHQUFxQixHQUFyQixHQUEyQixJQUFsQztBQUNBLHdCQUFJLE9BQU8sSUFBUCxDQUFhLE1BQWIsRUFBcUIsTUFBekI7QUFDSSwrQkFBTyxNQUFNLFNBQUssU0FBTCxDQUFnQixNQUFoQixDQUFiO0FBREo7QUFFSCxpQkFKRCxNQUlPO0FBQ0MsZ0NBREQsR0FDZ0IsT0FBTyxNQUR2QixFQUMrQjs7QUFDOUIseUJBRkQsR0FFUyxTQUFLLEtBQUwsRUFGVDtBQUdDLHdCQUhELEdBR1EsWUFBWSxJQUhwQjs7QUFJSCw0QkFBUSxnQkFBZ0IsU0FBSyxNQUE3QjtBQUNBLDRCQUFRLGVBQWUsTUFBZixHQUF3QixFQUFoQztBQUNJLDBCQU5ELEdBTVUsU0FBSyxJQUFMLENBQVcsU0FBSyxNQUFMLENBQWEsU0FBSyxNQUFsQixDQUFYLEVBQXNDLE1BQXRDLENBTlY7QUFPQyw2QkFQRCxHQU9hLFNBQUssSUFBTCxDQUFXLFNBQUssTUFBTCxDQUFhLElBQWIsQ0FBWCxFQUErQixTQUFLLE1BQUwsQ0FBYSxNQUFiLENBQS9CLEVBQXFELEtBQXJELENBUGI7QUFRQywwQkFSRCxHQVFVLFVBQVUsU0FBVixHQUFzQixXQUF0QixHQUFvQyxNQUFNLFFBQU4sRUFSOUM7O0FBU0gsMkJBQU8sTUFBTSxJQUFOLEdBQWEsR0FBYixHQUFtQixJQUFuQixHQUEwQixHQUExQixHQUFnQyxNQUF2QztBQUNIO0FBbkxHLHVCQW9MaUIsU0FBSyxLQUFMLENBQVksR0FBWixFQUFpQixNQUFqQixFQUF5QixPQUF6QixFQUFrQyxJQUFsQyxDQXBMakI7QUFBQTtBQW9MQSx3QkFwTEE7O0FBcUxKLG9CQUFJLE9BQU8sU0FBWDtBQUNJLHdCQUFJLFVBQVUsUUFBZDtBQUNJLDhCQUFNLElBQUksYUFBSixDQUFtQixTQUFLLEVBQUwsR0FBVSxHQUFWLEdBQWdCLFNBQUssSUFBTCxDQUFXLFFBQVgsQ0FBbkMsQ0FBTjtBQURKO0FBREosaUJBR0EsT0FBTyxRQUFQO0FBeExJO0FBQUE7QUFBQSxLQUFaOztBQTRMQTs7QUFFQSxRQUFJLFdBQVcsT0FBUSxVQUFSLEVBQW9CO0FBQy9CLGNBQU0sVUFEeUI7QUFFL0IsZ0JBQVEsVUFGdUI7QUFHL0IscUJBQWEsSUFIa0I7QUFJL0IsZ0JBQVE7QUFDSixvQkFBUSxxR0FESjtBQUVKLG1CQUFPO0FBQ0gsMEJBQVUsZ0NBRFA7QUFFSCwyQkFBVztBQUZSLGFBRkg7QUFNSixtQkFBTyxzQkFOSDtBQU9KLG1CQUFPO0FBUEgsU0FKdUI7QUFhL0IsbUJBQVcsZ0JBYm9CO0FBYy9CLG1CQUFXO0FBQ1AsdUJBQVcsRUFBRSxNQUFNLFFBQVIsRUFBa0IsVUFBVSxTQUE1QixFQUF1QyxRQUFRLEtBQS9DLEVBQXNELFNBQVMsS0FBL0QsRUFBc0UsWUFBWSxDQUFsRixFQUFxRixVQUFVLFVBQS9GO0FBREo7QUFkb0IsS0FBcEIsQ0FBZjs7QUFtQkE7O0FBRUEsUUFBSSxZQUFZOztBQUVaLGNBQU0sV0FGTTtBQUdaLGdCQUFRLFdBSEk7QUFJWixxQkFBYSxDQUFFLElBQUYsRUFBUSxJQUFSLENBSkQ7QUFLWixxQkFBYSxJQUxEO0FBTVosZ0JBQVE7QUFDSixvQkFBUSxxR0FESjtBQUVKLG1CQUFPLDJCQUZIO0FBR0osbUJBQU8sdUJBSEg7QUFJSixtQkFBTztBQUpILFNBTkk7QUFZWixlQUFPO0FBQ0gsc0JBQVU7QUFDTix1QkFBTyxDQUNILHNCQURHLEVBRUgsYUFGRyxFQUdILGFBSEcsRUFJSCxRQUpHLEVBS0gsUUFMRztBQURELGFBRFA7QUFVSCx1QkFBVztBQUNQLHVCQUFPLENBQ0gsVUFERyxFQUVILGtCQUZHLEVBR0gsMkJBSEcsRUFJSCxlQUpHLEVBS0gsZUFMRyxFQU1ILHVCQU5HLEVBT0gsOEJBUEcsRUFRSCx5Q0FSRyxFQVNILDZCQVRHLEVBVUgseUJBVkcsRUFXSCxZQVhHLEVBWUgsV0FaRyxDQURBO0FBZVAsd0JBQVEsQ0FDSixlQURJLEVBRUoseUJBRkksRUFHSixpQkFISSxFQUlKLGdDQUpJLEVBS0osa0NBTEksRUFNSixpQkFOSSxFQU9KLDRCQVBJLEVBUUosWUFSSSxFQVNKLFdBVEksQ0FmRDtBQTBCUCwwQkFBVSxDQUNOLG9CQURNLEVBRU4sc0JBRk0sRUFHTixnQkFITTtBQTFCSDtBQVZSLFNBWks7QUF1RFosbUJBQVc7QUFDUCx1QkFBWSxFQUFFLE1BQU0sU0FBUixFQUFvQixVQUFVLFNBQTlCLEVBQTBDLFFBQVEsS0FBbEQsRUFBMEQsU0FBUyxLQUFuRSxFQURMLEVBQ2lGO0FBQ3hGLHVCQUFZLEVBQUUsTUFBTSxTQUFSLEVBQW9CLFVBQVUsU0FBOUIsRUFBMEMsUUFBUSxLQUFsRCxFQUEwRCxTQUFTLEtBQW5FLEVBRkw7QUFHUCx1QkFBWSxFQUFFLE1BQU0sU0FBUixFQUFvQixVQUFVLFNBQTlCLEVBQTBDLFFBQVEsS0FBbEQsRUFBMEQsU0FBUyxLQUFuRSxFQUhMO0FBSVAsdUJBQVksRUFBRSxNQUFNLFNBQVIsRUFBb0IsVUFBVSxTQUE5QixFQUEwQyxRQUFRLEtBQWxELEVBQTBELFNBQVMsS0FBbkUsRUFKTDtBQUtQLHVCQUFZLEVBQUUsTUFBTSxTQUFSLEVBQW9CLFVBQVUsU0FBOUIsRUFBMEMsUUFBUSxLQUFsRCxFQUEwRCxTQUFTLEtBQW5FLEVBTEw7QUFNUCx1QkFBWSxFQUFFLE1BQU0sU0FBUixFQUFvQixVQUFVLFNBQTlCLEVBQTBDLFFBQVEsS0FBbEQsRUFBMEQsU0FBUyxLQUFuRSxFQU5MO0FBT1AsdUJBQVksRUFBRSxNQUFNLFNBQVIsRUFBb0IsVUFBVSxTQUE5QixFQUEwQyxRQUFRLEtBQWxELEVBQTBELFNBQVMsS0FBbkUsRUFQTDtBQVFQLHVCQUFZLEVBQUUsTUFBTSxTQUFSLEVBQW9CLFVBQVUsU0FBOUIsRUFBMEMsUUFBUSxLQUFsRCxFQUEwRCxTQUFTLEtBQW5FLEVBUkw7QUFTUCx1QkFBWSxFQUFFLE1BQU0sU0FBUixFQUFvQixVQUFVLFNBQTlCLEVBQTBDLFFBQVEsS0FBbEQsRUFBMEQsU0FBUyxLQUFuRSxFQVRMO0FBVVAsdUJBQVksRUFBRSxNQUFNLFNBQVIsRUFBb0IsVUFBVSxTQUE5QixFQUEwQyxRQUFRLEtBQWxELEVBQTBELFNBQVMsS0FBbkUsRUFWTDtBQVdQLHVCQUFZLEVBQUUsTUFBTSxTQUFSLEVBQW9CLFVBQVUsU0FBOUIsRUFBMEMsUUFBUSxLQUFsRCxFQUEwRCxTQUFTLEtBQW5FLEVBWEw7QUFZUCx1QkFBWSxFQUFFLE1BQU0sU0FBUixFQUFvQixVQUFVLFNBQTlCLEVBQTBDLFFBQVEsS0FBbEQsRUFBMEQsU0FBUyxLQUFuRSxFQVpMO0FBYVAsd0JBQVksRUFBRSxNQUFNLFVBQVIsRUFBb0IsVUFBVSxVQUE5QixFQUEwQyxRQUFRLE1BQWxELEVBQTBELFNBQVMsS0FBbkUsRUFiTDtBQWNQLHVCQUFZLEVBQUUsTUFBTSxTQUFSLEVBQW9CLFVBQVUsU0FBOUIsRUFBMEMsUUFBUSxLQUFsRCxFQUEwRCxTQUFTLEtBQW5FLEVBZEw7QUFlUCx1QkFBWSxFQUFFLE1BQU0sU0FBUixFQUFvQixVQUFVLFNBQTlCLEVBQTBDLFFBQVEsS0FBbEQsRUFBMEQsU0FBUyxLQUFuRSxFQWZMO0FBZ0JQLHVCQUFZLEVBQUUsTUFBTSxTQUFSLEVBQW9CLFVBQVUsU0FBOUIsRUFBMEMsUUFBUSxLQUFsRCxFQUEwRCxTQUFTLEtBQW5FLEVBaEJMO0FBaUJQLHVCQUFZLEVBQUUsTUFBTSxTQUFSLEVBQW9CLFVBQVUsU0FBOUIsRUFBMEMsUUFBUSxLQUFsRCxFQUEwRCxTQUFTLEtBQW5FLEVBakJMO0FBa0JQLHVCQUFZLEVBQUUsTUFBTSxTQUFSLEVBQW9CLFVBQVUsU0FBOUIsRUFBMEMsUUFBUSxLQUFsRCxFQUEwRCxTQUFTLEtBQW5FLEVBbEJMO0FBbUJQLHVCQUFZLEVBQUUsTUFBTSxTQUFSLEVBQW9CLFVBQVUsU0FBOUIsRUFBMEMsUUFBUSxLQUFsRCxFQUEwRCxTQUFTLEtBQW5FLEVBbkJMO0FBb0JQLHVCQUFZLEVBQUUsTUFBTSxTQUFSLEVBQW9CLFVBQVUsU0FBOUIsRUFBMEMsUUFBUSxLQUFsRCxFQUEwRCxTQUFTLEtBQW5FLEVBcEJMO0FBcUJQLHVCQUFZLEVBQUUsTUFBTSxTQUFSLEVBQW9CLFVBQVUsU0FBOUIsRUFBMEMsUUFBUSxLQUFsRCxFQUEwRCxTQUFTLEtBQW5FLEVBckJMO0FBc0JQLHVCQUFZLEVBQUUsTUFBTSxTQUFSLEVBQW9CLFVBQVUsU0FBOUIsRUFBMEMsUUFBUSxLQUFsRCxFQUEwRCxTQUFTLEtBQW5FLEVBdEJMO0FBdUJQLHVCQUFZLEVBQUUsTUFBTSxTQUFSLEVBQW9CLFVBQVUsU0FBOUIsRUFBMEMsUUFBUSxLQUFsRCxFQUEwRCxTQUFTLEtBQW5FLEVBdkJMO0FBd0JQLHdCQUFZLEVBQUUsTUFBTSxVQUFSLEVBQW9CLFVBQVUsVUFBOUIsRUFBMEMsUUFBUSxNQUFsRCxFQUEwRCxTQUFTLEtBQW5FO0FBeEJMLFNBdkRDOztBQWtGTixvQkFsRk07QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBbUZhLFNBQUsseUJBQUwsRUFuRmI7QUFBQTtBQW1GSix3QkFuRkk7QUFvRkosc0JBcEZJLEdBb0ZLLEVBQUUsUUFBUSxRQUFWLEVBcEZMOztBQXFGUixxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFNBQUssVUFBTCxDQUFnQixNQUFwQyxFQUE0QyxHQUE1QyxFQUFpRDtBQUN6Qyw0QkFEeUMsR0FDOUIsU0FBSyxVQUFMLENBQWdCLENBQWhCLENBRDhCO0FBRXpDLDZCQUZ5QyxHQUU3QixTQUFTLFdBQVQsRUFGNkI7QUFHekMsMkJBSHlDLEdBRy9CO0FBQ1YsZ0NBQVEsU0FERTtBQUVWLGdDQUFRLFNBRkU7QUFHVixpQ0FBUztBQUhDLHFCQUgrQjs7QUFRN0Msd0JBQUksYUFBYSxRQUFqQjtBQUNJLGdDQUFRLE1BQVIsSUFBa0IsV0FBWSxTQUFTLFNBQVQsQ0FBWixDQUFsQjtBQURKLHFCQUVJLFFBVnlDLEdBVTlCLFlBQVksV0FWa0I7O0FBVzdDLHdCQUFJLFlBQVksUUFBaEI7QUFDSSxnQ0FBUSxNQUFSLElBQWtCLFdBQVksU0FBUyxRQUFULENBQVosQ0FBbEI7QUFESixxQkFFQSxRQUFRLE9BQVIsSUFBbUIsU0FBSyxHQUFMLENBQVUsUUFBUSxNQUFSLENBQVYsRUFBMkIsUUFBUSxNQUFSLENBQTNCLENBQW5CO0FBQ0EsMkJBQU8sUUFBUCxJQUFtQixPQUFuQjtBQUNIO0FBQ0QsdUJBQU8sTUFBUDtBQXJHUTtBQUFBO0FBd0dOLHNCQXhHTSwwQkF3R1UsTUF4R1Y7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBd0drQixzQkF4R2xCLG1GQXdHMkIsRUF4RzNCO0FBQUEsdUJBeUdlLFNBQUssbUJBQUwsQ0FBMEIsTUFBMUIsQ0F6R2Y7QUFBQTtBQXlHSix5QkF6R0k7QUEwR0oseUJBMUdJLEdBMEdRLFNBQUssWUFBTCxFQTFHUjtBQTJHSixzQkEzR0ksR0EyR0s7QUFDVCw0QkFBUSxFQURDO0FBRVQsNEJBQVEsRUFGQztBQUdULGlDQUFhLFNBSEo7QUFJVCxnQ0FBWSxTQUFLLE9BQUwsQ0FBYyxTQUFkO0FBSkgsaUJBM0dMO0FBaUhKLHFCQWpISSxHQWlISSxDQUFFLE1BQUYsRUFBVSxNQUFWLENBakhKOztBQWtIUixxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLE1BQU0sTUFBMUIsRUFBa0MsR0FBbEMsRUFBdUM7QUFDL0Isd0JBRCtCLEdBQ3hCLE1BQU0sQ0FBTixDQUR3QjtBQUUvQiwwQkFGK0IsR0FFdEIsVUFBVSxJQUFWLENBRnNCOztBQUduQyx5QkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLE9BQU8sTUFBM0IsRUFBbUMsR0FBbkMsRUFBd0M7QUFDaEMsNkJBRGdDLEdBQ3hCLE9BQU8sQ0FBUCxDQUR3QjtBQUVoQyw2QkFGZ0MsR0FFeEIsV0FBWSxNQUFNLENBQU4sQ0FBWixDQUZ3QjtBQUdoQyw4QkFIZ0MsR0FHdkIsV0FBWSxNQUFNLENBQU4sQ0FBWixDQUh1Qjs7QUFJcEMsK0JBQU8sSUFBUCxFQUFhLElBQWIsQ0FBbUIsQ0FBRSxLQUFGLEVBQVMsTUFBVCxDQUFuQjtBQUNIO0FBQ0o7QUFDRCx1QkFBTyxNQUFQO0FBNUhRO0FBQUE7QUErSE4sbUJBL0hNLHVCQStITyxNQS9IUDtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQWdJVyxTQUFLLGVBQUwsRUFoSVg7QUFBQTtBQWdJSixzQkFoSUk7QUFpSUoseUJBaklJLEdBaUlRLE9BQU8sV0FBUCxJQUFzQixJQWpJOUI7O0FBa0lSLHVCQUFPO0FBQ0gsaUNBQWEsU0FEVjtBQUVILGdDQUFZLFNBQUssT0FBTCxDQUFjLFNBQWQsQ0FGVDtBQUdILDRCQUFRLFdBQVksT0FBTyxNQUFQLENBQVosQ0FITDtBQUlILDJCQUFPLFdBQVksT0FBTyxLQUFQLENBQVosQ0FKSjtBQUtILDJCQUFPLFdBQVksT0FBTyxLQUFQLENBQVosQ0FMSjtBQU1ILDJCQUFPLFdBQVksT0FBTyxLQUFQLENBQVosQ0FOSjtBQU9ILDRCQUFRLFNBUEw7QUFRSCw0QkFBUSxTQVJMO0FBU0gsNkJBQVMsU0FUTjtBQVVILDZCQUFTLFNBVk47QUFXSCw0QkFBUSxXQUFZLE9BQU8sTUFBUCxDQUFaLENBWEw7QUFZSCw4QkFBVSxTQVpQO0FBYUgsa0NBQWMsU0FiWDtBQWNILCtCQUFXLFNBZFI7QUFlSCxrQ0FBYyxTQWZYO0FBZ0JILG1DQUFlLFdBQVksT0FBTyxRQUFQLENBQVosQ0FoQlo7QUFpQkgsNEJBQVE7QUFqQkwsaUJBQVA7QUFsSVE7QUFBQTtBQXVKTixtQkF2Sk0sdUJBdUpPLE1BdkpQO0FBQUE7QUFBQTtBQUFBOztBQXVKZSxrQkF2SmYsbUZBdUp3QixFQXZKeEI7O0FBd0pSLG1CQUFPLFNBQUssZUFBTCxDQUFzQixNQUF0QixDQUFQO0FBeEpRO0FBMkpOLG1CQTNKTSx1QkEySk8sTUEzSlAsRUEySmUsSUEzSmYsRUEySnFCLElBM0pyQixFQTJKMkIsTUEzSjNCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBMkptQyxxQkEzSm5DLG1GQTJKMkMsU0EzSjNDO0FBMkpzRCxzQkEzSnRELG1GQTJKK0QsRUEzSi9EO0FBNEpKLHNCQTVKSSxHQTRKSyxFQTVKTDtBQTZKSixxQkE3SkksR0E2Skk7QUFDUiw0QkFBUSxTQUFLLFFBQUwsQ0FBZSxNQUFmO0FBREEsaUJBN0pKOztBQWdLUixvQkFBSSxRQUFRLFFBQVosRUFBc0I7QUFDZCw4QkFEYyxHQUNELE9BQU8sR0FBUCxHQUFhLElBRFo7O0FBRWxCLDBCQUFNLFlBQU4sSUFBc0IsVUFBdEI7QUFDSSwyQkFIYyxHQUdKLFFBQVEsS0FBVCxHQUFtQixhQUFhLEdBQWhDLEdBQXVDLEVBSGxDOztBQUlsQiwwQkFBTSxVQUFTLFFBQWYsSUFBMkIsTUFBM0I7QUFDSCxpQkFMRCxNQUtPO0FBQ0gsMEJBQU0sWUFBTixJQUFzQixJQUF0QjtBQUNBLDBCQUFNLE1BQU4sSUFBZ0IsS0FBaEI7QUFDQSwwQkFBTSxRQUFOLElBQWtCLE1BQWxCO0FBQ0g7QUF6S08sdUJBMEthLFNBQUsseUJBQUwsQ0FBZ0MsU0FBSyxNQUFMLENBQWEsS0FBYixFQUFvQixNQUFwQixDQUFoQyxDQTFLYjtBQUFBO0FBMEtKLHdCQTFLSTs7QUEyS1IsdUJBQU87QUFDSCw0QkFBUSxRQURMO0FBRUgsMEJBQU0sU0FBUyxJQUFULEVBQWUsUUFBZjtBQUZILGlCQUFQO0FBM0tRO0FBQUE7QUFpTE4sbUJBakxNLHVCQWlMTyxFQWpMUDtBQUFBOztBQWtMUixtQkFBTyxTQUFLLDZCQUFMLENBQW9DLEVBQUUsTUFBTSxFQUFSLEVBQXBDLENBQVA7QUFsTFE7QUFxTE4sZUFyTE0sbUJBcUxHLElBckxIO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQXFMUyxtQkFyTFQsbUZBcUxlLFFBckxmO0FBcUx5QixzQkFyTHpCLG1GQXFMa0MsS0FyTGxDO0FBcUx5QyxzQkFyTHpDLG1GQXFMa0QsRUFyTGxEO0FBcUxzRCx1QkFyTHRELG1GQXFMZ0UsU0FyTGhFO0FBcUwyRSxvQkFyTDNFLG1GQXFMa0YsU0FyTGxGO0FBc0xKLG1CQXRMSSxHQXNMRSxTQUFLLElBQUwsQ0FBVSxLQUFWLElBQW1CLEdBQW5CLEdBQXlCLFNBQUssYUFBTCxDQUFvQixJQUFwQixFQUEwQixNQUExQixDQXRMM0I7QUF1TEoscUJBdkxJLEdBdUxJLFNBQUssSUFBTCxDQUFXLE1BQVgsRUFBbUIsU0FBSyxhQUFMLENBQW9CLElBQXBCLENBQW5CLENBdkxKOztBQXdMUixvQkFBSSxPQUFPLFFBQVgsRUFBcUI7QUFDakIsd0JBQUksT0FBTyxJQUFQLENBQWEsS0FBYixFQUFvQixNQUF4QjtBQUNJLCtCQUFPLE1BQU0sU0FBSyxTQUFMLENBQWdCLEtBQWhCLENBQWI7QUFESjtBQUVILGlCQUhELE1BR087QUFDQyx5QkFERCxHQUNTLFNBQUssS0FBTCxHQUFjLFFBQWQsRUFEVDtBQUVDLDBCQUZELEdBRVUsQ0FGVjs7QUFHSCx3QkFBSSxPQUFPLElBQVAsQ0FBYSxLQUFiLEVBQW9CLE1BQXhCLEVBQWdDO0FBQzVCLCtCQUFPLFNBQUssU0FBTCxDQUFnQixTQUFLLE9BQUwsQ0FBYyxLQUFkLENBQWhCLENBQVA7QUFDQSxpQ0FBUyxLQUFLLE1BQWQ7QUFDSDtBQUNHLHdCQVBELEdBT1EsUUFBUSxHQUFSLElBQWUsUUFBUSxFQUF2QixDQVBSOztBQVFILDhCQUFVO0FBQ04sd0NBQWdCLG1DQURWO0FBRU4sMENBQWtCLE1BRlo7QUFHTixzQ0FBYyxTQUFLLE1BSGI7QUFJTix3Q0FBZ0IsS0FKVjtBQUtOLDRDQUFvQixTQUFLLElBQUwsQ0FBVyxTQUFLLE1BQUwsQ0FBYSxJQUFiLENBQVgsRUFBK0IsU0FBSyxNQUFMLENBQWEsU0FBSyxNQUFsQixDQUEvQjtBQUxkLHFCQUFWO0FBT0g7QUExTU8sdUJBMk1hLFNBQUssS0FBTCxDQUFZLEdBQVosRUFBaUIsTUFBakIsRUFBeUIsT0FBekIsRUFBa0MsSUFBbEMsQ0EzTWI7QUFBQTtBQTJNSix3QkEzTUk7O0FBNE1SLG9CQUFJLE9BQU8sUUFBWDtBQUNJLDJCQUFPLFFBQVA7QUFESjtBQUFBLDhCQUVJLGFBQWEsUUFGakI7O0FBR0ksbUNBQUksU0FBUyxTQUFULENBQUo7QUFDSSwrQkFBTyxRQUFQO0FBREo7QUFFSiw4QkFBTSxJQUFJLGFBQUosQ0FBbUIsU0FBSyxFQUFMLEdBQVUsR0FBVixHQUFnQixTQUFLLElBQUwsQ0FBVyxRQUFYLENBQW5DLENBQU47QUFGSTtBQUhKO0FBNU1RO0FBQUE7QUFBQSxLQUFoQjs7QUFxTkE7O0FBRUEsUUFBSSxZQUFZOztBQUVaLGNBQU0sV0FGTTtBQUdaLGdCQUFRLFdBSEk7QUFJWixxQkFBYSxJQUpEO0FBS1oscUJBQWEsSUFMRDtBQU1aLGdCQUFRO0FBQ0osb0JBQVEscUdBREo7QUFFSixtQkFBTywwQ0FGSDtBQUdKLG1CQUFPLDZCQUhIO0FBSUosbUJBQU8sQ0FDSCxrQ0FERyxFQUVILGlDQUZHO0FBSkgsU0FOSTtBQWVaLGVBQU87QUFDSCxzQkFBVTtBQUNOLHVCQUFPLENBQ0gsY0FERyxFQUVILGtCQUZHLEVBR0gsb0JBSEc7QUFERCxhQURQO0FBUUgsdUJBQVc7QUFDUCx3QkFBUSxDQUNKLGVBREksRUFFSix5QkFGSSxFQUdKLG1CQUhJLEVBSUosb0JBSkksRUFLSixXQUxJLEVBTUosWUFOSSxFQU9KLGtCQVBJLEVBUUosbUJBUkksRUFTSiw0QkFUSSxFQVVKLDJCQVZJO0FBREQ7QUFSUixTQWZLO0FBc0NaLG1CQUFXO0FBQ1AsdUJBQVcsRUFBRSxNQUFNLFNBQVIsRUFBbUIsVUFBVSxTQUE3QixFQUF3QyxRQUFRLEtBQWhELEVBQXVELFNBQVMsS0FBaEUsRUFESjtBQUVQLHVCQUFXLEVBQUUsTUFBTSxTQUFSLEVBQW1CLFVBQVUsU0FBN0IsRUFBd0MsUUFBUSxLQUFoRCxFQUF1RCxTQUFTLEtBQWhFLEVBRko7QUFHUCx1QkFBVyxFQUFFLE1BQU0sU0FBUixFQUFtQixVQUFVLFNBQTdCLEVBQXdDLFFBQVEsS0FBaEQsRUFBdUQsU0FBUyxLQUFoRSxFQUhKO0FBSVAsdUJBQVcsRUFBRSxNQUFNLFNBQVIsRUFBbUIsVUFBVSxTQUE3QixFQUF3QyxRQUFRLEtBQWhELEVBQXVELFNBQVMsS0FBaEUsRUFKSjtBQUtQLHVCQUFXLEVBQUUsTUFBTSxTQUFSLEVBQW1CLFVBQVUsU0FBN0IsRUFBd0MsUUFBUSxLQUFoRCxFQUF1RCxTQUFTLEtBQWhFO0FBTEosU0F0Q0M7O0FBOENOLG9CQTlDTSx3QkE4Q1EsTUE5Q1I7QUFBQTs7QUErQ1IsbUJBQU8sU0FBSyxvQkFBTCxDQUEyQjtBQUM5QixzQkFBTSxTQUFLLFFBQUwsQ0FBZSxNQUFmO0FBRHdCLGFBQTNCLENBQVA7QUEvQ1E7QUFvRE4sc0JBcERNLDBCQW9EVSxNQXBEVjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQXFEYyxTQUFLLG9CQUFMLENBQTJCO0FBQzdDLDBCQUFNLFNBQUssUUFBTCxDQUFlLE1BQWY7QUFEdUMsaUJBQTNCLENBckRkO0FBQUE7QUFxREoseUJBckRJO0FBd0RKLHlCQXhESSxHQXdEUSxTQUFLLFlBQUwsRUF4RFI7QUF5REosc0JBekRJLEdBeURLO0FBQ1QsNEJBQVEsRUFEQztBQUVULDRCQUFRLEVBRkM7QUFHVCxpQ0FBYSxTQUhKO0FBSVQsZ0NBQVksU0FBSyxPQUFMLENBQWMsU0FBZDtBQUpILGlCQXpETDtBQStESixxQkEvREksR0ErREksQ0FBRSxNQUFGLEVBQVUsTUFBVixDQS9ESjs7QUFnRVIscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxNQUFNLE1BQTFCLEVBQWtDLEdBQWxDLEVBQXVDO0FBQy9CLHdCQUQrQixHQUN4QixNQUFNLENBQU4sQ0FEd0I7QUFFL0IsMEJBRitCLEdBRXRCLFVBQVUsSUFBVixDQUZzQjs7QUFHbkMseUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxPQUFPLE1BQTNCLEVBQW1DLEdBQW5DLEVBQXdDO0FBQ2hDLDZCQURnQyxHQUN4QixPQUFPLENBQVAsQ0FEd0I7QUFFaEMsNkJBRmdDLEdBRXhCLFdBQVksTUFBTSxDQUFOLENBQVosQ0FGd0I7QUFHaEMsOEJBSGdDLEdBR3ZCLFdBQVksTUFBTSxDQUFOLENBQVosQ0FIdUI7O0FBSXBDLCtCQUFPLElBQVAsRUFBYSxJQUFiLENBQW1CLENBQUUsS0FBRixFQUFTLE1BQVQsQ0FBbkI7QUFDSDtBQUNKO0FBQ0QsdUJBQU8sTUFBUDtBQTFFUTtBQUFBO0FBNkVaLG1CQTdFWSx1QkE2RUMsTUE3RUQsRUE2RVMsTUE3RVQsRUE2RWlCO0FBQ3pCO0FBQ0EsZ0JBQUksWUFBWSxLQUFLLFlBQUwsRUFBaEI7QUFDQSxtQkFBTztBQUNILDZCQUFhLFNBRFY7QUFFSCw0QkFBWSxLQUFLLE9BQUwsQ0FBYyxTQUFkLENBRlQ7QUFHSCx3QkFBUSxXQUFZLE9BQU8sTUFBUCxDQUFaLENBSEw7QUFJSCx1QkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBSko7QUFLSCx1QkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBTEo7QUFNSCx1QkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBTko7QUFPSCx3QkFBUSxXQUFZLE9BQU8sTUFBUCxDQUFaLENBUEw7QUFRSCx3QkFBUSxTQVJMO0FBU0gseUJBQVMsU0FUTjtBQVVILHlCQUFTLFNBVk47QUFXSCx3QkFBUSxXQUFZLE9BQU8sTUFBUCxDQUFaLENBWEw7QUFZSCwwQkFBVSxTQVpQO0FBYUgsOEJBQWMsU0FiWDtBQWNILDJCQUFXLFNBZFI7QUFlSCw4QkFBYyxTQWZYO0FBZ0JILCtCQUFlLFdBQVksT0FBTyxRQUFQLENBQVosQ0FoQlo7QUFpQkgsd0JBQVE7QUFqQkwsYUFBUDtBQW1CSCxTQW5HVztBQXFHTixtQkFyR00sdUJBcUdPLE1BckdQO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBc0dKLGlCQXRHSSxHQXNHQSxTQUFLLE1BQUwsQ0FBYSxNQUFiLENBdEdBO0FBQUEsdUJBdUdXLFNBQUssaUJBQUwsQ0FBd0I7QUFDdkMsMEJBQU0sRUFBRSxJQUFGO0FBRGlDLGlCQUF4QixDQXZHWDtBQUFBO0FBdUdKLHNCQXZHSTs7QUEwR1IsdUJBQU8sU0FBSyxXQUFMLENBQWtCLE1BQWxCLEVBQTBCLENBQTFCLENBQVA7QUExR1E7QUFBQTtBQTZHTixtQkE3R00sdUJBNkdPLE1BN0dQO0FBQUE7QUFBQTtBQUFBOztBQTZHZSxrQkE3R2YsbUZBNkd3QixFQTdHeEI7O0FBOEdSLG1CQUFPLFNBQUssdUJBQUwsQ0FBOEIsU0FBSyxNQUFMLENBQWE7QUFDOUMsc0JBQU0sU0FBSyxRQUFMLENBQWUsTUFBZjtBQUR3QyxhQUFiLEVBRWxDLE1BRmtDLENBQTlCLENBQVA7QUE5R1E7QUFtSE4sbUJBbkhNLHVCQW1ITyxNQW5IUCxFQW1IZSxJQW5IZixFQW1IcUIsSUFuSHJCLEVBbUgyQixNQW5IM0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBbUhtQyxpQkFuSG5DLG1GQW1IMkMsU0FuSDNDO0FBbUhzRCxrQkFuSHRELG1GQW1IK0QsRUFuSC9EO0FBb0hKLGlCQXBISSxHQW9ISSxFQUFFLE1BQU0sU0FBSyxRQUFMLENBQWUsTUFBZixDQUFSLEVBcEhKO0FBcUhKLGtCQXJISSxHQXFISyxrQkFBa0IsU0FBSyxVQUFMLENBQWlCLElBQWpCLENBckh2Qjs7QUFzSFIsZ0JBQUksUUFBUSxRQUFaLEVBQXNCO0FBQ2xCLHNCQUFNLFVBQU4sSUFBb0IsTUFBcEI7QUFDQSwwQkFBVSxRQUFWO0FBQ0gsYUFIRCxNQUdPO0FBQ0gsc0JBQU0sT0FBTixJQUFpQixLQUFqQjtBQUNBLHNCQUFNLFFBQU4sSUFBa0IsTUFBbEI7QUFDSDtBQUNELG1CQUFPLFNBQUssTUFBTCxFQUFjLFNBQUssTUFBTCxDQUFhLEtBQWIsRUFBb0IsTUFBcEIsQ0FBZCxDQUFQO0FBN0hRO0FBZ0lOLG1CQWhJTSx1QkFnSU8sRUFoSVA7QUFBQTs7QUFpSVIsbUJBQU8sU0FBSyx3QkFBTCxDQUErQixFQUFFLE1BQU0sRUFBUixFQUEvQixDQUFQO0FBaklRO0FBb0laLGVBcElZLG1CQW9JSCxJQXBJRyxFQW9Jd0Y7QUFBQSxnQkFBckYsSUFBcUYsdUVBQTlFLFFBQThFO0FBQUEsZ0JBQXBFLE1BQW9FLHVFQUEzRCxLQUEyRDtBQUFBLGdCQUFwRCxNQUFvRCx1RUFBM0MsRUFBMkM7QUFBQSxnQkFBdkMsT0FBdUMsdUVBQTdCLFNBQTZCO0FBQUEsZ0JBQWxCLElBQWtCLHVFQUFYLFNBQVc7O0FBQ2hHO0FBQ0EsZ0JBQUksTUFBTSxLQUFLLElBQUwsQ0FBVSxLQUFWLElBQW1CLEdBQW5CLEdBQXlCLEtBQUssYUFBTCxDQUFvQixJQUFwQixFQUEwQixNQUExQixDQUFuQztBQUNBLGdCQUFJLFFBQVEsS0FBSyxJQUFMLENBQVcsTUFBWCxFQUFtQixLQUFLLGFBQUwsQ0FBb0IsSUFBcEIsQ0FBbkIsQ0FBWjtBQUNBLGdCQUFJLFFBQVEsUUFBWixFQUFzQjtBQUNsQixvQkFBSSxPQUFPLElBQVAsQ0FBYSxLQUFiLEVBQW9CLE1BQXhCLEVBQ0ksT0FBTyxNQUFNLEtBQUssU0FBTCxDQUFnQixLQUFoQixDQUFiO0FBQ1AsYUFIRCxNQUdPO0FBQ0gsb0JBQUksUUFBUSxLQUFLLEtBQUwsRUFBWjtBQUNBLHVCQUFPLEtBQUssU0FBTCxDQUFnQixLQUFLLE1BQUwsQ0FBYSxFQUFFLFNBQVMsS0FBWCxFQUFiLEVBQWlDLEtBQWpDLENBQWhCLENBQVA7QUFDQSxvQkFBSSxPQUFPLEtBQUssR0FBTCxHQUFXLEdBQVgsR0FBaUIsS0FBSyxNQUF0QixHQUErQixHQUEvQixHQUFxQyxLQUFLLFFBQXJEO0FBQ0Esb0JBQUksWUFBWSxLQUFLLGNBQUwsQ0FBcUIsSUFBckIsQ0FBaEI7QUFDQSwwQkFBVTtBQUNOLG9DQUFnQixtQ0FEVjtBQUVOLHNDQUFrQixLQUFLLE1BRmpCO0FBR04scUNBQWlCLFdBQVc7QUFIdEIsaUJBQVY7QUFLSDtBQUNELG1CQUFPLEtBQUssS0FBTCxDQUFZLEdBQVosRUFBaUIsTUFBakIsRUFBeUIsT0FBekIsRUFBa0MsSUFBbEMsQ0FBUDtBQUNIO0FBdkpXLEtBQWhCOztBQTBKQTs7QUFFQSxRQUFJLFNBQVM7O0FBRVQsY0FBTSxRQUZHO0FBR1QsZ0JBQVEsUUFIQztBQUlULHFCQUFhLElBSko7QUFLVCxxQkFBYSxDQUFFLElBQUYsRUFBUSxJQUFSLEVBQWMsSUFBZCxFQUFvQixJQUFwQixDQUxKLEVBS2dDO0FBQ3pDLDJCQUFtQixJQU5WO0FBT1QsZ0JBQVE7QUFDSixvQkFBUSxxR0FESjtBQUVKLG1CQUFPLHdCQUZIO0FBR0osbUJBQU8sb0JBSEg7QUFJSixtQkFBTztBQUpILFNBUEM7QUFhVCxlQUFPO0FBQ0gsdUJBQVc7QUFDUCx1QkFBTyxDQUNILGlEQURHLEVBRUgsZ0NBRkcsRUFHSCw0QkFIRztBQURBLGFBRFI7QUFRSCxvQkFBUTtBQUNKLHdCQUFRLENBQ0osU0FESSxFQUVKLFdBRkksRUFHSixjQUhJLEVBSUosUUFKSSxFQUtKLGNBTEksRUFNSiwwQkFOSTtBQURKO0FBUkwsU0FiRTtBQWdDVCxtQkFBVztBQUNQLHVCQUFXLEVBQUUsTUFBTSxTQUFSLEVBQW1CLFVBQVUsU0FBN0IsRUFBd0MsUUFBUSxLQUFoRCxFQUF1RCxTQUFTLEtBQWhFLEVBREo7QUFFUCx1QkFBVyxFQUFFLE1BQU0sU0FBUixFQUFtQixVQUFVLFNBQTdCLEVBQXdDLFFBQVEsS0FBaEQsRUFBdUQsU0FBUyxLQUFoRSxFQUZKO0FBR1Asd0JBQVksRUFBRSxNQUFNLFVBQVIsRUFBb0IsVUFBVSxVQUE5QixFQUEwQyxRQUFRLE1BQWxELEVBQTBELFNBQVMsS0FBbkUsRUFITDtBQUlQLHVCQUFXLEVBQUUsTUFBTSxTQUFSLEVBQW1CLFVBQVUsU0FBN0IsRUFBd0MsUUFBUSxLQUFoRCxFQUF1RCxTQUFTLEtBQWhFLEVBSko7QUFLUCx1QkFBVyxFQUFFLE1BQU0sU0FBUixFQUFtQixVQUFVLFNBQTdCLEVBQXdDLFFBQVEsS0FBaEQsRUFBdUQsU0FBUyxLQUFoRSxFQUxKO0FBTVAsdUJBQVcsRUFBRSxNQUFNLFNBQVIsRUFBbUIsVUFBVSxTQUE3QixFQUF3QyxRQUFRLEtBQWhELEVBQXVELFNBQVMsS0FBaEUsRUFOSjtBQU9QLHdCQUFZLEVBQUUsTUFBTSxVQUFSLEVBQW9CLFVBQVUsVUFBOUIsRUFBMEMsUUFBUSxNQUFsRCxFQUEwRCxTQUFTLEtBQW5FO0FBUEwsU0FoQ0Y7O0FBMENILG9CQTFDRztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBMkNELDBCQTNDQyxHQTJDWSxFQTNDWjs7QUE0Q0wscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxTQUFLLFVBQUwsQ0FBZ0IsTUFBcEMsRUFBNEMsR0FBNUMsRUFBaUQ7QUFDekMsNEJBRHlDLEdBQzlCLFNBQUssVUFBTCxDQUFnQixDQUFoQixFQUFtQixXQUFuQixFQUQ4Qjs7QUFFN0MsK0JBQVcsSUFBWCxDQUFpQixRQUFqQjtBQUNIO0FBL0NJLHVCQWdEZ0IsU0FBSyxlQUFMLENBQXNCO0FBQ3ZDLGtDQUFjLFdBQVcsSUFBWCxDQUFpQixHQUFqQjtBQUR5QixpQkFBdEIsQ0FoRGhCO0FBQUE7QUFnREQsd0JBaERDO0FBbURELHNCQW5EQyxHQW1EUSxFQUFFLFFBQVEsUUFBVixFQW5EUjs7QUFvREwscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxTQUFTLE1BQTdCLEVBQXFDLEdBQXJDLEVBQTBDO0FBQ2xDLDJCQURrQyxHQUN4QixTQUFTLENBQVQsQ0FEd0I7QUFFbEMsOEJBRmtDLEdBRXZCLFFBQVEsVUFBUixFQUFvQixNQUFwQixDQUZ1Qjs7QUFHdEMsaUNBQVcsV0FBUyxXQUFULEVBQVg7QUFDSSwyQkFKa0MsR0FJeEI7QUFDVixnQ0FBUSxRQUFRLFdBQVIsQ0FERTtBQUVWLGdDQUFRLFFBQVEsU0FBUixJQUFxQixRQUFRLFVBQVIsQ0FBckIsR0FBMkMsUUFBUSxhQUFSLENBRnpDO0FBR1YsaUNBQVM7QUFIQyxxQkFKd0I7O0FBU3RDLDRCQUFRLE9BQVIsSUFBbUIsU0FBSyxHQUFMLENBQVUsUUFBUSxNQUFSLENBQVYsRUFBMkIsUUFBUSxNQUFSLENBQTNCLENBQW5CO0FBQ0EsMkJBQU8sVUFBUCxJQUFtQixPQUFuQjtBQUNIO0FBQ0QsdUJBQU8sTUFBUDtBQWhFSztBQUFBO0FBbUVILHNCQW5FRywwQkFtRWEsTUFuRWI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFtRXFCLHNCQW5FckIsbUZBbUU4QixFQW5FOUI7QUFvRUQsaUJBcEVDLEdBb0VHLFNBQUssTUFBTCxDQUFhLE1BQWIsQ0FwRUg7QUFBQSx1QkFxRWlCLFNBQUssNENBQUwsQ0FBbUQsU0FBSyxNQUFMLENBQWE7QUFDbEYsNEJBQVEsRUFBRSxJQUFGLENBRDBFO0FBRWxGLGdDQUFZLEdBRnNFLEVBRWpFO0FBQ2pCLGdDQUFZLEdBSHNFLEVBR2pFO0FBQ2pCLDZCQUFTLEVBSnlFLENBSXJFO0FBSnFFLGlCQUFiLEVBS3RFLE1BTHNFLENBQW5ELENBckVqQjtBQUFBO0FBcUVELHlCQXJFQztBQTJFRCx5QkEzRUMsR0EyRVcsU0FBSyxZQUFMLEVBM0VYO0FBNEVELHNCQTVFQyxHQTRFUTtBQUNULDRCQUFRLEVBREM7QUFFVCw0QkFBUSxFQUZDO0FBR1QsaUNBQWEsU0FISjtBQUlULGdDQUFZLFNBQUssT0FBTCxDQUFjLFNBQWQ7QUFKSCxpQkE1RVI7QUFrRkQscUJBbEZDLEdBa0ZPLENBQUUsTUFBRixFQUFVLE1BQVYsQ0FsRlA7O0FBbUZMLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksTUFBTSxNQUExQixFQUFrQyxHQUFsQyxFQUF1QztBQUMvQix3QkFEK0IsR0FDeEIsTUFBTSxDQUFOLENBRHdCO0FBRS9CLDBCQUYrQixHQUV0QixVQUFVLElBQVYsQ0FGc0I7O0FBR25DLHlCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksT0FBTyxNQUEzQixFQUFtQyxHQUFuQyxFQUF3QztBQUNoQyw2QkFEZ0MsR0FDeEIsT0FBTyxDQUFQLENBRHdCO0FBRWhDLDZCQUZnQyxHQUV4QixNQUFNLE9BQU4sQ0FGd0I7QUFHaEMsOEJBSGdDLEdBR3ZCLE1BQU0sWUFBTixDQUh1Qjs7QUFJcEMsK0JBQU8sSUFBUCxFQUFhLElBQWIsQ0FBbUIsQ0FBRSxLQUFGLEVBQVMsTUFBVCxDQUFuQjtBQUNIO0FBQ0o7QUFDRCx1QkFBTyxNQUFQO0FBN0ZLO0FBQUE7QUFnR1QsbUJBaEdTLHVCQWdHSSxNQWhHSixFQWdHWSxNQWhHWixFQWdHb0I7QUFDekIsZ0JBQUksWUFBWSxLQUFLLFlBQUwsRUFBaEI7QUFDQSxtQkFBTztBQUNILDZCQUFhLFNBRFY7QUFFSCw0QkFBWSxLQUFLLE9BQUwsQ0FBYyxTQUFkLENBRlQ7QUFHSCx3QkFBUSxPQUFPLE1BQVAsQ0FITDtBQUlILHVCQUFPLE9BQU8sS0FBUCxDQUpKO0FBS0gsdUJBQU8sT0FBTyxZQUFQLENBTEo7QUFNSCx1QkFBTyxPQUFPLFdBQVAsQ0FOSjtBQU9ILHdCQUFRLFNBUEw7QUFRSCx3QkFBUSxTQVJMO0FBU0gseUJBQVMsU0FUTjtBQVVILHlCQUFTLFNBVk47QUFXSCx3QkFBUSxTQVhMO0FBWUgsMEJBQVUsU0FaUDtBQWFILDhCQUFjLFNBYlg7QUFjSCwyQkFBVyxTQWRSO0FBZUgsOEJBQWMsT0FBTyxZQUFQLENBZlg7QUFnQkgsK0JBQWUsT0FBTyxlQUFQLENBaEJaO0FBaUJILHdCQUFRO0FBakJMLGFBQVA7QUFtQkEsbUJBQU8sTUFBUDtBQUNILFNBdEhRO0FBd0hILG9CQXhIRztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQXlIZ0IsU0FBSyxrQ0FBTCxFQXpIaEI7QUFBQTtBQXlIRCx3QkF6SEM7QUEwSEQsc0JBMUhDLEdBMEhRLEVBMUhSOztBQTJITCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFNBQVMsTUFBN0IsRUFBcUMsR0FBckMsRUFBMEM7QUFDbEMsMEJBRGtDLEdBQ3pCLFNBQVMsQ0FBVCxDQUR5QjtBQUVsQyx3QkFGa0MsR0FFM0IsT0FBTyxjQUFQLEVBQXVCLE1BQXZCLEVBQStCLFdBQS9CLEVBRjJCO0FBR2xDLHlCQUhrQyxHQUcxQixPQUFPLGNBQVAsRUFBdUIsU0FBdkIsRUFBa0MsV0FBbEMsRUFIMEI7QUFJbEMsMEJBSmtDLEdBSXpCLE9BQU8sR0FBUCxHQUFhLEtBSlk7QUFLbEMsMEJBTGtDLEdBS3pCLFNBQUssT0FBTCxDQUFhLE1BQWIsQ0FMeUI7O0FBTXRDLDJCQUFPLE1BQVAsSUFBaUIsU0FBSyxXQUFMLENBQWtCLE1BQWxCLEVBQTBCLE1BQTFCLENBQWpCO0FBQ0g7QUFDRCx1QkFBTyxNQUFQO0FBbklLO0FBQUE7QUFzSUgsbUJBdElHLHVCQXNJVSxNQXRJVjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkF1SWdCLFNBQUssa0NBQUwsRUF2SWhCO0FBQUE7QUF1SUQsd0JBdklDO0FBd0lELHVCQXhJQyxHQXdJUyxFQXhJVDs7QUF5SUwscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxTQUFTLE1BQTdCLEVBQXFDLEdBQXJDLEVBQTBDO0FBQ2xDLDBCQURrQyxHQUN6QixTQUFTLENBQVQsQ0FEeUI7QUFFbEMsd0JBRmtDLEdBRTNCLE9BQU8sY0FBUCxFQUF1QixNQUF2QixFQUErQixXQUEvQixFQUYyQjtBQUdsQyx5QkFIa0MsR0FHMUIsT0FBTyxjQUFQLEVBQXVCLFNBQXZCLEVBQWtDLFdBQWxDLEVBSDBCO0FBSWxDLDJCQUprQyxHQUl6QixPQUFPLEdBQVAsR0FBYSxLQUpZOztBQUt0Qyw0QkFBUSxPQUFSLElBQWtCLE1BQWxCO0FBQ0g7QUFDRyxpQkFoSkMsR0FnSkcsU0FBSyxNQUFMLENBQWEsTUFBYixDQWhKSDtBQWlKRCxzQkFqSkMsR0FpSlEsRUFBRSxRQUFGLENBakpSOztBQWtKTCxvQkFBSSxVQUFVLE9BQWQsRUFBdUI7QUFDZiwyQkFEZSxHQUNOLFFBQVEsTUFBUixDQURNOztBQUVuQiwyQkFBTyxTQUFLLFdBQUwsQ0FBa0IsT0FBbEIsRUFBMEIsQ0FBMUIsQ0FBUDtBQUNILGlCQUhEO0FBSUEsMEJBQU0sSUFBSSxhQUFKLENBQW1CLFNBQUssRUFBTCxHQUFVLEdBQVYsR0FBZ0IsTUFBaEIsR0FBeUIsbUJBQTVDLENBQU47QUFKQTtBQWxKSztBQUFBO0FBeUpILG1CQXpKRyx1QkF5SlUsTUF6SlY7QUFBQTtBQUFBO0FBQUE7O0FBeUprQixrQkF6SmxCLG1GQXlKMkIsRUF6SjNCOztBQTBKTCxtQkFBTyxTQUFLLGtDQUFMLENBQXlDLFNBQUssTUFBTCxDQUFhO0FBQ3pELHdCQUFRLFNBQUssUUFBTCxDQUFlLE1BQWYsQ0FEaUQ7QUFFekQsNEJBQVk7QUFGNkMsYUFBYixFQUc3QyxNQUg2QyxDQUF6QyxDQUFQO0FBMUpLO0FBZ0tILG1CQWhLRyx1QkFnS1UsTUFoS1YsRUFnS2tCLElBaEtsQixFQWdLd0IsSUFoS3hCLEVBZ0s4QixNQWhLOUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFnS3NDLHFCQWhLdEMsbUZBZ0s4QyxTQWhLOUM7QUFnS3lELHNCQWhLekQsbUZBZ0trRSxFQWhLbEU7QUFpS0QscUJBaktDLEdBaUtPO0FBQ1Isb0NBQWdCLFNBQUssUUFBTCxDQUFlLE1BQWYsQ0FEUjtBQUVSLDhCQUFVLE1BRkY7QUFHUiw2QkFBUyxLQUhEO0FBSVIsaUNBQWMsUUFBUSxLQUFULEdBQWtCLENBQWxCLEdBQXNCO0FBSjNCLGlCQWpLUDtBQUFBLHVCQXVLZ0IsU0FBSyxnQkFBTCxDQUF1QixTQUFLLE1BQUwsQ0FBYSxLQUFiLEVBQW9CLE1BQXBCLENBQXZCLENBdktoQjtBQUFBO0FBdUtELHdCQXZLQzs7QUF3S0wsdUJBQU87QUFDSCw0QkFBUSxRQURMO0FBRUgsMEJBQU0sU0FBUyxRQUFUO0FBRkgsaUJBQVA7QUF4S0s7QUFBQTtBQThLSCxtQkE5S0csdUJBOEtVLEVBOUtWO0FBQUE7O0FBK0tMLG1CQUFPLFNBQUssbUJBQUwsQ0FBMEIsRUFBRSxXQUFXLEVBQWIsRUFBMUIsQ0FBUDtBQS9LSztBQWtMSCxlQWxMRyxtQkFrTE0sSUFsTE47QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQWtMWSxtQkFsTFosbUZBa0xrQixRQWxMbEI7QUFrTDRCLHNCQWxMNUIsbUZBa0xxQyxLQWxMckM7QUFrTDRDLHNCQWxMNUMsbUZBa0xxRCxFQWxMckQ7QUFrTHlELHVCQWxMekQsbUZBa0xtRSxTQWxMbkU7QUFrTDhFLG9CQWxMOUUsbUZBa0xxRixTQWxMckY7QUFtTEQsbUJBbkxDLEdBbUxLLFNBQUssSUFBTCxDQUFVLEtBQVYsSUFBbUIsR0FBbkIsR0FBeUIsR0FBekIsR0FBK0IsR0FBL0IsR0FBcUMsU0FBSyxhQUFMLENBQW9CLElBQXBCLEVBQTBCLE1BQTFCLENBbkwxQztBQW9MRCxxQkFwTEMsR0FvTE8sU0FBSyxJQUFMLENBQVcsTUFBWCxFQUFtQixTQUFLLGFBQUwsQ0FBb0IsSUFBcEIsQ0FBbkIsQ0FwTFA7O0FBcUxMLG9CQUFJLE9BQU8sU0FBWCxFQUFzQjtBQUNsQix3QkFBSSxPQUFPLElBQVAsQ0FBYSxLQUFiLEVBQW9CLE1BQXhCO0FBQ0ksK0JBQU8sTUFBTSxTQUFLLFNBQUwsQ0FBZ0IsS0FBaEIsQ0FBYjtBQURKO0FBRUgsaUJBSEQsTUFHTztBQUNDLHlCQURELEdBQ1MsU0FBSyxLQUFMLEVBRFQ7QUFFQywyQkFGRCxHQUVXLFNBQUssTUFBTCxDQUFhO0FBQ3ZCLGlDQUFTLFNBQUssTUFEUztBQUV2QixpQ0FBUztBQUZjLHFCQUFiLEVBR1gsS0FIVyxDQUZYO0FBTUMsd0JBTkQsR0FNUSxNQUFNLFFBQU4sS0FBb0IsR0FBcEIsR0FBMEIsU0FBSyxNQU52Qzs7QUFPSCw0QkFBUSxXQUFSLElBQXVCLFNBQUssSUFBTCxDQUFXLFNBQUssTUFBTCxDQUFhLElBQWIsQ0FBWCxFQUErQixTQUFLLE1BQUwsQ0FBYSxTQUFLLE1BQWxCLENBQS9CLENBQXZCO0FBQ0EsMkJBQU8sU0FBSyxJQUFMLENBQVcsT0FBWCxDQUFQO0FBQ0EsOEJBQVU7QUFDTix3Q0FBZ0Isa0JBRFY7QUFFTiwwQ0FBa0IsS0FBSztBQUZqQixxQkFBVjtBQUlIO0FBck1JLHVCQXNNZ0IsU0FBSyxLQUFMLENBQVksR0FBWixFQUFpQixNQUFqQixFQUF5QixPQUF6QixFQUFrQyxJQUFsQyxDQXRNaEI7QUFBQTtBQXNNRCx3QkF0TUM7O0FBdU1MLG9CQUFJLFlBQVksUUFBaEI7QUFDSSwwQkFBTSxJQUFJLGFBQUosQ0FBbUIsU0FBSyxFQUFMLEdBQVUsR0FBVixHQUFnQixTQUFLLElBQUwsQ0FBVyxRQUFYLENBQW5DLENBQU47QUFESixpQkFFQSxPQUFPLFFBQVA7QUF6TUs7QUFBQTtBQUFBLEtBQWI7O0FBNk1BOztBQUVBLFFBQUksZ0JBQWdCOztBQUVoQixjQUFNLGVBRlU7QUFHaEIsZ0JBQVEsZUFIUTtBQUloQixxQkFBYSxLQUpHO0FBS2hCLG1CQUFXLElBTEs7QUFNaEIscUJBQWEsSUFORztBQU9oQiwyQkFBbUIsSUFQSDtBQVFoQixnQkFBUTtBQUNKLG9CQUFRLHFHQURKO0FBRUosbUJBQU8sK0JBRkg7QUFHSixtQkFBTywyQkFISDtBQUlKLG1CQUFPO0FBSkgsU0FSUTtBQWNoQixlQUFPO0FBQ0gsc0JBQVU7QUFDTix1QkFBTyxDQUNILFNBREcsRUFFSCxjQUZHLEVBR0gsU0FIRztBQUREO0FBRFAsU0FkUztBQXVCaEIsc0JBQWMsQ0FDVixLQURVLEVBRVYsS0FGVSxFQUdWLEtBSFUsRUFJVixLQUpVLEVBS1YsS0FMVSxFQU1WLEtBTlUsRUFPVixLQVBVLEVBUVYsS0FSVSxFQVNWLEtBVFUsRUFVVixLQVZVLEVBV1YsS0FYVSxFQVlWLEtBWlUsRUFhVixLQWJVLEVBY1YsS0FkVSxFQWVWLEtBZlUsQ0F2QkU7O0FBeUNWLHNCQXpDVSwwQkF5Q00sTUF6Q047QUFBQTtBQUFBO0FBQUE7O0FBeUNjLGtCQXpDZCxtRkF5Q3VCLEVBekN2Qjs7QUEwQ1osa0JBQU0sSUFBSSxhQUFKLENBQW1CLHlEQUF5RCxTQUFLLEVBQWpGLENBQU47QUExQ1k7QUE2Q1Ysb0JBN0NVO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBOENRLFNBQUssZUFBTCxFQTlDUjtBQUFBO0FBOENSLHVCQTlDUTtBQStDUixzQkEvQ1EsR0ErQ0MsRUEvQ0Q7O0FBZ0RaLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksUUFBUSxNQUE1QixFQUFvQyxHQUFwQyxFQUF5QztBQUNqQywwQkFEaUMsR0FDeEIsUUFBUSxDQUFSLENBRHdCOztBQUVyQyx5QkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFNBQUssVUFBTCxDQUFnQixNQUFwQyxFQUE0QyxHQUE1QyxFQUFpRDtBQUN6Qyw0QkFEeUMsR0FDbEMsT0FBTyxRQUFQLENBRGtDO0FBRXpDLDhCQUZ5QyxHQUVoQyxPQUFPLElBQVAsQ0FGZ0M7QUFHekMsNkJBSHlDLEdBR2pDLFNBQUssVUFBTCxDQUFnQixDQUFoQixDQUhpQztBQUl6QywrQkFKeUMsR0FJL0IsTUFBTSxXQUFOLEVBSitCO0FBS3pDLDhCQUx5QyxHQUtoQyxPQUFPLEdBQVAsR0FBYSxLQUxtQjtBQU16QywwQkFOeUMsR0FNcEMsU0FBUyxHQUFULEdBQWUsS0FOcUI7O0FBTzdDLCtCQUFPLElBQVAsQ0FBYTtBQUNULGtDQUFNLEVBREc7QUFFVCxzQ0FBVSxNQUZEO0FBR1Qsb0NBQVEsSUFIQztBQUlULHFDQUFTLEtBSkE7QUFLVCxzQ0FBVSxNQUxEO0FBTVQsdUNBQVcsT0FORjtBQU9ULG9DQUFRO0FBUEMseUJBQWI7QUFTSDtBQUNKO0FBQ0QsdUJBQU8sTUFBUDtBQXBFWTtBQUFBO0FBdUVWLG1CQXZFVTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBdUVHLHdCQXZFSCxtRkF1RWMsS0F2RWQ7QUFBQSx1QkF3RU4sU0FBSyxXQUFMLEVBeEVNO0FBQUE7QUF5RVIsdUJBekVRLEdBeUVFLEVBekVGOztBQTBFWixvQkFBSSxRQUFKO0FBQ0ksNEJBQVEsU0FBUixJQUFxQixRQUFyQjtBQURKLGlCQUVBLE9BQU8sU0FBSyxlQUFMLENBQXNCLE9BQXRCLENBQVA7QUE1RVk7QUFBQTtBQStFaEIsbUJBL0VnQix1QkErRUgsTUEvRUcsRUErRUssTUEvRUwsRUErRWE7QUFDekIsZ0JBQUksWUFBWSxLQUFLLFlBQUwsRUFBaEI7QUFDQSxnQkFBSSxrQkFBa0IsTUFBdEIsRUFDSSxJQUFJLE9BQU8sY0FBUCxDQUFKLEVBQ0ksWUFBWSxTQUFVLE9BQU8sY0FBUCxDQUFWLElBQW9DLElBQWhEO0FBQ1IsZ0JBQUksU0FBUyxTQUFiO0FBQ0EsZ0JBQUksWUFBWSxnQkFBZ0IsT0FBTyxTQUFQLENBQWhDO0FBQ0EsZ0JBQUksT0FBTyxTQUFQLENBQUosRUFDSSxTQUFTLFdBQVksT0FBTyxTQUFQLENBQVosQ0FBVDtBQUNKLGdCQUFJLFFBQVEsV0FBVyxPQUFPLFNBQVAsQ0FBdkI7QUFDQSxnQkFBSSxTQUFTLFNBQWI7QUFDQSxnQkFBSSxZQUFZLG9CQUFoQjtBQUNBLGdCQUFJLE9BQU8sU0FBUCxDQUFKLEVBQ0ksU0FBUyxXQUFZLE9BQU8sU0FBUCxDQUFaLENBQVQ7QUFDSixnQkFBSSxPQUFPLFNBQVg7QUFDQSxnQkFBSSxTQUFTLE1BQWIsRUFDSSxJQUFJLE9BQU8sS0FBUCxDQUFKLEVBQ0ksT0FBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBQVA7QUFDUixtQkFBTztBQUNILDZCQUFhLFNBRFY7QUFFSCw0QkFBWSxLQUFLLE9BQUwsQ0FBYyxTQUFkLENBRlQ7QUFHSCx3QkFBUSxTQUhMO0FBSUgsdUJBQU8sU0FKSjtBQUtILHVCQUFPLFNBTEo7QUFNSCx1QkFBTyxTQU5KO0FBT0gsd0JBQVEsU0FQTDtBQVFILHdCQUFRLFNBUkw7QUFTSCx5QkFBUyxTQVROO0FBVUgseUJBQVMsU0FWTjtBQVdILHdCQUFRLElBWEw7QUFZSCwwQkFBVSxNQVpQO0FBYUgsOEJBQWMsU0FiWDtBQWNILDJCQUFXLFNBZFI7QUFlSCw4QkFBYyxTQWZYO0FBZ0JILCtCQUFlLE1BaEJaO0FBaUJILHdCQUFRO0FBakJMLGFBQVA7QUFtQkgsU0FwSGU7QUFzSFYsb0JBdEhVO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQXNISSx3QkF0SEosbUZBc0hlLEtBdEhmO0FBQUEsdUJBdUhOLFNBQUssV0FBTCxFQXZITTtBQUFBO0FBd0hSLHVCQXhIUSxHQXdIRSxFQXhIRjs7QUF5SFosb0JBQUksUUFBSjtBQUNJLDRCQUFRLFNBQVIsSUFBcUIsUUFBckI7QUFESixpQkF6SFksT0EySFMsU0FBSyxlQUFMLENBQXNCLE9BQXRCLENBM0hUO0FBQUE7QUEySFIsd0JBM0hRO0FBNEhSLHVCQTVIUSxHQTRIRSxFQTVIRjs7QUE2SFoscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxTQUFTLE1BQTdCLEVBQXFDLEdBQXJDLEVBQTBDO0FBQ2xDLDBCQURrQyxHQUN6QixTQUFTLENBQVQsQ0FEeUI7QUFFbEMsc0JBRmtDLEdBRTdCLE9BQU8sSUFBUCxJQUFlLEdBQWYsR0FBcUIsUUFGUTtBQUdsQywwQkFIa0MsR0FHekIsU0FBSyxhQUFMLENBQW1CLEVBQW5CLENBSHlCO0FBSWxDLDBCQUprQyxHQUl6QixPQUFPLFFBQVAsQ0FKeUI7O0FBS3RDLDRCQUFRLE1BQVIsSUFBa0IsU0FBSyxXQUFMLENBQWtCLE1BQWxCLEVBQTBCLE1BQTFCLENBQWxCO0FBQ0g7QUFDRCx1QkFBTyxPQUFQO0FBcElZO0FBQUE7QUF1SVYsbUJBdklVLHVCQXVJRyxNQXZJSDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkF3SU4sU0FBSyxXQUFMLEVBeElNO0FBQUE7QUF5SVIsaUJBeklRLEdBeUlKLFNBQUssTUFBTCxDQUFhLE1BQWIsQ0F6SUk7QUEwSVIsdUJBMUlRLEdBMElFO0FBQ1YsK0JBQVcsRUFBRSxPQUFGLENBREQ7QUFFViwwQkFBTSxFQUFFLFFBQUY7QUFGSSxpQkExSUY7QUFBQSx1QkE4SVMsU0FBSyxpQkFBTCxDQUF3QixPQUF4QixDQTlJVDtBQUFBO0FBOElSLHdCQTlJUTtBQStJUixzQkEvSVEsR0ErSUMsU0FBUyxDQUFULENBL0lEOztBQWdKWix1QkFBTyxTQUFLLFdBQUwsQ0FBa0IsTUFBbEIsRUFBMEIsQ0FBMUIsQ0FBUDtBQWhKWTtBQUFBO0FBbUpoQixlQW5KZ0IsbUJBbUpQLElBbkpPLEVBbUptRjtBQUFBLGdCQUFwRixHQUFvRix1RUFBOUUsUUFBOEU7QUFBQSxnQkFBcEUsTUFBb0UsdUVBQTNELEtBQTJEO0FBQUEsZ0JBQXBELE1BQW9ELHVFQUEzQyxFQUEyQztBQUFBLGdCQUF2QyxPQUF1Qyx1RUFBN0IsU0FBNkI7QUFBQSxnQkFBbEIsSUFBa0IsdUVBQVgsU0FBVzs7QUFDL0YsZ0JBQUksTUFBTSxLQUFLLElBQUwsQ0FBVSxLQUFWLElBQW1CLEdBQW5CLEdBQXlCLEtBQUssT0FBOUIsR0FBd0MsR0FBeEMsR0FBOEMsS0FBSyxhQUFMLENBQW9CLElBQXBCLEVBQTBCLE1BQTFCLENBQXhEO0FBQ0EsZ0JBQUksUUFBUSxLQUFLLElBQUwsQ0FBVyxNQUFYLEVBQW1CLEtBQUssYUFBTCxDQUFvQixJQUFwQixDQUFuQixDQUFaO0FBQ0EsZ0JBQUksT0FBTyxJQUFQLENBQWEsS0FBYixFQUFvQixNQUF4QixFQUNJLE9BQU8sTUFBTSxLQUFLLFNBQUwsQ0FBZ0IsS0FBaEIsQ0FBYjtBQUNKLG1CQUFPLEtBQUssS0FBTCxDQUFZLEdBQVosRUFBaUIsTUFBakIsRUFBeUIsT0FBekIsRUFBa0MsSUFBbEMsQ0FBUDtBQUNIO0FBekplLEtBQXBCOztBQTRKQTs7QUFFQSxRQUFJLFdBQVc7O0FBRVgsY0FBTSxVQUZLO0FBR1gsZ0JBQVEsVUFIRztBQUlYLHFCQUFhLENBQUUsSUFBRixFQUFRLElBQVIsQ0FKRixFQUlrQjtBQUM3QixxQkFBYSxJQUxGO0FBTVgsZ0JBQVE7QUFDSixvQkFBUSxxR0FESjtBQUVKLG1CQUFPLHlCQUZIO0FBR0osbUJBQU8scUJBSEg7QUFJSixtQkFBTyxDQUNILGdDQURHLEVBRUgsZ0NBRkc7QUFKSCxTQU5HO0FBZVgsZUFBTztBQUNILHNCQUFVO0FBQ04sdUJBQU8sQ0FDSCxXQURHLEVBRUgsUUFGRyxFQUdILGNBSEc7QUFERCxhQURQO0FBUUgsdUJBQVc7QUFDUCx3QkFBUSxDQUNKLFVBREksRUFFSixtQkFGSSxFQUdKLHlCQUhJLEVBSUosWUFKSSxFQUtKLFVBTEksRUFNSixhQU5JLEVBT0oscUJBUEksRUFRSixlQVJJLEVBU0osWUFUSSxFQVVKLGVBVkksRUFXSixhQVhJLEVBWUosV0FaSSxFQWFKLG9CQWJJLEVBY0osNEJBZEk7QUFERDtBQVJSLFNBZkk7QUEwQ1gsbUJBQVc7QUFDUCx1QkFBVyxFQUFFLE1BQU0sU0FBUixFQUFtQixVQUFVLFNBQTdCLEVBQXdDLFFBQVEsS0FBaEQsRUFBdUQsU0FBUyxLQUFoRSxFQURKO0FBRVAsdUJBQVcsRUFBRSxNQUFNLFNBQVIsRUFBbUIsVUFBVSxTQUE3QixFQUF3QyxRQUFRLEtBQWhELEVBQXVELFNBQVMsS0FBaEU7QUFGSixTQTFDQTs7QUErQ0wsb0JBL0NLO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkFnRGMsU0FBSyxtQkFBTCxFQWhEZDtBQUFBO0FBZ0RILHdCQWhERztBQWlESCx3QkFqREcsR0FpRFEsU0FBUyxNQUFULENBakRSO0FBa0RILHNCQWxERyxHQWtETSxFQUFFLFFBQVEsUUFBVixFQWxETjs7QUFtRFAscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxTQUFLLFVBQUwsQ0FBZ0IsTUFBcEMsRUFBNEMsR0FBNUMsRUFBaUQ7QUFDekMsNEJBRHlDLEdBQzlCLFNBQUssVUFBTCxDQUFnQixDQUFoQixDQUQ4QjtBQUV6QywyQkFGeUMsR0FFL0I7QUFDVixnQ0FBUSxTQURFO0FBRVYsZ0NBQVEsU0FGRTtBQUdWLGlDQUFTO0FBSEMscUJBRitCOztBQU83Qyx3QkFBSSxZQUFZLFFBQWhCLEVBQTBCO0FBQ3RCLGdDQUFRLE1BQVIsSUFBa0IsU0FBUyxRQUFULEVBQW1CLFdBQW5CLENBQWxCO0FBQ0EsZ0NBQVEsTUFBUixJQUFrQixTQUFTLFFBQVQsRUFBbUIsVUFBbkIsQ0FBbEI7QUFDQSxnQ0FBUSxPQUFSLElBQW1CLFNBQVMsUUFBVCxFQUFtQixTQUFuQixDQUFuQjtBQUNIO0FBQ0QsMkJBQU8sUUFBUCxJQUFtQixPQUFuQjtBQUNIO0FBQ0QsdUJBQU8sTUFBUDtBQWpFTztBQUFBO0FBb0VMLHNCQXBFSywwQkFvRVcsTUFwRVg7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFvRW1CLHNCQXBFbkIsbUZBb0U0QixFQXBFNUI7QUFBQSx1QkFxRWMsU0FBSyxrQkFBTCxDQUF5QixTQUFLLE1BQUwsQ0FBYTtBQUN2RCxvQ0FBZ0IsU0FBSyxRQUFMLENBQWUsTUFBZixDQUR1QztBQUV2RCx5Q0FBcUI7QUFGa0MsaUJBQWIsRUFHM0MsTUFIMkMsQ0FBekIsQ0FyRWQ7QUFBQTtBQXFFSCx3QkFyRUc7QUF5RUgseUJBekVHLEdBeUVTLFNBQVMsTUFBVCxDQXpFVDtBQTBFSCx5QkExRUcsR0EwRVMsVUFBVSxXQUFWLElBQXlCLElBMUVsQztBQTJFSCxzQkEzRUcsR0EyRU07QUFDVCw0QkFBUSxFQURDO0FBRVQsNEJBQVEsRUFGQztBQUdULGlDQUFhLFNBSEo7QUFJVCxnQ0FBWSxTQUFLLE9BQUwsQ0FBYyxTQUFkO0FBSkgsaUJBM0VOO0FBaUZILHFCQWpGRyxHQWlGSyxDQUFFLE1BQUYsRUFBVSxNQUFWLENBakZMOztBQWtGUCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLE1BQU0sTUFBMUIsRUFBa0MsR0FBbEMsRUFBdUM7QUFDL0Isd0JBRCtCLEdBQ3hCLE1BQU0sQ0FBTixDQUR3QjtBQUUvQiwwQkFGK0IsR0FFdEIsVUFBVSxJQUFWLENBRnNCOztBQUduQyx5QkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLE9BQU8sTUFBM0IsRUFBbUMsR0FBbkMsRUFBd0M7QUFDaEMsNkJBRGdDLEdBQ3hCLE9BQU8sQ0FBUCxDQUR3QjtBQUVoQyw2QkFGZ0MsR0FFeEIsTUFBTSxPQUFOLENBRndCO0FBR2hDLDhCQUhnQyxHQUd2QixNQUFNLFFBQU4sQ0FIdUI7O0FBSXBDLCtCQUFPLElBQVAsRUFBYSxJQUFiLENBQW1CLENBQUUsS0FBRixFQUFTLE1BQVQsQ0FBbkI7QUFDSDtBQUNKO0FBQ0QsdUJBQU8sTUFBUDtBQTVGTztBQUFBO0FBK0ZMLG1CQS9GSyx1QkErRlEsTUEvRlI7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQWdHYyxTQUFLLGVBQUwsQ0FBc0I7QUFDdkMsb0NBQWdCLFNBQUssUUFBTCxDQUFlLE1BQWY7QUFEdUIsaUJBQXRCLENBaEdkO0FBQUE7QUFnR0gsd0JBaEdHO0FBbUdILHNCQW5HRyxHQW1HTSxTQUFTLE1BQVQsQ0FuR047QUFvR0gseUJBcEdHLEdBb0dTLE9BQU8sV0FBUCxJQUFzQixJQXBHL0I7O0FBcUdQLHVCQUFPO0FBQ0gsaUNBQWEsU0FEVjtBQUVILGdDQUFZLFNBQUssT0FBTCxDQUFjLFNBQWQsQ0FGVDtBQUdILDRCQUFRLFdBQVksT0FBTyxNQUFQLENBQVosQ0FITDtBQUlILDJCQUFPLFdBQVksT0FBTyxLQUFQLENBQVosQ0FKSjtBQUtILDJCQUFPLFdBQVksT0FBTyxLQUFQLENBQVosQ0FMSjtBQU1ILDJCQUFPLFdBQVksT0FBTyxLQUFQLENBQVosQ0FOSjtBQU9ILDRCQUFRLFNBUEw7QUFRSCw0QkFBUSxTQVJMO0FBU0gsNkJBQVMsU0FUTjtBQVVILDZCQUFTLFNBVk47QUFXSCw0QkFBUSxXQUFZLE9BQU8sTUFBUCxDQUFaLENBWEw7QUFZSCw4QkFBVSxTQVpQO0FBYUgsa0NBQWMsU0FiWDtBQWNILCtCQUFXLFNBZFI7QUFlSCxrQ0FBYyxTQWZYO0FBZ0JILG1DQUFlLFdBQVksT0FBTyxRQUFQLENBQVosQ0FoQlo7QUFpQkgsNEJBQVE7QUFqQkwsaUJBQVA7QUFyR087QUFBQTtBQTBITCxtQkExSEssdUJBMEhRLE1BMUhSO0FBQUE7QUFBQTtBQUFBOztBQTBIZ0Isa0JBMUhoQixtRkEwSHlCLEVBMUh6Qjs7QUEySFAsbUJBQU8sU0FBSyxxQkFBTCxDQUE0QixTQUFLLE1BQUwsQ0FBYTtBQUM1QyxnQ0FBZ0IsU0FBSyxRQUFMLENBQWUsTUFBZixDQUQ0QjtBQUU1QyxzQ0FBc0I7QUFGc0IsYUFBYixFQUdoQyxNQUhnQyxDQUE1QixDQUFQO0FBM0hPO0FBaUlMLG1CQWpJSyx1QkFpSVEsTUFqSVIsRUFpSWdCLElBakloQixFQWlJc0IsSUFqSXRCLEVBaUk0QixNQWpJNUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQWlJb0MscUJBaklwQyxtRkFpSTRDLFNBakk1QztBQWlJdUQsc0JBakl2RCxtRkFpSWdFLEVBakloRTtBQWtJSCxzQkFsSUcsR0FrSU0sZ0JBQWdCLFNBQUssVUFBTCxDQUFpQixJQUFqQixDQWxJdEI7QUFtSUgscUJBbklHLEdBbUlLO0FBQ1Isb0NBQWdCLFNBQUssUUFBTCxDQUFlLE1BQWY7QUFEUixpQkFuSUw7O0FBc0lQLG9CQUFJLFFBQVEsUUFBWixFQUFzQjtBQUNsQix3QkFBSSxRQUFRLEtBQVo7QUFDSSw4QkFBTSxPQUFOLElBQWlCLE1BQWpCLENBREosQ0FDNkI7QUFEN0I7QUFHSSw4QkFBTSxRQUFOLElBQWtCLE1BQWxCO0FBSEoscUJBRGtCLENBSVk7QUFDOUIsOEJBQVUsU0FBVjtBQUNILGlCQU5ELE1BTU87QUFDSCwwQkFBTSxRQUFOLElBQWtCLE1BQWxCLENBREcsQ0FDdUI7QUFDMUIsMEJBQU0sT0FBTixJQUFpQixLQUFqQjtBQUNBLDhCQUFVLFNBQUssVUFBTCxDQUFpQixJQUFqQixDQUFWO0FBQ0g7QUFoSk0sdUJBaUpjLFNBQUssTUFBTCxFQUFjLEtBQUssTUFBTCxDQUFhLEtBQWIsRUFBb0IsTUFBcEIsQ0FBZCxDQWpKZDtBQUFBO0FBaUpILHdCQWpKRzs7QUFrSlAsdUJBQU87QUFDSCw0QkFBUSxRQURMO0FBRUgsMEJBQU0sU0FBUyxNQUFULEVBQWlCLFFBQWpCO0FBRkgsaUJBQVA7QUFsSk87QUFBQTtBQXdKTCxtQkF4SkssdUJBd0pRLEVBeEpSO0FBQUE7O0FBeUpQLG1CQUFPLFNBQUssc0JBQUwsQ0FBNkIsRUFBRSxXQUFXLEVBQWIsRUFBN0IsQ0FBUDtBQXpKTztBQTRKTCxlQTVKSyxtQkE0SkksSUE1Sko7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUE0SlUsbUJBNUpWLG1GQTRKZ0IsUUE1SmhCO0FBNEowQixzQkE1SjFCLG1GQTRKbUMsS0E1Sm5DO0FBNEowQyxzQkE1SjFDLG1GQTRKbUQsRUE1Sm5EO0FBNEp1RCx1QkE1SnZELG1GQTRKaUUsU0E1SmpFO0FBNEo0RSxvQkE1SjVFLG1GQTRKbUYsU0E1Sm5GO0FBNkpILG1CQTdKRyxHQTZKRyxTQUFLLElBQUwsQ0FBVSxLQUFWLElBQW1CLEdBQW5CLEdBQXlCLElBN0o1Qjs7QUE4SlAsb0JBQUksT0FBTyxRQUFYLEVBQXFCO0FBQ2pCLHdCQUFJLE9BQU8sSUFBUCxDQUFhLE1BQWIsRUFBcUIsTUFBekI7QUFDSSwrQkFBTyxNQUFNLFNBQUssU0FBTCxDQUFnQixNQUFoQixDQUFiO0FBREo7QUFFSCxpQkFIRCxNQUdPO0FBQ0gsd0JBQUksQ0FBQyxTQUFLLEdBQVY7QUFDSSw4QkFBTSxJQUFJLG1CQUFKLENBQXlCLFNBQUssRUFBTCxHQUFVLGFBQVYsR0FBMEIsU0FBSyxFQUEvQixHQUFvQyxtQ0FBN0QsQ0FBTjtBQURKLHFCQUVJLEtBSEQsR0FHUyxTQUFLLEtBQUwsR0FBYyxRQUFkLEVBSFQ7QUFJQyx3QkFKRCxHQUlRLFFBQVEsU0FBSyxHQUFiLEdBQW1CLFNBQUssTUFKaEM7QUFLQyw2QkFMRCxHQUthLFNBQUssSUFBTCxDQUFXLFNBQUssTUFBTCxDQUFhLElBQWIsQ0FBWCxFQUErQixTQUFLLE1BQUwsQ0FBYSxTQUFLLE1BQWxCLENBQS9CLENBTGI7O0FBTUgsMkJBQU8sU0FBSyxTQUFMLENBQWdCLFNBQUssTUFBTCxDQUFhO0FBQ2hDLG9DQUFZLFNBQUssR0FEZTtBQUVoQyxpQ0FBUyxLQUZ1QjtBQUdoQyxxQ0FBYSxTQUFLLE1BSGM7QUFJaEMscUNBQWEsVUFBVSxXQUFWO0FBSm1CLHFCQUFiLEVBS3BCLE1BTG9CLENBQWhCLENBQVA7QUFNQSw4QkFBVTtBQUNOLHdDQUFpQjtBQURYLHFCQUFWO0FBR0g7QUFoTE0sdUJBaUxjLFNBQUssS0FBTCxDQUFZLEdBQVosRUFBaUIsTUFBakIsRUFBeUIsT0FBekIsRUFBa0MsSUFBbEMsQ0FqTGQ7QUFBQTtBQWlMSCx3QkFqTEc7O0FBa0xQLG9CQUFJLFdBQVcsUUFBZjtBQUNJLHdCQUFJLFNBQVMsT0FBVCxDQUFKO0FBQ0ksOEJBQU0sSUFBSSxhQUFKLENBQW1CLFNBQUssRUFBTCxHQUFVLEdBQVYsR0FBZ0IsU0FBSyxJQUFMLENBQVcsUUFBWCxDQUFuQyxDQUFOO0FBREo7QUFESixpQkFHQSxPQUFPLFFBQVA7QUFyTE87QUFBQTtBQUFBLEtBQWY7O0FBeUxBOztBQUVBLFFBQUksYUFBYTs7QUFFYixjQUFNLFlBRk87QUFHYixnQkFBUSxZQUhLO0FBSWIscUJBQWEsSUFKQSxFQUlNO0FBQ25CLHFCQUFhLElBTEE7QUFNYixtQkFBVyxJQU5FO0FBT2IsZ0JBQVE7QUFDSixvQkFBUSxxR0FESjtBQUVKLG1CQUFPLDJCQUZIO0FBR0osbUJBQU8sdUJBSEg7QUFJSixtQkFBTyxDQUNILDJCQURHLEVBRUgsdUNBRkc7QUFKSCxTQVBLO0FBZ0JiLGVBQU87QUFDSCxzQkFBVTtBQUNOLHVCQUFPLENBQ0gsb0NBREcsRUFFSCxrQkFGRyxFQUdILHFCQUhHLEVBSUgsbUJBSkcsRUFLSCxxQkFMRyxFQU1ILG9CQU5HLEVBT0gsa0JBUEcsRUFRSCxrQkFSRyxFQVNILGlCQVRHLEVBVUgsaUJBVkc7QUFERCxhQURQO0FBZUgsdUJBQVc7QUFDUCx1QkFBTyxDQUNILGdCQURHLEVBRUgsZUFGRyxFQUdILDBCQUhHLEVBSUgsd0JBSkcsRUFLSCx1QkFMRyxFQU1ILGlDQU5HLEVBT0gsK0JBUEcsRUFRSCx3Q0FSRyxFQVNILHlDQVRHLEVBVUgsMENBVkcsRUFXSCwyQ0FYRyxFQVlILDBCQVpHLEVBYUgsa0NBYkcsRUFjSCwyQ0FkRyxFQWVILHlDQWZHLEVBZ0JILHVDQWhCRyxFQWlCSCwyQ0FqQkcsRUFrQkgsNENBbEJHLEVBbUJILDBDQW5CRyxFQW9CSCw0Q0FwQkcsRUFxQkgsNENBckJHLEVBc0JILDZDQXRCRyxFQXVCSCwyQ0F2QkcsRUF3QkgsNkJBeEJHLEVBeUJILDZCQXpCRyxFQTBCSCwyQkExQkcsRUEyQkgsNkJBM0JHLEVBNEJILDZCQTVCRyxFQTZCSCwyQkE3QkcsRUE4QkgsbUNBOUJHLEVBK0JILDJDQS9CRyxFQWdDSCx5Q0FoQ0csRUFpQ0gsdUNBakNHLEVBa0NILDJDQWxDRyxFQW1DSCw0Q0FuQ0csRUFvQ0gsMENBcENHLEVBcUNILDRDQXJDRyxFQXNDSCw0Q0F0Q0csRUF1Q0gsNkNBdkNHLEVBd0NILDJDQXhDRyxFQXlDSCw0QkF6Q0csRUEwQ0gsd0JBMUNHLEVBMkNILHdCQTNDRyxFQTRDSCxvQkE1Q0csRUE2Q0gsa0NBN0NHLEVBOENILHdDQTlDRyxFQStDSCxrQ0EvQ0csRUFnREgseUJBaERHLEVBaURILDZCQWpERyxFQWtESCwwQkFsREcsRUFtREgsY0FuREcsRUFvREgscUJBcERHLEVBcURILGdDQXJERyxFQXNESCxnQ0F0REcsRUF1REgsaUNBdkRHLEVBd0RILCtCQXhERyxDQURBO0FBMkRQLHdCQUFRLENBQ0osT0FESSxFQUVKLGdCQUZJLEVBR0osdUJBSEksRUFJSixvQkFKSSxFQUtKLGlCQUxJLEVBTUosUUFOSSxFQU9KLG1CQVBJLEVBUUosMkJBUkksRUFTSiwyQ0FUSSxFQVVKLGdEQVZJLEVBV0osMkNBWEksRUFZSixnREFaSSxFQWFKLHNCQWJJLEVBY0oscUJBZEksRUFlSixvQ0FmSSxFQWdCSixvQ0FoQkksQ0EzREQ7QUE2RVAsdUJBQU8sQ0FDSCx1QkFERyxFQUVILG1CQUZHLEVBR0gscUNBSEcsRUFJSCx1QkFKRyxFQUtILHVCQUxHLEVBTUgsMkJBTkcsRUFPSCw0QkFQRyxFQVFILHlDQVJHLEVBU0gscUNBVEcsRUFVSCx5Q0FWRyxFQVdILGdDQVhHLEVBWUgsNkJBWkcsRUFhSCxtQkFiRyxFQWNILHdCQWRHLEVBZUgsOEJBZkcsRUFnQkgsc0JBaEJHLEVBaUJILDBDQWpCRyxFQWtCSCxrQ0FsQkcsQ0E3RUE7QUFpR1AsMEJBQVUsQ0FDTixpQkFETSxFQUVOLGFBRk0sRUFHTixpRUFITSxFQUlOLG9EQUpNLEVBS04sb0NBTE0sRUFNTixvQ0FOTSxFQU9OLGlFQVBNLEVBUU4sK0JBUk0sRUFTTiw0QkFUTSxFQVVOLDJCQVZNLEVBV04sdUNBWE0sRUFZTiwwREFaTTtBQWpHSDtBQWZSLFNBaEJNO0FBZ0piLG1CQUFXO0FBQ1AsdUJBQVcsRUFBRSxNQUFNLFNBQVIsRUFBbUIsVUFBVSxTQUE3QixFQUF3QyxRQUFRLEtBQWhELEVBQXVELFNBQVMsS0FBaEU7QUFESixTQWhKRTs7QUFvSlAsb0JBcEpPO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBcUpZLFNBQUssaUNBQUwsRUFySlo7QUFBQTtBQXFKTCx3QkFySks7QUFzSkwsdUJBdEpLLEdBc0pLLFNBQVMsU0FBVCxDQXRKTDtBQXVKTCxvQkF2SkssR0F1SkU7QUFDUCw0QkFBUSxRQUFRLHNCQUFSLENBREQ7QUFFUCw0QkFBUSxRQUFRLG9CQUFSLENBRkQ7QUFHUCw2QkFBUyxRQUFRLGtCQUFSO0FBSEYsaUJBdkpGO0FBNEpMLG9CQTVKSyxHQTRKRTtBQUNQLDRCQUFRLFFBQVEsc0JBQVIsQ0FERDtBQUVQLDRCQUFRLFFBQVEsb0JBQVIsQ0FGRDtBQUdQLDZCQUFTLFFBQVEsa0JBQVI7QUFIRixpQkE1SkY7QUFpS0wsc0JBaktLLEdBaUtJO0FBQ1QsNEJBQVEsT0FEQztBQUVULDJCQUFPLElBRkU7QUFHVCwyQkFBTztBQUhFLGlCQWpLSjs7QUFzS1QsdUJBQU8sTUFBUDtBQXRLUztBQUFBO0FBeUtQLHNCQXpLTywwQkF5S1MsTUF6S1Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQXlLaUIsc0JBektqQixtRkF5SzBCLEVBeksxQjtBQUFBLHVCQTBLUSxTQUFLLDBCQUFMLENBQWlDLE1BQWpDLENBMUtSO0FBQUE7QUEwS0wsb0JBMUtLO0FBQUEsdUJBMktRLFNBQUssMEJBQUwsQ0FBaUMsTUFBakMsQ0EzS1I7QUFBQTtBQTJLTCxvQkEzS0s7QUE0S0wseUJBNUtLLEdBNEtPO0FBQ1osNEJBQVEsS0FBSyxTQUFMLENBREk7QUFFWiw0QkFBUSxLQUFLLFNBQUw7QUFGSSxpQkE1S1A7QUFnTEwseUJBaExLLEdBZ0xPLFNBQUssWUFBTCxFQWhMUDtBQWlMTCxzQkFqTEssR0FpTEk7QUFDVCw0QkFBUSxFQURDO0FBRVQsNEJBQVEsRUFGQztBQUdULGlDQUFhLFNBSEo7QUFJVCxnQ0FBWSxTQUFLLE9BQUwsQ0FBYyxTQUFkO0FBSkgsaUJBakxKO0FBdUxMLHFCQXZMSyxHQXVMRyxDQUFFLE1BQUYsRUFBVSxNQUFWLENBdkxIOztBQXdMVCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLE1BQU0sTUFBMUIsRUFBa0MsR0FBbEMsRUFBdUM7QUFDL0Isd0JBRCtCLEdBQ3hCLE1BQU0sQ0FBTixDQUR3QjtBQUUvQiwwQkFGK0IsR0FFdEIsVUFBVSxJQUFWLENBRnNCOztBQUduQyx5QkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLE9BQU8sTUFBM0IsRUFBbUMsR0FBbkMsRUFBd0M7QUFDaEMsNkJBRGdDLEdBQ3hCLE9BQU8sQ0FBUCxDQUR3QjtBQUVoQyw2QkFGZ0MsR0FFeEIsTUFBTSxNQUFOLENBRndCO0FBR2hDLDhCQUhnQyxHQUd2QixNQUFNLEtBQU4sQ0FIdUI7O0FBSXBDLCtCQUFPLElBQVAsRUFBYSxJQUFiLENBQW1CLENBQUUsS0FBRixFQUFTLE1BQVQsQ0FBbkI7QUFDSDtBQUNKO0FBQ0QsdUJBQU8sTUFBUDtBQWxNUztBQUFBO0FBcU1QLG1CQXJNTyx1QkFxTU0sTUFyTU47QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQXNNWSxTQUFLLHVCQUFMLEVBdE1aO0FBQUE7QUFzTUwsd0JBdE1LO0FBdU1MLHNCQXZNSyxHQXVNSSxTQUFTLFNBQVQsQ0F2TUo7QUF3TUwseUJBeE1LLEdBd01PLE9BQU8sV0FBUCxDQXhNUDs7QUF5TVQsdUJBQU87QUFDSCxpQ0FBYSxTQURWO0FBRUgsZ0NBQVksU0FBSyxPQUFMLENBQWMsU0FBZCxDQUZUO0FBR0gsNEJBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQUhMO0FBSUgsMkJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQUpKO0FBS0gsMkJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQUxKO0FBTUgsMkJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQU5KO0FBT0gsNEJBQVEsU0FQTDtBQVFILDRCQUFRLFdBQVksT0FBTyxNQUFQLENBQVosQ0FSTDtBQVNILDZCQUFTLFNBVE47QUFVSCw2QkFBUyxTQVZOO0FBV0gsNEJBQVEsV0FBWSxPQUFPLFdBQVAsQ0FBWixDQVhMO0FBWUgsOEJBQVUsU0FaUDtBQWFILGtDQUFjLFNBYlg7QUFjSCwrQkFBVyxTQWRSO0FBZUgsa0NBQWMsV0FBWSxPQUFPLFlBQVAsQ0FBWixDQWZYO0FBZ0JILG1DQUFlLFdBQVksT0FBTyxZQUFQLENBQVosQ0FoQlo7QUFpQkgsNEJBQVE7QUFqQkwsaUJBQVA7QUF6TVM7QUFBQTtBQThOUCxtQkE5Tk8sdUJBOE5NLE1BOU5OO0FBQUE7QUFBQTtBQUFBOztBQThOYyxrQkE5TmQsbUZBOE51QixFQTlOdkI7O0FBK05ULG1CQUFPLFNBQUssdUJBQUwsQ0FBOEIsTUFBOUIsQ0FBUDtBQS9OUztBQWtPUCxtQkFsT08sdUJBa09NLE1BbE9OLEVBa09jLElBbE9kLEVBa09vQixJQWxPcEIsRUFrTzBCLE1BbE8xQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFrT2tDLHFCQWxPbEMsbUZBa08wQyxTQWxPMUM7QUFrT3FELHNCQWxPckQsbUZBa084RCxFQWxPOUQ7QUFtT0wsc0JBbk9LLEdBbU9JLHdCQW5PSjtBQW9PTCxxQkFwT0ssR0FvT0csRUFwT0g7O0FBcU9ULG9CQUFJLFFBQVEsUUFBWixFQUFzQjtBQUNsQiw4QkFBVSxZQUFZLFNBQUssVUFBTCxDQUFpQixJQUFqQixDQUF0QjtBQUNBLHdCQUFJLFFBQVEsS0FBWjtBQUNJLDhCQUFNLFNBQU4sSUFBbUIsTUFBbkI7QUFESjtBQUdJLDhCQUFNLFFBQU4sSUFBa0IsTUFBbEI7QUFISjtBQUlILGlCQU5ELE1BTU87QUFDQyw2QkFERCxHQUNjLFFBQVEsS0FBVCxHQUFrQixLQUFsQixHQUEwQixLQUR2Qzs7QUFFSCw4QkFBVSxZQUFZLEtBQXRCO0FBQ0EsMEJBQU0sTUFBTixJQUFnQixLQUFoQjtBQUNBLDBCQUFNLEtBQU4sSUFBZSxNQUFmO0FBQ0g7QUFoUFEsdUJBaVBZLFNBQUssTUFBTCxFQUFjLEtBQUssTUFBTCxDQUFhLEtBQWIsRUFBb0IsTUFBcEIsQ0FBZCxDQWpQWjtBQUFBO0FBaVBMLHdCQWpQSzs7QUFrUFQsdUJBQU87QUFDSCw0QkFBUSxRQURMO0FBRUgsMEJBQU0sU0FBUyxTQUFULEVBQW9CLFNBQXBCO0FBRkgsaUJBQVA7QUFsUFM7QUFBQTtBQXdQUCxtQkF4UE8sdUJBd1BNLEVBeFBOO0FBQUE7QUFBQTs7QUF5UFQsa0JBQU0sSUFBSSxhQUFKLENBQW1CLFNBQUssRUFBTCxHQUFVLDhDQUE3QixDQUFOO0FBQ0ksa0JBMVBLLEdBMFBJLDJDQTFQSixFQTBQaUQ7O0FBQzFELG1CQUFPLFNBQUssTUFBTCxFQUFjLEVBQUUsV0FBVyxFQUFiLEVBQWQsQ0FBUDtBQTNQUztBQThQUCxlQTlQTyxtQkE4UEUsSUE5UEY7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBOFBRLG1CQTlQUixtRkE4UGMsUUE5UGQ7QUE4UHdCLHNCQTlQeEIsbUZBOFBpQyxLQTlQakM7QUE4UHdDLHNCQTlQeEMsbUZBOFBpRCxFQTlQakQ7QUE4UHFELHVCQTlQckQsbUZBOFArRCxTQTlQL0Q7QUE4UDBFLG9CQTlQMUUsbUZBOFBpRixTQTlQakY7QUErUEwsbUJBL1BLLEdBK1BDLFNBQUssSUFBTCxDQUFVLEtBQVYsSUFBbUIsR0FBbkIsR0FBeUIsU0FBSyxPQUE5QixHQUF3QyxHQUF4QyxHQUE4QyxTQUFLLGFBQUwsQ0FBb0IsSUFBcEIsRUFBMEIsTUFBMUIsQ0EvUC9DO0FBZ1FMLHFCQWhRSyxHQWdRRyxTQUFLLElBQUwsQ0FBVyxNQUFYLEVBQW1CLFNBQUssYUFBTCxDQUFvQixJQUFwQixDQUFuQixDQWhRSDs7QUFpUVQsb0JBQUksT0FBTyxTQUFYLEVBQXNCO0FBQ2xCLDhCQUFVLEVBQUUsaUJBQWlCLFNBQUssTUFBeEIsRUFBVjtBQUNBLHdCQUFJLE9BQU8sSUFBUCxDQUFhLEtBQWIsRUFBb0IsTUFBeEIsRUFBZ0M7QUFDNUIsK0JBQU8sU0FBSyxJQUFMLENBQVcsS0FBWCxDQUFQO0FBQ0EsZ0NBQVEsY0FBUixJQUEwQixrQkFBMUI7QUFDSDtBQUNKO0FBdlFRLHVCQXdRWSxTQUFLLEtBQUwsQ0FBWSxHQUFaLEVBQWlCLE1BQWpCLEVBQXlCLE9BQXpCLEVBQWtDLElBQWxDLENBeFFaO0FBQUE7QUF3UUwsd0JBeFFLO0FBQUEsMEJBeVFMLGFBQWEsUUF6UVI7O0FBMFFMLCtCQUFJLFNBQVMsU0FBVCxDQUFKO0FBQ0ksMkJBQU8sUUFBUDtBQURKO0FBRUosMEJBQU0sSUFBSSxhQUFKLENBQW1CLFNBQUssRUFBTCxHQUFVLEdBQVYsR0FBZ0IsU0FBSyxJQUFMLENBQVcsUUFBWCxDQUFuQyxDQUFOO0FBRkk7QUExUUs7QUFBQTtBQUFBLEtBQWpCOztBQWdSQTs7QUFFQSxRQUFJLFdBQVc7O0FBRVgsY0FBTSxVQUZLO0FBR1gsZ0JBQVEsVUFIRztBQUlYLHFCQUFhLElBSkYsRUFJUTtBQUNuQixxQkFBYSxJQUxGO0FBTVgsZ0JBQVE7QUFDSixvQkFBUSxxR0FESjtBQUVKLG1CQUFPO0FBQ0gsMEJBQVUsb0NBRFA7QUFFSCwyQkFBVztBQUZSLGFBRkg7QUFNSixtQkFBTyw2QkFOSDtBQU9KLG1CQUFPO0FBUEgsU0FORztBQWVYLGVBQU87QUFDSCxzQkFBVTtBQUNOLHVCQUFPLENBQ0gsUUFERztBQURELGFBRFA7QUFNSCx1QkFBVztBQUNQLHdCQUFRLENBQ0osUUFESSxFQUVKLGdCQUZJLEVBR0osaUJBSEksRUFJSixjQUpJLEVBS0osV0FMSSxFQU1KLFlBTkksRUFPSixhQVBJLEVBUUosV0FSSSxFQVNKLFFBVEksRUFVSixTQVZJLEVBV0osZUFYSSxFQVlKLGdCQVpJO0FBREQ7QUFOUixTQWZJO0FBc0NYLG1CQUFXO0FBQ1AsdUJBQVcsRUFBRSxNQUFNLEtBQVIsRUFBZSxVQUFVLFNBQXpCLEVBQW9DLFFBQVEsS0FBNUMsRUFBbUQsU0FBUyxLQUE1RCxFQURKO0FBRVAsdUJBQVcsRUFBRSxNQUFNLEtBQVIsRUFBZSxVQUFVLFNBQXpCLEVBQW9DLFFBQVEsS0FBNUMsRUFBbUQsU0FBUyxLQUE1RCxFQUZKO0FBR1Asd0JBQVksRUFBRSxNQUFNLE1BQVIsRUFBZ0IsVUFBVSxVQUExQixFQUFzQyxRQUFRLE1BQTlDLEVBQXNELFNBQVMsS0FBL0Q7QUFITCxTQXRDQTs7QUE0Q0wsb0JBNUNLO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBNkNjLFNBQUsscUJBQUwsRUE3Q2Q7QUFBQTtBQTZDSCx3QkE3Q0c7QUE4Q0gsc0JBOUNHLEdBOENNLEVBQUUsUUFBUSxRQUFWLEVBOUNOOztBQStDUCxvQkFBSSxhQUFhLFFBQWpCLEVBQTJCO0FBQ25CLDRCQURtQixHQUNSLFNBQVMsU0FBVCxDQURRO0FBRW5CLDhCQUZtQixHQUVOLE9BQU8sSUFBUCxDQUFhLFFBQWIsQ0FGTTs7QUFHdkIseUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxXQUFXLE1BQS9CLEVBQXVDLEdBQXZDLEVBQTRDO0FBQ3BDLGdDQURvQyxHQUN6QixXQUFXLENBQVgsQ0FEeUI7QUFFcEMsaUNBRm9DLEdBRXhCLFNBQVMsV0FBVCxFQUZ3QjtBQUdwQywrQkFIb0MsR0FHMUI7QUFDVixvQ0FBUSxTQUFTLFFBQVQsQ0FERTtBQUVWLG9DQUFRLFNBRkU7QUFHVixxQ0FBUyxTQUFTLFFBQVQ7QUFIQyx5QkFIMEI7O0FBUXhDLDRCQUFJLGFBQWEsS0FBakI7QUFDSSx3Q0FBWSxNQUFaO0FBREoseUJBRUEsT0FBTyxTQUFQLElBQW9CLE9BQXBCO0FBQ0g7QUFDSjtBQUNELHVCQUFPLE1BQVA7QUEvRE87QUFBQTtBQWtFTCxzQkFsRUssMEJBa0VXLE1BbEVYO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQWtFbUIsc0JBbEVuQixtRkFrRTRCLEVBbEU1QjtBQW1FSCxpQkFuRUcsR0FtRUMsU0FBSyxNQUFMLENBQWEsTUFBYixDQW5FRDtBQUFBLHVCQW9FZSxTQUFLLGlCQUFMLENBQXdCLFNBQUssTUFBTCxDQUFhO0FBQ3ZELGdDQUFZLEVBQUUsSUFBRjtBQUQyQyxpQkFBYixFQUUzQyxNQUYyQyxDQUF4QixDQXBFZjtBQUFBO0FBb0VILHlCQXBFRztBQXVFSCx5QkF2RUcsR0F1RVMsU0FBSyxZQUFMLEVBdkVUO0FBd0VILHNCQXhFRyxHQXdFTTtBQUNULDRCQUFRLEVBREM7QUFFVCw0QkFBUSxFQUZDO0FBR1QsaUNBQWEsU0FISjtBQUlULGdDQUFZLFNBQUssT0FBTCxDQUFjLFNBQWQ7QUFKSCxpQkF4RU47QUE4RUgscUJBOUVHLEdBOEVLLEVBQUUsUUFBUSxXQUFWLEVBQXVCLFFBQVEsWUFBL0IsRUE5RUw7QUErRUgsb0JBL0VHLEdBK0VJLE9BQU8sSUFBUCxDQUFhLEtBQWIsQ0EvRUo7O0FBZ0ZQLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksS0FBSyxNQUF6QixFQUFpQyxHQUFqQyxFQUFzQztBQUM5Qix1QkFEOEIsR0FDeEIsS0FBSyxDQUFMLENBRHdCO0FBRTlCLHdCQUY4QixHQUV2QixNQUFNLEdBQU4sQ0FGdUI7QUFHOUIsMEJBSDhCLEdBR3JCLFVBQVUsSUFBVixDQUhxQjs7QUFJbEMseUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxPQUFPLE1BQTNCLEVBQW1DLEdBQW5DLEVBQXdDO0FBQ2hDLDZCQURnQyxHQUN4QixPQUFPLENBQVAsQ0FEd0I7QUFFaEMsNkJBRmdDLEdBRXhCLFdBQVksTUFBTSxNQUFOLENBQVosQ0FGd0I7QUFHaEMsOEJBSGdDLEdBR3ZCLFdBQVksTUFBTSxRQUFOLENBQVosQ0FIdUI7O0FBSXBDLCtCQUFPLEdBQVAsRUFBWSxJQUFaLENBQWtCLENBQUUsS0FBRixFQUFTLE1BQVQsQ0FBbEI7QUFDSDtBQUNKO0FBQ0QsdUJBQU8sTUFBUCxJQUFpQixTQUFLLE1BQUwsQ0FBYSxPQUFPLE1BQVAsQ0FBYixFQUE2QixDQUE3QixFQUFnQyxJQUFoQyxDQUFqQjtBQUNBLHVCQUFPLE1BQVAsSUFBaUIsU0FBSyxNQUFMLENBQWEsT0FBTyxNQUFQLENBQWIsRUFBNkIsQ0FBN0IsQ0FBakI7QUFDQSx1QkFBTyxNQUFQO0FBN0ZPO0FBQUE7QUFnR0wsbUJBaEdLLHVCQWdHUSxNQWhHUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkFpR2MsU0FBSyxlQUFMLEVBakdkO0FBQUE7QUFpR0gsd0JBakdHO0FBa0dILGtCQWxHRyxHQWtHRSxTQUFLLFFBQUwsQ0FBZSxNQUFmLENBbEdGOztBQW1HUCxxQkFBSyxHQUFHLFdBQUgsRUFBTDtBQUNJLHNCQXBHRyxHQW9HTSxTQUFTLFFBQVQsRUFBbUIsRUFBbkIsQ0FwR047QUFxR0gseUJBckdHLEdBcUdTLFNBQUssWUFBTCxFQXJHVDs7QUFzR1AsdUJBQU87QUFDSCxpQ0FBYSxTQURWO0FBRUgsZ0NBQVksU0FBSyxPQUFMLENBQWMsU0FBZCxDQUZUO0FBR0gsNEJBQVEsU0FITDtBQUlILDJCQUFPLFNBSko7QUFLSCwyQkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBTEo7QUFNSCwyQkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBTko7QUFPSCw0QkFBUSxTQVBMO0FBUUgsNEJBQVEsU0FSTDtBQVNILDZCQUFTLFNBVE47QUFVSCw2QkFBUyxTQVZOO0FBV0gsNEJBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQVhMO0FBWUgsOEJBQVUsU0FaUDtBQWFILGtDQUFjLFNBYlg7QUFjSCwrQkFBVyxTQWRSO0FBZUgsa0NBQWMsU0FmWDtBQWdCSCxtQ0FBZSxTQWhCWjtBQWlCSCw0QkFBUTtBQWpCTCxpQkFBUDtBQXRHTztBQUFBO0FBMkhMLG1CQTNISyx1QkEySFEsTUEzSFI7QUFBQTtBQUFBO0FBQUE7O0FBMkhnQixrQkEzSGhCLG1GQTJIeUIsRUEzSHpCOztBQTRIUCxtQkFBTyxTQUFLLHdCQUFMLENBQStCLFNBQUssTUFBTCxDQUFhO0FBQy9DLDRCQUFZLFNBQUssUUFBTCxDQUFlLE1BQWY7QUFEbUMsYUFBYixFQUVuQyxNQUZtQyxDQUEvQixDQUFQO0FBNUhPO0FBaUlMLG1CQWpJSyx1QkFpSVEsTUFqSVIsRUFpSWdCLElBakloQixFQWlJc0IsSUFqSXRCLEVBaUk0QixNQWpJNUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBaUlvQyxpQkFqSXBDLG1GQWlJNEMsU0FqSTVDO0FBaUl1RCxrQkFqSXZELG1GQWlJZ0UsRUFqSWhFO0FBa0lILGtCQWxJRyxHQWtJTSxrQkFBa0IsU0FBSyxVQUFMLENBQWlCLElBQWpCLENBbEl4Qjs7QUFtSVAsZ0JBQUksUUFBUSxRQUFaO0FBQ0ksc0JBQU0sSUFBSSxhQUFKLENBQW1CLFNBQUssRUFBTCxHQUFVLDJCQUE3QixDQUFOO0FBREosYUFFSSxLQXJJRyxHQXFJSztBQUNSLDRCQUFZLFNBQUssUUFBTCxDQUFlLE1BQWYsQ0FESjtBQUVSLDBCQUFVLE1BRkY7QUFHUix3QkFBUTtBQUhBLGFBcklMOztBQTBJUCxtQkFBTyxTQUFLLE1BQUwsRUFBYyxTQUFLLE1BQUwsQ0FBYSxLQUFiLEVBQW9CLE1BQXBCLENBQWQsQ0FBUDtBQTFJTztBQTZJTCxtQkE3SUssdUJBNklRLEVBN0lSO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBNklZLGtCQTdJWixtRkE2SXFCLEVBN0lyQjs7QUE4SVAsa0JBQU0sSUFBSSxhQUFKLENBQW1CLFNBQUssRUFBTCxHQUFVLDhDQUE3QixDQUFOO0FBQ0ksa0JBL0lHLEdBK0lNLGtCQS9JTjs7QUFnSlAsbUJBQU8sU0FBSyxNQUFMLEVBQWMsRUFBRSxNQUFNLEVBQVIsRUFBZCxDQUFQO0FBaEpPO0FBbUpMLGVBbkpLLG1CQW1KSSxJQW5KSjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFtSlUsZUFuSlYsbUZBbUpnQixRQW5KaEI7QUFtSjBCLGtCQW5KMUIsbUZBbUptQyxLQW5KbkM7QUFtSjBDLGtCQW5KMUMsbUZBbUptRCxFQW5KbkQ7QUFtSnVELG1CQW5KdkQsbUZBbUppRSxTQW5KakU7QUFtSjRFLGdCQW5KNUUsbUZBbUptRixTQW5KbkY7O0FBb0pQLGdCQUFJLENBQUMsU0FBSyxNQUFWO0FBQ0ksc0JBQU0sSUFBSSxtQkFBSixDQUF5QixTQUFLLEVBQUwsR0FBVSxtQ0FBbkMsQ0FBTjtBQURKLGFBRUksR0F0SkcsR0FzSkcsU0FBSyxJQUFMLENBQVUsS0FBVixFQUFpQixHQUFqQixJQUF3QixHQUF4QixHQUE4QixJQXRKakM7O0FBdUpQLGdCQUFJLE9BQU8sU0FBWCxFQUFzQjtBQUNkLHFCQURjLEdBQ04sU0FBSyxLQUFMLEVBRE07O0FBRWxCLHVCQUFPLFNBQUssSUFBTCxDQUFXLFNBQUssTUFBTCxDQUFhLEVBQUUsU0FBUyxLQUFYLEVBQWIsRUFBaUMsTUFBakMsQ0FBWCxDQUFQO0FBQ0EsMEJBQVU7QUFDTixvQ0FBZ0Isa0JBRFY7QUFFTixzQ0FBa0IsS0FBSyxNQUZqQjtBQUdOLDJCQUFPLFNBQUssTUFITjtBQUlOLDRCQUFRLFNBQUssSUFBTCxDQUFXLFNBQUssTUFBTCxDQUFhLElBQWIsQ0FBWCxFQUErQixTQUFLLE1BQUwsQ0FBYSxTQUFLLE1BQWxCLENBQS9CLEVBQTBELFFBQTFEO0FBSkYsaUJBQVY7QUFNSDtBQUNELG1CQUFPLFNBQUssS0FBTCxDQUFZLEdBQVosRUFBaUIsTUFBakIsRUFBeUIsT0FBekIsRUFBa0MsSUFBbEMsQ0FBUDtBQWpLTztBQUFBLEtBQWY7O0FBcUtBOztBQUVBLFFBQUksWUFBWTs7QUFFWixjQUFNLFdBRk07QUFHWixnQkFBUSxXQUhJO0FBSVoscUJBQWEsSUFKRDtBQUtaLHFCQUFhLElBTEQsRUFLTztBQUNuQiwyQkFBbUIsSUFOUDtBQU9aLGdCQUFRO0FBQ0osb0JBQVEscUdBREo7QUFFSixtQkFBTyxpQ0FGSDtBQUdKLG1CQUFPLDZCQUhIO0FBSUosbUJBQU8sQ0FDSCw4Q0FERyxFQUVILDhDQUZHO0FBSkgsU0FQSTtBQWdCWixlQUFPO0FBQ0gsc0JBQVU7QUFDTix1QkFBTyxDQUNILGVBREcsRUFFSCxlQUZHLEVBR0gsWUFIRyxFQUlILGlCQUpHLEVBS0gsb0JBTEcsRUFNSCx5QkFORyxFQU9ILGdCQVBHLEVBUUgsd0JBUkcsRUFTSCx1QkFURyxFQVVILCtCQVZHLEVBV0gsc0JBWEcsRUFZSCw4QkFaRyxFQWFILG9DQWJHO0FBREQsYUFEUDtBQWtCSCx1QkFBVztBQUNQLHdCQUFRLENBQ0osYUFESSxFQUVKLFlBRkksRUFHSixtQkFISSxFQUlKLGVBSkksRUFLSixpQkFMSSxFQU1KLGlCQU5JLEVBT0osV0FQSSxFQVFKLGFBUkksRUFTSixnQkFUSSxFQVVKLGdCQVZJO0FBREQ7QUFsQlIsU0FoQks7O0FBa0ROLG9CQWxETTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQW1EYSxTQUFLLGdCQUFMLEVBbkRiO0FBQUE7QUFtREosd0JBbkRJO0FBb0RKLHNCQXBESSxHQW9ESyxFQXBETDtBQXFESix1QkFyREksR0FxRE0sU0FBUyxNQUFULENBckROOztBQXNEUixxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFFBQVEsTUFBNUIsRUFBb0MsR0FBcEMsRUFBeUM7QUFDakMsMEJBRGlDLEdBQ3hCLFFBQVEsQ0FBUixDQUR3QjtBQUVqQyxzQkFGaUMsR0FFNUIsT0FBTyxhQUFQLENBRjRCO0FBR2pDLDBCQUhpQyxHQUd4QixPQUFPLE9BQVAsQ0FId0I7QUFBQSxxQ0FJZixPQUFPLEtBQVAsQ0FBYyxHQUFkLENBSmU7QUFBQTtBQUkvQix3QkFKK0I7QUFJekIseUJBSnlCOztBQUtyQywyQkFBTyxJQUFQLENBQWE7QUFDVCw4QkFBTSxFQURHO0FBRVQsa0NBQVUsTUFGRDtBQUdULGdDQUFRLElBSEM7QUFJVCxpQ0FBUyxLQUpBO0FBS1QsZ0NBQVE7QUFMQyxxQkFBYjtBQU9IO0FBQ0QsdUJBQU8sTUFBUDtBQW5FUTtBQUFBO0FBc0VOLHNCQXRFTSwwQkFzRVUsTUF0RVY7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBc0VrQixzQkF0RWxCLG1GQXNFMkIsRUF0RTNCO0FBQUEsdUJBdUVGLFNBQUssV0FBTCxFQXZFRTtBQUFBO0FBQUEsdUJBd0VhLFNBQUssdUJBQUwsQ0FBOEIsU0FBSyxNQUFMLENBQWE7QUFDNUQsMEJBQU0sU0FBSyxRQUFMLENBQWUsTUFBZjtBQURzRCxpQkFBYixFQUVoRCxNQUZnRCxDQUE5QixDQXhFYjtBQUFBO0FBd0VKLHdCQXhFSTtBQTJFSix5QkEzRUksR0EyRVEsU0FBUyxNQUFULENBM0VSO0FBNEVKLHlCQTVFSSxHQTRFUSxTQUFLLFlBQUwsRUE1RVI7QUE2RUosc0JBN0VJLEdBNkVLO0FBQ1QsNEJBQVEsRUFEQztBQUVULDRCQUFRLEVBRkM7QUFHVCxpQ0FBYSxTQUhKO0FBSVQsZ0NBQVksU0FBSyxPQUFMLENBQWMsU0FBZDtBQUpILGlCQTdFTDtBQW1GSixxQkFuRkksR0FtRkksRUFBRSxRQUFRLEtBQVYsRUFBaUIsUUFBUSxNQUF6QixFQW5GSjtBQW9GSixvQkFwRkksR0FvRkcsT0FBTyxJQUFQLENBQWEsS0FBYixDQXBGSDs7QUFxRlIscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxLQUFLLE1BQXpCLEVBQWlDLEdBQWpDLEVBQXNDO0FBQzlCLHVCQUQ4QixHQUN4QixLQUFLLENBQUwsQ0FEd0I7QUFFOUIsd0JBRjhCLEdBRXZCLE1BQU0sR0FBTixDQUZ1QjtBQUc5QiwwQkFIOEIsR0FHckIsVUFBVSxJQUFWLENBSHFCOztBQUlsQyx5QkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLE9BQU8sTUFBM0IsRUFBbUMsR0FBbkMsRUFBd0M7QUFDaEMsNkJBRGdDLEdBQ3hCLE9BQU8sQ0FBUCxDQUR3QjtBQUVoQyw2QkFGZ0MsR0FFeEIsV0FBWSxNQUFNLE9BQU4sQ0FBWixDQUZ3QjtBQUdoQyw4QkFIZ0MsR0FHdkIsV0FBWSxNQUFNLE9BQU4sQ0FBWixDQUh1Qjs7QUFJcEMsK0JBQU8sR0FBUCxFQUFZLElBQVosQ0FBa0IsQ0FBRSxLQUFGLEVBQVMsTUFBVCxDQUFsQjtBQUNIO0FBQ0o7QUFDRCx1QkFBTyxNQUFQO0FBaEdRO0FBQUE7QUFtR1osbUJBbkdZLHVCQW1HQyxNQW5HRCxFQW1HUyxNQW5HVCxFQW1HaUI7QUFDekIsZ0JBQUksWUFBWSxLQUFLLFlBQUwsRUFBaEI7QUFDQSxtQkFBTztBQUNILHdCQUFRLE1BREw7QUFFSCw2QkFBYSxTQUZWO0FBR0gsNEJBQVksS0FBSyxPQUFMLENBQWMsU0FBZCxDQUhUO0FBSUgsd0JBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQUpMO0FBS0gsdUJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQUxKO0FBTUgsdUJBQU8sV0FBWSxPQUFPLFVBQVAsQ0FBWixDQU5KO0FBT0gsdUJBQU8sV0FBWSxPQUFPLFVBQVAsQ0FBWixDQVBKO0FBUUgsd0JBQVEsU0FSTDtBQVNILHdCQUFRLFdBQVksT0FBTyxNQUFQLENBQVosQ0FUTDtBQVVILHlCQUFTLFdBQVksT0FBTyxPQUFQLENBQVosQ0FWTjtBQVdILHlCQUFTLFNBWE47QUFZSCx3QkFBUSxXQUFZLE9BQU8sV0FBUCxDQUFaLENBWkw7QUFhSCwwQkFBVSxXQUFZLE9BQU8sUUFBUCxDQUFaLENBYlA7QUFjSCw4QkFBYyxTQWRYO0FBZUgsMkJBQVcsU0FmUjtBQWdCSCw4QkFBYyxXQUFZLE9BQU8sWUFBUCxDQUFaLENBaEJYO0FBaUJILCtCQUFlLFdBQVksT0FBTyxRQUFQLENBQVo7QUFqQlosYUFBUDtBQW1CSCxTQXhIVztBQTBITixtQkExSE0sdUJBMEhPLE1BMUhQO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkEySEYsU0FBSyxXQUFMLEVBM0hFO0FBQUE7QUE0SEosaUJBNUhJLEdBNEhBLFNBQUssTUFBTCxDQUFhLE1BQWIsQ0E1SEE7QUFBQSx1QkE2SGEsU0FBSyxpQkFBTCxDQUF3QjtBQUN6QywwQkFBTSxFQUFFLElBQUY7QUFEbUMsaUJBQXhCLENBN0hiO0FBQUE7QUE2SEosd0JBN0hJO0FBZ0lKLHNCQWhJSSxHQWdJSyxTQUFTLE1BQVQsQ0FoSUw7O0FBaUlSLHVCQUFPLFNBQUssV0FBTCxDQUFrQixNQUFsQixFQUEwQixDQUExQixDQUFQO0FBaklRO0FBQUE7QUFvSU4sb0JBcElNO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBcUlGLFNBQUssV0FBTCxFQXJJRTtBQUFBO0FBQUEsdUJBc0lhLFNBQUssZ0JBQUwsRUF0SWI7QUFBQTtBQXNJSix3QkF0SUk7QUF1SUosc0JBdklJLEdBdUlLLEVBdklMO0FBd0lKLHVCQXhJSSxHQXdJTSxTQUFTLE1BQVQsQ0F4SU47O0FBeUlSLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksUUFBUSxNQUE1QixFQUFvQyxHQUFwQyxFQUF5QztBQUNqQywwQkFEaUMsR0FDeEIsUUFBUSxDQUFSLENBRHdCO0FBRWpDLHNCQUZpQyxHQUU1QixPQUFPLGFBQVAsQ0FGNEI7QUFHakMsMEJBSGlDLEdBR3hCLFNBQUssYUFBTCxDQUFtQixFQUFuQixDQUh3QjtBQUlqQywwQkFKaUMsR0FJeEIsT0FBTyxRQUFQLENBSndCOztBQUtyQywyQkFBTyxNQUFQLElBQWlCLFNBQUssV0FBTCxDQUFrQixNQUFsQixFQUEwQixNQUExQixDQUFqQjtBQUNIO0FBQ0QsdUJBQU8sTUFBUDtBQWhKUTtBQUFBO0FBbUpaLGtCQW5KWSxzQkFtSkEsS0FuSkEsRUFtSk8sTUFuSlAsRUFtSmU7QUFDdkIsZ0JBQUksWUFBWSxNQUFNLFdBQU4sSUFBcUIsSUFBckM7QUFDQSxtQkFBTztBQUNILHNCQUFNLFNBREg7QUFFSCx3QkFBUSxLQUZMO0FBR0gsNkJBQWEsU0FIVjtBQUlILDRCQUFZLEtBQUssT0FBTCxDQUFjLFNBQWQsQ0FKVDtBQUtILDBCQUFVLE9BQU8sUUFBUCxDQUxQO0FBTUgsd0JBQVEsU0FOTDtBQU9ILHdCQUFRLE1BQU0sTUFBTixFQUFjLFdBQWQsRUFQTDtBQVFILHlCQUFTLE1BQU0sT0FBTixDQVJOO0FBU0gsMEJBQVUsTUFBTSxRQUFOO0FBVFAsYUFBUDtBQVdILFNBaEtXO0FBa0tOLG1CQWxLTSx1QkFrS08sTUFsS1A7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFrS2Usc0JBbEtmLG1GQWtLd0IsRUFsS3hCO0FBQUEsdUJBbUtGLFNBQUssV0FBTCxFQW5LRTtBQUFBO0FBb0tKLGlCQXBLSSxHQW9LQSxTQUFLLE1BQUwsQ0FBYSxNQUFiLENBcEtBO0FBQUEsdUJBcUthLFNBQUssNkJBQUwsQ0FBb0MsU0FBSyxNQUFMLENBQWE7QUFDbEUsMEJBQU0sRUFBRSxJQUFGLENBRDREO0FBRWxFLDZCQUFTLEVBRnlELENBRXJEO0FBRnFELGlCQUFiLEVBR3RELE1BSHNELENBQXBDLENBcktiO0FBQUE7QUFxS0osd0JBcktJO0FBeUtKLHNCQXpLSSxHQXlLSyxTQUFTLE1BQVQsQ0F6S0w7O0FBMEtSLHVCQUFPLFNBQUssV0FBTCxDQUFrQixNQUFsQixFQUEwQixDQUExQixDQUFQO0FBMUtRO0FBQUE7QUE2S04sb0JBN0tNO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQThLRixTQUFLLFdBQUwsRUE5S0U7QUFBQTtBQUFBLHVCQStLYSxTQUFLLHFCQUFMLEVBL0tiO0FBQUE7QUErS0osd0JBL0tJO0FBZ0xKLHdCQWhMSSxHQWdMTyxTQUFTLE1BQVQsQ0FoTFA7QUFpTEosc0JBakxJLEdBaUxLLEVBQUUsUUFBUSxRQUFWLEVBakxMOztBQWtMUixxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFNBQVMsTUFBN0IsRUFBcUMsR0FBckMsRUFBMEM7QUFDbEMsMkJBRGtDLEdBQ3hCLFNBQVMsQ0FBVCxDQUR3QjtBQUVsQyw0QkFGa0MsR0FFdkIsUUFBUSxRQUFSLENBRnVCO0FBR2xDLDJCQUhrQyxHQUd4QjtBQUNWLGdDQUFRLFFBQVEsV0FBUixDQURFO0FBRVYsZ0NBQVEsU0FGRTtBQUdWLGlDQUFTLFFBQVEsT0FBUjtBQUhDLHFCQUh3Qjs7QUFRdEMsNEJBQVEsTUFBUixJQUFrQixRQUFRLE9BQVIsSUFBbUIsUUFBUSxNQUFSLENBQXJDO0FBQ0EsMkJBQU8sUUFBUCxJQUFtQixPQUFuQjtBQUNIO0FBQ0QsdUJBQU8sTUFBUDtBQTdMUTtBQUFBO0FBZ01OLG1CQWhNTSx1QkFnTU8sTUFoTVAsRUFnTWUsSUFoTWYsRUFnTXFCLElBaE1yQixFQWdNMkIsTUFoTTNCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBZ01tQyxxQkFoTW5DLG1GQWdNMkMsU0FoTTNDO0FBZ01zRCxzQkFoTXRELG1GQWdNK0QsRUFoTS9EO0FBQUEsdUJBaU1GLFNBQUssV0FBTCxFQWpNRTtBQUFBO0FBa01KLHFCQWxNSSxHQWtNSTtBQUNSLDhCQUFVLFNBQUssUUFBTCxDQUFlLE1BQWYsQ0FERjtBQUVSLDRCQUFRLFNBQUssVUFBTCxDQUFpQixJQUFqQixDQUZBO0FBR1IsNEJBQVEsS0FIQTtBQUlSLDhCQUFVO0FBSkYsaUJBbE1KO0FBQUEsdUJBd01hLFNBQUssc0JBQUwsQ0FBNkIsU0FBSyxNQUFMLENBQWEsS0FBYixFQUFvQixNQUFwQixDQUE3QixDQXhNYjtBQUFBO0FBd01KLHdCQXhNSTs7QUF5TVIsdUJBQU87QUFDSCw0QkFBUSxRQURMO0FBRUgsMEJBQU0sU0FBUyxNQUFULEVBQWlCLFNBQWpCLEVBQTRCLFFBQTVCO0FBRkgsaUJBQVA7QUF6TVE7QUFBQTtBQStNTixtQkEvTU0sdUJBK01PLEVBL01QO0FBQUE7O0FBQUE7QUFBQSx1QkFnTkYsU0FBSyxXQUFMLEVBaE5FO0FBQUE7QUFpTlIsdUJBQU8sU0FBSyxzQkFBTCxDQUE2QjtBQUNoQyw0QkFBUSxPQUR3QjtBQUVoQywrQkFBVztBQUZxQixpQkFBN0IsQ0FBUDtBQWpOUTtBQUFBO0FBdU5OLGVBdk5NLG1CQXVORyxJQXZOSDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBdU5TLG1CQXZOVCxtRkF1TmUsUUF2TmY7QUF1TnlCLHNCQXZOekIsbUZBdU5rQyxLQXZObEM7QUF1TnlDLHNCQXZOekMsbUZBdU5rRCxFQXZObEQ7QUF1TnNELHVCQXZOdEQsbUZBdU5nRSxTQXZOaEU7QUF1TjJFLG9CQXZOM0UsbUZBdU5rRixTQXZObEY7QUF3TkosbUJBeE5JLEdBd05FLFNBQUssSUFBTCxDQUFVLEtBQVYsSUFBbUIsR0FBbkIsR0FBeUIsU0FBSyxhQUFMLENBQW9CLElBQXBCLEVBQTBCLE1BQTFCLENBeE4zQjtBQXlOSixxQkF6TkksR0F5TkksU0FBSyxJQUFMLENBQVcsTUFBWCxFQUFtQixTQUFLLGFBQUwsQ0FBb0IsSUFBcEIsQ0FBbkIsQ0F6Tko7O0FBME5SLG9CQUFJLE9BQU8sUUFBWCxFQUFxQjtBQUNqQix3QkFBSSxPQUFPLElBQVAsQ0FBYSxLQUFiLEVBQW9CLE1BQXhCO0FBQ0ksK0JBQU8sTUFBTSxTQUFLLFNBQUwsQ0FBZ0IsS0FBaEIsQ0FBYjtBQURKO0FBRUgsaUJBSEQsTUFHTztBQUNDLHlCQURELEdBQ1MsU0FBSyxLQUFMLEdBQWMsUUFBZCxFQURUOztBQUVILDJCQUFPLFNBQUssSUFBTCxDQUFXLEtBQVgsQ0FBUDtBQUNJLHlCQUhELEdBR1EsU0FBSyxJQUFMLENBQVcsU0FBSyxNQUFMLENBQWEsSUFBYixDQUFYLEVBQStCLEtBQS9CLEVBQXNDLFFBQXRDLENBSFI7QUFJQywwQkFKRCxHQUlVLFNBQUssY0FBTCxDQUFxQixTQUFLLE1BQTFCLENBSlY7QUFLQyx1QkFMRCxHQUtPLFNBQUssa0JBQUwsQ0FBeUIsR0FBekIsQ0FMUDtBQU1DLDZCQU5ELEdBTWEsSUFBSSxXQUFKLEVBTmI7QUFPQywyQkFQRCxHQU9XLFNBQUssTUFBTCxHQUFjLE1BQWQsR0FBdUIsU0FBdkIsR0FBbUMsS0FBbkMsR0FBMkMsU0FBSyxjQUFMLENBQXFCLEtBQXJCLENBUHREO0FBUUMsNkJBUkQsR0FRYSxTQUFLLElBQUwsQ0FBVyxTQUFLLE1BQUwsQ0FBYSxPQUFiLENBQVgsRUFBa0MsTUFBbEMsRUFBMEMsUUFBMUMsRUFBb0QsUUFBcEQsQ0FSYjtBQVNDLHdCQVRELEdBU1EsU0FBUyxTQUFLLE1BQWQsR0FBdUIsR0FBdkIsR0FBNkIsU0FBSyxjQUFMLENBQXFCLFNBQXJCLENBQTdCLEdBQStELEdBQS9ELEdBQXFFLEtBVDdFOztBQVVILDhCQUFVO0FBQ04sd0NBQWdCLGtCQURWO0FBRU4sMENBQWtCLEtBQUssTUFGakI7QUFHTix5Q0FBaUI7QUFIWCxxQkFBVjtBQUtIO0FBNU9PLHVCQTZPYSxTQUFLLEtBQUwsQ0FBWSxHQUFaLEVBQWlCLE1BQWpCLEVBQXlCLE9BQXpCLEVBQWtDLElBQWxDLENBN09iO0FBQUE7QUE2T0osd0JBN09JO0FBQUEsMEJBOE9KLGFBQWEsUUE5T1Q7O0FBK09KLCtCQUFJLFNBQVMsU0FBVCxDQUFKO0FBQ0ksMkJBQU8sUUFBUDtBQURKO0FBRUosMEJBQU0sSUFBSSxhQUFKLENBQW1CLFNBQUssRUFBTCxHQUFVLEdBQVYsR0FBZ0IsU0FBSyxJQUFMLENBQVcsUUFBWCxDQUFuQyxDQUFOO0FBRkk7QUEvT0k7QUFBQTtBQUFBLEtBQWhCOztBQXFQQTs7QUFFQSxRQUFJLE1BQU07O0FBRU4sY0FBTSxLQUZBO0FBR04sZ0JBQVEsS0FIRjtBQUlOLHFCQUFhLElBSlA7QUFLTixxQkFBYSxJQUxQO0FBTU4sZ0JBQVE7QUFDSixvQkFBUSxxR0FESjtBQUVKLG1CQUFPO0FBQ0gsd0JBQVEscUJBREwsRUFDNkI7QUFDaEMsd0JBQVEscUJBRkwsRUFFNkI7QUFDaEMseUJBQVMsc0JBSE4sQ0FHOEI7QUFIOUIsYUFGSDtBQU9KLG1CQUFPLGdCQVBIO0FBUUosbUJBQU8sQ0FDSCxvQkFERyxFQUVILGdDQUZHLEVBR0gsaUNBSEcsRUFJSCxFQUpHO0FBUkgsU0FORjtBQXFCTixlQUFPO0FBQ0gsb0JBQVEsRUFBRTtBQUNOLHVCQUFPLENBQ0gsc0NBREcsRUFDcUM7QUFDeEMsNEJBRkcsRUFHSCxNQUhHLEVBSUgsaUNBSkcsRUFJZ0M7QUFDbkMsd0RBTEcsRUFNSCxhQU5HLEVBT0gsYUFQRztBQURILGFBREw7QUFZSCxvQkFBUSxFQUFFO0FBQ04sd0JBQVEsQ0FDSixTQURJLEVBRUosY0FGSSxFQUdKLGNBSEksRUFJSixjQUpJLEVBS0osY0FMSSxFQU1KLE9BTkksRUFPSixhQVBJO0FBREosYUFaTDtBQXVCSCxxQkFBUyxFQUFFO0FBQ1Asd0JBQVEsQ0FDSix5QkFESSxFQUVKLGdCQUZJLEVBR0osY0FISSxFQUlKLHNCQUpJLEVBS0osaUJBTEk7QUFESDtBQXZCTixTQXJCRDs7QUF1REEsb0JBdkRBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkF3RG1CLFNBQUssV0FBTCxFQXhEbkI7QUFBQTtBQXdERSx3QkF4REY7QUF5REUsb0JBekRGLEdBeURTLE9BQU8sSUFBUCxDQUFhLFNBQVMsT0FBVCxDQUFiLENBekRUO0FBMERFLHNCQTFERixHQTBEVyxFQTFEWDs7QUEyREYscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxLQUFLLE1BQXpCLEVBQWlDLEdBQWpDLEVBQXNDO0FBQzlCLHNCQUQ4QixHQUN6QixLQUFLLENBQUwsQ0FEeUI7QUFFOUIsMEJBRjhCLEdBRXJCLFNBQVMsT0FBVCxFQUFrQixFQUFsQixDQUZxQjtBQUc5Qix3QkFIOEIsR0FHdkIsR0FBRyxLQUFILENBQVUsQ0FBVixFQUFhLENBQWIsQ0FIdUI7QUFJOUIseUJBSjhCLEdBSXRCLEdBQUcsS0FBSCxDQUFVLENBQVYsRUFBYSxDQUFiLENBSnNCOztBQUtsQywyQkFBTyxLQUFLLFdBQUwsRUFBUDtBQUNBLDRCQUFRLE1BQU0sV0FBTixFQUFSO0FBQ0ksMEJBUDhCLEdBT3JCLE9BQU8sR0FBUCxHQUFhLEtBUFE7O0FBUWxDLDJCQUFPLElBQVAsQ0FBYTtBQUNULDhCQUFNLEVBREc7QUFFVCxrQ0FBVSxNQUZEO0FBR1QsZ0NBQVEsSUFIQztBQUlULGlDQUFTLEtBSkE7QUFLVCxnQ0FBUTtBQUxDLHFCQUFiO0FBT0g7QUFDRCx1QkFBTyxNQUFQO0FBM0VFO0FBQUE7QUE4RUEsb0JBOUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQStFSSxTQUFLLFdBQUwsRUEvRUo7QUFBQTtBQUFBLHVCQWdGbUIsU0FBSyxlQUFMLEVBaEZuQjtBQUFBO0FBZ0ZFLHdCQWhGRjtBQWlGRSx3QkFqRkYsR0FpRmEsU0FBUyxRQUFULENBakZiO0FBa0ZFLHNCQWxGRixHQWtGVyxFQUFFLFFBQVEsUUFBVixFQWxGWDtBQW1GRSwwQkFuRkYsR0FtRmUsT0FBTyxJQUFQLENBQWEsU0FBUyxPQUFULENBQWIsQ0FuRmY7O0FBb0ZGLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksV0FBVyxNQUEvQixFQUF1QyxHQUF2QyxFQUE0QztBQUNwQyw0QkFEb0MsR0FDekIsV0FBVyxDQUFYLENBRHlCO0FBRXBDLDJCQUZvQyxHQUUxQjtBQUNWLGdDQUFRLFNBQVMsT0FBVCxFQUFrQixRQUFsQixDQURFO0FBRVYsZ0NBQVEsU0FGRTtBQUdWLGlDQUFTLFNBQVMsT0FBVCxFQUFrQixRQUFsQjtBQUhDLHFCQUYwQjs7QUFPeEMsNEJBQVEsTUFBUixJQUFrQixRQUFRLE9BQVIsSUFBbUIsUUFBUSxNQUFSLENBQXJDO0FBQ0EsMkJBQU8sUUFBUCxJQUFtQixPQUFuQjtBQUNIO0FBQ0QsdUJBQU8sTUFBUDtBQTlGRTtBQUFBO0FBaUdBLHNCQWpHQSwwQkFpR2dCLE1BakdoQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBaUd3QixzQkFqR3hCLG1GQWlHaUMsRUFqR2pDO0FBQUEsdUJBa0dJLFNBQUssV0FBTCxFQWxHSjtBQUFBO0FBbUdFLGlCQW5HRixHQW1HTSxTQUFLLE1BQUwsQ0FBYSxNQUFiLENBbkdOO0FBQUEsdUJBb0dtQixTQUFLLGNBQUwsQ0FBcUIsU0FBSyxNQUFMLENBQWE7QUFDbkQsMEJBQU0sRUFBRSxJQUFGO0FBRDZDLGlCQUFiLEVBRXZDLE1BRnVDLENBQXJCLENBcEduQjtBQUFBO0FBb0dFLHdCQXBHRjtBQXVHRSx5QkF2R0YsR0F1R2MsU0FBUyxFQUFFLElBQUYsQ0FBVCxDQXZHZDtBQXdHRSx5QkF4R0YsR0F3R2MsU0FBSyxZQUFMLEVBeEdkO0FBeUdFLHNCQXpHRixHQXlHVztBQUNULDRCQUFRLEVBREM7QUFFVCw0QkFBUSxFQUZDO0FBR1QsaUNBQWEsU0FISjtBQUlULGdDQUFZLFNBQUssT0FBTCxDQUFjLFNBQWQ7QUFKSCxpQkF6R1g7QUErR0UscUJBL0dGLEdBK0dVLENBQUUsTUFBRixFQUFVLE1BQVYsQ0EvR1Y7O0FBZ0hGLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksTUFBTSxNQUExQixFQUFrQyxHQUFsQyxFQUF1QztBQUMvQix3QkFEK0IsR0FDeEIsTUFBTSxDQUFOLENBRHdCO0FBRS9CLDBCQUYrQixHQUV0QixVQUFVLElBQVYsQ0FGc0I7O0FBR25DLHlCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksT0FBTyxNQUEzQixFQUFtQyxHQUFuQyxFQUF3QztBQUNoQyw2QkFEZ0MsR0FDeEIsT0FBTyxDQUFQLENBRHdCO0FBRWhDLDZCQUZnQyxHQUV4QixNQUFNLENBQU4sQ0FGd0I7QUFHaEMsOEJBSGdDLEdBR3ZCLE1BQU0sQ0FBTixDQUh1Qjs7QUFJcEMsK0JBQU8sSUFBUCxFQUFhLElBQWIsQ0FBbUIsQ0FBRSxLQUFGLEVBQVMsTUFBVCxDQUFuQjtBQUNIO0FBQ0o7QUFDRCx1QkFBTyxNQUFQO0FBMUhFO0FBQUE7QUE2SEEsbUJBN0hBLHVCQTZIYSxNQTdIYjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkE4SEksU0FBSyxXQUFMLEVBOUhKO0FBQUE7QUErSEUsaUJBL0hGLEdBK0hNLFNBQUssTUFBTCxDQUFhLE1BQWIsQ0EvSE47QUFBQSx1QkFnSW1CLFNBQUssZUFBTCxDQUFzQjtBQUN2QywwQkFBTSxFQUFFLElBQUY7QUFEaUMsaUJBQXRCLENBaEluQjtBQUFBO0FBZ0lFLHdCQWhJRjtBQW1JRSxzQkFuSUYsR0FtSVcsU0FBUyxFQUFFLElBQUYsQ0FBVCxDQW5JWDtBQW9JRSx5QkFwSUYsR0FvSWMsT0FBTyxTQUFQLElBQW9CLElBcElsQzs7QUFxSUYsdUJBQU87QUFDSCxpQ0FBYSxTQURWO0FBRUgsZ0NBQVksU0FBSyxPQUFMLENBQWMsU0FBZCxDQUZUO0FBR0gsNEJBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQUhMO0FBSUgsMkJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQUpKO0FBS0gsMkJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQUxKO0FBTUgsMkJBQU8sV0FBWSxPQUFPLE1BQVAsQ0FBWixDQU5KO0FBT0gsNEJBQVEsU0FQTDtBQVFILDRCQUFRLFNBUkw7QUFTSCw2QkFBUyxTQVROO0FBVUgsNkJBQVMsU0FWTjtBQVdILDRCQUFRLFdBQVksT0FBTyxNQUFQLENBQVosQ0FYTDtBQVlILDhCQUFVLFNBWlA7QUFhSCxrQ0FBYyxTQWJYO0FBY0gsK0JBQVcsV0FBWSxPQUFPLEtBQVAsQ0FBWixDQWRSO0FBZUgsa0NBQWMsV0FBWSxPQUFPLEtBQVAsQ0FBWixDQWZYO0FBZ0JILG1DQUFlLFdBQVksT0FBTyxTQUFQLENBQVosQ0FoQlo7QUFpQkgsNEJBQVE7QUFqQkwsaUJBQVA7QUFySUU7QUFBQTtBQTBKQSxtQkExSkEsdUJBMEphLE1BMUpiO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBMEpxQixzQkExSnJCLG1GQTBKOEIsRUExSjlCO0FBQUEsdUJBMkpJLFNBQUssV0FBTCxFQTNKSjtBQUFBO0FBNEpGLHVCQUFPLFNBQUssZUFBTCxDQUFzQixTQUFLLE1BQUwsQ0FBYTtBQUN0QywwQkFBTSxTQUFLLFFBQUwsQ0FBZSxNQUFmO0FBRGdDLGlCQUFiLEVBRTFCLE1BRjBCLENBQXRCLENBQVA7QUE1SkU7QUFBQTtBQWlLQSxtQkFqS0EsdUJBaUthLE1BaktiLEVBaUtxQixJQWpLckIsRUFpSzJCLElBakszQixFQWlLaUMsTUFqS2pDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBaUt5QyxxQkFqS3pDLG1GQWlLaUQsU0FqS2pEO0FBaUs0RCxzQkFqSzVELG1GQWlLcUUsRUFqS3JFO0FBQUEsdUJBa0tJLFNBQUssV0FBTCxFQWxLSjtBQUFBO0FBbUtGLG9CQUFJLFFBQVEsUUFBWjtBQUNJLDBCQUFNLElBQUksYUFBSixDQUFtQixTQUFLLEVBQUwsR0FBVSwyQkFBN0IsQ0FBTjtBQURKLGlCQUVJLEtBcktGLEdBcUtVO0FBQ1IsNEJBQVEsU0FBSyxRQUFMLENBQWUsTUFBZixDQURBO0FBRVIsNEJBQVEsSUFGQTtBQUdSLDRCQUFRLEtBSEE7QUFJUiw4QkFBVTtBQUpGLGlCQXJLVjtBQUFBLHVCQTJLbUIsU0FBSyxhQUFMLENBQW9CLFNBQUssTUFBTCxDQUFhLEtBQWIsRUFBb0IsTUFBcEIsQ0FBcEIsQ0EzS25CO0FBQUE7QUEyS0Usd0JBM0tGOztBQTRLRix1QkFBTztBQUNILDRCQUFRLFFBREw7QUFFSCwwQkFBTSxTQUFTLFFBQVQsRUFBbUIsU0FBbkIsRUFBOEIsUUFBOUI7QUFGSCxpQkFBUDtBQTVLRTtBQUFBO0FBa0xBLG1CQWxMQSx1QkFrTGEsRUFsTGI7QUFBQTs7QUFBQTtBQUFBLHVCQW1MSSxTQUFLLFdBQUwsRUFuTEo7QUFBQTtBQW9MRix1QkFBTyxTQUFLLG1CQUFMLENBQTBCLEVBQUUsV0FBVyxFQUFiLEVBQTFCLENBQVA7QUFwTEU7QUFBQTtBQXVMQSxlQXZMQSxtQkF1TFMsSUF2TFQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQXVMZSxtQkF2TGYsbUZBdUxxQixNQXZMckI7QUF1TDZCLHNCQXZMN0IsbUZBdUxzQyxLQXZMdEM7QUF1TDZDLHNCQXZMN0MsbUZBdUxzRCxFQXZMdEQ7QUF1TDBELHVCQXZMMUQsbUZBdUxvRSxTQXZMcEU7QUF1TCtFLG9CQXZML0UsbUZBdUxzRixTQXZMdEY7QUF3TEUsbUJBeExGLEdBd0xRLFNBQUssSUFBTCxDQUFVLEtBQVYsRUFBaUIsR0FBakIsQ0F4TFI7O0FBeUxGLG9CQUFLLE9BQU8sTUFBUixJQUFvQixPQUFPLE9BQS9CO0FBQ0ksMkJBQU8sTUFBTSxTQUFLLGFBQUwsQ0FBb0IsSUFBcEIsRUFBMEIsTUFBMUIsQ0FBYjtBQURKLGlCQUVJLEtBM0xGLEdBMkxVLFNBQUssSUFBTCxDQUFXLE1BQVgsRUFBbUIsU0FBSyxhQUFMLENBQW9CLElBQXBCLENBQW5CLENBM0xWOztBQTRMRixvQkFBSSxPQUFPLE1BQVgsRUFBbUI7QUFDZix3QkFBSSxPQUFPLElBQVAsQ0FBYSxLQUFiLEVBQW9CLE1BQXhCO0FBQ0ksK0JBQU8sTUFBTSxTQUFLLFNBQUwsQ0FBZ0IsS0FBaEIsQ0FBYjtBQURKO0FBRUgsaUJBSEQsTUFHTztBQUNDLHlCQURELEdBQ1MsU0FBSyxLQUFMLEVBRFQ7QUFFQywyQkFGRCxHQUVVLElBRlY7O0FBR0gsMkJBQU8sU0FBSyxTQUFMLENBQWdCLFNBQUssTUFBTCxDQUFhO0FBQ2hDLGtDQUFVLElBRHNCO0FBRWhDLGlDQUFTO0FBRnVCLHFCQUFiLEVBR3BCLEtBSG9CLENBQWhCLENBQVA7QUFJQSw4QkFBVTtBQUNOLHdDQUFnQixtQ0FEVjtBQUVOLDBDQUFrQixLQUFLLE1BRmpCO0FBR04sK0JBQU8sU0FBSyxNQUhOO0FBSU4sZ0NBQVEsU0FBSyxJQUFMLENBQVcsU0FBSyxNQUFMLENBQWEsSUFBYixDQUFYLEVBQStCLFNBQUssTUFBTCxDQUFhLFNBQUssTUFBbEIsQ0FBL0IsRUFBMEQsUUFBMUQsRUFBb0UsUUFBcEU7QUFKRixxQkFBVjtBQU1IO0FBNU1DLHVCQTZNbUIsU0FBSyxLQUFMLENBQVksR0FBWixFQUFpQixNQUFqQixFQUF5QixPQUF6QixFQUFrQyxJQUFsQyxDQTdNbkI7QUFBQTtBQTZNRSx3QkE3TUY7O0FBOE1GLG9CQUFJLE9BQU8sTUFBWDtBQUNJLDJCQUFPLFFBQVA7QUFESjtBQUFBLDhCQUVJLGFBQWEsUUFGakI7O0FBR0ksbUNBQUksU0FBUyxTQUFULENBQUo7QUFDSSwrQkFBTyxRQUFQO0FBREo7QUFFSiw4QkFBTSxJQUFJLGFBQUosQ0FBbUIsU0FBSyxFQUFMLEdBQVUsR0FBVixHQUFnQixTQUFLLElBQUwsQ0FBVyxRQUFYLENBQW5DLENBQU47QUFGSTtBQUhKO0FBOU1FO0FBQUE7QUFBQSxLQUFWOztBQXVOQTs7QUFFQSxRQUFJLE9BQU87O0FBRVAsY0FBTSxNQUZDO0FBR1AsZ0JBQVEsTUFIRDtBQUlQLHFCQUFhLENBQUUsSUFBRixFQUFRLElBQVIsQ0FKTixFQUlzQjtBQUM3QixxQkFBYSxJQUxOLEVBS1k7QUFDbkIsbUJBQVcsSUFOSjtBQU9QLDJCQUFtQixJQVBaO0FBUVAsZ0JBQVE7QUFDSixvQkFBUSxxR0FESjtBQUVKLG1CQUFPLHNCQUZIO0FBR0osbUJBQU8saUJBSEg7QUFJSixtQkFBTyxDQUNILDRCQURHLEVBRUgsNkRBRkc7QUFKSCxTQVJEO0FBaUJQLGVBQU87QUFDSCxzQkFBVTtBQUNOLHVCQUFPLENBQ0gsVUFERyxFQUVILFlBRkcsRUFHSCxlQUhHLEVBSUgsUUFKRyxFQUtILFFBTEc7QUFERCxhQURQO0FBVUgsdUJBQVc7QUFDUCx3QkFBUSxDQUNKLFdBREksRUFFSixjQUZJLEVBR0osY0FISSxFQUlKLGtCQUpJLEVBS0osYUFMSSxFQU1KLHVCQU5JLEVBT0osY0FQSSxFQVFKLGlCQVJJLEVBU0osaUJBVEksRUFVSixnQkFWSSxFQVdKLG1CQVhJLEVBWUosZUFaSSxFQWFKLGFBYkksRUFjSixnQkFkSTtBQUREO0FBVlIsU0FqQkE7O0FBK0NELG9CQS9DQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQWdEaUIsU0FBSyxxQkFBTCxFQWhEakI7QUFBQTtBQWdEQyx1QkFoREQ7QUFpREMsb0JBakRELEdBaURRLE9BQU8sSUFBUCxDQUFhLE9BQWIsQ0FqRFI7QUFrREMsc0JBbERELEdBa0RVLEVBbERWOztBQW1ESCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLEtBQUssTUFBekIsRUFBaUMsR0FBakMsRUFBc0M7QUFDOUIsc0JBRDhCLEdBQ3pCLEtBQUssQ0FBTCxDQUR5QjtBQUU5QiwwQkFGOEIsR0FFckIsUUFBUSxFQUFSLENBRnFCO0FBRzlCLDBCQUg4QixHQUdyQixHQUFHLE9BQUgsQ0FBWSxHQUFaLEVBQWlCLEdBQWpCLENBSHFCO0FBQUEscUNBSVosT0FBTyxLQUFQLENBQWMsR0FBZCxDQUpZO0FBQUE7QUFJNUIsd0JBSjRCO0FBSXRCLHlCQUpzQjs7QUFLbEMsMkJBQU8sSUFBUCxDQUFhO0FBQ1QsOEJBQU0sRUFERztBQUVULGtDQUFVLE1BRkQ7QUFHVCxnQ0FBUSxJQUhDO0FBSVQsaUNBQVMsS0FKQTtBQUtULGdDQUFRO0FBTEMscUJBQWI7QUFPSDtBQUNELHVCQUFPLE1BQVA7QUFoRUc7QUFBQTtBQW1FRCxvQkFuRUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkFvRUcsU0FBSyxXQUFMLEVBcEVIO0FBQUE7QUFBQSx1QkFxRWtCLFNBQUssbUJBQUwsRUFyRWxCO0FBQUE7QUFxRUMsd0JBckVEO0FBc0VDLHNCQXRFRCxHQXNFVSxFQUFFLFFBQVEsUUFBVixFQXRFVjs7QUF1RUgscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxTQUFLLFVBQUwsQ0FBZ0IsTUFBcEMsRUFBNEMsR0FBNUMsRUFBaUQ7QUFDekMsNEJBRHlDLEdBQzlCLFNBQUssVUFBTCxDQUFnQixDQUFoQixDQUQ4QjtBQUV6QywyQkFGeUMsR0FFL0I7QUFDVixnQ0FBUSxTQURFO0FBRVYsZ0NBQVEsU0FGRTtBQUdWLGlDQUFTO0FBSEMscUJBRitCOztBQU83Qyx3QkFBSSxZQUFZLFNBQVMsVUFBVCxDQUFoQjtBQUNJLGdDQUFRLE1BQVIsSUFBa0IsV0FBWSxTQUFTLFVBQVQsRUFBcUIsUUFBckIsQ0FBWixDQUFsQjtBQURKLHFCQUVBLElBQUksWUFBWSxTQUFTLFVBQVQsQ0FBaEI7QUFDSSxnQ0FBUSxNQUFSLElBQWtCLFdBQVksU0FBUyxVQUFULEVBQXFCLFFBQXJCLENBQVosQ0FBbEI7QUFESixxQkFFQSxRQUFRLE9BQVIsSUFBbUIsU0FBSyxHQUFMLENBQVUsUUFBUSxNQUFSLENBQVYsRUFBMkIsUUFBUSxNQUFSLENBQTNCLENBQW5CO0FBQ0EsMkJBQU8sUUFBUCxJQUFtQixPQUFuQjtBQUNIO0FBQ0QsdUJBQU8sTUFBUDtBQXJGRztBQUFBO0FBd0ZELHNCQXhGQywwQkF3RmUsTUF4RmY7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUF3RnVCLHNCQXhGdkIsbUZBd0ZnQyxFQXhGaEM7QUFBQSx1QkF5RkcsU0FBSyxXQUFMLEVBekZIO0FBQUE7QUEwRkMsaUJBMUZELEdBMEZLLFNBQUssTUFBTCxDQUFhLE1BQWIsQ0ExRkw7QUFBQSx1QkEyRmtCLFNBQUssa0JBQUwsQ0FBeUIsU0FBSyxNQUFMLENBQWE7QUFDdkQsNEJBQVEsRUFBRSxJQUFGO0FBRCtDLGlCQUFiLEVBRTNDLE1BRjJDLENBQXpCLENBM0ZsQjtBQUFBO0FBMkZDLHdCQTNGRDtBQThGQyx5QkE5RkQsR0E4RmEsU0FBUyxFQUFFLElBQUYsQ0FBVCxDQTlGYjtBQStGQyx5QkEvRkQsR0ErRmEsU0FBSyxZQUFMLEVBL0ZiO0FBZ0dDLHNCQWhHRCxHQWdHVTtBQUNULDRCQUFRLEVBREM7QUFFVCw0QkFBUSxFQUZDO0FBR1QsaUNBQWEsU0FISjtBQUlULGdDQUFZLFNBQUssT0FBTCxDQUFjLFNBQWQ7QUFKSCxpQkFoR1Y7QUFzR0MscUJBdEdELEdBc0dTLEVBQUUsUUFBUSxLQUFWLEVBQWlCLFFBQVEsS0FBekIsRUF0R1Q7QUF1R0Msb0JBdkdELEdBdUdRLE9BQU8sSUFBUCxDQUFhLEtBQWIsQ0F2R1I7O0FBd0dILHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksS0FBSyxNQUF6QixFQUFpQyxHQUFqQyxFQUFzQztBQUM5Qix1QkFEOEIsR0FDeEIsS0FBSyxDQUFMLENBRHdCO0FBRTlCLHdCQUY4QixHQUV2QixNQUFNLEdBQU4sQ0FGdUI7QUFHOUIsMEJBSDhCLEdBR3JCLFVBQVUsSUFBVixDQUhxQjs7QUFJbEMseUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxPQUFPLE1BQTNCLEVBQW1DLEdBQW5DLEVBQXdDO0FBQ2hDLDZCQURnQyxHQUN4QixPQUFPLENBQVAsQ0FEd0I7QUFFaEMsNkJBRmdDLEdBRXhCLFdBQVksTUFBTSxDQUFOLENBQVosQ0FGd0I7QUFHaEMsOEJBSGdDLEdBR3ZCLFdBQVksTUFBTSxDQUFOLENBQVosQ0FIdUI7O0FBSXBDLCtCQUFPLEdBQVAsRUFBWSxJQUFaLENBQWtCLENBQUUsS0FBRixFQUFTLE1BQVQsQ0FBbEI7QUFDSDtBQUNKO0FBQ0QsdUJBQU8sTUFBUDtBQW5IRztBQUFBO0FBc0hQLG1CQXRITyx1QkFzSE0sTUF0SE4sRUFzSGMsTUF0SGQsRUFzSHNCO0FBQ3pCLGdCQUFJLFlBQVksT0FBTyxTQUFQLElBQW9CLElBQXBDO0FBQ0EsbUJBQU87QUFDSCw2QkFBYSxTQURWO0FBRUgsNEJBQVksS0FBSyxPQUFMLENBQWMsU0FBZCxDQUZUO0FBR0gsd0JBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQUhMO0FBSUgsdUJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQUpKO0FBS0gsdUJBQU8sV0FBWSxPQUFPLFdBQVAsQ0FBWixDQUxKO0FBTUgsdUJBQU8sV0FBWSxPQUFPLFlBQVAsQ0FBWixDQU5KO0FBT0gsd0JBQVEsU0FQTDtBQVFILHdCQUFRLFNBUkw7QUFTSCx5QkFBUyxTQVROO0FBVUgseUJBQVMsU0FWTjtBQVdILHdCQUFRLFdBQVksT0FBTyxZQUFQLENBQVosQ0FYTDtBQVlILDBCQUFVLFNBWlA7QUFhSCw4QkFBYyxTQWJYO0FBY0gsMkJBQVcsV0FBWSxPQUFPLEtBQVAsQ0FBWixDQWRSO0FBZUgsOEJBQWMsV0FBWSxPQUFPLEtBQVAsQ0FBWixDQWZYO0FBZ0JILCtCQUFlLFdBQVksT0FBTyxVQUFQLENBQVosQ0FoQlo7QUFpQkgsd0JBQVE7QUFqQkwsYUFBUDtBQW1CSCxTQTNJTTtBQTZJRCxvQkE3SUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBNklhLHdCQTdJYixtRkE2SXdCLEtBN0l4QjtBQUFBLHVCQThJRyxTQUFLLFdBQUwsRUE5SUg7QUFBQTtBQUFBLHVCQStJa0IsU0FBSyxlQUFMLEVBL0lsQjtBQUFBO0FBK0lDLHdCQS9JRDtBQWdKQyxzQkFoSkQsR0FnSlUsRUFoSlY7QUFpSkMsbUJBakpELEdBaUpPLE9BQU8sSUFBUCxDQUFhLFFBQWIsQ0FqSlA7O0FBa0pILHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksSUFBSSxNQUF4QixFQUFnQyxHQUFoQyxFQUFxQztBQUM3QixzQkFENkIsR0FDeEIsSUFBSSxDQUFKLENBRHdCO0FBRTdCLDBCQUY2QixHQUVwQixTQUFLLGFBQUwsQ0FBbUIsRUFBbkIsQ0FGb0I7QUFHN0IsMEJBSDZCLEdBR3BCLE9BQU8sUUFBUCxDQUhvQjtBQUk3QiwwQkFKNkIsR0FJcEIsU0FBUyxFQUFULENBSm9COztBQUtqQywyQkFBTyxNQUFQLElBQWlCLFNBQUssV0FBTCxDQUFrQixNQUFsQixFQUEwQixNQUExQixDQUFqQjtBQUNIO0FBQ0QsdUJBQU8sTUFBUDtBQXpKRztBQUFBO0FBNEpELG1CQTVKQyx1QkE0SlksTUE1Slo7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkE2SkcsU0FBSyxXQUFMLEVBN0pIO0FBQUE7QUFBQSx1QkE4SmtCLFNBQUssZUFBTCxFQTlKbEI7QUFBQTtBQThKQyx3QkE5SkQ7QUErSkMsaUJBL0pELEdBK0pLLFNBQUssTUFBTCxDQUFhLE1BQWIsQ0EvSkw7O0FBZ0tILHVCQUFPLFNBQUssV0FBTCxDQUFrQixTQUFTLEVBQUUsSUFBRixDQUFULENBQWxCLEVBQXFDLENBQXJDLENBQVA7QUFoS0c7QUFBQTtBQW1LRCxtQkFuS0MsdUJBbUtZLE1BbktaO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBbUtvQixzQkFuS3BCLG1GQW1LNkIsRUFuSzdCO0FBQUEsdUJBb0tHLFNBQUssV0FBTCxFQXBLSDtBQUFBO0FBcUtILHVCQUFPLFNBQUssZUFBTCxDQUFzQixTQUFLLE1BQUwsQ0FBYTtBQUN0Qyw0QkFBUSxTQUFLLFFBQUwsQ0FBZSxNQUFmO0FBRDhCLGlCQUFiLEVBRTFCLE1BRjBCLENBQXRCLENBQVA7QUFyS0c7QUFBQTtBQTBLRCxtQkExS0MsdUJBMEtZLE1BMUtaLEVBMEtvQixJQTFLcEIsRUEwSzBCLElBMUsxQixFQTBLZ0MsTUExS2hDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUEwS3dDLHFCQTFLeEMsbUZBMEtnRCxTQTFLaEQ7QUEwSzJELHNCQTFLM0QsbUZBMEtvRSxFQTFLcEU7QUFBQSx1QkEyS0csU0FBSyxXQUFMLEVBM0tIO0FBQUE7QUE0S0Msc0JBNUtELEdBNEtVLEVBNUtWOztBQTZLSCxvQkFBSSxRQUFRLFFBQVo7QUFDSSw2QkFBUyxTQUFUO0FBREosaUJBRUksS0EvS0QsR0ErS1M7QUFDUiw0QkFBUSxTQUFLLFFBQUwsQ0FBZSxNQUFmLENBREE7QUFFUixnQ0FBWSxNQUZKO0FBR1IsNkJBQVMsU0FBUyxDQUhWO0FBSVIsNEJBQVEsU0FBUztBQUpULGlCQS9LVDtBQUFBLHVCQXFMa0IsU0FBSyxzQkFBTCxDQUE2QixTQUFLLE1BQUwsQ0FBYSxLQUFiLEVBQW9CLE1BQXBCLENBQTdCLENBckxsQjtBQUFBO0FBcUxDLHdCQXJMRDs7QUFzTEgsdUJBQU87QUFDSCw0QkFBUSxRQURMO0FBRUgsMEJBQU0sU0FBUyxVQUFULEVBQXFCLFFBQXJCO0FBRkgsaUJBQVA7QUF0TEc7QUFBQTtBQTRMRCxtQkE1TEMsdUJBNExZLEVBNUxaO0FBQUE7O0FBQUE7QUFBQSx1QkE2TEcsU0FBSyxXQUFMLEVBN0xIO0FBQUE7QUE4TEgsdUJBQU8sU0FBSyxzQkFBTCxDQUE2QixFQUFFLFlBQVksRUFBZCxFQUE3QixDQUFQO0FBOUxHO0FBQUE7QUFpTUQsZUFqTUMsbUJBaU1RLElBak1SO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQWlNYyxtQkFqTWQsbUZBaU1vQixRQWpNcEI7QUFpTThCLHNCQWpNOUIsbUZBaU11QyxLQWpNdkM7QUFpTThDLHNCQWpNOUMsbUZBaU11RCxFQWpNdkQ7QUFpTTJELHVCQWpNM0QsbUZBaU1xRSxTQWpNckU7QUFpTWdGLG9CQWpNaEYsbUZBaU11RixTQWpNdkY7QUFrTUMsbUJBbE1ELEdBa01PLFNBQUssSUFBTCxDQUFVLEtBQVYsSUFBbUIsR0FBbkIsR0FBeUIsU0FBSyxPQUE5QixHQUF3QyxHQUF4QyxHQUE4QyxJQWxNckQ7O0FBbU1ILG9CQUFJLE9BQU8sUUFBWCxFQUFxQjtBQUNqQix3QkFBSSxPQUFPLElBQVAsQ0FBYSxNQUFiLEVBQXFCLE1BQXpCO0FBQ0ksK0JBQU8sTUFBTSxTQUFLLFNBQUwsQ0FBZ0IsTUFBaEIsQ0FBYjtBQURKO0FBRUgsaUJBSEQsTUFHTztBQUNDLHlCQURELEdBQ1MsU0FBSyxLQUFMLEVBRFQ7O0FBRUgsMkJBQU8sU0FBSyxTQUFMLENBQWdCLFNBQUssTUFBTCxDQUFhLEVBQUUsU0FBUyxLQUFYLEVBQWIsRUFBaUMsTUFBakMsQ0FBaEIsQ0FBUDtBQUNBLDhCQUFVO0FBQ04sd0NBQWdCLG1DQURWO0FBRU4sMENBQWtCLEtBQUssTUFGakI7QUFHTiwrQkFBTyxTQUFLLE1BSE47QUFJTixnQ0FBUSxTQUFLLElBQUwsQ0FBVyxTQUFLLE1BQUwsQ0FBYSxJQUFiLENBQVgsRUFBK0IsU0FBSyxNQUFMLENBQWEsU0FBSyxNQUFsQixDQUEvQixFQUEwRCxRQUExRDtBQUpGLHFCQUFWO0FBTUg7QUEvTUUsdUJBZ05rQixTQUFLLEtBQUwsQ0FBWSxHQUFaLEVBQWlCLE1BQWpCLEVBQXlCLE9BQXpCLEVBQWtDLElBQWxDLENBaE5sQjtBQUFBO0FBZ05DLHdCQWhORDtBQUFBLDBCQWlOQyxZQUFZLFFBak5iOztBQWtOQywrQkFBSSxTQUFTLFFBQVQsQ0FBSjtBQUNJLDJCQUFPLFFBQVA7QUFESjtBQUFBO0FBRUEsOEJBQU0sSUFBSSxhQUFKLENBQW1CLFNBQUssRUFBTCxHQUFVLEdBQVYsR0FBZ0IsU0FBSyxJQUFMLENBQVcsUUFBWCxDQUFuQyxDQUFOO0FBRkE7O0FBSUosMkJBQU8sUUFBUDtBQUpJO0FBbE5EO0FBQUE7QUFBQSxLQUFYOztBQTBOQTs7QUFFQSxRQUFJLFVBQVU7O0FBRVYsY0FBTSxTQUZJO0FBR1YsZ0JBQVEsU0FIRTtBQUlWLHFCQUFhLElBSkgsRUFJUztBQUNuQixtQkFBVyxJQUxEO0FBTVYscUJBQWEsSUFOSDtBQU9WLGdCQUFRO0FBQ0osb0JBQVEscUdBREo7QUFFSixtQkFBTyxtQ0FGSDtBQUdKLG1CQUFPLDRCQUhIO0FBSUosbUJBQU87QUFKSCxTQVBFO0FBYVYsZUFBTztBQUNILHNCQUFVO0FBQ04sd0JBQVEsQ0FDSixXQURJLEVBRUosV0FGSSxFQUdKLGlCQUhJLEVBSUosY0FKSSxFQUtKLGlCQUxJLEVBTUosYUFOSTtBQURGLGFBRFA7QUFXSCx1QkFBVztBQUNQLHdCQUFRLENBQ0osZUFESSxFQUVKLGFBRkksRUFHSixhQUhJLEVBSUosZ0JBSkksRUFLSixrQkFMSSxFQU1KLHFCQU5JLEVBT0osVUFQSSxFQVFKLGFBUkksRUFTSixhQVRJLEVBVUosYUFWSSxFQVdKLGlCQVhJLEVBWUosc0JBWkksRUFhSixhQWJJO0FBREQ7QUFYUixTQWJHOztBQTJDSixvQkEzQ0k7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQTRDZSxTQUFLLHlCQUFMLEVBNUNmO0FBQUE7QUE0Q0Ysd0JBNUNFO0FBNkNGLHVCQTdDRSxHQTZDUSxTQUFTLGNBQVQsQ0E3Q1I7QUE4Q0Ysc0JBOUNFLEdBOENPLEVBOUNQOztBQStDTixxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFFBQVEsTUFBNUIsRUFBb0MsR0FBcEMsRUFBeUM7QUFDakMsMEJBRGlDLEdBQ3hCLFFBQVEsQ0FBUixDQUR3QjtBQUVqQyxzQkFGaUMsR0FFNUIsT0FBTyxNQUFQLENBRjRCO0FBR2pDLHdCQUhpQyxHQUcxQixPQUFPLGVBQVAsQ0FIMEI7QUFJakMseUJBSmlDLEdBSXpCLE9BQU8sZUFBUCxDQUp5QjtBQUtqQywwQkFMaUMsR0FLeEIsT0FBTyxHQUFQLEdBQWEsS0FMVzs7QUFNckMsMkJBQU8sSUFBUCxDQUFhO0FBQ1QsOEJBQU0sRUFERztBQUVULGtDQUFVLE1BRkQ7QUFHVCxnQ0FBUSxJQUhDO0FBSVQsaUNBQVMsS0FKQTtBQUtULGdDQUFRO0FBTEMscUJBQWI7QUFPSDtBQUNELHVCQUFPLE1BQVA7QUE3RE07QUFBQTtBQWdFSixvQkFoRUk7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBaUVBLFNBQUssV0FBTCxFQWpFQTtBQUFBO0FBQUEsdUJBa0VlLFNBQUsseUJBQUwsRUFsRWY7QUFBQTtBQWtFRix3QkFsRUU7QUFtRUYsd0JBbkVFLEdBbUVTLFNBQVMsWUFBVCxDQW5FVDtBQW9FRixzQkFwRUUsR0FvRU8sRUFBRSxRQUFRLFFBQVYsRUFwRVA7O0FBcUVOLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksU0FBUyxNQUE3QixFQUFxQyxHQUFyQyxFQUEwQztBQUNsQywyQkFEa0MsR0FDeEIsU0FBUyxDQUFULENBRHdCO0FBRWxDLDRCQUZrQyxHQUV2QixRQUFRLE1BQVIsQ0FGdUI7QUFHbEMsMkJBSGtDLEdBR3hCO0FBQ1YsZ0NBQVEsUUFBUSxTQUFSLENBREU7QUFFVixnQ0FBUSxRQUFRLE1BQVIsQ0FGRTtBQUdWLGlDQUFTO0FBSEMscUJBSHdCOztBQVF0Qyw0QkFBUSxPQUFSLElBQW1CLFNBQUssR0FBTCxDQUFVLFFBQVEsTUFBUixDQUFWLEVBQTJCLFFBQVEsTUFBUixDQUEzQixDQUFuQjtBQUNBLDJCQUFPLFFBQVAsSUFBbUIsT0FBbkI7QUFDSDtBQUNELHVCQUFPLE1BQVA7QUFoRk07QUFBQTtBQW1GSixzQkFuRkksMEJBbUZZLE1BbkZaO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBbUZvQixzQkFuRnBCLG1GQW1GNkIsRUFuRjdCO0FBQUEsdUJBb0ZBLFNBQUssV0FBTCxFQXBGQTtBQUFBO0FBcUZGLGlCQXJGRSxHQXFGRSxTQUFLLE1BQUwsQ0FBYSxNQUFiLENBckZGO0FBQUEsdUJBc0ZnQixTQUFLLHNCQUFMLENBQTZCLFNBQUssTUFBTCxDQUFhO0FBQzVELG1DQUFlLEVBQUUsSUFBRjtBQUQ2QyxpQkFBYixFQUVoRCxNQUZnRCxDQUE3QixDQXRGaEI7QUFBQTtBQXNGRix5QkF0RkU7QUF5RkYseUJBekZFLEdBeUZVLFNBQUssWUFBTCxFQXpGVjtBQTBGRixzQkExRkUsR0EwRk87QUFDVCw0QkFBUSxFQURDO0FBRVQsNEJBQVEsRUFGQztBQUdULGlDQUFhLFNBSEo7QUFJVCxnQ0FBWSxTQUFLLE9BQUwsQ0FBYyxTQUFkO0FBSkgsaUJBMUZQO0FBZ0dGLHFCQWhHRSxHQWdHTSxDQUFFLE1BQUYsRUFBVSxNQUFWLENBaEdOOztBQWlHTixxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLE1BQU0sTUFBMUIsRUFBa0MsR0FBbEMsRUFBdUM7QUFDL0Isd0JBRCtCLEdBQ3hCLE1BQU0sQ0FBTixDQUR3QjtBQUUvQiwwQkFGK0IsR0FFdEIsVUFBVSxJQUFWLENBRnNCOztBQUduQyx5QkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLE9BQU8sTUFBM0IsRUFBbUMsR0FBbkMsRUFBd0M7QUFDaEMsNkJBRGdDLEdBQ3hCLE9BQU8sQ0FBUCxDQUR3QjtBQUVoQyw2QkFGZ0MsR0FFeEIsV0FBWSxNQUFNLElBQU4sQ0FBWixDQUZ3QjtBQUdoQyw4QkFIZ0MsR0FHdkIsV0FBWSxNQUFNLEtBQU4sQ0FBWixDQUh1Qjs7QUFJcEMsK0JBQU8sSUFBUCxFQUFhLElBQWIsQ0FBbUIsQ0FBRSxLQUFGLEVBQVMsTUFBVCxDQUFuQjtBQUNIO0FBQ0o7QUFDRCx1QkFBTyxNQUFQO0FBM0dNO0FBQUE7QUE4R0osbUJBOUdJLHVCQThHUyxNQTlHVDtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBK0dBLFNBQUssV0FBTCxFQS9HQTtBQUFBO0FBZ0hGLGlCQWhIRSxHQWdIRSxTQUFLLE1BQUwsQ0FBYSxNQUFiLENBaEhGO0FBQUEsdUJBaUhhLFNBQUssbUJBQUwsQ0FBMEI7QUFDekMsbUNBQWUsRUFBRSxJQUFGO0FBRDBCLGlCQUExQixDQWpIYjtBQUFBO0FBaUhGLHNCQWpIRTtBQW9IRix5QkFwSEUsR0FvSFUsU0FBSyxZQUFMLEVBcEhWOztBQXFITix1QkFBTztBQUNILGlDQUFhLFNBRFY7QUFFSCxnQ0FBWSxTQUFLLE9BQUwsQ0FBYyxTQUFkLENBRlQ7QUFHSCw0QkFBUSxXQUFZLE9BQU8sTUFBUCxDQUFaLENBSEw7QUFJSCwyQkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBSko7QUFLSCwyQkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBTEo7QUFNSCwyQkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBTko7QUFPSCw0QkFBUSxTQVBMO0FBUUgsNEJBQVEsU0FSTDtBQVNILDZCQUFTLFNBVE47QUFVSCw2QkFBUyxTQVZOO0FBV0gsNEJBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQVhMO0FBWUgsOEJBQVUsU0FaUDtBQWFILGtDQUFjLFNBYlg7QUFjSCwrQkFBVyxTQWRSO0FBZUgsa0NBQWMsV0FBWSxPQUFPLFlBQVAsQ0FBWixDQWZYO0FBZ0JILG1DQUFlLFdBQVksT0FBTyxvQkFBUCxDQUFaLENBaEJaO0FBaUJILDRCQUFRO0FBakJMLGlCQUFQO0FBckhNO0FBQUE7QUEwSUosbUJBMUlJLHVCQTBJUyxNQTFJVDtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQTBJaUIsc0JBMUlqQixtRkEwSTBCLEVBMUkxQjtBQUFBLHVCQTJJQSxTQUFLLFdBQUwsRUEzSUE7QUFBQTtBQTRJTix1QkFBTyxTQUFLLG1CQUFMLENBQTBCLFNBQUssTUFBTCxDQUFhO0FBQzFDLDJCQUFPLFNBQUssUUFBTCxDQUFlLE1BQWY7QUFEbUMsaUJBQWIsRUFFOUIsTUFGOEIsQ0FBMUIsQ0FBUDtBQTVJTTtBQUFBO0FBaUpKLG1CQWpKSSx1QkFpSlMsTUFqSlQsRUFpSmlCLElBakpqQixFQWlKdUIsSUFqSnZCLEVBaUo2QixNQWpKN0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQWlKcUMscUJBakpyQyxtRkFpSjZDLFNBako3QztBQWlKd0Qsc0JBakp4RCxtRkFpSmlFLEVBakpqRTtBQUFBLHVCQWtKQSxTQUFLLFdBQUwsRUFsSkE7QUFBQTtBQW1KRix5QkFuSkUsR0FtSlcsUUFBUSxRQUFULEdBQXFCLENBQXJCLEdBQXlCLENBbkpuQztBQW9KRixxQkFwSkUsR0FvSk07QUFDUiwyQkFBTyxTQUFLLFFBQUwsQ0FBZSxNQUFmLENBREM7QUFFUiw0QkFBUSxJQUZBO0FBR1IsaUNBQWEsU0FITDtBQUlSLDJCQUFPLE1BSkM7QUFLUiwwQkFBTTtBQUxFLGlCQXBKTjtBQUFBLHVCQTJKZSxTQUFLLHNCQUFMLENBQTZCLFNBQUssTUFBTCxDQUFhLEtBQWIsRUFBb0IsTUFBcEIsQ0FBN0IsQ0EzSmY7QUFBQTtBQTJKRix3QkEzSkU7O0FBNEpOLHVCQUFPO0FBQ0gsNEJBQVEsUUFETDtBQUVILDBCQUFNLFNBQVMsZUFBVDtBQUZILGlCQUFQO0FBNUpNO0FBQUE7QUFrS0osbUJBbEtJLHVCQWtLUyxFQWxLVDtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQWtLYSxzQkFsS2IsbUZBa0tzQixFQWxLdEI7QUFBQSx1QkFtS0EsU0FBSyxXQUFMLEVBbktBO0FBQUE7QUFvS04sb0JBQUksU0FBUyxNQUFiLEVBQXFCO0FBQ2pCLDJCQUFPLFNBQUssc0JBQUwsQ0FBNkIsU0FBSyxNQUFMLENBQWE7QUFDN0MseUNBQWlCO0FBRDRCLHFCQUFiLEVBRWpDLE1BRmlDLENBQTdCLENBQVA7QUFHSCxpQkFKRDtBQUtBLDBCQUFNLElBQUksYUFBSixDQUFtQixTQUFLLEVBQUwsR0FBVSwwREFBN0IsQ0FBTjtBQUxBO0FBcEtNO0FBQUE7QUE0S0osZUE1S0ksbUJBNEtLLElBNUtMO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUE0S1csbUJBNUtYLG1GQTRLaUIsUUE1S2pCO0FBNEsyQixzQkE1SzNCLG1GQTRLb0MsS0E1S3BDO0FBNEsyQyxzQkE1SzNDLG1GQTRLb0QsRUE1S3BEO0FBNEt3RCx1QkE1S3hELG1GQTRLa0UsU0E1S2xFO0FBNEs2RSxvQkE1SzdFLG1GQTRLb0YsU0E1S3BGO0FBNktGLG1CQTdLRSxHQTZLSSxTQUFLLElBQUwsQ0FBVSxLQUFWLElBQW1CLEdBQW5CLEdBQXlCLFNBQUssT0FBOUIsR0FBd0MsR0FBeEMsR0FBOEMsSUE3S2xEOztBQThLTixvQkFBSSxPQUFPLFFBQVgsRUFBcUI7QUFDakIsd0JBQUksT0FBTyxJQUFQLENBQWEsTUFBYixFQUFxQixNQUF6QixFQUFpQztBQUM3QiwrQkFBTyxTQUFLLElBQUwsQ0FBVyxNQUFYLENBQVA7QUFDSDtBQUNKLGlCQUpELE1BSU87QUFDSCx3QkFBSSxDQUFDLFNBQUssR0FBVjtBQUNJLDhCQUFNLElBQUksbUJBQUosQ0FBeUIsU0FBSyxFQUFMLEdBQVUsYUFBVixHQUEwQixTQUFLLEVBQS9CLEdBQW9DLG1DQUE3RCxDQUFOO0FBREoscUJBRUksS0FIRCxHQUdTLFNBQUssS0FBTCxFQUhUO0FBSUMsd0JBSkQsR0FJUSxNQUFNLFFBQU4sS0FBb0IsU0FBSyxHQUF6QixHQUErQixTQUFLLE1BSjVDO0FBS0MsNkJBTEQsR0FLYSxTQUFLLElBQUwsQ0FBVyxTQUFLLE1BQUwsQ0FBYSxJQUFiLENBQVgsRUFBK0IsU0FBSyxNQUFMLENBQWEsU0FBSyxNQUFsQixDQUEvQixDQUxiOztBQU1ILDJCQUFPLFNBQUssSUFBTCxDQUFXLFNBQUssTUFBTCxDQUFhO0FBQzNCLGtDQUFVLFNBQUssTUFEWTtBQUUzQixvQ0FBWSxLQUZlO0FBRzNCLGtDQUFVLFVBQVUsV0FBVjtBQUhpQixxQkFBYixFQUlmLE1BSmUsQ0FBWCxDQUFQO0FBS0EsOEJBQVU7QUFDTix3Q0FBZ0Isa0JBRFY7QUFFTiwwQ0FBa0IsS0FBSztBQUZqQixxQkFBVjtBQUlIO0FBak1LLHVCQWtNZSxTQUFLLEtBQUwsQ0FBWSxHQUFaLEVBQWlCLE1BQWpCLEVBQXlCLE9BQXpCLEVBQWtDLElBQWxDLENBbE1mO0FBQUE7QUFrTUYsd0JBbE1FO0FBQUEsMEJBbU1GLGdCQUFnQixRQW5NZDs7QUFvTUYsK0JBQUksU0FBUyxZQUFULENBQUo7QUFDSSwyQkFBTyxRQUFQO0FBREo7QUFFSiwwQkFBTSxJQUFJLGFBQUosQ0FBbUIsU0FBSyxFQUFMLEdBQVUsR0FBVixHQUFnQixTQUFLLElBQUwsQ0FBVyxRQUFYLENBQW5DLENBQU47QUFGSTtBQXBNRTtBQUFBO0FBQUEsS0FBZDs7QUEwTUE7O0FBRUEsUUFBSSxTQUFTLE9BQVEsVUFBUixFQUFvQjtBQUM3QixjQUFNLFFBRHVCO0FBRTdCLGdCQUFRLFFBRnFCO0FBRzdCLHFCQUFhLElBSGdCO0FBSTdCLGdCQUFRO0FBQ0osb0JBQVEscUdBREo7QUFFSixtQkFBTztBQUNILDBCQUFVLGdDQURQO0FBRUgsMkJBQVc7QUFGUixhQUZIO0FBTUosbUJBQU8seUJBTkg7QUFPSixtQkFBTztBQVBILFNBSnFCO0FBYTdCLG1CQUFXLGdCQWJrQjtBQWM3QixtQkFBVztBQUNQLHVCQUFXLEVBQUUsTUFBTSxRQUFSLEVBQWtCLFVBQVUsU0FBNUIsRUFBdUMsUUFBUSxLQUEvQyxFQUFzRCxTQUFTLEtBQS9ELEVBQXNFLFlBQVksQ0FBbEYsRUFBcUYsVUFBVSxRQUEvRjtBQURKO0FBZGtCLEtBQXBCLENBQWI7O0FBbUJBOztBQUVBLFFBQUksTUFBTTs7QUFFTixxQkFBYSxJQUZQO0FBR04sZUFBTztBQUNILHNCQUFVO0FBQ04sdUJBQU8sQ0FDSCxRQURHLEVBRUgsZ0JBRkcsRUFHSCxXQUhHLEVBSUgsUUFKRztBQURELGFBRFA7QUFTSCx1QkFBVztBQUNQLHdCQUFRLENBQ0osTUFESSxFQUVKLFlBRkksRUFHSixrQkFISSxFQUlKLGlCQUpJLEVBS0osb0JBTEksRUFNSixZQU5JLEVBT0osVUFQSTtBQUREO0FBVFIsU0FIRDs7QUF5QkEsb0JBekJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBMEJrQixTQUFLLHFCQUFMLEVBMUJsQjtBQUFBO0FBMEJFLHVCQTFCRjtBQTJCRSxtQkEzQkYsR0EyQlEsV0FBWSxRQUFRLFFBQVIsQ0FBWixDQTNCUjtBQTRCRSxzQkE1QkYsR0E0QlcsU0FBSyxPQUFMLENBQWEsQ0FBYixDQTVCWDtBQTZCRSxxQkE3QkYsR0E2QlUsU0FBSyxPQUFMLENBQWEsTUFBYixFQUFxQixPQUFyQixDQTdCVjtBQThCRSx5QkE5QkYsR0E4QmMsTUFBTSxXQUFOLEtBQXVCLEtBOUJyQztBQStCRSxvQkEvQkYsR0ErQlMsV0FBWSxRQUFRLFNBQVIsQ0FBWixDQS9CVDtBQWdDRSxzQkFoQ0YsR0FnQ1c7QUFDVCw0QkFBUSxHQURDO0FBRVQsNEJBQVEsU0FGQztBQUdULDZCQUFTO0FBSEEsaUJBaENYO0FBcUNFLHdCQXJDRixHQXFDYSxFQUFFLE9BQU8sTUFBVCxFQXJDYjs7QUFzQ0YseUJBQVMsS0FBVCxJQUFrQjtBQUNkLDRCQUFRLElBRE07QUFFZCw0QkFBUSxTQUZNO0FBR2QsNkJBQVM7QUFISyxpQkFBbEI7QUFLQSx5QkFBUyxNQUFULElBQW1CLE9BQW5CO0FBQ0EsdUJBQU8sUUFBUDtBQTVDRTtBQUFBO0FBK0NBLHNCQS9DQSwwQkErQ2dCLE1BL0NoQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUErQ3dCLHNCQS9DeEIsbUZBK0NpQyxFQS9DakM7QUFBQSx1QkFnRG9CLFNBQUssa0JBQUwsQ0FBeUIsTUFBekIsQ0FoRHBCO0FBQUE7QUFnREUseUJBaERGO0FBaURFLHlCQWpERixHQWlEYyxTQUFLLFlBQUwsRUFqRGQ7QUFrREUsc0JBbERGLEdBa0RXO0FBQ1QsNEJBQVEsRUFEQztBQUVULDRCQUFRLEVBRkM7QUFHVCxpQ0FBYSxTQUhKO0FBSVQsZ0NBQVksU0FBSyxPQUFMLENBQWMsU0FBZDtBQUpILGlCQWxEWDtBQXdERSxxQkF4REYsR0F3RFUsQ0FBRSxNQUFGLEVBQVUsTUFBVixDQXhEVjs7QUF5REYscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxNQUFNLE1BQTFCLEVBQWtDLEdBQWxDLEVBQXVDO0FBQy9CLHdCQUQrQixHQUN4QixNQUFNLENBQU4sQ0FEd0I7QUFFL0IsMEJBRitCLEdBRXRCLFVBQVUsSUFBVixDQUZzQjs7QUFHbkMseUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxPQUFPLE1BQTNCLEVBQW1DLEdBQW5DLEVBQXdDO0FBQ2hDLDZCQURnQyxHQUN4QixPQUFPLENBQVAsQ0FEd0I7QUFFaEMsNkJBRmdDLEdBRXhCLFdBQVksTUFBTSxDQUFOLENBQVosQ0FGd0I7QUFHaEMsOEJBSGdDLEdBR3ZCLFdBQVksTUFBTSxDQUFOLENBQVosQ0FIdUI7O0FBSXBDLCtCQUFPLElBQVAsRUFBYSxJQUFiLENBQW1CLENBQUUsS0FBRixFQUFTLE1BQVQsQ0FBbkI7QUFDSDtBQUNKO0FBQ0QsdUJBQU8sTUFBUDtBQW5FRTtBQUFBO0FBc0VBLG1CQXRFQSx1QkFzRWEsTUF0RWI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBdUVpQixTQUFLLHVCQUFMLEVBdkVqQjtBQUFBO0FBdUVFLHNCQXZFRjtBQXdFRSx5QkF4RUYsR0F3RWMsU0FBSyxZQUFMLEVBeEVkO0FBeUVFLG9CQXpFRixHQXlFUyxTQXpFVDtBQTBFRSxzQkExRUYsR0EwRVcsU0ExRVg7O0FBMkVGLG9CQUFJLFVBQVUsTUFBZDtBQUNJLDJCQUFPLFdBQVksT0FBTyxNQUFQLENBQVosQ0FBUDtBQURKLGlCQUVBLElBQUksU0FBUyxNQUFiO0FBQ0ksNkJBQVMsV0FBWSxPQUFPLEtBQVAsQ0FBWixDQUFUO0FBREosaUJBRUEsT0FBTztBQUNILGlDQUFhLFNBRFY7QUFFSCxnQ0FBWSxTQUFLLE9BQUwsQ0FBYyxTQUFkLENBRlQ7QUFHSCw0QkFBUSxTQUhMO0FBSUgsMkJBQU8sU0FKSjtBQUtILDJCQUFPLFdBQVksT0FBTyxLQUFQLENBQVosQ0FMSjtBQU1ILDJCQUFPLFdBQVksT0FBTyxLQUFQLENBQVosQ0FOSjtBQU9ILDRCQUFRLFNBUEw7QUFRSCw0QkFBUSxTQVJMO0FBU0gsNkJBQVMsU0FUTjtBQVVILDZCQUFTLFNBVk47QUFXSCw0QkFBUSxJQVhMO0FBWUgsOEJBQVUsU0FaUDtBQWFILGtDQUFjLFNBYlg7QUFjSCwrQkFBVyxTQWRSO0FBZUgsa0NBQWMsU0FmWDtBQWdCSCxtQ0FBZSxNQWhCWjtBQWlCSCw0QkFBUTtBQWpCTCxpQkFBUDtBQS9FRTtBQUFBO0FBb0dBLG1CQXBHQSx1QkFvR2EsTUFwR2I7QUFBQTtBQUFBO0FBQUE7O0FBb0dxQixrQkFwR3JCLG1GQW9HOEIsRUFwRzlCOztBQXFHRixtQkFBTyxTQUFLLGVBQUwsQ0FBc0IsTUFBdEIsQ0FBUDtBQXJHRTtBQXdHQSxtQkF4R0EsdUJBd0dhLE1BeEdiLEVBd0dxQixJQXhHckIsRUF3RzJCLElBeEczQixFQXdHaUMsTUF4R2pDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQXdHeUMscUJBeEd6QyxtRkF3R2lELFNBeEdqRDtBQXdHNEQsc0JBeEc1RCxtRkF3R3FFLEVBeEdyRTtBQUFBLHVCQXlHbUIsU0FBSyxxQkFBTCxDQUE0QixTQUFLLE1BQUwsQ0FBYTtBQUMxRCwyQkFBTyxNQURtRDtBQUUxRCw2QkFBUyxLQUZpRDtBQUcxRCw0QkFBUSxLQUFLLENBQUwsRUFBUSxXQUFSO0FBSGtELGlCQUFiLEVBSTlDLE1BSjhDLENBQTVCLENBekduQjtBQUFBO0FBeUdFLHdCQXpHRjs7QUE4R0YsdUJBQU87QUFDSCw0QkFBUSxRQURMO0FBRUgsMEJBQU0sU0FBUyxhQUFUO0FBRkgsaUJBQVA7QUE5R0U7QUFBQTtBQW9IQSxtQkFwSEEsdUJBb0hhLEVBcEhiO0FBQUE7O0FBcUhGLG1CQUFPLFNBQUssNkJBQUwsQ0FBb0MsRUFBRSxXQUFXLEVBQWIsRUFBcEMsQ0FBUDtBQXJIRTtBQXdIQSxlQXhIQSxtQkF3SFMsSUF4SFQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQXdIZSxtQkF4SGYsbUZBd0hxQixRQXhIckI7QUF3SCtCLHNCQXhIL0IsbUZBd0h3QyxLQXhIeEM7QUF3SCtDLHNCQXhIL0MsbUZBd0h3RCxFQXhIeEQ7QUF3SDRELHVCQXhINUQsbUZBd0hzRSxTQXhIdEU7QUF3SGlGLG9CQXhIakYsbUZBd0h3RixTQXhIeEY7QUF5SEUsbUJBekhGLEdBeUhRLFNBQUssSUFBTCxDQUFVLEtBQVYsSUFBbUIsR0FBbkIsR0FBeUIsSUF6SGpDOztBQTBIRixvQkFBSSxPQUFPLFFBQVgsRUFBcUI7QUFDakIsMkJBQU8sT0FBUDtBQUNILGlCQUZELE1BRU87QUFDQyx5QkFERCxHQUNTLFNBQUssS0FBTCxFQURUOztBQUVILDJCQUFPLFNBQUssU0FBTCxDQUFnQixTQUFLLE1BQUwsQ0FBYSxFQUFFLGFBQWEsS0FBZixFQUFiLEVBQXFDLE1BQXJDLENBQWhCLENBQVA7QUFDQSw4QkFBVTtBQUNOLHdDQUFnQixtQ0FEVjtBQUVOLCtCQUFPLFNBQUssTUFGTjtBQUdOLCtCQUFPLFNBQUssSUFBTCxDQUFXLFNBQUssTUFBTCxDQUFhLElBQWIsQ0FBWCxFQUErQixTQUFLLE1BQUwsQ0FBYSxTQUFLLE1BQWxCLENBQS9CLEVBQTBELE1BQTFEO0FBSEQscUJBQVY7QUFLSDtBQXBJQyx1QkFxSW1CLFNBQUssS0FBTCxDQUFZLEdBQVosRUFBaUIsTUFBakIsRUFBeUIsT0FBekIsRUFBa0MsSUFBbEMsQ0FySW5CO0FBQUE7QUFxSUUsd0JBcklGOztBQXNJRixvQkFBSSxPQUFPLFNBQVg7QUFDSSx3QkFBSSxXQUFXLFFBQWY7QUFDSSw0QkFBSSxTQUFTLE9BQVQsQ0FBSjtBQUNJLGtDQUFNLElBQUksYUFBSixDQUFtQixTQUFLLEVBQUwsR0FBVSxHQUFWLEdBQWdCLFNBQUssSUFBTCxDQUFXLFFBQVgsQ0FBbkMsQ0FBTjtBQURKO0FBREo7QUFESixpQkFJQSxPQUFPLFFBQVA7QUExSUU7QUFBQTtBQUFBLEtBQVY7O0FBOElBOztBQUVBLFFBQUksUUFBUSxPQUFRLEdBQVIsRUFBYTtBQUNyQixjQUFNLE9BRGU7QUFFckIsZ0JBQVEsUUFGYTtBQUdyQixxQkFBYSxJQUhRLEVBR0Y7QUFDbkIsZ0JBQVE7QUFDSixvQkFBUSxxR0FESjtBQUVKLG1CQUFPLDhCQUZIO0FBR0osbUJBQU8sc0JBSEg7QUFJSixtQkFBTztBQUpILFNBSmE7QUFVckIsbUJBQVc7QUFDUCx1QkFBVyxFQUFFLE1BQU0sS0FBUixFQUFlLFVBQVUsU0FBekIsRUFBb0MsUUFBUSxLQUE1QyxFQUFtRCxTQUFTLEtBQTVEO0FBREo7QUFWVSxLQUFiLENBQVo7O0FBZUE7O0FBRUEsUUFBSSxRQUFRLE9BQVEsR0FBUixFQUFhO0FBQ3JCLGNBQU0sT0FEZTtBQUVyQixnQkFBUSxRQUZhO0FBR3JCLHFCQUFhLElBSFEsRUFHRjtBQUNuQixnQkFBUTtBQUNKLG9CQUFRLHFHQURKO0FBRUosbUJBQU8sK0JBRkg7QUFHSixtQkFBTyx1QkFISDtBQUlKLG1CQUFPO0FBSkgsU0FKYTtBQVVyQixtQkFBVztBQUNQLHVCQUFXLEVBQUUsTUFBTSxLQUFSLEVBQWUsVUFBVSxTQUF6QixFQUFvQyxRQUFRLEtBQTVDLEVBQW1ELFNBQVMsS0FBNUQ7QUFESjtBQVZVLEtBQWIsQ0FBWjs7QUFlQTs7QUFFQSxRQUFJLFdBQVc7O0FBRVgsY0FBTSxVQUZLO0FBR1gsZ0JBQVEsVUFIRztBQUlYLHFCQUFhLElBSkY7QUFLWCxxQkFBYSxJQUxGLEVBS1E7QUFDbkIsbUJBQVcsK0JBTkE7QUFPWCwyQkFBbUIsSUFQUjtBQVFYLGdCQUFRO0FBQ0osb0JBQVEscUdBREo7QUFFSixtQkFBTywwQkFGSDtBQUdKLG1CQUFPLHNCQUhIO0FBSUosbUJBQU8sQ0FDSCwwQkFERyxFQUVILHdEQUZHLEVBR0gsZ0RBSEc7QUFKSCxTQVJHO0FBa0JYLGVBQU87QUFDSCxzQkFBVTtBQUNOLHVCQUFPLENBQ0gscUJBREcsRUFDb0I7QUFDdkIsbUNBRkcsRUFFa0I7QUFDckIsa0RBSEcsRUFHaUM7QUFDcEMsb0NBSkcsRUFJbUI7QUFDdEIsbURBTEcsRUFLa0M7QUFDckMseURBTkcsRUFNd0M7QUFDM0MscUVBUEcsRUFPb0Q7QUFDdkQsaUVBUkcsRUFRZ0Q7QUFDbkQsb0RBVEcsRUFTbUM7QUFDdEMsMkRBVkcsRUFVMEM7QUFDN0MsOENBWEcsRUFXNkI7QUFDaEMscUNBWkcsRUFZb0I7QUFDdkIsc0NBYkcsRUFhcUI7QUFDeEIseUNBZEcsRUFjd0I7QUFDM0IsNkNBZkcsRUFlNEI7QUFDL0IsK0NBaEJHLEVBZ0I4QjtBQUNqQywyQ0FqQkcsRUFpQjBCO0FBQzdCLDRDQWxCRyxFQWtCMkI7QUFDOUIsaURBbkJHLEVBbUJnQztBQUNuQyxzQ0FwQkcsQ0FERDtBQXVCTix3QkFBUSxDQUNKLHFCQURJLEVBQ21CO0FBQ3ZCLHNCQUZJLEVBRUk7QUFDUixnREFISSxFQUc4QjtBQUNsQyw4QkFKSTtBQXZCRixhQURQO0FBK0JILHVCQUFXO0FBQ1AsdUJBQU8sQ0FDSCx1QkFERyxFQUNzQjtBQUN6Qix5Q0FGRyxFQUV3QjtBQUMzQiw2Q0FIRyxFQUc0QjtBQUMvQixvQ0FKRyxFQUltQjtBQUN0Qiw2Q0FMRyxFQUs0QjtBQUMvQiwrQkFORyxFQU1jO0FBQ2pCLGlDQVBHLEVBT2dCO0FBQ25CLCtCQVJHLEVBUWM7QUFDakIsNkNBVEcsRUFTNEI7QUFDL0IsK0JBVkcsRUFVYztBQUNqQixpQ0FYRyxFQVdnQjtBQUNuQix1Q0FaRyxFQVlzQjtBQUN6QixrQ0FiRyxFQWFpQjtBQUNwQixzQ0FkRyxFQWNxQjtBQUN4Qix1Q0FmRyxFQWVzQjtBQUN6Qix3Q0FoQkcsRUFnQnVCO0FBQzFCLHNDQWpCRyxFQWlCcUI7QUFDeEIsNkNBbEJHLEVBa0I0QjtBQUMvQiwwQ0FuQkcsRUFtQnlCO0FBQzVCLDhCQXBCRyxFQW9CYTtBQUNoQiwrQkFyQkcsRUFxQmM7QUFDakIsd0NBdEJHLEVBc0J1QjtBQUMxQixrQ0F2QkcsRUF1QmlCO0FBQ3BCLDZDQXhCRyxFQXdCNEI7QUFDL0Isa0NBekJHLEVBeUJpQjtBQUNwQixxQ0ExQkcsRUEwQm9CO0FBQ3ZCLHFEQTNCRyxFQTJCb0M7QUFDdkMsbUNBNUJHLEVBNEJrQjtBQUNyQixtQ0E3QkcsRUE2QmtCO0FBQ3JCLDhDQTlCRyxFQThCNkI7QUFDaEMsaURBL0JHLEVBK0JnQztBQUNuQyxnRUFoQ0csRUFnQytDO0FBQ2xELCtDQWpDRyxFQWlDOEI7QUFDakMsOERBbENHLEVBa0M2QztBQUNoRCw4Q0FuQ0csRUFtQzZCO0FBQ2hDLDZEQXBDRyxFQW9DNEM7QUFDL0Msd0NBckNHLEVBcUN1QjtBQUMxQix3Q0F0Q0csRUFzQ3VCO0FBQzFCLHVDQXZDRyxFQXVDc0I7QUFDekIsOEJBeENHLEVBd0NhO0FBQ2hCLHdDQXpDRyxFQXlDdUI7QUFDMUIsa0NBMUNHLEVBMENpQjtBQUNwQix5Q0EzQ0csRUEyQ3dCO0FBQzNCLDhCQTVDRyxFQTRDYTtBQUNoQixrQ0E3Q0csQ0FEQTtBQWdEUCx3QkFBUSxDQUNKLHlCQURJLEVBQ3VCO0FBQzNCLDZDQUZJLEVBRTJCO0FBQy9CLG9DQUhJLEVBR2tCO0FBQ3RCLDZDQUpJLEVBSTJCO0FBQy9CLHNDQUxJLEVBS29CO0FBQ3hCLG9DQU5JLEVBTWtCO0FBQ3RCLCtCQVBJLEVBT2E7QUFDakIsdUNBUkksRUFRcUI7QUFDekIsa0NBVEksRUFTZ0I7QUFDcEIsK0JBVkksRUFVYTtBQUNqQixxQ0FYSSxFQVdtQjtBQUN2QixxQ0FaSSxFQVltQjtBQUN2QixtQ0FiSSxFQWFpQjtBQUNyQiw0QkFkSSxFQWNVO0FBQ2QsNkJBZkksRUFlVztBQUNmLDBDQWhCSSxFQWdCd0I7QUFDNUIsb0NBakJJLEVBaUJrQjtBQUN0QixtQ0FsQkksRUFrQmlCO0FBQ3JCLG1DQW5CSSxFQW1CaUI7QUFDckIsZ0VBcEJJLEVBb0I4QztBQUNsRCx1RUFyQkksRUFxQnFEO0FBQ3pELDBFQXRCSSxFQXNCd0Q7QUFDNUQsNkRBdkJJLEVBdUIyQztBQUMvQyw2REF4QkksRUF3QjJDO0FBQy9DLHVDQXpCSSxFQXlCcUI7QUFDekIsNENBMUJJLEVBMEIwQjtBQUM5Qiw4QkEzQkksRUEyQlk7QUFDaEIsa0NBNUJJLENBaEREO0FBOEVQLHVCQUFPLENBQ0gsdUJBREcsRUFDc0I7QUFDekIsb0NBRkcsRUFFbUI7QUFDdEIsNkNBSEcsRUFHNEI7QUFDL0IsK0JBSkcsRUFJYztBQUNqQiw2Q0FMRyxFQUs0QjtBQUMvQiwrQkFORyxFQU1jO0FBQ2pCLHVDQVBHLEVBT3NCO0FBQ3pCLHNDQVJHLEVBUXFCO0FBQ3hCLDZDQVRHLEVBUzRCO0FBQy9CLDBDQVZHLEVBVXlCO0FBQzVCLDhCQVhHLEVBV2E7QUFDaEIsbUNBWkcsRUFZa0I7QUFDckIsOEVBYkcsRUFhNkQ7QUFDaEUsNkRBZEcsRUFjNEM7QUFDL0Msd0NBZkcsRUFldUI7QUFDMUIsd0NBaEJHLENBOUVBO0FBZ0dQLDBCQUFVLENBQ04sMkJBRE0sRUFDdUI7QUFDN0IsK0NBRk0sRUFFMkI7QUFDakMsc0RBSE0sRUFHa0M7QUFDeEMsOEVBSk0sRUFJMEQ7QUFDaEUsMkVBTE0sRUFLdUQ7QUFDN0QsOEJBTk0sRUFNVTtBQUNoQix3Q0FQTSxFQU9vQjtBQUMxQixrQ0FSTSxFQVFjO0FBQ3BCLHVDQVRNO0FBaEdIO0FBL0JSLFNBbEJJOztBQStKTCxvQkEvSks7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQWdLYyxTQUFLLDBCQUFMLEVBaEtkO0FBQUE7QUFnS0gsd0JBaEtHO0FBaUtILHVCQWpLRyxHQWlLTyxTQUFTLFNBQVQsQ0FqS1A7QUFrS0gsc0JBbEtHLEdBa0tNLEVBbEtOOztBQW1LUCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFFBQVEsTUFBNUIsRUFBb0MsR0FBcEMsRUFBeUM7QUFDakMsMEJBRGlDLEdBQ3hCLFFBQVEsQ0FBUixDQUR3QjtBQUVqQyxzQkFGaUMsR0FFNUIsT0FBTyxjQUFQLENBRjRCO0FBR2pDLHdCQUhpQyxHQUcxQixHQUFHLEtBQUgsQ0FBVSxDQUFWLEVBQWEsQ0FBYixDQUgwQjtBQUlqQyx5QkFKaUMsR0FJekIsR0FBRyxLQUFILENBQVUsQ0FBVixFQUFhLENBQWIsQ0FKeUI7QUFLakMsMEJBTGlDLEdBS3hCLE9BQU8sR0FBUCxHQUFhLEtBTFc7O0FBTXJDLDJCQUFPLElBQVAsQ0FBYTtBQUNULDhCQUFNLEVBREc7QUFFVCxrQ0FBVSxNQUZEO0FBR1QsZ0NBQVEsSUFIQztBQUlULGlDQUFTLEtBSkE7QUFLVCxnQ0FBUTtBQUxDLHFCQUFiO0FBT0g7QUFDRCx1QkFBTyxNQUFQO0FBakxPO0FBQUE7QUFvTEwsb0JBcExLO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQXFMRCxTQUFLLFdBQUwsRUFyTEM7QUFBQTtBQUFBLHVCQXNMYyxTQUFLLHlCQUFMLEVBdExkO0FBQUE7QUFzTEgsd0JBdExHO0FBdUxILHdCQXZMRyxHQXVMUSxTQUFTLFVBQVQsQ0F2TFI7QUF3TEgsc0JBeExHLEdBd0xNLEVBQUUsUUFBUSxRQUFWLEVBeExOOztBQXlMUCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFNBQVMsTUFBN0IsRUFBcUMsR0FBckMsRUFBMEM7QUFDbEMsMkJBRGtDLEdBQ3hCLFNBQVMsQ0FBVCxDQUR3QjtBQUVsQyw0QkFGa0MsR0FFdkIsUUFBUSxVQUFSLENBRnVCO0FBR2xDLDJCQUhrQyxHQUd4QjtBQUNWLGdDQUFRLFFBQVEsa0JBQVIsQ0FERTtBQUVWLGdDQUFRLFNBQUssR0FBTCxDQUNKLFFBQVEsaUJBQVIsQ0FESSxFQUVKLFFBQVEsaUJBQVIsQ0FGSSxFQUdKLFFBQVEsV0FBUixDQUhJLENBRkU7QUFNVixpQ0FBUyxRQUFRLFNBQVI7QUFOQyxxQkFId0I7O0FBV3RDLDJCQUFPLFFBQVAsSUFBbUIsT0FBbkI7QUFDSDtBQUNELHVCQUFPLE1BQVA7QUF0TU87QUFBQTtBQXlNTCxzQkF6TUssMEJBeU1XLE1Bek1YO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBeU1tQixzQkF6TW5CLG1GQXlNNEIsRUF6TTVCO0FBQUEsdUJBME1ELFNBQUssV0FBTCxFQTFNQztBQUFBO0FBMk1ILGlCQTNNRyxHQTJNQyxTQUFLLE1BQUwsQ0FBYSxNQUFiLENBM01EO0FBQUEsdUJBNE1lLFNBQUssc0NBQUwsQ0FBNkMsU0FBSyxNQUFMLENBQWE7QUFDNUUsb0NBQWdCLEVBQUUsSUFBRjtBQUQ0RCxpQkFBYixFQUVoRSxNQUZnRSxDQUE3QyxDQTVNZjtBQUFBO0FBNE1ILHlCQTVNRztBQStNSCx5QkEvTUcsR0ErTVMsU0FBSyxZQUFMLEVBL01UO0FBZ05ILHNCQWhORyxHQWdOTTtBQUNULDRCQUFRLEVBREM7QUFFVCw0QkFBUSxFQUZDO0FBR1QsaUNBQWEsU0FISjtBQUlULGdDQUFZLFNBQUssT0FBTCxDQUFjLFNBQWQ7QUFKSCxpQkFoTk47QUFzTkgscUJBdE5HLEdBc05LLENBQUUsTUFBRixFQUFVLE1BQVYsQ0F0Tkw7O0FBdU5QLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksTUFBTSxNQUExQixFQUFrQyxHQUFsQyxFQUF1QztBQUMvQix3QkFEK0IsR0FDeEIsTUFBTSxDQUFOLENBRHdCO0FBRS9CLDBCQUYrQixHQUV0QixVQUFVLElBQVYsQ0FGc0I7O0FBR25DLHlCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksT0FBTyxNQUEzQixFQUFtQyxHQUFuQyxFQUF3QztBQUNoQyw2QkFEZ0MsR0FDeEIsT0FBTyxDQUFQLENBRHdCO0FBRWhDLDZCQUZnQyxHQUV4QixXQUFZLE1BQU0sT0FBTixDQUFaLENBRndCO0FBR2hDLDhCQUhnQyxHQUd2QixXQUFZLE1BQU0sUUFBTixDQUFaLENBSHVCOztBQUlwQywrQkFBTyxJQUFQLEVBQWEsSUFBYixDQUFtQixDQUFFLEtBQUYsRUFBUyxNQUFULENBQW5CO0FBQ0g7QUFDSjtBQUNELHVCQUFPLE1BQVA7QUFqT087QUFBQTtBQW9PWCxtQkFwT1csdUJBb09FLE1BcE9GLEVBb09VLE1BcE9WLEVBb09rQjtBQUN6QixnQkFBSSxZQUFZLFNBQVUsT0FBTyxnQkFBUCxDQUFWLElBQXNDLElBQXREO0FBQ0EsbUJBQU87QUFDSCw2QkFBYSxTQURWO0FBRUgsNEJBQVksS0FBSyxPQUFMLENBQWMsU0FBZCxDQUZUO0FBR0gsd0JBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQUhMO0FBSUgsdUJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQUpKO0FBS0gsdUJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQUxKO0FBTUgsdUJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQU5KO0FBT0gsd0JBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQVBMO0FBUUgsd0JBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQVJMO0FBU0gseUJBQVMsU0FUTjtBQVVILHlCQUFTLFNBVk47QUFXSCx3QkFBUSxXQUFZLE9BQU8sTUFBUCxDQUFaLENBWEw7QUFZSCwwQkFBVSxTQVpQO0FBYUgsOEJBQWMsU0FiWDtBQWNILDJCQUFXLFNBZFI7QUFlSCw4QkFBYyxTQWZYO0FBZ0JILCtCQUFlLFdBQVksT0FBTyxRQUFQLENBQVosQ0FoQlo7QUFpQkgsd0JBQVE7QUFqQkwsYUFBUDtBQW1CSCxTQXpQVTtBQTJQTCxvQkEzUEs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkE0UEQsU0FBSyxXQUFMLEVBNVBDO0FBQUE7QUFBQSx1QkE2UGMsU0FBSywwQkFBTCxFQTdQZDtBQUFBO0FBNlBILHdCQTdQRztBQThQSCx1QkE5UEcsR0E4UE8sU0FBUyxTQUFULENBOVBQO0FBK1BILHNCQS9QRyxHQStQTSxFQS9QTjs7QUFnUVAscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxRQUFRLE1BQTVCLEVBQW9DLEdBQXBDLEVBQXlDO0FBQ2pDLDBCQURpQyxHQUN4QixRQUFRLENBQVIsQ0FEd0I7QUFFakMsc0JBRmlDLEdBRTVCLE9BQU8sY0FBUCxDQUY0QjtBQUdqQywwQkFIaUMsR0FHeEIsU0FBSyxhQUFMLENBQW1CLEVBQW5CLENBSHdCO0FBSWpDLDBCQUppQyxHQUl4QixPQUFPLFFBQVAsQ0FKd0I7O0FBS3JDLDJCQUFPLE1BQVAsSUFBaUIsU0FBSyxXQUFMLENBQWtCLE1BQWxCLEVBQTBCLE1BQTFCLENBQWpCO0FBQ0g7QUFDRCx1QkFBTyxNQUFQO0FBdlFPO0FBQUE7QUEwUUwsbUJBMVFLLHVCQTBRUSxNQTFRUjtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBMlFELFNBQUssV0FBTCxFQTNRQztBQUFBO0FBNFFILGlCQTVRRyxHQTRRQyxTQUFLLE1BQUwsQ0FBYSxNQUFiLENBNVFEO0FBQUEsdUJBNlFjLFNBQUsscUNBQUwsQ0FBNEM7QUFDN0Qsb0NBQWdCLEVBQUUsSUFBRjtBQUQ2QyxpQkFBNUMsQ0E3UWQ7QUFBQTtBQTZRSCx3QkE3UUc7QUFnUkgsc0JBaFJHLEdBZ1JNLFNBQVMsUUFBVCxDQWhSTjs7QUFpUlAsdUJBQU8sU0FBSyxXQUFMLENBQWtCLE1BQWxCLEVBQTBCLENBQTFCLENBQVA7QUFqUk87QUFBQTtBQW9STCxtQkFwUkssdUJBb1JRLE1BcFJSO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBb1JnQixzQkFwUmhCLG1GQW9SeUIsRUFwUnpCO0FBQUEsdUJBcVJELFNBQUssV0FBTCxFQXJSQztBQUFBO0FBc1JQLHVCQUFPLFNBQUssdUNBQUwsQ0FBOEMsU0FBSyxNQUFMLENBQWE7QUFDOUQsb0NBQWdCLFNBQUssUUFBTCxDQUFlLE1BQWY7QUFEOEMsaUJBQWIsRUFFbEQsTUFGa0QsQ0FBOUMsQ0FBUDtBQXRSTztBQUFBO0FBMlJMLG1CQTNSSyx1QkEyUlEsTUEzUlIsRUEyUmdCLElBM1JoQixFQTJSc0IsSUEzUnRCLEVBMlI0QixNQTNSNUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUEyUm9DLHFCQTNScEMsbUZBMlI0QyxTQTNSNUM7QUEyUnVELHNCQTNSdkQsbUZBMlJnRSxFQTNSaEU7QUFBQSx1QkE0UkQsU0FBSyxXQUFMLEVBNVJDO0FBQUE7QUE2UkgscUJBN1JHLEdBNlJLO0FBQ1IsNEJBQVEsU0FBSyxRQUFMLENBQWUsTUFBZixDQURBO0FBRVIsMkJBQVEsUUFBUSxLQUFULEdBQWtCLEtBQWxCLEdBQTBCLEtBRnpCO0FBR1IsOEJBQVU7QUFIRixpQkE3Ukw7O0FBa1NQLG9CQUFJLFFBQVEsT0FBWjtBQUNJLDBCQUFNLE9BQU4sSUFBaUIsS0FBakI7QUFESixpQkFFQSxJQUFJLFNBQUssS0FBVCxFQUFnQjtBQUNaLHdCQUFJLG9CQUFvQixNQUF4QjtBQUNJLDhCQUFNLGdCQUFOLElBQTBCLE9BQU8sZ0JBQVAsQ0FBMUI7QUFESjtBQUdJLDhCQUFNLElBQUksbUJBQUosQ0FBeUIsU0FBSyxFQUFMLEdBQVUsd0VBQW5DLENBQU47QUFISjtBQUlIO0FBelNNLHVCQTBTYyxTQUFLLHNCQUFMLENBQTZCLFNBQUssTUFBTCxDQUFhLEtBQWIsRUFBb0IsTUFBcEIsQ0FBN0IsQ0ExU2Q7QUFBQTtBQTBTSCx3QkExU0c7O0FBMlNQLHVCQUFPO0FBQ0gsNEJBQVEsUUFETDtBQUVILDBCQUFNLFNBQVMsV0FBVDtBQUZILGlCQUFQO0FBM1NPO0FBQUE7QUFpVEwsbUJBalRLLHVCQWlUUSxFQWpUUjtBQUFBOztBQUFBO0FBQUEsdUJBa1RELFNBQUssV0FBTCxFQWxUQztBQUFBO0FBbVRQLHVCQUFPLFNBQUssK0JBQUwsQ0FBc0MsRUFBRSxXQUFXLEVBQWIsRUFBdEMsQ0FBUDtBQW5UTztBQUFBO0FBc1RMLGVBdFRLLG1CQXNUSSxJQXRUSjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBc1RVLG1CQXRUVixtRkFzVGdCLFFBdFRoQjtBQXNUMEIsc0JBdFQxQixtRkFzVG1DLEtBdFRuQztBQXNUMEMsc0JBdFQxQyxtRkFzVG1ELEVBdFRuRDtBQXNUdUQsdUJBdFR2RCxtRkFzVGlFLFNBdFRqRTtBQXNUNEUsb0JBdFQ1RSxtRkFzVG1GLFNBdFRuRjtBQXVUSCxtQkF2VEcsR0F1VEcsU0FBSyxJQUFMLENBQVUsS0FBVixJQUFtQixHQUFuQixHQUF5QixTQUFLLGFBQUwsQ0FBb0IsSUFBcEIsRUFBMEIsTUFBMUIsQ0F2VDVCO0FBd1RILHFCQXhURyxHQXdUSyxTQUFLLElBQUwsQ0FBVyxNQUFYLEVBQW1CLFNBQUssYUFBTCxDQUFvQixJQUFwQixDQUFuQixDQXhUTDs7QUF5VFAsb0JBQUksT0FBTyxRQUFYLEVBQXFCO0FBQ2pCLHdCQUFJLE9BQU8sSUFBUCxDQUFhLEtBQWIsRUFBb0IsTUFBeEI7QUFDSSwrQkFBTyxNQUFNLFNBQUssU0FBTCxDQUFnQixLQUFoQixDQUFiO0FBREo7QUFFSCxpQkFIRCxNQUdPO0FBQ0MseUJBREQsR0FDUyxTQUFLLEtBQUwsRUFEVDtBQUVDLCtCQUZELEdBRWdCLFVBQVUsS0FBWCxHQUFvQixFQUFwQixHQUF5QixrQkFGeEM7QUFHQyx3QkFIRCxHQUdRLFNBQVMsR0FBVCxHQUFlLFdBQWYsR0FBNkIsTUFBTSxRQUFOLEVBSHJDOztBQUlILDJCQUFPLEtBQUssV0FBTCxFQUFQO0FBQ0ksNkJBTEQsR0FLYSxTQUFLLElBQUwsQ0FBVyxTQUFLLE1BQUwsQ0FBYSxJQUFiLENBQVgsRUFBK0IsU0FBSyxNQUFMLENBQWEsU0FBSyxNQUFsQixDQUEvQixFQUEwRCxRQUExRCxFQUFvRSxRQUFwRSxDQUxiOztBQU1ILDhCQUFVO0FBQ04sMENBQWtCLFNBQUssTUFEakI7QUFFTixpREFBeUIsU0FGbkI7QUFHTiw0Q0FBb0I7QUFIZCxxQkFBVjtBQUtBLHdCQUFJLFVBQVUsS0FBZCxFQUFxQjtBQUNqQixnQ0FBUSxjQUFSLElBQTBCLFdBQTFCO0FBQ0EsK0JBQU8sU0FBSyxJQUFMLENBQVcsU0FBSyxNQUFMLENBQWEsRUFBRSxTQUFTLEtBQVgsRUFBYixFQUFpQyxNQUFqQyxDQUFYLENBQVA7QUFDSDtBQUNKO0FBM1VNLHVCQTRVYyxTQUFLLEtBQUwsQ0FBWSxHQUFaLEVBQWlCLE1BQWpCLEVBQXlCLE9BQXpCLEVBQWtDLElBQWxDLENBNVVkO0FBQUE7QUE0VUgsd0JBNVVHO0FBQUEsMEJBNlVILG9CQUFvQixRQTdVakI7QUFBQSxxQ0E4VUMsYUFBYSxTQUFTLGdCQUFULENBOVVkOztBQStVQywrQkFBSSxTQUFTLGdCQUFULEVBQTJCLFNBQTNCLEtBQXlDLElBQTdDO0FBQ0ksMkJBQU8sUUFBUDtBQURKO0FBRVIsMEJBQU0sSUFBSSxhQUFKLENBQW1CLFNBQUssRUFBTCxHQUFVLEdBQVYsR0FBZ0IsU0FBSyxJQUFMLENBQVcsUUFBWCxDQUFuQyxDQUFOO0FBRlE7QUEvVUQ7QUFBQTtBQUFBLEtBQWY7O0FBcVZBOztBQUVBLFFBQUksT0FBTztBQUNQLGNBQU0sTUFEQztBQUVQLGdCQUFRLE1BRkQ7QUFHUCxxQkFBYSxJQUhOO0FBSVAscUJBQWEsSUFKTjtBQUtQLGdCQUFRO0FBQ0osb0JBQVEscUNBREo7QUFFSixvQkFBUSxxR0FGSjtBQUdKLG1CQUFPLHNCQUhIO0FBSUosbUJBQU8sc0JBSkg7QUFLSixtQkFBTztBQUxILFNBTEQ7QUFZUCxlQUFPO0FBQ0gsc0JBQVU7QUFDTix1QkFBTyxDQUNILFlBREcsRUFFSCxVQUZHLEVBR0gsb0JBSEcsRUFJSCx1QkFKRyxFQUtILHFCQUxHLEVBTUgsc0JBTkcsRUFPSCxzQkFQRyxFQVFILE1BUkc7QUFERCxhQURQO0FBYUgsdUJBQVc7QUFDUCx1QkFBTyxDQUNILFVBREcsRUFFSCxlQUZHLEVBR0gscUJBSEcsRUFJSCxzQkFKRyxFQUtILG1CQUxHLEVBTUgsT0FORyxFQU9ILFNBUEcsRUFRSCxRQVJHLEVBU0gsYUFURyxFQVVILGlCQVZHLEVBV0gsVUFYRyxFQVlILGNBWkcsRUFhSCw0QkFiRyxDQURBO0FBZ0JQLHdCQUFRLENBQ0osMkJBREksRUFFSix5QkFGSSxFQUdKLGVBSEksRUFJSixRQUpJLEVBS0osZ0JBTEksRUFNSiwwQkFOSSxFQU9KLFNBUEksRUFRSixzQkFSSSxFQVNKLG9CQVRJLEVBVUosNEJBVkksQ0FoQkQ7QUE0QlAsMEJBQVUsQ0FDTixRQURNLEVBRU4sYUFGTTtBQTVCSDtBQWJSLFNBWkE7O0FBNERELG9CQTVEQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQTZEaUIsU0FBSyxpQkFBTCxFQTdEakI7QUFBQTtBQTZEQyx1QkE3REQ7QUE4REMsc0JBOURELEdBOERVLEVBOURWOztBQStESCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFFBQVEsTUFBNUIsRUFBb0MsR0FBcEMsRUFBeUM7QUFDakMsMEJBRGlDLEdBQ3hCLFFBQVEsQ0FBUixDQUR3QjtBQUVqQyxzQkFGaUMsR0FFNUIsT0FBTyxJQUFQLENBRjRCO0FBR2pDLHdCQUhpQyxHQUcxQixPQUFPLGVBQVAsQ0FIMEI7QUFJakMseUJBSmlDLEdBSXpCLE9BQU8sZ0JBQVAsQ0FKeUI7QUFLakMsMEJBTGlDLEdBS3hCLE9BQU8sR0FBUCxHQUFhLEtBTFc7O0FBTXJDLDJCQUFPLElBQVAsQ0FBYTtBQUNULDhCQUFNLEVBREc7QUFFVCxrQ0FBVSxNQUZEO0FBR1QsZ0NBQVEsSUFIQztBQUlULGlDQUFTLEtBSkE7QUFLVCxnQ0FBUTtBQUxDLHFCQUFiO0FBT0g7QUFDRCx1QkFBTyxNQUFQO0FBN0VHO0FBQUE7QUFnRkQsb0JBaEZDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkFpRkcsU0FBSyxXQUFMLEVBakZIO0FBQUE7QUFBQSx1QkFrRmtCLFNBQUssa0JBQUwsRUFsRmxCO0FBQUE7QUFrRkMsd0JBbEZEO0FBbUZDLHNCQW5GRCxHQW1GVSxFQUFFLFFBQVEsUUFBVixFQW5GVjs7QUFvRkgscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxTQUFTLE1BQTdCLEVBQXFDLEdBQXJDLEVBQTBDO0FBQ2xDLDJCQURrQyxHQUN4QixTQUFTLENBQVQsQ0FEd0I7QUFFbEMsNEJBRmtDLEdBRXZCLFFBQVEsVUFBUixDQUZ1QjtBQUdsQywyQkFIa0MsR0FHeEI7QUFDVixnQ0FBUSxXQUFZLFFBQVEsV0FBUixDQUFaLENBREU7QUFFVixnQ0FBUSxXQUFZLFFBQVEsTUFBUixDQUFaLENBRkU7QUFHVixpQ0FBUyxXQUFZLFFBQVEsU0FBUixDQUFaO0FBSEMscUJBSHdCOztBQVF0QywyQkFBTyxRQUFQLElBQW1CLE9BQW5CO0FBQ0g7QUFDRCx1QkFBTyxNQUFQO0FBOUZHO0FBQUE7QUFpR0Qsc0JBakdDLDBCQWlHZSxNQWpHZjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFpR3VCLHNCQWpHdkIsbUZBaUdnQyxFQWpHaEM7QUFBQSx1QkFrR0csU0FBSyxXQUFMLEVBbEdIO0FBQUE7QUFBQSx1QkFtR21CLFNBQUssdUJBQUwsQ0FBOEIsU0FBSyxNQUFMLENBQWE7QUFDN0QsMEJBQU0sU0FBSyxRQUFMLENBQWUsTUFBZixDQUR1RDtBQUU3RCw2QkFBUyxDQUZvRCxDQUVqRDtBQUZpRCxpQkFBYixFQUdqRCxNQUhpRCxDQUE5QixDQW5HbkI7QUFBQTtBQW1HQyx5QkFuR0Q7QUF1R0MseUJBdkdELEdBdUdhLFNBQUssWUFBTCxFQXZHYjtBQXdHQyxzQkF4R0QsR0F3R1U7QUFDVCw0QkFBUSxFQURDO0FBRVQsNEJBQVEsRUFGQztBQUdULGlDQUFhLFNBSEo7QUFJVCxnQ0FBWSxTQUFLLE9BQUwsQ0FBYyxTQUFkO0FBSkgsaUJBeEdWO0FBOEdDLHFCQTlHRCxHQThHUyxDQUFFLE1BQUYsRUFBVSxNQUFWLENBOUdUOztBQStHSCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLE1BQU0sTUFBMUIsRUFBa0MsR0FBbEMsRUFBdUM7QUFDL0Isd0JBRCtCLEdBQ3hCLE1BQU0sQ0FBTixDQUR3QjtBQUUvQiwwQkFGK0IsR0FFdEIsVUFBVSxJQUFWLENBRnNCOztBQUduQyx5QkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLE9BQU8sTUFBM0IsRUFBbUMsR0FBbkMsRUFBd0M7QUFDaEMsNkJBRGdDLEdBQ3hCLE9BQU8sQ0FBUCxDQUR3QjtBQUVoQyw2QkFGZ0MsR0FFeEIsV0FBWSxNQUFNLENBQU4sQ0FBWixDQUZ3QjtBQUdoQyw4QkFIZ0MsR0FHdkIsV0FBWSxNQUFNLENBQU4sQ0FBWixDQUh1Qjs7QUFJcEMsK0JBQU8sSUFBUCxFQUFhLElBQWIsQ0FBbUIsQ0FBRSxLQUFGLEVBQVMsTUFBVCxDQUFuQjtBQUNIO0FBQ0o7QUFDRCx1QkFBTyxNQUFQO0FBekhHO0FBQUE7QUE0SEQsbUJBNUhDLHVCQTRIWSxNQTVIWjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBNkhHLFNBQUssV0FBTCxFQTdISDtBQUFBO0FBOEhDLGlCQTlIRCxHQThISyxTQUFLLE1BQUwsQ0FBYSxNQUFiLENBOUhMO0FBQUEsdUJBK0hnQixTQUFLLHlCQUFMLENBQWdDO0FBQy9DLDBCQUFNLEVBQUUsSUFBRjtBQUR5QyxpQkFBaEMsQ0EvSGhCO0FBQUE7QUErSEMsc0JBL0hEO0FBQUEsdUJBa0llLFNBQUssd0JBQUwsQ0FBK0I7QUFDN0MsMEJBQU0sRUFBRSxJQUFGO0FBRHVDLGlCQUEvQixDQWxJZjtBQUFBO0FBa0lDLHFCQWxJRDtBQXFJQyx5QkFySUQsR0FxSWEsU0FBSyxTQUFMLENBQWdCLE9BQU8sTUFBUCxDQUFoQixDQXJJYjtBQXNJQyxtQkF0SUQsR0FzSU8sU0F0SVA7QUF1SUMsbUJBdklELEdBdUlPLFNBdklQOztBQXdJSCxvQkFBSSxTQUFTLE1BQWI7QUFDSSwwQkFBTSxXQUFZLE9BQU8sS0FBUCxDQUFaLENBQU47QUFESixpQkFFQSxJQUFJLFNBQVMsTUFBYjtBQUNJLDBCQUFNLFdBQVksT0FBTyxLQUFQLENBQVosQ0FBTjtBQURKLGlCQUVBLE9BQU87QUFDSCxpQ0FBYSxTQURWO0FBRUgsZ0NBQVksU0FBSyxPQUFMLENBQWMsU0FBZCxDQUZUO0FBR0gsNEJBQVEsV0FBWSxNQUFNLE1BQU4sQ0FBWixDQUhMO0FBSUgsMkJBQU8sV0FBWSxNQUFNLEtBQU4sQ0FBWixDQUpKO0FBS0gsMkJBQU8sR0FMSjtBQU1ILDJCQUFPLEdBTko7QUFPSCw0QkFBUSxTQVBMO0FBUUgsNEJBQVEsV0FBWSxNQUFNLE1BQU4sQ0FBWixDQVJMO0FBU0gsNkJBQVMsU0FUTjtBQVVILDZCQUFTLFNBVk47QUFXSCw0QkFBUSxXQUFZLE1BQU0sTUFBTixDQUFaLENBWEw7QUFZSCw4QkFBVSxTQVpQO0FBYUgsa0NBQWMsU0FiWDtBQWNILCtCQUFXLFNBZFI7QUFlSCxrQ0FBYyxTQWZYO0FBZ0JILG1DQUFlLFdBQVksT0FBTyxRQUFQLENBQVosQ0FoQlo7QUFpQkgsNEJBQVE7QUFqQkwsaUJBQVA7QUE1SUc7QUFBQTtBQWlLUCxrQkFqS08sc0JBaUtLLEtBaktMLEVBaUtZLE1BaktaLEVBaUtvQjtBQUN2QixnQkFBSSxZQUFZLEtBQUssU0FBTCxDQUFnQixDQUFDLE1BQUQsQ0FBaEIsQ0FBaEI7QUFDQSxnQkFBSSxPQUFPLFNBQVg7QUFDQSxtQkFBTztBQUNILHNCQUFNLE1BQU0sVUFBTixFQUFrQixRQUFsQixFQURIO0FBRUgsd0JBQVEsS0FGTDtBQUdILDZCQUFhLFNBSFY7QUFJSCw0QkFBWSxLQUFLLE9BQUwsQ0FBYyxTQUFkLENBSlQ7QUFLSCwwQkFBVSxPQUFPLFFBQVAsQ0FMUDtBQU1ILHdCQUFRLFNBTkw7QUFPSCx3QkFBUSxNQUFNLE1BQU4sQ0FQTDtBQVFILHlCQUFTLFdBQVksTUFBTSxPQUFOLENBQVosQ0FSTjtBQVNILDBCQUFVLFdBQVksTUFBTSxNQUFOLENBQVo7QUFUUCxhQUFQO0FBV0gsU0EvS007QUFpTEQsbUJBakxDLHVCQWlMWSxNQWpMWjtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQWlMb0Isc0JBakxwQixtRkFpTDZCLEVBakw3QjtBQUFBLHVCQWtMRyxTQUFLLFdBQUwsRUFsTEg7QUFBQTtBQW1MSCx1QkFBTyxTQUFLLHlCQUFMLENBQWdDLFNBQUssTUFBTCxDQUFhO0FBQ2hELDBCQUFNLFNBQUssUUFBTCxDQUFlLE1BQWYsQ0FEMEMsQ0FDbEI7QUFEa0IsaUJBQWIsRUFFcEMsTUFGb0MsQ0FBaEMsQ0FBUDtBQW5MRztBQUFBO0FBd0xQLGtCQXhMTyxzQkF3TEssS0F4TEwsRUF3THNGO0FBQUEsZ0JBQTFFLE1BQTBFLHVFQUFqRSxTQUFpRTtBQUFBLGdCQUF0RCxTQUFzRCx1RUFBMUMsRUFBMEM7QUFBQSxnQkFBdEMsS0FBc0MsdUVBQTlCLFNBQThCO0FBQUEsZ0JBQW5CLEtBQW1CLHVFQUFYLFNBQVc7O0FBQ3pGLG1CQUFPLENBQ0gsTUFBTSxDQUFOLElBQVcsSUFEUixFQUVILE1BQU0sQ0FBTixDQUZHLEVBR0gsTUFBTSxDQUFOLENBSEcsRUFJSCxNQUFNLENBQU4sQ0FKRyxFQUtILE1BQU0sQ0FBTixDQUxHLEVBTUgsTUFBTSxDQUFOLENBTkcsQ0FBUDtBQVFILFNBak1NO0FBbU1ELGtCQW5NQyxzQkFtTVcsTUFuTVg7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQW1NbUIseUJBbk1uQixtRkFtTStCLEVBbk0vQjtBQW1NbUMscUJBbk1uQyxtRkFtTTJDLFNBbk0zQztBQW1Nc0QscUJBbk10RCxtRkFtTThELFNBbk05RDtBQW9NQyxpQkFwTUQsR0FvTUssU0FBSyxNQUFMLENBQWEsTUFBYixDQXBNTDtBQUFBLHVCQXFNa0IsU0FBSywwQkFBTCxDQUFpQztBQUNsRCwwQkFBTSxFQUFFLElBQUYsQ0FENEM7QUFFbEQsbUNBQWUsU0FGbUM7QUFHbEQsNkJBQVMsS0FIeUM7QUFJbEQsMkJBQU87QUFKMkMsaUJBQWpDLENBck1sQjtBQUFBO0FBcU1DLHdCQXJNRDs7QUEyTUgsdUJBQU8sU0FBSyxXQUFMLENBQWtCLENBQWxCLEVBQXFCLFFBQXJCLEVBQStCLFNBQS9CLEVBQTBDLEtBQTFDLEVBQWlELEtBQWpELENBQVA7QUEzTUc7QUFBQTtBQThNRCxtQkE5TUMsdUJBOE1ZLE1BOU1aLEVBOE1vQixJQTlNcEIsRUE4TTBCLElBOU0xQixFQThNZ0MsTUE5TWhDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUE4TXdDLHFCQTlNeEMsbUZBOE1nRCxTQTlNaEQ7QUE4TTJELHNCQTlNM0QsbUZBOE1vRSxFQTlNcEU7QUFBQSx1QkErTUcsU0FBSyxXQUFMLEVBL01IO0FBQUE7QUFnTkMsbUJBaE5ELEdBZ05PLFNBQUssS0FBTCxHQUFjLFFBQWQsRUFoTlA7QUFpTkMscUJBak5ELEdBaU5TO0FBQ1Isa0NBQWMsU0FBSyxRQUFMLENBQWUsTUFBZixDQUROO0FBRVIsNEJBQVEsSUFGQTtBQUdSLDRCQUFRLE1BSEE7QUFJUiw0QkFBUTtBQUpBLGlCQWpOVDs7QUF1Tkgsb0JBQUksUUFBUSxPQUFaO0FBQ0ksMEJBQU0sT0FBTixJQUFpQixLQUFqQjtBQURKLGlCQXZORyxPQXlOa0IsU0FBSyxpQkFBTCxDQUF3QixTQUFLLE1BQUwsQ0FBYSxLQUFiLEVBQW9CLE1BQXBCLENBQXhCLENBek5sQjtBQUFBO0FBeU5DLHdCQXpORDs7QUEwTkgsdUJBQU87QUFDSCw0QkFBUSxRQURMO0FBRUgsMEJBQU0sU0FBUyxJQUFUO0FBRkgsaUJBQVA7QUExTkc7QUFBQTtBQWdPRCxtQkFoT0MsdUJBZ09ZLEVBaE9aO0FBQUE7O0FBQUE7QUFBQSx1QkFpT0csU0FBSyxXQUFMLEVBak9IO0FBQUE7QUFrT0gsdUJBQU8sU0FBSyxxQkFBTCxDQUE0QixFQUFFLE1BQU0sRUFBUixFQUE1QixDQUFQO0FBbE9HO0FBQUE7QUFxT0QsZUFyT0MsbUJBcU9RLElBck9SO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBcU9jLG1CQXJPZCxtRkFxT29CLFFBck9wQjtBQXFPOEIsc0JBck85QixtRkFxT3VDLEtBck92QztBQXFPOEMsc0JBck85QyxtRkFxT3VELEVBck92RDtBQXFPMkQsdUJBck8zRCxtRkFxT3FFLFNBck9yRTtBQXFPZ0Ysb0JBck9oRixtRkFxT3VGLFNBck92RjtBQXNPQyx1QkF0T0QsR0FzT1csTUFBTSxTQUFLLGFBQUwsQ0FBb0IsSUFBcEIsRUFBMEIsTUFBMUIsQ0F0T2pCO0FBdU9DLG1CQXZPRCxHQXVPTyxTQUFLLElBQUwsQ0FBVSxLQUFWLElBQW1CLE9Bdk8xQjtBQXdPQyxxQkF4T0QsR0F3T1MsU0FBSyxJQUFMLENBQVcsTUFBWCxFQUFtQixTQUFLLGFBQUwsQ0FBb0IsSUFBcEIsQ0FBbkIsQ0F4T1Q7O0FBeU9ILG9CQUFJLE9BQU8sUUFBWCxFQUFxQjtBQUNqQix3QkFBSSxPQUFPLElBQVAsQ0FBYSxLQUFiLEVBQW9CLE1BQXhCO0FBQ0ksK0JBQU8sTUFBTSxTQUFLLFNBQUwsQ0FBZ0IsS0FBaEIsQ0FBYjtBQURKO0FBRUgsaUJBSEQsTUFHTztBQUNILHdCQUFJLENBQUMsU0FBSyxNQUFWO0FBQ0ksOEJBQU0sSUFBSSxtQkFBSixDQUF5QixTQUFLLEVBQUwsR0FBVSwwREFBbkMsQ0FBTjtBQURKLHFCQUVBLElBQUksQ0FBQyxTQUFLLE1BQVY7QUFDSSw4QkFBTSxJQUFJLG1CQUFKLENBQXlCLFNBQUssRUFBTCxHQUFVLDBEQUFuQyxDQUFOO0FBREoscUJBRUEsSUFBSSxDQUFDLFNBQUssUUFBVjtBQUNJLDhCQUFNLElBQUksbUJBQUosQ0FBeUIsU0FBSyxFQUFMLEdBQVUsNERBQW5DLENBQU47QUFESixxQkFFSSxLQVBELEdBT1MsU0FBSyxLQUFMLEdBQWMsUUFBZCxFQVBUOztBQVFILHdCQUFJLE9BQU8sSUFBUCxDQUFhLEtBQWIsRUFBb0IsTUFBeEI7QUFDSSwrQkFBTyxTQUFLLElBQUwsQ0FBVyxLQUFYLENBQVA7QUFESixxQkFFSSxJQVZELEdBVVEsUUFBUSxNQUFSLEdBQWlCLE9BQWpCLElBQTRCLFFBQVEsRUFBcEMsQ0FWUjtBQVdDLDBCQVhELEdBV1UsU0FBSyxjQUFMLENBQXFCLFNBQUssTUFBMUIsQ0FYVjtBQVlDLDZCQVpELEdBWWEsU0FBSyxJQUFMLENBQVcsU0FBSyxNQUFMLENBQWEsSUFBYixDQUFYLEVBQStCLE1BQS9CLEVBQXVDLFFBQXZDLEVBQWlELFFBQWpELENBWmI7O0FBYUgsOEJBQVU7QUFDTix5Q0FBaUIsU0FBSyxNQURoQjtBQUVOLDBDQUFrQixTQUFLLE1BQUwsQ0FBYSxTQUFiLENBRlo7QUFHTiwrQ0FBdUIsS0FIakI7QUFJTixnREFBd0IsU0FBSyxRQUp2QjtBQUtOLHdDQUFnQjtBQUxWLHFCQUFWO0FBT0g7QUFoUUUsdUJBaVFrQixTQUFLLEtBQUwsQ0FBWSxHQUFaLEVBQWlCLE1BQWpCLEVBQXlCLE9BQXpCLEVBQWtDLElBQWxDLENBalFsQjtBQUFBO0FBaVFDLHdCQWpRRDs7QUFrUUgsb0JBQUksYUFBYSxRQUFqQjtBQUNJLDBCQUFNLElBQUksYUFBSixDQUFtQixTQUFLLEVBQUwsR0FBVSxHQUFWLEdBQWdCLFNBQUssSUFBTCxDQUFXLFFBQVgsQ0FBbkMsQ0FBTjtBQURKLGlCQUVBLE9BQU8sUUFBUDtBQXBRRztBQUFBO0FBQUEsS0FBWDs7QUF3UUE7O0FBRUEsUUFBSSxTQUFTO0FBQ1QsY0FBTSxRQURHO0FBRVQsZ0JBQVEsUUFGQztBQUdULHFCQUFhLElBSEo7QUFJVCxxQkFBYSxJQUpKLEVBSVU7QUFDbkIsbUJBQVcsSUFMRjtBQU1ULGdCQUFRO0FBQ0osb0JBQVEscUdBREo7QUFFSixtQkFBTyx3QkFGSDtBQUdKLG1CQUFPLG9CQUhIO0FBSUosbUJBQU87QUFKSCxTQU5DO0FBWVQsZUFBTztBQUNILHNCQUFVO0FBQ04sdUJBQU8sQ0FDSCxTQURHLEVBRUgsb0JBRkcsRUFHSCxlQUhHLEVBSUgsaUJBSkcsRUFLSCxrQkFMRyxFQU1ILDBCQU5HO0FBREQsYUFEUDtBQVdILHVCQUFXO0FBQ1Asd0JBQVEsQ0FDSixXQURJLEVBRUosY0FGSSxFQUdKLHNCQUhJLEVBSUosa0JBSkksRUFLSixjQUxJLEVBTUosUUFOSSxFQU9KLFVBUEksRUFRSixhQVJJLEVBU0osVUFUSSxFQVVKLCtCQVZJLEVBV0oscUJBWEksRUFZSixXQVpJO0FBREQ7QUFYUixTQVpFOztBQXlDSCxvQkF6Q0c7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQTBDZSxTQUFLLGdCQUFMLEVBMUNmO0FBQUE7QUEwQ0QsdUJBMUNDO0FBMkNELHNCQTNDQyxHQTJDUSxFQTNDUjs7QUE0Q0wscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxRQUFRLE1BQTVCLEVBQW9DLEdBQXBDLEVBQXlDO0FBQ2pDLHNCQURpQyxHQUM1QixRQUFRLENBQVIsQ0FENEI7QUFFakMsMEJBRmlDLEdBRXhCLEVBRndCO0FBR2pDLDZCQUhpQyxHQUdyQixPQUFPLFdBQVAsRUFIcUI7QUFJakMsd0JBSmlDLEdBSTFCLFVBQVUsS0FBVixDQUFpQixDQUFqQixFQUFvQixDQUFwQixDQUowQjtBQUtqQyx5QkFMaUMsR0FLekIsVUFBVSxLQUFWLENBQWlCLENBQWpCLEVBQW9CLENBQXBCLENBTHlCO0FBTWpDLDBCQU5pQyxHQU14QixPQUFPLEdBQVAsR0FBYSxLQU5XOztBQU9yQywyQkFBTyxJQUFQLENBQWE7QUFDVCw4QkFBTSxFQURHO0FBRVQsa0NBQVUsTUFGRDtBQUdULGdDQUFRLElBSEM7QUFJVCxpQ0FBUyxLQUpBO0FBS1QsZ0NBQVE7QUFMQyxxQkFBYjtBQU9IO0FBQ0QsdUJBQU8sTUFBUDtBQTNESztBQUFBO0FBOERILHNCQTlERywwQkE4RGEsTUE5RGI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUE4RHFCLHNCQTlEckIsbUZBOEQ4QixFQTlEOUI7QUFBQSx1QkErREMsU0FBSyxXQUFMLEVBL0REO0FBQUE7QUFBQSx1QkFnRWlCLFNBQUssbUJBQUwsQ0FBMEIsU0FBSyxNQUFMLENBQWE7QUFDekQsOEJBQVUsU0FBSyxRQUFMLENBQWUsTUFBZjtBQUQrQyxpQkFBYixFQUU3QyxNQUY2QyxDQUExQixDQWhFakI7QUFBQTtBQWdFRCx5QkFoRUM7QUFtRUQseUJBbkVDLEdBbUVXLFNBQUssWUFBTCxFQW5FWDtBQW9FRCxzQkFwRUMsR0FvRVE7QUFDVCw0QkFBUSxFQURDO0FBRVQsNEJBQVEsRUFGQztBQUdULGlDQUFhLFNBSEo7QUFJVCxnQ0FBWSxTQUFLLE9BQUwsQ0FBYyxTQUFkO0FBSkgsaUJBcEVSO0FBMEVELHFCQTFFQyxHQTBFTyxDQUFFLE1BQUYsRUFBVSxNQUFWLENBMUVQOztBQTJFTCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLE1BQU0sTUFBMUIsRUFBa0MsR0FBbEMsRUFBdUM7QUFDL0Isd0JBRCtCLEdBQ3hCLE1BQU0sQ0FBTixDQUR3QjtBQUUvQiwwQkFGK0IsR0FFdEIsVUFBVSxJQUFWLENBRnNCOztBQUduQyx5QkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLE9BQU8sTUFBM0IsRUFBbUMsR0FBbkMsRUFBd0M7QUFDaEMsNkJBRGdDLEdBQ3hCLE9BQU8sQ0FBUCxDQUR3QjtBQUVoQyw2QkFGZ0MsR0FFeEIsV0FBWSxNQUFNLE9BQU4sQ0FBWixDQUZ3QjtBQUdoQyw4QkFIZ0MsR0FHdkIsV0FBWSxNQUFNLFFBQU4sQ0FBWixDQUh1QjtBQUloQyxtQ0FKZ0MsR0FJcEIsU0FBVSxNQUFNLFdBQU4sQ0FBVixJQUFnQyxJQUpaOztBQUtwQywrQkFBTyxJQUFQLEVBQWEsSUFBYixDQUFtQixDQUFFLEtBQUYsRUFBUyxNQUFULEVBQWlCLFdBQWpCLENBQW5CO0FBQ0g7QUFDSjtBQUNELHVCQUFPLE1BQVA7QUF0Rks7QUFBQTtBQXlGSCxtQkF6RkcsdUJBeUZVLE1BekZWO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBMEZDLFNBQUssV0FBTCxFQTFGRDtBQUFBO0FBMkZELGlCQTNGQyxHQTJGRyxTQUFLLE1BQUwsQ0FBYSxNQUFiLENBM0ZIO0FBQUEsdUJBNEZjLFNBQUssd0JBQUwsQ0FBK0I7QUFDOUMsOEJBQVUsRUFBRSxJQUFGO0FBRG9DLGlCQUEvQixDQTVGZDtBQUFBO0FBNEZELHNCQTVGQztBQStGRCx5QkEvRkMsR0ErRlcsT0FBTyxRQUFQLEVBQWlCLFdBQWpCLENBL0ZYO0FBZ0dELDBCQWhHQyxHQWdHWSxFQUFFLE1BQUYsQ0FoR1o7QUFpR0QsMkJBakdDLEdBaUdhLEVBQUUsT0FBRixDQWpHYjs7QUFrR0wsdUJBQU87QUFDSCxpQ0FBYSxTQURWO0FBRUgsZ0NBQVksU0FBSyxPQUFMLENBQWMsU0FBZCxDQUZUO0FBR0gsNEJBQVEsU0FITDtBQUlILDJCQUFPLFNBSko7QUFLSCwyQkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBTEo7QUFNSCwyQkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBTko7QUFPSCw0QkFBUSxTQVBMO0FBUUgsNEJBQVEsU0FSTDtBQVNILDZCQUFTLFNBVE47QUFVSCw2QkFBUyxTQVZOO0FBV0gsNEJBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQVhMO0FBWUgsOEJBQVUsU0FaUDtBQWFILGtDQUFjLFNBYlg7QUFjSCwrQkFBVyxTQWRSO0FBZUgsa0NBQWMsV0FBWSxPQUFPLFFBQVAsRUFBaUIsVUFBakIsQ0FBWixDQWZYO0FBZ0JILG1DQUFlLFdBQVksT0FBTyxRQUFQLEVBQWlCLFdBQWpCLENBQVosQ0FoQlo7QUFpQkgsNEJBQVE7QUFqQkwsaUJBQVA7QUFsR0s7QUFBQTtBQXVISCxtQkF2SEcsdUJBdUhVLE1BdkhWO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBdUhrQixzQkF2SGxCLG1GQXVIMkIsRUF2SDNCO0FBQUEsdUJBd0hDLFNBQUssV0FBTCxFQXhIRDtBQUFBO0FBeUhMLHVCQUFPLFNBQUsscUJBQUwsQ0FBNEIsU0FBSyxNQUFMLENBQWE7QUFDNUMsOEJBQVUsU0FBSyxRQUFMLENBQWUsTUFBZjtBQURrQyxpQkFBYixFQUVoQyxNQUZnQyxDQUE1QixDQUFQO0FBekhLO0FBQUE7QUE4SEgsb0JBOUhHO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkErSEMsU0FBSyxXQUFMLEVBL0hEO0FBQUE7QUFBQSx1QkFnSWdCLFNBQUssbUJBQUwsRUFoSWhCO0FBQUE7QUFnSUQsd0JBaElDO0FBaUlELHNCQWpJQyxHQWlJUSxFQUFFLFFBQVEsUUFBVixFQWpJUjs7QUFrSUwscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxTQUFTLE1BQTdCLEVBQXFDLEdBQXJDLEVBQTBDO0FBQ2xDLDJCQURrQyxHQUN4QixTQUFTLENBQVQsQ0FEd0I7QUFFbEMsNEJBRmtDLEdBRXZCLFFBQVEsVUFBUixDQUZ1QjtBQUdsQywyQkFIa0MsR0FHeEI7QUFDVixnQ0FBUSxXQUFZLFFBQVEsV0FBUixDQUFaLENBREU7QUFFVixnQ0FBUSxTQUZFO0FBR1YsaUNBQVMsV0FBWSxRQUFRLFFBQVIsQ0FBWjtBQUhDLHFCQUh3Qjs7QUFRdEMsNEJBQVEsTUFBUixJQUFrQixRQUFRLE9BQVIsSUFBbUIsUUFBUSxNQUFSLENBQXJDO0FBQ0EsMkJBQU8sUUFBUCxJQUFtQixPQUFuQjtBQUNIO0FBQ0QsdUJBQU8sTUFBUDtBQTdJSztBQUFBO0FBZ0pILG1CQWhKRyx1QkFnSlUsTUFoSlYsRUFnSmtCLElBaEpsQixFQWdKd0IsSUFoSnhCLEVBZ0o4QixNQWhKOUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFnSnNDLHFCQWhKdEMsbUZBZ0o4QyxTQWhKOUM7QUFnSnlELHNCQWhKekQsbUZBZ0prRSxFQWhKbEU7QUFBQSx1QkFpSkMsU0FBSyxXQUFMLEVBakpEO0FBQUE7QUFrSkwsb0JBQUksUUFBUSxRQUFaO0FBQ0ksMEJBQU0sSUFBSSxhQUFKLENBQW1CLFNBQUssRUFBTCxHQUFVLDJCQUE3QixDQUFOO0FBREosaUJBRUksS0FwSkMsR0FvSk87QUFDUix1Q0FBbUIsU0FBSyxLQUFMLEVBRFg7QUFFUiw4QkFBVSxTQUFLLFFBQUwsQ0FBZSxNQUFmLENBRkY7QUFHUiw4QkFBVSxPQUFPLFFBQVAsRUFIRjtBQUlSLDZCQUFTLE1BQU0sUUFBTixFQUpEO0FBS1IsNEJBQVEsSUFMQTtBQU1SLDRCQUFRLGdCQU5BLENBTWtCO0FBTmxCLGlCQXBKUDtBQUFBLHVCQTRKZ0IsU0FBSyxtQkFBTCxDQUEwQixTQUFLLE1BQUwsQ0FBYSxLQUFiLEVBQW9CLE1BQXBCLENBQTFCLENBNUpoQjtBQUFBO0FBNEpELHdCQTVKQzs7QUE2SkwsdUJBQU87QUFDSCw0QkFBUSxRQURMO0FBRUgsMEJBQU0sU0FBUyxVQUFUO0FBRkgsaUJBQVA7QUE3Sks7QUFBQTtBQW1LSCxtQkFuS0csdUJBbUtVLEVBbktWO0FBQUE7O0FBQUE7QUFBQSx1QkFvS0MsU0FBSyxXQUFMLEVBcEtEO0FBQUE7QUFxS0wsdUJBQU8sU0FBSyxzQkFBTCxDQUE2QixFQUFFLFlBQVksRUFBZCxFQUE3QixDQUFQO0FBcktLO0FBQUE7QUF3S0gsZUF4S0csbUJBd0tNLElBeEtOO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQXdLWSxtQkF4S1osbUZBd0trQixRQXhLbEI7QUF3SzRCLHNCQXhLNUIsbUZBd0txQyxLQXhLckM7QUF3SzRDLHNCQXhLNUMsbUZBd0txRCxFQXhLckQ7QUF3S3lELHVCQXhLekQsbUZBd0ttRSxTQXhLbkU7QUF3SzhFLG9CQXhLOUUsbUZBd0txRixTQXhLckY7QUF5S0QsbUJBektDLEdBeUtLLE1BQU0sU0FBSyxPQUFYLEdBQXFCLEdBQXJCLEdBQTJCLFNBQUssYUFBTCxDQUFvQixJQUFwQixFQUEwQixNQUExQixDQXpLaEM7QUEwS0QscUJBMUtDLEdBMEtPLFNBQUssSUFBTCxDQUFXLE1BQVgsRUFBbUIsU0FBSyxhQUFMLENBQW9CLElBQXBCLENBQW5CLENBMUtQOztBQTJLTCxvQkFBSSxPQUFPLFFBQVgsRUFBcUI7QUFDakIsd0JBQUksT0FBTyxJQUFQLENBQWEsS0FBYixFQUFvQixNQUF4QjtBQUNJLCtCQUFPLE1BQU0sU0FBSyxTQUFMLENBQWdCLEtBQWhCLENBQWI7QUFESjtBQUVILGlCQUhELE1BR087QUFDQyx5QkFERCxHQUNTLFNBQUssS0FBTCxFQURUO0FBRUMsMkJBRkQsR0FFVyxTQUFLLE1BQUwsQ0FBYTtBQUN2QixtQ0FBVyxHQURZO0FBRXZCLGlDQUFTO0FBRmMscUJBQWIsRUFHWCxLQUhXLENBRlg7QUFNQywyQkFORCxHQU1XLFNBQUssSUFBTCxDQUFXLE9BQVgsQ0FOWDs7QUFPSCw4QkFBVSxTQUFLLGNBQUwsQ0FBcUIsU0FBSyxNQUFMLENBQWEsT0FBYixDQUFyQixDQUFWO0FBQ0ksNkJBUkQsR0FRYSxTQUFLLElBQUwsQ0FBVyxPQUFYLEVBQW9CLFNBQUssTUFBTCxDQUFhLFNBQUssTUFBbEIsQ0FBcEIsRUFBK0MsUUFBL0MsQ0FSYjs7QUFTSCw4QkFBVTtBQUNOLHdDQUFnQixZQURWO0FBRU4sMENBQWtCLENBRlo7QUFHTiwyQ0FBbUIsU0FBSyxNQUhsQjtBQUlOLDRDQUFvQixPQUpkO0FBS04sOENBQXNCO0FBTGhCLHFCQUFWO0FBT0g7QUFDRCxzQkFBTSxTQUFLLElBQUwsQ0FBVSxLQUFWLElBQW1CLEdBQXpCO0FBL0xLLHVCQWdNZ0IsU0FBSyxLQUFMLENBQVksR0FBWixFQUFpQixNQUFqQixFQUF5QixPQUF6QixFQUFrQyxJQUFsQyxDQWhNaEI7QUFBQTtBQWdNRCx3QkFoTUM7O0FBaU1MLG9CQUFJLFlBQVksUUFBaEI7QUFDSSx3QkFBSSxTQUFTLFFBQVQsS0FBc0IsT0FBMUI7QUFDSSw4QkFBTSxJQUFJLGFBQUosQ0FBbUIsU0FBSyxFQUFMLEdBQVUsR0FBVixHQUFnQixTQUFLLElBQUwsQ0FBVyxRQUFYLENBQW5DLENBQU47QUFESjtBQURKLGlCQUdBLE9BQU8sUUFBUDtBQXBNSztBQUFBO0FBQUEsS0FBYjs7QUF3TUE7O0FBRUEsUUFBSSxTQUFTOztBQUVULGNBQU0sUUFGRztBQUdULGdCQUFRLFFBSEM7QUFJVCxxQkFBYSxJQUpKLEVBSVU7QUFDbkIscUJBQWEsSUFMSjtBQU1ULG1CQUFXLEdBTkY7QUFPVCwyQkFBbUIsSUFQVjtBQVFULGdCQUFRO0FBQ0osb0JBQVEscUdBREo7QUFFSixtQkFBTyx1QkFGSDtBQUdKLG1CQUFPLG9CQUhIO0FBSUosbUJBQU8sQ0FDSCx3QkFERyxFQUVILHdDQUZHLEVBR0gsb0NBSEc7QUFKSCxTQVJDO0FBa0JULGVBQU87QUFDSCxzQkFBVTtBQUNOLHVCQUFPLENBQ0gsb0JBREcsRUFFSCxpQkFGRyxFQUdILGlCQUhHLEVBSUgsd0JBSkcsRUFLSCxTQUxHLEVBTUgsUUFORyxFQU9ILE9BUEc7QUFERCxhQURQO0FBWUgsdUJBQVc7QUFDUCx1QkFBTyxDQUNILFNBREcsRUFFSCxlQUZHLEVBR0gsZUFIRyxFQUlILE9BSkcsRUFLSCxpQkFMRyxFQU1ILFFBTkcsQ0FEQTtBQVNQLHdCQUFRLENBQ0osV0FESSxFQUVKLGNBRkksRUFHSixlQUhJO0FBVEQsYUFaUjtBQTJCSCx1QkFBVztBQUNQLHVCQUFPLENBQ0gsU0FERyxFQUVILG9CQUZHLEVBR0gsY0FIRyxFQUlILDRCQUpHLENBREE7QUFPUCx3QkFBUSxDQUNKLHFCQURJLEVBRUosa0JBRkksRUFHSixvQkFISSxFQUlKLFFBSkk7QUFQRDtBQTNCUixTQWxCRTs7QUE2REgsb0JBN0RHO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQThEZSxTQUFLLGdCQUFMLEVBOURmO0FBQUE7QUE4REQsdUJBOURDO0FBK0RELHNCQS9EQyxHQStEUSxFQS9EUjs7QUFnRUwscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxRQUFRLFNBQVIsRUFBbUIsTUFBdkMsRUFBK0MsR0FBL0MsRUFBb0Q7QUFDNUMsMEJBRDRDLEdBQ25DLFFBQVEsU0FBUixFQUFtQixDQUFuQixDQURtQztBQUU1QyxzQkFGNEMsR0FFdkMsT0FBTyxRQUFQLENBRnVDO0FBRzVDLHdCQUg0QyxHQUdyQyxPQUFPLFdBQVAsQ0FIcUM7QUFJNUMseUJBSjRDLEdBSXBDLE9BQU8sVUFBUCxDQUpvQztBQUs1Qyx1QkFMNEMsR0FLdEMsV0FBWSxPQUFPLEtBQVAsQ0FBWixDQUxzQztBQU01Qyx3QkFONEMsR0FNckMsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQU5xQzs7QUFPaEQsMkJBQU8sU0FBSyxrQkFBTCxDQUF5QixJQUF6QixDQUFQO0FBQ0EsNEJBQVEsU0FBSyxrQkFBTCxDQUF5QixLQUF6QixDQUFSO0FBQ0ksMEJBVDRDLEdBU25DLE9BQU8sR0FBUCxHQUFhLEtBVHNCOztBQVVoRCwyQkFBTyxJQUFQLENBQWE7QUFDVCw4QkFBTSxFQURHO0FBRVQsa0NBQVUsTUFGRDtBQUdULGdDQUFRLElBSEM7QUFJVCxpQ0FBUyxLQUpBO0FBS1QsK0JBQU8sR0FMRTtBQU1ULGdDQUFRLElBTkM7QUFPVCxnQ0FBUTtBQVBDLHFCQUFiO0FBU0g7QUFDRCx1QkFBTyxNQUFQO0FBcEZLO0FBQUE7QUF1Rkgsb0JBdkZHO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQXdGQyxTQUFLLFdBQUwsRUF4RkQ7QUFBQTtBQUFBLHVCQXlGZ0IsU0FBSyxpQkFBTCxFQXpGaEI7QUFBQTtBQXlGRCx3QkF6RkM7QUEwRkQsd0JBMUZDLEdBMEZVLFNBQVMsU0FBVCxDQTFGVjtBQTJGRCxzQkEzRkMsR0EyRlEsRUFBRSxRQUFRLFFBQVYsRUEzRlI7O0FBNEZMLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksU0FBUyxNQUE3QixFQUFxQyxHQUFyQyxFQUEwQztBQUNsQywyQkFEa0MsR0FDeEIsU0FBUyxDQUFULENBRHdCO0FBRWxDLDRCQUZrQyxHQUV2QixRQUFRLGVBQVIsQ0FGdUI7QUFHbEMsMkJBSGtDLEdBR3hCO0FBQ1YsZ0NBQVEsV0FBWSxRQUFRLE1BQVIsQ0FBWixDQURFO0FBRVYsZ0NBQVEsV0FBWSxRQUFRLFVBQVIsQ0FBWixDQUZFO0FBR1YsaUNBQVM7QUFIQyxxQkFId0I7O0FBUXRDLDRCQUFRLE9BQVIsSUFBbUIsU0FBSyxHQUFMLENBQVUsUUFBUSxNQUFSLENBQVYsRUFBMkIsUUFBUSxNQUFSLENBQTNCLENBQW5CO0FBQ0EsMkJBQU8sUUFBUCxJQUFtQixPQUFuQjtBQUNIO0FBQ0QsdUJBQU8sTUFBUDtBQXZHSztBQUFBO0FBMEdILHNCQTFHRywwQkEwR2EsTUExR2I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBMEdxQixzQkExR3JCLG1GQTBHOEIsRUExRzlCO0FBQUEsdUJBMkdDLFNBQUssV0FBTCxFQTNHRDtBQUFBO0FBQUEsdUJBNEdpQixTQUFLLHdCQUFMLENBQStCLFNBQUssTUFBTCxDQUFhO0FBQzlELDhCQUFVLFNBQUssUUFBTCxDQUFlLE1BQWY7QUFEb0QsaUJBQWIsRUFFbEQsTUFGa0QsQ0FBL0IsQ0E1R2pCO0FBQUE7QUE0R0QseUJBNUdDO0FBK0dELHlCQS9HQyxHQStHVyxTQUFLLFlBQUwsRUEvR1g7QUFnSEQsc0JBaEhDLEdBZ0hRO0FBQ1QsNEJBQVEsRUFEQztBQUVULDRCQUFRLEVBRkM7QUFHVCxpQ0FBYSxTQUhKO0FBSVQsZ0NBQVksU0FBSyxPQUFMLENBQWMsU0FBZDtBQUpILGlCQWhIUjtBQXNIRCxxQkF0SEMsR0FzSE8sQ0FBRSxNQUFGLEVBQVUsTUFBVixDQXRIUDs7QUF1SEwscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxNQUFNLE1BQTFCLEVBQWtDLEdBQWxDLEVBQXVDO0FBQy9CLHdCQUQrQixHQUN4QixNQUFNLENBQU4sQ0FEd0I7QUFFL0IsMEJBRitCLEdBRXRCLFVBQVUsSUFBVixDQUZzQjs7QUFHbkMseUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxPQUFPLE1BQTNCLEVBQW1DLEdBQW5DLEVBQXdDO0FBQ2hDLDZCQURnQyxHQUN4QixPQUFPLENBQVAsQ0FEd0I7QUFFaEMsNkJBRmdDLEdBRXhCLFdBQVksTUFBTSxDQUFOLENBQVosQ0FGd0I7QUFHaEMsOEJBSGdDLEdBR3ZCLFdBQVksTUFBTSxDQUFOLENBQVosQ0FIdUI7O0FBSXBDLCtCQUFPLElBQVAsRUFBYSxJQUFiLENBQW1CLENBQUUsS0FBRixFQUFTLE1BQVQsQ0FBbkI7QUFDSDtBQUNKO0FBQ0QsdUJBQU8sTUFBUDtBQWpJSztBQUFBO0FBb0lULG1CQXBJUyx1QkFvSUksTUFwSUosRUFvSVksTUFwSVosRUFvSW9CO0FBQ3pCLGdCQUFJLFlBQVksT0FBTyxXQUFQLENBQWhCO0FBQ0EsbUJBQU87QUFDSCw2QkFBYSxTQURWO0FBRUgsNEJBQVksS0FBSyxPQUFMLENBQWMsU0FBZCxDQUZUO0FBR0gsd0JBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQUhMO0FBSUgsdUJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQUpKO0FBS0gsdUJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQUxKO0FBTUgsdUJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQU5KO0FBT0gsd0JBQVEsU0FQTDtBQVFILHdCQUFRLFdBQVksT0FBTyxNQUFQLENBQVosQ0FSTDtBQVNILHlCQUFTLFNBVE47QUFVSCx5QkFBUyxTQVZOO0FBV0gsd0JBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQVhMO0FBWUgsMEJBQVUsU0FaUDtBQWFILDhCQUFjLFNBYlg7QUFjSCwyQkFBVyxTQWRSO0FBZUgsOEJBQWMsV0FBWSxPQUFPLFFBQVAsQ0FBWixDQWZYO0FBZ0JILCtCQUFlLFdBQVksT0FBTyxjQUFQLENBQVosQ0FoQlo7QUFpQkgsd0JBQVE7QUFqQkwsYUFBUDtBQW1CSCxTQXpKUTtBQTJKSCxvQkEzSkc7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkE0SkMsU0FBSyxXQUFMLEVBNUpEO0FBQUE7QUFBQSx1QkE2SmUsU0FBSyxlQUFMLEVBN0pmO0FBQUE7QUE2SkQsdUJBN0pDO0FBOEpELG1CQTlKQyxHQThKSyxPQUFPLElBQVAsQ0FBYSxPQUFiLENBOUpMO0FBK0pELHNCQS9KQyxHQStKUSxFQS9KUjs7QUFnS0wscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxJQUFJLE1BQXhCLEVBQWdDLEdBQWhDLEVBQXFDO0FBQzdCLHNCQUQ2QixHQUN4QixJQUFJLENBQUosQ0FEd0I7QUFFN0IsMEJBRjZCLEdBRXBCLFNBQUssYUFBTCxDQUFtQixFQUFuQixDQUZvQjtBQUc3QiwwQkFINkIsR0FHcEIsT0FBTyxRQUFQLENBSG9CO0FBSTdCLDBCQUo2QixHQUlwQixRQUFRLEVBQVIsQ0FKb0I7O0FBS2pDLDJCQUFPLE1BQVAsSUFBaUIsU0FBSyxXQUFMLENBQWtCLE1BQWxCLEVBQTBCLE1BQTFCLENBQWpCO0FBQ0g7QUFDRCx1QkFBTyxNQUFQO0FBdktLO0FBQUE7QUEwS0gsbUJBMUtHLHVCQTBLVSxNQTFLVjtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQTJLQyxTQUFLLFdBQUwsRUEzS0Q7QUFBQTtBQTRLRCxpQkE1S0MsR0E0S0csU0FBSyxNQUFMLENBQWEsTUFBYixDQTVLSDtBQUFBLHVCQTZLYyxTQUFLLHFCQUFMLENBQTRCO0FBQzNDLDhCQUFVLEVBQUUsSUFBRjtBQURpQyxpQkFBNUIsQ0E3S2Q7QUFBQTtBQTZLRCxzQkE3S0M7O0FBZ0xMLG9CQUFJLGFBQWEsTUFBakI7QUFDSSwwQkFBTSxJQUFJLGFBQUosQ0FBbUIsU0FBSyxFQUFMLEdBQVUsR0FBVixHQUFnQixPQUFPLFNBQVAsQ0FBbkMsQ0FBTjtBQURKLGlCQUVBLE9BQU8sU0FBSyxXQUFMLENBQWtCLE1BQWxCLEVBQTBCLENBQTFCLENBQVA7QUFsTEs7QUFBQTtBQXFMSCxtQkFyTEcsdUJBcUxVLE1BckxWO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBcUxrQixzQkFyTGxCLG1GQXFMMkIsRUFyTDNCO0FBQUEsdUJBc0xDLFNBQUssV0FBTCxFQXRMRDtBQUFBO0FBdUxMLHVCQUFPLFNBQUsscUJBQUwsQ0FBNEIsU0FBSyxNQUFMLENBQWE7QUFDNUMsOEJBQVUsU0FBSyxRQUFMLENBQWUsTUFBZjtBQURrQyxpQkFBYixFQUVoQyxNQUZnQyxDQUE1QixDQUFQO0FBdkxLO0FBQUE7QUE0TEgsbUJBNUxHLHVCQTRMVSxNQTVMVixFQTRMa0IsSUE1TGxCLEVBNEx3QixJQTVMeEIsRUE0TDhCLE1BNUw5QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUE0THNDLHFCQTVMdEMsbUZBNEw4QyxTQTVMOUM7QUE0THlELHNCQTVMekQsbUZBNExrRSxFQTVMbEU7QUFBQSx1QkE2TEMsU0FBSyxXQUFMLEVBN0xEO0FBQUE7QUE4TEQsaUJBOUxDLEdBOExHLFNBQUssTUFBTCxDQUFhLE1BQWIsQ0E5TEg7QUErTEw7QUFDQTs7QUFDSSx3QkFqTUMsR0FpTVUsV0FBWSxNQUFaLElBQXNCLEVBQUUsS0FBRixDQWpNaEM7QUFrTUQseUJBbE1DLEdBa01XLEtBQUssS0FBTCxDQUFZLFFBQVosQ0FsTVg7QUFtTUQsMEJBbk1DLEdBbU1ZLFdBQVcsU0FuTXZCOztBQW9NTCxvQkFBSSxLQUFLLEdBQUwsQ0FBVSxVQUFWLElBQXdCLEVBQUUsTUFBRixDQUE1QjtBQUNJLDBCQUFNLElBQUksYUFBSixDQUFtQixTQUFLLEVBQUwsR0FBVSwrREFBVixHQUE0RSxFQUFFLEtBQUYsRUFBUyxRQUFULEVBQS9GLENBQU47QUFESixpQkFFSSxhQXRNQyxHQXNNZSxTQUFLLEtBQUwsRUF0TWY7QUF1TUQscUJBdk1DLEdBdU1PO0FBQ1IscUNBQWlCLGNBQWMsUUFBZCxFQURUO0FBRVIsOEJBQVUsRUFBRSxJQUFGLENBRkY7QUFHUiw0QkFBUSxJQUhBO0FBSVIsZ0NBQVksVUFBVSxRQUFWLEVBSkosRUFJMkI7QUFDbkMsNEJBQVE7QUFMQSxpQkF2TVA7O0FBOE1MLG9CQUFJLFFBQVEsT0FBWjtBQUNJLDBCQUFNLE9BQU4sSUFBaUIsUUFBUSxPQUFSLENBQWlCLEtBQWpCLENBQWpCO0FBREosaUJBOU1LLE9BZ05nQixTQUFLLG1CQUFMLENBQTBCLFNBQUssTUFBTCxDQUFhLEtBQWIsRUFBb0IsTUFBcEIsQ0FBMUIsQ0FoTmhCO0FBQUE7QUFnTkQsd0JBaE5DOztBQWlOTCx1QkFBTztBQUNILDRCQUFRLFFBREw7QUFFSCwwQkFBTSxTQUFTLGlCQUFULEVBQTRCLGVBQTVCO0FBRkgsaUJBQVA7QUFqTks7QUFBQTtBQXVOSCxtQkF2TkcsdUJBdU5VLEVBdk5WO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBdU5jLHNCQXZOZCxtRkF1TnVCLEVBdk52QjtBQUFBLHVCQXdOQyxTQUFLLFdBQUwsRUF4TkQ7QUFBQTtBQXlOTCx1QkFBTyxTQUFLLHNCQUFMLENBQTZCLFNBQUssTUFBTCxDQUFhO0FBQzdDLHFDQUFpQjtBQUQ0QixpQkFBYixFQUVqQyxNQUZpQyxDQUE3QixDQUFQO0FBek5LO0FBQUE7QUE4TkgsZUE5TkcsbUJBOE5NLElBOU5OO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBOE5ZLG1CQTlOWixtRkE4TmtCLFFBOU5sQjtBQThONEIsc0JBOU41QixtRkE4TnFDLEtBOU5yQztBQThONEMsc0JBOU41QyxtRkE4TnFELEVBOU5yRDtBQThOeUQsdUJBOU56RCxtRkE4Tm1FLFNBOU5uRTtBQThOOEUsb0JBOU45RSxtRkE4TnFGLFNBOU5yRjtBQStORCxtQkEvTkMsR0ErTkssTUFBTSxLQUFOLEdBQWMsR0FBZCxHQUFvQixTQUFLLE9BQXpCLEdBQW1DLEdBQW5DLEdBQXlDLEdBQXpDLEdBQStDLEdBQS9DLEdBQXFELFNBQUssYUFBTCxDQUFvQixJQUFwQixFQUEwQixNQUExQixDQS9OMUQ7QUFnT0QscUJBaE9DLEdBZ09PLFNBQUssSUFBTCxDQUFXLE1BQVgsRUFBbUIsU0FBSyxhQUFMLENBQW9CLElBQXBCLENBQW5CLENBaE9QOztBQWlPTCxvQkFBSSxPQUFPLFFBQVgsRUFBcUI7QUFDakIsd0JBQUksT0FBTyxJQUFQLENBQWEsS0FBYixFQUFvQixNQUF4QjtBQUNJLCtCQUFPLE1BQU0sU0FBSyxTQUFMLENBQWdCLEtBQWhCLENBQWI7QUFESjtBQUVILGlCQUhELE1BR087QUFDQyx5QkFERCxHQUNTLFNBQUssS0FBTCxFQURUOztBQUVILDRCQUFRLFNBQUssTUFBTCxDQUFhLEVBQUUsU0FBUyxLQUFYLEVBQWtCLFVBQVUsU0FBSyxNQUFqQyxFQUFiLEVBQXdELEtBQXhELENBQVI7QUFDQSx3QkFBSSxVQUFVLE1BQWQ7QUFDSSw0QkFBSSxPQUFPLElBQVAsQ0FBYSxLQUFiLEVBQW9CLE1BQXhCO0FBQ0ksbUNBQU8sU0FBSyxTQUFMLENBQWdCLEtBQWhCLENBQVA7QUFESjtBQURKLHFCQUdBLE9BQU8sTUFBTSxTQUFLLFNBQUwsQ0FBZ0IsS0FBaEIsQ0FBYjtBQUNJLHdCQVBELEdBT1EsT0FBTyxRQUFRLEVBQWYsQ0FQUjs7QUFRSCw4QkFBVTtBQUNOLHdDQUFnQixtQ0FEVjtBQUVOLHVDQUFlLFNBQUssSUFBTCxDQUFXLFNBQUssTUFBTCxDQUFhLElBQWIsQ0FBWCxFQUErQixTQUFLLE1BQUwsQ0FBYSxTQUFLLE1BQWxCLENBQS9CLEVBQTBELFFBQTFELEVBQW9FLFdBQXBFO0FBRlQscUJBQVY7QUFJSDtBQUNELHNCQUFNLFNBQUssSUFBTCxDQUFVLEtBQVYsSUFBbUIsR0FBekI7QUFqUEssdUJBa1BnQixTQUFLLEtBQUwsQ0FBWSxHQUFaLEVBQWlCLE1BQWpCLEVBQXlCLE9BQXpCLEVBQWtDLElBQWxDLENBbFBoQjtBQUFBO0FBa1BELHdCQWxQQzs7QUFtUEwsb0JBQUksVUFBVSxRQUFkO0FBQ0ksMEJBQU0sSUFBSSxhQUFKLENBQW1CLFNBQUssRUFBTCxHQUFVLEdBQVYsR0FBZ0IsU0FBSyxJQUFMLENBQVcsUUFBWCxDQUFuQyxDQUFOO0FBREosaUJBRUEsT0FBTyxRQUFQO0FBclBLO0FBQUE7QUFBQSxLQUFiOztBQXlQQTs7QUFFQSxRQUFJLFFBQVE7O0FBRVIsY0FBTSxPQUZFO0FBR1IsZ0JBQVEsT0FIQTtBQUlSLHFCQUFhLElBSkw7QUFLUixxQkFBYSxJQUxMO0FBTVIsbUJBQVcsSUFOSDtBQU9SLGdCQUFRO0FBQ0osb0JBQVEscUdBREo7QUFFSixtQkFBTyxzQkFGSDtBQUdKLG1CQUFPLHVCQUhIO0FBSUosbUJBQU87QUFKSCxTQVBBO0FBYVIsZUFBTztBQUNILDRCQUFnQjtBQUNaLHVCQUFPLENBQ0gscUJBREcsRUFFSCxhQUZHLEVBR0gsWUFIRyxFQUlILHFCQUpHLEVBS0gsYUFMRztBQURLLGFBRGI7QUFVSCx5QkFBYTtBQUNULHVCQUFPLENBQ0gscUJBREcsRUFFSCxhQUZHLEVBR0gsWUFIRyxFQUlILHFCQUpHLEVBS0gsYUFMRztBQURFLGFBVlY7QUFtQkgscUJBQVM7QUFDTCx3QkFBUSxDQUNKLGtCQURJLEVBRUosWUFGSSxFQUdKLFlBSEksRUFJSixLQUpJLEVBS0osTUFMSSxFQU1KLFlBTkksRUFPSixhQVBJLEVBUUosY0FSSSxFQVNKLHFCQVRJLEVBVUosMEJBVkksRUFXSixlQVhJLEVBWUosc0JBWkksRUFhSiwwQkFiSSxFQWNKLFVBZEksRUFlSixNQWZJLEVBZ0JKLFdBaEJJLEVBaUJKLG9CQWpCSSxFQWtCSixXQWxCSTtBQURIO0FBbkJOLFNBYkM7QUF1RFIsbUJBQVc7QUFDUCx1QkFBVyxFQUFFLE1BQU0sS0FBUixFQUFlLFVBQVUsU0FBekIsRUFBb0MsUUFBUSxLQUE1QyxFQUFtRCxTQUFTLEtBQTVELEVBQW1FLFFBQVEsY0FBM0UsRUFBMkYsWUFBWSxDQUF2RyxFQURKO0FBRVAsdUJBQVcsRUFBRSxNQUFNLEtBQVIsRUFBZSxVQUFVLFNBQXpCLEVBQW9DLFFBQVEsS0FBNUMsRUFBbUQsU0FBUyxLQUE1RCxFQUFtRSxRQUFRLGNBQTNFLEVBQTJGLFlBQVksQ0FBdkcsRUFGSjtBQUdQLHVCQUFXLEVBQUUsTUFBTSxLQUFSLEVBQWUsVUFBVSxTQUF6QixFQUFvQyxRQUFRLEtBQTVDLEVBQW1ELFNBQVMsS0FBNUQsRUFBbUUsUUFBUSxXQUEzRSxFQUEyRixZQUFZLENBQXZHO0FBSEosU0F2REg7O0FBNkRGLG9CQTdERTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBOERpQixTQUFLLHVCQUFMLEVBOURqQjtBQUFBO0FBOERBLHdCQTlEQTtBQStEQSxzQkEvREEsR0ErRFMsRUFBRSxRQUFRLFFBQVYsRUEvRFQ7O0FBZ0VKLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksU0FBSyxVQUFMLENBQWdCLE1BQXBDLEVBQTRDLEdBQTVDLEVBQWlEO0FBQ3pDLDRCQUR5QyxHQUM5QixTQUFLLFVBQUwsQ0FBZ0IsQ0FBaEIsQ0FEOEI7QUFFekMsNkJBRnlDLEdBRTdCLFNBQVMsV0FBVCxFQUY2QjtBQUd6QywyQkFIeUMsR0FHL0I7QUFDVixnQ0FBUSxTQURFO0FBRVYsZ0NBQVEsU0FGRTtBQUdWLGlDQUFTO0FBSEMscUJBSCtCO0FBUXpDLDZCQVJ5QyxHQVE3QixlQUFlLFNBQWYsR0FBMkIsVUFSRTtBQVN6QywwQkFUeUMsR0FTaEMsWUFBWSxTQUFaLEdBQXdCLFVBVFE7QUFVekMsd0JBVnlDLEdBVWxDLFVBQVUsU0FBVixHQUFzQixVQVZZOztBQVc3Qyx3QkFBSSxhQUFhLFFBQWpCO0FBQ0ksZ0NBQVEsTUFBUixJQUFrQixXQUFZLFNBQVMsU0FBVCxDQUFaLENBQWxCO0FBREoscUJBRUEsSUFBSSxVQUFVLFFBQWQ7QUFDSSxnQ0FBUSxNQUFSLElBQWtCLFdBQVksU0FBUyxNQUFULENBQVosQ0FBbEI7QUFESixxQkFFQSxJQUFJLFFBQVEsUUFBWjtBQUNJLGdDQUFRLE1BQVIsSUFBa0IsU0FBSyxHQUFMLENBQVUsUUFBUSxNQUFSLENBQVYsRUFBMkIsV0FBWSxTQUFTLElBQVQsQ0FBWixDQUEzQixDQUFsQjtBQURKLHFCQUVBLFFBQVEsT0FBUixJQUFtQixTQUFLLEdBQUwsQ0FBVSxRQUFRLE1BQVIsQ0FBVixFQUEyQixRQUFRLE1BQVIsQ0FBM0IsQ0FBbkI7QUFDQSwyQkFBTyxRQUFQLElBQW1CLE9BQW5CO0FBQ0g7QUFDRCx1QkFBTyxNQUFQO0FBcEZJO0FBQUE7QUF1RkYsc0JBdkZFLDBCQXVGYyxNQXZGZDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUF1RnNCLHNCQXZGdEIsbUZBdUYrQixFQXZGL0I7QUF3RkEsaUJBeEZBLEdBd0ZJLFNBQUssTUFBTCxDQUFhLE1BQWIsQ0F4Rko7QUF5RkEsc0JBekZBLEdBeUZTLEVBQUUsTUFBRixJQUFZLFlBekZyQjtBQUFBLHVCQTBGa0IsU0FBSyxNQUFMLEVBQWMsU0FBSyxNQUFMLENBQWEsRUFBRSxNQUFNLEVBQUUsSUFBRixDQUFSLEVBQWIsRUFBZ0MsTUFBaEMsQ0FBZCxDQTFGbEI7QUFBQTtBQTBGQSx5QkExRkE7QUEyRkEseUJBM0ZBLEdBMkZZLFNBQUssWUFBTCxFQTNGWjtBQTRGQSxzQkE1RkEsR0E0RlM7QUFDVCw0QkFBUSxVQUFVLE1BQVYsQ0FEQztBQUVULDRCQUFRLFVBQVUsTUFBVixDQUZDO0FBR1QsaUNBQWEsU0FISjtBQUlULGdDQUFZLFNBQUssT0FBTCxDQUFjLFNBQWQ7QUFKSCxpQkE1RlQ7O0FBa0dKLHVCQUFPLE1BQVA7QUFsR0k7QUFBQTtBQXFHRixtQkFyR0UsdUJBcUdXLE1BckdYO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBc0dBLGlCQXRHQSxHQXNHSSxTQUFLLE1BQUwsQ0FBYSxNQUFiLENBdEdKO0FBdUdBLHNCQXZHQSxHQXVHUyxFQUFFLE1BQUYsSUFBWSxhQXZHckI7QUFBQSx1QkF3R2lCLFNBQUssTUFBTCxFQUFjLEVBQUUsTUFBTSxFQUFFLElBQUYsQ0FBUixFQUFkLENBeEdqQjtBQUFBO0FBd0dBLHdCQXhHQTtBQXlHQSxzQkF6R0EsR0F5R1MsU0FBUyxRQUFULENBekdUO0FBMEdBLHlCQTFHQSxHQTBHWSxTQUFVLFNBQVMsTUFBVCxDQUFWLElBQThCLElBMUcxQzs7QUEyR0osdUJBQU87QUFDSCxpQ0FBYSxTQURWO0FBRUgsZ0NBQVksU0FBSyxPQUFMLENBQWMsU0FBZCxDQUZUO0FBR0gsNEJBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQUhMO0FBSUgsMkJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQUpKO0FBS0gsMkJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQUxKO0FBTUgsMkJBQU8sV0FBWSxPQUFPLE1BQVAsQ0FBWixDQU5KO0FBT0gsNEJBQVEsU0FQTDtBQVFILDRCQUFRLFdBQVksT0FBTyxNQUFQLENBQVosQ0FSTDtBQVNILDZCQUFTLFNBVE47QUFVSCw2QkFBUyxTQVZOO0FBV0gsNEJBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQVhMO0FBWUgsOEJBQVUsU0FaUDtBQWFILGtDQUFjLFNBYlg7QUFjSCwrQkFBVyxTQWRSO0FBZUgsa0NBQWMsU0FmWDtBQWdCSCxtQ0FBZSxXQUFZLE9BQU8sS0FBUCxDQUFaLENBaEJaO0FBaUJILDRCQUFRO0FBakJMLGlCQUFQO0FBM0dJO0FBQUE7QUFnSUYsbUJBaElFLHVCQWdJVyxNQWhJWDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBZ0ltQixrQkFoSW5CLG1GQWdJNEIsRUFoSTVCO0FBaUlBLGFBaklBLEdBaUlJLFNBQUssTUFBTCxDQUFhLE1BQWIsQ0FqSUo7QUFrSUEsa0JBbElBLEdBa0lTLEVBQUUsTUFBRixJQUFZLGFBbElyQjs7QUFtSUosbUJBQU8sU0FBSyxNQUFMLEVBQWMsU0FBSyxNQUFMLENBQWEsRUFBRSxNQUFNLEVBQUUsSUFBRixDQUFSLEVBQWIsRUFBZ0MsTUFBaEMsQ0FBZCxDQUFQO0FBbklJO0FBc0lGLG1CQXRJRSx1QkFzSVcsTUF0SVgsRUFzSW1CLElBdEluQixFQXNJeUIsSUF0SXpCLEVBc0krQixNQXRJL0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQXNJdUMsaUJBdEl2QyxtRkFzSStDLFNBdEkvQztBQXNJMEQsa0JBdEkxRCxtRkFzSW1FLEVBdEluRTtBQXVJQSxhQXZJQSxHQXVJSSxTQUFLLE1BQUwsQ0FBYSxNQUFiLENBdklKO0FBd0lBLGtCQXhJQSxHQXdJUyxjQUFjLFNBQUssVUFBTCxDQUFpQixJQUFqQixDQXhJdkI7QUF5SUEsaUJBeklBLEdBeUlRO0FBQ1IsNkJBQWEsRUFBRSxVQUFGLENBREw7QUFFUiwwQkFBVSxNQUZGO0FBR1IsMEJBQVUsRUFBRSxPQUFGLEVBQVcsV0FBWDtBQUhGLGFBeklSOztBQThJSixnQkFBSSxRQUFRLE9BQVo7QUFDSSxzQkFBTSxPQUFOLElBQWlCLEtBQWpCO0FBREo7QUFHSSwwQkFBVSxTQUFLLFVBQUwsQ0FBaUIsSUFBakIsQ0FBVjtBQUhKLGFBSUksUUFsSkEsR0FrSlcsU0FBSyxNQUFMLEVBQWMsU0FBSyxNQUFMLENBQWEsS0FBYixFQUFvQixNQUFwQixDQUFkLENBbEpYOztBQW1KSixtQkFBTztBQUNILHdCQUFRLFFBREw7QUFFSCxzQkFBTSxTQUFTLElBQVQ7QUFGSCxhQUFQO0FBbkpJO0FBeUpGLG1CQXpKRSx1QkF5SlcsRUF6Slg7QUFBQTs7QUEwSkosbUJBQU8sU0FBSyxvQkFBTCxDQUEyQixFQUFFLE1BQU0sRUFBUixFQUEzQixDQUFQO0FBMUpJO0FBNkpGLGVBN0pFLG1CQTZKTyxJQTdKUDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQTZKYSxtQkE3SmIsbUZBNkptQixPQTdKbkI7QUE2SjRCLHNCQTdKNUIsbUZBNkpxQyxLQTdKckM7QUE2SjRDLHNCQTdKNUMsbUZBNkpxRCxFQTdKckQ7QUE2SnlELHVCQTdKekQsbUZBNkptRSxTQTdKbkU7QUE2SjhFLG9CQTdKOUUsbUZBNkpxRixTQTdKckY7QUE4SkEsbUJBOUpBLEdBOEpNLFNBQUssSUFBTCxDQUFVLEtBQVYsQ0E5Sk47O0FBK0pKLG9CQUFJLE9BQU8sT0FBWCxFQUFvQjtBQUNoQiwyQkFBTyxTQUFTLFNBQUssT0FBckI7QUFDSSx5QkFGWSxHQUVKLFNBQUssT0FBTCxDQUFjLFNBQUssTUFBTCxDQUFhO0FBQ25DLGtDQUFVLElBRHlCO0FBRW5DLHNDQUFjLFNBQUssTUFGZ0I7QUFHbkMsbUNBQVcsU0FBSyxLQUFMO0FBSHdCLHFCQUFiLEVBSXZCLE1BSnVCLENBQWQsQ0FGSTtBQU9aLCtCQVBZLEdBT0UsU0FBSyxTQUFMLENBQWdCLFNBQUssSUFBTCxDQUFXLEtBQVgsRUFBa0IsUUFBbEIsQ0FBaEIsQ0FQRjtBQVFoQjs7QUFDQSxtQ0FBZSxpQkFBaUIsU0FBSyxNQUFyQztBQUNBLDBCQUFNLE1BQU4sSUFBZ0IsU0FBSyxJQUFMLENBQVcsU0FBSyxNQUFMLENBQWEsV0FBYixDQUFYLENBQWhCO0FBQ0EsMkJBQU8sU0FBSyxTQUFMLENBQWdCLEtBQWhCLENBQVA7QUFDQSw4QkFBVTtBQUNOLHdDQUFnQixtQ0FEVjtBQUVOLDBDQUFrQixLQUFLO0FBRmpCLHFCQUFWO0FBSUgsaUJBaEJELE1BZ0JPO0FBQ0gsMkJBQU8sTUFBTSxHQUFOLEdBQVksR0FBWixHQUFrQixTQUFLLGFBQUwsQ0FBb0IsSUFBcEIsRUFBMEIsTUFBMUIsQ0FBbEIsR0FBc0QsVUFBN0Q7QUFDSSwwQkFGRCxHQUVTLFNBQUssSUFBTCxDQUFXLE1BQVgsRUFBbUIsU0FBSyxhQUFMLENBQW9CLElBQXBCLENBQW5CLENBRlQ7O0FBR0gsd0JBQUksT0FBTyxJQUFQLENBQWEsTUFBYixFQUFvQixNQUF4QjtBQUNJLCtCQUFPLE1BQU0sU0FBSyxTQUFMLENBQWdCLE1BQWhCLENBQWI7QUFESjtBQUVIO0FBcExHLHVCQXFMaUIsU0FBSyxLQUFMLENBQVksR0FBWixFQUFpQixNQUFqQixFQUF5QixPQUF6QixFQUFrQyxJQUFsQyxDQXJMakI7QUFBQTtBQXFMQSx3QkFyTEE7O0FBc0xKLG9CQUFJLFlBQVksUUFBaEI7QUFDSSx3QkFBSSxTQUFTLFFBQVQsS0FBc0IsT0FBMUI7QUFDSSw4QkFBTSxJQUFJLGFBQUosQ0FBbUIsU0FBSyxFQUFMLEdBQVUsR0FBVixHQUFnQixTQUFLLElBQUwsQ0FBVyxRQUFYLENBQW5DLENBQU47QUFESjtBQURKLGlCQUdBLElBQUksVUFBVSxRQUFkO0FBQ0ksMEJBQU0sSUFBSSxhQUFKLENBQW1CLFNBQUssRUFBTCxHQUFVLEdBQVYsR0FBZ0IsU0FBSyxJQUFMLENBQVcsUUFBWCxDQUFuQyxDQUFOO0FBREosaUJBRUEsT0FBTyxRQUFQO0FBM0xJO0FBQUE7QUFBQSxLQUFaOztBQStMQTs7QUFFQSxRQUFJLFFBQVE7O0FBRVIsY0FBTSxPQUZFO0FBR1IsZ0JBQVEsT0FIQTtBQUlSLHFCQUFhLElBSkw7QUFLUixxQkFBYSxJQUxMO0FBTVIsbUJBQVcsSUFOSDtBQU9SLGdCQUFRO0FBQ0osb0JBQVEscUdBREo7QUFFSixtQkFBTyx1QkFGSDtBQUdKLG1CQUFPLHVCQUhIO0FBSUosbUJBQU8sQ0FDSCw0QkFERyxFQUVILDJCQUZHO0FBSkgsU0FQQTtBQWdCUixlQUFPO0FBQ0gsc0JBQVU7QUFDTix1QkFBTyxDQUNILHlCQURHLEVBRUgsNkJBRkcsRUFHSCx5QkFIRztBQURELGFBRFA7QUFRSCx1QkFBVztBQUNQLHVCQUFPLENBQ0gsU0FERyxFQUVILG9CQUZHLEVBR0gsNENBSEcsRUFJSCxvQ0FKRyxFQUtILDJCQUxHLEVBTUgsZ0NBTkcsQ0FEQTtBQVNQLHdCQUFRLENBQ0osa0JBREksRUFFSixTQUZJLEVBR0osNENBSEksRUFJSiwrQ0FKSSxFQUtKLDJCQUxJLEVBTUosaUJBTkksQ0FURDtBQWlCUCwwQkFBVSxDQUNOLGdDQURNO0FBakJIO0FBUlIsU0FoQkM7QUE4Q1IsbUJBQVc7QUFDUCx1QkFBVyxFQUFFLE1BQU0sUUFBUixFQUFrQixVQUFVLFNBQTVCLEVBQXVDLFFBQVEsS0FBL0MsRUFBc0QsU0FBUyxLQUEvRCxFQURKO0FBRVAsdUJBQVcsRUFBRSxNQUFNLFFBQVIsRUFBa0IsVUFBVSxTQUE1QixFQUF1QyxRQUFRLEtBQS9DLEVBQXNELFNBQVMsS0FBL0QsRUFGSjtBQUdQLHVCQUFXLEVBQUUsTUFBTSxRQUFSLEVBQWtCLFVBQVUsU0FBNUIsRUFBdUMsUUFBUSxLQUEvQyxFQUFzRCxTQUFTLEtBQS9EO0FBSEosU0E5Q0g7O0FBb0RGLHNCQXBERSwwQkFvRGMsTUFwRGQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBb0RzQixzQkFwRHRCLG1GQW9EK0IsRUFwRC9CO0FBQUEsdUJBcURrQixTQUFLLCtCQUFMLENBQXNDLFNBQUssTUFBTCxDQUFhO0FBQ3JFLDhCQUFVLFNBQUssUUFBTCxDQUFlLE1BQWY7QUFEMkQsaUJBQWIsRUFFekQsTUFGeUQsQ0FBdEMsQ0FyRGxCO0FBQUE7QUFxREEseUJBckRBO0FBd0RBLHlCQXhEQSxHQXdEWSxTQUFLLFlBQUwsRUF4RFo7QUF5REEsc0JBekRBLEdBeURTO0FBQ1QsNEJBQVEsRUFEQztBQUVULDRCQUFRLEVBRkM7QUFHVCxpQ0FBYSxTQUhKO0FBSVQsZ0NBQVksU0FBSyxPQUFMLENBQWMsU0FBZDtBQUpILGlCQXpEVDtBQStEQSxxQkEvREEsR0ErRFEsQ0FBRSxNQUFGLEVBQVUsTUFBVixDQS9EUjs7QUFnRUoscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxNQUFNLE1BQTFCLEVBQWtDLEdBQWxDLEVBQXVDO0FBQy9CLHdCQUQrQixHQUN4QixNQUFNLENBQU4sQ0FEd0I7QUFFL0IsMEJBRitCLEdBRXRCLFVBQVUsSUFBVixDQUZzQjs7QUFHbkMseUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxPQUFPLE1BQTNCLEVBQW1DLEdBQW5DLEVBQXdDO0FBQ2hDLDZCQURnQyxHQUN4QixPQUFPLENBQVAsQ0FEd0I7QUFFaEMsNkJBRmdDLEdBRXhCLFdBQVksTUFBTSxDQUFOLENBQVosQ0FGd0I7QUFHaEMsOEJBSGdDLEdBR3ZCLFdBQVksTUFBTSxDQUFOLENBQVosQ0FIdUI7O0FBSXBDLCtCQUFPLElBQVAsRUFBYSxJQUFiLENBQW1CLENBQUUsS0FBRixFQUFTLE1BQVQsQ0FBbkI7QUFDSDtBQUNKO0FBQ0QsdUJBQU8sTUFBUDtBQTFFSTtBQUFBO0FBNkVGLG1CQTdFRSx1QkE2RVcsTUE3RVg7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBOEVlLFNBQUssNEJBQUwsQ0FBbUM7QUFDbEQsOEJBQVUsU0FBSyxRQUFMLENBQWUsTUFBZjtBQUR3QyxpQkFBbkMsQ0E5RWY7QUFBQTtBQThFQSxzQkE5RUE7QUFpRkEseUJBakZBLEdBaUZZLFNBQUssU0FBTCxDQUFnQixPQUFPLGVBQVAsQ0FBaEIsQ0FqRlo7QUFrRkEsbUJBbEZBLEdBa0ZNLFNBbEZOO0FBbUZBLG1CQW5GQSxHQW1GTSxTQW5GTjs7QUFvRkosb0JBQUksU0FBUyxNQUFiO0FBQ0ksd0JBQUksT0FBTyxLQUFQLENBQUo7QUFDSSw4QkFBTSxXQUFZLE9BQU8sS0FBUCxDQUFaLENBQU47QUFESjtBQURKLGlCQUdBLElBQUksU0FBUyxNQUFiO0FBQ0ksd0JBQUksT0FBTyxLQUFQLENBQUo7QUFDSSw4QkFBTSxXQUFZLE9BQU8sS0FBUCxDQUFaLENBQU47QUFESjtBQURKLGlCQUdBLE9BQU87QUFDSCxpQ0FBYSxTQURWO0FBRUgsZ0NBQVksU0FBSyxPQUFMLENBQWMsU0FBZCxDQUZUO0FBR0gsNEJBQVEsV0FBWSxPQUFPLFNBQVAsQ0FBWixDQUhMO0FBSUgsMkJBQU8sV0FBWSxPQUFPLFFBQVAsQ0FBWixDQUpKO0FBS0gsMkJBQU8sR0FMSjtBQU1ILDJCQUFPLEdBTko7QUFPSCw0QkFBUSxXQUFZLE9BQU8sU0FBUCxDQUFaLENBUEw7QUFRSCw0QkFBUSxXQUFZLE9BQU8sV0FBUCxDQUFaLENBUkw7QUFTSCw2QkFBUyxTQVROO0FBVUgsNkJBQVMsU0FWTjtBQVdILDRCQUFRLFdBQVksT0FBTyxXQUFQLENBQVosQ0FYTDtBQVlILDhCQUFVLFNBWlA7QUFhSCxrQ0FBYyxTQWJYO0FBY0gsK0JBQVcsU0FkUjtBQWVILGtDQUFjLFNBZlg7QUFnQkgsbUNBQWUsV0FBWSxPQUFPLFdBQVAsQ0FBWixDQWhCWjtBQWlCSCw0QkFBUTtBQWpCTCxpQkFBUDtBQTFGSTtBQUFBO0FBK0dGLG1CQS9HRSx1QkErR1csTUEvR1g7QUFBQTtBQUFBO0FBQUE7O0FBK0dtQixrQkEvR25CLG1GQStHNEIsRUEvRzVCOztBQWdISixtQkFBTyxTQUFLLDRCQUFMLENBQW1DLFNBQUssTUFBTCxDQUFhO0FBQ25ELDBCQUFVLFNBQUssUUFBTCxDQUFlLE1BQWY7QUFEeUMsYUFBYixFQUV2QyxNQUZ1QyxDQUFuQyxDQUFQO0FBaEhJO0FBcUhGLG9CQXJIRTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkFzSGlCLFNBQUssa0JBQUwsRUF0SGpCO0FBQUE7QUFzSEEsd0JBdEhBO0FBdUhBLHdCQXZIQSxHQXVIVyxTQUFTLFVBQVQsQ0F2SFg7QUF3SEEsc0JBeEhBLEdBd0hTLEVBQUUsUUFBUSxRQUFWLEVBeEhUOztBQXlISixxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFNBQVMsTUFBN0IsRUFBcUMsR0FBckMsRUFBMEM7QUFDbEMsMkJBRGtDLEdBQ3hCLFNBQVMsQ0FBVCxDQUR3QjtBQUVsQyw0QkFGa0MsR0FFdkIsUUFBUSxVQUFSLENBRnVCO0FBR2xDLDJCQUhrQyxHQUd4QjtBQUNWLGdDQUFRLFdBQVksUUFBUSxrQkFBUixDQUFaLENBREU7QUFFVixnQ0FBUSxTQUZFO0FBR1YsaUNBQVMsV0FBWSxRQUFRLGNBQVIsQ0FBWjtBQUhDLHFCQUh3Qjs7QUFRdEMsNEJBQVEsTUFBUixJQUFrQixRQUFRLE9BQVIsSUFBbUIsUUFBUSxNQUFSLENBQXJDO0FBQ0EsMkJBQU8sUUFBUCxJQUFtQixPQUFuQjtBQUNIO0FBQ0QsdUJBQU8sTUFBUDtBQXBJSTtBQUFBO0FBdUlSLG9CQXZJUSwwQkF1SVE7QUFDWixtQkFBTyxLQUFLLGlCQUFMLEVBQVA7QUFDSCxTQXpJTztBQTJJUixhQTNJUSxtQkEySUM7QUFDTCxtQkFBTyxLQUFLLFlBQUwsRUFBUDtBQUNILFNBN0lPO0FBK0lGLG1CQS9JRSx1QkErSVcsTUEvSVgsRUErSW1CLElBL0luQixFQStJeUIsSUEvSXpCLEVBK0krQixNQS9JL0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQStJdUMscUJBL0l2QyxtRkErSStDLFNBL0kvQztBQStJMEQsc0JBL0kxRCxtRkErSW1FLEVBL0luRTs7QUFnSkosb0JBQUksUUFBUSxRQUFaO0FBQ0ksMEJBQU0sSUFBSSxhQUFKLENBQW1CLFNBQUssRUFBTCxHQUFVLDJCQUE3QixDQUFOO0FBREosaUJBRUEsU0FBUyxPQUFPLFFBQVAsRUFBVDtBQUNBLHdCQUFRLE1BQU0sUUFBTixFQUFSO0FBQ0ksaUJBcEpBLEdBb0pJLFNBQUssTUFBTCxDQUFhLE1BQWIsQ0FwSko7QUFxSkEscUJBckpBLEdBcUpRO0FBQ1IsNEJBQVEsSUFEQTtBQUVSLDRCQUFRLElBRkE7QUFHUixnQ0FBWSxFQUFFLE1BQUYsQ0FISjtBQUlSLDhCQUFVLE1BSkY7QUFLUiwrQkFBVyxNQUxIO0FBTVIsNkJBQVMsS0FORDtBQU9SLGtDQUFjLEVBQUUsSUFBRjtBQVBOLGlCQXJKUjtBQUFBLHVCQThKaUIsU0FBSyxtQkFBTCxDQUEwQixTQUFLLE1BQUwsQ0FBYSxLQUFiLEVBQW9CLE1BQXBCLENBQTFCLENBOUpqQjtBQUFBO0FBOEpBLHdCQTlKQTs7QUErSkosdUJBQU87QUFDSCw0QkFBUSxRQURMO0FBRUgsMEJBQU0sU0FBUyxJQUFUO0FBRkgsaUJBQVA7QUEvSkk7QUFBQTtBQXFLRixtQkFyS0UsdUJBcUtXLEVBcktYO0FBQUE7QUFBQTtBQUFBOztBQXFLZSxrQkFyS2YsbUZBcUt3QixFQXJLeEI7O0FBc0tKLG1CQUFPLFNBQUssb0NBQUwsQ0FBMkMsU0FBSyxNQUFMLENBQWE7QUFDM0Qsc0JBQU07QUFEcUQsYUFBYixFQUUvQyxNQUYrQyxDQUEzQyxDQUFQO0FBdEtJO0FBMktGLGVBM0tFLG1CQTJLTyxJQTNLUDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBMkthLGVBM0tiLG1GQTJLbUIsUUEzS25CO0FBMks2QixrQkEzSzdCLG1GQTJLc0MsS0EzS3RDO0FBMks2QyxrQkEzSzdDLG1GQTJLc0QsRUEzS3REO0FBMkswRCxtQkEzSzFELG1GQTJLb0UsU0EzS3BFO0FBMksrRSxnQkEzSy9FLG1GQTJLc0YsU0EzS3RGO0FBNEtBLGVBNUtBLEdBNEtNLFNBQUssSUFBTCxDQUFVLEtBQVYsSUFBbUIsR0FBbkIsR0FBeUIsU0FBSyxPQUE5QixHQUF3QyxHQUF4QyxHQUE4QyxTQUFLLGFBQUwsQ0FBb0IsSUFBcEIsRUFBMEIsTUFBMUIsQ0E1S3BEO0FBNktBLGlCQTdLQSxHQTZLUSxTQUFLLElBQUwsQ0FBVyxNQUFYLEVBQW1CLFNBQUssYUFBTCxDQUFvQixJQUFwQixDQUFuQixDQTdLUjs7QUE4S0osZ0JBQUksT0FBTyxRQUFYLEVBQXFCO0FBQ2pCLG9CQUFJLE9BQU8sSUFBUCxDQUFhLEtBQWIsRUFBb0IsTUFBeEI7QUFDSSwyQkFBTyxNQUFNLFNBQUssU0FBTCxDQUFnQixLQUFoQixDQUFiO0FBREo7QUFFSCxhQUhELE1BR087QUFDSCxvQkFBSSxPQUFPLElBQVAsQ0FBYSxLQUFiLEVBQW9CLE1BQXhCO0FBQ0ksMkJBQU8sU0FBSyxJQUFMLENBQVcsS0FBWCxDQUFQO0FBREo7QUFHSSwyQkFBTyxFQUFQO0FBSEosaUJBSUksS0FMRCxHQUtTLFNBQUssS0FBTCxHQUFjLFFBQWQsRUFMVDtBQU1DLHlCQU5ELEdBTWEsS0FOYjtBQU9DLG9CQVBELEdBT1EsQ0FBRSxNQUFGLEVBQVUsR0FBVixFQUFlLElBQWYsRUFBcUIsS0FBckIsRUFBNEIsU0FBNUIsQ0FQUjtBQVFDLHVCQVJELEdBUVcsUUFBUSxTQUFLLElBQUwsQ0FBVyxJQUFYLENBUm5CO0FBU0Msc0JBVEQsR0FTUSxTQUFLLElBQUwsQ0FBVyxTQUFLLE1BQUwsQ0FBYSxPQUFiLENBQVgsRUFBa0MsUUFBbEMsRUFBNEMsUUFBNUMsQ0FUUjtBQVVDLHVCQVZELEdBVVcsU0FBSyxZQUFMLENBQW1CLEdBQW5CLEVBQXdCLE1BQXhCLENBVlg7QUFXQyx5QkFYRCxHQVdhLFNBQUssSUFBTCxDQUFXLE9BQVgsRUFBb0IsU0FBSyxNQUFMLENBQWEsU0FBSyxNQUFsQixDQUFwQixFQUErQyxRQUEvQyxFQUF5RCxRQUF6RCxDQVhiOztBQVlILDBCQUFVO0FBQ04scUNBQWlCLEtBQUssTUFBTCxHQUFjLEdBQWQsR0FBb0IsU0FEL0I7QUFFTixvQ0FBZ0Isa0JBRlY7QUFHTix3Q0FBb0IsU0FIZDtBQUlOLG9DQUFnQjtBQUpWLGlCQUFWO0FBTUg7QUFDRyxvQkFwTUEsR0FvTVcsU0FBSyxLQUFMLENBQVksR0FBWixFQUFpQixNQUFqQixFQUF5QixPQUF6QixFQUFrQyxJQUFsQyxDQXBNWDs7QUFxTUosZ0JBQUksVUFBVSxRQUFkO0FBQ0ksc0JBQU0sSUFBSSxhQUFKLENBQW1CLFNBQUssRUFBTCxHQUFVLEdBQVYsR0FBZ0IsU0FBSyxJQUFMLENBQVcsUUFBWCxDQUFuQyxDQUFOO0FBREosYUFFQSxPQUFPLFFBQVA7QUF2TUk7QUFBQSxLQUFaOztBQTJNQTs7QUFFQSxRQUFJLE9BQU87O0FBRVAsY0FBTSxNQUZDO0FBR1AsZ0JBQVEsVUFIRDtBQUlQLHFCQUFhLElBSk47QUFLUCxxQkFBYSxJQUxOO0FBTVAsbUJBQVcsSUFOSjtBQU9QLDJCQUFtQixJQVBaO0FBUVAsZ0JBQVE7QUFDSixvQkFBUSxxR0FESjtBQUVKLG1CQUFPLDBCQUZIO0FBR0osbUJBQU8sc0JBSEg7QUFJSixtQkFBTztBQUpILFNBUkQ7QUFjUCxlQUFPO0FBQ0gsc0JBQVU7QUFDTix1QkFBTyxDQUNILE9BREcsRUFFSCxRQUZHLEVBR0gsUUFIRyxFQUlILFdBSkc7QUFERCxhQURQO0FBU0gsdUJBQVc7QUFDUCx3QkFBUSxDQUNKLFNBREksRUFFSixXQUZJLEVBR0osY0FISSxFQUlKLFlBSkksRUFLSixZQUxJLEVBTUosUUFOSTtBQUREO0FBVFIsU0FkQTs7QUFtQ0Qsb0JBbkNDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBb0NpQixTQUFLLGtCQUFMLEVBcENqQjtBQUFBO0FBb0NDLHVCQXBDRDtBQXFDQyxvQkFyQ0QsR0FxQ1EsT0FBTyxJQUFQLENBQWEsT0FBYixDQXJDUjtBQXNDQyxzQkF0Q0QsR0FzQ1UsRUF0Q1Y7O0FBdUNILHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksS0FBSyxNQUF6QixFQUFpQyxHQUFqQyxFQUFzQztBQUM5QixzQkFEOEIsR0FDekIsS0FBSyxDQUFMLENBRHlCO0FBRTlCLHdCQUY4QixHQUV2QixHQUFHLFdBQUgsRUFGdUI7QUFHOUIseUJBSDhCLEdBR3RCLEtBSHNCO0FBSTlCLDBCQUo4QixHQUlyQixPQUFPLEdBQVAsR0FBYSxLQUpROztBQUtsQywyQkFBTyxTQUFLLGtCQUFMLENBQXlCLElBQXpCLENBQVA7QUFDQSw0QkFBUSxTQUFLLGtCQUFMLENBQXlCLEtBQXpCLENBQVI7QUFDQSwyQkFBTyxJQUFQLENBQWE7QUFDVCw4QkFBTSxFQURHO0FBRVQsa0NBQVUsTUFGRDtBQUdULGdDQUFRLElBSEM7QUFJVCxpQ0FBUyxLQUpBO0FBS1QsZ0NBQVE7QUFMQyxxQkFBYjtBQU9IO0FBQ0QsdUJBQU8sTUFBUDtBQXRERztBQUFBO0FBeURELG9CQXpEQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQTBERyxTQUFLLFdBQUwsRUExREg7QUFBQTtBQUFBLHVCQTJEa0IsU0FBSyxrQkFBTCxFQTNEbEI7QUFBQTtBQTJEQyx3QkEzREQ7QUE0REMsc0JBNURELEdBNERVLEVBQUUsUUFBUSxRQUFWLEVBNURWOztBQTZESCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFNBQUssVUFBTCxDQUFnQixNQUFwQyxFQUE0QyxHQUE1QyxFQUFpRDtBQUN6Qyw0QkFEeUMsR0FDOUIsU0FBSyxVQUFMLENBQWdCLENBQWhCLENBRDhCO0FBRXpDLDZCQUZ5QyxHQUU3QixTQUFTLFdBQVQsRUFGNkI7O0FBRzdDLHdCQUFJLGFBQWEsTUFBakI7QUFDSSxvQ0FBWSxLQUFaO0FBREoscUJBRUksT0FMeUMsR0FLL0I7QUFDVixnQ0FBUSxTQURFO0FBRVYsZ0NBQVEsU0FGRTtBQUdWLGlDQUFTO0FBSEMscUJBTCtCO0FBVXpDLHdCQVZ5QyxHQVVsQyxZQUFZLFVBVnNCO0FBV3pDLHdCQVh5QyxHQVdsQyxZQUFZLE9BWHNCOztBQVk3Qyx3QkFBSSxRQUFRLFFBQVo7QUFDSSxnQ0FBUSxNQUFSLElBQWtCLFdBQVksU0FBUyxJQUFULENBQVosQ0FBbEI7QUFESixxQkFFQSxJQUFJLFFBQVEsUUFBWjtBQUNJLGdDQUFRLE1BQVIsSUFBa0IsV0FBWSxTQUFTLElBQVQsQ0FBWixDQUFsQjtBQURKLHFCQUVBLFFBQVEsT0FBUixJQUFtQixTQUFLLEdBQUwsQ0FBVSxRQUFRLE1BQVIsQ0FBVixFQUEyQixRQUFRLE1BQVIsQ0FBM0IsQ0FBbkI7QUFDQSwyQkFBTyxRQUFQLElBQW1CLE9BQW5CO0FBQ0g7QUFDRCx1QkFBTyxNQUFQO0FBaEZHO0FBQUE7QUFtRkQsc0JBbkZDLDBCQW1GZSxNQW5GZjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQW1GdUIsc0JBbkZ2QixtRkFtRmdDLEVBbkZoQztBQUFBLHVCQW9GRyxTQUFLLFdBQUwsRUFwRkg7QUFBQTtBQUFBLHVCQXFGbUIsU0FBSyxjQUFMLENBQXFCLFNBQUssTUFBTCxDQUFhO0FBQ3BELDRCQUFRLFNBQUssUUFBTCxDQUFlLE1BQWY7QUFENEMsaUJBQWIsRUFFeEMsTUFGd0MsQ0FBckIsQ0FyRm5CO0FBQUE7QUFxRkMseUJBckZEO0FBd0ZDLHlCQXhGRCxHQXdGYSxTQUFLLFlBQUwsRUF4RmI7QUF5RkMsc0JBekZELEdBeUZVO0FBQ1QsNEJBQVEsVUFBVSxNQUFWLENBREM7QUFFVCw0QkFBUSxVQUFVLE1BQVYsQ0FGQztBQUdULGlDQUFhLFNBSEo7QUFJVCxnQ0FBWSxTQUFLLE9BQUwsQ0FBYyxTQUFkO0FBSkgsaUJBekZWOztBQStGSCx1QkFBTyxNQUFQLElBQWlCLFNBQUssTUFBTCxDQUFhLE9BQU8sTUFBUCxDQUFiLEVBQTZCLENBQTdCLENBQWpCO0FBQ0EsdUJBQU8sTUFBUDtBQWhHRztBQUFBO0FBbUdQLG1CQW5HTyx1QkFtR00sTUFuR04sRUFtR2MsTUFuR2QsRUFtR3NCO0FBQ3pCLGdCQUFJLFlBQVksS0FBSyxZQUFMLEVBQWhCO0FBQ0EsbUJBQU87QUFDSCw2QkFBYSxTQURWO0FBRUgsNEJBQVksS0FBSyxPQUFMLENBQWMsU0FBZCxDQUZUO0FBR0gsd0JBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQUhMO0FBSUgsdUJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQUpKO0FBS0gsdUJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQUxKO0FBTUgsdUJBQU8sV0FBWSxPQUFPLE1BQVAsQ0FBWixDQU5KO0FBT0gsd0JBQVEsU0FQTDtBQVFILHdCQUFRLFNBUkw7QUFTSCx5QkFBUyxTQVROO0FBVUgseUJBQVMsU0FWTjtBQVdILHdCQUFRLFdBQVksT0FBTyxNQUFQLENBQVosQ0FYTDtBQVlILDBCQUFVLFNBWlA7QUFhSCw4QkFBYyxTQWJYO0FBY0gsMkJBQVcsU0FkUjtBQWVILDhCQUFjLFdBQVksT0FBTyxLQUFQLENBQVosQ0FmWDtBQWdCSCwrQkFBZSxXQUFZLE9BQU8sUUFBUCxDQUFaLENBaEJaO0FBaUJILHdCQUFRO0FBakJMLGFBQVA7QUFtQkgsU0F4SE07QUEwSEQsb0JBMUhDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBMkhHLFNBQUssV0FBTCxFQTNISDtBQUFBO0FBQUEsdUJBNEhpQixTQUFLLGtCQUFMLEVBNUhqQjtBQUFBO0FBNEhDLHVCQTVIRDtBQTZIQyxtQkE3SEQsR0E2SE8sT0FBTyxJQUFQLENBQWEsT0FBYixDQTdIUDtBQThIQyxzQkE5SEQsR0E4SFUsRUE5SFY7O0FBK0hILHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksSUFBSSxNQUF4QixFQUFnQyxHQUFoQyxFQUFxQztBQUM3QixzQkFENkIsR0FDeEIsSUFBSSxDQUFKLENBRHdCO0FBRTdCLDBCQUY2QixHQUVwQixTQUFLLGFBQUwsQ0FBbUIsRUFBbkIsQ0FGb0I7QUFHN0IsMEJBSDZCLEdBR3BCLE9BQU8sUUFBUCxDQUhvQjtBQUk3QiwwQkFKNkIsR0FJcEIsUUFBUSxFQUFSLENBSm9COztBQUtqQywyQkFBTyxNQUFQLElBQWlCLFNBQUssV0FBTCxDQUFrQixNQUFsQixFQUEwQixNQUExQixDQUFqQjtBQUNIO0FBQ0QsdUJBQU8sTUFBUDtBQXRJRztBQUFBO0FBeUlELG1CQXpJQyx1QkF5SVksTUF6SVo7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkEwSUcsU0FBSyxXQUFMLEVBMUlIO0FBQUE7QUEySUMsaUJBM0lELEdBMklLLFNBQUssTUFBTCxDQUFhLE1BQWIsQ0EzSUw7QUFBQSx1QkE0SWdCLFNBQUssZUFBTCxDQUFzQjtBQUNyQyw0QkFBUSxFQUFFLElBQUY7QUFENkIsaUJBQXRCLENBNUloQjtBQUFBO0FBNElDLHNCQTVJRDs7QUErSUgsdUJBQU8sU0FBSyxXQUFMLENBQWtCLE1BQWxCLEVBQTBCLENBQTFCLENBQVA7QUEvSUc7QUFBQTtBQWtKRCxtQkFsSkMsdUJBa0pZLE1BbEpaO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBa0pvQixzQkFsSnBCLG1GQWtKNkIsRUFsSjdCO0FBQUEsdUJBbUpHLFNBQUssV0FBTCxFQW5KSDtBQUFBO0FBb0pILHVCQUFPLFNBQUssZUFBTCxDQUFzQixTQUFLLE1BQUwsQ0FBYTtBQUN0Qyw0QkFBUSxTQUFLLFFBQUwsQ0FBZSxNQUFmO0FBRDhCLGlCQUFiLEVBRTFCLE1BRjBCLENBQXRCLENBQVA7QUFwSkc7QUFBQTtBQXlKRCxtQkF6SkMsdUJBeUpZLE1BekpaLEVBeUpvQixJQXpKcEIsRUF5SjBCLElBekoxQixFQXlKZ0MsTUF6SmhDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQXlKd0MscUJBekp4QyxtRkF5SmdELFNBekpoRDtBQXlKMkQsc0JBekozRCxtRkF5Sm9FLEVBekpwRTtBQUFBLHVCQTBKRyxTQUFLLFdBQUwsRUExSkg7QUFBQTtBQUFBLHVCQTJKa0IsU0FBSyxtQkFBTCxDQUEwQixTQUFLLE1BQUwsQ0FBYTtBQUN4RCw4QkFBVSxNQUQ4QztBQUV4RCw2QkFBUyxLQUYrQztBQUd4RCw0QkFBUSxJQUhnRDtBQUl4RCw0QkFBUSxTQUFLLFFBQUwsQ0FBZSxNQUFmO0FBSmdELGlCQUFiLEVBSzVDLE1BTDRDLENBQTFCLENBM0psQjtBQUFBO0FBMkpDLHdCQTNKRDs7QUFpS0gsdUJBQU87QUFDSCw0QkFBUSxRQURMO0FBRUgsMEJBQU0sU0FBUyxJQUFUO0FBRkgsaUJBQVA7QUFqS0c7QUFBQTtBQXVLRCxtQkF2S0MsdUJBdUtZLEVBdktaO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBdUtnQixzQkF2S2hCLG1GQXVLeUIsRUF2S3pCO0FBQUEsdUJBd0tHLFNBQUssV0FBTCxFQXhLSDtBQUFBO0FBeUtILHVCQUFPLFNBQUssb0NBQUwsQ0FBMkMsU0FBSyxNQUFMLENBQWE7QUFDM0QsMEJBQU07QUFEcUQsaUJBQWIsRUFFL0MsTUFGK0MsQ0FBM0MsQ0FBUDtBQXpLRztBQUFBO0FBOEtELGVBOUtDLG1CQThLUSxJQTlLUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBOEtjLG1CQTlLZCxtRkE4S29CLFFBOUtwQjtBQThLOEIsc0JBOUs5QixtRkE4S3VDLEtBOUt2QztBQThLOEMsc0JBOUs5QyxtRkE4S3VELEVBOUt2RDtBQThLMkQsdUJBOUszRCxtRkE4S3FFLFNBOUtyRTtBQThLZ0Ysb0JBOUtoRixtRkE4S3VGLFNBOUt2RjtBQStLQyxtQkEvS0QsR0ErS08sU0FBSyxJQUFMLENBQVUsS0FBVixJQUFtQixHQUFuQixHQUF5QixTQUFLLE9BQTlCLEdBQXdDLEdBQXhDLEdBQThDLElBL0tyRDs7QUFnTEgsb0JBQUksT0FBTyxRQUFYLEVBQXFCO0FBQ2pCLHdCQUFJLE9BQU8sSUFBUCxDQUFhLE1BQWIsRUFBcUIsTUFBekI7QUFDSSwrQkFBTyxNQUFNLFNBQUssU0FBTCxDQUFnQixNQUFoQixDQUFiO0FBREo7QUFFSCxpQkFIRCxNQUdPO0FBQ0MseUJBREQsR0FDUyxTQUFLLEtBQUwsR0FBYyxRQUFkLEVBRFQ7QUFFQyx5QkFGRCxHQUVTLFNBQUssTUFBTCxDQUFhO0FBQ3JCLCtCQUFPLFNBQUssTUFEUztBQUVyQixpQ0FBUztBQUZZLHFCQUFiLEVBR1QsTUFIUyxDQUZUO0FBTUMsMkJBTkQsR0FNVyxTQUFLLFNBQUwsQ0FBZ0IsS0FBaEIsQ0FOWDtBQU9DLDBCQVBELEdBT1UsU0FBSyxJQUFMLENBQVcsU0FBSyxNQUFMLENBQWEsU0FBSyxNQUFsQixDQUFYLENBUFY7O0FBUUgsMEJBQU0sV0FBTixJQUFxQixTQUFLLElBQUwsQ0FBVyxTQUFLLE1BQUwsQ0FBYSxPQUFiLENBQVgsRUFBa0MsU0FBSyxNQUFMLENBQWEsTUFBYixDQUFsQyxDQUFyQjtBQUNBLDJCQUFPLFNBQUssU0FBTCxDQUFnQixLQUFoQixDQUFQO0FBQ0EsOEJBQVU7QUFDTix3Q0FBZ0IsbUNBRFY7QUFFTiwwQ0FBa0IsS0FBSztBQUZqQixxQkFBVjtBQUlIO0FBak1FLHVCQWtNa0IsU0FBSyxLQUFMLENBQVksR0FBWixFQUFpQixNQUFqQixFQUF5QixPQUF6QixFQUFrQyxJQUFsQyxDQWxNbEI7QUFBQTtBQWtNQyx3QkFsTUQ7O0FBbU1ILG9CQUFJLFlBQVksUUFBaEI7QUFDSSx3QkFBSSxDQUFDLFNBQVMsUUFBVCxDQUFMO0FBQ0ksOEJBQU0sSUFBSSxhQUFKLENBQW1CLFNBQUssRUFBTCxHQUFVLEdBQVYsR0FBZ0IsU0FBSyxJQUFMLENBQVcsUUFBWCxDQUFuQyxDQUFOO0FBREo7QUFESixpQkFHQSxPQUFPLFFBQVA7QUF0TUc7QUFBQTtBQUFBLEtBQVg7O0FBME1BO0FBQ0E7O0FBRUEsUUFBSSxTQUFTOztBQUVULGNBQU0sUUFGRztBQUdULGdCQUFRLFFBSEM7QUFJVCxxQkFBYSxJQUpKO0FBS1QsbUJBQVcsR0FMRjtBQU1ULHFCQUFhLElBTko7QUFPVCwyQkFBbUIsSUFQVjtBQVFULGdCQUFRO0FBQ0osb0JBQVEscUdBREo7QUFFSixtQkFBTyx3QkFGSDtBQUdKLG1CQUFPLHdCQUhIO0FBSUosbUJBQU8sQ0FDSCx1Q0FERyxFQUVILGlEQUZHO0FBSkgsU0FSQztBQWlCVCxlQUFPO0FBQ0gsc0JBQVU7QUFDTix1QkFBTyxDQUNILFFBREcsRUFFSCxZQUZHLEVBR0gsT0FIRyxFQUlILE1BSkcsRUFLSCxRQUxHLEVBTUgsUUFORyxFQU9ILE1BUEcsRUFRSCxRQVJHO0FBREQsYUFEUDtBQWFILHVCQUFXO0FBQ1Asd0JBQVEsQ0FDSixVQURJLEVBRUosU0FGSSxFQUdKLGFBSEksRUFJSixjQUpJLEVBS0osa0JBTEksRUFNSixnQkFOSSxFQU9KLGVBUEksRUFRSixTQVJJLEVBU0osWUFUSSxFQVVKLGVBVkksRUFXSixjQVhJLEVBWUosYUFaSSxFQWFKLGFBYkksRUFjSixjQWRJLEVBZUosZUFmSSxFQWdCSixhQWhCSSxFQWlCSixVQWpCSSxFQWtCSixnQkFsQkksRUFtQkosY0FuQkksRUFvQkosZ0JBcEJJO0FBREQ7QUFiUixTQWpCRTs7QUF3REgsb0JBeERHO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQXlEZSxTQUFLLG1CQUFMLEVBekRmO0FBQUE7QUF5REQsdUJBekRDO0FBMERELG9CQTFEQyxHQTBETSxPQUFPLElBQVAsQ0FBYSxRQUFRLFFBQVIsQ0FBYixDQTFETjtBQTJERCxzQkEzREMsR0EyRFEsRUEzRFI7O0FBNERMLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksS0FBSyxNQUF6QixFQUFpQyxHQUFqQyxFQUFzQztBQUM5QixzQkFEOEIsR0FDekIsS0FBSyxDQUFMLENBRHlCO0FBRTlCLDBCQUY4QixHQUVyQixRQUFRLFFBQVIsRUFBa0IsRUFBbEIsQ0FGcUI7QUFHOUIsd0JBSDhCLEdBR3ZCLE9BQU8sTUFBUCxDQUh1QjtBQUk5Qix5QkFKOEIsR0FJdEIsT0FBTyxPQUFQLENBSnNCOztBQUtsQyx3QkFBSyxLQUFLLENBQUwsS0FBVyxHQUFaLElBQXFCLEtBQUssQ0FBTCxLQUFXLEdBQXBDO0FBQ0ksK0JBQU8sS0FBSyxLQUFMLENBQVksQ0FBWixDQUFQO0FBREoscUJBRUEsSUFBSyxNQUFNLENBQU4sS0FBWSxHQUFiLElBQXNCLE1BQU0sQ0FBTixLQUFZLEdBQXRDO0FBQ0ksZ0NBQVEsTUFBTSxLQUFOLENBQWEsQ0FBYixDQUFSO0FBREoscUJBRUEsT0FBTyxTQUFLLGtCQUFMLENBQXlCLElBQXpCLENBQVA7QUFDQSw0QkFBUSxTQUFLLGtCQUFMLENBQXlCLEtBQXpCLENBQVI7QUFDSSw0QkFYOEIsR0FXbkIsR0FBRyxPQUFILENBQVksSUFBWixLQUFxQixDQVhGO0FBWTlCLDBCQVo4QixHQVlyQixXQUFXLE9BQU8sU0FBUCxDQUFYLEdBQWdDLE9BQU8sR0FBUCxHQUFhLEtBWnhCOztBQWFsQywyQkFBTyxJQUFQLENBQWE7QUFDVCw4QkFBTSxFQURHO0FBRVQsa0NBQVUsTUFGRDtBQUdULGdDQUFRLElBSEM7QUFJVCxpQ0FBUyxLQUpBO0FBS1Qsb0NBQVksUUFMSDtBQU1ULGdDQUFRO0FBTkMscUJBQWI7QUFRSDtBQUNELHVCQUFPLE1BQVA7QUFsRks7QUFBQTtBQXFGSCxzQkFyRkcsMEJBcUZhLE1BckZiO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBcUZxQixzQkFyRnJCLG1GQXFGOEIsRUFyRjlCO0FBQUEsdUJBc0ZDLFNBQUssV0FBTCxFQXRGRDtBQUFBO0FBdUZELHdCQXZGQyxHQXVGVSxPQUFPLE9BQVAsQ0FBZ0IsSUFBaEIsS0FBeUIsQ0F2Rm5DOztBQXdGTCxvQkFBSSxRQUFKO0FBQ0ksMEJBQU0sSUFBSSxhQUFKLENBQW1CLFNBQUssRUFBTCxHQUFVLHNEQUFWLEdBQW1FLE1BQXRGLENBQU47QUFESixpQkFFSSxDQTFGQyxHQTBGRyxTQUFLLE1BQUwsQ0FBYSxNQUFiLENBMUZIO0FBQUEsdUJBMkZnQixTQUFLLGNBQUwsQ0FBcUIsU0FBSyxNQUFMLENBQWE7QUFDbkQsNEJBQVEsRUFBRSxJQUFGO0FBRDJDLGlCQUFiLEVBRXZDLE1BRnVDLENBQXJCLENBM0ZoQjtBQUFBO0FBMkZELHdCQTNGQztBQThGRCx5QkE5RkMsR0E4RlcsU0FBUyxRQUFULEVBQW1CLEVBQUUsSUFBRixDQUFuQixDQTlGWDtBQStGRCx5QkEvRkMsR0ErRlcsU0FBSyxZQUFMLEVBL0ZYO0FBZ0dELHNCQWhHQyxHQWdHUTtBQUNULDRCQUFRLEVBREM7QUFFVCw0QkFBUSxFQUZDO0FBR1QsaUNBQWEsU0FISjtBQUlULGdDQUFZLFNBQUssT0FBTCxDQUFjLFNBQWQ7QUFKSCxpQkFoR1I7QUFzR0QscUJBdEdDLEdBc0dPLENBQUUsTUFBRixFQUFVLE1BQVYsQ0F0R1A7O0FBdUdMLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksTUFBTSxNQUExQixFQUFrQyxHQUFsQyxFQUF1QztBQUMvQix3QkFEK0IsR0FDeEIsTUFBTSxDQUFOLENBRHdCO0FBRS9CLDBCQUYrQixHQUV0QixVQUFVLElBQVYsQ0FGc0I7O0FBR25DLHlCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksT0FBTyxNQUEzQixFQUFtQyxHQUFuQyxFQUF3QztBQUNoQyw2QkFEZ0MsR0FDeEIsT0FBTyxDQUFQLENBRHdCO0FBRWhDLDZCQUZnQyxHQUV4QixXQUFZLE1BQU0sQ0FBTixDQUFaLENBRndCO0FBR2hDLDhCQUhnQyxHQUd2QixXQUFZLE1BQU0sQ0FBTixDQUFaLENBSHVCO0FBSWhDLG1DQUpnQyxHQUlwQixNQUFNLENBQU4sSUFBVyxJQUpTOztBQUtwQywrQkFBTyxJQUFQLEVBQWEsSUFBYixDQUFtQixDQUFFLEtBQUYsRUFBUyxNQUFULEVBQWlCLFdBQWpCLENBQW5CO0FBQ0g7QUFDSjtBQUNELHVCQUFPLE1BQVA7QUFsSEs7QUFBQTtBQXFIVCxtQkFySFMsdUJBcUhJLE1BckhKLEVBcUhZLE1BckhaLEVBcUhvQjtBQUN6QixnQkFBSSxZQUFZLEtBQUssWUFBTCxFQUFoQjtBQUNBLG1CQUFPO0FBQ0gsNkJBQWEsU0FEVjtBQUVILDRCQUFZLEtBQUssT0FBTCxDQUFjLFNBQWQsQ0FGVDtBQUdILHdCQUFRLFdBQVksT0FBTyxHQUFQLEVBQVksQ0FBWixDQUFaLENBSEw7QUFJSCx1QkFBTyxXQUFZLE9BQU8sR0FBUCxFQUFZLENBQVosQ0FBWixDQUpKO0FBS0gsdUJBQU8sV0FBWSxPQUFPLEdBQVAsRUFBWSxDQUFaLENBQVosQ0FMSjtBQU1ILHVCQUFPLFdBQVksT0FBTyxHQUFQLEVBQVksQ0FBWixDQUFaLENBTko7QUFPSCx3QkFBUSxXQUFZLE9BQU8sR0FBUCxFQUFZLENBQVosQ0FBWixDQVBMO0FBUUgsd0JBQVEsV0FBWSxPQUFPLEdBQVAsQ0FBWixDQVJMO0FBU0gseUJBQVMsU0FUTjtBQVVILHlCQUFTLFNBVk47QUFXSCx3QkFBUSxXQUFZLE9BQU8sR0FBUCxFQUFZLENBQVosQ0FBWixDQVhMO0FBWUgsMEJBQVUsU0FaUDtBQWFILDhCQUFjLFNBYlg7QUFjSCwyQkFBVyxTQWRSO0FBZUgsOEJBQWMsU0FmWDtBQWdCSCwrQkFBZSxXQUFZLE9BQU8sR0FBUCxFQUFZLENBQVosQ0FBWixDQWhCWjtBQWlCSCx3QkFBUTtBQWpCTCxhQUFQO0FBbUJILFNBMUlRO0FBNElILG9CQTVJRztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQTZJQyxTQUFLLFdBQUwsRUE3SUQ7QUFBQTtBQThJRCxxQkE5SUMsR0E4SU8sRUE5SVA7O0FBK0lMLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksU0FBSyxPQUFMLENBQWEsTUFBakMsRUFBeUMsR0FBekMsRUFBOEM7QUFDdEMsMEJBRHNDLEdBQzdCLFNBQUssT0FBTCxDQUFhLENBQWIsQ0FENkI7QUFFdEMsMEJBRnNDLEdBRTdCLFNBQUssT0FBTCxDQUFhLE1BQWIsQ0FGNkI7O0FBRzFDLHdCQUFJLENBQUMsT0FBTyxVQUFQLENBQUw7QUFDSSw4QkFBTSxJQUFOLENBQVksT0FBTyxJQUFQLENBQVo7QUFESjtBQUVIO0FBQ0csc0JBckpDLEdBcUpRLE1BQU0sSUFBTixDQUFZLEdBQVosQ0FySlI7QUFBQSx1QkFzSmdCLFNBQUssZUFBTCxDQUFzQjtBQUN2Qyw0QkFBUTtBQUQrQixpQkFBdEIsQ0F0SmhCO0FBQUE7QUFzSkQsd0JBdEpDO0FBeUpELHVCQXpKQyxHQXlKUyxTQUFTLFFBQVQsQ0F6SlQ7QUEwSkQsbUJBMUpDLEdBMEpLLE9BQU8sSUFBUCxDQUFhLE9BQWIsQ0ExSkw7QUEySkQsc0JBM0pDLEdBMkpRLEVBM0pSOztBQTRKTCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLElBQUksTUFBeEIsRUFBZ0MsR0FBaEMsRUFBcUM7QUFDN0Isc0JBRDZCLEdBQ3hCLElBQUksQ0FBSixDQUR3QjtBQUU3QiwyQkFGNkIsR0FFcEIsU0FBSyxhQUFMLENBQW1CLEVBQW5CLENBRm9CO0FBRzdCLDRCQUg2QixHQUdwQixRQUFPLFFBQVAsQ0FIb0I7QUFJN0IsMEJBSjZCLEdBSXBCLFFBQVEsRUFBUixDQUpvQjs7QUFLakMsMkJBQU8sUUFBUCxJQUFpQixTQUFLLFdBQUwsQ0FBa0IsTUFBbEIsRUFBMEIsT0FBMUIsQ0FBakI7QUFDSDtBQUNELHVCQUFPLE1BQVA7QUFuS0s7QUFBQTtBQXNLSCxtQkF0S0csdUJBc0tVLE1BdEtWO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQXVLQyxTQUFLLFdBQUwsRUF2S0Q7QUFBQTtBQXdLRCx3QkF4S0MsR0F3S1UsT0FBTyxPQUFQLENBQWdCLElBQWhCLEtBQXlCLENBeEtuQzs7QUF5S0wsb0JBQUksUUFBSjtBQUNJLDBCQUFNLElBQUksYUFBSixDQUFtQixTQUFLLEVBQUwsR0FBVSxpREFBVixHQUE4RCxNQUFqRixDQUFOO0FBREosaUJBRUksQ0EzS0MsR0EyS0csU0FBSyxNQUFMLENBQWEsTUFBYixDQTNLSDtBQUFBLHVCQTRLZ0IsU0FBSyxlQUFMLENBQXNCO0FBQ3ZDLDRCQUFRLEVBQUUsSUFBRjtBQUQrQixpQkFBdEIsQ0E1S2hCO0FBQUE7QUE0S0Qsd0JBNUtDO0FBK0tELHNCQS9LQyxHQStLUSxTQUFTLFFBQVQsRUFBbUIsRUFBRSxJQUFGLENBQW5CLENBL0tSOztBQWdMTCx1QkFBTyxTQUFLLFdBQUwsQ0FBa0IsTUFBbEIsRUFBMEIsQ0FBMUIsQ0FBUDtBQWhMSztBQUFBO0FBbUxULGtCQW5MUyxzQkFtTEcsS0FuTEgsRUFtTFUsTUFuTFYsRUFtTGtCO0FBQ3ZCLGdCQUFJLFlBQVksU0FBVSxNQUFNLENBQU4sSUFBVyxJQUFyQixDQUFoQjtBQUNBLGdCQUFJLE9BQVEsTUFBTSxDQUFOLEtBQVksR0FBYixHQUFvQixNQUFwQixHQUE2QixLQUF4QztBQUNBLGdCQUFJLE9BQVEsTUFBTSxDQUFOLEtBQVksR0FBYixHQUFvQixPQUFwQixHQUE4QixRQUF6QztBQUNBLG1CQUFPO0FBQ0gsd0JBQVEsS0FETDtBQUVILDZCQUFhLFNBRlY7QUFHSCw0QkFBWSxLQUFLLE9BQUwsQ0FBYyxTQUFkLENBSFQ7QUFJSCwwQkFBVSxPQUFPLFFBQVAsQ0FKUDtBQUtILHdCQUFRLElBTEw7QUFNSCx3QkFBUSxJQU5MO0FBT0gseUJBQVMsV0FBWSxNQUFNLENBQU4sQ0FBWixDQVBOO0FBUUgsMEJBQVUsV0FBWSxNQUFNLENBQU4sQ0FBWjtBQVJQLGFBQVA7QUFVSCxTQWpNUTtBQW1NVCxrQkFuTVMsc0JBbU1HLEtBbk1ILEVBbU1vRjtBQUFBLGdCQUExRSxNQUEwRSx1RUFBakUsU0FBaUU7QUFBQSxnQkFBdEQsU0FBc0QsdUVBQTFDLEVBQTBDO0FBQUEsZ0JBQXRDLEtBQXNDLHVFQUE5QixTQUE4QjtBQUFBLGdCQUFuQixLQUFtQix1RUFBWCxTQUFXOztBQUN6RixtQkFBTyxDQUNILE1BQU0sQ0FBTixDQURHLEVBRUgsTUFBTSxDQUFOLENBRkcsRUFHSCxNQUFNLENBQU4sQ0FIRyxFQUlILE1BQU0sQ0FBTixDQUpHLEVBS0gsTUFBTSxDQUFOLENBTEcsRUFNSCxNQUFNLENBQU4sQ0FORyxDQUFQO0FBUUgsU0E1TVE7QUE4TUgsa0JBOU1HLHNCQThNUyxNQTlNVDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUE4TWlCLHlCQTlNakIsbUZBOE02QixFQTlNN0I7QUE4TWlDLHFCQTlNakMsbUZBOE15QyxTQTlNekM7QUE4TW9ELHFCQTlNcEQsbUZBOE00RCxTQTlNNUQ7QUErTUQsaUJBL01DLEdBK01HLFNBQUssTUFBTCxDQUFhLE1BQWIsQ0EvTUg7QUFBQSx1QkFnTmdCLFNBQUssYUFBTCxDQUFvQjtBQUNyQyw0QkFBUSxFQUFFLElBQUYsQ0FENkI7QUFFckMsZ0NBQVksU0FBVSxZQUFZLEVBQXRCLENBRnlCO0FBR3JDLDZCQUFTO0FBSDRCLGlCQUFwQixDQWhOaEI7QUFBQTtBQWdORCx3QkFoTkM7QUFxTkQsc0JBck5DLEdBcU5RLFNBQVMsRUFBRSxJQUFGLENBQVQsQ0FyTlI7O0FBc05MLHVCQUFPLFNBQUssV0FBTCxDQUFrQixDQUFsQixFQUFxQixNQUFyQixFQUE2QixTQUE3QixFQUF3QyxLQUF4QyxFQUErQyxLQUEvQyxDQUFQO0FBdE5LO0FBQUE7QUF5TkgsbUJBek5HLHVCQXlOVSxNQXpOVjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBeU5rQixzQkF6TmxCLG1GQXlOMkIsRUF6TjNCO0FBQUEsdUJBME5DLFNBQUssV0FBTCxFQTFORDtBQUFBO0FBMk5ELGlCQTNOQyxHQTJORyxTQUFLLE1BQUwsQ0FBYSxNQUFiLENBM05IO0FBNE5ELGtCQTVOQyxHQTROSSxFQUFFLElBQUYsQ0E1Tko7QUFBQSx1QkE2TmdCLFNBQUssZUFBTCxDQUFzQixTQUFLLE1BQUwsQ0FBYTtBQUNwRCw0QkFBUTtBQUQ0QyxpQkFBYixFQUV4QyxNQUZ3QyxDQUF0QixDQTdOaEI7QUFBQTtBQTZORCx3QkE3TkM7QUFnT0Qsc0JBaE9DLEdBZ09RLFNBQVMsUUFBVCxFQUFtQixFQUFuQixDQWhPUjs7QUFpT0wsdUJBQU8sU0FBSyxXQUFMLENBQWtCLE1BQWxCLEVBQTBCLENBQTFCLENBQVA7QUFqT0s7QUFBQTtBQW9PSCxvQkFwT0c7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQXFPQyxTQUFLLFdBQUwsRUFyT0Q7QUFBQTtBQUFBLHVCQXNPZ0IsU0FBSyxrQkFBTCxFQXRPaEI7QUFBQTtBQXNPRCx3QkF0T0M7QUF1T0Qsd0JBdk9DLEdBdU9VLFNBQVMsUUFBVCxDQXZPVjtBQXdPRCxzQkF4T0MsR0F3T1EsRUFBRSxRQUFRLFFBQVYsRUF4T1I7QUF5T0QsMEJBek9DLEdBeU9ZLE9BQU8sSUFBUCxDQUFhLFFBQWIsQ0F6T1o7O0FBME9MLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksV0FBVyxNQUEvQixFQUF1QyxHQUF2QyxFQUE0QztBQUNwQyw0QkFEb0MsR0FDekIsV0FBVyxDQUFYLENBRHlCO0FBRXBDLHdCQUZvQyxHQUU3QixRQUY2QjtBQUd4Qzs7QUFDQSx3QkFBSSxLQUFLLENBQUwsS0FBVyxHQUFmLEVBQW9CO0FBQ2hCLCtCQUFPLEtBQUssS0FBTCxDQUFZLENBQVosQ0FBUDtBQUNILHFCQUZEO0FBRU8sNEJBQUksS0FBSyxDQUFMLEtBQVcsR0FBZixFQUFvQjtBQUN2QixtQ0FBTyxLQUFLLEtBQUwsQ0FBWSxDQUFaLENBQVA7QUFDSDtBQUpELHFCQUtBLE9BQU8sU0FBSyxrQkFBTCxDQUF5QixJQUF6QixDQUFQO0FBQ0ksMkJBVm9DLEdBVTFCLFdBQVksU0FBUyxRQUFULENBQVosQ0FWMEI7QUFXcEMsMkJBWG9DLEdBVzFCO0FBQ1YsZ0NBQVEsT0FERTtBQUVWLGdDQUFRLFNBRkU7QUFHVixpQ0FBUztBQUhDLHFCQVgwQjs7QUFnQnhDLDJCQUFPLElBQVAsSUFBZSxPQUFmO0FBQ0g7QUFDRCx1QkFBTyxNQUFQO0FBNVBLO0FBQUE7QUErUEgsbUJBL1BHLHVCQStQVSxNQS9QVixFQStQa0IsSUEvUGxCLEVBK1B3QixJQS9QeEIsRUErUDhCLE1BL1A5QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUErUHNDLHFCQS9QdEMsbUZBK1A4QyxTQS9QOUM7QUErUHlELHNCQS9QekQsbUZBK1BrRSxFQS9QbEU7QUFBQSx1QkFnUUMsU0FBSyxXQUFMLEVBaFFEO0FBQUE7QUFpUUQscUJBalFDLEdBaVFPO0FBQ1IsNEJBQVEsU0FBSyxRQUFMLENBQWUsTUFBZixDQURBO0FBRVIsNEJBQVEsSUFGQTtBQUdSLGlDQUFhLElBSEw7QUFJUiw4QkFBVTtBQUpGLGlCQWpRUDs7QUF1UUwsb0JBQUksUUFBUSxPQUFaO0FBQ0ksMEJBQU0sT0FBTixJQUFpQixLQUFqQjtBQURKLGlCQXZRSyxPQXlRZ0IsU0FBSyxtQkFBTCxDQUEwQixTQUFLLE1BQUwsQ0FBYSxLQUFiLEVBQW9CLE1BQXBCLENBQTFCLENBelFoQjtBQUFBO0FBeVFELHdCQXpRQztBQTBRRCxzQkExUUMsR0EwUVEsU0FBUyxRQUFULEVBQW1CLE1BQW5CLEVBQTJCLE1BMVFuQztBQTJRRCxrQkEzUUMsR0EyUUssU0FBUyxDQUFWLEdBQWUsU0FBUyxRQUFULEVBQW1CLE1BQW5CLENBQWYsR0FBNEMsU0FBUyxRQUFULEVBQW1CLE1BQW5CLEVBQTJCLENBQTNCLENBM1FoRDs7QUE0UUwsdUJBQU87QUFDSCw0QkFBUSxRQURMO0FBRUgsMEJBQU07QUFGSCxpQkFBUDtBQTVRSztBQUFBO0FBa1JILG1CQWxSRyx1QkFrUlUsRUFsUlY7QUFBQTs7QUFBQTtBQUFBLHVCQW1SQyxTQUFLLFdBQUwsRUFuUkQ7QUFBQTtBQW9STCx1QkFBTyxTQUFLLHNCQUFMLENBQTZCLEVBQUUsUUFBUSxFQUFWLEVBQTdCLENBQVA7QUFwUks7QUFBQTtBQXVSSCxlQXZSRyxtQkF1Uk0sSUF2Uk47QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBdVJZLG1CQXZSWixtRkF1UmtCLFFBdlJsQjtBQXVSNEIsc0JBdlI1QixtRkF1UnFDLEtBdlJyQztBQXVSNEMsc0JBdlI1QyxtRkF1UnFELEVBdlJyRDtBQXVSeUQsdUJBdlJ6RCxtRkF1Um1FLFNBdlJuRTtBQXVSOEUsb0JBdlI5RSxtRkF1UnFGLFNBdlJyRjtBQXdSRCxtQkF4UkMsR0F3UkssTUFBTSxTQUFLLE9BQVgsR0FBcUIsR0FBckIsR0FBMkIsR0FBM0IsR0FBaUMsR0FBakMsR0FBdUMsSUF4UjVDOztBQXlSTCxvQkFBSSxPQUFPLFFBQVgsRUFBcUI7QUFDakIsd0JBQUksT0FBTyxJQUFQLENBQWEsTUFBYixFQUFxQixNQUF6QjtBQUNJLCtCQUFPLE1BQU0sU0FBSyxTQUFMLENBQWdCLE1BQWhCLENBQWI7QUFESjtBQUVILGlCQUhELE1BR087QUFDQyx5QkFERCxHQUNTLFNBQUssS0FBTCxHQUFjLFFBQWQsRUFEVDs7QUFFSCwyQkFBTyxTQUFLLFNBQUwsQ0FBZ0IsU0FBSyxNQUFMLENBQWEsRUFBRSxTQUFTLEtBQVgsRUFBYixFQUFpQyxNQUFqQyxDQUFoQixDQUFQO0FBQ0ksd0JBSEQsR0FHUSxTQUFLLE1BQUwsQ0FBYSxRQUFRLElBQXJCLENBSFI7QUFJQywwQkFKRCxHQUlRLFNBQUssSUFBTCxDQUFXLElBQVgsRUFBaUIsUUFBakIsRUFBMkIsUUFBM0IsQ0FKUjtBQUtDLDBCQUxELEdBS1UsU0FBSyxjQUFMLENBQXFCLFNBQUssTUFBTCxDQUFhLEdBQWIsQ0FBckIsQ0FMVjtBQU1DLDJCQU5ELEdBTVcsU0FBSyxZQUFMLENBQW1CLE1BQW5CLEVBQTJCLE1BQTNCLENBTlg7QUFPQywwQkFQRCxHQU9VLFNBQUssY0FBTCxDQUFxQixTQUFLLE1BQTFCLENBUFY7QUFRQyw2QkFSRCxHQVFhLFNBQUssSUFBTCxDQUFXLE9BQVgsRUFBb0IsTUFBcEIsRUFBNEIsUUFBNUIsRUFBc0MsUUFBdEMsQ0FSYjs7QUFTSCw4QkFBVTtBQUNOLG1DQUFXLFNBQUssTUFEVjtBQUVOLG9DQUFZLFNBQUssTUFBTCxDQUFhLFNBQWIsQ0FGTjtBQUdOLHdDQUFnQjtBQUhWLHFCQUFWO0FBS0g7QUFDRCxzQkFBTSxTQUFLLElBQUwsQ0FBVSxLQUFWLElBQW1CLEdBQXpCO0FBM1NLLHVCQTRTZ0IsU0FBSyxLQUFMLENBQVksR0FBWixFQUFpQixNQUFqQixFQUF5QixPQUF6QixFQUFrQyxJQUFsQyxDQTVTaEI7QUFBQTtBQTRTRCx3QkE1U0M7O0FBNlNMLG9CQUFJLFdBQVcsUUFBZixFQUF5QjtBQUNqQiw2QkFEaUIsR0FDTCxTQUFTLE9BQVQsRUFBa0IsTUFEYjs7QUFFckIsd0JBQUksU0FBSjtBQUNJLDhCQUFNLElBQUksYUFBSixDQUFtQixTQUFLLEVBQUwsR0FBVSxHQUFWLEdBQWdCLFNBQUssSUFBTCxDQUFXLFFBQVgsQ0FBbkMsQ0FBTjtBQURKO0FBRUg7QUFDRCx1QkFBTyxRQUFQO0FBbFRLO0FBQUE7QUFBQSxLQUFiOztBQXNUQTs7QUFFQSxRQUFJLFVBQVU7O0FBRVYsY0FBTSxTQUZJO0FBR1YsZ0JBQVEsU0FIRTtBQUlWLHFCQUFhLElBSkg7QUFLVixtQkFBVyxRQUxEO0FBTVYsZ0JBQVE7QUFDSixvQkFBUSxxR0FESjtBQUVKLG1CQUFPLHlCQUZIO0FBR0osbUJBQU8seUJBSEg7QUFJSixtQkFBTyxDQUNILCtCQURHLEVBRUgsa0NBRkc7QUFKSCxTQU5FO0FBZVYsZUFBTztBQUNILHNCQUFVO0FBQ04sdUJBQU8sQ0FDSCxhQURHLEVBRUgsVUFGRyxFQUdILFFBSEc7QUFERCxhQURQO0FBUUgsdUJBQVc7QUFDUCx3QkFBUSxDQUNKLFVBREksRUFFSixjQUZJLEVBR0osZ0JBSEksRUFJSixxQkFKSSxFQUtKLFdBTEksRUFNSixXQU5JLEVBT0osWUFQSSxFQVFKLFdBUkk7QUFERDtBQVJSLFNBZkc7O0FBcUNKLG9CQXJDSTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBc0NjLFNBQUssZUFBTCxFQXRDZDtBQUFBO0FBc0NGLHVCQXRDRTtBQXVDRixzQkF2Q0UsR0F1Q08sRUF2Q1A7QUF3Q0Ysb0JBeENFLEdBd0NLLE9BQU8sSUFBUCxDQUFhLE9BQWIsQ0F4Q0w7O0FBeUNOLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksS0FBSyxNQUF6QixFQUFpQyxHQUFqQyxFQUFzQztBQUM5QixzQkFEOEIsR0FDekIsS0FBSyxDQUFMLENBRHlCO0FBRTlCLDBCQUY4QixHQUVyQixRQUFRLEVBQVIsQ0FGcUI7QUFHOUIsd0JBSDhCLEdBR3ZCLEdBQUcsS0FBSCxDQUFVLENBQVYsRUFBYSxDQUFiLENBSHVCO0FBSTlCLHlCQUo4QixHQUl0QixHQUFHLEtBQUgsQ0FBVSxDQUFWLEVBQWEsQ0FBYixDQUpzQjs7QUFLbEMsMkJBQU8sS0FBSyxXQUFMLEVBQVA7QUFDQSw0QkFBUSxNQUFNLFdBQU4sRUFBUjtBQUNJLDBCQVA4QixHQU9yQixPQUFPLEdBQVAsR0FBYSxLQVBROztBQVFsQywyQkFBTyxJQUFQLENBQWE7QUFDVCw4QkFBTSxFQURHO0FBRVQsa0NBQVUsTUFGRDtBQUdULGdDQUFRLElBSEM7QUFJVCxpQ0FBUyxLQUpBO0FBS1QsZ0NBQVE7QUFMQyxxQkFBYjtBQU9IO0FBQ0QsdUJBQU8sTUFBUDtBQXpETTtBQUFBO0FBNERKLG9CQTVESTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQTZEQSxTQUFLLFdBQUwsRUE3REE7QUFBQTtBQUFBLHVCQThEZSxTQUFLLHlCQUFMLEVBOURmO0FBQUE7QUE4REYsd0JBOURFO0FBK0RGLHdCQS9ERSxHQStEUyxTQUFTLFNBQVQsQ0EvRFQ7QUFnRUYsc0JBaEVFLEdBZ0VPLEVBQUUsUUFBUSxRQUFWLEVBaEVQO0FBaUVGLDBCQWpFRSxHQWlFVyxPQUFPLElBQVAsQ0FBYSxRQUFiLENBakVYOztBQWtFTixxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFdBQVcsTUFBL0IsRUFBdUMsR0FBdkMsRUFBNEM7QUFDcEMsNEJBRG9DLEdBQ3pCLFdBQVcsQ0FBWCxDQUR5QjtBQUVwQywyQkFGb0MsR0FFMUIsV0FBWSxTQUFTLFFBQVQsQ0FBWixDQUYwQjtBQUdwQywyQkFIb0MsR0FHMUI7QUFDVixnQ0FBUSxPQURFO0FBRVYsZ0NBQVEsU0FGRTtBQUdWLGlDQUFTO0FBSEMscUJBSDBCOztBQVF4QywyQkFBTyxRQUFQLElBQW1CLE9BQW5CO0FBQ0g7QUFDRCx1QkFBTyxNQUFQO0FBNUVNO0FBQUE7QUErRUosc0JBL0VJLDBCQStFWSxNQS9FWjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUErRW9CLHNCQS9FcEIsbUZBK0U2QixFQS9FN0I7QUFBQSx1QkFnRkEsU0FBSyxXQUFMLEVBaEZBO0FBQUE7QUFBQSx1QkFpRmdCLFNBQUssb0JBQUwsQ0FBMkIsU0FBSyxNQUFMLENBQWE7QUFDMUQsOEJBQVUsU0FBSyxRQUFMLENBQWUsTUFBZjtBQURnRCxpQkFBYixFQUU5QyxNQUY4QyxDQUEzQixDQWpGaEI7QUFBQTtBQWlGRix5QkFqRkU7QUFvRkYseUJBcEZFLEdBb0ZVLFNBQUssWUFBTCxFQXBGVjtBQXFGRixzQkFyRkUsR0FxRk87QUFDVCw0QkFBUSxFQURDO0FBRVQsNEJBQVEsRUFGQztBQUdULGlDQUFhLFNBSEo7QUFJVCxnQ0FBWSxTQUFLLE9BQUwsQ0FBYyxTQUFkO0FBSkgsaUJBckZQO0FBMkZGLHFCQTNGRSxHQTJGTSxDQUFFLE1BQUYsRUFBVSxNQUFWLENBM0ZOOztBQTRGTixxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLE1BQU0sTUFBMUIsRUFBa0MsR0FBbEMsRUFBdUM7QUFDL0Isd0JBRCtCLEdBQ3hCLE1BQU0sQ0FBTixDQUR3QjtBQUUvQiwwQkFGK0IsR0FFdEIsVUFBVSxJQUFWLENBRnNCOztBQUduQyx5QkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLE9BQU8sTUFBM0IsRUFBbUMsR0FBbkMsRUFBd0M7QUFDaEMsNkJBRGdDLEdBQ3hCLE9BQU8sQ0FBUCxDQUR3QjtBQUVoQyw2QkFGZ0MsR0FFeEIsV0FBWSxNQUFNLENBQU4sQ0FBWixDQUZ3QjtBQUdoQyw4QkFIZ0MsR0FHdkIsV0FBWSxNQUFNLENBQU4sQ0FBWixDQUh1Qjs7QUFJcEMsK0JBQU8sSUFBUCxFQUFhLElBQWIsQ0FBbUIsQ0FBRSxLQUFGLEVBQVMsTUFBVCxDQUFuQjtBQUNIO0FBQ0o7QUFDRCx1QkFBTyxNQUFQO0FBdEdNO0FBQUE7QUF5R0osbUJBekdJLHVCQXlHUyxNQXpHVDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkEwR0EsU0FBSyxXQUFMLEVBMUdBO0FBQUE7QUEyR0YsaUJBM0dFLEdBMkdFLFNBQUssTUFBTCxDQUFhLE1BQWIsQ0EzR0Y7QUFBQSx1QkE0R2MsU0FBSyxlQUFMLENBQXNCO0FBQ3RDLDhCQUFVLEVBQUUsSUFBRjtBQUQ0QixpQkFBdEIsQ0E1R2Q7QUFBQTtBQTRHRix1QkE1R0U7QUErR0Ysc0JBL0dFLEdBK0dPLFFBQVEsRUFBRSxJQUFGLENBQVIsQ0EvR1A7QUFnSEYseUJBaEhFLEdBZ0hVLFNBQUssWUFBTCxFQWhIVjs7QUFpSE4sdUJBQU87QUFDSCxpQ0FBYSxTQURWO0FBRUgsZ0NBQVksU0FBSyxPQUFMLENBQWMsU0FBZCxDQUZUO0FBR0gsNEJBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQUhMO0FBSUgsMkJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQUpKO0FBS0gsMkJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQUxKO0FBTUgsMkJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQU5KO0FBT0gsNEJBQVEsU0FQTDtBQVFILDRCQUFRLFNBUkw7QUFTSCw2QkFBUyxTQVROO0FBVUgsNkJBQVMsU0FWTjtBQVdILDRCQUFRLFdBQVksT0FBTyxNQUFQLENBQVosQ0FYTDtBQVlILDhCQUFVLFNBWlA7QUFhSCxrQ0FBYyxTQWJYO0FBY0gsK0JBQVcsU0FkUjtBQWVILGtDQUFjLFNBZlg7QUFnQkgsbUNBQWUsV0FBWSxPQUFPLFFBQVAsQ0FBWixDQWhCWjtBQWlCSCw0QkFBUTtBQWpCTCxpQkFBUDtBQWpITTtBQUFBO0FBc0lKLG1CQXRJSSx1QkFzSVMsTUF0SVQ7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFzSWlCLHNCQXRJakIsbUZBc0kwQixFQXRJMUI7QUFBQSx1QkF1SUEsU0FBSyxXQUFMLEVBdklBO0FBQUE7QUF3SU4sdUJBQU8sU0FBSyxpQkFBTCxDQUF3QixTQUFLLE1BQUwsQ0FBYTtBQUN4Qyw4QkFBVSxTQUFLLFFBQUwsQ0FBZSxNQUFmO0FBRDhCLGlCQUFiLEVBRTVCLE1BRjRCLENBQXhCLENBQVA7QUF4SU07QUFBQTtBQTZJSixtQkE3SUksdUJBNklTLE1BN0lULEVBNklpQixJQTdJakIsRUE2SXVCLElBN0l2QixFQTZJNkIsTUE3STdCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQTZJcUMscUJBN0lyQyxtRkE2STZDLFNBN0k3QztBQTZJd0Qsc0JBN0l4RCxtRkE2SWlFLEVBN0lqRTtBQUFBLHVCQThJQSxTQUFLLFdBQUwsRUE5SUE7QUFBQTtBQStJTixvQkFBSSxRQUFRLFFBQVo7QUFDSSwwQkFBTSxJQUFJLGFBQUosQ0FBbUIsU0FBSyxFQUFMLEdBQVUsMkJBQTdCLENBQU47QUFESixpQkFFSSxNQWpKRSxHQWlKTyxnQkFBZ0IsU0FBSyxVQUFMLENBQWlCLElBQWpCLENBQWhCLEdBQXlDLE9BakpoRDtBQWtKRix3QkFsSkUsR0FrSlMsU0FBSyxRQUFMLENBQWUsTUFBZixDQWxKVDtBQW1KRixxQkFuSkUsR0FtSk07QUFDUiw4QkFBVSxDQUFFLEtBQUYsRUFBUyxNQUFULEVBQWlCLFFBQWpCO0FBREYsaUJBbkpOO0FBQUEsdUJBc0plLFNBQUssTUFBTCxFQUFjLFNBQUssTUFBTCxDQUFhLEtBQWIsRUFBb0IsTUFBcEIsQ0FBZCxDQXRKZjtBQUFBO0FBc0pGLHdCQXRKRTs7QUF1Sk4sdUJBQU87QUFDSCw0QkFBUSxRQURMO0FBRUgsMEJBQU0sU0FBUyxJQUFULEVBQWUsUUFBZjtBQUZILGlCQUFQO0FBdkpNO0FBQUE7QUE2SkosbUJBN0pJLHVCQTZKUyxFQTdKVDtBQUFBOztBQUFBO0FBQUEsdUJBOEpBLFNBQUssV0FBTCxFQTlKQTtBQUFBO0FBK0pOLHVCQUFPLFNBQUssc0JBQUwsQ0FBNkIsRUFBRSxVQUFVLEVBQVosRUFBN0IsQ0FBUDtBQS9KTTtBQUFBO0FBa0tKLGVBbEtJLG1CQWtLSyxJQWxLTDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFrS1csZUFsS1gsbUZBa0tpQixRQWxLakI7QUFrSzJCLGtCQWxLM0IsbUZBa0tvQyxLQWxLcEM7QUFrSzJDLGtCQWxLM0MsbUZBa0tvRCxFQWxLcEQ7QUFrS3dELG1CQWxLeEQsbUZBa0trRSxTQWxLbEU7QUFrSzZFLGdCQWxLN0UsbUZBa0tvRixTQWxLcEY7QUFtS0YsZUFuS0UsR0FtS0ksU0FBSyxJQUFMLENBQVUsS0FBVixJQUFtQixHQUFuQixHQUF5QixTQUFLLE9BbktsQzs7QUFvS04sZ0JBQUksT0FBTyxRQUFYLEVBQXFCO0FBQ2pCLHVCQUFPLE1BQU0sSUFBYjtBQUNBLG9CQUFJLE9BQU8sSUFBUCxDQUFhLE1BQWIsRUFBcUIsTUFBekI7QUFDSSwyQkFBTyxNQUFNLFNBQUssU0FBTCxDQUFnQixNQUFoQixDQUFiO0FBREo7QUFFSCxhQUpELE1BSU87QUFDQyxxQkFERCxHQUNTLFNBQUssS0FBTCxFQURUOztBQUVILG9CQUFJLE9BQU8sSUFBUCxDQUFhLE1BQWIsRUFBcUIsTUFBekI7QUFDSSw2QkFBUyxPQUFPLElBQVAsQ0FBYSxHQUFiLENBQVQ7QUFESjtBQUdJLDZCQUFTLEVBQVQ7QUFISixpQkFJSSxLQU5ELEdBTVMsU0FBSyxTQUFMLENBQWdCO0FBQ3hCLDZCQUFTLEtBRGU7QUFFeEIsaUNBQWEsU0FBSyxNQUZNO0FBR3hCLHFDQUFpQixPQUFPLFdBQVAsRUFITztBQUl4QiwwQkFBTSxLQUprQjtBQUt4Qiw4QkFBVSxJQUxjO0FBTXhCLDhCQUFVO0FBTmMsaUJBQWhCLENBTlQ7O0FBY0gsdUJBQU8sU0FBSyxJQUFMLENBQVc7QUFDZCw4QkFBVSxJQURJO0FBRWQsOEJBQVUsTUFGSTtBQUdkLDBCQUFNO0FBSFEsaUJBQVgsQ0FBUDtBQUtJLHlCQW5CRCxHQW1CYSxTQUFLLElBQUwsQ0FBVyxTQUFLLE1BQUwsQ0FBYSxLQUFiLENBQVgsRUFBZ0MsU0FBSyxNQUFyQyxFQUE2QyxNQUE3QyxFQUFxRCxRQUFyRCxDQW5CYjs7QUFvQkgsMEJBQVU7QUFDTixzQ0FBa0IsS0FEWjtBQUVOLHFDQUFpQixXQUFXLFNBQUssTUFBaEIsR0FBeUIsR0FBekIsR0FBK0IsU0FGMUM7QUFHTixzQ0FBa0IsS0FBSyxNQUhqQjtBQUlOLG9DQUFnQjtBQUpWLGlCQUFWO0FBTUg7QUFDRyxvQkFuTUUsR0FtTVMsU0FBSyxLQUFMLENBQVksR0FBWixFQUFpQixNQUFqQixFQUF5QixPQUF6QixFQUFrQyxJQUFsQyxDQW5NVDs7QUFvTU4sZ0JBQUksV0FBVyxRQUFmO0FBQ0ksc0JBQU0sSUFBSSxhQUFKLENBQW1CLFNBQUssRUFBTCxHQUFVLEdBQVYsR0FBZ0IsU0FBSyxJQUFMLENBQVcsUUFBWCxDQUFuQyxDQUFOO0FBREosYUFFQSxPQUFPLFFBQVA7QUF0TU07QUFBQSxLQUFkOztBQTBNQTs7QUFFQSxRQUFJLFdBQVc7O0FBRVgsY0FBTSxVQUZLO0FBR1gsZ0JBQVEsVUFIRztBQUlYLHFCQUFhLENBQUUsSUFBRixFQUFRLElBQVIsRUFBYyxJQUFkLENBSkY7QUFLWCxxQkFBYSxJQUxGO0FBTVgsMkJBQW1CLElBTlI7QUFPWCxnQkFBUTtBQUNKLG9CQUFRLHFHQURKO0FBRUosbUJBQU8sMEJBRkg7QUFHSixtQkFBTywwQkFISDtBQUlKLG1CQUFPO0FBSkgsU0FQRztBQWFYLGVBQU87QUFDSCxzQkFBVTtBQUNOLHVCQUFPLENBQ0gseUJBREcsRUFFSCxzQkFGRyxFQUdILHdCQUhHLEVBSUgscUJBSkcsRUFLSCx1QkFMRyxFQU1ILGlCQU5HLEVBTWdCO0FBQ25CLCtCQVBHO0FBREQsYUFEUDtBQVlILHVCQUFXO0FBQ1AsdUJBQU8sQ0FDSCx3QkFERyxFQUVILGdCQUZHLEVBR0gsaUJBSEcsRUFJSCxxQkFKRyxFQUtILCtCQUxHLEVBTUgsa0JBTkcsRUFPSCxpQkFQRyxFQVFILHFCQVJHLEVBU0gsc0JBVEcsRUFVSCw4QkFWRyxDQURBO0FBYVAsd0JBQVEsQ0FDSixtQkFESSxFQUVKLG9CQUZJLEVBR0osc0JBSEksRUFJSixvQkFKSSxFQUtKLHFCQUxJLEVBTUosd0JBTkksRUFPSixrQkFQSSxFQVFKLGtCQVJJLEVBU0osbUJBVEksRUFVSixvQkFWSSxFQVdKLDBCQVhJLEVBWUosd0JBWkksRUFhSixzQkFiSSxFQWNKLHdCQWRJO0FBYkQ7QUFaUixTQWJJOztBQXlETCxvQkF6REs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBMERhLFNBQUssdUJBQUwsRUExRGI7QUFBQTtBQTBESCx1QkExREc7QUEyREgsc0JBM0RHLEdBMkRNLEVBM0ROOztBQTREUCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFFBQVEsTUFBNUIsRUFBb0MsR0FBcEMsRUFBeUM7QUFDakMsMEJBRGlDLEdBQ3hCLFFBQVEsQ0FBUixDQUR3QjtBQUVqQyxzQkFGaUMsR0FFNUIsT0FBTyxRQUFQLENBRjRCO0FBR2pDLDBCQUhpQyxHQUd4QixFQUh3QjtBQUFBLHNDQUlmLE9BQU8sS0FBUCxDQUFjLEdBQWQsQ0FKZTtBQUFBO0FBSS9CLHdCQUorQjtBQUl6Qix5QkFKeUI7O0FBS3JDLDJCQUFPLElBQVAsQ0FBYTtBQUNULDhCQUFNLEVBREc7QUFFVCxrQ0FBVSxNQUZEO0FBR1QsZ0NBQVEsSUFIQztBQUlULGlDQUFTLEtBSkE7QUFLVCxnQ0FBUTtBQUxDLHFCQUFiO0FBT0g7QUFDRCx1QkFBTyxNQUFQO0FBekVPO0FBQUE7QUE0RUwsb0JBNUVLO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkE2RUQsU0FBSyxXQUFMLEVBN0VDO0FBQUE7QUFBQSx1QkE4RWMsU0FBSyx5QkFBTCxFQTlFZDtBQUFBO0FBOEVILHdCQTlFRztBQStFSCxzQkEvRUcsR0ErRU0sRUFBRSxRQUFRLFFBQVYsRUEvRU47O0FBZ0ZQLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksU0FBSyxVQUFMLENBQWdCLE1BQXBDLEVBQTRDLEdBQTVDLEVBQWlEO0FBQ3pDLDJCQUR5QyxHQUMvQixTQUFTLENBQVQsQ0FEK0I7QUFFekMsNEJBRnlDLEdBRTlCLFFBQVEsVUFBUixDQUY4QjtBQUd6QywyQkFIeUMsR0FHL0IsU0FIK0I7O0FBSTdDLHdCQUFJLFlBQVksTUFBaEI7QUFDSSxrQ0FBVSxPQUFPLFFBQVAsQ0FBVjtBQURKO0FBR0ksa0NBQVU7QUFDTixvQ0FBUSxTQURGO0FBRU4sb0NBQVEsU0FGRjtBQUdOLHFDQUFTO0FBSEgseUJBQVY7QUFISixxQkFRQSxJQUFJLFFBQVEsTUFBUixLQUFtQixPQUF2QjtBQUNJLGdDQUFRLE9BQVIsSUFBbUIsV0FBWSxRQUFRLE9BQVIsQ0FBWixDQUFuQjtBQURKLHFCQUVBLElBQUksUUFBUSxNQUFSLEtBQW1CLFdBQXZCO0FBQ0ksZ0NBQVEsTUFBUixJQUFrQixXQUFZLFFBQVEsT0FBUixDQUFaLENBQWxCO0FBREoscUJBRUEsSUFBSSxRQUFRLE1BQVIsS0FBbUIsT0FBdkI7QUFDSSxnQ0FBUSxNQUFSLElBQWtCLFdBQVksUUFBUSxPQUFSLENBQVosQ0FBbEI7QUFESixxQkFFQSxPQUFPLFFBQVAsSUFBbUIsT0FBbkI7QUFDSDtBQUNELHVCQUFPLE1BQVA7QUFwR087QUFBQTtBQXVHTCxzQkF2R0ssMEJBdUdXLE1BdkdYO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQXVHbUIsc0JBdkduQixtRkF1RzRCLEVBdkc1QjtBQUFBLHVCQXdHRCxTQUFLLFdBQUwsRUF4R0M7QUFBQTtBQUFBLHVCQXlHZSxTQUFLLDBCQUFMLENBQWlDLFNBQUssTUFBTCxDQUFhO0FBQ2hFLG9DQUFnQixTQUFLLFFBQUwsQ0FBZSxNQUFmLENBRGdEO0FBRWhFLG9DQUFnQixPQUZnRDtBQUdoRSw2QkFBUztBQUh1RCxpQkFBYixFQUlwRCxNQUpvRCxDQUFqQyxDQXpHZjtBQUFBO0FBeUdILHlCQXpHRztBQThHSCx5QkE5R0csR0E4R1MsVUFBVSxXQUFWLENBOUdUO0FBK0dILHNCQS9HRyxHQStHTTtBQUNULDRCQUFRLEVBREM7QUFFVCw0QkFBUSxFQUZDO0FBR1QsaUNBQWEsU0FISjtBQUlULGdDQUFZLFNBQUssT0FBTCxDQUFjLFNBQWQ7QUFKSCxpQkEvR047QUFxSEgscUJBckhHLEdBcUhLLENBQUUsTUFBRixFQUFVLE1BQVYsQ0FySEw7O0FBc0hQLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksTUFBTSxNQUExQixFQUFrQyxHQUFsQyxFQUF1QztBQUMvQix3QkFEK0IsR0FDeEIsTUFBTSxDQUFOLENBRHdCO0FBRS9CLDBCQUYrQixHQUV0QixVQUFVLElBQVYsQ0FGc0I7O0FBR25DLHlCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksT0FBTyxNQUEzQixFQUFtQyxHQUFuQyxFQUF3QztBQUNoQyw2QkFEZ0MsR0FDeEIsT0FBTyxDQUFQLENBRHdCO0FBRWhDLDZCQUZnQyxHQUV4QixXQUFZLE1BQU0sQ0FBTixDQUFaLENBRndCO0FBR2hDLDhCQUhnQyxHQUd2QixXQUFZLE1BQU0sQ0FBTixDQUFaLENBSHVCOztBQUlwQywrQkFBTyxJQUFQLEVBQWEsSUFBYixDQUFtQixDQUFFLEtBQUYsRUFBUyxNQUFULENBQW5CO0FBQ0g7QUFDSjtBQUNELHVCQUFPLE1BQVA7QUFoSU87QUFBQTtBQW1JWCxtQkFuSVcsdUJBbUlFLE1BbklGLEVBbUlVLE1BbklWLEVBbUlrQjtBQUN6QixnQkFBSSxZQUFZLEtBQUssWUFBTCxFQUFoQjtBQUNBLG1CQUFPO0FBQ0gsNkJBQWEsU0FEVjtBQUVILDRCQUFZLEtBQUssT0FBTCxDQUFjLFNBQWQsQ0FGVDtBQUdILHdCQUFRLFdBQVksT0FBTyxNQUFQLENBQVosQ0FITDtBQUlILHVCQUFPLFdBQVksT0FBTyxLQUFQLENBQVosQ0FKSjtBQUtILHVCQUFPLFdBQVksT0FBTyxVQUFQLENBQVosQ0FMSjtBQU1ILHVCQUFPLFdBQVksT0FBTyxVQUFQLENBQVosQ0FOSjtBQU9ILHdCQUFRLFdBQVksT0FBTyxNQUFQLENBQVosQ0FQTDtBQVFILHdCQUFRLFNBUkw7QUFTSCx5QkFBUyxTQVROO0FBVUgseUJBQVMsU0FWTjtBQVdILHdCQUFRLFdBQVksT0FBTyxNQUFQLENBQVosQ0FYTDtBQVlILDBCQUFVLFNBWlA7QUFhSCw4QkFBYyxTQWJYO0FBY0gsMkJBQVcsU0FkUjtBQWVILDhCQUFjLFNBZlg7QUFnQkgsK0JBQWUsV0FBWSxPQUFPLFFBQVAsQ0FBWixDQWhCWjtBQWlCSCx3QkFBUTtBQWpCTCxhQUFQO0FBbUJILFNBeEpVO0FBMEpMLG9CQTFKSztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBMkpELFNBQUssV0FBTCxFQTNKQztBQUFBO0FBQUEsdUJBNEpjLFNBQUssdUJBQUwsRUE1SmQ7QUFBQTtBQTRKSCx3QkE1Skc7QUE2SkgsdUJBN0pHLEdBNkpPLFNBQUssT0FBTCxDQUFjLFFBQWQsRUFBd0IsUUFBeEIsQ0E3SlA7QUE4SkgsbUJBOUpHLEdBOEpHLE9BQU8sSUFBUCxDQUFhLE9BQWIsQ0E5Skg7QUErSkgsc0JBL0pHLEdBK0pNLEVBL0pOOztBQWdLUCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLElBQUksTUFBeEIsRUFBZ0MsR0FBaEMsRUFBcUM7QUFDN0Isc0JBRDZCLEdBQ3hCLElBQUksQ0FBSixDQUR3QjtBQUU3QiwwQkFGNkIsR0FFcEIsU0FBSyxhQUFMLENBQW1CLEVBQW5CLENBRm9CO0FBRzdCLDBCQUg2QixHQUdwQixPQUFPLFFBQVAsQ0FIb0I7QUFJN0IsMEJBSjZCLEdBSXBCLFFBQVEsRUFBUixDQUpvQjs7QUFLakMsMkJBQU8sTUFBUCxJQUFpQixTQUFLLFdBQUwsQ0FBa0IsTUFBbEIsRUFBMEIsTUFBMUIsQ0FBakI7QUFDSDtBQUNELHVCQUFPLE1BQVA7QUF2S087QUFBQTtBQTBLTCxtQkExS0ssdUJBMEtRLE1BMUtSO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBMktELFNBQUssV0FBTCxFQTNLQztBQUFBO0FBNEtILGlCQTVLRyxHQTRLQyxTQUFLLE1BQUwsQ0FBYSxNQUFiLENBNUtEO0FBQUEsdUJBNktZLFNBQUssdUJBQUwsQ0FBOEI7QUFDN0Msb0NBQWdCLEVBQUUsSUFBRjtBQUQ2QixpQkFBOUIsQ0E3S1o7QUFBQTtBQTZLSCxzQkE3S0c7O0FBZ0xQLHVCQUFPLFNBQUssV0FBTCxDQUFrQixNQUFsQixFQUEwQixDQUExQixDQUFQO0FBaExPO0FBQUE7QUFtTEwsbUJBbkxLLHVCQW1MUSxNQW5MUjtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQW1MZ0Isc0JBbkxoQixtRkFtTHlCLEVBbkx6QjtBQUFBLHVCQW9MRCxTQUFLLFdBQUwsRUFwTEM7QUFBQTtBQXFMUCx1QkFBTyxTQUFLLDJCQUFMLENBQWtDLFNBQUssTUFBTCxDQUFhO0FBQ2xELG9DQUFnQixTQUFLLFFBQUwsQ0FBZSxNQUFmO0FBRGtDLGlCQUFiLEVBRXRDLE1BRnNDLENBQWxDLENBQVA7QUFyTE87QUFBQTtBQTBMTCxtQkExTEssdUJBMExRLE1BMUxSLEVBMExnQixJQTFMaEIsRUEwTHNCLElBMUx0QixFQTBMNEIsTUExTDVCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUEwTG9DLHFCQTFMcEMsbUZBMEw0QyxTQTFMNUM7QUEwTHVELHNCQTFMdkQsbUZBMExnRSxFQTFMaEU7QUFBQSx1QkEyTEQsU0FBSyxXQUFMLEVBM0xDO0FBQUE7QUE0TEgsc0JBNUxHLEdBNExNLHdCQUF3QixTQUFLLFVBQUwsQ0FBaUIsSUFBakIsQ0FBeEIsR0FBaUQsSUE1THZEO0FBNkxILHFCQTdMRyxHQTZMSztBQUNSLG9DQUFnQixTQUFLLFFBQUwsQ0FBZSxNQUFmLENBRFI7QUFFUixnQ0FBWTtBQUZKLGlCQTdMTDs7QUFpTVAsb0JBQUksUUFBUSxPQUFaO0FBQ0ksMEJBQU0sT0FBTixJQUFpQixLQUFqQjtBQURKLGlCQWpNTyxPQW1NYyxTQUFLLE1BQUwsRUFBYyxTQUFLLE1BQUwsQ0FBYSxLQUFiLEVBQW9CLE1BQXBCLENBQWQsQ0FuTWQ7QUFBQTtBQW1NSCx3QkFuTUc7O0FBb01QLHVCQUFPO0FBQ0gsNEJBQVEsUUFETDtBQUVILDBCQUFNLFNBQVMsSUFBVCxFQUFlLFFBQWY7QUFGSCxpQkFBUDtBQXBNTztBQUFBO0FBME1MLG1CQTFNSyx1QkEwTVEsRUExTVI7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUEwTVksc0JBMU1aLG1GQTBNcUIsRUExTXJCO0FBQUEsdUJBMk1ELFNBQUssV0FBTCxFQTNNQztBQUFBO0FBNE1QLHVCQUFPLFNBQUssOEJBQUwsQ0FBcUMsU0FBSyxNQUFMLENBQWE7QUFDckQsK0JBQVc7QUFEMEMsaUJBQWIsRUFFekMsTUFGeUMsQ0FBckMsQ0FBUDtBQTVNTztBQUFBO0FBaU5MLGVBak5LLG1CQWlOSSxJQWpOSjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFpTlUsbUJBak5WLG1GQWlOZ0IsUUFqTmhCO0FBaU4wQixzQkFqTjFCLG1GQWlObUMsS0FqTm5DO0FBaU4wQyxzQkFqTjFDLG1GQWlObUQsRUFqTm5EO0FBaU51RCx1QkFqTnZELG1GQWlOaUUsU0FqTmpFO0FBaU40RSxvQkFqTjVFLG1GQWlObUYsU0FqTm5GO0FBa05ILG1CQWxORyxHQWtORyxTQUFLLElBQUwsQ0FBVSxLQUFWLElBQW1CLEdBQW5CLEdBQXlCLElBbE41Qjs7QUFtTlAsb0JBQUksT0FBTyxRQUFYLEVBQXFCO0FBQ2pCLHdCQUFJLE9BQU8sSUFBUCxDQUFhLE1BQWIsRUFBcUIsTUFBekI7QUFDSSwrQkFBTyxNQUFNLFNBQUssU0FBTCxDQUFnQixNQUFoQixDQUFiO0FBREo7QUFFSCxpQkFIRCxNQUdPO0FBQ0MseUJBREQsR0FDUyxTQUFLLFNBQUwsQ0FBZ0IsU0FBSyxPQUFMLENBQWMsTUFBZCxDQUFoQixDQURUOztBQUVILHdCQUFJLFVBQVUsS0FBZDtBQUNJLDRCQUFJLEtBQUo7QUFDSSxtQ0FBTyxNQUFNLEtBQWI7QUFESjtBQUdBLGdDQUFJLEtBQUo7QUFDSSx1Q0FBTyxLQUFQO0FBREo7QUFIQTtBQURKLHFCQU1JLFNBUkQsR0FRYSxTQUFLLElBQUwsQ0FBVyxTQUFLLE1BQUwsQ0FBYSxLQUFiLENBQVgsRUFBZ0MsU0FBSyxNQUFMLENBQWEsU0FBSyxNQUFsQixDQUFoQyxFQUEyRCxRQUEzRCxDQVJiOztBQVNILDhCQUFVO0FBQ04sbUNBQVcsU0FBSyxNQURWO0FBRU4sZ0NBQVEsVUFBVSxXQUFWLEVBRkY7QUFHTix3Q0FBZ0I7QUFIVixxQkFBVjtBQUtIO0FBcE9NLHVCQXFPYyxTQUFLLEtBQUwsQ0FBWSxHQUFaLEVBQWlCLE1BQWpCLEVBQXlCLE9BQXpCLEVBQWtDLElBQWxDLENBck9kO0FBQUE7QUFxT0gsd0JBck9HOztBQXNPUCxvQkFBSSxhQUFhLFFBQWpCO0FBQ0ksd0JBQUksQ0FBQyxTQUFTLFNBQVQsQ0FBTDtBQUNJLDhCQUFNLElBQUksYUFBSixDQUFtQixTQUFLLEVBQUwsR0FBVSxHQUFWLEdBQWdCLFNBQUssSUFBTCxDQUFXLFFBQVgsQ0FBbkMsQ0FBTjtBQURKO0FBREosaUJBR0EsT0FBTyxRQUFQO0FBek9PO0FBQUE7QUFBQSxLQUFmOztBQTZPQTs7QUFFQSxRQUFJLFFBQVEsT0FBUSxJQUFSLEVBQWM7QUFDdEIsY0FBTSxPQURnQjtBQUV0QixnQkFBUSxPQUZjO0FBR3RCLHFCQUFhLElBSFM7QUFJdEIscUJBQWEsSUFKUztBQUt0QixtQkFBVyxHQUxXO0FBTXRCLGdCQUFRO0FBQ0osb0JBQVEscUdBREo7QUFFSixtQkFBTztBQUNILDBCQUFVLDBCQURQO0FBRUgsMkJBQVc7QUFGUixhQUZIO0FBTUosbUJBQU8sa0JBTkg7QUFPSixtQkFBTztBQVBILFNBTmM7O0FBZ0JoQixlQWhCZ0IsbUJBZ0JQLElBaEJPO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBZ0JELG1CQWhCQyxtRkFnQkssUUFoQkw7QUFnQmUsc0JBaEJmLG1GQWdCd0IsS0FoQnhCO0FBZ0IrQixzQkFoQi9CLG1GQWdCd0MsRUFoQnhDO0FBZ0I0Qyx1QkFoQjVDLG1GQWdCc0QsU0FoQnREO0FBZ0JpRSxvQkFoQmpFLG1GQWdCd0UsU0FoQnhFO0FBaUJkLG1CQWpCYyxHQWlCUixTQUFLLElBQUwsQ0FBVSxLQUFWLEVBQWlCLEdBQWpCLENBakJRO0FBa0JkLHFCQWxCYyxHQWtCTixTQUFLLElBQUwsQ0FBVyxNQUFYLEVBQW1CLFNBQUssYUFBTCxDQUFvQixJQUFwQixDQUFuQixDQWxCTTs7QUFtQmxCLG9CQUFJLE9BQU8sUUFBWCxFQUFxQjtBQUNqQiwyQkFBUSxNQUFNLFNBQUssT0FBWCxHQUFxQixHQUFyQixHQUEyQixTQUFLLGFBQUwsQ0FBb0IsSUFBcEIsRUFBMEIsTUFBMUIsQ0FBbkM7QUFDQSx3QkFBSSxPQUFPLElBQVAsQ0FBYSxLQUFiLEVBQW9CLE1BQXhCO0FBQ0ksK0JBQU8sTUFBTSxTQUFLLFNBQUwsQ0FBZ0IsS0FBaEIsQ0FBYjtBQURKO0FBRUgsaUJBSkQsTUFJTztBQUNDLHlCQURELEdBQ1MsU0FBSyxLQUFMLEVBRFQ7O0FBRUgsMkJBQU8sU0FBSyxTQUFMLENBQWdCLFNBQUssTUFBTCxDQUFhO0FBQ2hDLGlDQUFTLEtBRHVCO0FBRWhDLGtDQUFVO0FBRnNCLHFCQUFiLEVBR3BCLEtBSG9CLENBQWhCLENBQVA7QUFJSSw2QkFORCxHQU1hLFNBQUssSUFBTCxDQUFXLFNBQUssTUFBTCxDQUFhLElBQWIsQ0FBWCxFQUErQixTQUFLLE1BQUwsQ0FBYSxTQUFLLE1BQWxCLENBQS9CLEVBQTBELFFBQTFELENBTmI7O0FBT0gsOEJBQVU7QUFDTix3Q0FBZ0IsbUNBRFY7QUFFTiwwQ0FBa0IsS0FBSyxNQUFMLENBQVksUUFBWixFQUZaO0FBR04sK0JBQU8sU0FBSyxNQUhOO0FBSU4sZ0NBQVE7QUFKRixxQkFBVjtBQU1IO0FBcENpQix1QkFxQ0csU0FBSyxLQUFMLENBQVksR0FBWixFQUFpQixNQUFqQixFQUF5QixPQUF6QixFQUFrQyxJQUFsQyxDQXJDSDtBQUFBO0FBcUNkLHdCQXJDYzs7QUFzQ2xCLG9CQUFJLGFBQWEsUUFBakI7QUFDSSx3QkFBSSxDQUFDLFNBQVMsU0FBVCxDQUFMO0FBQ0ksOEJBQU0sSUFBSSxhQUFKLENBQW1CLFNBQUssRUFBTCxHQUFVLEdBQVYsR0FBZ0IsU0FBSyxJQUFMLENBQVcsUUFBWCxDQUFuQyxDQUFOO0FBREo7QUFESixpQkFHQSxPQUFPLFFBQVA7QUF6Q2tCO0FBQUE7QUFBQSxLQUFkLENBQVo7O0FBNkNBOztBQUVBLFFBQUksT0FBTzs7QUFFUCxjQUFNLE1BRkM7QUFHUCxnQkFBUSxNQUhEO0FBSVAscUJBQWEsQ0FBRSxJQUFGLEVBQVEsSUFBUixFQUFjLElBQWQsQ0FKTjtBQUtQLHFCQUFhLElBTE47QUFNUCxtQkFBVyxHQU5KO0FBT1AsMkJBQW1CLElBUFo7QUFRUCxnQkFBUTtBQUNKLG9CQUFRLHFHQURKO0FBRUosbUJBQU8sNEJBRkg7QUFHSixtQkFBTyxzQkFISDtBQUlKLG1CQUFPLENBQ0gsNkJBREcsRUFFSCxnQ0FGRyxFQUdILHdDQUhHO0FBSkgsU0FSRDtBQWtCUCxlQUFPO0FBQ0gsc0JBQVU7QUFDTix1QkFBTyxDQUNILFdBREcsRUFFSCxRQUZHLEVBR0gsU0FIRyxFQUlILFFBSkc7QUFERCxhQURQO0FBU0gsdUJBQVc7QUFDUCx1QkFBTyxDQUNILHVCQURHLEVBRUgsNEJBRkcsRUFHSCxTQUhHLEVBSUgsVUFKRyxFQUtILGlCQUxHLEVBTUgsWUFORyxFQU9ILFlBUEcsRUFRSCxhQVJHLEVBU0gsYUFURyxFQVVILGFBVkcsRUFXSCxrQkFYRyxDQURBO0FBY1Asd0JBQVEsQ0FDSixVQURJLEVBRUosV0FGSSxFQUdKLGFBSEksRUFJSixXQUpJLEVBS0osaUJBTEksRUFNSixhQU5JLEVBT0osTUFQSSxFQVFKLFFBUkksRUFTSixjQVRJLENBZEQ7QUF5QlAsdUJBQU8sQ0FDSCxhQURHLENBekJBO0FBNEJQLDBCQUFVLENBQ04sYUFETSxFQUVOLGtCQUZNO0FBNUJIO0FBVFIsU0FsQkE7O0FBOERELG9CQTlEQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQStEaUIsU0FBSyxnQkFBTCxFQS9EakI7QUFBQTtBQStEQyx1QkEvREQ7QUFnRUMsc0JBaEVELEdBZ0VVLEVBaEVWOztBQWlFSCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFFBQVEsU0FBUixFQUFtQixNQUF2QyxFQUErQyxHQUEvQyxFQUFvRDtBQUM1QywwQkFENEMsR0FDbkMsUUFBUSxTQUFSLEVBQW1CLENBQW5CLENBRG1DO0FBRTVDLHNCQUY0QyxHQUV2QyxPQUFPLE1BQVAsQ0FGdUM7QUFHNUMsd0JBSDRDLEdBR3JDLEdBQUcsS0FBSCxDQUFVLENBQVYsRUFBYSxDQUFiLENBSHFDO0FBSTVDLHlCQUo0QyxHQUlwQyxHQUFHLEtBQUgsQ0FBVSxDQUFWLEVBQWEsQ0FBYixDQUpvQzs7QUFLaEQsMkJBQU8sU0FBSyxrQkFBTCxDQUF5QixJQUF6QixDQUFQO0FBQ0EsNEJBQVEsU0FBSyxrQkFBTCxDQUF5QixLQUF6QixDQUFSO0FBQ0ksMEJBUDRDLEdBT25DLE9BQU8sR0FBUCxHQUFhLEtBUHNCOztBQVFoRCwyQkFBTyxJQUFQLENBQWE7QUFDVCw4QkFBTSxFQURHO0FBRVQsa0NBQVUsTUFGRDtBQUdULGdDQUFRLElBSEM7QUFJVCxpQ0FBUyxLQUpBO0FBS1QsZ0NBQVE7QUFMQyxxQkFBYjtBQU9IO0FBQ0QsdUJBQU8sTUFBUDtBQWpGRztBQUFBO0FBb0ZELG9CQXBGQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBcUZHLFNBQUssV0FBTCxFQXJGSDtBQUFBO0FBQUEsdUJBc0ZrQixTQUFLLGlCQUFMLEVBdEZsQjtBQUFBO0FBc0ZDLHdCQXRGRDtBQXVGQyx3QkF2RkQsR0F1RlksU0FBUyxTQUFULENBdkZaO0FBd0ZDLHNCQXhGRCxHQXdGVSxFQUFFLFFBQVEsUUFBVixFQXhGVjs7QUF5RkgscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxTQUFTLE1BQTdCLEVBQXFDLEdBQXJDLEVBQTBDO0FBQ2xDLDJCQURrQyxHQUN4QixTQUFTLENBQVQsQ0FEd0I7QUFFbEMsNEJBRmtDLEdBRXZCLFNBQUssa0JBQUwsQ0FBeUIsUUFBUSxPQUFSLENBQXpCLENBRnVCO0FBR2xDLDRCQUhrQyxHQUd2QixXQUFZLFFBQVEsVUFBUixDQUFaLENBSHVCO0FBSWxDLCtCQUprQyxHQUlwQixXQUFZLFFBQVEsYUFBUixDQUFaLENBSm9CO0FBS2xDLDJCQUxrQyxHQUt4QjtBQUNWLGdDQUFRLFdBQVksUUFBUSxTQUFSLENBQVosQ0FERTtBQUVWLGdDQUFRLFNBQUssR0FBTCxDQUFVLFFBQVYsRUFBb0IsV0FBcEIsQ0FGRTtBQUdWLGlDQUFTO0FBSEMscUJBTHdCOztBQVV0Qyw0QkFBUSxPQUFSLElBQW1CLFNBQUssR0FBTCxDQUFVLFFBQVEsTUFBUixDQUFWLEVBQTJCLFFBQVEsTUFBUixDQUEzQixDQUFuQjtBQUNBLDJCQUFPLFFBQVAsSUFBbUIsT0FBbkI7QUFDSDtBQUNELHVCQUFPLE1BQVA7QUF0R0c7QUFBQTtBQXlHRCxzQkF6R0MsMEJBeUdlLE1BekdmO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQXlHdUIsc0JBekd2QixtRkF5R2dDLEVBekdoQztBQUFBLHVCQTBHRyxTQUFLLFdBQUwsRUExR0g7QUFBQTtBQUFBLHVCQTJHbUIsU0FBSyxrQkFBTCxDQUF5QixTQUFLLE1BQUwsQ0FBYTtBQUN4RCw0QkFBUSxTQUFLLFFBQUwsQ0FBZSxNQUFmO0FBRGdELGlCQUFiLEVBRTVDLE1BRjRDLENBQXpCLENBM0duQjtBQUFBO0FBMkdDLHlCQTNHRDtBQThHQyx5QkE5R0QsR0E4R2EsVUFBVSxXQUFWLENBOUdiO0FBK0dDLHNCQS9HRCxHQStHVTtBQUNULDRCQUFRLEVBREM7QUFFVCw0QkFBUSxFQUZDO0FBR1QsaUNBQWEsU0FISjtBQUlULGdDQUFZLFNBQUssT0FBTCxDQUFjLFNBQWQ7QUFKSCxpQkEvR1Y7QUFxSEMscUJBckhELEdBcUhTLENBQUUsTUFBRixFQUFVLE1BQVYsQ0FySFQ7O0FBc0hILHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksTUFBTSxNQUExQixFQUFrQyxHQUFsQyxFQUF1QztBQUMvQix3QkFEK0IsR0FDeEIsTUFBTSxDQUFOLENBRHdCO0FBRS9CLDBCQUYrQixHQUV0QixVQUFVLElBQVYsQ0FGc0I7O0FBR25DLHlCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksT0FBTyxNQUEzQixFQUFtQyxHQUFuQyxFQUF3QztBQUNoQyw2QkFEZ0MsR0FDeEIsT0FBTyxDQUFQLENBRHdCO0FBRWhDLDZCQUZnQyxHQUV4QixXQUFZLE1BQU0sT0FBTixDQUFaLENBRndCO0FBR2hDLDhCQUhnQyxHQUd2QixXQUFZLE1BQU0sUUFBTixDQUFaLENBSHVCO0FBSXBDOztBQUNBLCtCQUFPLElBQVAsRUFBYSxJQUFiLENBQW1CLENBQUUsS0FBRixFQUFTLE1BQVQsQ0FBbkI7QUFDSDtBQUNKO0FBQ0QsdUJBQU8sTUFBUDtBQWpJRztBQUFBO0FBb0lQLG1CQXBJTyx1QkFvSU0sTUFwSU4sRUFvSWMsTUFwSWQsRUFvSXNCO0FBQ3pCLGdCQUFJLFlBQVksT0FBTyxXQUFQLENBQWhCO0FBQ0EsbUJBQU87QUFDSCw2QkFBYSxTQURWO0FBRUgsNEJBQVksS0FBSyxPQUFMLENBQWMsU0FBZCxDQUZUO0FBR0gsd0JBQVEsU0FITDtBQUlILHVCQUFPLFNBSko7QUFLSCx1QkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBTEo7QUFNSCx1QkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBTko7QUFPSCx3QkFBUSxTQVBMO0FBUUgsd0JBQVEsU0FSTDtBQVNILHlCQUFTLFNBVE47QUFVSCx5QkFBUyxTQVZOO0FBV0gsd0JBQVEsV0FBWSxPQUFPLFlBQVAsQ0FBWixDQVhMO0FBWUgsMEJBQVUsU0FaUDtBQWFILDhCQUFjLFNBYlg7QUFjSCwyQkFBVyxTQWRSO0FBZUgsOEJBQWMsU0FmWDtBQWdCSCwrQkFBZSxXQUFZLE9BQU8sd0JBQVAsQ0FBWixDQWhCWjtBQWlCSCx3QkFBUTtBQWpCTCxhQUFQO0FBbUJILFNBekpNO0FBMkpELG9CQTNKQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBNEpHLFNBQUssV0FBTCxFQTVKSDtBQUFBO0FBQUEsdUJBNkprQixTQUFLLGdCQUFMLEVBN0psQjtBQUFBO0FBNkpDLHdCQTdKRDtBQThKQyx1QkE5SkQsR0E4SlcsU0FBSyxPQUFMLENBQWMsU0FBUyxTQUFULENBQWQsRUFBbUMsTUFBbkMsQ0E5Slg7QUErSkMsbUJBL0pELEdBK0pPLE9BQU8sSUFBUCxDQUFhLE9BQWIsQ0EvSlA7QUFnS0Msc0JBaEtELEdBZ0tVLEVBaEtWOztBQWlLSCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLElBQUksTUFBeEIsRUFBZ0MsR0FBaEMsRUFBcUM7QUFDN0Isc0JBRDZCLEdBQ3hCLElBQUksQ0FBSixDQUR3QjtBQUU3QiwwQkFGNkIsR0FFcEIsU0FBSyxhQUFMLENBQW1CLEVBQW5CLENBRm9CO0FBRzdCLDBCQUg2QixHQUdwQixPQUFPLFFBQVAsQ0FIb0I7QUFJN0IsMEJBSjZCLEdBSXBCLFFBQVEsRUFBUixDQUpvQjs7QUFLakMsMkJBQU8sTUFBUCxJQUFpQixTQUFLLFdBQUwsQ0FBa0IsTUFBbEIsRUFBMEIsTUFBMUIsQ0FBakI7QUFDSDtBQUNELHVCQUFPLE1BQVA7QUF4S0c7QUFBQTtBQTJLRCxtQkEzS0MsdUJBMktZLE1BM0taO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBNEtHLFNBQUssV0FBTCxFQTVLSDtBQUFBO0FBNktDLGlCQTdLRCxHQTZLSyxTQUFLLE1BQUwsQ0FBYSxNQUFiLENBN0tMO0FBQUEsdUJBOEtnQixTQUFLLGVBQUwsQ0FBc0I7QUFDckMsNEJBQVEsRUFBRSxJQUFGO0FBRDZCLGlCQUF0QixDQTlLaEI7QUFBQTtBQThLQyxzQkE5S0Q7O0FBaUxILHVCQUFPLFNBQUssV0FBTCxDQUFrQixNQUFsQixFQUEwQixDQUExQixDQUFQO0FBakxHO0FBQUE7QUFvTEQsbUJBcExDLHVCQW9MWSxNQXBMWjtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQW9Mb0Isc0JBcExwQixtRkFvTDZCLEVBcEw3QjtBQUFBLHVCQXFMRyxTQUFLLFdBQUwsRUFyTEg7QUFBQTtBQXNMSCx1QkFBTyxTQUFLLGVBQUwsQ0FBc0IsU0FBSyxNQUFMLENBQWE7QUFDdEMsNEJBQVEsU0FBSyxRQUFMLENBQWUsTUFBZjtBQUQ4QixpQkFBYixFQUUxQixNQUYwQixDQUF0QixDQUFQO0FBdExHO0FBQUE7QUEyTEQsbUJBM0xDLHVCQTJMWSxNQTNMWixFQTJMb0IsSUEzTHBCLEVBMkwwQixJQTNMMUIsRUEyTGdDLE1BM0xoQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBMkx3QyxxQkEzTHhDLG1GQTJMZ0QsU0EzTGhEO0FBMkwyRCxzQkEzTDNELG1GQTJMb0UsRUEzTHBFO0FBQUEsdUJBNExHLFNBQUssV0FBTCxFQTVMSDtBQUFBO0FBNkxDLHNCQTdMRCxHQTZMVSxhQTdMVjtBQThMQyxxQkE5TEQsR0E4TFMsRUFBRSxRQUFRLFNBQUssUUFBTCxDQUFlLE1BQWYsQ0FBVixFQTlMVDs7QUErTEgsb0JBQUksUUFBUSxRQUFaLEVBQXNCO0FBQ2xCLDhCQUFVLGFBQVY7QUFDQSwwQkFBTSxNQUFOLElBQWdCLEtBQUssV0FBTCxFQUFoQjtBQUNBLHdCQUFJLFFBQVEsS0FBWjtBQUNJLDhCQUFNLGdCQUFOLElBQTBCLE1BQTFCO0FBREo7QUFHSSw4QkFBTSxhQUFOLElBQXVCLE1BQXZCO0FBSEo7QUFJSCxpQkFQRCxNQU9PO0FBQ0gsOEJBQVUsT0FBVjtBQUNBLDBCQUFNLFFBQU4sSUFBa0IsTUFBbEI7QUFDQSwwQkFBTSxPQUFOLElBQWlCLEtBQWpCO0FBQ0Esd0JBQUksUUFBUSxLQUFaO0FBQ0ksOEJBQU0sTUFBTixJQUFnQixLQUFoQjtBQURKO0FBR0ksOEJBQU0sTUFBTixJQUFnQixLQUFoQjtBQUhKO0FBSUg7QUE5TUUsdUJBK01rQixTQUFLLE1BQUwsRUFBYyxTQUFLLE1BQUwsQ0FBYSxLQUFiLEVBQW9CLE1BQXBCLENBQWQsQ0EvTWxCO0FBQUE7QUErTUMsd0JBL01EOztBQWdOSCx1QkFBTztBQUNILDRCQUFRLFFBREw7QUFFSCwwQkFBTSxTQUFTLFVBQVQ7QUFGSCxpQkFBUDtBQWhORztBQUFBO0FBc05ELG1CQXROQyx1QkFzTlksRUF0Tlo7QUFBQTs7QUFBQTtBQUFBLHVCQXVORyxTQUFLLFdBQUwsRUF2Tkg7QUFBQTtBQXdOSCx1QkFBTyxTQUFLLG9CQUFMLENBQTJCLEVBQUUsWUFBWSxFQUFkLEVBQTNCLENBQVA7QUF4Tkc7QUFBQTtBQTJORCxlQTNOQyxtQkEyTlEsSUEzTlI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBMk5jLG1CQTNOZCxtRkEyTm9CLFFBM05wQjtBQTJOOEIsc0JBM045QixtRkEyTnVDLEtBM052QztBQTJOOEMsc0JBM045QyxtRkEyTnVELEVBM052RDtBQTJOMkQsdUJBM04zRCxtRkEyTnFFLFNBM05yRTtBQTJOZ0Ysb0JBM05oRixtRkEyTnVGLFNBM052RjtBQTROQyxtQkE1TkQsR0E0Tk8sU0FBSyxJQUFMLENBQVUsS0FBVixJQUFtQixHQUFuQixHQUF5QixTQUFLLE9BQTlCLEdBQXdDLEdBQXhDLEdBQThDLFNBQUssYUFBTCxDQUFvQixJQUFwQixFQUEwQixNQUExQixDQTVOckQ7QUE2TkMscUJBN05ELEdBNk5TLFNBQUssSUFBTCxDQUFXLE1BQVgsRUFBbUIsU0FBSyxhQUFMLENBQW9CLElBQXBCLENBQW5CLENBN05UOztBQThOSCxvQkFBSSxPQUFPLElBQVAsQ0FBYSxLQUFiLEVBQW9CLE1BQXhCO0FBQ0ksMkJBQU8sTUFBTSxTQUFLLFNBQUwsQ0FBZ0IsS0FBaEIsQ0FBYjtBQURKLGlCQUVBLElBQUksT0FBTyxTQUFYLEVBQXNCO0FBQ2Qsd0JBRGMsR0FDUCxTQUFLLE1BQUwsQ0FBYSxTQUFLLE1BQUwsR0FBYyxHQUFkLEdBQW9CLFNBQUssTUFBdEMsQ0FETzs7QUFFbEIsMkJBQU8sU0FBSyxjQUFMLENBQXFCLElBQXJCLENBQVA7QUFDQSw4QkFBVSxFQUFFLGlCQUFpQixXQUFXLFNBQUssTUFBTCxDQUFhLElBQWIsQ0FBOUIsRUFBVjtBQUNIO0FBcE9FLHVCQXFPa0IsU0FBSyxLQUFMLENBQVksR0FBWixFQUFpQixNQUFqQixFQUF5QixPQUF6QixFQUFrQyxJQUFsQyxDQXJPbEI7QUFBQTtBQXFPQyx3QkFyT0Q7O0FBc09ILG9CQUFJLFdBQVcsUUFBZjtBQUNJLDBCQUFNLElBQUksYUFBSixDQUFtQixTQUFLLEVBQUwsR0FBVSxHQUFWLEdBQWdCLFNBQUssSUFBTCxDQUFXLFFBQVgsQ0FBbkMsQ0FBTjtBQURKLGlCQUVBLE9BQU8sUUFBUDtBQXhPRztBQUFBO0FBQUEsS0FBWDs7QUE0T0E7O0FBRUEsUUFBSSxVQUFVOztBQUVWLGNBQU0sU0FGSTtBQUdWLGdCQUFRLGlCQUhFO0FBSVYscUJBQWEsSUFKSCxFQUlTO0FBQ25CLHFCQUFhLElBTEg7QUFNVixtQkFBVyxJQU5EO0FBT1YsZ0JBQVE7QUFDSixvQkFBUSxxR0FESjtBQUVKLG1CQUFPO0FBQ0gsMEJBQVUsb0NBRFA7QUFFSCwyQkFBVztBQUZSLGFBRkg7QUFNSixtQkFBTyxtQ0FOSDtBQU9KLG1CQUFPLENBQ0gsMkNBREcsRUFFSCw2Q0FGRztBQVBILFNBUEU7QUFtQlYsZUFBTztBQUNILHNCQUFVO0FBQ04sdUJBQU8sQ0FBRTtBQUNMLDRCQURHLEVBRUgscUJBRkcsRUFHSCxTQUhHLEVBSUgsa0JBSkcsRUFLSCxTQUxHLEVBTUgsa0JBTkcsRUFPSCxZQVBHLEVBUUgscUJBUkc7QUFERCxhQURQO0FBYUgsdUJBQVc7QUFDUCx3QkFBUSxDQUNKLGNBREksRUFFSixrQkFGSSxFQUdKLFdBSEksRUFJSixnQkFKSSxFQUtKLHNCQUxJLEVBTUosYUFOSSxFQU9KLGdCQVBJLEVBUUosaUJBUkksRUFTSixrQkFUSSxFQVVKLGVBVkk7QUFERDtBQWJSLFNBbkJHO0FBK0NWLG1CQUFXO0FBQ1AsdUJBQVcsRUFBRSxNQUFNLFFBQVIsRUFBa0IsVUFBVSxTQUE1QixFQUF1QyxRQUFRLEtBQS9DLEVBQXNELFNBQVMsS0FBL0QsRUFBc0UsVUFBVSxFQUFoRixFQURKO0FBRVAsdUJBQVcsRUFBRSxNQUFNLFFBQVIsRUFBa0IsVUFBVSxTQUE1QixFQUF1QyxRQUFRLEtBQS9DLEVBQXNELFNBQVMsS0FBL0QsRUFBc0UsVUFBVSxVQUFoRjtBQUZKLFNBL0NEOztBQW9ESixzQkFwREksMEJBb0RZLE1BcERaO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQW9Eb0Isc0JBcERwQixtRkFvRDZCLEVBcEQ3QjtBQXFERixpQkFyREUsR0FxREUsU0FBSyxNQUFMLENBQWEsTUFBYixDQXJERjtBQXNERixzQkF0REUsR0FzRE8sdUJBQXVCLFNBQUssVUFBTCxDQUFpQixFQUFFLFFBQUYsQ0FBakIsQ0F0RDlCO0FBQUEsdUJBdURnQixTQUFLLE1BQUwsRUFBYyxNQUFkLENBdkRoQjtBQUFBO0FBdURGLHlCQXZERTtBQXdERix5QkF4REUsR0F3RFUsU0FBSyxZQUFMLEVBeERWO0FBeURGLHNCQXpERSxHQXlETztBQUNULDRCQUFRLFVBQVUsTUFBVixDQURDO0FBRVQsNEJBQVEsVUFBVSxNQUFWLENBRkM7QUFHVCxpQ0FBYSxTQUhKO0FBSVQsZ0NBQVksU0FBSyxPQUFMLENBQWMsU0FBZDtBQUpILGlCQXpEUDs7QUErRE4sdUJBQU8sTUFBUDtBQS9ETTtBQUFBO0FBa0VKLG1CQWxFSSx1QkFrRVMsTUFsRVQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFtRUYsaUJBbkVFLEdBbUVFLFNBQUssTUFBTCxDQUFhLE1BQWIsQ0FuRUY7QUFvRUYsc0JBcEVFLEdBb0VPLHNCQUFzQixTQUFLLFVBQUwsQ0FBaUIsRUFBRSxRQUFGLENBQWpCLENBcEU3QjtBQUFBLHVCQXFFZSxTQUFLLE1BQUwsR0FyRWY7QUFBQTtBQXFFRix3QkFyRUU7QUFzRUYsc0JBdEVFLEdBc0VPLFNBQVMsUUFBVCxDQXRFUDtBQXVFRix5QkF2RUUsR0F1RVUsU0FBVSxPQUFPLE1BQVAsQ0FBVixJQUE0QixJQXZFdEM7O0FBd0VOLHVCQUFPO0FBQ0gsaUNBQWEsU0FEVjtBQUVILGdDQUFZLFNBQUssT0FBTCxDQUFjLFNBQWQsQ0FGVDtBQUdILDRCQUFRLFdBQVksT0FBTyxNQUFQLENBQVosQ0FITDtBQUlILDJCQUFPLFdBQVksT0FBTyxLQUFQLENBQVosQ0FKSjtBQUtILDJCQUFPLFdBQVksT0FBTyxLQUFQLENBQVosQ0FMSjtBQU1ILDJCQUFPLFdBQVksT0FBTyxNQUFQLENBQVosQ0FOSjtBQU9ILDRCQUFRLFNBUEw7QUFRSCw0QkFBUSxTQVJMO0FBU0gsNkJBQVMsU0FUTjtBQVVILDZCQUFTLFNBVk47QUFXSCw0QkFBUSxXQUFZLE9BQU8sTUFBUCxDQUFaLENBWEw7QUFZSCw4QkFBVSxTQVpQO0FBYUgsa0NBQWMsU0FiWDtBQWNILCtCQUFXLFNBZFI7QUFlSCxrQ0FBYyxTQWZYO0FBZ0JILG1DQUFlLFdBQVksT0FBTyxLQUFQLENBQVosQ0FoQlo7QUFpQkgsNEJBQVE7QUFqQkwsaUJBQVA7QUF4RU07QUFBQTtBQTZGSixtQkE3RkksdUJBNkZTLE1BN0ZUO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUE2RmlCLGtCQTdGakIsbUZBNkYwQixFQTdGMUI7QUE4RkYsYUE5RkUsR0E4RkUsU0FBSyxNQUFMLENBQWEsTUFBYixDQTlGRjtBQStGRixrQkEvRkUsR0ErRk8sb0JBQW9CLFNBQUssVUFBTCxDQUFpQixFQUFFLFFBQUYsQ0FBakIsQ0EvRjNCOztBQWdHTixtQkFBTyxTQUFLLE1BQUwsRUFBYyxNQUFkLENBQVA7QUFoR007QUFtR0osb0JBbkdJO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQW9HZSxTQUFLLHlCQUFMLEVBcEdmO0FBQUE7QUFvR0Ysd0JBcEdFO0FBcUdGLHdCQXJHRSxHQXFHUyxTQUFTLFNBQVQsQ0FyR1Q7QUFzR0Ysc0JBdEdFLEdBc0dPLEVBQUUsUUFBUSxRQUFWLEVBdEdQOztBQXVHTixxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFNBQUssVUFBTCxDQUFnQixNQUFwQyxFQUE0QyxHQUE1QyxFQUFpRDtBQUN6Qyw0QkFEeUMsR0FDOUIsU0FBSyxVQUFMLENBQWdCLENBQWhCLENBRDhCO0FBRXpDLDZCQUZ5QyxHQUU3QixTQUFTLFdBQVQsRUFGNkI7QUFHekMsMkJBSHlDLEdBRy9CO0FBQ1YsZ0NBQVEsU0FERTtBQUVWLGdDQUFRLFNBRkU7QUFHVixpQ0FBUztBQUhDLHFCQUgrQjs7QUFRN0Msd0JBQUksYUFBYSxRQUFqQixFQUEyQjtBQUN2QixnQ0FBUSxNQUFSLElBQWtCLFdBQVksU0FBUyxTQUFULEVBQW9CLFdBQXBCLENBQVosQ0FBbEI7QUFDQSxnQ0FBUSxPQUFSLElBQW1CLFdBQVksU0FBUyxTQUFULEVBQW9CLE9BQXBCLENBQVosQ0FBbkI7QUFDQSxnQ0FBUSxNQUFSLElBQWtCLFFBQVEsT0FBUixJQUFtQixRQUFRLE1BQVIsQ0FBckM7QUFDSDtBQUNELDJCQUFPLFFBQVAsSUFBbUIsT0FBbkI7QUFDSDtBQUNELHVCQUFPLE1BQVA7QUF0SE07QUFBQTtBQXlISixtQkF6SEksdUJBeUhTLE1BekhULEVBeUhpQixJQXpIakIsRUF5SHVCLElBekh2QixFQXlINkIsTUF6SDdCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUF5SHFDLHFCQXpIckMsbUZBeUg2QyxTQXpIN0M7QUF5SHdELHNCQXpIeEQsbUZBeUhpRSxFQXpIakU7O0FBMEhOLG9CQUFJLFFBQVEsUUFBWjtBQUNJLDBCQUFNLElBQUksYUFBSixDQUFtQixTQUFLLEVBQUwsR0FBVSwyQkFBN0IsQ0FBTjtBQURKLGlCQUVJLE1BNUhFLEdBNEhPLHFCQUFxQixTQUFLLFVBQUwsQ0FBaUIsSUFBakIsQ0FBckIsR0FBOEMsT0E1SHJEO0FBNkhGLHFCQTdIRSxHQTZITTtBQUNSLGlDQUFhLFNBQUssUUFBTCxDQUFlLE1BQWYsQ0FETDtBQUVSLGdDQUFZLE1BRko7QUFHUixtQ0FBZTtBQUhQLGlCQTdITjtBQUFBLHVCQWtJZSxTQUFLLE1BQUwsRUFBYyxTQUFLLE1BQUwsQ0FBYSxLQUFiLEVBQW9CLE1BQXBCLENBQWQsQ0FsSWY7QUFBQTtBQWtJRix3QkFsSUU7O0FBbUlOLHVCQUFPO0FBQ0gsNEJBQVEsUUFETDtBQUVILDBCQUFNLFNBQVMsZUFBVCxFQUEwQixPQUExQixFQUFtQyxVQUFuQyxFQUErQyxRQUEvQztBQUZILGlCQUFQO0FBbklNO0FBQUE7QUF5SUosbUJBeklJLHVCQXlJUyxFQXpJVDtBQUFBO0FBQUE7QUFBQTs7QUF5SWEsa0JBekliLG1GQXlJc0IsRUF6SXRCOztBQTBJTixtQkFBTyxTQUFLLHNCQUFMLENBQTZCLFNBQUssTUFBTCxDQUFhO0FBQzdDLDRCQUFZO0FBRGlDLGFBQWIsRUFFakMsTUFGaUMsQ0FBN0IsQ0FBUDtBQTFJTTtBQStJSixlQS9JSSxtQkErSUssSUEvSUw7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBK0lXLG1CQS9JWCxtRkErSWlCLFFBL0lqQjtBQStJMkIsc0JBL0kzQixtRkErSW9DLEtBL0lwQztBQStJMkMsc0JBL0kzQyxtRkErSW9ELEVBL0lwRDtBQStJd0QsdUJBL0l4RCxtRkErSWtFLFNBL0lsRTtBQStJNkUsb0JBL0k3RSxtRkErSW9GLFNBL0lwRjtBQWdKRixtQkFoSkUsR0FnSkksU0FBSyxJQUFMLENBQVUsS0FBVixFQUFpQixHQUFqQixJQUF3QixHQWhKNUI7O0FBaUpOLG9CQUFJLE9BQU8sUUFBWCxFQUFxQjtBQUNqQiwyQkFBTyxJQUFQO0FBQ0gsaUJBRkQsTUFFTztBQUNILDJCQUFPLFNBQUssT0FBTCxHQUFlLEdBQXRCO0FBQ0kseUJBRkQsR0FFUyxTQUFLLEtBQUwsRUFGVDs7QUFHSCwyQkFBTyxTQUFLLFNBQUwsQ0FBZ0IsU0FBSyxNQUFMLENBQWE7QUFDaEMsdUNBQWUsSUFEaUI7QUFFaEMsc0NBQWM7QUFGa0IscUJBQWIsRUFHcEIsTUFIb0IsQ0FBaEIsQ0FBUDtBQUlJLHdCQVBELEdBT1EsV0FBVyxTQUFLLE9BQWhCLEdBQTBCLEdBQTFCLEdBQWdDLEdBQWhDLEdBQXNDLElBUDlDOztBQVFILDhCQUFVO0FBQ04sd0NBQWdCLG1DQURWO0FBRU4sbUNBQVcsU0FBSyxNQUZWO0FBR04sb0NBQVksU0FBSyxJQUFMLENBQVcsU0FBSyxNQUFMLENBQWEsSUFBYixDQUFYLEVBQStCLFNBQUssTUFBcEMsRUFBNEMsUUFBNUM7QUFITixxQkFBVjtBQUtIO0FBaEtLLHVCQWlLZSxTQUFLLEtBQUwsQ0FBWSxHQUFaLEVBQWlCLE1BQWpCLEVBQXlCLE9BQXpCLEVBQWtDLElBQWxDLENBaktmO0FBQUE7QUFpS0Ysd0JBaktFOztBQWtLTixvQkFBSSxtQkFBbUIsUUFBdkI7QUFDSSwwQkFBTSxJQUFJLGFBQUosQ0FBbUIsU0FBSyxFQUFMLEdBQVUsR0FBVixHQUFnQixTQUFLLElBQUwsQ0FBVyxRQUFYLENBQW5DLENBQU47QUFESixpQkFFQSxPQUFPLFFBQVA7QUFwS007QUFBQTtBQUFBLEtBQWQ7O0FBd0tBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxRQUFJLFNBQVM7O0FBRVQsbUJBQVcsSUFGRjtBQUdULHFCQUFhLElBSEosRUFHVTtBQUNuQixlQUFPO0FBQ0gsc0JBQVU7QUFDTix1QkFBTyxDQUNILE9BREcsRUFFSCxlQUZHLEVBR0gsY0FIRyxFQUlILHdCQUpHLEVBS0gsb0JBTEcsRUFNSCxjQU5HLEVBT0gsY0FQRyxFQVFILG9CQVJHLEVBU0gsZUFURyxFQVVILGVBVkcsRUFXSCxPQVhHLEVBWUgsTUFaRyxFQWFILFFBYkcsRUFjSCxRQWRHO0FBREQsYUFEUDtBQW1CSCx1QkFBVztBQUNQLHdCQUFRLENBQ0osaUJBREksRUFFSixhQUZJLEVBR0osY0FISSxFQUlKLG1CQUpJLEVBS0osY0FMSSxFQU1KLGVBTkksRUFPSixjQVBJLEVBUUosa0JBUkksRUFTSixpQkFUSSxFQVVKLG9CQVZJLEVBV0osZUFYSSxFQVlKLGdCQVpJLEVBYUosa0JBYkksRUFjSixtQkFkSSxFQWVKLG9CQWZJLEVBZ0JKLGlCQWhCSSxFQWlCSixzQkFqQkksRUFrQkosY0FsQkksRUFtQkosdUJBbkJJLEVBb0JKLGlCQXBCSSxFQXFCSixzQkFyQkksRUFzQkosWUF0QkksRUF1QkosV0F2QkksRUF3QkosZUF4QkksRUF5QkosWUF6QkksRUEwQkosYUExQkksRUEyQkosbUJBM0JJLEVBNEJKLGdCQTVCSSxFQTZCSixXQTdCSSxFQThCSixrQkE5QkksRUErQkosT0EvQkksRUFnQ0osZUFoQ0ksRUFpQ0osaUJBakNJLEVBa0NKLFVBbENJLEVBbUNKLGVBbkNJLEVBb0NKLG1CQXBDSSxFQXFDSixVQXJDSTtBQUREO0FBbkJSLFNBSkU7O0FBa0VILHNCQWxFRywwQkFrRWEsTUFsRWI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFrRXFCLHNCQWxFckIsbUZBa0U4QixFQWxFOUI7QUFBQSx1QkFtRWlCLFNBQUssY0FBTCxDQUFxQixTQUFLLE1BQUwsQ0FBYTtBQUNwRCw4QkFBVSxTQUFLLFFBQUwsQ0FBZSxNQUFmO0FBRDBDLGlCQUFiLEVBRXhDLE1BRndDLENBQXJCLENBbkVqQjtBQUFBO0FBbUVELHlCQW5FQztBQXNFRCx5QkF0RUMsR0FzRVcsU0FBSyxZQUFMLEVBdEVYO0FBdUVELHNCQXZFQyxHQXVFUTtBQUNULDRCQUFRLFVBQVUsTUFBVixDQURDO0FBRVQsNEJBQVEsU0FBSyxNQUFMLENBQWEsVUFBVSxNQUFWLENBQWIsRUFBZ0MsQ0FBaEMsQ0FGQztBQUdULGlDQUFhLFNBSEo7QUFJVCxnQ0FBWSxTQUFLLE9BQUwsQ0FBYyxTQUFkO0FBSkgsaUJBdkVSOztBQTZFTCx1QkFBTyxNQUFQO0FBN0VLO0FBQUE7QUFnRkgsbUJBaEZHLHVCQWdGVSxNQWhGVjtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBaUZnQixTQUFLLGVBQUwsQ0FBc0I7QUFDdkMsOEJBQVUsU0FBSyxRQUFMLENBQWUsTUFBZjtBQUQ2QixpQkFBdEIsQ0FqRmhCO0FBQUE7QUFpRkQsd0JBakZDO0FBb0ZELHNCQXBGQyxHQW9GUSxTQUFTLFFBQVQsQ0FwRlI7QUFxRkQseUJBckZDLEdBcUZXLFNBQVUsU0FBUyxNQUFULENBQVYsSUFBOEIsSUFyRnpDOztBQXNGTCx1QkFBTztBQUNILGlDQUFhLFNBRFY7QUFFSCxnQ0FBWSxTQUFLLE9BQUwsQ0FBYyxTQUFkLENBRlQ7QUFHSCw0QkFBUSxXQUFZLE9BQU8sTUFBUCxDQUFaLENBSEw7QUFJSCwyQkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBSko7QUFLSCwyQkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBTEo7QUFNSCwyQkFBTyxXQUFZLE9BQU8sTUFBUCxDQUFaLENBTko7QUFPSCw0QkFBUSxTQVBMO0FBUUgsNEJBQVEsU0FSTDtBQVNILDZCQUFTLFNBVE47QUFVSCw2QkFBUyxTQVZOO0FBV0gsNEJBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQVhMO0FBWUgsOEJBQVUsU0FaUDtBQWFILGtDQUFjLFNBYlg7QUFjSCwrQkFBVyxTQWRSO0FBZUgsa0NBQWMsU0FmWDtBQWdCSCxtQ0FBZSxXQUFZLE9BQU8sS0FBUCxDQUFaLENBaEJaO0FBaUJILDRCQUFRO0FBakJMLGlCQUFQO0FBdEZLO0FBQUE7QUEyR0gsbUJBM0dHLHVCQTJHVSxNQTNHVjtBQUFBO0FBQUE7QUFBQTs7QUEyR2tCLGtCQTNHbEIsbUZBMkcyQixFQTNHM0I7O0FBNEdMLG1CQUFPLFNBQUssZUFBTCxDQUFzQixTQUFLLE1BQUwsQ0FBYTtBQUN0QywwQkFBVSxTQUFLLFFBQUwsQ0FBZSxNQUFmO0FBRDRCLGFBQWIsRUFFMUIsTUFGMEIsQ0FBdEIsQ0FBUDtBQTVHSztBQWlISCxrQkFqSEcsc0JBaUhTLE1BakhUO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFpSGlCLHlCQWpIakIsbUZBaUg2QixFQWpIN0I7QUFpSGlDLHFCQWpIakMsbUZBaUh5QyxTQWpIekM7QUFpSG9ELHFCQWpIcEQsbUZBaUg0RCxTQWpINUQ7QUFrSEQsaUJBbEhDLEdBa0hHLFNBQUssTUFBTCxDQUFhLE1BQWIsQ0FsSEg7QUFBQSx1QkFtSGdCLFNBQUssY0FBTCxDQUFxQjtBQUN0Qyw4QkFBVSxFQUFFLElBQUYsQ0FENEI7QUFFdEMsNEJBQVEsTUFGOEI7QUFHdEMsNkJBQVMsS0FINkI7QUFJdEMsNEJBQVEsU0FBVSxLQUFWO0FBSjhCLGlCQUFyQixDQW5IaEI7QUFBQTtBQW1IRCx3QkFuSEM7O0FBeUhMLHVCQUFPLFNBQUssV0FBTCxDQUFrQixDQUFsQixFQUFxQixRQUFyQixFQUErQixTQUEvQixFQUEwQyxLQUExQyxFQUFpRCxLQUFqRCxDQUFQO0FBekhLO0FBQUE7QUE0SEgsb0JBNUhHO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQTZIZ0IsU0FBSyxtQkFBTCxFQTdIaEI7QUFBQTtBQTZIRCx3QkE3SEM7QUE4SEQsd0JBOUhDLEdBOEhVLFNBQVMsTUFBVCxFQUFpQixPQUFqQixDQTlIVjtBQStIRCxzQkEvSEMsR0ErSFEsRUFBRSxRQUFRLFFBQVYsRUEvSFI7O0FBZ0lMLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksU0FBSyxVQUFMLENBQWdCLE1BQXBDLEVBQTRDLEdBQTVDLEVBQWlEO0FBQ3pDLDRCQUR5QyxHQUM5QixTQUFLLFVBQUwsQ0FBZ0IsQ0FBaEIsQ0FEOEI7QUFFekMsNkJBRnlDLEdBRTdCLFNBQVMsV0FBVCxFQUY2QjtBQUd6QywyQkFIeUMsR0FHL0I7QUFDVixnQ0FBUSxTQURFO0FBRVYsZ0NBQVEsU0FGRTtBQUdWLGlDQUFTO0FBSEMscUJBSCtCOztBQVE3Qyx3QkFBSSxhQUFhLFNBQVMsTUFBVCxDQUFqQjtBQUNJLGdDQUFRLE1BQVIsSUFBa0IsV0FBWSxTQUFTLE1BQVQsRUFBaUIsU0FBakIsQ0FBWixDQUFsQjtBQURKLHFCQUVBLElBQUksYUFBYSxTQUFTLFNBQVQsQ0FBakI7QUFDSSxnQ0FBUSxNQUFSLElBQWtCLFdBQVksU0FBUyxTQUFULEVBQW9CLFNBQXBCLENBQVosQ0FBbEI7QUFESixxQkFFQSxRQUFRLE9BQVIsSUFBbUIsU0FBSyxHQUFMLENBQVUsUUFBUSxNQUFSLENBQVYsRUFBMkIsUUFBUSxNQUFSLENBQTNCLENBQW5CO0FBQ0EsMkJBQU8sUUFBUCxJQUFtQixPQUFuQjtBQUNIO0FBQ0QsdUJBQU8sTUFBUDtBQS9JSztBQUFBO0FBa0pILG1CQWxKRyx1QkFrSlUsTUFsSlYsRUFrSmtCLElBbEpsQixFQWtKd0IsSUFsSnhCLEVBa0o4QixNQWxKOUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFrSnNDLHFCQWxKdEMsbUZBa0o4QyxTQWxKOUM7QUFrSnlELHNCQWxKekQsbUZBa0prRSxFQWxKbEU7QUFtSkQscUJBbkpDLEdBbUpPO0FBQ1IsOEJBQVUsU0FBSyxRQUFMLENBQWUsTUFBZixDQURGO0FBRVIsNEJBQVE7QUFGQSxpQkFuSlA7O0FBdUpMLG9CQUFJLFFBQVEsT0FBWixFQUFxQjtBQUNqQiwwQkFBTSxPQUFOLElBQWlCLEtBQWpCO0FBQ0EsMEJBQU0sUUFBTixJQUFrQixNQUFsQjtBQUNILGlCQUhELE1BR087QUFDSCx3QkFBSSxRQUFRLEtBQVosRUFBbUI7QUFDZiw4QkFBTSxPQUFOLElBQWlCLE1BQWpCO0FBQ0gscUJBRkQsTUFFTztBQUNILDhCQUFNLFFBQU4sSUFBa0IsTUFBbEI7QUFDSDtBQUNELDBCQUFNLE1BQU4sS0FBaUIsU0FBakI7QUFDSDtBQWpLSSx1QkFrS2dCLFNBQUssZ0JBQUwsQ0FBdUIsU0FBSyxNQUFMLENBQWEsS0FBYixFQUFvQixNQUFwQixDQUF2QixDQWxLaEI7QUFBQTtBQWtLRCx3QkFsS0M7O0FBbUtMLHVCQUFPO0FBQ0gsNEJBQVEsUUFETDtBQUVILDBCQUFNLFNBQVMsVUFBVCxFQUFxQixRQUFyQjtBQUZILGlCQUFQO0FBbktLO0FBQUE7QUF5S0gsbUJBektHLHVCQXlLVSxFQXpLVjtBQUFBO0FBQUE7QUFBQTs7QUF5S2Msa0JBektkLG1GQXlLdUIsRUF6S3ZCOztBQTBLTCxtQkFBTyxTQUFLLHNCQUFMLENBQTZCLFNBQUssTUFBTCxDQUFhO0FBQzdDLDRCQUFZO0FBRGlDLGFBQWIsRUFFakMsTUFGaUMsQ0FBN0IsQ0FBUDtBQTFLSztBQStLSCxlQS9LRyxtQkErS00sSUEvS047QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBK0tZLG1CQS9LWixtRkErS2tCLFFBL0tsQjtBQStLNEIsc0JBL0s1QixtRkErS3FDLEtBL0tyQztBQStLNEMsc0JBL0s1QyxtRkErS3FELEVBL0tyRDtBQStLeUQsdUJBL0t6RCxtRkErS21FLFNBL0tuRTtBQStLOEUsb0JBL0s5RSxtRkErS3FGLFNBL0tyRjtBQWdMRCxtQkFoTEMsR0FnTEssTUFBTSxLQUFOLEdBQWMsR0FBZCxHQUFvQixTQUFLLE9BQXpCLEdBQW1DLEdBQW5DLEdBQXlDLElBQXpDLEdBQWdELEtBaExyRDs7QUFpTEwsb0JBQUksT0FBTyxRQUFYLEVBQXFCO0FBQ2pCLHdCQUFJLE9BQU8sSUFBUCxDQUFhLE1BQWIsRUFBcUIsTUFBekI7QUFDSSwrQkFBTyxNQUFNLFNBQUssU0FBTCxDQUFnQixNQUFoQixDQUFiO0FBREo7QUFFSCxpQkFIRCxNQUdPO0FBQ0MseUJBREQsR0FDUyxTQUFLLE9BQUwsQ0FBYyxTQUFLLE1BQUwsQ0FBYTtBQUNuQyxtQ0FBVyxTQUFLO0FBRG1CLHFCQUFiLEVBRXZCLE1BRnVCLENBQWQsQ0FEVDtBQUlIOztBQUNJLCtCQUxELEdBS2UsU0FBSyxTQUFMLENBQWdCLEtBQWhCLElBQXlCLGNBQXpCLEdBQTBDLFNBQUssTUFMOUQ7O0FBTUgsMEJBQU0sTUFBTixJQUFnQixTQUFLLElBQUwsQ0FBVyxTQUFLLE1BQUwsQ0FBYSxXQUFiLENBQVgsRUFBc0MsV0FBdEMsRUFBaEI7QUFDQSwyQkFBTyxTQUFLLFNBQUwsQ0FBZ0IsS0FBaEIsQ0FBUDtBQUNBLDhCQUFVLEVBQUUsZ0JBQWdCLG1DQUFsQixFQUFWO0FBQ0g7QUFDRCxzQkFBTSxTQUFLLElBQUwsQ0FBVSxLQUFWLElBQW1CLEdBQXpCO0FBOUxLLHVCQStMZ0IsU0FBSyxLQUFMLENBQVksR0FBWixFQUFpQixNQUFqQixFQUF5QixPQUF6QixFQUFrQyxJQUFsQyxDQS9MaEI7QUFBQTtBQStMRCx3QkEvTEM7O0FBZ01MLG9CQUFJLFlBQVksUUFBaEI7QUFDSSx3QkFBSSxDQUFDLFNBQVMsUUFBVCxDQUFMO0FBQ0ksOEJBQU0sSUFBSSxhQUFKLENBQW1CLFNBQUssRUFBTCxHQUFVLEdBQVYsR0FBZ0IsU0FBSyxJQUFMLENBQVcsUUFBWCxDQUFuQyxDQUFOO0FBREo7QUFESixpQkFHQSxPQUFPLFFBQVA7QUFuTUs7QUFBQTtBQUFBLEtBQWI7O0FBdU1BOztBQUVBLFFBQUksWUFBWSxPQUFRLE1BQVIsRUFBZ0I7QUFDNUIsY0FBTSxXQURzQjtBQUU1QixnQkFBUSxZQUZvQjtBQUc1QixxQkFBYSxJQUhlO0FBSTVCLGdCQUFRO0FBQ0osb0JBQVEscUdBREo7QUFFSixtQkFBTyx1QkFGSDtBQUdKLG1CQUFPLHVCQUhIO0FBSUosbUJBQU87QUFKSCxTQUpvQjtBQVU1QixtQkFBVztBQUNQLHVCQUFXLEVBQUUsTUFBTSxTQUFSLEVBQW1CLFVBQVUsU0FBN0IsRUFBd0MsUUFBUSxLQUFoRCxFQUF1RCxTQUFTLEtBQWhFLEVBREo7QUFFUCx1QkFBVyxFQUFFLE1BQU0sU0FBUixFQUFtQixVQUFVLFNBQTdCLEVBQXdDLFFBQVEsS0FBaEQsRUFBdUQsU0FBUyxLQUFoRTtBQUZKO0FBVmlCLEtBQWhCLENBQWhCOztBQWdCQTs7QUFFQSxRQUFJLFlBQVksT0FBUSxNQUFSLEVBQWdCO0FBQzVCLGNBQU0sV0FEc0I7QUFFNUIsZ0JBQVEsWUFGb0I7QUFHNUIscUJBQWEsQ0FBRSxJQUFGLEVBQVEsSUFBUixDQUhlO0FBSTVCLGdCQUFRO0FBQ0osb0JBQVEscUdBREo7QUFFSixtQkFBTyx3QkFGSDtBQUdKLG1CQUFPLHdCQUhIO0FBSUosbUJBQU8sQ0FDSCw2Q0FERyxFQUVILDBDQUZHO0FBSkgsU0FKb0I7QUFhNUIsbUJBQVc7QUFDUCx1QkFBVyxFQUFFLE1BQU0sU0FBUixFQUFtQixVQUFVLFNBQTdCLEVBQXdDLFFBQVEsS0FBaEQsRUFBdUQsU0FBUyxLQUFoRSxFQURKO0FBRVAsdUJBQVcsRUFBRSxNQUFNLFNBQVIsRUFBbUIsVUFBVSxTQUE3QixFQUF3QyxRQUFRLEtBQWhELEVBQXVELFNBQVMsS0FBaEUsRUFGSjtBQUdQLHVCQUFXLEVBQUUsTUFBTSxTQUFSLEVBQW1CLFVBQVUsU0FBN0IsRUFBd0MsUUFBUSxLQUFoRCxFQUF1RCxTQUFTLEtBQWhFLEVBSEo7QUFJUCx1QkFBVyxFQUFFLE1BQU0sU0FBUixFQUFtQixVQUFVLFNBQTdCLEVBQXdDLFFBQVEsS0FBaEQsRUFBdUQsU0FBUyxLQUFoRTtBQUpKO0FBYmlCLEtBQWhCLENBQWhCOztBQXFCQTs7QUFFQSxRQUFJLE9BQU8sT0FBUSxNQUFSLEVBQWdCO0FBQ3ZCLGNBQU0sTUFEaUI7QUFFdkIsZ0JBQVEsTUFGZTtBQUd2QixxQkFBYSxDQUFFLElBQUYsRUFBUSxJQUFSLENBSFU7QUFJdkIsZ0JBQVE7QUFDSixvQkFBUSxxR0FESjtBQUVKLG1CQUFPLHNCQUZIO0FBR0osbUJBQU8sc0JBSEg7QUFJSixtQkFBTztBQUpILFNBSmU7QUFVdkIsbUJBQVc7QUFDUCx1QkFBVyxFQUFFLE1BQU0sU0FBUixFQUFtQixVQUFVLFNBQTdCLEVBQXdDLFFBQVEsS0FBaEQsRUFBdUQsU0FBUyxLQUFoRSxFQURKO0FBRVAsdUJBQVcsRUFBRSxNQUFNLFNBQVIsRUFBbUIsVUFBVSxTQUE3QixFQUF3QyxRQUFRLEtBQWhELEVBQXVELFNBQVMsS0FBaEUsRUFGSjtBQUdQLHVCQUFXLEVBQUUsTUFBTSxTQUFSLEVBQW1CLFVBQVUsU0FBN0IsRUFBd0MsUUFBUSxLQUFoRCxFQUF1RCxTQUFTLEtBQWhFLEVBSEo7QUFJUCx1QkFBVyxFQUFFLE1BQU0sU0FBUixFQUFtQixVQUFVLFNBQTdCLEVBQXdDLFFBQVEsS0FBaEQsRUFBdUQsU0FBUyxLQUFoRTtBQUpKO0FBVlksS0FBaEIsQ0FBWDs7QUFrQkE7O0FBRUEsUUFBSSxVQUFVOztBQUVWLGNBQU0sU0FGSTtBQUdWLGdCQUFRLFNBSEU7QUFJVixxQkFBYSxDQUFFLElBQUYsRUFBUSxJQUFSLENBSkg7QUFLVixxQkFBYSxJQUxIO0FBTVYsbUJBQVcsSUFORDtBQU9WLGdCQUFRO0FBQ0osb0JBQVEscUdBREo7QUFFSixtQkFBTyx5QkFGSDtBQUdKLG1CQUFPLHlCQUhIO0FBSUosbUJBQU8sQ0FDSCw4Q0FERyxFQUVILHlDQUZHO0FBSkgsU0FQRTtBQWdCVixlQUFPO0FBQ0gsc0JBQVU7QUFDTix1QkFBTyxDQUNILFdBREcsRUFFSCxrQkFGRyxFQUdILGtCQUhHLEVBSUgsaUJBSkcsRUFLSCw0QkFMRyxFQU1ILDJCQU5HO0FBREQsYUFEUDtBQVdILHVCQUFXO0FBQ1AsdUJBQU8sQ0FDSCw2QkFERyxFQUVILE1BRkcsRUFHSCxnQkFIRyxFQUlILDhCQUpHLEVBS0gsYUFMRyxFQU1ILG9CQU5HLEVBT0gsbUJBUEcsQ0FEQTtBQVVQLHdCQUFRLENBQ0osYUFESSxFQUVKLGdCQUZJLEVBR0osdUJBSEksRUFJSixtQkFKSSxFQUtKLHlCQUxJLENBVkQ7QUFpQlAsMEJBQVUsQ0FDTiwyQkFETSxFQUVOLHdCQUZNO0FBakJIO0FBWFIsU0FoQkc7QUFrRFYsbUJBQVc7QUFDUCx1QkFBVyxFQUFFLE1BQU0sS0FBUixFQUFlLFVBQVUsU0FBekIsRUFBb0MsUUFBUSxLQUE1QyxFQUFtRCxTQUFTLEtBQTVEO0FBREosU0FsREQ7O0FBc0RKLG9CQXRESTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQXVEZSxTQUFLLGNBQUwsRUF2RGY7QUFBQTtBQXVERix3QkF2REU7QUF3REYsc0JBeERFLEdBd0RPLEVBQUUsUUFBUSxRQUFWLEVBeERQOztBQXlETixxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFNBQUssVUFBTCxDQUFnQixNQUFwQyxFQUE0QyxHQUE1QyxFQUFpRDtBQUN6Qyw0QkFEeUMsR0FDOUIsU0FBSyxVQUFMLENBQWdCLENBQWhCLENBRDhCO0FBRXpDLDZCQUZ5QyxHQUU3QixTQUFTLFdBQVQsRUFGNkI7QUFHekMsMkJBSHlDLEdBRy9CO0FBQ1YsZ0NBQVEsU0FERTtBQUVWLGdDQUFRLFNBRkU7QUFHVixpQ0FBUztBQUhDLHFCQUgrQjtBQVF6QywyQkFSeUMsR0FRL0IsYUFBYSxTQVJrQjtBQVN6QywwQkFUeUMsR0FTaEMsWUFBWSxTQVRvQjs7QUFVN0Msd0JBQUksV0FBVyxRQUFmO0FBQ0ksZ0NBQVEsTUFBUixJQUFrQixTQUFTLE9BQVQsQ0FBbEI7QUFESixxQkFFQSxJQUFJLFVBQVUsUUFBZDtBQUNJLGdDQUFRLE1BQVIsSUFBa0IsU0FBUyxNQUFULENBQWxCO0FBREoscUJBRUEsUUFBUSxPQUFSLElBQW1CLFNBQUssR0FBTCxDQUFVLFFBQVEsTUFBUixDQUFWLEVBQTJCLFFBQVEsTUFBUixDQUEzQixDQUFuQjtBQUNBLDJCQUFPLFFBQVAsSUFBbUIsT0FBbkI7QUFDSDtBQUNELHVCQUFPLE1BQVA7QUExRU07QUFBQTtBQTZFSixzQkE3RUksMEJBNkVZLE1BN0VaO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBNkVvQixzQkE3RXBCLG1GQTZFNkIsRUE3RTdCO0FBQUEsdUJBOEVnQixTQUFLLG9CQUFMLENBQTJCLFNBQUssTUFBTCxDQUFhO0FBQzFELDBCQUFNLFNBQUssUUFBTCxDQUFlLE1BQWY7QUFEb0QsaUJBQWIsRUFFOUMsTUFGOEMsQ0FBM0IsQ0E5RWhCO0FBQUE7QUE4RUYseUJBOUVFO0FBaUZGLHlCQWpGRSxHQWlGVSxTQUFLLFlBQUwsRUFqRlY7QUFrRkYsc0JBbEZFLEdBa0ZPO0FBQ1QsNEJBQVEsRUFEQztBQUVULDRCQUFRLEVBRkM7QUFHVCxpQ0FBYSxTQUhKO0FBSVQsZ0NBQVksU0FBSyxPQUFMLENBQWMsU0FBZDtBQUpILGlCQWxGUDtBQXdGRixxQkF4RkUsR0F3Rk0sQ0FBRSxNQUFGLEVBQVUsTUFBVixDQXhGTjs7QUF5Rk4scUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxNQUFNLE1BQTFCLEVBQWtDLEdBQWxDLEVBQXVDO0FBQy9CLHdCQUQrQixHQUN4QixNQUFNLENBQU4sQ0FEd0I7QUFFL0IsMEJBRitCLEdBRXRCLFVBQVUsSUFBVixDQUZzQjs7QUFHbkMseUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxPQUFPLE1BQTNCLEVBQW1DLEdBQW5DLEVBQXdDO0FBQ2hDLDZCQURnQyxHQUN4QixPQUFPLENBQVAsQ0FEd0I7QUFFaEMsNkJBRmdDLEdBRXhCLE1BQU0sT0FBTixDQUZ3QjtBQUdoQyw4QkFIZ0MsR0FHdkIsTUFBTSxRQUFOLENBSHVCO0FBSWhDLG1DQUpnQyxHQUlwQixNQUFNLFdBQU4sSUFBcUIsSUFKRDs7QUFLcEMsK0JBQU8sSUFBUCxFQUFhLElBQWIsQ0FBbUIsQ0FBRSxLQUFGLEVBQVMsTUFBVCxFQUFpQixXQUFqQixDQUFuQjtBQUNIO0FBQ0o7QUFDRCx1QkFBTyxNQUFQLElBQWlCLFNBQUssTUFBTCxDQUFhLE9BQU8sTUFBUCxDQUFiLEVBQTZCLENBQTdCLEVBQWdDLElBQWhDLENBQWpCO0FBQ0EsdUJBQU8sTUFBUDtBQXJHTTtBQUFBO0FBd0dKLG1CQXhHSSx1QkF3R1MsTUF4R1Q7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkF5R2EsU0FBSyxxQkFBTCxDQUE0QjtBQUMzQywwQkFBTSxTQUFLLFFBQUwsQ0FBZSxNQUFmO0FBRHFDLGlCQUE1QixDQXpHYjtBQUFBO0FBeUdGLHNCQXpHRTtBQTRHRix5QkE1R0UsR0E0R1UsT0FBTyxJQUFQLElBQWUsSUE1R3pCOztBQTZHTix1QkFBTztBQUNILGlDQUFhLFNBRFY7QUFFSCxnQ0FBWSxTQUFLLE9BQUwsQ0FBYyxTQUFkLENBRlQ7QUFHSCw0QkFBUSxXQUFZLE9BQU8sTUFBUCxDQUFaLENBSEw7QUFJSCwyQkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBSko7QUFLSCwyQkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBTEo7QUFNSCwyQkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBTko7QUFPSCw0QkFBUSxXQUFZLE9BQU8sTUFBUCxDQUFaLENBUEw7QUFRSCw0QkFBUSxXQUFZLE9BQU8sTUFBUCxDQUFaLENBUkw7QUFTSCw2QkFBUyxTQVROO0FBVUgsNkJBQVMsU0FWTjtBQVdILDRCQUFRLFdBQVksT0FBTyxPQUFQLENBQVosQ0FYTDtBQVlILDhCQUFVLFNBWlA7QUFhSCxrQ0FBYyxXQUFZLE9BQU8sV0FBUCxDQUFaLENBYlg7QUFjSCwrQkFBVyxTQWRSO0FBZUgsa0NBQWMsU0FmWDtBQWdCSCxtQ0FBZSxXQUFZLE9BQU8sUUFBUCxDQUFaLENBaEJaO0FBaUJILDRCQUFRO0FBakJMLGlCQUFQO0FBN0dNO0FBQUE7QUFrSUosbUJBbElJLHVCQWtJUyxNQWxJVDtBQUFBO0FBQUE7QUFBQTs7QUFrSWlCLGtCQWxJakIsbUZBa0kwQixFQWxJMUI7O0FBbUlOLG1CQUFPLFNBQUsscUJBQUwsQ0FBNEIsU0FBSyxNQUFMLENBQWE7QUFDNUMsc0JBQU0sU0FBSyxRQUFMLENBQWUsTUFBZjtBQURzQyxhQUFiLEVBRWhDLE1BRmdDLENBQTVCLENBQVA7QUFuSU07QUF3SUosbUJBeElJLHVCQXdJUyxNQXhJVCxFQXdJaUIsSUF4SWpCLEVBd0l1QixJQXhJdkIsRUF3STZCLE1BeEk3QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQXdJcUMscUJBeElyQyxtRkF3STZDLFNBeEk3QztBQXdJd0Qsc0JBeEl4RCxtRkF3SWlFLEVBeElqRTtBQXlJRixxQkF6SUUsR0F5SU07QUFDUiw0QkFBUSxTQUFLLFVBQUwsQ0FBaUIsSUFBakIsSUFBeUIsT0FEekI7QUFFUixnQ0FBWSxTQUFLLFFBQUwsQ0FBZSxNQUFmLENBRko7QUFHUixpQ0FBYSxJQUhMO0FBSVIsOEJBQVU7QUFKRixpQkF6SU47O0FBK0lOLG9CQUFJLFFBQVEsUUFBWjtBQUNJLDBCQUFNLE9BQU4sSUFBaUIsS0FBakI7QUFESixpQkEvSU0sT0FpSmUsU0FBSyxxQkFBTCxDQUE0QixTQUFLLE1BQUwsQ0FBYSxLQUFiLEVBQW9CLE1BQXBCLENBQTVCLENBakpmO0FBQUE7QUFpSkYsd0JBakpFOztBQWtKTix1QkFBTztBQUNILDRCQUFRLFFBREw7QUFFSCwwQkFBTSxTQUFTLE1BQVQ7QUFGSCxpQkFBUDtBQWxKTTtBQUFBO0FBd0pKLG1CQXhKSSx1QkF3SlMsRUF4SlQ7QUFBQTtBQUFBO0FBQUE7O0FBd0phLGtCQXhKYixtRkF3SnNCLEVBeEp0Qjs7QUF5Sk4sbUJBQU8sU0FBSyxzQkFBTCxDQUE2QixTQUFLLE1BQUwsQ0FBYTtBQUM3QywrQkFBZTtBQUQ4QixhQUFiLEVBRWpDLE1BRmlDLENBQTdCLENBQVA7QUF6Sk07QUE4SkosZUE5SkksbUJBOEpLLElBOUpMO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBOEpXLG1CQTlKWCxtRkE4SmlCLFFBOUpqQjtBQThKMkIsc0JBOUozQixtRkE4Sm9DLEtBOUpwQztBQThKMkMsc0JBOUozQyxtRkE4Sm9ELEVBOUpwRDtBQThKd0QsdUJBOUp4RCxtRkE4SmtFLFNBOUpsRTtBQThKNkUsb0JBOUo3RSxtRkE4Sm9GLFNBOUpwRjtBQStKRixtQkEvSkUsR0ErSkksU0FBSyxJQUFMLENBQVUsS0FBVixJQUFtQixHQUFuQixHQUF5QixTQUFLLE9BQTlCLEdBQXdDLEdBQXhDLEdBQThDLFNBQUssYUFBTCxDQUFvQixJQUFwQixFQUEwQixNQUExQixDQS9KbEQ7QUFnS0YscUJBaEtFLEdBZ0tNLFNBQUssSUFBTCxDQUFXLE1BQVgsRUFBbUIsU0FBSyxhQUFMLENBQW9CLElBQXBCLENBQW5CLENBaEtOOztBQWlLTixvQkFBSSxPQUFPLFFBQVgsRUFBcUI7QUFDakIsd0JBQUksT0FBTyxJQUFQLENBQWEsS0FBYixFQUFvQixNQUF4QjtBQUNJLCtCQUFPLE1BQU0sU0FBSyxTQUFMLENBQWdCLEtBQWhCLENBQWI7QUFESjtBQUVILGlCQUhELE1BR087QUFDSCwyQkFBTyxTQUFLLElBQUwsQ0FBVyxNQUFYLENBQVA7QUFDSSx5QkFGRCxHQUVTLFNBQUssS0FBTCxHQUFjLFFBQWQsRUFGVDtBQUdDLHdCQUhELEdBR1EsUUFBUSxHQUFSLEdBQWMsSUFIdEI7O0FBSUgsOEJBQVU7QUFDTixtQ0FBVyxTQUFLLE1BRFY7QUFFTix5Q0FBaUIsU0FBSyxJQUFMLENBQVcsU0FBSyxNQUFMLENBQWEsSUFBYixDQUFYLEVBQStCLFNBQUssTUFBcEMsQ0FGWDtBQUdOLHFDQUFhLEtBSFA7QUFJTix3Q0FBZ0I7QUFKVixxQkFBVjtBQU1IO0FBOUtLLHVCQStLZSxTQUFLLEtBQUwsQ0FBWSxHQUFaLEVBQWlCLE1BQWpCLEVBQXlCLE9BQXpCLEVBQWtDLElBQWxDLENBL0tmO0FBQUE7QUErS0Ysd0JBL0tFOztBQWdMTixvQkFBSSxZQUFZLFFBQWhCO0FBQ0ksMEJBQU0sSUFBSSxhQUFKLENBQW1CLFNBQUssRUFBTCxHQUFVLEdBQVYsR0FBZ0IsU0FBSyxJQUFMLENBQVcsUUFBWCxDQUFuQyxDQUFOO0FBREosaUJBRUEsT0FBTyxRQUFQO0FBbExNO0FBQUE7QUFBQSxLQUFkOztBQXNMQTs7QUFFQSxRQUFJLFdBQVc7O0FBRVgsY0FBTSxVQUZLO0FBR1gsZ0JBQVEsVUFIRztBQUlYLHFCQUFhLElBSkY7QUFLWCxxQkFBYSxHQUxGLEVBS087QUFDbEIsMkJBQW1CLElBTlI7QUFPWCxnQkFBUTtBQUNKLG9CQUFRLHFHQURKO0FBRUosbUJBQU87QUFDSCwwQkFBVSw2QkFEUDtBQUVILDJCQUFXO0FBRlIsYUFGSDtBQU1KLG1CQUFPLHNCQU5IO0FBT0osbUJBQU8sQ0FDSCxtQ0FERyxFQUVILDhCQUZHO0FBUEgsU0FQRztBQW1CWCxlQUFPO0FBQ0gsc0JBQVU7QUFDTix1QkFBTyxDQUNILGlCQURHLEVBRUgsaUJBRkcsRUFHSCxrQkFIRyxFQUlILGtCQUpHLEVBS0gsaUJBTEcsRUFNSCxjQU5HLEVBT0gsb0JBUEc7QUFERCxhQURQO0FBWUgsdUJBQVc7QUFDUCx3QkFBUSxDQUNKLEtBREksRUFFSixpQkFGSSxFQUdKLGFBSEksRUFJSixxQkFKSSxFQUtKLGlCQUxJLEVBTUosb0JBTkksRUFPSixtQkFQSSxFQVFKLFdBUkksRUFTSixZQVRJLEVBVUosV0FWSSxFQVdKLG1CQVhJLEVBWUosZ0NBWkksRUFhSixnQkFiSSxFQWNKLHdCQWRJLEVBZUosd0JBZkksRUFnQkosMkJBaEJJLEVBaUJKLGVBakJJLEVBa0JKLHNCQWxCSSxFQW1CSiw0QkFuQkksRUFvQkosc0JBcEJJLEVBcUJKLGtCQXJCSSxFQXNCSixtQkF0QkksRUF1Qkosd0JBdkJJLEVBd0JKLG9CQXhCSSxFQXlCSixNQXpCSSxFQTBCSixpQkExQkksRUEyQkosaUJBM0JJLEVBNEJKLFVBNUJJO0FBREQ7QUFaUixTQW5CSTs7QUFpRUwsb0JBakVLO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBa0VhLFNBQUsscUJBQUwsRUFsRWI7QUFBQTtBQWtFSCx1QkFsRUc7QUFtRUgsb0JBbkVHLEdBbUVJLE9BQU8sSUFBUCxDQUFhLE9BQWIsQ0FuRUo7QUFvRUgsc0JBcEVHLEdBb0VNLEVBcEVOOztBQXFFUCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLEtBQUssTUFBekIsRUFBaUMsR0FBakMsRUFBc0M7QUFDOUIsc0JBRDhCLEdBQ3pCLEtBQUssQ0FBTCxDQUR5QjtBQUU5QiwwQkFGOEIsR0FFckIsUUFBUSxFQUFSLENBRnFCO0FBQUEsaUNBR1osR0FBRyxLQUFILENBQVUsR0FBVixDQUhZO0FBQUE7QUFHNUIseUJBSDRCO0FBR3JCLHdCQUhxQjtBQUk5QiwwQkFKOEIsR0FJckIsT0FBTyxHQUFQLEdBQWEsS0FKUTs7QUFLbEMsMkJBQU8sSUFBUCxDQUFhO0FBQ1QsOEJBQU0sRUFERztBQUVULGtDQUFVLE1BRkQ7QUFHVCxnQ0FBUSxJQUhDO0FBSVQsaUNBQVMsS0FKQTtBQUtULGdDQUFRO0FBTEMscUJBQWI7QUFPSDtBQUNELHVCQUFPLE1BQVA7QUFsRk87QUFBQTtBQXFGTCxvQkFyRks7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBc0ZELFNBQUssV0FBTCxFQXRGQztBQUFBO0FBQUEsdUJBdUZjLFNBQUssaUNBQUwsQ0FBd0M7QUFDekQsK0JBQVc7QUFEOEMsaUJBQXhDLENBdkZkO0FBQUE7QUF1Rkgsd0JBdkZHO0FBMEZILHNCQTFGRyxHQTBGTSxFQUFFLFFBQVEsUUFBVixFQTFGTjtBQTJGSCwwQkEzRkcsR0EyRlUsT0FBTyxJQUFQLENBQWEsUUFBYixDQTNGVjs7QUE0RlAscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxXQUFXLE1BQS9CLEVBQXVDLEdBQXZDLEVBQTRDO0FBQ3BDLDRCQURvQyxHQUN6QixXQUFXLENBQVgsQ0FEeUI7QUFFcEMsMkJBRm9DLEdBRTFCLFNBQVMsUUFBVCxDQUYwQjtBQUdwQywyQkFIb0MsR0FHMUI7QUFDVixnQ0FBUSxXQUFZLFFBQVEsV0FBUixDQUFaLENBREU7QUFFVixnQ0FBUSxXQUFZLFFBQVEsVUFBUixDQUFaLENBRkU7QUFHVixpQ0FBUztBQUhDLHFCQUgwQjs7QUFReEMsNEJBQVEsT0FBUixJQUFtQixTQUFLLEdBQUwsQ0FBVSxRQUFRLE1BQVIsQ0FBVixFQUEyQixRQUFRLE1BQVIsQ0FBM0IsQ0FBbkI7QUFDQSwyQkFBTyxRQUFQLElBQW1CLE9BQW5CO0FBQ0g7QUFDRCx1QkFBTyxNQUFQO0FBdkdPO0FBQUE7QUEwR1gsbUJBMUdXLHVCQTBHRSxNQTFHRixFQTBHVTtBQUNqQixnQkFBSSxRQUFRLFdBQVksT0FBTyxDQUFQLENBQVosQ0FBWjtBQUNBLGdCQUFJLFNBQVMsV0FBWSxPQUFPLENBQVAsQ0FBWixDQUFiO0FBQ0EsbUJBQU8sQ0FBRSxLQUFGLEVBQVMsTUFBVCxDQUFQO0FBQ0gsU0E5R1U7QUFnSFgsb0JBaEhXLHdCQWdIRyxPQWhISCxFQWdIWTtBQUNuQixnQkFBSSxTQUFTLEVBQWI7QUFDQSxpQkFBSyxJQUFJLElBQUksQ0FBYixFQUFnQixJQUFJLFFBQVEsTUFBNUIsRUFBb0MsR0FBcEMsRUFBeUM7QUFDckMsdUJBQU8sSUFBUCxDQUFhLEtBQUssV0FBTCxDQUFrQixRQUFRLENBQVIsQ0FBbEIsQ0FBYjtBQUNIO0FBQ0QsbUJBQU8sTUFBUDtBQUNILFNBdEhVO0FBd0hMLHNCQXhISywwQkF3SFcsTUF4SFg7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUF3SG1CLHNCQXhIbkIsbUZBd0g0QixFQXhINUI7QUFBQSx1QkF5SEQsU0FBSyxXQUFMLEVBekhDO0FBQUE7QUFBQSx1QkEwSGUsU0FBSyx3QkFBTCxDQUErQixTQUFLLE1BQUwsQ0FBYTtBQUM5RCxvQ0FBZ0IsU0FBSyxRQUFMLENBQWUsTUFBZjtBQUQ4QyxpQkFBYixFQUVsRCxNQUZrRCxDQUEvQixDQTFIZjtBQUFBO0FBMEhILHlCQTFIRztBQTZISCx5QkE3SEcsR0E2SFMsU0FBSyxZQUFMLEVBN0hUO0FBOEhILHNCQTlIRyxHQThITTtBQUNULDRCQUFRLEVBREM7QUFFVCw0QkFBUSxFQUZDO0FBR1QsaUNBQWEsU0FISjtBQUlULGdDQUFZLFNBQUssT0FBTCxDQUFjLFNBQWQ7QUFKSCxpQkE5SE47QUFvSUgscUJBcElHLEdBb0lLLENBQUUsTUFBRixFQUFVLE1BQVYsQ0FwSUw7O0FBcUlQLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksTUFBTSxNQUExQixFQUFrQyxHQUFsQyxFQUF1QztBQUMvQix3QkFEK0IsR0FDeEIsTUFBTSxDQUFOLENBRHdCOztBQUVuQywyQkFBTyxJQUFQLElBQWUsU0FBSyxZQUFMLENBQW1CLFVBQVUsSUFBVixDQUFuQixDQUFmO0FBQ0g7QUFDRCx1QkFBTyxNQUFQO0FBeklPO0FBQUE7QUE0SVgsbUJBNUlXLHVCQTRJRSxNQTVJRixFQTRJVSxNQTVJVixFQTRJa0I7QUFDekIsZ0JBQUksWUFBWSxLQUFLLFlBQUwsRUFBaEI7QUFDQSxtQkFBTztBQUNILDZCQUFhLFNBRFY7QUFFSCw0QkFBWSxLQUFLLE9BQUwsQ0FBYyxTQUFkLENBRlQ7QUFHSCx3QkFBUSxXQUFZLE9BQU8sVUFBUCxDQUFaLENBSEw7QUFJSCx1QkFBTyxXQUFZLE9BQU8sU0FBUCxDQUFaLENBSko7QUFLSCx1QkFBTyxXQUFZLE9BQU8sWUFBUCxDQUFaLENBTEo7QUFNSCx1QkFBTyxXQUFZLE9BQU8sV0FBUCxDQUFaLENBTko7QUFPSCx3QkFBUSxTQVBMO0FBUUgsd0JBQVEsU0FSTDtBQVNILHlCQUFTLFNBVE47QUFVSCx5QkFBUyxTQVZOO0FBV0gsd0JBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQVhMO0FBWUgsMEJBQVUsV0FBWSxPQUFPLGVBQVAsQ0FBWixDQVpQO0FBYUgsOEJBQWMsU0FiWDtBQWNILDJCQUFXLFNBZFI7QUFlSCw4QkFBYyxXQUFZLE9BQU8sWUFBUCxDQUFaLENBZlg7QUFnQkgsK0JBQWUsV0FBWSxPQUFPLGFBQVAsQ0FBWixDQWhCWjtBQWlCSCx3QkFBUTtBQWpCTCxhQUFQO0FBbUJILFNBaktVO0FBbUtMLG9CQW5LSztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQW9LRCxTQUFLLFdBQUwsRUFwS0M7QUFBQTtBQUFBLHVCQXFLYSxTQUFLLHFCQUFMLEVBcktiO0FBQUE7QUFxS0gsdUJBcktHO0FBc0tILG1CQXRLRyxHQXNLRyxPQUFPLElBQVAsQ0FBYSxPQUFiLENBdEtIO0FBdUtILHNCQXZLRyxHQXVLTSxFQXZLTjs7QUF3S1AscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxJQUFJLE1BQXhCLEVBQWdDLEdBQWhDLEVBQXFDO0FBQzdCLHNCQUQ2QixHQUN4QixJQUFJLENBQUosQ0FEd0I7QUFFN0IsMEJBRjZCLEdBRXBCLFNBQUssYUFBTCxDQUFtQixFQUFuQixDQUZvQjtBQUc3QiwwQkFINkIsR0FHcEIsT0FBTyxRQUFQLENBSG9CO0FBSTdCLDBCQUo2QixHQUlwQixRQUFRLEVBQVIsQ0FKb0I7O0FBS2pDLDJCQUFPLE1BQVAsSUFBaUIsU0FBSyxXQUFMLENBQWtCLE1BQWxCLEVBQTBCLE1BQTFCLENBQWpCO0FBQ0g7QUFDRCx1QkFBTyxNQUFQO0FBL0tPO0FBQUE7QUFrTEwsbUJBbExLLHVCQWtMUSxNQWxMUjtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBbUxELFNBQUssV0FBTCxFQW5MQztBQUFBO0FBb0xILGlCQXBMRyxHQW9MQyxTQUFLLE1BQUwsQ0FBYSxNQUFiLENBcExEO0FBQUEsdUJBcUxhLFNBQUsscUJBQUwsRUFyTGI7QUFBQTtBQXFMSCx1QkFyTEc7QUFzTEgsc0JBdExHLEdBc0xNLFFBQVEsRUFBRSxJQUFGLENBQVIsQ0F0TE47O0FBdUxQLHVCQUFPLFNBQUssV0FBTCxDQUFrQixNQUFsQixFQUEwQixDQUExQixDQUFQO0FBdkxPO0FBQUE7QUEwTFgsa0JBMUxXLHNCQTBMQyxLQTFMRCxFQTBMNEI7QUFBQSxnQkFBcEIsTUFBb0IsdUVBQVgsU0FBVzs7QUFDbkMsZ0JBQUksWUFBWSxLQUFLLFNBQUwsQ0FBZ0IsTUFBTSxNQUFOLENBQWhCLENBQWhCO0FBQ0EsZ0JBQUksS0FBSyxTQUFUO0FBQ0EsZ0JBQUksUUFBUSxTQUFaO0FBQ0EsZ0JBQUksYUFBYSxLQUFqQixFQUNJLEtBQUssTUFBTSxTQUFOLENBQUw7QUFDSixnQkFBSSxpQkFBaUIsS0FBckIsRUFDSSxRQUFRLE1BQU0sYUFBTixDQUFSO0FBQ0osbUJBQU87QUFDSCx3QkFBUSxLQURMO0FBRUgsNkJBQWEsU0FGVjtBQUdILDRCQUFZLEtBQUssT0FBTCxDQUFjLFNBQWQsQ0FIVDtBQUlILDBCQUFVLE9BQU8sUUFBUCxDQUpQO0FBS0gsc0JBQU0sRUFMSDtBQU1ILHlCQUFTLEtBTk47QUFPSCx3QkFBUSxTQVBMO0FBUUgsd0JBQVEsTUFBTSxNQUFOLENBUkw7QUFTSCx5QkFBUyxXQUFZLE1BQU0sTUFBTixDQUFaLENBVE47QUFVSCwwQkFBVSxXQUFZLE1BQU0sUUFBTixDQUFaO0FBVlAsYUFBUDtBQVlILFNBOU1VO0FBZ05MLG1CQWhOSyx1QkFnTlEsTUFoTlI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBZ05nQixzQkFoTmhCLG1GQWdOeUIsRUFoTnpCO0FBQUEsdUJBaU5ELFNBQUssV0FBTCxFQWpOQztBQUFBO0FBa05ILGlCQWxORyxHQWtOQyxTQUFLLE1BQUwsQ0FBYSxNQUFiLENBbE5EO0FBQUEsdUJBbU5ZLFNBQUssMkJBQUwsQ0FBa0MsU0FBSyxNQUFMLENBQWE7QUFDOUQsb0NBQWdCLEVBQUUsSUFBRixDQUQ4QztBQUU5RCwyQkFBTyxTQUFLLE9BQUwsRUFGdUQsQ0FFdEM7QUFGc0MsaUJBQWIsRUFHbEQsTUFIa0QsQ0FBbEMsQ0FuTlo7QUFBQTtBQW1OSCxzQkFuTkc7O0FBdU5QLHVCQUFPLFNBQUssV0FBTCxDQUFrQixNQUFsQixFQUEwQixDQUExQixDQUFQO0FBdk5PO0FBQUE7QUEwTkwscUJBMU5LO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBME5VLHNCQTFOVixtRkEwTm1CLFNBMU5uQjtBQTBOOEIsc0JBMU45QixtRkEwTnVDLEVBMU52QztBQTJOSCxtQkEzTkcsR0EyTkcsU0FBSyxPQUFMLEVBM05IO0FBNE5ILHVCQTVORyxHQTROTyxTQUFLLE1BQUwsQ0FBYTtBQUN2QixvQ0FBZ0IsS0FETztBQUV2QiwyQkFBTyxTQUFLLE9BQUwsRUFGZ0IsQ0FFQztBQUZELGlCQUFiLEVBR1gsTUFIVyxDQTVOUDs7QUFnT1Asb0JBQUksTUFBSixFQUFZO0FBQ0osc0JBREksR0FDQSxTQUFLLE1BQUwsQ0FBYSxNQUFiLENBREE7O0FBRVIsNEJBQVEsY0FBUixJQUEwQixHQUFFLElBQUYsQ0FBMUI7QUFDSDtBQW5PTSx1QkFvT1ksU0FBSyw2QkFBTCxDQUFvQyxPQUFwQyxDQXBPWjtBQUFBO0FBb09ILHNCQXBPRzs7QUFxT1Asb0JBQUksTUFBSjtBQUNJLDJCQUFPLFNBQUssV0FBTCxDQUFrQixNQUFsQixFQUEwQixDQUExQixDQUFQO0FBREo7QUFFSSwwQkFGSixHQUVhLEVBQUUsUUFBUSxNQUFWLEVBRmI7QUFHSSx1QkFISixHQUdVLE9BQU8sSUFBUCxDQUFhLE1BQWIsQ0FIVjs7QUFJQSx5QkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLElBQUksTUFBeEIsRUFBZ0MsR0FBaEMsRUFBcUM7QUFDN0IsMEJBRDZCLEdBQ3hCLElBQUksQ0FBSixDQUR3QjtBQUU3QiwrQkFGNkIsR0FFcEIsUUFBTyxFQUFQLENBRm9CO0FBRzdCLGdDQUg2QixHQUdwQixTQUFLLGFBQUwsQ0FBbUIsRUFBbkIsQ0FIb0I7QUFJN0IsOEJBSjZCLEdBSXBCLFNBQU8sUUFBUCxDQUpvQjs7QUFLakMsK0JBQU8sTUFBUCxJQUFpQixTQUFLLFdBQUwsQ0FBa0IsT0FBbEIsRUFBMEIsUUFBMUIsQ0FBakI7QUFDSDtBQUNELDJCQUFPLE1BQVA7QUFYQTtBQXJPTztBQUFBO0FBbVBYLGtCQW5QVyxzQkFtUEMsS0FuUEQsRUFtUFEsTUFuUFIsRUFtUGdCO0FBQ3ZCLG1CQUFPO0FBQ0gsc0JBQU0sTUFBTSxhQUFOLENBREg7QUFFSCw2QkFBYSxNQUFNLFdBQU4sQ0FGVjtBQUdILDRCQUFZLEtBQUssT0FBTCxDQUFjLE1BQU0sV0FBTixDQUFkLENBSFQ7QUFJSCwwQkFBVSxNQUFNLFFBQU4sQ0FKUDtBQUtILDBCQUFVLE9BQU8sUUFBUCxDQUxQO0FBTUgsd0JBQVEsTUFBTSxNQUFOLENBTkw7QUFPSCx3QkFBUSxNQUFNLE1BQU4sQ0FQTDtBQVFILHlCQUFTLE1BQU0sT0FBTixDQVJOO0FBU0gsMEJBQVUsTUFBTSxRQUFOLENBVFA7QUFVSCwwQkFBVSxLQUFLLFdBQUwsQ0FBa0IsTUFBTSxpQkFBTixDQUFsQixFQUE0QyxNQUE1QztBQVZQLGFBQVA7QUFZSCxTQWhRVTtBQWtRTCx5QkFsUUs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQWtRYyxzQkFsUWQsbUZBa1F1QixTQWxRdkI7QUFrUWtDLHNCQWxRbEMsbUZBa1EyQyxFQWxRM0M7QUFtUUgsaUJBblFHLEdBbVFDLFNBblFEOztBQW9RUCxvQkFBSSxNQUFKO0FBQ0ksd0JBQUksU0FBSyxNQUFMLENBQWEsTUFBYixDQUFKO0FBREosaUJBRUksSUF0UUcsR0FzUUksSUFBSSxFQUFFLElBQUYsQ0FBSixHQUFjLEtBdFFsQjtBQUFBLHVCQXVRWSxTQUFLLDJCQUFMLENBQWtDLFNBQUssTUFBTCxDQUFhO0FBQzlELG9DQUFnQjtBQUQ4QyxpQkFBYixDQUFsQyxDQXZRWjtBQUFBO0FBdVFILHNCQXZRRzs7QUEwUVAsdUJBQU8sU0FBSyxXQUFMLENBQWtCLE1BQWxCLEVBQTBCLENBQTFCLENBQVA7QUExUU87QUFBQTtBQTZRTCxtQkE3UUssdUJBNlFRLE1BN1FSLEVBNlFnQixJQTdRaEIsRUE2UXNCLElBN1F0QixFQTZRNEIsTUE3UTVCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUE2UW9DLHFCQTdRcEMsbUZBNlE0QyxTQTdRNUM7QUE2UXVELHNCQTdRdkQsbUZBNlFnRSxFQTdRaEU7O0FBOFFQLG9CQUFJLFFBQVEsUUFBWjtBQUNJLDBCQUFNLElBQUksYUFBSixDQUFtQixTQUFLLEVBQUwsR0FBVSwyQkFBN0IsQ0FBTjtBQURKLGlCQTlRTyxPQWdSRCxTQUFLLFdBQUwsRUFoUkM7QUFBQTtBQWlSSCxzQkFqUkcsR0FpUk0sZ0JBQWdCLFNBQUssVUFBTCxDQUFpQixJQUFqQixDQWpSdEI7QUFrUkgsaUJBbFJHLEdBa1JDLFNBQUssTUFBTCxDQUFhLE1BQWIsQ0FsUkQ7QUFBQSx1QkFtUmMsU0FBSyxNQUFMLEVBQWMsU0FBSyxNQUFMLENBQWE7QUFDNUMsb0NBQWdCLEVBQUUsSUFBRixDQUQ0QjtBQUU1Qyw0QkFBUSxLQUZvQztBQUc1Qyw4QkFBVTtBQUhrQyxpQkFBYixFQUloQyxNQUpnQyxDQUFkLENBblJkO0FBQUE7QUFtUkgsd0JBblJHO0FBd1JILHlCQXhSRyxHQXdSUyxTQUFLLFlBQUwsRUF4UlQ7QUF5UkgscUJBelJHLEdBeVJLLFNBQUssVUFBTCxDQUFpQixTQUFLLE1BQUwsQ0FBYTtBQUN0QyxpQ0FBYSxTQUR5QjtBQUV0Qyw4QkFBVSxNQUY0QjtBQUd0Qyw0QkFBUSxJQUg4QjtBQUl0Qyw0QkFBUSxJQUo4QjtBQUt0Qyw2QkFBUyxLQUw2QjtBQU10Qyw4QkFBVTtBQU40QixpQkFBYixFQU8xQixRQVAwQixDQUFqQixFQU9FLENBUEYsQ0F6Ukw7QUFpU0gsa0JBalNHLEdBaVNFLE1BQU0sSUFBTixDQWpTRjs7QUFrU1AseUJBQUssTUFBTCxDQUFZLEVBQVosSUFBa0IsS0FBbEI7QUFDQSx1QkFBTyxTQUFLLE1BQUwsQ0FBYSxFQUFFLFFBQVEsUUFBVixFQUFiLEVBQW1DLEtBQW5DLENBQVA7QUFuU087QUFBQTtBQXNTTCxrQkF0U0ssc0JBc1NPLEVBdFNQO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBdVNELFNBQUssV0FBTCxFQXZTQztBQUFBO0FBQUEsdUJBd1NZLFNBQUssaUJBQUwsRUF4U1o7QUFBQTtBQXdTSCxzQkF4U0c7QUF5U0gscUJBelNHLEdBeVNLLFNBQUssT0FBTCxDQUFjLE1BQWQsRUFBc0IsSUFBdEIsQ0F6U0w7O0FBMFNQLG9CQUFJLE1BQU0sS0FBVixFQUFpQjtBQUNiLDZCQUFLLE1BQUwsQ0FBWSxFQUFaLElBQWtCLE1BQU0sRUFBTixDQUFsQjtBQUNBLDJCQUFPLE1BQU0sRUFBTixDQUFQO0FBQ0gsaUJBSEQ7QUFHTyx3QkFBSSxNQUFNLFNBQUssTUFBZixFQUF1QjtBQUMxQixpQ0FBSyxNQUFMLENBQVksRUFBWixFQUFnQixRQUFoQixJQUE0QixRQUE1QjtBQUNBLCtCQUFPLFNBQUssTUFBTCxDQUFZLEVBQVosQ0FBUDtBQUNILHFCQUhNO0FBSVAsOEJBQU0sSUFBSSxhQUFKLENBQW1CLFNBQUssRUFBTCxHQUFVLFNBQVYsR0FBc0IsRUFBdEIsR0FBMkIsWUFBOUMsQ0FBTjtBQUpPO0FBSFA7QUExU087QUFBQTtBQW9UTCx3QkFwVEssNEJBb1RhLEVBcFRiO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFvVGlCLHNCQXBUakIsbUZBb1QwQixFQXBUMUI7QUFBQSx1QkFxVEQsU0FBSyxXQUFMLEVBclRDO0FBQUE7QUFBQSx1QkFzVFksU0FBSyw0QkFBTCxDQUFtQyxTQUFLLE1BQUwsQ0FBYTtBQUMvRCxtQ0FBZTtBQURnRCxpQkFBYixFQUVuRCxNQUZtRCxDQUFuQyxDQXRUWjtBQUFBO0FBc1RILHNCQXRURzs7QUF5VFAsdUJBQU8sU0FBSyxXQUFMLENBQWtCLE1BQWxCLENBQVA7QUF6VE87QUFBQTtBQTRUTCxtQkE1VEssdUJBNFRRLEVBNVRSO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBNFRZLHNCQTVUWixtRkE0VHFCLEVBNVRyQjtBQUFBLHVCQTZURCxTQUFLLFdBQUwsRUE3VEM7QUFBQTtBQThUUCx1QkFBTyxTQUFLLHNCQUFMLENBQTZCLFNBQUssTUFBTCxDQUFhO0FBQzdDLG1DQUFlO0FBRDhCLGlCQUFiLEVBRWpDLE1BRmlDLENBQTdCLENBQVA7QUE5VE87QUFBQTtBQW1VTCxlQW5VSyxtQkFtVUksSUFuVUo7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFtVVUsbUJBblVWLG1GQW1VZ0IsUUFuVWhCO0FBbVUwQixzQkFuVTFCLG1GQW1VbUMsS0FuVW5DO0FBbVUwQyxzQkFuVTFDLG1GQW1VbUQsRUFuVW5EO0FBbVV1RCx1QkFuVXZELG1GQW1VaUUsU0FuVWpFO0FBbVU0RSxvQkFuVTVFLG1GQW1VbUYsU0FuVW5GO0FBb1VILG1CQXBVRyxHQW9VRyxTQUFLLElBQUwsQ0FBVSxLQUFWLEVBQWlCLEdBQWpCLENBcFVIO0FBcVVILHFCQXJVRyxHQXFVSyxTQUFLLE1BQUwsQ0FBYSxFQUFFLFdBQVcsSUFBYixFQUFiLEVBQWtDLE1BQWxDLENBclVMOztBQXNVUCxvQkFBSSxPQUFPLFFBQVgsRUFBcUI7QUFDakIsMkJBQU8sTUFBTSxTQUFLLFNBQUwsQ0FBZ0IsS0FBaEIsQ0FBYjtBQUNILGlCQUZELE1BRU87QUFDSCwwQkFBTSxPQUFOLElBQWlCLFNBQUssS0FBTCxFQUFqQjtBQUNBLDJCQUFPLFNBQUssU0FBTCxDQUFnQixLQUFoQixDQUFQO0FBQ0EsOEJBQVU7QUFDTix3Q0FBZ0IsbUNBRFY7QUFFTiwrQkFBTyxTQUFLLE1BRk47QUFHTixnQ0FBUSxTQUFLLElBQUwsQ0FBVyxTQUFLLE1BQUwsQ0FBYSxJQUFiLENBQVgsRUFBK0IsU0FBSyxNQUFMLENBQWEsU0FBSyxNQUFsQixDQUEvQixFQUEwRCxRQUExRDtBQUhGLHFCQUFWO0FBS0g7QUFoVk0sdUJBaVZjLFNBQUssS0FBTCxDQUFZLEdBQVosRUFBaUIsTUFBakIsRUFBeUIsT0FBekIsRUFBa0MsSUFBbEMsQ0FqVmQ7QUFBQTtBQWlWSCx3QkFqVkc7O0FBa1ZQLG9CQUFJLFdBQVcsUUFBZixFQUF5QjtBQUNqQix5QkFEaUIsR0FDVCxTQUFLLEVBQUwsR0FBVSxHQUFWLEdBQWdCLFNBQUssSUFBTCxDQUFXLFFBQVgsQ0FEUDtBQUVqQiwwQkFGaUIsR0FFUixTQUFTLE9BQVQsRUFBa0IsT0FBbEIsQ0FBMkIsWUFBM0IsS0FBNEMsQ0FGcEM7O0FBR3JCLHdCQUFJLE1BQUo7QUFDSSw4QkFBTSxJQUFJLGlCQUFKLENBQXVCLEtBQXZCLENBQU47QUFESixxQkFFQSxNQUFNLElBQUksYUFBSixDQUFtQixLQUFuQixDQUFOO0FBQ0g7QUFDRCx1QkFBTyxRQUFQO0FBelZPO0FBQUE7QUFBQSxLQUFmOztBQTZWQTs7QUFFQSxRQUFJLGFBQWE7O0FBRWIsY0FBTSxZQUZPO0FBR2IsZ0JBQVEsWUFISztBQUliLHFCQUFhLElBSkE7QUFLYixxQkFBYSxJQUxBO0FBTWIsbUJBQVcsSUFORTtBQU9iLGdCQUFRO0FBQ0osb0JBQVEscUdBREo7QUFFSixtQkFBTyw0QkFGSDtBQUdKLG1CQUFPLDRCQUhIO0FBSUosbUJBQU87QUFKSCxTQVBLO0FBYWIsZUFBTztBQUNILHNCQUFVO0FBQ04sdUJBQU8sQ0FDSCxZQURHLEVBRUgsUUFGRyxFQUdILGNBSEc7QUFERCxhQURQO0FBUUgsdUJBQVc7QUFDUCx3QkFBUSxDQUNKLFNBREksRUFFSix5QkFGSSxFQUdKLG9CQUhJLEVBSUosS0FKSSxFQUtKLGNBTEksRUFNSix1QkFOSSxFQU9KLGtCQVBJLEVBUUosY0FSSSxFQVNKLGFBVEksRUFVSixNQVZJLEVBV0osbUJBWEk7QUFERDtBQVJSLFNBYk07QUFxQ2IsbUJBQVc7QUFDUCx1QkFBVyxFQUFFLE1BQU0sU0FBUixFQUFtQixVQUFVLFNBQTdCLEVBQXdDLFFBQVEsS0FBaEQsRUFBdUQsU0FBUyxLQUFoRSxFQURKO0FBRVAsdUJBQVcsRUFBRSxNQUFNLFNBQVIsRUFBbUIsVUFBVSxTQUE3QixFQUF3QyxRQUFRLEtBQWhELEVBQXVELFNBQVMsS0FBaEUsRUFGSjtBQUdQLHVCQUFXLEVBQUUsTUFBTSxTQUFSLEVBQW1CLFVBQVUsU0FBN0IsRUFBd0MsUUFBUSxLQUFoRCxFQUF1RCxTQUFTLEtBQWhFLEVBSEo7QUFJUCx1QkFBVyxFQUFFLE1BQU0sU0FBUixFQUFtQixVQUFVLFNBQTdCLEVBQXdDLFFBQVEsS0FBaEQsRUFBdUQsU0FBUyxLQUFoRTtBQUpKLFNBckNFOztBQTRDUCxvQkE1Q087QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQTZDWSxTQUFLLGtCQUFMLEVBN0NaO0FBQUE7QUE2Q0wsd0JBN0NLO0FBOENMLHNCQTlDSyxHQThDSSxFQUFFLFFBQVEsUUFBVixFQTlDSjs7QUErQ1QscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxTQUFLLFVBQUwsQ0FBZ0IsTUFBcEMsRUFBNEMsR0FBNUMsRUFBaUQ7QUFDekMsNEJBRHlDLEdBQzlCLFNBQUssVUFBTCxDQUFnQixDQUFoQixDQUQ4QjtBQUV6Qyw2QkFGeUMsR0FFN0IsU0FBUyxXQUFULEVBRjZCO0FBR3pDLDJCQUh5QyxHQUcvQjtBQUNWLGdDQUFRLFdBQVksU0FBUyxZQUFZLFlBQXJCLENBQVosQ0FERTtBQUVWLGdDQUFRLFdBQVksU0FBUyxZQUFZLFdBQXJCLENBQVosQ0FGRTtBQUdWLGlDQUFTLFdBQVksU0FBUyxZQUFZLFVBQXJCLENBQVo7QUFIQyxxQkFIK0I7O0FBUTdDLDJCQUFPLFFBQVAsSUFBbUIsT0FBbkI7QUFDSDtBQUNELHVCQUFPLE1BQVA7QUF6RFM7QUFBQTtBQTREUCxzQkE1RE8sMEJBNERTLE1BNURUO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQTREaUIsc0JBNURqQixtRkE0RDBCLEVBNUQxQjtBQUFBLHVCQTZEYSxTQUFLLGtCQUFMLENBQXlCLFNBQUssTUFBTCxDQUFhO0FBQ3hELDRCQUFRLFNBQUssUUFBTCxDQUFlLE1BQWY7QUFEZ0QsaUJBQWIsRUFFNUMsTUFGNEMsQ0FBekIsQ0E3RGI7QUFBQTtBQTZETCx5QkE3REs7QUFnRUwseUJBaEVLLEdBZ0VPLFNBQVUsVUFBVSxXQUFWLENBQVYsSUFBb0MsSUFoRTNDO0FBaUVMLHNCQWpFSyxHQWlFSTtBQUNULDRCQUFRLEVBREM7QUFFVCw0QkFBUSxFQUZDO0FBR1QsaUNBQWEsU0FISjtBQUlULGdDQUFZLFNBQUssT0FBTCxDQUFjLFNBQWQ7QUFKSCxpQkFqRUo7QUF1RUwscUJBdkVLLEdBdUVHLENBQUUsTUFBRixFQUFVLE1BQVYsQ0F2RUg7O0FBd0VULHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksTUFBTSxNQUExQixFQUFrQyxHQUFsQyxFQUF1QztBQUMvQix3QkFEK0IsR0FDeEIsTUFBTSxDQUFOLENBRHdCO0FBRS9CLDBCQUYrQixHQUV0QixVQUFVLElBQVYsQ0FGc0I7O0FBR25DLHlCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksT0FBTyxNQUEzQixFQUFtQyxHQUFuQyxFQUF3QztBQUNoQyw2QkFEZ0MsR0FDeEIsT0FBTyxDQUFQLENBRHdCO0FBRWhDLDZCQUZnQyxHQUV4QixXQUFZLE1BQU0sQ0FBTixDQUFaLENBRndCO0FBR2hDLDhCQUhnQyxHQUd2QixXQUFZLE1BQU0sQ0FBTixDQUFaLENBSHVCOztBQUlwQywrQkFBTyxJQUFQLEVBQWEsSUFBYixDQUFtQixDQUFFLEtBQUYsRUFBUyxNQUFULENBQW5CO0FBQ0g7QUFDSjtBQUNELHVCQUFPLE1BQVA7QUFsRlM7QUFBQTtBQXFGUCxtQkFyRk8sdUJBcUZNLE1BckZOO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBc0ZVLFNBQUssZUFBTCxDQUFzQjtBQUNyQyw0QkFBUSxTQUFLLFFBQUwsQ0FBZSxNQUFmO0FBRDZCLGlCQUF0QixDQXRGVjtBQUFBO0FBc0ZMLHNCQXRGSztBQXlGTCx5QkF6RkssR0F5Rk8sU0FBVSxPQUFPLFdBQVAsQ0FBVixJQUFpQyxJQXpGeEM7O0FBMEZULHVCQUFPO0FBQ0gsaUNBQWEsU0FEVjtBQUVILGdDQUFZLFNBQUssT0FBTCxDQUFjLFNBQWQsQ0FGVDtBQUdILDRCQUFRLFdBQVksT0FBTyxNQUFQLENBQVosQ0FITDtBQUlILDJCQUFPLFdBQVksT0FBTyxLQUFQLENBQVosQ0FKSjtBQUtILDJCQUFPLFdBQVksT0FBTyxLQUFQLENBQVosQ0FMSjtBQU1ILDJCQUFPLFdBQVksT0FBTyxLQUFQLENBQVosQ0FOSjtBQU9ILDRCQUFRLFdBQVksT0FBTyxNQUFQLENBQVosQ0FQTDtBQVFILDRCQUFRLFNBUkw7QUFTSCw2QkFBUyxTQVROO0FBVUgsNkJBQVMsU0FWTjtBQVdILDRCQUFRLFdBQVksT0FBTyxNQUFQLENBQVosQ0FYTDtBQVlILDhCQUFVLFNBWlA7QUFhSCxrQ0FBYyxTQWJYO0FBY0gsK0JBQVcsU0FkUjtBQWVILGtDQUFjLFNBZlg7QUFnQkgsbUNBQWUsV0FBWSxPQUFPLFFBQVAsQ0FBWixDQWhCWjtBQWlCSCw0QkFBUTtBQWpCTCxpQkFBUDtBQTFGUztBQUFBO0FBK0dQLG1CQS9HTyx1QkErR00sTUEvR047QUFBQTtBQUFBO0FBQUE7O0FBK0djLGtCQS9HZCxtRkErR3VCLEVBL0d2Qjs7QUFnSFQsbUJBQU8sU0FBSyxxQkFBTCxDQUE0QixTQUFLLE1BQUwsQ0FBYTtBQUM1Qyx3QkFBUSxTQUFLLFFBQUwsQ0FBZSxNQUFmO0FBRG9DLGFBQWIsRUFFaEMsTUFGZ0MsQ0FBNUIsQ0FBUDtBQWhIUztBQXFIUCxtQkFySE8sdUJBcUhNLE1BckhOLEVBcUhjLElBckhkLEVBcUhvQixJQXJIcEIsRUFxSDBCLE1BckgxQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBcUhrQyxxQkFySGxDLG1GQXFIMEMsU0FySDFDO0FBcUhxRCxzQkFySHJELG1GQXFIOEQsRUFySDlEO0FBc0hMLHNCQXRISyxHQXNISSxnQkFBZ0IsU0FBSyxVQUFMLENBQWlCLElBQWpCLENBdEhwQjtBQXVITCxxQkF2SEssR0F1SEc7QUFDUiw4QkFBVSxNQURGO0FBRVIsNEJBQVEsU0FBSyxRQUFMLENBQWUsTUFBZjtBQUZBLGlCQXZISDs7QUEySFQsb0JBQUksUUFBUSxPQUFaO0FBQ0ksMEJBQU0sT0FBTixJQUFpQixLQUFqQjtBQURKLGlCQTNIUyxPQTZIWSxTQUFLLE1BQUwsRUFBYyxTQUFLLE1BQUwsQ0FBYSxLQUFiLEVBQW9CLE1BQXBCLENBQWQsQ0E3SFo7QUFBQTtBQTZITCx3QkE3SEs7O0FBOEhULHVCQUFPO0FBQ0gsNEJBQVEsUUFETDtBQUVILDBCQUFNLFNBQVMsSUFBVCxFQUFlLFFBQWY7QUFGSCxpQkFBUDtBQTlIUztBQUFBO0FBb0lQLG1CQXBJTyx1QkFvSU0sRUFwSU47QUFBQTtBQUFBO0FBQUE7O0FBb0lVLGtCQXBJVixtRkFvSW1CLEVBcEluQjs7QUFxSVQsbUJBQU8sU0FBSyxzQkFBTCxDQUE2QixTQUFLLE1BQUwsQ0FBYTtBQUM3QyxzQkFBTTtBQUR1QyxhQUFiLEVBRWpDLE1BRmlDLENBQTdCLENBQVA7QUFySVM7QUEwSVAsZUExSU8sbUJBMElFLElBMUlGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUEwSVEsbUJBMUlSLG1GQTBJYyxRQTFJZDtBQTBJd0Isc0JBMUl4QixtRkEwSWlDLEtBMUlqQztBQTBJd0Msc0JBMUl4QyxtRkEwSWlELEVBMUlqRDtBQTBJcUQsdUJBMUlyRCxtRkEwSStELFNBMUkvRDtBQTBJMEUsb0JBMUkxRSxtRkEwSWlGLFNBMUlqRjtBQTJJTCxtQkEzSUssR0EySUMsU0FBSyxJQUFMLENBQVUsS0FBVixJQUFtQixHQUFuQixHQUF5QixTQUFLLE9BQTlCLEdBQXdDLEdBQXhDLEdBQThDLElBM0kvQzs7QUE0SVQsb0JBQUksT0FBTyxRQUFYLEVBQXFCO0FBQ2pCLDJCQUFPLE1BQU0sU0FBSyxTQUFMLENBQWdCLE1BQWhCLENBQWI7QUFDSCxpQkFGRCxNQUVPO0FBQ0gsd0JBQUksQ0FBQyxTQUFLLEdBQVY7QUFDSSw4QkFBTSxJQUFJLG1CQUFKLENBQXlCLFNBQUssRUFBTCxHQUFVLGFBQVYsR0FBMEIsU0FBSyxFQUEvQixHQUFvQyxtQ0FBN0QsQ0FBTjtBQURKLHFCQUVJLEtBSEQsR0FHUyxTQUFLLEtBQUwsRUFIVDtBQUlDLDJCQUpELEdBSVcsQ0FBRSxNQUFNLFFBQU4sRUFBRixFQUFxQixTQUFLLEdBQTFCLEVBQStCLFNBQUssTUFBcEMsRUFBNkMsSUFBN0MsQ0FBbUQsRUFBbkQsQ0FKWDtBQUtDLDZCQUxELEdBS2EsU0FBSyxJQUFMLENBQVcsU0FBSyxNQUFMLENBQWEsT0FBYixDQUFYLEVBQWtDLFNBQUssTUFBTCxDQUFhLFNBQUssTUFBbEIsQ0FBbEMsQ0FMYjtBQU1DLHlCQU5ELEdBTVMsU0FBSyxNQUFMLENBQWE7QUFDckIsK0JBQU8sU0FBSyxNQURTO0FBRXJCLGlDQUFTLEtBRlk7QUFHckIscUNBQWE7QUFIUSxxQkFBYixFQUlULE1BSlMsQ0FOVDs7QUFXSCwyQkFBTyxTQUFLLElBQUwsQ0FBVyxLQUFYLENBQVA7QUFDQSw4QkFBVTtBQUNOLHdDQUFnQixrQkFEVjtBQUVOLDBDQUFrQixLQUFLO0FBRmpCLHFCQUFWO0FBSUg7QUE5SlEsdUJBK0pZLFNBQUssS0FBTCxDQUFZLEdBQVosRUFBaUIsTUFBakIsRUFBeUIsT0FBekIsRUFBa0MsSUFBbEMsQ0EvSlo7QUFBQTtBQStKTCx3QkEvSks7O0FBZ0tULG9CQUFJLFdBQVcsUUFBZjtBQUNJLDBCQUFNLElBQUksYUFBSixDQUFtQixTQUFLLEVBQUwsR0FBVSxHQUFWLEdBQWdCLFNBQUssSUFBTCxDQUFXLFFBQVgsQ0FBbkMsQ0FBTjtBQURKLGlCQUVBLE9BQU8sUUFBUDtBQWxLUztBQUFBO0FBQUEsS0FBakI7O0FBc0tBOztBQUVBLFFBQUksU0FBUzs7QUFFVCxjQUFNLFFBRkc7QUFHVCxnQkFBUSxRQUhDO0FBSVQscUJBQWEsQ0FBRSxJQUFGLEVBQVEsSUFBUixFQUFjLElBQWQsQ0FKSjtBQUtULG1CQUFXLEdBTEY7QUFNVCxxQkFBYSxJQU5KO0FBT1QsMkJBQW1CLElBUFY7QUFRVCxnQkFBUTtBQUNKLG9CQUFRLHFHQURKO0FBRUosbUJBQU8sd0JBRkg7QUFHSixtQkFBTyx3QkFISDtBQUlKLG1CQUFPO0FBSkgsU0FSQztBQWNULGVBQU87QUFDSCxzQkFBVTtBQUNOLHVCQUFPLENBQ0gsVUFERyxFQUVILGVBRkcsRUFHSCw0QkFIRyxFQUlILFlBSkcsRUFLSCx1QkFMRztBQURELGFBRFA7QUFVSCx1QkFBVztBQUNQLHVCQUFPLENBQ0gsa0JBREcsRUFFSCxpQkFGRyxFQUdILGVBSEcsRUFJSCxlQUpHLEVBS0gsV0FMRyxFQU1ILE9BTkcsRUFPSCxRQVBHLEVBUUgsYUFSRyxFQVNILG9CQVRHLEVBVUgsUUFWRyxFQVdILG1CQVhHLEVBWUgsa0JBWkcsRUFhSCx1QkFiRyxDQURBO0FBZ0JQLHdCQUFRLENBQ0osZUFESSxFQUVKLFdBRkksRUFHSixRQUhJLENBaEJEO0FBcUJQLHVCQUFPLENBQ0gsc0JBREcsRUFFSCxZQUZHLEVBR0gsYUFIRyxFQUlILG9CQUpHLEVBS0gsYUFMRyxFQU1ILG1CQU5HLEVBT0gsa0JBUEcsRUFRSCx1QkFSRztBQXJCQTtBQVZSLFNBZEU7O0FBMERILG9CQTFERztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQTJEZSxTQUFLLGlCQUFMLEVBM0RmO0FBQUE7QUEyREQsdUJBM0RDO0FBNERELHNCQTVEQyxHQTREUSxFQTVEUjs7QUE2REwscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxRQUFRLE1BQTVCLEVBQW9DLEdBQXBDLEVBQXlDO0FBQ2pDLDBCQURpQyxHQUN4QixRQUFRLENBQVIsQ0FEd0I7QUFFakMsc0JBRmlDLEdBRTVCLE9BQU8sSUFBUCxDQUY0QjtBQUdqQyx3QkFIaUMsR0FHMUIsT0FBTyxlQUFQLENBSDBCO0FBSWpDLHlCQUppQyxHQUl6QixPQUFPLGlCQUFQLENBSnlCO0FBS2pDLDBCQUxpQyxHQUt4QixPQUFPLEdBQVAsR0FBYSxLQUxXOztBQU1yQywyQkFBTyxJQUFQLENBQWE7QUFDVCw4QkFBTSxFQURHO0FBRVQsa0NBQVUsTUFGRDtBQUdULGdDQUFRLElBSEM7QUFJVCxpQ0FBUyxLQUpBO0FBS1QsZ0NBQVE7QUFMQyxxQkFBYjtBQU9IO0FBQ0QsdUJBQU8sTUFBUDtBQTNFSztBQUFBO0FBOEVILG9CQTlFRztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkErRUMsU0FBSyxXQUFMLEVBL0VEO0FBQUE7QUFBQSx1QkFnRmdCLFNBQUsseUJBQUwsRUFoRmhCO0FBQUE7QUFnRkQsd0JBaEZDO0FBaUZELHNCQWpGQyxHQWlGUSxFQUFFLFFBQVEsUUFBVixFQWpGUjs7QUFrRkwscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxTQUFTLE1BQTdCLEVBQXFDLEdBQXJDLEVBQTBDO0FBQ2xDLDJCQURrQyxHQUN4QixTQUFTLENBQVQsQ0FEd0I7QUFFbEMsNEJBRmtDLEdBRXZCLFFBQVEsVUFBUixDQUZ1QjtBQUdsQyx5QkFIa0MsR0FHMUIsV0FBWSxRQUFRLFNBQVIsQ0FBWixDQUgwQjtBQUlsQywyQkFKa0MsR0FJeEI7QUFDVixnQ0FBUSxLQURFO0FBRVYsZ0NBQVEsU0FGRTtBQUdWLGlDQUFTO0FBSEMscUJBSndCOztBQVN0QywyQkFBTyxRQUFQLElBQW1CLE9BQW5CO0FBQ0g7QUFDRCx1QkFBTyxNQUFQO0FBN0ZLO0FBQUE7QUFnR0gsc0JBaEdHLDBCQWdHYSxNQWhHYjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBZ0dxQixzQkFoR3JCLG1GQWdHOEIsRUFoRzlCO0FBQUEsdUJBaUdDLFNBQUssV0FBTCxFQWpHRDtBQUFBO0FBQUEsdUJBa0dpQixTQUFLLDhCQUFMLENBQXFDLFNBQUssTUFBTCxDQUFhO0FBQ3BFLDBCQUFNLFNBQUssUUFBTCxDQUFlLE1BQWY7QUFEOEQsaUJBQWIsRUFFeEQsTUFGd0QsQ0FBckMsQ0FsR2pCO0FBQUE7QUFrR0QseUJBbEdDO0FBcUdELHlCQXJHQyxHQXFHVyxTQUFLLFlBQUwsRUFyR1g7QUFzR0Qsc0JBdEdDLEdBc0dRO0FBQ1QsNEJBQVEsRUFEQztBQUVULDRCQUFRLEVBRkM7QUFHVCxpQ0FBYSxTQUhKO0FBSVQsZ0NBQVksU0FBSyxPQUFMLENBQWMsU0FBZDtBQUpILGlCQXRHUjtBQTRHRCxxQkE1R0MsR0E0R08sRUFBRSxRQUFRLGtCQUFWLEVBQThCLFFBQVEsbUJBQXRDLEVBNUdQO0FBNkdELG9CQTdHQyxHQTZHTSxPQUFPLElBQVAsQ0FBYSxLQUFiLENBN0dOOztBQThHTCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLEtBQUssTUFBekIsRUFBaUMsR0FBakMsRUFBc0M7QUFDOUIsdUJBRDhCLEdBQ3hCLEtBQUssQ0FBTCxDQUR3QjtBQUU5Qix3QkFGOEIsR0FFdkIsTUFBTSxHQUFOLENBRnVCO0FBRzlCLDBCQUg4QixHQUdyQixVQUFVLElBQVYsQ0FIcUI7O0FBSWxDLHlCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksT0FBTyxNQUEzQixFQUFtQyxHQUFuQyxFQUF3QztBQUNoQyw2QkFEZ0MsR0FDeEIsT0FBTyxDQUFQLENBRHdCO0FBRWhDLDZCQUZnQyxHQUV4QixXQUFZLE1BQU0sQ0FBTixDQUFaLENBRndCO0FBR2hDLDhCQUhnQyxHQUd2QixXQUFZLE1BQU0sQ0FBTixDQUFaLENBSHVCOztBQUlwQywrQkFBTyxHQUFQLEVBQVksSUFBWixDQUFrQixDQUFFLEtBQUYsRUFBUyxNQUFULENBQWxCO0FBQ0g7QUFDSjtBQUNELHVCQUFPLE1BQVA7QUF6SEs7QUFBQTtBQTRIVCxtQkE1SFMsdUJBNEhJLE1BNUhKLEVBNEhZLE1BNUhaLEVBNEhvQjtBQUN6QixnQkFBSSxZQUFZLEtBQUssWUFBTCxFQUFoQjtBQUNBLGdCQUFJLE9BQU8sU0FBWDtBQUNBLGdCQUFJLHVCQUF1QixNQUEzQixFQUFtQztBQUMvQixvQkFBSSxPQUFPLG1CQUFQLENBQUosRUFBaUM7QUFDN0Isd0JBQUksU0FBUyxPQUFPLG1CQUFQLEVBQTRCLE1BQXpDO0FBQ0Esd0JBQUksU0FBUyxDQUFiLEVBQ0ksT0FBTyxXQUFZLE9BQU8sbUJBQVAsQ0FBWixDQUFQO0FBQ1A7QUFDSjtBQUNELG1CQUFPO0FBQ0gsNkJBQWEsU0FEVjtBQUVILDRCQUFZLEtBQUssT0FBTCxDQUFjLFNBQWQsQ0FGVDtBQUdILHdCQUFRLFdBQVksT0FBTyxpQkFBUCxDQUFaLENBSEw7QUFJSCx1QkFBTyxXQUFZLE9BQU8sZ0JBQVAsQ0FBWixDQUpKO0FBS0gsdUJBQU8sV0FBWSxPQUFPLFlBQVAsQ0FBWixDQUxKO0FBTUgsdUJBQU8sV0FBWSxPQUFPLFlBQVAsQ0FBWixDQU5KO0FBT0gsd0JBQVEsU0FQTDtBQVFILHdCQUFRLFNBUkw7QUFTSCx5QkFBUyxTQVROO0FBVUgseUJBQVMsU0FWTjtBQVdILHdCQUFRLElBWEw7QUFZSCwwQkFBVSxTQVpQO0FBYUgsOEJBQWMsU0FiWDtBQWNILDJCQUFXLFNBZFI7QUFlSCw4QkFBYyxXQUFZLE9BQU8sWUFBUCxDQUFaLENBZlg7QUFnQkgsK0JBQWUsU0FoQlo7QUFpQkgsd0JBQVE7QUFqQkwsYUFBUDtBQW1CSCxTQXpKUTtBQTJKSCxvQkEzSkc7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkE0SkMsU0FBSyxXQUFMLEVBNUpEO0FBQUE7QUFBQSx1QkE2SmUsU0FBSyxpQkFBTCxFQTdKZjtBQUFBO0FBNkpELHVCQTdKQztBQThKRCxzQkE5SkMsR0E4SlEsRUE5SlI7O0FBK0pMLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksUUFBUSxNQUE1QixFQUFvQyxHQUFwQyxFQUF5QztBQUNqQywwQkFEaUMsR0FDeEIsUUFBUSxDQUFSLENBRHdCO0FBRWpDLHdCQUZpQyxHQUUxQixPQUFPLGVBQVAsQ0FGMEI7QUFHakMseUJBSGlDLEdBR3pCLE9BQU8saUJBQVAsQ0FIeUI7QUFJakMsMEJBSmlDLEdBSXhCLE9BQU8sR0FBUCxHQUFhLEtBSlc7QUFLakMsMEJBTGlDLEdBS3hCLFNBQUssT0FBTCxDQUFhLE1BQWIsQ0FMd0I7O0FBTXJDLDJCQUFPLE1BQVAsSUFBaUIsU0FBSyxXQUFMLENBQWtCLE1BQWxCLEVBQTBCLE1BQTFCLENBQWpCO0FBQ0g7QUFDRCx1QkFBTyxNQUFQO0FBdktLO0FBQUE7QUEwS0gsbUJBMUtHLHVCQTBLVSxNQTFLVjtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQTJLQyxTQUFLLFdBQUwsRUEzS0Q7QUFBQTtBQTRLRCxpQkE1S0MsR0E0S0csU0FBSyxNQUFMLENBQWEsTUFBYixDQTVLSDtBQUFBLHVCQTZLYyxTQUFLLG1CQUFMLENBQTBCO0FBQ3pDLDBCQUFNLEVBQUUsSUFBRjtBQURtQyxpQkFBMUIsQ0E3S2Q7QUFBQTtBQTZLRCxzQkE3S0M7O0FBZ0xMLHVCQUFPLFNBQUssV0FBTCxDQUFrQixNQUFsQixFQUEwQixDQUExQixDQUFQO0FBaExLO0FBQUE7QUFtTEgsbUJBbkxHLHVCQW1MVSxNQW5MVjtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQW1Ma0Isc0JBbkxsQixtRkFtTDJCLEVBbkwzQjtBQUFBLHVCQW9MQyxTQUFLLFdBQUwsRUFwTEQ7QUFBQTtBQXFMTCx1QkFBTyxTQUFLLG1CQUFMLENBQTBCLFNBQUssTUFBTCxDQUFhO0FBQzFDLGtDQUFjLFNBQUssUUFBTCxDQUFlLE1BQWY7QUFENEIsaUJBQWIsRUFFOUIsTUFGOEIsQ0FBMUIsQ0FBUDtBQXJMSztBQUFBO0FBMExILG1CQTFMRyx1QkEwTFUsTUExTFYsRUEwTGtCLElBMUxsQixFQTBMd0IsSUExTHhCLEVBMEw4QixNQTFMOUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUEwTHNDLHFCQTFMdEMsbUZBMEw4QyxTQTFMOUM7QUEwTHlELHNCQTFMekQsbUZBMExrRSxFQTFMbEU7QUFBQSx1QkEyTEMsU0FBSyxXQUFMLEVBM0xEO0FBQUE7QUE0TEQscUJBNUxDLEdBNExPO0FBQ1Isa0NBQWMsSUFETjtBQUVSLGtDQUFjLFNBQUssUUFBTCxDQUFlLE1BQWYsQ0FGTjtBQUdSLDRCQUFRLElBSEE7QUFJUixnQ0FBWTtBQUpKLGlCQTVMUDs7QUFrTUwsb0JBQUksUUFBUSxPQUFaO0FBQ0ksMEJBQU0sT0FBTixJQUFpQixLQUFqQjtBQURKLGlCQWxNSyxPQW9NZ0IsU0FBSyxpQkFBTCxDQUF3QixTQUFLLE1BQUwsQ0FBYTtBQUN0RCw2QkFBUztBQUQ2QyxpQkFBYixFQUUxQyxNQUYwQyxDQUF4QixDQXBNaEI7QUFBQTtBQW9NRCx3QkFwTUM7O0FBdU1MLHVCQUFPO0FBQ0gsNEJBQVEsUUFETDtBQUVILDBCQUFNLFNBQVMsSUFBVCxFQUFlLFFBQWY7QUFGSCxpQkFBUDtBQXZNSztBQUFBO0FBNk1ILG1CQTdNRyx1QkE2TVUsRUE3TVY7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUE2TWMsc0JBN01kLG1GQTZNdUIsRUE3TXZCO0FBQUEsdUJBOE1DLFNBQUssV0FBTCxFQTlNRDtBQUFBO0FBK01MLHVCQUFPLFNBQUssd0JBQUwsQ0FBK0IsU0FBSyxNQUFMLENBQWE7QUFDL0MsMEJBQU07QUFEeUMsaUJBQWIsRUFFbkMsTUFGbUMsQ0FBL0IsQ0FBUDtBQS9NSztBQUFBO0FBb05ILGVBcE5HLG1CQW9OTSxJQXBOTjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQW9OWSxtQkFwTlosbUZBb05rQixRQXBObEI7QUFvTjRCLHNCQXBONUIsbUZBb05xQyxLQXBOckM7QUFvTjRDLHNCQXBONUMsbUZBb05xRCxFQXBOckQ7QUFvTnlELHVCQXBOekQsbUZBb05tRSxTQXBObkU7QUFvTjhFLG9CQXBOOUUsbUZBb05xRixTQXBOckY7QUFxTkQsbUJBck5DLEdBcU5LLE1BQU0sU0FBSyxhQUFMLENBQW9CLElBQXBCLEVBQTBCLE1BQTFCLENBck5YO0FBc05ELHFCQXROQyxHQXNOTyxTQUFLLElBQUwsQ0FBVyxNQUFYLEVBQW1CLFNBQUssYUFBTCxDQUFvQixJQUFwQixDQUFuQixDQXROUDs7QUF1TkwsMEJBQVU7QUFDTiw0Q0FBd0IsU0FBSyxPQUR2QjtBQUVOLG9DQUFnQjtBQUZWLGlCQUFWO0FBSUEsb0JBQUksT0FBTyxRQUFYLEVBQXFCO0FBQ2pCLHdCQUFJLE9BQU8sSUFBUCxDQUFhLEtBQWIsRUFBb0IsTUFBeEI7QUFDSSwrQkFBTyxNQUFNLFNBQUssU0FBTCxDQUFnQixLQUFoQixDQUFiO0FBREo7QUFFSCxpQkFIRCxNQUdPO0FBQ0MseUJBREQsR0FDUyxTQUFLLEtBQUwsRUFEVDtBQUVDLDJCQUZELEdBRVc7QUFDVixnQ0FBUSxHQURFO0FBRVYsaUNBQVMsS0FGQztBQUdWLG9DQUFZLFNBQUssTUFIUDtBQUlWLCtCQUFPLEtBQUssS0FBTCxDQUFZLFFBQVEsSUFBcEIsQ0FKRyxDQUl3QjtBQUp4QixxQkFGWDs7QUFRSCx3QkFBSSxPQUFPLElBQVAsQ0FBYSxLQUFiLEVBQW9CLE1BQXhCO0FBQ0ksK0JBQU8sU0FBSyxJQUFMLENBQVcsS0FBWCxDQUFQO0FBREoscUJBRUEsUUFBUSxlQUFSLElBQTJCLFNBQUssR0FBTCxDQUFVLE9BQVYsRUFBbUIsU0FBSyxNQUF4QixDQUEzQjtBQUNIO0FBek9JLHVCQTBPZ0IsU0FBSyxLQUFMLENBQVksU0FBSyxJQUFMLENBQVUsS0FBVixJQUFtQixHQUEvQixFQUFvQyxNQUFwQyxFQUE0QyxPQUE1QyxFQUFxRCxJQUFyRCxDQTFPaEI7QUFBQTtBQTBPRCx3QkExT0M7O0FBMk9MLG9CQUFJLGFBQWEsUUFBakI7QUFDSSwwQkFBTSxJQUFJLGFBQUosQ0FBbUIsU0FBSyxFQUFMLEdBQVUsR0FBVixHQUFnQixTQUFLLElBQUwsQ0FBVyxRQUFYLENBQW5DLENBQU47QUFESixpQkFFQSxPQUFPLFFBQVA7QUE3T0s7QUFBQTtBQUFBLEtBQWI7O0FBaVBBOztBQUVBLFFBQUksZUFBZTs7QUFFZixjQUFNLGNBRlM7QUFHZixnQkFBUSxjQUhPO0FBSWYscUJBQWEsSUFKRSxFQUlJO0FBQ25CLHFCQUFhLElBTEU7QUFNZiwyQkFBbUIsSUFOSjtBQU9mLGdCQUFRO0FBQ0osb0JBQVEscUdBREo7QUFFSixtQkFBTyxrQ0FGSDtBQUdKLG1CQUFPLDhCQUhIO0FBSUosbUJBQU87QUFKSCxTQVBPO0FBYWYsZUFBTztBQUNILHNCQUFVO0FBQ04sdUJBQU8sQ0FDSCxTQURHLEVBRUgsZ0JBRkcsRUFHSCxRQUhHLEVBSUgsZUFKRyxFQUtILGlCQUxHO0FBREQsYUFEUDtBQVVILHVCQUFXO0FBQ1Asd0JBQVEsQ0FDSixvQkFESSxFQUVKLGFBRkksRUFHSixvQkFISSxFQUlKLFlBSkksRUFLSixjQUxJLEVBTUosWUFOSSxFQU9KLFVBUEk7QUFERDtBQVZSLFNBYlE7O0FBb0NULG9CQXBDUztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQXFDUyxTQUFLLGdCQUFMLEVBckNUO0FBQUE7QUFxQ1AsdUJBckNPO0FBc0NQLHNCQXRDTyxHQXNDRSxFQXRDRjs7QUF1Q1gscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxRQUFRLE1BQTVCLEVBQW9DLEdBQXBDLEVBQXlDO0FBQ2pDLDBCQURpQyxHQUN4QixRQUFRLENBQVIsQ0FEd0I7QUFFakMsd0JBRmlDLEdBRTFCLE9BQU8sQ0FBUCxDQUYwQjtBQUdqQyx5QkFIaUMsR0FHekIsT0FBTyxDQUFQLENBSHlCO0FBSWpDLDBCQUppQyxHQUl4QixPQUFPLEdBQVAsR0FBYSxLQUpXO0FBS2pDLHNCQUxpQyxHQUs1QixNQUw0Qjs7QUFNckMsMkJBQU8sSUFBUCxDQUFhO0FBQ1QsOEJBQU0sRUFERztBQUVULGtDQUFVLE1BRkQ7QUFHVCxnQ0FBUSxJQUhDO0FBSVQsaUNBQVMsS0FKQTtBQUtULGdDQUFRO0FBTEMscUJBQWI7QUFPSDtBQUNELHVCQUFPLE1BQVA7QUFyRFc7QUFBQTtBQXdEVCxvQkF4RFM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBeURMLFNBQUssV0FBTCxFQXpESztBQUFBO0FBQUEsdUJBMERVLFNBQUssdUJBQUwsRUExRFY7QUFBQTtBQTBEUCx3QkExRE87QUEyRFAsc0JBM0RPLEdBMkRFLEVBQUUsUUFBUSxRQUFWLEVBM0RGOztBQTREWCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFNBQVMsTUFBN0IsRUFBcUMsR0FBckMsRUFBMEM7QUFDbEMsMkJBRGtDLEdBQ3hCLFNBQVMsQ0FBVCxDQUR3QjtBQUVsQyw0QkFGa0MsR0FFdkIsUUFBUSxVQUFSLENBRnVCO0FBR2xDLDZCQUhrQyxHQUd0QixTQUFTLFNBSGE7QUFJbEMsd0JBSmtDLEdBSTNCLFdBQVksUUFBUSxXQUFSLENBQVosQ0FKMkI7QUFLbEMsd0JBTGtDLEdBSzNCLFdBQVksUUFBUSxhQUFSLENBQVosQ0FMMkI7QUFNbEMseUJBTmtDLEdBTTFCLFNBQUssR0FBTCxDQUFVLElBQVYsRUFBZ0IsSUFBaEIsQ0FOMEI7QUFPbEMsMkJBUGtDLEdBT3hCO0FBQ1YsZ0NBQVEsSUFERTtBQUVWLGdDQUFRLElBRkU7QUFHVixpQ0FBUztBQUhDLHFCQVB3Qjs7QUFZdEMsMkJBQU8sUUFBUCxJQUFtQixPQUFuQjtBQUNIO0FBQ0QsdUJBQU8sTUFBUDtBQTFFVztBQUFBO0FBNkVULHNCQTdFUywwQkE2RU8sTUE3RVA7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQTZFZSxzQkE3RWYsbUZBNkV3QixFQTdFeEI7QUFBQSx1QkE4RUwsU0FBSyxXQUFMLEVBOUVLO0FBQUE7QUFBQSx1QkErRVcsU0FBSyxtQkFBTCxDQUEwQixTQUFLLE1BQUwsQ0FBYTtBQUN6RCw4QkFBVSxTQUFLLFFBQUwsQ0FBZSxNQUFmO0FBRCtDLGlCQUFiLEVBRTdDLE1BRjZDLENBQTFCLENBL0VYO0FBQUE7QUErRVAseUJBL0VPO0FBa0ZQLHlCQWxGTyxHQWtGSyxTQUFLLFlBQUwsRUFsRkw7QUFtRlAsc0JBbkZPLEdBbUZFO0FBQ1QsNEJBQVEsRUFEQztBQUVULDRCQUFRLEVBRkM7QUFHVCxpQ0FBYSxTQUhKO0FBSVQsZ0NBQVksU0FBSyxPQUFMLENBQWMsU0FBZDtBQUpILGlCQW5GRjtBQXlGUCxxQkF6Rk8sR0F5RkMsRUFBRSxRQUFRLFdBQVYsRUFBdUIsUUFBUSxZQUEvQixFQXpGRDtBQTBGUCxvQkExRk8sR0EwRkEsT0FBTyxJQUFQLENBQWEsS0FBYixDQTFGQTs7QUEyRlgscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxLQUFLLE1BQXpCLEVBQWlDLEdBQWpDLEVBQXNDO0FBQzlCLHVCQUQ4QixHQUN4QixLQUFLLENBQUwsQ0FEd0I7QUFFOUIsd0JBRjhCLEdBRXZCLE1BQU0sR0FBTixDQUZ1QjtBQUc5QiwwQkFIOEIsR0FHckIsVUFBVSxJQUFWLENBSHFCOztBQUlsQyx5QkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLE9BQU8sTUFBM0IsRUFBbUMsR0FBbkMsRUFBd0M7QUFDaEMsNkJBRGdDLEdBQ3hCLE9BQU8sQ0FBUCxDQUR3QjtBQUVoQyw2QkFGZ0MsR0FFeEIsV0FBWSxNQUFNLE9BQU4sQ0FBWixDQUZ3QjtBQUdoQyw4QkFIZ0MsR0FHdkIsV0FBWSxNQUFNLFFBQU4sQ0FBWixDQUh1Qjs7QUFJcEMsK0JBQU8sR0FBUCxFQUFZLElBQVosQ0FBa0IsQ0FBRSxLQUFGLEVBQVMsTUFBVCxDQUFsQjtBQUNIO0FBQ0o7QUFDRCx1QkFBTyxNQUFQO0FBdEdXO0FBQUE7QUF5R2YsbUJBekdlLHVCQXlHRixNQXpHRSxFQXlHTSxNQXpHTixFQXlHYztBQUN6QixnQkFBSSxZQUFZLEtBQUssWUFBTCxFQUFoQjtBQUNBLGdCQUFJLE1BQU0sU0FBVjtBQUNBLGdCQUFJLE1BQU0sU0FBVjtBQUNBLGdCQUFJLFNBQVMsTUFBYixFQUNJLElBQUksT0FBTyxLQUFQLENBQUosRUFDSSxNQUFNLFdBQVksT0FBTyxLQUFQLENBQVosQ0FBTjtBQUNSLGdCQUFJLFNBQVMsTUFBYixFQUNJLElBQUksT0FBTyxLQUFQLENBQUosRUFDSSxNQUFNLFdBQVksT0FBTyxLQUFQLENBQVosQ0FBTjtBQUNSLG1CQUFPO0FBQ0gsNkJBQWEsU0FEVjtBQUVILDRCQUFZLEtBQUssT0FBTCxDQUFjLFNBQWQsQ0FGVDtBQUdILHdCQUFRLFNBSEw7QUFJSCx1QkFBTyxTQUpKO0FBS0gsdUJBQU8sR0FMSjtBQU1ILHVCQUFPLEdBTko7QUFPSCx3QkFBUSxTQVBMO0FBUUgsd0JBQVEsU0FSTDtBQVNILHlCQUFTLFNBVE47QUFVSCx5QkFBUyxTQVZOO0FBV0gsd0JBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQVhMO0FBWUgsMEJBQVUsV0FBWSxPQUFPLGVBQVAsQ0FBWixDQVpQO0FBYUgsOEJBQWMsU0FiWDtBQWNILDJCQUFXLFNBZFI7QUFlSCw4QkFBYyxTQWZYO0FBZ0JILCtCQUFlLFdBQVksT0FBTyxZQUFQLENBQVosQ0FoQlo7QUFpQkgsd0JBQVE7QUFqQkwsYUFBUDtBQW1CSCxTQXRJYztBQXdJVCxvQkF4SVM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQXlJTCxTQUFLLFdBQUwsRUF6SUs7QUFBQTtBQUFBLHVCQTBJVSxTQUFLLGVBQUwsRUExSVY7QUFBQTtBQTBJUCx3QkExSU87QUEySVAsdUJBM0lPLEdBMklHLFNBQUssT0FBTCxDQUFjLFFBQWQsRUFBd0IsUUFBeEIsQ0EzSUg7QUE0SVAsbUJBNUlPLEdBNElELE9BQU8sSUFBUCxDQUFhLE9BQWIsQ0E1SUM7QUE2SVAsc0JBN0lPLEdBNklFLEVBN0lGOztBQThJWCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLElBQUksTUFBeEIsRUFBZ0MsR0FBaEMsRUFBcUM7QUFDN0Isc0JBRDZCLEdBQ3hCLElBQUksQ0FBSixDQUR3QjtBQUU3QiwwQkFGNkIsR0FFcEIsU0FBSyxhQUFMLENBQW1CLEVBQW5CLENBRm9CO0FBRzdCLDBCQUg2QixHQUdwQixPQUFPLFFBQVAsQ0FIb0I7QUFJN0IsMEJBSjZCLEdBSXBCLFFBQVEsRUFBUixDQUpvQjs7QUFLakMsMkJBQU8sTUFBUCxJQUFpQixTQUFLLFdBQUwsQ0FBa0IsTUFBbEIsRUFBMEIsTUFBMUIsQ0FBakI7QUFDSDtBQUNELHVCQUFPLE1BQVA7QUFySlc7QUFBQTtBQXdKVCxtQkF4SlMsdUJBd0pJLE1BeEpKO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBeUpMLFNBQUssV0FBTCxFQXpKSztBQUFBO0FBMEpQLGlCQTFKTyxHQTBKSCxTQUFLLE1BQUwsQ0FBYSxNQUFiLENBMUpHO0FBQUEsdUJBMkpRLFNBQUssb0JBQUwsQ0FBMkI7QUFDMUMsOEJBQVUsU0FBSyxRQUFMLENBQWUsTUFBZjtBQURnQyxpQkFBM0IsQ0EzSlI7QUFBQTtBQTJKUCxzQkEzSk87O0FBOEpYLHVCQUFPLFNBQUssV0FBTCxDQUFrQixNQUFsQixFQUEwQixDQUExQixDQUFQO0FBOUpXO0FBQUE7QUFpS1QsbUJBaktTLHVCQWlLSSxNQWpLSjtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQWlLWSxzQkFqS1osbUZBaUtxQixFQWpLckI7QUFBQSx1QkFrS0wsU0FBSyxXQUFMLEVBbEtLO0FBQUE7QUFtS1gsdUJBQU8sU0FBSyxxQkFBTCxDQUE0QixTQUFLLE1BQUwsQ0FBYTtBQUM1Qyw4QkFBVSxTQUFLLFFBQUwsQ0FBZSxNQUFmO0FBRGtDLGlCQUFiLEVBRWhDLE1BRmdDLENBQTVCLENBQVA7QUFuS1c7QUFBQTtBQXdLVCxtQkF4S1MsdUJBd0tJLE1BeEtKLEVBd0tZLElBeEtaLEVBd0trQixJQXhLbEIsRUF3S3dCLE1BeEt4QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBd0tnQyxxQkF4S2hDLG1GQXdLd0MsU0F4S3hDO0FBd0ttRCxzQkF4S25ELG1GQXdLNEQsRUF4SzVEO0FBQUEsdUJBeUtMLFNBQUssV0FBTCxFQXpLSztBQUFBO0FBMEtQLGlCQTFLTyxHQTBLSCxTQUFLLE1BQUwsQ0FBYSxNQUFiLENBMUtHO0FBMktQLHFCQTNLTyxHQTJLQztBQUNSLHVDQUFtQixFQUFFLE1BQUYsQ0FEWDtBQUVSLHlDQUFxQixFQUFFLE9BQUYsQ0FGYjtBQUdSLDRCQUFRLElBSEE7QUFJUiw4QkFBVTtBQUpGLGlCQTNLRDs7QUFpTFgsb0JBQUksUUFBUSxPQUFaO0FBQ0ksMEJBQU0sWUFBTixJQUFzQixLQUF0QjtBQURKLGlCQWpMVyxPQW1MVSxTQUFLLHFCQUFMLENBQTRCLFNBQUssTUFBTCxDQUFhLEtBQWIsRUFBb0IsTUFBcEIsQ0FBNUIsQ0FuTFY7QUFBQTtBQW1MUCx3QkFuTE87O0FBb0xYLHVCQUFPO0FBQ0gsNEJBQVEsUUFETDtBQUVILDBCQUFNLFNBQVMsUUFBVDtBQUZILGlCQUFQO0FBcExXO0FBQUE7QUEwTFQsbUJBMUxTLHVCQTBMSSxFQTFMSjtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQTBMUSxzQkExTFIsbUZBMExpQixFQTFMakI7QUFBQSx1QkEyTEwsU0FBSyxXQUFMLEVBM0xLO0FBQUE7QUE0TFgsdUJBQU8sU0FBSyxzQkFBTCxDQUE2QixTQUFLLE1BQUwsQ0FBYTtBQUM3QyxpQ0FBYTtBQURnQyxpQkFBYixFQUVqQyxNQUZpQyxDQUE3QixDQUFQO0FBNUxXO0FBQUE7QUFpTVQsZUFqTVMsbUJBaU1BLElBak1BO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQWlNTSxtQkFqTU4sbUZBaU1ZLFFBak1aO0FBaU1zQixzQkFqTXRCLG1GQWlNK0IsS0FqTS9CO0FBaU1zQyxzQkFqTXRDLG1GQWlNK0MsRUFqTS9DO0FBaU1tRCx1QkFqTW5ELG1GQWlNNkQsU0FqTTdEO0FBaU13RSxvQkFqTXhFLG1GQWlNK0UsU0FqTS9FO0FBa01QLG1CQWxNTyxHQWtNRCxTQUFLLElBQUwsQ0FBVSxLQUFWLElBQW1CLEdBQW5CLEdBQXlCLFNBQUssYUFBTCxDQUFvQixJQUFwQixFQUEwQixNQUExQixDQWxNeEI7QUFtTVAscUJBbk1PLEdBbU1DLFNBQUssSUFBTCxDQUFXLE1BQVgsRUFBbUIsU0FBSyxhQUFMLENBQW9CLElBQXBCLENBQW5CLENBbk1EOztBQW9NWCxvQkFBSSxPQUFPLFNBQVgsRUFBc0I7QUFDZCx5QkFEYyxHQUNOLFNBQUssS0FBTCxFQURNOztBQUVsQiw0QkFBUSxTQUFLLE1BQUwsQ0FBYTtBQUNqQiwrQkFBTyxTQUFLLE1BREs7QUFFakIsaUNBQVM7QUFGUSxxQkFBYixFQUdMLEtBSEssQ0FBUjtBQUlBLDJCQUFPLFNBQUssSUFBTCxDQUFXLEtBQVgsQ0FBUDtBQUNBLDhCQUFVO0FBQ04sd0NBQWdCLGtCQURWO0FBRU4sZ0NBQVEsU0FBSyxJQUFMLENBQVcsU0FBSyxNQUFMLENBQWEsSUFBYixDQUFYLEVBQStCLFNBQUssTUFBTCxDQUFhLFNBQUssTUFBbEIsQ0FBL0IsRUFBMEQsUUFBMUQ7QUFGRixxQkFBVjtBQUlIO0FBL01VLHVCQWdOVSxTQUFLLEtBQUwsQ0FBWSxHQUFaLEVBQWlCLE1BQWpCLEVBQXlCLE9BQXpCLEVBQWtDLElBQWxDLENBaE5WO0FBQUE7QUFnTlAsd0JBaE5PO0FBaU5YO0FBQ0E7O0FBQ0EsdUJBQU8sUUFBUDtBQW5OVztBQUFBO0FBQUEsS0FBbkI7O0FBdU5BOztBQUVBLFFBQUksYUFBYSxPQUFRLFVBQVIsRUFBb0I7QUFDakMsY0FBTSxZQUQyQjtBQUVqQyxnQkFBUSxZQUZ5QjtBQUdqQyxxQkFBYSxJQUhvQjtBQUlqQyxnQkFBUTtBQUNKLG9CQUFRLHFHQURKO0FBRUosbUJBQU87QUFDSCwwQkFBVSxnQ0FEUDtBQUVILDJCQUFXO0FBRlIsYUFGSDtBQU1KLG1CQUFPLHdCQU5IO0FBT0osbUJBQU87QUFQSCxTQUp5QjtBQWFqQyxtQkFBVyxnQkFic0I7QUFjakMsbUJBQVc7QUFDUCx1QkFBVyxFQUFFLE1BQU0sUUFBUixFQUFrQixVQUFVLFNBQTVCLEVBQXVDLFFBQVEsS0FBL0MsRUFBc0QsU0FBUyxLQUEvRCxFQUFzRSxZQUFZLENBQWxGLEVBQXFGLFVBQVUsWUFBL0Y7QUFESjtBQWRzQixLQUFwQixDQUFqQjs7QUFtQkE7O0FBRUEsUUFBSSxVQUFVOztBQUVWLGNBQU0sU0FGSTtBQUdWLGdCQUFRLGdCQUhFO0FBSVYscUJBQWEsSUFKSDtBQUtWLHFCQUFhLElBTEg7QUFNVixtQkFBVyxJQU5EO0FBT1YsMkJBQW1CLElBUFQ7QUFRVixnQkFBUTtBQUNKLG9CQUFRLHFHQURKO0FBRUosbUJBQU8sZ0NBRkg7QUFHSixtQkFBTyw0QkFISDtBQUlKLG1CQUFPLENBQ0gsa0RBREcsRUFFSCxxQ0FGRztBQUpILFNBUkU7QUFpQlYsZUFBTztBQUNILHNCQUFVO0FBQ04sdUJBQU8sQ0FDSCxzQkFERyxFQUVILG1CQUZHLEVBR0gsbUJBSEcsRUFJSCxlQUpHO0FBREQsYUFEUDtBQVNILHVCQUFXO0FBQ1AsdUJBQU8sQ0FDSCxVQURHLEVBRUgsZUFGRyxFQUdILFdBSEcsRUFJSCxnQkFKRyxFQUtILE9BTEcsRUFNSCxZQU5HLEVBT0gsbUJBUEcsRUFRSCx3QkFSRyxFQVNILDZCQVRHLEVBVUgsbUNBVkcsRUFXSCwyQkFYRyxFQVlILGdDQVpHLEVBYUgsY0FiRyxFQWNILG1CQWRHLEVBZUgsc0JBZkcsRUFnQkgsaUJBaEJHLENBREE7QUFtQlAsd0JBQVEsQ0FDSixlQURJLEVBRUosd0JBRkksQ0FuQkQ7QUF1QlAsMEJBQVUsQ0FDTiw2QkFETSxFQUVOLG1DQUZNO0FBdkJIO0FBVFIsU0FqQkc7O0FBd0RKLG9CQXhESTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQXlEYyxTQUFLLHFCQUFMLEVBekRkO0FBQUE7QUF5REYsdUJBekRFO0FBMERGLHNCQTFERSxHQTBETyxFQTFEUDs7QUEyRE4scUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxRQUFRLFNBQVIsRUFBbUIsTUFBdkMsRUFBK0MsR0FBL0MsRUFBb0Q7QUFDNUMsMEJBRDRDLEdBQ25DLFFBQVEsU0FBUixFQUFtQixDQUFuQixDQURtQztBQUU1QyxzQkFGNEMsR0FFdkMsT0FBTyxTQUFQLENBRnVDO0FBRzVDLHdCQUg0QyxHQUdyQyxHQUFHLEtBQUgsQ0FBVSxDQUFWLEVBQWEsQ0FBYixDQUhxQztBQUk1Qyx5QkFKNEMsR0FJcEMsR0FBRyxLQUFILENBQVUsQ0FBVixFQUFhLENBQWIsQ0FKb0M7QUFLNUMsMEJBTDRDLEdBS25DLE9BQU8sR0FBUCxHQUFhLEtBTHNCOztBQU1oRCwyQkFBTyxJQUFQLENBQWE7QUFDVCw4QkFBTSxFQURHO0FBRVQsa0NBQVUsTUFGRDtBQUdULGdDQUFRLElBSEM7QUFJVCxpQ0FBUyxLQUpBO0FBS1QsZ0NBQVE7QUFMQyxxQkFBYjtBQU9IO0FBQ0QsdUJBQU8sTUFBUDtBQXpFTTtBQUFBO0FBNEVKLG9CQTVFSTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkE2RUEsU0FBSyxXQUFMLEVBN0VBO0FBQUE7QUFBQSx1QkE4RWUsU0FBSyxrQkFBTCxFQTlFZjtBQUFBO0FBOEVGLHdCQTlFRTtBQStFRix3QkEvRUUsR0ErRVMsU0FBUyxVQUFULENBL0VUO0FBZ0ZGLHNCQWhGRSxHQWdGTyxFQUFFLFFBQVEsUUFBVixFQWhGUDs7QUFpRk4scUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxTQUFTLE1BQTdCLEVBQXFDLEdBQXJDLEVBQTBDO0FBQ2xDLDJCQURrQyxHQUN4QixTQUFTLENBQVQsQ0FEd0I7QUFFbEMsNEJBRmtDLEdBRXZCLFFBQVEsVUFBUixDQUZ1QjtBQUdsQyx3QkFIa0MsR0FHM0IsUUFBUSxpQkFBUixDQUgyQjtBQUlsQyx5QkFKa0MsR0FJMUIsUUFBUSxTQUFSLENBSjBCO0FBS2xDLHdCQUxrQyxHQUszQixRQUFRLElBTG1CO0FBTWxDLDJCQU5rQyxHQU14QjtBQUNWLGdDQUFRLElBREU7QUFFVixnQ0FBUSxJQUZFO0FBR1YsaUNBQVM7QUFIQyxxQkFOd0I7O0FBV3RDLDJCQUFPLFFBQVAsSUFBbUIsT0FBbkI7QUFDSDtBQUNELHVCQUFPLE1BQVA7QUE5Rk07QUFBQTtBQWlHSixzQkFqR0ksMEJBaUdZLE1BakdaO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQWlHb0Isc0JBakdwQixtRkFpRzZCLEVBakc3QjtBQUFBLHVCQWtHQSxTQUFLLFdBQUwsRUFsR0E7QUFBQTtBQUFBLHVCQW1HZ0IsU0FBSyx5QkFBTCxDQUFnQyxTQUFLLE1BQUwsQ0FBYTtBQUMvRCwwQkFBTSxTQUFLLFFBQUwsQ0FBZSxNQUFmO0FBRHlELGlCQUFiLEVBRW5ELE1BRm1ELENBQWhDLENBbkdoQjtBQUFBO0FBbUdGLHlCQW5HRTtBQXNHRix5QkF0R0UsR0FzR1UsU0FBSyxTQUFMLENBQWdCLFVBQVUsTUFBVixDQUFoQixDQXRHVjtBQXVHRixzQkF2R0UsR0F1R087QUFDVCw0QkFBUSxFQURDO0FBRVQsNEJBQVEsRUFGQztBQUdULGlDQUFhLFNBSEo7QUFJVCxnQ0FBWSxTQUFLLE9BQUwsQ0FBYyxTQUFkO0FBSkgsaUJBdkdQO0FBNkdGLHFCQTdHRSxHQTZHTSxDQUFFLE1BQUYsRUFBVSxNQUFWLENBN0dOOztBQThHTixxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLE1BQU0sTUFBMUIsRUFBa0MsR0FBbEMsRUFBdUM7QUFDL0Isd0JBRCtCLEdBQ3hCLE1BQU0sQ0FBTixDQUR3QjtBQUUvQiwwQkFGK0IsR0FFdEIsVUFBVSxJQUFWLENBRnNCOztBQUduQyx5QkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLE9BQU8sTUFBM0IsRUFBbUMsR0FBbkMsRUFBd0M7QUFDaEMsNkJBRGdDLEdBQ3hCLE9BQU8sQ0FBUCxDQUR3QjtBQUVoQyw2QkFGZ0MsR0FFeEIsV0FBWSxNQUFNLE9BQU4sQ0FBWixDQUZ3QjtBQUdoQyw4QkFIZ0MsR0FHdkIsV0FBWSxNQUFNLFFBQU4sQ0FBWixDQUh1Qjs7QUFJcEMsK0JBQU8sSUFBUCxFQUFhLElBQWIsQ0FBbUIsQ0FBRSxLQUFGLEVBQVMsTUFBVCxDQUFuQjtBQUNIO0FBQ0o7QUFDRCx1QkFBTyxNQUFQO0FBeEhNO0FBQUE7QUEySFYsbUJBM0hVLHVCQTJIRyxNQTNISCxFQTJIVyxNQTNIWCxFQTJIbUI7QUFDekIsZ0JBQUksWUFBWSxLQUFLLFNBQUwsQ0FBZ0IsT0FBTyxNQUFQLENBQWhCLENBQWhCO0FBQ0EsbUJBQU87QUFDSCw2QkFBYSxTQURWO0FBRUgsNEJBQVksS0FBSyxPQUFMLENBQWMsU0FBZCxDQUZUO0FBR0gsd0JBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQUhMO0FBSUgsdUJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQUpKO0FBS0gsdUJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQUxKO0FBTUgsdUJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQU5KO0FBT0gsd0JBQVEsU0FQTDtBQVFILHdCQUFRLFdBQVksT0FBTyxNQUFQLENBQVosQ0FSTDtBQVNILHlCQUFTLFdBQVksT0FBTyxPQUFQLENBQVosQ0FUTjtBQVVILHlCQUFTLFNBVk47QUFXSCx3QkFBUSxXQUFZLE9BQU8sTUFBUCxDQUFaLENBWEw7QUFZSCwwQkFBVSxTQVpQO0FBYUgsOEJBQWMsU0FiWDtBQWNILDJCQUFXLFNBZFI7QUFlSCw4QkFBYyxXQUFZLE9BQU8sZUFBUCxDQUFaLENBZlg7QUFnQkgsK0JBQWUsV0FBWSxPQUFPLFFBQVAsQ0FBWixDQWhCWjtBQWlCSCx3QkFBUTtBQWpCTCxhQUFQO0FBbUJILFNBaEpTO0FBa0pKLG9CQWxKSTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBbUpBLFNBQUssV0FBTCxFQW5KQTtBQUFBO0FBQUEsdUJBb0plLFNBQUsscUJBQUwsRUFwSmY7QUFBQTtBQW9KRix3QkFwSkU7QUFxSkYsdUJBckpFLEdBcUpRLFNBQUssT0FBTCxDQUFjLFNBQVMsU0FBVCxDQUFkLEVBQW1DLFNBQW5DLENBckpSO0FBc0pGLG1CQXRKRSxHQXNKSSxPQUFPLElBQVAsQ0FBYSxPQUFiLENBdEpKO0FBdUpGLHNCQXZKRSxHQXVKTyxFQXZKUDs7QUF3Sk4scUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxJQUFJLE1BQXhCLEVBQWdDLEdBQWhDLEVBQXFDO0FBQzdCLHNCQUQ2QixHQUN4QixJQUFJLENBQUosQ0FEd0I7QUFFN0IsMEJBRjZCLEdBRXBCLFNBQUssYUFBTCxDQUFtQixFQUFuQixDQUZvQjtBQUc3QiwwQkFINkIsR0FHcEIsT0FBTyxRQUFQLENBSG9CO0FBSTdCLDBCQUo2QixHQUlwQixRQUFRLEVBQVIsQ0FKb0I7O0FBS2pDLDJCQUFPLE1BQVAsSUFBaUIsU0FBSyxXQUFMLENBQWtCLE1BQWxCLEVBQTBCLE1BQTFCLENBQWpCO0FBQ0g7QUFDRCx1QkFBTyxNQUFQO0FBL0pNO0FBQUE7QUFrS0osbUJBbEtJLHVCQWtLUyxNQWxLVDtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQW1LQSxTQUFLLFdBQUwsRUFuS0E7QUFBQTtBQW9LRixpQkFwS0UsR0FvS0UsU0FBSyxNQUFMLENBQWEsTUFBYixDQXBLRjtBQUFBLHVCQXFLYSxTQUFLLHNCQUFMLENBQTZCO0FBQzVDLDBCQUFNLEVBQUUsSUFBRjtBQURzQyxpQkFBN0IsQ0FyS2I7QUFBQTtBQXFLRixzQkFyS0U7O0FBd0tOLHVCQUFPLFNBQUssV0FBTCxDQUFrQixNQUFsQixFQUEwQixDQUExQixDQUFQO0FBeEtNO0FBQUE7QUEyS0osbUJBM0tJLHVCQTJLUyxNQTNLVDtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQTJLaUIsc0JBM0tqQixtRkEySzBCLEVBM0sxQjtBQUFBLHVCQTRLQSxTQUFLLFdBQUwsRUE1S0E7QUFBQTtBQTZLTix1QkFBTyxTQUFLLHNCQUFMLENBQTZCLFNBQUssTUFBTCxDQUFhO0FBQzdDLDBCQUFNLFNBQUssUUFBTCxDQUFlLE1BQWY7QUFEdUMsaUJBQWIsRUFFakMsTUFGaUMsQ0FBN0IsQ0FBUDtBQTdLTTtBQUFBO0FBa0xKLG1CQWxMSSx1QkFrTFMsTUFsTFQsRUFrTGlCLElBbExqQixFQWtMdUIsSUFsTHZCLEVBa0w2QixNQWxMN0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBa0xxQyxxQkFsTHJDLG1GQWtMNkMsU0FsTDdDO0FBa0x3RCxzQkFsTHhELG1GQWtMaUUsRUFsTGpFO0FBQUEsdUJBbUxBLFNBQUssV0FBTCxFQW5MQTtBQUFBO0FBb0xOLG9CQUFJLFFBQVEsUUFBWjtBQUNJLDBCQUFNLElBQUksYUFBSixDQUFtQixTQUFLLEVBQUwsR0FBVSwyQkFBN0IsQ0FBTjtBQURKLGlCQXBMTSxPQXNMZSxTQUFLLDRCQUFMLENBQW1DLFNBQUssTUFBTCxDQUFhO0FBQ2pFLCtCQUFXLFNBQUssUUFBTCxDQUFlLE1BQWYsQ0FEc0Q7QUFFakUsNEJBQVEsSUFGeUQ7QUFHakUsOEJBQVUsTUFIdUQ7QUFJakUsNkJBQVM7QUFKd0QsaUJBQWIsRUFLckQsTUFMcUQsQ0FBbkMsQ0F0TGY7QUFBQTtBQXNMRix3QkF0TEU7O0FBNExOLHVCQUFPO0FBQ0gsNEJBQVEsUUFETDtBQUVILDBCQUFNLFNBQVMsSUFBVCxFQUFlLFFBQWY7QUFGSCxpQkFBUDtBQTVMTTtBQUFBO0FBa01KLG1CQWxNSSx1QkFrTVMsRUFsTVQ7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFrTWEsc0JBbE1iLG1GQWtNc0IsRUFsTXRCO0FBQUEsdUJBbU1BLFNBQUssV0FBTCxFQW5NQTtBQUFBO0FBb01OLHVCQUFPLFNBQUssZ0NBQUwsQ0FBdUMsU0FBSyxNQUFMLENBQWE7QUFDdkQsMEJBQU07QUFEaUQsaUJBQWIsRUFFM0MsTUFGMkMsQ0FBdkMsQ0FBUDtBQXBNTTtBQUFBO0FBeU1KLGVBek1JLG1CQXlNSyxJQXpNTDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQXlNVyxtQkF6TVgsbUZBeU1pQixRQXpNakI7QUF5TTJCLHNCQXpNM0IsbUZBeU1vQyxLQXpNcEM7QUF5TTJDLHNCQXpNM0MsbUZBeU1vRCxFQXpNcEQ7QUF5TXdELHVCQXpNeEQsbUZBeU1rRSxTQXpNbEU7QUF5TTZFLG9CQXpNN0UsbUZBeU1vRixTQXpNcEY7QUEwTUYsbUJBMU1FLEdBME1JLFNBQUssSUFBTCxDQUFVLEtBQVYsSUFBbUIsR0FBbkIsR0FBeUIsU0FBSyxPQUE5QixHQUF3QyxHQUF4QyxHQUE4QyxTQUFLLGFBQUwsQ0FBb0IsSUFBcEIsRUFBMEIsTUFBMUIsQ0ExTWxEO0FBMk1GLHFCQTNNRSxHQTJNTSxTQUFLLElBQUwsQ0FBVyxNQUFYLEVBQW1CLFNBQUssYUFBTCxDQUFvQixJQUFwQixDQUFuQixDQTNNTjs7QUE0TU4sb0JBQUksT0FBTyxTQUFYLEVBQXNCO0FBQ2QseUJBRGMsR0FDTixTQUFLLEtBQUwsR0FBYyxRQUFkLEVBRE07QUFFZCx3QkFGYyxHQUVQLFFBQVEsR0FGRDs7QUFHbEIsOEJBQVU7QUFDTixxQ0FBYSxTQUFLLE1BRFo7QUFFTix1Q0FBZSxLQUZUO0FBR04sc0NBQWMsU0FBSyxJQUFMLENBQVcsU0FBSyxNQUFMLENBQWEsSUFBYixDQUFYLEVBQStCLFNBQUssTUFBTCxDQUFhLFNBQUssTUFBbEIsQ0FBL0IsRUFBMEQsUUFBMUQ7QUFIUixxQkFBVjtBQUtBLHdCQUFJLE9BQU8sSUFBUCxDQUFhLEtBQWIsRUFBb0IsTUFBeEIsRUFBZ0M7QUFDNUIsK0JBQU8sU0FBSyxJQUFMLENBQVcsS0FBWCxDQUFQO0FBQ0EsZ0NBQVEsY0FBUixJQUEwQixrQkFBMUI7QUFDSDtBQUNKO0FBeE5LLHVCQXlOZSxTQUFLLEtBQUwsQ0FBWSxHQUFaLEVBQWlCLE1BQWpCLEVBQXlCLE9BQXpCLEVBQWtDLElBQWxDLENBek5mO0FBQUE7QUF5TkYsd0JBek5FOztBQTBOTixvQkFBSSxZQUFZLFFBQWhCO0FBQ0ksMEJBQU0sSUFBSSxhQUFKLENBQW1CLFNBQUssRUFBTCxHQUFVLEdBQVYsR0FBZ0IsU0FBSyxJQUFMLENBQVcsUUFBWCxDQUFuQyxDQUFOO0FBREosaUJBRUEsT0FBTyxRQUFQO0FBNU5NO0FBQUE7QUFBQSxLQUFkOztBQWdPQTs7QUFFQSxRQUFJLFVBQVUsT0FBUSxVQUFSLEVBQW9CO0FBQzlCLGNBQU0sU0FEd0I7QUFFOUIsZ0JBQVEsU0FGc0I7QUFHOUIscUJBQWEsSUFIaUI7QUFJOUIsZ0JBQVE7QUFDSixvQkFBUSxxR0FESjtBQUVKLG1CQUFPO0FBQ0gsMEJBQVUsZ0NBRFA7QUFFSCwyQkFBVztBQUZSLGFBRkg7QUFNSixtQkFBTyxxQkFOSDtBQU9KLG1CQUFPO0FBUEgsU0FKc0I7QUFhOUIsbUJBQVcsZ0JBYm1CO0FBYzlCLG1CQUFXO0FBQ1AsdUJBQVcsRUFBRSxNQUFNLFFBQVIsRUFBa0IsVUFBVSxTQUE1QixFQUF1QyxRQUFRLEtBQS9DLEVBQXNELFNBQVMsS0FBL0QsRUFBc0UsWUFBWSxDQUFsRixFQUFxRixVQUFVLFNBQS9GO0FBREo7QUFkbUIsS0FBcEIsQ0FBZDs7QUFtQkE7O0FBRUEsUUFBSSxXQUFXOztBQUVYLGNBQU0sVUFGSztBQUdYLGdCQUFRLFVBSEc7QUFJWCxxQkFBYSxJQUpGO0FBS1gscUJBQWEsSUFMRjtBQU1YLG1CQUFXLEdBTkE7QUFPWCxnQkFBUTtBQUNKLG9CQUFRLHFHQURKO0FBRUosbUJBQU8sMEJBRkg7QUFHSixtQkFBTywwQkFISDtBQUlKLG1CQUFPO0FBSkgsU0FQRztBQWFYLGVBQU87QUFDSCxzQkFBVTtBQUNOLHVCQUFPLENBQ0gsV0FERyxFQUVILFdBRkcsRUFHSCxRQUhHLEVBSUgsY0FKRyxFQUtILFNBTEcsRUFNSCxXQU5HLEVBT0gsWUFQRyxFQVFILGtCQVJHLEVBU0gsbUJBVEcsRUFVSCxvQkFWRztBQURELGFBRFA7QUFlSCx1QkFBVztBQUNQLHVCQUFPLENBQ0gsU0FERyxFQUVILFVBRkcsRUFHSCxRQUhHLENBREE7QUFNUCx3QkFBUSxDQUNKLHFCQURJLEVBRUosYUFGSSxFQUdKLHNCQUhJLEVBSUosVUFKSTtBQU5EO0FBZlIsU0FiSTs7QUEyQ0wsb0JBM0NLO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUE0Q0gsc0JBNUNHLEdBNENNLEVBNUNOO0FBQUEsdUJBNkNhLFNBQUssZ0JBQUwsRUE3Q2I7QUFBQTtBQTZDSCx1QkE3Q0c7QUE4Q0gsc0JBOUNHLEdBOENNLFFBQVEsTUFBUixDQTlDTjtBQStDSCxvQkEvQ0csR0ErQ0ksT0FBTyxjQUFQLENBL0NKO0FBZ0RILHFCQWhERyxHQWdESyxPQUFPLGdCQUFQLENBaERMO0FBaURILHNCQWpERyxHQWlETSxPQUFPLEdBQVAsR0FBYSxLQWpEbkI7QUFrREgsc0JBbERHLEdBa0RNLElBbEROO0FBbURILHVCQW5ERyxHQW1ETyxLQW5EUDtBQW9ESCxrQkFwREcsR0FvREUsT0FBTyxZQUFQLENBcERGOztBQXFEUCx1QkFBTyxJQUFQLENBQWE7QUFDVCwwQkFBTSxFQURHO0FBRVQsOEJBQVUsTUFGRDtBQUdULDRCQUFRLElBSEM7QUFJVCw2QkFBUyxLQUpBO0FBS1QsOEJBQVUsTUFMRDtBQU1ULCtCQUFXLE9BTkY7QUFPVCw0QkFBUTtBQVBDLGlCQUFiO0FBU0EsdUJBQU8sTUFBUDtBQTlETztBQUFBO0FBaUVMLG9CQWpFSztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQWtFRCxTQUFLLFdBQUwsRUFsRUM7QUFBQTtBQUFBLHVCQW1FYyxTQUFLLGlCQUFMLEVBbkVkO0FBQUE7QUFtRUgsd0JBbkVHO0FBb0VILHdCQXBFRyxHQW9FUSxTQUFTLE1BQVQsQ0FwRVI7QUFxRUgsc0JBckVHLEdBcUVNLEVBQUUsUUFBUSxRQUFWLEVBckVOOztBQXNFUCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFNBQVMsTUFBN0IsRUFBcUMsR0FBckMsRUFBMEM7QUFDbEMsMkJBRGtDLEdBQ3hCLFNBQVMsQ0FBVCxDQUR3QjtBQUVsQyw0QkFGa0MsR0FFdkIsUUFBUSxlQUFSLENBRnVCO0FBR2xDLDZCQUhrQyxHQUd0QixTQUFTLFdBQVQsRUFIc0I7QUFJbEMsd0JBSmtDLEdBSTNCLFFBQVEsTUFBUixDQUoyQjtBQUtsQyx3QkFMa0MsR0FLM0IsUUFBUSxVQUFSLENBTDJCO0FBTWxDLHlCQU5rQyxHQU0xQixTQUFLLEdBQUwsQ0FBVSxJQUFWLEVBQWdCLElBQWhCLENBTjBCO0FBT2xDLDJCQVBrQyxHQU94QjtBQUNWLGdDQUFRLElBREU7QUFFVixnQ0FBUSxJQUZFO0FBR1YsaUNBQVM7QUFIQyxxQkFQd0I7O0FBWXRDLDJCQUFPLFFBQVAsSUFBbUIsT0FBbkI7QUFDSDtBQUNELHVCQUFPLE1BQVA7QUFwRk87QUFBQTtBQXVGTCxzQkF2RkssMEJBdUZXLE1BdkZYO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBdUZtQixzQkF2Rm5CLG1GQXVGNEIsRUF2RjVCO0FBQUEsdUJBd0ZELFNBQUssV0FBTCxFQXhGQztBQUFBO0FBQUEsdUJBeUZjLFNBQUssa0JBQUwsQ0FBeUIsTUFBekIsQ0F6RmQ7QUFBQTtBQXlGSCx3QkF6Rkc7QUEwRkgseUJBMUZHLEdBMEZTO0FBQ1osNEJBQVEsU0FBUyxNQUFULEVBQWlCLENBQWpCLEVBQW9CLEdBQXBCLENBREk7QUFFWiw0QkFBUSxTQUFTLE1BQVQsRUFBaUIsQ0FBakIsRUFBb0IsR0FBcEI7QUFGSSxpQkExRlQ7QUE4RkgseUJBOUZHLEdBOEZTLFNBQUssWUFBTCxFQTlGVDtBQStGSCxzQkEvRkcsR0ErRk07QUFDVCw0QkFBUSxFQURDO0FBRVQsNEJBQVEsRUFGQztBQUdULGlDQUFhLFNBSEo7QUFJVCxnQ0FBWSxTQUFLLE9BQUwsQ0FBYyxTQUFkO0FBSkgsaUJBL0ZOO0FBcUdILHFCQXJHRyxHQXFHSyxDQUFFLE1BQUYsRUFBVSxNQUFWLENBckdMOztBQXNHUCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLE1BQU0sTUFBMUIsRUFBa0MsR0FBbEMsRUFBdUM7QUFDL0Isd0JBRCtCLEdBQ3hCLE1BQU0sQ0FBTixDQUR3QjtBQUUvQiwwQkFGK0IsR0FFdEIsVUFBVSxJQUFWLENBRnNCOztBQUduQyx5QkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLE9BQU8sTUFBM0IsRUFBbUMsR0FBbkMsRUFBd0M7QUFDaEMsNkJBRGdDLEdBQ3hCLE9BQU8sQ0FBUCxDQUR3QjtBQUVoQyw2QkFGZ0MsR0FFeEIsTUFBTSxZQUFOLENBRndCO0FBR2hDLDhCQUhnQyxHQUd2QixNQUFNLGFBQU4sQ0FIdUI7O0FBSXBDLCtCQUFPLElBQVAsRUFBYSxJQUFiLENBQW1CLENBQUUsS0FBRixFQUFTLE1BQVQsQ0FBbkI7QUFDSDtBQUNKO0FBQ0QsdUJBQU8sTUFBUCxJQUFpQixTQUFLLE1BQUwsQ0FBYSxPQUFPLE1BQVAsQ0FBYixFQUE2QixDQUE3QixFQUFnQyxJQUFoQyxDQUFqQjtBQUNBLHVCQUFPLE1BQVA7QUFqSE87QUFBQTtBQW9ITCxtQkFwSEssdUJBb0hRLE1BcEhSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQXFIRCxTQUFLLFdBQUwsRUFySEM7QUFBQTtBQUFBLHVCQXNIVyxTQUFLLGtCQUFMLEVBdEhYO0FBQUE7QUFzSEgscUJBdEhHO0FBdUhILDBCQXZIRyxHQXVIVSxNQUFNLE1BQU4sRUFBYyxNQXZIeEI7QUF3SEgsbUJBeEhHLEdBd0hHLE1BQU0sTUFBTixFQUFjLGFBQWEsQ0FBM0IsQ0F4SEg7QUF5SEgsbUJBekhHLEdBeUhHLE1BQU0sTUFBTixFQUFjLENBQWQsQ0F6SEg7QUFBQSx1QkEwSGMsU0FBSyxnQkFBTCxFQTFIZDtBQUFBO0FBMEhILHdCQTFIRztBQTJISCxzQkEzSEcsR0EySE0sU0FBUyxNQUFULENBM0hOO0FBNEhILHlCQTVIRyxHQTRIUyxTQUFLLFlBQUwsRUE1SFQ7O0FBNkhQLHVCQUFPO0FBQ0gsaUNBQWEsU0FEVjtBQUVILGdDQUFZLFNBQUssT0FBTCxDQUFjLFNBQWQsQ0FGVDtBQUdILDRCQUFRLFdBQVksT0FBTyxTQUFQLENBQVosQ0FITDtBQUlILDJCQUFPLFdBQVksT0FBTyxRQUFQLENBQVosQ0FKSjtBQUtILDJCQUFPLElBQUksQ0FBSixDQUxKO0FBTUgsMkJBQU8sSUFBSSxDQUFKLENBTko7QUFPSCw0QkFBUSxTQVBMO0FBUUgsNEJBQVEsU0FSTDtBQVNILDZCQUFTLFNBVE47QUFVSCw2QkFBUyxTQVZOO0FBV0gsNEJBQVEsV0FBWSxPQUFPLFdBQVAsQ0FBWixDQVhMO0FBWUgsOEJBQVUsU0FaUDtBQWFILGtDQUFjLFNBYlg7QUFjSCwrQkFBVyxTQWRSO0FBZUgsa0NBQWMsU0FmWDtBQWdCSCxtQ0FBZSxXQUFZLE9BQU8sV0FBUCxDQUFaLENBaEJaO0FBaUJILDRCQUFRO0FBakJMLGlCQUFQO0FBN0hPO0FBQUE7QUFrSkwsbUJBbEpLLHVCQWtKUSxNQWxKUjtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQWtKZ0Isc0JBbEpoQixtRkFrSnlCLEVBbEp6QjtBQUFBLHVCQW1KRCxTQUFLLFdBQUwsRUFuSkM7QUFBQTtBQW9KUCx1QkFBTyxTQUFLLHdCQUFMLENBQStCLE1BQS9CLENBQVA7QUFwSk87QUFBQTtBQXVKTCxtQkF2SkssdUJBdUpRLE1BdkpSLEVBdUpnQixJQXZKaEIsRUF1SnNCLElBdkp0QixFQXVKNEIsTUF2SjVCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUF1Sm9DLHFCQXZKcEMsbUZBdUo0QyxTQXZKNUM7QUF1SnVELHNCQXZKdkQsbUZBdUpnRSxFQXZKaEU7QUFBQSx1QkF3SkQsU0FBSyxXQUFMLEVBeEpDO0FBQUE7QUF5SkgsaUJBekpHLEdBeUpDLFNBQUssTUFBTCxDQUFhLE1BQWIsQ0F6SkQ7QUEwSkgsc0JBMUpHLEdBMEpNLGdCQUFnQixTQUFLLFVBQUwsQ0FBaUIsSUFBakIsQ0FBaEIsR0FBeUMsWUExSi9DO0FBQUEsdUJBMkpjLFNBQUssTUFBTCxFQUFjLFNBQUssTUFBTCxDQUFhO0FBQzVDLDhCQUFVLEVBQUUsU0FBRixFQUFhLFdBQWIsRUFEa0M7QUFFNUMsNEJBQVEsSUFGb0M7QUFHNUMsMkJBQU8sTUFIcUM7QUFJNUMsNkJBQVMsU0FBUztBQUowQixpQkFBYixFQUtoQyxNQUxnQyxDQUFkLENBM0pkO0FBQUE7QUEySkgsd0JBM0pHOztBQWlLUCx1QkFBTztBQUNILDRCQUFRLFFBREw7QUFFSCwwQkFBTSxTQUFTLE1BQVQsRUFBaUIsVUFBakI7QUFGSCxpQkFBUDtBQWpLTztBQUFBO0FBdUtMLG1CQXZLSyx1QkF1S1EsRUF2S1I7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUF1S1ksc0JBdktaLG1GQXVLcUIsRUF2S3JCO0FBQUEsdUJBd0tELFNBQUssV0FBTCxFQXhLQztBQUFBO0FBeUtQLHVCQUFPLFNBQUssbUJBQUwsQ0FBMEIsU0FBSyxNQUFMLENBQWE7QUFDMUMsMEJBQU07QUFEb0MsaUJBQWIsRUFFOUIsTUFGOEIsQ0FBMUIsQ0FBUDtBQXpLTztBQUFBO0FBOEtYLGVBOUtXLG1CQThLRixJQTlLRSxFQThLd0Y7QUFBQSxnQkFBcEYsR0FBb0YsdUVBQTlFLFFBQThFO0FBQUEsZ0JBQXBFLE1BQW9FLHVFQUEzRCxLQUEyRDtBQUFBLGdCQUFwRCxNQUFvRCx1RUFBM0MsRUFBMkM7QUFBQSxnQkFBdkMsT0FBdUMsdUVBQTdCLFNBQTZCO0FBQUEsZ0JBQWxCLElBQWtCLHVFQUFYLFNBQVc7O0FBQy9GLGdCQUFJLE1BQU0sS0FBSyxJQUFMLENBQVUsS0FBVixJQUFtQixHQUE3QjtBQUNBLGdCQUFJLE9BQU8sUUFBWCxFQUFxQjtBQUNqQix1QkFBTyxJQUFQO0FBQ0gsYUFGRCxNQUVPO0FBQ0gsb0JBQUksUUFBUSxLQUFLLEtBQUwsRUFBWjtBQUNBLHVCQUFPLEtBQUssT0FBTCxHQUFlLEdBQWYsR0FBcUIsS0FBSyxhQUFMLENBQW9CLElBQXBCLEVBQTBCLE1BQTFCLENBQTVCO0FBQ0Esb0JBQUksUUFBUSxLQUFLLE1BQUwsQ0FBYTtBQUNyQiw2QkFBUyxLQURZO0FBRXJCLDhCQUFVLEtBQUs7QUFGTSxpQkFBYixFQUdULEtBQUssSUFBTCxDQUFXLE1BQVgsRUFBbUIsS0FBSyxhQUFMLENBQW9CLElBQXBCLENBQW5CLENBSFMsQ0FBWjtBQUlBLHVCQUFPLE1BQU0sS0FBSyxTQUFMLENBQWdCLEtBQWhCLENBQWI7QUFDQSwwQkFBVTtBQUNOLG9DQUFnQixrQkFEVjtBQUVOLG1DQUFlLEtBQUssSUFBTCxDQUFXLEtBQUssTUFBTCxDQUFhLEdBQWIsQ0FBWCxFQUE4QixLQUFLLE1BQUwsQ0FBYSxLQUFLLE1BQWxCLENBQTlCO0FBRlQsaUJBQVY7QUFJSDtBQUNELG1CQUFPLEtBQUssS0FBTCxDQUFZLEdBQVosRUFBaUIsTUFBakIsRUFBeUIsT0FBekIsRUFBa0MsSUFBbEMsQ0FBUDtBQUNIO0FBaE1VLEtBQWY7O0FBbU1BOztBQUVBLFFBQUksT0FBTyxPQUFRLFVBQVIsRUFBb0I7QUFDM0IsY0FBTSxNQURxQjtBQUUzQixnQkFBUSxNQUZtQjtBQUczQixxQkFBYSxJQUhjO0FBSTNCLGdCQUFRO0FBQ0osb0JBQVEscUdBREo7QUFFSixtQkFBTztBQUNILDBCQUFVLGdDQURQO0FBRUgsMkJBQVc7QUFGUixhQUZIO0FBTUosbUJBQU8sdUJBTkg7QUFPSixtQkFBTztBQVBILFNBSm1CO0FBYTNCLG1CQUFXLGdCQWJnQjtBQWMzQixtQkFBVztBQUNQLHVCQUFXLEVBQUUsTUFBTSxRQUFSLEVBQWtCLFVBQVUsU0FBNUIsRUFBdUMsUUFBUSxLQUEvQyxFQUFzRCxTQUFTLEtBQS9ELEVBQXNFLFlBQVksQ0FBbEYsRUFBcUYsVUFBVSxNQUEvRjtBQURKO0FBZGdCLEtBQXBCLENBQVg7O0FBb0JBOztBQUVBLFFBQUksU0FBUzs7QUFFVCxjQUFNLFFBRkc7QUFHVCxnQkFBUSxRQUhDO0FBSVQscUJBQWEsSUFKSjtBQUtULHFCQUFhLElBTEo7QUFNVCxnQkFBUTtBQUNKLG9CQUFRLHFHQURKO0FBRUosbUJBQU87QUFDSCwwQkFBVSxvQ0FEUDtBQUVILDJCQUFXO0FBRlIsYUFGSDtBQU1KLG1CQUFPLHdCQU5IO0FBT0osbUJBQU87QUFQSCxTQU5DO0FBZVQsZUFBTztBQUNILHNCQUFVO0FBQ04sdUJBQU8sQ0FDSCxnQkFERyxFQUVILGVBRkcsRUFHSCxnQkFIRyxFQUlILHFCQUpHLEVBS0gsc0JBTEcsRUFNSCxpQkFORyxFQU9ILGVBUEcsRUFRSCxpQkFSRyxFQVNILGFBVEcsRUFVSCxtQkFWRyxDQUREO0FBYU4sd0JBQVEsQ0FDSixnQkFESSxFQUVKLGVBRkksRUFHSixnQkFISSxFQUlKLHFCQUpJLEVBS0osc0JBTEksRUFNSixpQkFOSSxFQU9KLGVBUEksRUFRSixpQkFSSSxFQVNKLGFBVEksRUFVSixtQkFWSTtBQWJGLGFBRFA7QUEyQkgsdUJBQVc7QUFDUCx1QkFBTyxDQUNILGFBREcsRUFFSCxhQUZHLEVBR0gsdUJBSEcsRUFJSCxXQUpHLEVBS0gsaUJBTEcsRUFNSCxZQU5HLENBREE7QUFTUCx3QkFBUSxDQUNKLGFBREksRUFFSixhQUZJLEVBR0osdUJBSEksRUFJSixXQUpJLEVBS0osaUJBTEksRUFNSixZQU5JO0FBVEQ7QUEzQlIsU0FmRTs7QUE4REgsb0JBOURHO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkErRGUsU0FBSyxvQkFBTCxFQS9EZjtBQUFBO0FBK0RELHVCQS9EQztBQWdFRCxvQkFoRUMsR0FnRU0sT0FBTyxJQUFQLENBQWEsUUFBUSxRQUFSLENBQWIsQ0FoRU47QUFpRUQsc0JBakVDLEdBaUVRLEVBakVSOztBQWtFTCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLEtBQUssTUFBekIsRUFBaUMsR0FBakMsRUFBc0M7QUFDOUIsMEJBRDhCLEdBQ3JCLFFBQVEsUUFBUixFQUFrQixLQUFLLENBQUwsQ0FBbEIsQ0FEcUI7QUFFOUIsc0JBRjhCLEdBRXpCLE9BQU8sY0FBUCxDQUZ5QjtBQUc5QiwwQkFIOEIsR0FHckIsT0FBTyxRQUFQLENBSHFCO0FBSTlCLHdCQUo4QixHQUl2QixPQUFPLGNBQVAsQ0FKdUI7QUFLOUIseUJBTDhCLEdBS3RCLE9BQU8sZUFBUCxDQUxzQjs7QUFNbEMsMkJBQU8sSUFBUCxDQUFhO0FBQ1QsOEJBQU0sRUFERztBQUVULGtDQUFVLE1BRkQ7QUFHVCxnQ0FBUSxJQUhDO0FBSVQsaUNBQVMsS0FKQTtBQUtULGdDQUFRO0FBTEMscUJBQWI7QUFPSDtBQUNELHVCQUFPLE1BQVA7QUFoRks7QUFBQTtBQW1GSCxvQkFuRkc7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkFvRkMsU0FBSyxXQUFMLEVBcEZEO0FBQUE7QUFBQSx1QkFxRmdCLFNBQUssc0JBQUwsRUFyRmhCO0FBQUE7QUFxRkQsd0JBckZDO0FBc0ZELHdCQXRGQyxHQXNGVSxTQUFTLFFBQVQsRUFBbUIsYUFBbkIsQ0F0RlY7QUF1RkQsc0JBdkZDLEdBdUZRLEVBQUUsUUFBUSxRQUFWLEVBdkZSOztBQXdGTCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFNBQVMsTUFBN0IsRUFBcUMsR0FBckMsRUFBMEM7QUFDbEMsMkJBRGtDLEdBQ3hCLFNBQVMsQ0FBVCxDQUR3QjtBQUVsQyw0QkFGa0MsR0FFdkIsUUFBUSxVQUFSLENBRnVCO0FBR2xDLHlCQUhrQyxHQUcxQixRQUFRLFNBQVIsQ0FIMEI7QUFJbEMsMkJBSmtDLEdBSXhCO0FBQ1YsZ0NBQVEsS0FERTtBQUVWLGdDQUFRLFNBRkU7QUFHVixpQ0FBUztBQUhDLHFCQUp3Qjs7QUFTdEMsMkJBQU8sUUFBUCxJQUFtQixPQUFuQjtBQUNIO0FBQ0QsdUJBQU8sTUFBUDtBQW5HSztBQUFBO0FBc0dILHVCQXRHRywyQkFzR2MsTUF0R2Q7QUFBQTs7QUFBQTtBQUFBLHVCQXVHQyxTQUFLLFdBQUwsRUF2R0Q7QUFBQTtBQXdHTCx1QkFBTyxTQUFLLHVCQUFMLENBQThCO0FBQ2pDLCtCQUFXLENBQUUsU0FBSyxNQUFMLENBQWEsTUFBYixDQUFGO0FBRHNCLGlCQUE5QixDQUFQO0FBeEdLO0FBQUE7QUE2R0gsc0JBN0dHLDBCQTZHYSxNQTdHYjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUE2R3FCLHNCQTdHckIsbUZBNkc4QixFQTdHOUI7QUFBQSx1QkE4R0MsU0FBSyxXQUFMLEVBOUdEO0FBQUE7QUFBQSx1QkErR2dCLFNBQUssd0JBQUwsQ0FBK0IsU0FBSyxNQUFMLENBQWE7QUFDN0QsK0JBQVcsQ0FBRSxTQUFLLE1BQUwsQ0FBYSxNQUFiLENBQUYsQ0FEa0Q7QUFFN0QsZ0NBQVksR0FGaUQ7QUFHN0QsaUNBQWE7QUFIZ0QsaUJBQWIsRUFJakQsTUFKaUQsQ0FBL0IsQ0EvR2hCO0FBQUE7QUErR0Qsd0JBL0dDO0FBb0hELHlCQXBIQyxHQW9IVyxTQUFTLFFBQVQsRUFBbUIsQ0FBbkIsQ0FwSFg7QUFxSEQseUJBckhDLEdBcUhXLFNBQUssWUFBTCxFQXJIWDtBQXNIRCxzQkF0SEMsR0FzSFE7QUFDVCw0QkFBUSxFQURDO0FBRVQsNEJBQVEsRUFGQztBQUdULGlDQUFhLFNBSEo7QUFJVCxnQ0FBWSxTQUFLLE9BQUwsQ0FBYyxTQUFkO0FBSkgsaUJBdEhSO0FBNEhELHFCQTVIQyxHQTRITyxFQUFFLFFBQVEsS0FBVixFQUFpQixRQUFRLE1BQXpCLEVBNUhQO0FBNkhELG9CQTdIQyxHQTZITSxPQUFPLElBQVAsQ0FBYSxLQUFiLENBN0hOOztBQThITCxxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLEtBQUssTUFBekIsRUFBaUMsR0FBakMsRUFBc0M7QUFDOUIsdUJBRDhCLEdBQ3hCLEtBQUssQ0FBTCxDQUR3QjtBQUU5Qix3QkFGOEIsR0FFdkIsTUFBTSxHQUFOLENBRnVCO0FBRzlCLDBCQUg4QixHQUdyQixVQUFVLElBQVYsQ0FIcUI7O0FBSWxDLHlCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksT0FBTyxNQUEzQixFQUFtQyxHQUFuQyxFQUF3QztBQUNoQyw2QkFEZ0MsR0FDeEIsT0FBTyxDQUFQLENBRHdCO0FBRWhDLDZCQUZnQyxHQUV4QixXQUFZLE1BQU0sT0FBTixDQUFaLENBRndCO0FBR2hDLDhCQUhnQyxHQUd2QixXQUFZLE1BQU0sUUFBTixDQUFaLENBSHVCOztBQUlwQywrQkFBTyxHQUFQLEVBQVksSUFBWixDQUFrQixDQUFFLEtBQUYsRUFBUyxNQUFULENBQWxCO0FBQ0g7QUFDSjtBQUNELHVCQUFPLE1BQVA7QUF6SUs7QUFBQTtBQTRJSCxtQkE1SUcsdUJBNElVLE1BNUlWO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkE2SUMsU0FBSyxXQUFMLEVBN0lEO0FBQUE7QUE4SUQsbUJBOUlDLEdBOElLLFNBQUssWUFBTCxFQTlJTDtBQStJRCxxQkEvSUMsR0ErSU8sTUFBTSxRQS9JYjtBQUFBLHVCQWdKZ0IsU0FBSywwQkFBTCxDQUFpQztBQUNsRCxrQ0FBYyxTQUFLLE1BQUwsQ0FBYSxNQUFiLENBRG9DO0FBRWxELCtCQUFXLFNBQUssY0FBTCxDQUFxQixHQUFyQixDQUZ1QztBQUdsRCxpQ0FBYSxTQUFLLGNBQUwsQ0FBcUIsS0FBckIsQ0FIcUM7QUFJbEQsNEJBQVE7QUFKMEMsaUJBQWpDLENBaEpoQjtBQUFBO0FBZ0pELHdCQWhKQztBQXNKRCx1QkF0SkMsR0FzSlMsU0FBUyxRQUFULEVBQW1CLGlCQUFuQixDQXRKVDtBQXVKRCxvQkF2SkMsR0F1Sk0sT0FBTyxJQUFQLENBQWEsT0FBYixDQXZKTjtBQXdKRCxzQkF4SkMsR0F3SlEsS0FBSyxNQXhKYjtBQXlKRCx1QkF6SkMsR0F5SlMsS0FBSyxTQUFTLENBQWQsQ0F6SlQ7QUEwSkQsc0JBMUpDLEdBMEpRLFFBQVEsT0FBUixDQTFKUjtBQTJKRCx5QkEzSkMsR0EySlcsU0FBSyxZQUFMLEVBM0pYOztBQTRKTCx1QkFBTztBQUNILGlDQUFhLFNBRFY7QUFFSCxnQ0FBWSxTQUFLLE9BQUwsQ0FBYyxTQUFkLENBRlQ7QUFHSCw0QkFBUSxXQUFZLE9BQU8sTUFBUCxDQUFaLENBSEw7QUFJSCwyQkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBSko7QUFLSCwyQkFBTyxTQUxKO0FBTUgsMkJBQU8sU0FOSjtBQU9ILDRCQUFRLFNBUEw7QUFRSCw0QkFBUSxXQUFZLE9BQU8sTUFBUCxDQUFaLENBUkw7QUFTSCw2QkFBUyxXQUFZLE9BQU8sT0FBUCxDQUFaLENBVE47QUFVSCw2QkFBUyxTQVZOO0FBV0gsNEJBQVEsU0FYTDtBQVlILDhCQUFVLFNBWlA7QUFhSCxrQ0FBYyxTQWJYO0FBY0gsK0JBQVcsU0FkUjtBQWVILGtDQUFjLFdBQVksT0FBTyxZQUFQLENBQVosQ0FmWDtBQWdCSCxtQ0FBZSxXQUFZLE9BQU8sYUFBUCxDQUFaLENBaEJaO0FBaUJILDRCQUFRO0FBakJMLGlCQUFQO0FBNUpLO0FBQUE7QUFpTEgsbUJBakxHLHVCQWlMVSxNQWpMVjtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQWlMa0Isc0JBakxsQixtRkFpTDJCLEVBakwzQjtBQUFBLHVCQWtMQyxTQUFLLFdBQUwsRUFsTEQ7QUFBQTtBQW1MTCx1QkFBTyxTQUFLLHFCQUFMLENBQTJCLFNBQUssTUFBTCxDQUFhO0FBQzNDLGtDQUFjLFNBQUssTUFBTCxDQUFhLE1BQWIsQ0FENkI7QUFFM0MsZ0NBQVk7QUFGK0IsaUJBQWIsRUFHL0IsTUFIK0IsQ0FBM0IsQ0FBUDtBQW5MSztBQUFBO0FBeUxILG1CQXpMRyx1QkF5TFUsTUF6TFYsRUF5TGtCLElBekxsQixFQXlMd0IsSUF6THhCLEVBeUw4QixNQXpMOUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUF5THNDLHFCQXpMdEMsbUZBeUw4QyxTQXpMOUM7QUF5THlELHNCQXpMekQsbUZBeUxrRSxFQXpMbEU7QUFBQSx1QkEwTEMsU0FBSyxXQUFMLEVBMUxEO0FBQUE7QUEyTEQscUJBM0xDLEdBMkxPO0FBQ1Isa0NBQWMsU0FBSyxNQUFMLENBQWEsTUFBYixDQUROO0FBRVIsaUNBQWEsS0FBSyxXQUFMLEVBRkw7QUFHUiw4QkFBVTtBQUhGLGlCQTNMUDs7QUFnTUwsb0JBQUksUUFBUSxPQUFaO0FBQ0ksMEJBQU0sT0FBTixJQUFpQixLQUFqQjtBQURKLGlCQWhNSyxPQWtNZ0IsU0FBSyxxQkFBTCxDQUE0QixTQUFLLE1BQUwsQ0FBYSxLQUFiLEVBQW9CLE1BQXBCLENBQTVCLENBbE1oQjtBQUFBO0FBa01ELHdCQWxNQzs7QUFtTUwsdUJBQU87QUFDSCw0QkFBUSxRQURMO0FBRUgsMEJBQU0sU0FBUyxTQUFULEVBQW9CLFFBQXBCO0FBRkgsaUJBQVA7QUFuTUs7QUFBQTtBQXlNSCxtQkF6TUcsdUJBeU1VLEVBek1WO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBeU1jLHNCQXpNZCxtRkF5TXVCLEVBek12QjtBQUFBLHVCQTBNQyxTQUFLLFdBQUwsRUExTUQ7QUFBQTtBQTJNTCx1QkFBTyxTQUFLLHNCQUFMLENBQTZCLFNBQUssTUFBTCxDQUFhO0FBQzdDLCtCQUFXO0FBRGtDLGlCQUFiLEVBRWpDLE1BRmlDLENBQTdCLENBQVA7QUEzTUs7QUFBQTtBQWdOSCxlQWhORyxtQkFnTk0sSUFoTk47QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBZ05ZLG1CQWhOWixtRkFnTmtCLFFBaE5sQjtBQWdONEIsc0JBaE41QixtRkFnTnFDLEtBaE5yQztBQWdONEMsc0JBaE41QyxtRkFnTnFELEVBaE5yRDtBQWdOeUQsdUJBaE56RCxtRkFnTm1FLFNBaE5uRTtBQWdOOEUsb0JBaE45RSxtRkFnTnFGLFNBaE5yRjtBQWlORCxtQkFqTkMsR0FpTkssU0FBSyxJQUFMLENBQVUsS0FBVixFQUFpQixHQUFqQixDQWpOTDtBQWtORCxvQkFsTkMsR0FrTk0sRUFsTk47O0FBbU5MLG9CQUFJLE9BQU8sU0FBWCxFQUFzQjtBQUNsQix5QkFBSyxLQUFMLElBQWMsU0FBSyxNQUFuQjtBQUNBLHlCQUFLLE1BQUwsSUFBZSxTQUFLLEtBQXBCO0FBQ0EseUJBQUssTUFBTCxJQUFlLFNBQUssUUFBcEI7QUFDSDtBQUNHLHFCQXhOQyxHQXdOTyxTQUFLLEtBQUwsRUF4TlA7O0FBeU5MLG9CQUFJLFVBQVUsS0FBZCxFQUFxQjtBQUNqQiwyQkFBTyxNQUFNLFNBQUssU0FBTCxDQUFnQixTQUFLLE1BQUwsQ0FBYTtBQUN0QyxrQ0FBVSxJQUQ0QjtBQUV0Qyw4QkFBTTtBQUZnQyxxQkFBYixFQUcxQixJQUgwQixFQUdwQixNQUhvQixDQUFoQixDQUFiO0FBSUgsaUJBTEQsTUFLTztBQUNILDhCQUFVLEVBQUUsZ0JBQWdCLGtCQUFsQixFQUFWO0FBQ0EsMkJBQU8sU0FBSyxJQUFMLENBQVc7QUFDZCxrQ0FBVSxJQURJO0FBRWQsa0NBQVUsU0FBSyxNQUFMLENBQWEsSUFBYixFQUFtQixNQUFuQixDQUZJO0FBR2QsOEJBQU07QUFIUSxxQkFBWCxDQUFQO0FBS0g7QUFyT0ksdUJBc09nQixTQUFLLEtBQUwsQ0FBWSxHQUFaLEVBQWlCLE1BQWpCLEVBQXlCLE9BQXpCLEVBQWtDLElBQWxDLENBdE9oQjtBQUFBO0FBc09ELHdCQXRPQzs7QUF1T0wsb0JBQUksV0FBVyxRQUFmO0FBQ0ksd0JBQUksU0FBUyxPQUFULENBQUo7QUFDSSw4QkFBTSxJQUFJLGFBQUosQ0FBbUIsU0FBSyxFQUFMLEdBQVUsR0FBVixHQUFnQixTQUFLLElBQUwsQ0FBVyxRQUFYLENBQW5DLENBQU47QUFESjtBQURKLGlCQUdBLE9BQU8sUUFBUDtBQTFPSztBQUFBO0FBQUEsS0FBYjs7QUE4T0E7O0FBRUEsUUFBSSxRQUFROztBQUVSLGNBQU0sT0FGRTtBQUdSLGdCQUFRLE9BSEE7QUFJUixxQkFBYSxJQUpMO0FBS1IscUJBQWEsSUFMTCxFQUtXO0FBQ25CLG1CQUFXLElBTkg7QUFPUiwyQkFBbUIsSUFQWDtBQVFSLGdCQUFRO0FBQ0osb0JBQVEscUdBREo7QUFFSixtQkFBTywrQ0FGSDtBQUdKLG1CQUFPLHVCQUhIO0FBSUosbUJBQU8sQ0FDSCxnQ0FERyxFQUVILGdGQUZHO0FBSkgsU0FSQTtBQWlCUixlQUFPO0FBQ0gsc0JBQVU7QUFDTix1QkFBTyxDQUNILFVBREcsRUFFSCxtQkFGRyxFQUdILFFBSEcsRUFJSCxpQkFKRyxFQUtILDhDQUxHLEVBTUgsOENBTkcsRUFPSCw4QkFQRyxFQVFILDZCQVJHLEVBU0gsUUFURyxFQVVILGlCQVZHLEVBV0gsTUFYRyxFQVlILGVBWkcsRUFhSCxRQWJHLEVBY0gsaUJBZEcsRUFlSCxjQWZHO0FBREQsYUFEUDtBQW9CSCx1QkFBVztBQUNQLHVCQUFPLENBQ0gsaUJBREcsRUFFSCxjQUZHLEVBR0gsVUFIRyxFQUlILG1CQUpHLEVBS0gsUUFMRyxFQU1ILGlCQU5HLEVBT0gsUUFQRyxFQVFILGlCQVJHLEVBU0gsTUFURyxFQVVILGVBVkcsRUFXSCxTQVhHLEVBWUgsT0FaRyxFQWFILFlBYkcsRUFjSCxVQWRHLEVBZUgsZUFmRyxFQWdCSCxPQWhCRyxFQWlCSCxZQWpCRyxFQWtCSCw4Q0FsQkcsRUFtQkgsbURBbkJHLEVBb0JILDhDQXBCRyxFQXFCSCxtREFyQkcsRUFzQkgsOEJBdEJHLEVBdUJILG1DQXZCRyxFQXdCSCxxQ0F4QkcsRUF5QkgsNkJBekJHLEVBMEJILGtDQTFCRyxFQTJCSCxvREEzQkcsRUE0Qkgsb0RBNUJHLEVBNkJILG9DQTdCRyxFQThCSCxtQ0E5QkcsRUErQkgsc0JBL0JHLEVBZ0NILHNCQWhDRyxDQURBO0FBbUNQLHdCQUFRLENBQ0osT0FESSxFQUVKLGNBRkksQ0FuQ0Q7QUF1Q1AsdUJBQU8sQ0FDSCxPQURHLENBdkNBO0FBMENQLDBCQUFVLENBQ04sT0FETTtBQTFDSDtBQXBCUixTQWpCQzs7QUFxRkYsb0JBckZFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBc0ZnQixTQUFLLGdCQUFMLEVBdEZoQjtBQUFBO0FBc0ZBLHVCQXRGQTtBQXVGQSxzQkF2RkEsR0F1RlMsRUF2RlQ7O0FBd0ZKLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksUUFBUSxNQUE1QixFQUFvQyxHQUFwQyxFQUF5QztBQUNqQywwQkFEaUMsR0FDeEIsUUFBUSxDQUFSLENBRHdCO0FBRWpDLHNCQUZpQyxHQUU1QixPQUFPLFFBQVAsQ0FGNEI7QUFHakMsd0JBSGlDLEdBRzFCLE9BQU8sZ0JBQVAsQ0FIMEI7QUFJakMseUJBSmlDLEdBSXpCLE9BQU8sZ0JBQVAsQ0FKeUI7O0FBS3JDLHdCQUFJLFFBQVEsS0FBWjtBQUNJLCtCQUFPLE1BQVA7QUFESixxQkFFSSxNQVBpQyxHQU94QixPQUFPLEdBQVAsR0FBYSxLQVBXOztBQVFyQyw2QkFBUyxPQUFPLGdCQUFQLElBQTJCLE1BQTNCLEdBQW9DLEVBQTdDO0FBQ0EsMkJBQU8sSUFBUCxDQUFhO0FBQ1QsOEJBQU0sRUFERztBQUVULGtDQUFVLE1BRkQ7QUFHVCxnQ0FBUSxJQUhDO0FBSVQsaUNBQVMsS0FKQTtBQUtULGdDQUFRO0FBTEMscUJBQWI7QUFPSDtBQUNELHVCQUFPLE1BQVA7QUF6R0k7QUFBQTtBQTRHRixvQkE1R0U7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkE2R0UsU0FBSyxXQUFMLEVBN0dGO0FBQUE7QUFBQSx1QkE4R2lCLFNBQUssZUFBTCxFQTlHakI7QUFBQTtBQThHQSx3QkE5R0E7QUErR0Esc0JBL0dBLEdBK0dTLEVBQUUsUUFBUSxRQUFWLEVBL0dUOztBQWdISixxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLFNBQVMsTUFBN0IsRUFBcUMsR0FBckMsRUFBMEM7QUFDbEMsMkJBRGtDLEdBQ3hCLFNBQVMsQ0FBVCxDQUR3QjtBQUVsQyw0QkFGa0MsR0FFdkIsUUFBUSxVQUFSLENBRnVCO0FBR2xDLDZCQUhrQyxHQUd0QixTQUFTLFdBQVQsRUFIc0I7QUFJdEM7O0FBQ0Esd0JBQUksYUFBYSxLQUFqQjtBQUNJLG9DQUFZLE1BQVo7QUFESixxQkFFSSxLQVBrQyxHQU8xQixRQUFRLFNBQVIsQ0FQMEI7QUFRbEMsMkJBUmtDLEdBUXhCO0FBQ1YsZ0NBQVEsUUFBUSxZQUFSLENBREU7QUFFVixnQ0FBUSxRQUFRLGNBQVIsQ0FGRTtBQUdWLGlDQUFTLFFBQVEsUUFBUjtBQUhDLHFCQVJ3Qjs7QUFhdEMsMkJBQU8sU0FBUCxJQUFvQixPQUFwQjtBQUNIO0FBQ0QsdUJBQU8sTUFBUDtBQS9ISTtBQUFBO0FBa0lGLHNCQWxJRSwwQkFrSWMsTUFsSWQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQWtJc0Isc0JBbEl0QixtRkFrSStCLEVBbEkvQjtBQUFBLHVCQW1JRSxTQUFLLFdBQUwsRUFuSUY7QUFBQTtBQW9JQSxpQkFwSUEsR0FvSUksU0FBSyxNQUFMLENBQWEsTUFBYixDQXBJSjtBQUFBLHVCQXFJa0IsU0FBSyxzQkFBTCxDQUE2QixTQUFLLE1BQUwsQ0FBYTtBQUM1RCw4QkFBVSxFQUFFLElBQUY7QUFEa0QsaUJBQWIsRUFFaEQsTUFGZ0QsQ0FBN0IsQ0FySWxCO0FBQUE7QUFxSUEseUJBcklBOztBQXdJSiw0QkFBWSxVQUFVLENBQVYsQ0FBWjtBQUNJLHlCQXpJQSxHQXlJWSxVQUFVLFdBQVYsQ0F6SVo7QUEwSUEsc0JBMUlBLEdBMElTO0FBQ1QsNEJBQVEsRUFEQztBQUVULDRCQUFRLEVBRkM7QUFHVCxpQ0FBYSxTQUhKO0FBSVQsZ0NBQVksU0FBSyxPQUFMLENBQWMsU0FBZDtBQUpILGlCQTFJVDtBQWdKQSxxQkFoSkEsR0FnSlEsQ0FBRSxNQUFGLEVBQVUsTUFBVixDQWhKUjs7QUFpSkoscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxNQUFNLE1BQTFCLEVBQWtDLEdBQWxDLEVBQXVDO0FBQy9CLHdCQUQrQixHQUN4QixNQUFNLENBQU4sQ0FEd0I7QUFFL0Isd0JBRitCLEdBRXhCLFNBQUssVUFBTCxDQUFpQixJQUFqQixDQUZ3QjtBQUcvQiwwQkFIK0IsR0FHdEIsVUFBVSxJQUFWLENBSHNCOztBQUluQyx5QkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLE9BQU8sTUFBM0IsRUFBbUMsR0FBbkMsRUFBd0M7QUFDaEMsNkJBRGdDLEdBQ3hCLE9BQU8sQ0FBUCxDQUR3QjtBQUVoQyw2QkFGZ0MsR0FFeEIsV0FBWSxNQUFNLE9BQU4sQ0FBWixDQUZ3QjtBQUdoQyw4QkFIZ0MsR0FHdkIsV0FBWSxNQUFNLFFBQU4sQ0FBWixDQUh1Qjs7QUFJcEMsK0JBQU8sSUFBUCxFQUFhLElBQWIsQ0FBbUIsQ0FBRSxLQUFGLEVBQVMsTUFBVCxDQUFuQjtBQUNIO0FBQ0o7QUFDRCx1QkFBTyxNQUFQO0FBNUpJO0FBQUE7QUErSlIsbUJBL0pRLHVCQStKSyxNQS9KTCxFQStKYSxNQS9KYixFQStKcUI7QUFDekIsZ0JBQUksWUFBWSxDQUFoQjtBQUNBLGdCQUFJLE9BQU8sU0FBWDtBQUNBLGdCQUFJLHNCQUFzQixNQUExQixFQUNJLElBQUksWUFBWSxPQUFPLGtCQUFQLENBQWhCLEVBQTRDO0FBQ3hDLDRCQUFZLE9BQU8sa0JBQVAsQ0FBWjtBQUNBLHVCQUFPLE9BQU8sY0FBUCxDQUFQO0FBQ0g7QUFDTCxnQkFBSSx1QkFBdUIsTUFBM0IsRUFDSSxJQUFJLFlBQVksT0FBTyxtQkFBUCxDQUFoQixFQUE2QztBQUN6Qyw0QkFBWSxPQUFPLG1CQUFQLENBQVo7QUFDQSx1QkFBTyxPQUFPLGVBQVAsQ0FBUDtBQUNIO0FBQ0wsZ0JBQUksQ0FBQyxTQUFMLEVBQ0ksWUFBWSxLQUFLLFlBQUwsRUFBWjtBQUNKLG1CQUFPO0FBQ0gsNkJBQWEsU0FEVjtBQUVILDRCQUFZLEtBQUssT0FBTCxDQUFjLFNBQWQsQ0FGVDtBQUdILHdCQUFRLE9BQU8sbUJBQVAsQ0FITDtBQUlILHVCQUFPLE9BQU8sb0JBQVAsQ0FKSjtBQUtILHVCQUFPLE9BQU8sU0FBUCxDQUxKO0FBTUgsdUJBQU8sT0FBTyxTQUFQLENBTko7QUFPSCx3QkFBUSxTQVBMO0FBUUgsd0JBQVEsU0FSTDtBQVNILHlCQUFTLFNBVE47QUFVSCx5QkFBUyxTQVZOO0FBV0gsd0JBQVEsSUFYTDtBQVlILDBCQUFVLFNBWlA7QUFhSCw4QkFBYyxTQWJYO0FBY0gsMkJBQVcsU0FkUjtBQWVILDhCQUFjLFNBZlg7QUFnQkgsK0JBQWUsT0FBTyx3QkFBUCxDQWhCWjtBQWlCSCx3QkFBUTtBQWpCTCxhQUFQO0FBbUJILFNBak1PO0FBbU1GLG9CQW5NRTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkFvTUUsU0FBSyxXQUFMLEVBcE1GO0FBQUE7QUFBQSx1QkFxTWdCLFNBQUssZUFBTCxFQXJNaEI7QUFBQTtBQXFNQSx1QkFyTUE7O0FBc01KLDBCQUFVLFNBQUssT0FBTCxDQUFjLE9BQWQsRUFBdUIsUUFBdkIsQ0FBVjtBQUNJLG1CQXZNQSxHQXVNTSxPQUFPLElBQVAsQ0FBYSxPQUFiLENBdk1OO0FBd01BLHNCQXhNQSxHQXdNUyxFQXhNVDs7QUF5TUoscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxJQUFJLE1BQXhCLEVBQWdDLEdBQWhDLEVBQXFDO0FBQzdCLHNCQUQ2QixHQUN4QixJQUFJLENBQUosQ0FEd0I7QUFFN0IsMEJBRjZCLEdBRXBCLFNBRm9CO0FBRzdCLDBCQUg2QixHQUdwQixTQUhvQjs7QUFJakMsd0JBQUksTUFBTSxTQUFLLGFBQWYsRUFBOEI7QUFDMUIsaUNBQVMsU0FBSyxhQUFMLENBQW1CLEVBQW5CLENBQVQ7QUFDQSxpQ0FBUyxPQUFPLFFBQVAsQ0FBVDtBQUNILHFCQUhELE1BR087QUFDQyw0QkFERCxHQUNRLEdBQUcsS0FBSCxDQUFVLENBQVYsRUFBYSxDQUFiLENBRFI7QUFFQyw2QkFGRCxHQUVTLEdBQUcsS0FBSCxDQUFVLENBQVYsRUFBYSxDQUFiLENBRlQ7O0FBR0gsNEJBQUksUUFBUSxLQUFaO0FBQ0ksbUNBQU8sTUFBUDtBQURKLHlCQUVBLElBQUksU0FBUyxLQUFiO0FBQ0ksb0NBQVEsTUFBUjtBQURKLHlCQUVBLFNBQVMsT0FBTyxHQUFQLEdBQWEsS0FBdEI7QUFDSDtBQUNHLDBCQWhCNkIsR0FnQnBCLFFBQVEsRUFBUixDQWhCb0I7O0FBaUJqQywyQkFBTyxNQUFQLElBQWlCLFNBQUssV0FBTCxDQUFrQixNQUFsQixFQUEwQixNQUExQixDQUFqQjtBQUNIO0FBQ0QsdUJBQU8sTUFBUDtBQTVOSTtBQUFBO0FBK05GLG1CQS9ORSx1QkErTlcsTUEvTlg7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBZ09FLFNBQUssV0FBTCxFQWhPRjtBQUFBO0FBaU9BLGlCQWpPQSxHQWlPSSxTQUFLLE1BQUwsQ0FBYSxNQUFiLENBak9KO0FBQUEsdUJBa09nQixTQUFLLHFCQUFMLENBQTRCO0FBQzVDLDhCQUFVLEVBQUUsSUFBRjtBQURrQyxpQkFBNUIsQ0FsT2hCO0FBQUE7QUFrT0EsdUJBbE9BO0FBcU9BLHNCQXJPQSxHQXFPUyxRQUFRLE1Bck9qQjs7QUFzT0osb0JBQUksU0FBUyxDQUFiO0FBQ0ksMEJBQU0sSUFBSSxhQUFKLENBQW1CLFNBQUssRUFBTCxHQUFVLDhEQUE3QixDQUFOO0FBREosaUJBRUEsVUFBVSxTQUFLLE9BQUwsQ0FBYyxPQUFkLEVBQXVCLFFBQXZCLENBQVY7QUFDSSxzQkF6T0EsR0F5T1MsUUFBUSxFQUFFLElBQUYsQ0FBUixDQXpPVDs7QUEwT0osdUJBQU8sU0FBSyxXQUFMLENBQWtCLE1BQWxCLEVBQTBCLENBQTFCLENBQVA7QUExT0k7QUFBQTtBQTZPRixtQkE3T0UsdUJBNk9XLE1BN09YO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBNk9tQixzQkE3T25CLG1GQTZPNEIsRUE3TzVCO0FBQUEsdUJBOE9FLFNBQUssV0FBTCxFQTlPRjtBQUFBO0FBK09KO0FBQ0EsdUJBQU8sU0FBSyxlQUFMLENBQXNCLE1BQXRCLENBQVA7QUFoUEk7QUFBQTtBQW1QRixtQkFuUEUsdUJBbVBXLE1BblBYLEVBbVBtQixJQW5QbkIsRUFtUHlCLElBblB6QixFQW1QK0IsTUFuUC9CO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQW1QdUMscUJBblB2QyxtRkFtUCtDLFNBblAvQztBQW1QMEQsc0JBblAxRCxtRkFtUG1FLEVBblBuRTtBQUFBLHVCQW9QRSxTQUFLLFdBQUwsRUFwUEY7QUFBQTtBQXFQSixvQkFBSSxRQUFRLFFBQVo7QUFDSSwwQkFBTSxJQUFJLGFBQUosQ0FBbUIsU0FBSyxFQUFMLEdBQVUsMkJBQTdCLENBQU47QUFESixpQkFyUEksT0F1UGlCLFNBQUssYUFBTCxDQUFvQixTQUFLLE1BQUwsQ0FBYTtBQUNsRCw0QkFBUSxTQUFLLFFBQUwsQ0FBZSxNQUFmLENBRDBDO0FBRWxELDRCQUFRLElBRjBDO0FBR2xELDhCQUFVLE1BSHdDO0FBSWxELDRCQUFRO0FBSjBDLGlCQUFiLEVBS3RDLE1BTHNDLENBQXBCLENBdlBqQjtBQUFBO0FBdVBBLHdCQXZQQTs7QUE2UEosdUJBQU87QUFDSCw0QkFBUSxRQURMO0FBRUgsMEJBQU0sU0FBUyxJQUFULEVBQWUsUUFBZjtBQUZILGlCQUFQO0FBN1BJO0FBQUE7QUFtUUYsbUJBblFFLHVCQW1RVyxFQW5RWDtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQW1RZSxzQkFuUWYsbUZBbVF3QixFQW5ReEI7QUFBQSx1QkFvUUUsU0FBSyxXQUFMLEVBcFFGO0FBQUE7QUFxUUosdUJBQU8sU0FBSyxrQkFBTCxDQUF5QixTQUFLLE1BQUwsQ0FBYTtBQUN6Qyw0QkFBUSxRQURpQztBQUV6QywwQkFBTTtBQUZtQyxpQkFBYixFQUc3QixNQUg2QixDQUF6QixDQUFQO0FBclFJO0FBQUE7QUEyUVIsYUEzUVEsbUJBMlFDO0FBQ0wsbUJBQU8sS0FBSyxZQUFMLEVBQVA7QUFDSCxTQTdRTztBQStRUixlQS9RUSxtQkErUUMsSUEvUUQsRUErUXdGO0FBQUEsZ0JBQWpGLEdBQWlGLHVFQUEzRSxLQUEyRTtBQUFBLGdCQUFwRSxNQUFvRSx1RUFBM0QsS0FBMkQ7QUFBQSxnQkFBcEQsTUFBb0QsdUVBQTNDLEVBQTJDO0FBQUEsZ0JBQXZDLE9BQXVDLHVFQUE3QixTQUE2QjtBQUFBLGdCQUFsQixJQUFrQix1RUFBWCxTQUFXOztBQUM1RixnQkFBSSxDQUFDLEtBQUssTUFBVixFQUNJLE1BQU0sSUFBSSxtQkFBSixDQUF5QixLQUFLLEVBQUwsR0FBVSxvRUFBbkMsQ0FBTjtBQUNKLGdCQUFJLENBQUMsS0FBSyxHQUFWLEVBQ0ksTUFBTSxJQUFJLG1CQUFKLENBQXlCLEtBQUssRUFBTCxHQUFVLHVEQUFuQyxDQUFOO0FBQ0osZ0JBQUksTUFBTSxLQUFLLElBQUwsQ0FBVSxLQUFWLElBQW1CLEdBQW5CLEdBQXlCLEtBQUssT0FBeEM7QUFDQSxnQkFBSSxPQUFPLFFBQVgsRUFDSSxPQUFPLE1BQU0sR0FBYjtBQUNKLG1CQUFPLE1BQU0sS0FBSyxhQUFMLENBQW9CLElBQXBCLEVBQTBCLE1BQTFCLENBQWI7QUFDQSxnQkFBSSxRQUFRLEtBQUssSUFBTCxDQUFXLE1BQVgsRUFBbUIsS0FBSyxhQUFMLENBQW9CLElBQXBCLENBQW5CLENBQVo7QUFDQSxnQkFBSSxPQUFPLFFBQVgsRUFBcUI7QUFDakIsb0JBQUksT0FBTyxJQUFQLENBQWEsS0FBYixFQUFvQixNQUF4QixFQUNJLE9BQU8sTUFBTSxLQUFLLFNBQUwsQ0FBZ0IsS0FBaEIsQ0FBYjtBQUNQLGFBSEQsTUFHTztBQUNILDBCQUFVLEVBQUUsbUJBQW1CLGVBQXJCLEVBQVY7QUFDQSxvQkFBSSxRQUFRLEtBQUssS0FBTCxHQUFjLFFBQWQsRUFBWjtBQUNBLG9CQUFJLFVBQVUsTUFBZCxFQUFzQjtBQUNsQix3QkFBSSxPQUFPLElBQVAsQ0FBYSxLQUFiLEVBQW9CLE1BQXhCLEVBQWdDO0FBQzVCLGdDQUFRLGNBQVIsSUFBMEIsa0JBQTFCO0FBQ0EsK0JBQU8sS0FBSyxJQUFMLENBQVcsS0FBWCxDQUFQO0FBQ0gscUJBSEQsTUFLSSxPQUFPLE1BQU0sS0FBSyxTQUFMLENBQWdCLEtBQWhCLENBQWI7QUFDUDtBQUNELG9CQUFJLE9BQU8sUUFBUSxLQUFLLEdBQWIsR0FBbUIsS0FBSyxNQUF4QixHQUFpQyxNQUFqQyxHQUEwQyxHQUFyRDtBQUNBLG9CQUFJLElBQUosRUFDSSxRQUFRLElBQVI7QUFDSixvQkFBSSxZQUFZLEtBQUssSUFBTCxDQUFXLEtBQUssTUFBTCxDQUFhLElBQWIsQ0FBWCxFQUErQixLQUFLLE1BQUwsQ0FBYSxLQUFLLE1BQWxCLENBQS9CLEVBQTBELFFBQTFELEVBQW9FLFFBQXBFLENBQWhCO0FBQ0Esb0JBQUksY0FBYyxLQUFLLEdBQUwsR0FBVyxHQUFYLEdBQWlCLEtBQUssTUFBdEIsR0FBK0IsR0FBL0IsR0FBcUMsS0FBckMsR0FBNkMsR0FBN0MsR0FBbUQsS0FBSyxjQUFMLENBQXFCLFNBQXJCLENBQXJFO0FBQ0Esd0JBQVEsZUFBUixJQUEyQixVQUFVLFdBQXJDO0FBQ0g7QUFDRCxtQkFBTyxLQUFLLEtBQUwsQ0FBWSxHQUFaLEVBQWlCLE1BQWpCLEVBQXlCLE9BQXpCLEVBQWtDLElBQWxDLENBQVA7QUFDSDtBQS9TTyxLQUFaOztBQWtUQTs7QUFFQSxRQUFJLFFBQVE7O0FBRVIsY0FBTSxPQUZFO0FBR1IsZ0JBQVEsT0FIQTtBQUlSLHFCQUFhLElBSkw7QUFLUixxQkFBYSxJQUxMLEVBS1c7QUFDbkIsbUJBQVcsR0FOSDtBQU9SLGdCQUFRO0FBQ0osb0JBQVEscUdBREo7QUFFSixtQkFBTyxtQkFGSDtBQUdKLG1CQUFPLHVCQUhIO0FBSUosbUJBQU87QUFKSCxTQVBBO0FBYVIsZUFBTztBQUNILG1CQUFPO0FBQ0gsdUJBQU8sQ0FDSCxlQURHLEVBRUgsTUFGRyxFQUdILGdCQUhHLEVBSUgsZ0JBSkc7QUFESixhQURKO0FBU0gsb0JBQVE7QUFDSix3QkFBUSxDQUNKLGNBREksRUFFSixhQUZJLEVBR0osbUJBSEksRUFJSixTQUpJLEVBS0osV0FMSSxFQU1KLE9BTkksRUFPSixjQVBJLEVBUUosd0JBUkk7QUFESjtBQVRMLFNBYkM7O0FBb0NGLG9CQXBDRTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQXFDZ0IsU0FBSyxVQUFMLEVBckNoQjtBQUFBO0FBcUNBLHVCQXJDQTtBQXNDQSxvQkF0Q0EsR0FzQ08sT0FBTyxJQUFQLENBQWEsUUFBUSxPQUFSLENBQWIsQ0F0Q1A7QUF1Q0Esc0JBdkNBLEdBdUNTLEVBdkNUOztBQXdDSixxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLEtBQUssTUFBekIsRUFBaUMsR0FBakMsRUFBc0M7QUFDOUIsc0JBRDhCLEdBQ3pCLEtBQUssQ0FBTCxDQUR5QjtBQUU5QiwwQkFGOEIsR0FFckIsUUFBUSxPQUFSLEVBQWlCLEVBQWpCLENBRnFCO0FBRzlCLDBCQUg4QixHQUdyQixHQUFHLFdBQUgsR0FBa0IsT0FBbEIsQ0FBMkIsR0FBM0IsRUFBZ0MsR0FBaEMsQ0FIcUI7QUFBQSxzQ0FJWixPQUFPLEtBQVAsQ0FBYyxHQUFkLENBSlk7QUFBQTtBQUk1Qix3QkFKNEI7QUFJdEIseUJBSnNCOztBQUtsQywyQkFBTyxTQUFLLGtCQUFMLENBQXlCLElBQXpCLENBQVA7QUFDQSw0QkFBUSxTQUFLLGtCQUFMLENBQXlCLEtBQXpCLENBQVI7QUFDQSwyQkFBTyxJQUFQLENBQWE7QUFDVCw4QkFBTSxFQURHO0FBRVQsa0NBQVUsTUFGRDtBQUdULGdDQUFRLElBSEM7QUFJVCxpQ0FBUyxLQUpBO0FBS1QsZ0NBQVE7QUFMQyxxQkFBYjtBQU9IO0FBQ0QsdUJBQU8sTUFBUDtBQXZESTtBQUFBO0FBMERGLG9CQTFERTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQSx1QkEyREUsU0FBSyxXQUFMLEVBM0RGO0FBQUE7QUFBQSx1QkE0RGlCLFNBQUssZUFBTCxFQTVEakI7QUFBQTtBQTREQSx3QkE1REE7QUE2REEsd0JBN0RBLEdBNkRXLFNBQVMsUUFBVCxDQTdEWDtBQThEQSxzQkE5REEsR0E4RFMsRUFBRSxRQUFRLFFBQVYsRUE5RFQ7O0FBK0RKLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksU0FBSyxVQUFMLENBQWdCLE1BQXBDLEVBQTRDLEdBQTVDLEVBQWlEO0FBQ3pDLDRCQUR5QyxHQUM5QixTQUFLLFVBQUwsQ0FBZ0IsQ0FBaEIsQ0FEOEI7QUFFekMsNkJBRnlDLEdBRTdCLFNBQVMsV0FBVCxFQUY2QjtBQUd6QywyQkFIeUMsR0FHL0I7QUFDVixnQ0FBUSxTQURFO0FBRVYsZ0NBQVEsU0FGRTtBQUdWLGlDQUFTO0FBSEMscUJBSCtCOztBQVE3Qyx3QkFBSSxXQUFXLFFBQWY7QUFDSSw0QkFBSSxhQUFhLFNBQVMsT0FBVCxDQUFqQjtBQUNJLG9DQUFRLE1BQVIsSUFBa0IsU0FBUyxPQUFULEVBQWtCLFNBQWxCLENBQWxCO0FBREo7QUFESixxQkFHQSxJQUFJLHVCQUF1QixRQUEzQjtBQUNJLDRCQUFJLGFBQWEsU0FBUyxtQkFBVCxDQUFqQjtBQUNJLG9DQUFRLE9BQVIsSUFBbUIsU0FBUyxtQkFBVCxFQUE4QixTQUE5QixDQUFuQjtBQURKO0FBREoscUJBR0EsSUFBSSxRQUFRLE9BQVIsS0FBb0IsUUFBUSxNQUFSLENBQXhCO0FBQ0ksZ0NBQVEsTUFBUixJQUFrQixRQUFRLE9BQVIsSUFBbUIsUUFBUSxNQUFSLENBQXJDO0FBREoscUJBRUEsT0FBTyxRQUFQLElBQW1CLE9BQW5CO0FBQ0g7QUFDRCx1QkFBTyxNQUFQO0FBakZJO0FBQUE7QUFvRkYsc0JBcEZFLDBCQW9GYyxNQXBGZDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBb0ZzQixzQkFwRnRCLG1GQW9GK0IsRUFwRi9CO0FBQUEsdUJBcUZFLFNBQUssV0FBTCxFQXJGRjtBQUFBO0FBc0ZBLGlCQXRGQSxHQXNGSSxTQUFLLE1BQUwsQ0FBYSxNQUFiLENBdEZKO0FBQUEsdUJBdUZpQixTQUFLLGdCQUFMLENBQXVCLFNBQUssTUFBTCxDQUFhO0FBQ3JELDZCQUFTLEVBQUUsSUFBRjtBQUQ0QyxpQkFBYixFQUV6QyxNQUZ5QyxDQUF2QixDQXZGakI7QUFBQTtBQXVGQSx3QkF2RkE7QUEwRkEseUJBMUZBLEdBMEZZLFNBQVMsRUFBRSxJQUFGLENBQVQsQ0ExRlo7QUEyRkEseUJBM0ZBLEdBMkZZLFNBQUssWUFBTCxFQTNGWjtBQTRGQSxvQkE1RkEsR0E0RlEsVUFBVSxTQUFYLEdBQXdCLFVBQVUsTUFBVixDQUF4QixHQUE0QyxFQTVGbkQ7QUE2RkEsb0JBN0ZBLEdBNkZRLFVBQVUsU0FBWCxHQUF3QixVQUFVLE1BQVYsQ0FBeEIsR0FBNEMsRUE3Rm5EO0FBOEZBLHNCQTlGQSxHQThGUztBQUNULDRCQUFRLElBREM7QUFFVCw0QkFBUSxJQUZDO0FBR1QsaUNBQWEsU0FISjtBQUlULGdDQUFZLFNBQUssT0FBTCxDQUFjLFNBQWQ7QUFKSCxpQkE5RlQ7O0FBb0dKLHVCQUFPLE1BQVA7QUFwR0k7QUFBQTtBQXVHRixtQkF2R0UsdUJBdUdXLE1BdkdYO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQXdHRSxTQUFLLFdBQUwsRUF4R0Y7QUFBQTtBQXlHQSxpQkF6R0EsR0F5R0ksU0FBSyxNQUFMLENBQWEsTUFBYixDQXpHSjtBQUFBLHVCQTBHZ0IsU0FBSyxpQkFBTCxDQUF3QjtBQUN4Qyw2QkFBUyxFQUFFLElBQUY7QUFEK0IsaUJBQXhCLENBMUdoQjtBQUFBO0FBMEdBLHVCQTFHQTtBQTZHQSxzQkE3R0EsR0E2R1MsUUFBUSxFQUFFLElBQUYsQ0FBUixDQTdHVDtBQThHQSx5QkE5R0EsR0E4R1ksT0FBTyxTQUFQLElBQW9CLElBOUdoQzs7QUErR0osdUJBQU87QUFDSCxpQ0FBYSxTQURWO0FBRUgsZ0NBQVksU0FBSyxPQUFMLENBQWMsU0FBZCxDQUZUO0FBR0gsNEJBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQUhMO0FBSUgsMkJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQUpKO0FBS0gsMkJBQU8sV0FBWSxPQUFPLEtBQVAsQ0FBWixDQUxKO0FBTUgsMkJBQU8sV0FBWSxPQUFPLE1BQVAsQ0FBWixDQU5KO0FBT0gsNEJBQVEsU0FQTDtBQVFILDRCQUFRLFNBUkw7QUFTSCw2QkFBUyxTQVROO0FBVUgsNkJBQVMsU0FWTjtBQVdILDRCQUFRLFdBQVksT0FBTyxNQUFQLENBQVosQ0FYTDtBQVlILDhCQUFVLFNBWlA7QUFhSCxrQ0FBYyxTQWJYO0FBY0gsK0JBQVcsV0FBWSxPQUFPLEtBQVAsQ0FBWixDQWRSO0FBZUgsa0NBQWMsV0FBWSxPQUFPLFNBQVAsQ0FBWixDQWZYO0FBZ0JILG1DQUFlLFdBQVksT0FBTyxLQUFQLENBQVosQ0FoQlo7QUFpQkgsNEJBQVE7QUFqQkwsaUJBQVA7QUEvR0k7QUFBQTtBQW9JRixtQkFwSUUsdUJBb0lXLE1BcElYO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBb0ltQixzQkFwSW5CLG1GQW9JNEIsRUFwSTVCO0FBQUEsdUJBcUlFLFNBQUssV0FBTCxFQXJJRjtBQUFBO0FBc0lKLHVCQUFPLFNBQUssaUJBQUwsQ0FBd0IsU0FBSyxNQUFMLENBQWE7QUFDeEMsNkJBQVMsU0FBSyxRQUFMLENBQWUsTUFBZjtBQUQrQixpQkFBYixFQUU1QixNQUY0QixDQUF4QixDQUFQO0FBdElJO0FBQUE7QUEySUYsbUJBM0lFLHVCQTJJVyxNQTNJWCxFQTJJbUIsSUEzSW5CLEVBMkl5QixJQTNJekIsRUEySStCLE1BM0kvQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQTJJdUMscUJBM0l2QyxtRkEySStDLFNBM0kvQztBQTJJMEQsc0JBM0kxRCxtRkEySW1FLEVBM0luRTtBQUFBLHVCQTRJRSxTQUFLLFdBQUwsRUE1SUY7QUFBQTtBQTZJSixvQkFBSSxRQUFRLFFBQVo7QUFDSSwwQkFBTSxJQUFJLGFBQUosQ0FBbUIsU0FBSyxFQUFMLEdBQVUsMkJBQTdCLENBQU47QUFESixpQkFFSSxJQS9JQSxHQStJTyxNQUFNLFFBQU4sRUEvSVA7QUFBQSx1QkFnSmlCLFNBQUssYUFBTCxDQUFvQixTQUFLLE1BQUwsQ0FBYTtBQUNsRCw0QkFBUSxTQUFLLFFBQUwsQ0FBZSxNQUFmLENBRDBDO0FBRWxELDRCQUFRLElBRjBDO0FBR2xELDhCQUFVLE1BSHdDO0FBSWxELDRCQUFRLE9BQU8sT0FBUCxDQUFnQixLQUFoQjtBQUowQyxpQkFBYixFQUt0QyxNQUxzQyxDQUFwQixDQWhKakI7QUFBQTtBQWdKQSx3QkFoSkE7O0FBc0pKLHVCQUFPO0FBQ0gsNEJBQVEsUUFETDtBQUVILDBCQUFNLFNBQVMsUUFBVCxFQUFtQixVQUFuQixFQUErQixRQUEvQjtBQUZILGlCQUFQO0FBdEpJO0FBQUE7QUE0SkYsbUJBNUpFLHVCQTRKVyxFQTVKWDtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQTRKZSxzQkE1SmYsbUZBNEp3QixFQTVKeEI7QUFBQSx1QkE2SkUsU0FBSyxXQUFMLEVBN0pGO0FBQUE7QUE4SkosdUJBQU8sU0FBSyxtQkFBTCxDQUEwQixTQUFLLE1BQUwsQ0FBYTtBQUMxQyxnQ0FBWTtBQUQ4QixpQkFBYixFQUU5QixNQUY4QixDQUExQixDQUFQO0FBOUpJO0FBQUE7QUFtS0YsZUFuS0UsbUJBbUtPLElBbktQO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBbUthLG1CQW5LYixtRkFtS21CLEtBbktuQjtBQW1LMEIsc0JBbksxQixtRkFtS21DLEtBbktuQztBQW1LMEMsc0JBbksxQyxtRkFtS21ELEVBbktuRDtBQW1LdUQsdUJBbkt2RCxtRkFtS2lFLFNBbktqRTtBQW1LNEUsb0JBbks1RSxtRkFtS21GLFNBbktuRjtBQW9LQSxtQkFwS0EsR0FvS00sU0FBSyxJQUFMLENBQVUsS0FBVixJQUFtQixHQUFuQixHQUF5QixHQXBLL0I7O0FBcUtKLG9CQUFJLE9BQU8sS0FBWCxFQUFrQjtBQUNkLDJCQUFPLE1BQU0sU0FBSyxPQUFYLEdBQXFCLEdBQXJCLEdBQTJCLFNBQUssYUFBTCxDQUFvQixJQUFwQixFQUEwQixNQUExQixDQUFsQztBQUNJLHlCQUZVLEdBRUYsU0FBSyxJQUFMLENBQVcsTUFBWCxFQUFtQixTQUFLLGFBQUwsQ0FBb0IsSUFBcEIsQ0FBbkIsQ0FGRTs7QUFHZCx3QkFBSSxPQUFPLElBQVAsQ0FBYSxLQUFiLEVBQW9CLE1BQXhCO0FBQ0ksK0JBQU8sTUFBTSxTQUFLLFNBQUwsQ0FBZ0IsS0FBaEIsQ0FBYjtBQURKO0FBRUgsaUJBTEQsTUFLTztBQUNDLHlCQURELEdBQ1MsU0FBSyxLQUFMLEVBRFQ7QUFFQywyQkFGRCxHQUVTLFNBQUssTUFBTCxDQUFhLEVBQUUsVUFBVSxJQUFaLEVBQWtCLFNBQVMsS0FBM0IsRUFBYixFQUFpRCxNQUFqRCxDQUZUOztBQUdILDJCQUFPLFNBQUssU0FBTCxDQUFnQixPQUFoQixDQUFQO0FBQ0EsOEJBQVU7QUFDTix3Q0FBZ0IsbUNBRFY7QUFFTiwrQkFBTyxTQUFLLE1BRk47QUFHTixnQ0FBUSxTQUFLLElBQUwsQ0FBVyxTQUFLLE1BQUwsQ0FBYSxJQUFiLENBQVgsRUFBK0IsU0FBSyxNQUFMLENBQWEsU0FBSyxNQUFsQixDQUEvQixFQUEwRCxRQUExRDtBQUhGLHFCQUFWO0FBS0g7QUFuTEcsdUJBb0xpQixTQUFLLEtBQUwsQ0FBWSxHQUFaLEVBQWlCLE1BQWpCLEVBQXlCLE9BQXpCLEVBQWtDLElBQWxDLENBcExqQjtBQUFBO0FBb0xBLHdCQXBMQTs7QUFxTEosb0JBQUksV0FBVyxRQUFmO0FBQ0ksMEJBQU0sSUFBSSxhQUFKLENBQW1CLFNBQUssRUFBTCxHQUFVLEdBQVYsR0FBZ0IsU0FBSyxJQUFMLENBQVcsUUFBWCxDQUFuQyxDQUFOO0FBREosaUJBRUEsT0FBTyxRQUFQO0FBdkxJO0FBQUE7QUFBQSxLQUFaOztBQTJMQTs7QUFFQSxRQUFJLFFBQVE7O0FBRVIsY0FBTSxPQUZFO0FBR1IsZ0JBQVEsT0FIQTtBQUlSLHFCQUFhLElBSkw7QUFLUixxQkFBYSxJQUxMO0FBTVIsbUJBQVcsSUFOSDtBQU9SLDJCQUFtQixJQVBYO0FBUVIsZ0JBQVE7QUFDSixvQkFBUSxxR0FESjtBQUVKLG1CQUFPLG1CQUZIO0FBR0osbUJBQU8sbUJBSEg7QUFJSixtQkFBTyxDQUNILHVDQURHLEVBRUgsNEJBRkc7QUFKSCxTQVJBO0FBaUJSLGVBQU87QUFDSCxzQkFBVTtBQUNOLHVCQUFPLENBQ0gsU0FERyxFQUVILGtCQUZHLEVBR0gsU0FIRyxFQUlILFlBSkcsRUFLSCxHQUxHLEVBTUgsT0FORyxFQU9ILFFBUEcsRUFRSCx1QkFSRyxFQVNILFdBVEcsRUFVSCxxQkFWRyxFQVdILDZCQVhHO0FBREQsYUFEUDtBQWdCSCx1QkFBVztBQUNQLHVCQUFPLENBQ0gsVUFERyxFQUVILFlBRkcsRUFHSCxTQUhHLEVBSUgsaUJBSkcsRUFLSCxPQUxHLEVBTUgsUUFORyxFQU9ILFdBUEcsQ0FEQTtBQVVQLHdCQUFRLENBQ0osY0FESSxFQUVKLFFBRkksRUFHSixjQUhJLEVBSUosY0FKSTtBQVZEO0FBaEJSLFNBakJDOztBQW9ERixvQkFwREU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBcURnQixTQUFLLGdCQUFMLEVBckRoQjtBQUFBO0FBcURBLHVCQXJEQTtBQXNEQSxzQkF0REEsR0FzRFMsRUF0RFQ7O0FBdURKLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksUUFBUSxNQUE1QixFQUFvQyxHQUFwQyxFQUF5QztBQUNqQywwQkFEaUMsR0FDeEIsUUFBUSxDQUFSLENBRHdCO0FBRWpDLHNCQUZpQyxHQUU1QixPQUFPLElBQVAsQ0FGNEI7QUFHakMsMEJBSGlDLEdBR3hCLE9BQU8sTUFBUCxDQUh3QjtBQUFBLHNDQUlmLE9BQU8sS0FBUCxDQUFjLEdBQWQsQ0FKZTtBQUFBO0FBSS9CLHdCQUorQjtBQUl6Qix5QkFKeUI7O0FBS3JDLDJCQUFPLFNBQUssa0JBQUwsQ0FBeUIsSUFBekIsQ0FBUDtBQUNBLDRCQUFRLFNBQUssa0JBQUwsQ0FBeUIsS0FBekIsQ0FBUjtBQUNBLDJCQUFPLElBQVAsQ0FBYTtBQUNULDhCQUFNLEVBREc7QUFFVCxrQ0FBVSxNQUZEO0FBR1QsZ0NBQVEsSUFIQztBQUlULGlDQUFTLEtBSkE7QUFLVCxnQ0FBUTtBQUxDLHFCQUFiO0FBT0g7QUFDRCx1QkFBTyxNQUFQO0FBdEVJO0FBQUE7QUF5RUYsb0JBekVFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBMEVFLFNBQUssV0FBTCxFQTFFRjtBQUFBO0FBQUEsdUJBMkVpQixTQUFLLG1CQUFMLEVBM0VqQjtBQUFBO0FBMkVBLHdCQTNFQTtBQTRFQSx3QkE1RUEsR0E0RVcsU0FBUyxVQUFULENBNUVYO0FBNkVBLHNCQTdFQSxHQTZFUyxFQUFFLFFBQVEsUUFBVixFQTdFVDs7QUE4RUoscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxTQUFTLE1BQTdCLEVBQXFDLEdBQXJDLEVBQTBDO0FBQ2xDLDJCQURrQyxHQUN4QixTQUFTLENBQVQsQ0FEd0I7QUFFbEMsNEJBRmtDLEdBRXZCLFFBQVEsVUFBUixDQUZ1QjtBQUdsQyw2QkFIa0MsR0FHdEIsU0FBUyxXQUFULEVBSHNCO0FBSWxDLDJCQUprQyxHQUl4QjtBQUNWLGdDQUFRLFdBQVksUUFBUSxTQUFSLENBQVosQ0FERTtBQUVWLGdDQUFRLFdBQVksUUFBUSxRQUFSLENBQVosQ0FGRTtBQUdWLGlDQUFTO0FBSEMscUJBSndCOztBQVN0Qyw0QkFBUSxPQUFSLElBQW1CLFNBQUssR0FBTCxDQUFVLFFBQVEsTUFBUixDQUFWLEVBQTJCLFFBQVEsTUFBUixDQUEzQixDQUFuQjtBQUNBLDJCQUFPLFNBQVAsSUFBb0IsT0FBcEI7QUFDSDtBQUNELHVCQUFPLE1BQVA7QUExRkk7QUFBQTtBQTZGRixzQkE3RkUsMEJBNkZjLE1BN0ZkO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBNkZzQixzQkE3RnRCLG1GQTZGK0IsRUE3Ri9CO0FBQUEsdUJBOEZFLFNBQUssV0FBTCxFQTlGRjtBQUFBO0FBK0ZBLGlCQS9GQSxHQStGSSxTQUFLLE1BQUwsQ0FBYSxNQUFiLENBL0ZKO0FBQUEsdUJBZ0drQixTQUFLLGNBQUwsQ0FBcUIsU0FBSyxNQUFMLENBQWE7QUFDcEQsOEJBQVUsRUFBRSxJQUFGLENBRDBDO0FBRXBELDZCQUFTO0FBRjJDLGlCQUFiLEVBR3hDLE1BSHdDLENBQXJCLENBaEdsQjtBQUFBO0FBZ0dBLHlCQWhHQTtBQW9HQSx5QkFwR0EsR0FvR1ksVUFBVSxXQUFWLElBQXlCLElBcEdyQztBQXFHQSxzQkFyR0EsR0FxR1M7QUFDVCw0QkFBUSxFQURDO0FBRVQsNEJBQVEsRUFGQztBQUdULGlDQUFhLFNBSEo7QUFJVCxnQ0FBWSxTQUFLLE9BQUwsQ0FBYyxTQUFkO0FBSkgsaUJBckdUO0FBMkdBLHFCQTNHQSxHQTJHUSxDQUFFLE1BQUYsRUFBVSxNQUFWLENBM0dSOztBQTRHSixxQkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLE1BQU0sTUFBMUIsRUFBa0MsR0FBbEMsRUFBdUM7QUFDL0Isd0JBRCtCLEdBQ3hCLE1BQU0sQ0FBTixDQUR3QjtBQUUvQiwwQkFGK0IsR0FFdEIsVUFBVSxJQUFWLENBRnNCOztBQUduQyx5QkFBUyxDQUFULEdBQWEsQ0FBYixFQUFnQixJQUFJLE9BQU8sTUFBM0IsRUFBbUMsR0FBbkMsRUFBd0M7QUFDaEMsNkJBRGdDLEdBQ3hCLE9BQU8sQ0FBUCxDQUR3QjtBQUVoQyw2QkFGZ0MsR0FFeEIsV0FBWSxNQUFNLENBQU4sQ0FBWixDQUZ3QjtBQUdoQyw4QkFIZ0MsR0FHdkIsV0FBWSxNQUFNLENBQU4sQ0FBWixDQUh1Qjs7QUFJcEMsK0JBQU8sSUFBUCxFQUFhLElBQWIsQ0FBbUIsQ0FBRSxLQUFGLEVBQVMsTUFBVCxDQUFuQjtBQUNIO0FBQ0o7QUFDRCx1QkFBTyxNQUFQLElBQWlCLFNBQUssTUFBTCxDQUFhLE9BQU8sTUFBUCxDQUFiLEVBQTZCLENBQTdCLEVBQWdDLElBQWhDLENBQWpCO0FBQ0EsdUJBQU8sTUFBUCxJQUFpQixTQUFLLE1BQUwsQ0FBYSxPQUFPLE1BQVAsQ0FBYixFQUE2QixDQUE3QixDQUFqQjtBQUNBLHVCQUFPLE1BQVA7QUF4SEk7QUFBQTtBQTJIUixtQkEzSFEsdUJBMkhLLE1BM0hMLEVBMkhhLE1BM0hiLEVBMkhxQjtBQUN6QixnQkFBSSxZQUFZLE9BQU8sSUFBUCxJQUFlLElBQS9CO0FBQ0EscUJBQVMsT0FBTyxRQUFQLENBQVQ7QUFDQSxtQkFBTztBQUNILDZCQUFhLFNBRFY7QUFFSCw0QkFBWSxLQUFLLE9BQUwsQ0FBYyxTQUFkLENBRlQ7QUFHSCx3QkFBUSxXQUFZLE9BQU8sTUFBUCxDQUFaLENBSEw7QUFJSCx1QkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBSko7QUFLSCx1QkFBTyxXQUFZLE9BQU8sS0FBUCxDQUFaLENBTEo7QUFNSCx1QkFBTyxXQUFZLE9BQU8sTUFBUCxDQUFaLENBTko7QUFPSCx3QkFBUSxTQVBMO0FBUUgsd0JBQVEsU0FSTDtBQVNILHlCQUFTLFNBVE47QUFVSCx5QkFBUyxTQVZOO0FBV0gsd0JBQVEsV0FBWSxPQUFPLE1BQVAsQ0FBWixDQVhMO0FBWUgsMEJBQVUsU0FaUDtBQWFILDhCQUFjLFNBYlg7QUFjSCwyQkFBVyxTQWRSO0FBZUgsOEJBQWMsU0FmWDtBQWdCSCwrQkFBZSxXQUFZLE9BQU8sS0FBUCxDQUFaLENBaEJaO0FBaUJILHdCQUFRO0FBakJMLGFBQVA7QUFtQkgsU0FqSk87QUFtSkYsb0JBbkpFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBb0pFLFNBQUssV0FBTCxFQXBKRjtBQUFBO0FBQUEsdUJBcUpnQixTQUFLLGdCQUFMLEVBckpoQjtBQUFBO0FBcUpBLHVCQXJKQTtBQXNKQSxtQkF0SkEsR0FzSk0sT0FBTyxJQUFQLENBQWEsT0FBYixDQXRKTjtBQXVKQSxzQkF2SkEsR0F1SlMsRUF2SlQ7O0FBd0pKLHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksSUFBSSxNQUF4QixFQUFnQyxHQUFoQyxFQUFxQztBQUM3QixzQkFENkIsR0FDeEIsSUFBSSxDQUFKLENBRHdCO0FBRTdCLDBCQUY2QixHQUVwQixTQUZvQjtBQUc3QiwwQkFINkIsR0FHcEIsRUFIb0I7O0FBSWpDLHdCQUFJLE1BQU0sU0FBSyxhQUFmLEVBQThCO0FBQzFCLGlDQUFTLFNBQUssYUFBTCxDQUFtQixFQUFuQixDQUFUO0FBQ0EsaUNBQVMsT0FBTyxRQUFQLENBQVQ7QUFDSCxxQkFIRCxNQUdPO0FBQ0MsNEJBREQsR0FDUSxHQUFHLEtBQUgsQ0FBVSxDQUFWLEVBQWEsQ0FBYixDQURSO0FBRUMsNkJBRkQsR0FFUyxHQUFHLEtBQUgsQ0FBVSxDQUFWLEVBQWEsQ0FBYixDQUZUOztBQUdILCtCQUFPLEtBQUssV0FBTCxFQUFQO0FBQ0EsZ0NBQVEsTUFBTSxXQUFOLEVBQVI7QUFDQSwrQkFBTyxTQUFLLGtCQUFMLENBQXlCLElBQXpCLENBQVA7QUFDQSxnQ0FBUSxTQUFLLGtCQUFMLENBQXlCLEtBQXpCLENBQVI7QUFDSSxnQ0FQRCxHQU9VLE9BQU8sR0FBUCxHQUFhLEtBUHZCO0FBUU47QUFDRywwQkFoQjZCLEdBZ0JwQixRQUFRLEVBQVIsQ0FoQm9COztBQWlCakMsMkJBQU8sTUFBUCxJQUFpQixTQUFLLFdBQUwsQ0FBa0IsTUFBbEIsRUFBMEIsTUFBMUIsQ0FBakI7QUFDSDtBQUNELHVCQUFPLE1BQVA7QUEzS0k7QUFBQTtBQThLRixtQkE5S0UsdUJBOEtXLE1BOUtYO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBK0tFLFNBQUssV0FBTCxFQS9LRjtBQUFBO0FBZ0xBLGlCQWhMQSxHQWdMSSxTQUFLLE1BQUwsQ0FBYSxNQUFiLENBaExKO0FBQUEsdUJBaUxpQixTQUFLLHNCQUFMLENBQTZCO0FBQzlDLDhCQUFVLEVBQUUsSUFBRjtBQURvQyxpQkFBN0IsQ0FqTGpCO0FBQUE7QUFpTEEsd0JBakxBOztBQW9MSix1QkFBTyxTQUFLLFdBQUwsQ0FBa0IsUUFBbEIsRUFBNEIsQ0FBNUIsQ0FBUDtBQXBMSTtBQUFBO0FBdUxGLG1CQXZMRSx1QkF1TFcsTUF2TFg7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQXVMbUIsc0JBdkxuQixtRkF1TDRCLEVBdkw1QjtBQUFBLHVCQXdMRSxTQUFLLFdBQUwsRUF4TEY7QUFBQTtBQXlMQSxpQkF6TEEsR0F5TEksU0FBSyxNQUFMLENBQWEsTUFBYixDQXpMSjs7QUEwTEosdUJBQU8sU0FBSyxlQUFMLENBQXNCLFNBQUssTUFBTCxDQUFhO0FBQ3RDLDhCQUFVLEVBQUUsSUFBRjtBQUQ0QixpQkFBYixFQUUxQixNQUYwQixDQUF0QixDQUFQO0FBMUxJO0FBQUE7QUErTEYsbUJBL0xFLHVCQStMVyxNQS9MWCxFQStMbUIsSUEvTG5CLEVBK0x5QixJQS9MekIsRUErTCtCLE1BL0wvQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQStMdUMscUJBL0x2QyxtRkErTCtDLFNBL0wvQztBQStMMEQsc0JBL0wxRCxtRkErTG1FLEVBL0xuRTtBQUFBLHVCQWdNRSxTQUFLLFdBQUwsRUFoTUY7QUFBQTtBQWlNQSxxQkFqTUEsR0FpTVE7QUFDUiw4QkFBVSxTQUFLLFFBQUwsQ0FBZSxNQUFmLENBREY7QUFFUiw0QkFBUSxJQUZBO0FBR1IsOEJBQVUsT0FBTyxRQUFQLEVBSEY7QUFJUixnQ0FBWTtBQUpKLGlCQWpNUjs7QUF1TUosb0JBQUksUUFBUSxPQUFaLEVBQXFCO0FBQ2pCLDBCQUFNLE9BQU4sSUFBaUIsTUFBTSxRQUFOLEVBQWpCO0FBQ0g7QUF6TUcsdUJBME1pQixTQUFLLGlCQUFMLENBQXdCLFNBQUssTUFBTCxDQUFhLEtBQWIsRUFBb0IsTUFBcEIsQ0FBeEIsQ0ExTWpCO0FBQUE7QUEwTUEsd0JBMU1BOztBQTJNSix1QkFBTztBQUNILDRCQUFRLFFBREw7QUFFSCwwQkFBTSxTQUFTLElBQVQsRUFBZSxRQUFmO0FBRkgsaUJBQVA7QUEzTUk7QUFBQTtBQWlORixtQkFqTkUsdUJBaU5XLEVBak5YO0FBQUE7O0FBQUE7QUFBQSx1QkFrTkUsU0FBSyxXQUFMLEVBbE5GO0FBQUE7QUFtTkosdUJBQU8sU0FBSyxzQkFBTCxDQUE2QixFQUFFLE1BQU0sRUFBUixFQUE3QixDQUFQO0FBbk5JO0FBQUE7QUFzTkYsZUF0TkUsbUJBc05PLElBdE5QO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFzTmEsbUJBdE5iLG1GQXNObUIsUUF0Tm5CO0FBc042QixzQkF0TjdCLG1GQXNOc0MsS0F0TnRDO0FBc042QyxzQkF0TjdDLG1GQXNOc0QsRUF0TnREO0FBc04wRCx1QkF0TjFELG1GQXNOb0UsU0F0TnBFO0FBc04rRSxvQkF0Ti9FLG1GQXNOc0YsU0F0TnRGO0FBdU5BLHVCQXZOQSxHQXVOVSxVQUFVLFNBQUssT0FBZixHQUF5QixHQUF6QixHQUErQixTQUFLLGFBQUwsQ0FBb0IsSUFBcEIsRUFBMEIsTUFBMUIsQ0FBL0IsR0FBbUUsT0F2TjdFO0FBd05BLHFCQXhOQSxHQXdOUSxTQUFLLElBQUwsQ0FBVyxNQUFYLEVBQW1CLFNBQUssYUFBTCxDQUFvQixJQUFwQixDQUFuQixDQXhOUjtBQXlOQSxtQkF6TkEsR0F5Tk0sU0FBSyxJQUFMLENBQVUsS0FBVixJQUFtQixPQXpOekI7O0FBME5KLG9CQUFJLE9BQU8sUUFBWCxFQUFxQjtBQUNqQix3QkFBSSxPQUFPLElBQVAsQ0FBYSxLQUFiLEVBQW9CLE1BQXhCO0FBQ0ksK0JBQU8sTUFBTSxTQUFLLFNBQUwsQ0FBZ0IsS0FBaEIsQ0FBYjtBQURKO0FBRUgsaUJBSEQsTUFHTztBQUNDLHlCQURELEdBQ1MsU0FBSyxLQUFMLEdBQWMsUUFBZCxFQURUO0FBRUMsMkJBRkQsR0FFUyxTQUFLLFNBQUwsQ0FBZ0IsU0FBSyxPQUFMLENBQWMsU0FBSyxNQUFMLENBQWE7QUFDbkQsc0NBQWMsU0FBSyxNQURnQztBQUVuRCxpQ0FBUztBQUYwQyxxQkFBYixFQUd2QyxNQUh1QyxDQUFkLENBQWhCLENBRlQ7QUFNQyx3QkFORCxHQU1RLFNBQVMsR0FBVCxHQUFlLE9BQWYsR0FBeUIsR0FBekIsR0FBK0IsT0FOdkM7QUFPQyw2QkFQRCxHQU9hLFNBQUssSUFBTCxDQUFXLFNBQUssTUFBTCxDQUFhLElBQWIsQ0FBWCxFQUErQixTQUFLLE1BQUwsQ0FBYSxTQUFLLE1BQWxCLENBQS9CLENBUGI7QUFRQywwQkFSRCxHQVFVLFVBQVEsYUFBUixHQUF3QixTQVJsQzs7QUFTSCx3QkFBSSxVQUFVLEtBQWQsRUFBcUI7QUFDakIsK0JBQU8sTUFBTSxNQUFiO0FBQ0gscUJBRkQsTUFFTztBQUNILCtCQUFPLE1BQVA7QUFDQSxrQ0FBVTtBQUNOLDRDQUFnQixtQ0FEVjtBQUVOLDhDQUFrQixLQUFLO0FBRmpCLHlCQUFWO0FBSUg7QUFDSjtBQS9PRyx1QkFnUGlCLFNBQUssS0FBTCxDQUFZLEdBQVosRUFBaUIsTUFBakIsRUFBeUIsT0FBekIsRUFBa0MsSUFBbEMsQ0FoUGpCO0FBQUE7QUFnUEEsd0JBaFBBOztBQWlQSixvQkFBSSxXQUFXLFFBQWY7QUFDSSwwQkFBTSxJQUFJLGFBQUosQ0FBbUIsU0FBSyxFQUFMLEdBQVUsR0FBVixHQUFnQixTQUFLLElBQUwsQ0FBVyxRQUFYLENBQW5DLENBQU47QUFESixpQkFFQSxPQUFPLFFBQVA7QUFuUEk7QUFBQTtBQUFBLEtBQVo7O0FBdVBBOztBQUVBLFFBQUksT0FBTzs7QUFFUCxjQUFNLE1BRkM7QUFHUCxnQkFBUSxNQUhEO0FBSVAscUJBQWEsSUFKTjtBQUtQLHFCQUFhLElBTE47QUFNUCxtQkFBVyxHQU5KO0FBT1AsZ0JBQVE7QUFDSixvQkFBUSxxR0FESjtBQUVKLG1CQUFPLHFCQUZIO0FBR0osbUJBQU8saUJBSEg7QUFJSixtQkFBTyxDQUNILG9FQURHLEVBRUgsK0JBRkcsRUFHSCx5Q0FIRyxFQUlILHVDQUpHLEVBS0gsdUNBTEc7QUFKSCxTQVBEO0FBbUJQLGVBQU87QUFDSCxtQkFBTztBQUNILHVCQUFPLENBQ0gsY0FERyxFQUVILG1CQUZHLEVBR0gsZ0JBSEcsRUFJSCx1QkFKRyxFQUtILG9CQUxHLEVBTUgsbUJBTkcsRUFPSCxlQVBHLEVBUUgsZUFSRztBQURKLGFBREo7QUFhSCxvQkFBUTtBQUNKLHdCQUFRLENBQ0osZUFESSxFQUVKLGNBRkksRUFHSixpQkFISSxFQUlKLGFBSkksRUFLSixVQUxJLEVBTUosV0FOSSxFQU9KLG1CQVBJLEVBUUosT0FSSSxFQVNKLGVBVEksRUFVSixVQVZJLEVBV0osa0JBWEk7QUFESixhQWJMO0FBNEJILHFCQUFTO0FBQ0wsd0JBQVEsQ0FDSixlQURJLEVBRUosWUFGSSxFQUdKLDRCQUhJLEVBSUosZUFKSTtBQURIO0FBNUJOLFNBbkJBOztBQXlERCxvQkF6REM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBMERpQixTQUFLLHNCQUFMLEVBMURqQjtBQUFBO0FBMERDLHVCQTFERDtBQTJEQyxzQkEzREQsR0EyRFUsRUEzRFY7O0FBNERILHFCQUFTLENBQVQsR0FBYSxDQUFiLEVBQWdCLElBQUksUUFBUSxNQUE1QixFQUFvQyxHQUFwQyxFQUF5QztBQUNqQywwQkFEaUMsR0FDeEIsUUFBUSxDQUFSLENBRHdCO0FBRWpDLHNCQUZpQyxHQUU1QixPQUFPLGVBQVAsQ0FGNEI7QUFHakMsMEJBSGlDLEdBR3hCLE9BQU8sTUFBUCxDQUh3QjtBQUFBLHNDQUlmLE9BQU8sS0FBUCxDQUFjLEdBQWQsQ0FKZTtBQUFBO0FBSS9CLHdCQUorQjtBQUl6Qix5QkFKeUI7O0FBS3JDLDJCQUFPLElBQVAsQ0FBYTtBQUNULDhCQUFNLEVBREc7QUFFVCxrQ0FBVSxNQUZEO0FBR1QsZ0NBQVEsSUFIQztBQUlULGlDQUFTLEtBSkE7QUFLVCxnQ0FBUTtBQUxDLHFCQUFiO0FBT0g7QUFDRCx1QkFBTyxNQUFQO0FBekVHO0FBQUE7QUE0RUQsb0JBNUVDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLHVCQTZFRyxTQUFLLFdBQUwsRUE3RUg7QUFBQTtBQUFBLHVCQThFa0IsU0FBSyxlQUFMLEVBOUVsQjtBQUFBO0FBOEVDLHdCQTlFRDtBQStFQyx3QkEvRUQsR0ErRVksU0FBUyxRQUFULENBL0VaO0FBZ0ZDLHNCQWhGRCxHQWdGVSxFQUFFLFFBQVEsUUFBVixFQWhGVjs7QUFpRkgscUJBQVMsQ0FBVCxHQUFhLENBQWIsRUFBZ0IsSUFBSSxTQUFLLFVBQUwsQ0FBZ0IsTUFBcEMsRUFBNEMsR0FBNUMsRUFBaUQ7QUFDekMsNEJBRHlDLEdBQzlCLFNBQUssVUFBTCxDQUFnQixDQUFoQixDQUQ4QjtBQUV6Qyw2QkFGeUMsR0FFN0IsU0FBUyxXQUFULEVBRjZCO0FBR3pDLDJCQUh5QyxHQUcvQjtBQUNWLGdDQUFRLFNBREU7QUFFVixnQ0FBUSxTQUZFO0FBR1YsaUNBQVM7QUFIQyxxQkFIK0I7O0FBUTdDLHdCQUFJLFdBQVcsUUFBZjtBQUNJLDRCQUFJLGFBQWEsU0FBUyxPQUFULENBQWpCO0FBQ0ksb0NBQVEsTUFBUixJQUFrQixTQUFTLE9BQVQsRUFBa0IsU0FBbEIsQ0FBbEI7QUFESjtBQURKLHFCQUdBLElBQUksdUJBQXVCLFFBQTNCO0FBQ0ksNEJBQUksYUFBYSxTQUFTLG1CQUFULENBQWpCO0FBQ0ksb0NBQVEsT0FBUixJQUFtQixTQUFTLG1CQUFULEVBQThCLFNBQTlCLENBQW5CO0FBREo7QUFESixxQkFHQSxJQUFJLFFBQVEsT0FBUixLQUFvQixRQUFRLE1BQVIsQ0FBeEI7QUFDSSxnQ0FBUSxNQUFSLElBQWtCLFFBQVEsT0FBUixJQUFtQixRQUFRLE1BQVIsQ0FBckM7QUFESixxQkFFQSxPQUFPLFFBQVAsSUFBbUIsT0FBbkI7QUFDSDtBQUNELHVCQUFPLE1BQVA7QUFuR0c7QUFBQTtBQXNHRCxzQkF0R0MsMEJBc0dlLE1BdEdmO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBc0d1QixzQkF0R3ZCLG1GQXNHZ0MsRUF0R2hDO0FBQUEsdUJBdUdHLFNBQUssV0FBTCxFQXZHSDtBQUFBO0FBQUEsdUJBd0dtQixTQUFLLGVBQUwsQ0FBc0IsU0FBSyxNQUFMLENBQWE7QUFDckQsNEJBQVEsU0FBSyxRQUFMLENBQWUsTUFBZjtBQUQ2QyxpQkFBYixFQUV6QyxNQUZ5QyxDQUF0QixDQXhHbkI7QUFBQTtBQXdHQyx5QkF4R0Q7QUEyR0MseUJBM0dELEdBMkdhLFNBQUssWUFBTCxFQTNHYjtBQTRHQyxzQkE1R0QsR0E0R1U7QUFDVCw0QkFBUSxVQUFVLE1BQVYsQ0FEQztBQUVULDRCQUFRLFVBQVUsTUFBVixDQUZDO0FBR1QsaUNBQWEsU0FISjtBQUlULGdDQUFZLFNBQUssT0FBTCxDQUFjLFNBQWQ7QUFKSCxpQkE1R1Y7O0FBa0hILHVCQUFPLE1BQVA7QUFsSEc7QUFBQTtBQXFIRCxtQkFySEMsdUJBcUhZLE1BckhaO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsdUJBc0hHLFNBQUssV0FBTCxFQXRISDtBQUFBO0FBQUEsdUJBdUhnQixTQUFLLGdCQUFMLENBQXVCO0FBQ3RDLDRCQUFRLFNBQUssUUFBTCxDQUFlLE1BQWY7QUFEOEIsaUJBQXZCLENBdkhoQjtBQUFBO0FBdUhDLHNCQXZIRDtBQTBIQyx5QkExSEQsR0EwSGEsU0FBSyxZQUFMLEVBMUhiOztBQTJISCx1QkFBTztBQUNILGlDQUFhLFNBRFY7QUFFSCxnQ0FBWSxTQUFLLE9BQUwsQ0FBYyxTQUFkLENBRlQ7QUFHSCw0QkFBUSxPQUFPLE1BQVAsQ0FITDtBQUlILDJCQUFPLE9BQU8sS0FBUCxDQUpKO0FBS0gsMkJBQU8sT0FBTyxLQUFQLENBTEo7QUFNSCwyQkFBTyxPQUFPLEtBQVAsQ0FOSjtBQU9ILDRCQUFRLE9BQU8sTUFBUCxDQVBMO0FBUUgsNEJBQVEsU0FSTDtBQVNILDZCQUFTLFNBVE47QUFVSCw2QkFBUyxTQVZOO0FBV0gsNEJBQVEsT0FBTyxNQUFQLENBWEw7QUFZSCw4QkFBVSxTQVpQO0FBYUgsa0NBQWMsU0FiWDtBQWNILCtCQUFXLFNBZFI7QUFlSCxrQ0FBYyxTQWZYO0FBZ0JILG1DQUFlLE9BQU8sUUFBUCxDQWhCWjtBQWlCSCw0QkFBUTtBQWpCTCxpQkFBUDtBQTNIRztBQUFBO0FBZ0pELG1CQWhKQyx1QkFnSlksTUFoSlo7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFnSm9CLHNCQWhKcEIsbUZBZ0o2QixFQWhKN0I7QUFBQSx1QkFpSkcsU0FBSyxXQUFMLEVBakpIO0FBQUE7QUFrSkgsdUJBQU8sU0FBSyxnQkFBTCxDQUF1QixTQUFLLE1BQUwsQ0FBYTtBQUN2Qyw0QkFBUSxTQUFLLFFBQUwsQ0FBZSxNQUFmO0FBRCtCLGlCQUFiLEVBRTNCLE1BRjJCLENBQXZCLENBQVA7QUFsSkc7QUFBQTtBQXVKRCxtQkF2SkMsdUJBdUpZLE1BdkpaLEVBdUpvQixJQXZKcEIsRUF1SjBCLElBdkoxQixFQXVKZ0MsTUF2SmhDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQXVKd0MscUJBdkp4QyxtRkF1SmdELFNBdkpoRDtBQXVKMkQsc0JBdkozRCxtRkF1Sm9FLEVBdkpwRTtBQUFBLHVCQXdKRyxTQUFLLFdBQUwsRUF4Skg7QUFBQTtBQXlKSCxvQkFBSSxRQUFRLFFBQVo7QUFDSSwwQkFBTSxJQUFJLGFBQUosQ0FBbUIsU0FBSyxFQUFMLEdBQVUsMkJBQTdCLENBQU47QUFESixpQkF6SkcsT0EySmtCLFNBQUssYUFBTCxDQUFvQixTQUFLLE1BQUwsQ0FBYTtBQUNsRCxxQ0FBaUIsU0FBSyxRQUFMLENBQWUsTUFBZixDQURpQztBQUVsRCw4QkFBVyxRQUFRLEtBQVQsR0FBa0IsS0FBbEIsR0FBMEIsS0FGYztBQUdsRCw4QkFBVSxNQUh3QztBQUlsRCw2QkFBUztBQUp5QyxpQkFBYixFQUt0QyxNQUxzQyxDQUFwQixDQTNKbEI7QUFBQTtBQTJKQyx3QkEzSkQ7O0FBaUtILHVCQUFPO0FBQ0gsNEJBQVEsUUFETDtBQUVILDBCQUFNLFNBQVMsUUFBVCxFQUFtQixVQUFuQixFQUErQixRQUEvQjtBQUZILGlCQUFQO0FBaktHO0FBQUE7QUF1S0QsbUJBdktDLHVCQXVLWSxFQXZLWjtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQXVLZ0Isc0JBdktoQixtRkF1S3lCLEVBdkt6QjtBQUFBLHVCQXdLRyxTQUFLLFdBQUwsRUF4S0g7QUFBQTtBQXlLSCx1QkFBTyxTQUFLLG1CQUFMLENBQTBCLFNBQUssTUFBTCxDQUFhO0FBQzFDLGdDQUFZO0FBRDhCLGlCQUFiLEVBRTlCLE1BRjhCLENBQTFCLENBQVA7QUF6S0c7QUFBQTtBQThLRCxlQTlLQyxtQkE4S1EsSUE5S1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQThLYyxtQkE5S2QsbUZBOEtvQixLQTlLcEI7QUE4SzJCLHNCQTlLM0IsbUZBOEtvQyxLQTlLcEM7QUE4SzJDLHNCQTlLM0MsbUZBOEtvRCxFQTlLcEQ7QUE4S3dELHVCQTlLeEQsbUZBOEtrRSxTQTlLbEU7QUE4SzZFLG9CQTlLN0UsbUZBOEtvRixTQTlLcEY7QUErS0MsbUJBL0tELEdBK0tPLFNBQUssSUFBTCxDQUFVLEtBQVYsSUFBbUIsR0FBbkIsR0FBeUIsR0EvS2hDOztBQWdMSCxvQkFBSSxPQUFPLEtBQVgsRUFBa0I7QUFDZCwyQkFBTyxNQUFNLFNBQUssT0FBWCxHQUFxQixHQUFyQixHQUEyQixTQUFLLGFBQUwsQ0FBb0IsSUFBcEIsRUFBMEIsTUFBMUIsQ0FBbEM7QUFDSCxpQkFGRCxNQUVPO0FBQ0MseUJBREQsR0FDUyxTQUFLLEtBQUwsRUFEVDs7QUFFSCwyQkFBTyxTQUFLLFNBQUwsQ0FBZ0IsU0FBSyxNQUFMLENBQWE7QUFDaEMsa0NBQVUsSUFEc0I7QUFFaEMsaUNBQVM7QUFGdUIscUJBQWIsRUFHcEIsTUFIb0IsQ0FBaEIsQ0FBUDtBQUlBLDhCQUFVO0FBQ04sd0NBQWdCLG1DQURWO0FBRU4sMENBQWtCLEtBQUssTUFGakI7QUFHTiwrQkFBTyxTQUFLLE1BSE47QUFJTixnQ0FBUSxTQUFLLElBQUwsQ0FBVyxTQUFLLE1BQUwsQ0FBYSxJQUFiLENBQVgsRUFBK0IsU0FBSyxNQUFMLENBQWEsU0FBSyxNQUFsQixDQUEvQixFQUEwRCxRQUExRDtBQUpGLHFCQUFWO0FBTUg7QUE5TEUsdUJBK0xrQixTQUFLLEtBQUwsQ0FBWSxHQUFaLEVBQWlCLE1BQWpCLEVBQXlCLE9BQXpCLEVBQWtDLElBQWxDLENBL0xsQjtBQUFBO0FBK0xDLHdCQS9MRDs7QUFnTUgsb0JBQUksV0FBVyxRQUFmO0FBQ0ksMEJBQU0sSUFBSSxhQUFKLENBQW1CLFNBQUssRUFBTCxHQUFVLEdBQVYsR0FBZ0IsU0FBUyxPQUFULENBQW5DLENBQU47QUFESixpQkFFQSxJQUFJLGFBQWEsUUFBakI7QUFDSSx3QkFBSSxDQUFDLFNBQVMsU0FBVCxDQUFMO0FBQ0ksOEJBQU0sSUFBSSxhQUFKLENBQW1CLFNBQUssRUFBTCxHQUFVLEdBQVYsR0FBZ0IsU0FBSyxJQUFMLENBQVcsUUFBWCxDQUFuQyxDQUFOO0FBREo7QUFESixpQkFHQSxPQUFPLFFBQVA7QUFyTUc7QUFBQTtBQUFBLEtBQVg7O0FBeU1BOztBQUVBLFFBQUksWUFBWTs7QUFFWixvQkFBaUIsUUFGTDtBQUdaLG1CQUFpQixPQUhMO0FBSVosa0JBQWlCLE1BSkw7QUFLWixtQkFBaUIsT0FMTDtBQU1aLGlCQUFpQixLQU5MO0FBT1osa0JBQWlCLE1BUEw7QUFRWixtQkFBaUIsT0FSTDtBQVNaLHVCQUFpQixXQVRMO0FBVVosb0JBQWlCLFFBVkw7QUFXWixvQkFBaUIsUUFYTDtBQVlaLG1CQUFpQixPQVpMO0FBYVoscUJBQWlCLFNBYkw7QUFjWixrQkFBaUIsTUFkTDtBQWVaLGlCQUFpQixLQWZMO0FBZ0JaLG9CQUFpQixRQWhCTDtBQWlCWixtQkFBaUIsT0FqQkw7QUFrQlosZ0JBQWlCLElBbEJMO0FBbUJaLG9CQUFpQixRQW5CTDtBQW9CWixnQkFBaUIsSUFwQkw7QUFxQlosdUJBQWlCLFdBckJMO0FBc0JaLHNCQUFpQixVQXRCTDtBQXVCWixzQkFBaUIsVUF2Qkw7QUF3QlosbUJBQWlCLE9BeEJMO0FBeUJaLGdCQUFpQixJQXpCTDtBQTBCWixnQkFBaUIsSUExQkw7QUEyQlosa0JBQWlCLE1BM0JMO0FBNEJaLGdCQUFpQixJQTVCTDtBQTZCWixlQUFpQixHQTdCTDtBQThCWixpQkFBaUIsS0E5Qkw7QUErQlosb0JBQWlCLFFBL0JMO0FBZ0NaLHFCQUFpQixTQWhDTDtBQWlDWixxQkFBaUIsU0FqQ0w7QUFrQ1osa0JBQWlCLE1BbENMO0FBbUNaLHlCQUFpQixhQW5DTDtBQW9DWixvQkFBaUIsUUFwQ0w7QUFxQ1osc0JBQWlCLFVBckNMO0FBc0NaLG9CQUFpQixRQXRDTDtBQXVDWixxQkFBaUIsU0F2Q0w7QUF3Q1osZUFBaUIsR0F4Q0w7QUF5Q1osZ0JBQWlCLElBekNMO0FBMENaLG1CQUFpQixPQTFDTDtBQTJDWixrQkFBaUIsTUEzQ0w7QUE0Q1osaUJBQWlCLEtBNUNMO0FBNkNaLGlCQUFpQixLQTdDTDtBQThDWixvQkFBaUIsUUE5Q0w7QUErQ1osZ0JBQWlCLElBL0NMO0FBZ0RaLGtCQUFpQixNQWhETDtBQWlEWixrQkFBaUIsTUFqREw7QUFrRFosaUJBQWlCLEtBbERMO0FBbURaLGlCQUFpQixLQW5ETDtBQW9EWixnQkFBaUIsSUFwREw7QUFxRFosa0JBQWlCLE1BckRMO0FBc0RaLG1CQUFpQixPQXRETDtBQXVEWixvQkFBaUIsUUF2REw7QUF3RFosaUJBQWlCLEtBeERMO0FBeURaLGdCQUFpQixJQXpETDtBQTBEWixtQkFBaUIsT0ExREw7QUEyRFoscUJBQWlCLFNBM0RMO0FBNERaLHFCQUFpQixTQTVETDtBQTZEWixnQkFBaUIsSUE3REw7QUE4RFosbUJBQWlCLE9BOURMO0FBK0RaLG9CQUFpQixRQS9ETDtBQWdFWixzQkFBaUIsVUFoRUw7QUFpRVosa0JBQWlCLE1BakVMO0FBa0VaLHdCQUFpQixZQWxFTDtBQW1FWixzQkFBaUIsVUFuRUw7QUFvRVosbUJBQWlCLE9BcEVMO0FBcUVaLG1CQUFpQixPQXJFTDtBQXNFWixvQkFBaUIsUUF0RUw7QUF1RVosZ0JBQWlCLElBdkVMO0FBd0VaLGtCQUFpQixNQXhFTDtBQXlFWixpQkFBaUIsS0F6RUw7QUEwRVosaUJBQWlCLEtBMUVMO0FBMkVaLGlCQUFpQixLQTNFTDtBQTRFWixnQkFBaUI7QUE1RUwsS0FBaEI7O0FBK0VBLFFBQUkscUJBQXFCLFNBQXJCLGtCQUFxQixDQUFVLFNBQVYsRUFBcUI7QUFDMUMsWUFBSSxTQUFTLEVBQWI7O0FBRDBDLHFDQUVqQyxFQUZpQztBQUd0QyxtQkFBTyxFQUFQLElBQWEsVUFBVSxNQUFWLEVBQWtCO0FBQzNCLHVCQUFPLElBQUksUUFBSixDQUFjLE9BQVEsVUFBVSxFQUFWLENBQVIsRUFBdUIsTUFBdkIsQ0FBZCxDQUFQO0FBQ0gsYUFGRDtBQUhzQzs7QUFFMUMsYUFBSyxJQUFJLEVBQVQsSUFBZSxTQUFmO0FBQUEsbUJBQVMsRUFBVDtBQUFBLFNBSUEsT0FBTyxTQUFQLEdBQW1CLE9BQU8sSUFBUCxDQUFhLFNBQWIsQ0FBbkI7QUFDQSxlQUFPLE1BQVA7QUFDSCxLQVJEOztBQVVBOztBQUVBLFFBQU0sT0FBTyxPQUFPLE1BQVAsQ0FBZSxtQkFBb0IsU0FBcEIsQ0FBZixFQUErQzs7QUFFeEQsd0JBRndEOztBQUl4RDs7QUFFQSw0QkFOd0Q7QUFPeEQsb0NBUHdEO0FBUXhELGtDQVJ3RDtBQVN4RCxnREFUd0Q7QUFVeEQsNENBVndEO0FBV3hELGtDQVh3RDtBQVl4RCxzQ0Fad0Q7QUFheEQsc0NBYndEO0FBY3hELGtEQWR3RDs7QUFnQnhEOztBQUVBLG9CQWxCd0Q7QUFtQnhELHdCQW5Cd0Q7QUFvQnhELDhCQXBCd0Q7QUFxQnhELHdCQXJCd0Q7QUFzQnhELHNCQXRCd0Q7QUF1QnhELGtCQXZCd0Q7QUF3QnhELHdCQXhCd0Q7QUF5QnhELHNCQXpCd0Q7QUEwQnhELHdCQTFCd0Q7QUEyQnhELHNCQTNCd0Q7QUE0QnhELG9CQTVCd0Q7QUE2QnhELDRCQTdCd0Q7QUE4QnhELGdCQTlCd0Q7QUErQnhELHdCQS9Cd0Q7O0FBaUN4RDs7QUFFQSxrQkFBVSxPQW5DOEM7QUFvQ3hELGlCQUFTLE1BcEMrQzs7QUFzQ3hEOztBQUVBLGtDQXhDd0Q7QUF5Q3hELHNDQXpDd0Q7QUEwQ3hELHNDQTFDd0Q7QUEyQ3hELHNDQTNDd0Q7QUE0Q3hELG9DQTVDd0Q7QUE2Q3hELHNDQTdDd0Q7QUE4Q3hELHNDQTlDd0Q7QUErQ3hELHdDQS9Dd0Q7QUFnRHhELGtCQWhEd0Q7QUFpRHhELGtCQWpEd0Q7QUFrRHhEOztBQWxEd0QsS0FBL0MsQ0FBYjs7QUFzREE7O0FBRUEsUUFBSSxVQUFKLEVBQWdCOztBQUVaLGVBQU8sT0FBUCxHQUFpQixJQUFqQjtBQUVILEtBSkQsTUFJTzs7QUFFSCxlQUFPLElBQVAsR0FBYyxJQUFkO0FBQ0g7O0FBRUQ7QUFFQyxDQWx2ZUQsSSxDQWt2ZU0iLCJmaWxlIjoiY2N4dC5lczUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuLypcblxuTUlUIExpY2Vuc2VcblxuQ29weXJpZ2h0IChjKSAyMDE3IElnb3IgS3JvaXRvclxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG5vZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG5pbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG50byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG5jb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG5GSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG5PVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuU09GVFdBUkUuXG5cbiovXG5cbihmdW5jdGlvbiAoKSB7XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIGRlcGVuZGVuY2llc1xuXG5jb25zdCBDcnlwdG9KUyA9IHJlcXVpcmUgKCdjcnlwdG8tanMnKVxuICAgICwgcXMgICAgICAgPSByZXF1aXJlICgncXMnKSAvLyBxdWVyeXN0cmluZ1xuICAgIC8vICwgd3MgICAgICAgPSByZXF1aXJlICgnd3MnKSAvLyB3ZWJzb2NrZXRcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gdGhpcyBpcyB1cGRhdGVkIGJ5IHZzcy5qcyB3aGVuIGJ1aWxkaW5nXG5cbmNvbnN0IHZlcnNpb24gPSAnMS40Ljk3J1xuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBwbGF0Zm9ybSBkZXRlY3Rpb25cblxuY29uc3QgaXNOb2RlICAgICA9ICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJylcbiAgICAsIGlzQ29tbW9uSlMgPSAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcpICYmICh0eXBlb2YgcmVxdWlyZSAhPT0gJ3VuZGVmaW5lZCcpXG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuY2xhc3MgQ0NYVEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgICAgIHN1cGVyIChtZXNzYWdlKVxuICAgICAgICAvLyBhIHdvcmthcm91bmQgdG8gbWFrZSBgaW5zdGFuY2VvZiBDQ1hURXJyb3JgIHdvcmsgaW4gRVM1XG4gICAgICAgIHRoaXMuY29uc3RydWN0b3IgPSBDQ1hURXJyb3JcbiAgICAgICAgdGhpcy5fX3Byb3RvX18gICA9IENDWFRFcnJvci5wcm90b3R5cGVcbiAgICAgICAgdGhpcy5tZXNzYWdlICAgICA9IG1lc3NhZ2VcbiAgICB9XG59XG5cbmNsYXNzIEV4Y2hhbmdlRXJyb3IgZXh0ZW5kcyBDQ1hURXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgICAgIHN1cGVyIChtZXNzYWdlKVxuICAgICAgICB0aGlzLmNvbnN0cnVjdG9yID0gRXhjaGFuZ2VFcnJvclxuICAgICAgICB0aGlzLl9fcHJvdG9fXyAgID0gRXhjaGFuZ2VFcnJvci5wcm90b3R5cGVcbiAgICAgICAgdGhpcy5tZXNzYWdlICAgICA9IG1lc3NhZ2VcbiAgICB9XG59XG5cbmNsYXNzIE5vdFN1cHBvcnRlZCBleHRlbmRzIEV4Y2hhbmdlRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgICAgIHN1cGVyIChtZXNzYWdlKVxuICAgICAgICB0aGlzLmNvbnN0cnVjdG9yID0gTm90U3VwcG9ydGVkXG4gICAgICAgIHRoaXMuX19wcm90b19fICAgPSBOb3RTdXBwb3J0ZWQucHJvdG90eXBlXG4gICAgICAgIHRoaXMubWVzc2FnZSAgICAgPSBtZXNzYWdlXG4gICAgfVxufVxuXG5jbGFzcyBBdXRoZW50aWNhdGlvbkVycm9yIGV4dGVuZHMgRXhjaGFuZ2VFcnJvciB7XG4gICAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICAgICAgc3VwZXIgKG1lc3NhZ2UpXG4gICAgICAgIHRoaXMuY29uc3RydWN0b3IgPSBBdXRoZW50aWNhdGlvbkVycm9yXG4gICAgICAgIHRoaXMuX19wcm90b19fICAgPSBBdXRoZW50aWNhdGlvbkVycm9yLnByb3RvdHlwZVxuICAgICAgICB0aGlzLm1lc3NhZ2UgICAgID0gbWVzc2FnZVxuICAgIH1cbn1cblxuY2xhc3MgSW5zdWZmaWNpZW50RnVuZHMgZXh0ZW5kcyBFeGNoYW5nZUVycm9yIHtcbiAgICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgICAgICBzdXBlciAobWVzc2FnZSlcbiAgICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IEluc3VmZmljaWVudEZ1bmRzXG4gICAgICAgIHRoaXMuX19wcm90b19fICAgPSBJbnN1ZmZpY2llbnRGdW5kcy5wcm90b3R5cGVcbiAgICAgICAgdGhpcy5tZXNzYWdlICAgICA9IG1lc3NhZ2VcbiAgICB9ICAgXG59XG5cbmNsYXNzIE5ldHdvcmtFcnJvciBleHRlbmRzIENDWFRFcnJvciB7XG4gICAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICAgICAgc3VwZXIgKG1lc3NhZ2UpXG4gICAgICAgIHRoaXMuY29uc3RydWN0b3IgPSBOZXR3b3JrRXJyb3JcbiAgICAgICAgdGhpcy5fX3Byb3RvX18gICA9IE5ldHdvcmtFcnJvci5wcm90b3R5cGVcbiAgICAgICAgdGhpcy5tZXNzYWdlICAgICA9IG1lc3NhZ2VcbiAgICB9XG59XG5cbmNsYXNzIEREb1NQcm90ZWN0aW9uIGV4dGVuZHMgTmV0d29ya0Vycm9yIHtcbiAgICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgICAgICBzdXBlciAobWVzc2FnZSlcbiAgICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IEREb1NQcm90ZWN0aW9uXG4gICAgICAgIHRoaXMuX19wcm90b19fICAgPSBERG9TUHJvdGVjdGlvbi5wcm90b3R5cGVcbiAgICAgICAgdGhpcy5tZXNzYWdlICAgICA9IG1lc3NhZ2VcbiAgICB9XG59XG5cbmNsYXNzIFJlcXVlc3RUaW1lb3V0IGV4dGVuZHMgTmV0d29ya0Vycm9yIHtcbiAgICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgICAgICBzdXBlciAobWVzc2FnZSlcbiAgICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IFJlcXVlc3RUaW1lb3V0XG4gICAgICAgIHRoaXMuX19wcm90b19fICAgPSBSZXF1ZXN0VGltZW91dC5wcm90b3R5cGVcbiAgICAgICAgdGhpcy5tZXNzYWdlICAgICA9IG1lc3NhZ2VcbiAgICB9XG59XG5cbmNsYXNzIEV4Y2hhbmdlTm90QXZhaWxhYmxlIGV4dGVuZHMgTmV0d29ya0Vycm9yIHtcbiAgICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgICAgICBzdXBlciAobWVzc2FnZSlcbiAgICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IEV4Y2hhbmdlTm90QXZhaWxhYmxlXG4gICAgICAgIHRoaXMuX19wcm90b19fICAgPSBFeGNoYW5nZU5vdEF2YWlsYWJsZS5wcm90b3R5cGVcbiAgICAgICAgdGhpcy5tZXNzYWdlICAgICA9IG1lc3NhZ2VcbiAgICB9XG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIHV0aWxpdHkgaGVscGVyc1xuXG5jb25zdCBzbGVlcCA9IG1zID0+IG5ldyBQcm9taXNlIChyZXNvbHZlID0+IHNldFRpbWVvdXQgKHJlc29sdmUsIG1zKSk7XG5cbmNvbnN0IGRlY2ltYWwgPSBmbG9hdCA9PiBwYXJzZUZsb2F0IChmbG9hdCkudG9TdHJpbmcgKClcblxuY29uc3QgdGltZW91dCA9IChtcywgcHJvbWlzZSkgPT5cbiAgICAgICAgUHJvbWlzZS5yYWNlIChbXG4gICAgICAgICAgICBwcm9taXNlLFxuICAgICAgICAgICAgc2xlZXAgKG1zKS50aGVuICgoKSA9PiB7IHRocm93IG5ldyBSZXF1ZXN0VGltZW91dCAoJ3JlcXVlc3QgdGltZWQgb3V0JykgfSlcbiAgICAgICAgXSlcblxuY29uc3QgY2FwaXRhbGl6ZSA9IHN0cmluZyA9PiBzdHJpbmcubGVuZ3RoID8gKHN0cmluZy5jaGFyQXQgKDApLnRvVXBwZXJDYXNlICgpICsgc3RyaW5nLnNsaWNlICgxKSkgOiBzdHJpbmdcblxuY29uc3Qga2V5c29ydCA9IG9iamVjdCA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0ge31cbiAgICBPYmplY3Qua2V5cyAob2JqZWN0KS5zb3J0ICgpLmZvckVhY2ggKGtleSA9PiByZXN1bHRba2V5XSA9IG9iamVjdFtrZXldKVxuICAgIHJldHVybiByZXN1bHRcbn1cblxuY29uc3QgZXh0ZW5kID0gKC4uLmFyZ3MpID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSB7fVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKylcbiAgICAgICAgaWYgKHR5cGVvZiBhcmdzW2ldID09PSAnb2JqZWN0JylcbiAgICAgICAgICAgIE9iamVjdC5rZXlzIChhcmdzW2ldKS5mb3JFYWNoIChrZXkgPT5cbiAgICAgICAgICAgICAgICAocmVzdWx0W2tleV0gPSBhcmdzW2ldW2tleV0pKVxuICAgIHJldHVybiByZXN1bHRcbn1cblxuY29uc3Qgb21pdCA9IGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgICBjb25zdCByZXN1bHQgPSBleHRlbmQgKG9iamVjdClcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKylcbiAgICAgICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbaV0gPT09ICdzdHJpbmcnKVxuICAgICAgICAgICAgZGVsZXRlIHJlc3VsdFthcmd1bWVudHNbaV1dXG4gICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkgKGFyZ3VtZW50c1tpXSkpXG4gICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IGFyZ3VtZW50c1tpXS5sZW5ndGg7IGsrKylcbiAgICAgICAgICAgICAgICBkZWxldGUgcmVzdWx0W2FyZ3VtZW50c1tpXVtrXV1cbiAgICByZXR1cm4gcmVzdWx0XG59XG5cbmNvbnN0IGluZGV4QnkgPSAoYXJyYXksIGtleSkgPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQgZWxlbWVudCA9IGFycmF5W2ldXG4gICAgICAgIGlmICh0eXBlb2YgZWxlbWVudFtrZXldICE9ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXN1bHRbZWxlbWVudFtrZXldXSA9IGVsZW1lbnRcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0XG59XG5cbmNvbnN0IHNvcnRCeSA9IChhcnJheSwga2V5LCBkZXNjZW5kaW5nID0gZmFsc2UpID0+IHtcbiAgICBkZXNjZW5kaW5nID0gZGVzY2VuZGluZyA/IC0xIDogMVxuICAgIHJldHVybiBhcnJheS5zb3J0ICgoYSwgYikgPT4gKChhW2tleV0gPCBiW2tleV0pID8gLWRlc2NlbmRpbmcgOiAoKGFba2V5XSA+IGJba2V5XSkgPyBkZXNjZW5kaW5nIDogMCkpKVxufVxuXG5jb25zdCBmbGF0dGVuID0gKGFycmF5LCByZXN1bHQgPSBbXSkgPT4ge1xuICAgIGZvciAobGV0IGkgPSAwLCBsZW5ndGggPSBhcnJheS5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGFycmF5W2ldXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5ICh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGZsYXR0ZW4gKHZhbHVlLCByZXN1bHQpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCAodmFsdWUpXG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdFxufVxuXG5jb25zdCB1bmlxdWUgPSBhcnJheSA9PiBhcnJheS5maWx0ZXIgKCh2YWx1ZSwgaW5kZXgsIHNlbGYpID0+IChzZWxmLmluZGV4T2YgKHZhbHVlKSA9PSBpbmRleCkpXG5cbmNvbnN0IHBsdWNrID0gKGFycmF5LCBrZXkpID0+IGFycmF5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIgKGVsZW1lbnQgPT4gKHR5cGVvZiBlbGVtZW50W2tleV0gIT0gJ3VuZGVmaW5lZCcpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwIChlbGVtZW50ID0+IGVsZW1lbnRba2V5XSlcblxuY29uc3QgdXJsZW5jb2RlID0gb2JqZWN0ID0+IHFzLnN0cmluZ2lmeSAob2JqZWN0KVxuXG5jb25zdCBzdW0gPSAoLi4uYXJncykgPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGFyZ3MuZmlsdGVyIChhcmcgPT4gdHlwZW9mIGFyZyAhPSAndW5kZWZpbmVkJylcbiAgICByZXR1cm4gKHJlc3VsdC5sZW5ndGggPiAwKSA/XG4gICAgICAgIHJlc3VsdC5yZWR1Y2UgKChzdW0sIHZhbHVlKSA9PiBzdW0gKyB2YWx1ZSwgMCkgOiB1bmRlZmluZWRcbn1cblxuY29uc3Qgb3JkZXJlZCA9IHggPT4geCAvLyBhIHN0dWIgdG8ga2VlcCBhc3NvYyBrZXlzIGluIG9yZGVyLCBpbiBKUyBpdCBkb2VzIG5vdGhpbmcsIGl0J3MgbW9zdGx5IGZvciBQeXRob25cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gYSBjcm9zcy1wbGF0Zm9ybSBGZXRjaCBBUElcblxuY29uc3Qgbm9kZUZldGNoICAgPSBpc05vZGUgJiYgbW9kdWxlLnJlcXVpcmUgKCdub2RlLWZldGNoJykgICAgICAgICAvLyB1c2luZyBtb2R1bGUucmVxdWlyZSB0byBwcmV2ZW50IFdlYnBhY2sgLyBSZWFjdCBOYXRpdmUgZnJvbSB0cnlpbmcgdG8gaW5jbHVkZSBpdFxuICAgICwgd2luZG93RmV0Y2ggPSAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmZldGNoKSAvLyBuYXRpdmUgRmV0Y2ggQVBJIChpbiBuZXdlciBicm93c2VycylcbiAgICAsIHhockZldGNoICAgID0gKHVybCwgb3B0aW9ucywgdmVyYm9zZSA9IGZhbHNlKSA9PiAgICAgICAgICAgICAgLy8gYSBxdWljayBhZC1ob2MgcG9seWZpbGwgKGZvciBvbGRlciBicm93c2VycylcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBQcm9taXNlICgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cgKHVybCwgb3B0aW9ucylcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCAoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1ldGhvZCA9IG9wdGlvbnMubWV0aG9kIHx8ICdHRVQnXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHIub3BlbiAobWV0aG9kLCB1cmwsIHRydWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4aHIuc3RhdHVzID09IDIwMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlICh4aHIucmVzcG9uc2VUZXh0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7IC8vIFs0MDMsIDQwNCwgLi4uXS5pbmRleE9mICh4aHIuc3RhdHVzKSA+PSAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yIChtZXRob2QsIHVybCwgeGhyLnN0YXR1cywgeGhyLnJlc3BvbnNlVGV4dClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5oZWFkZXJzICE9ICd1bmRlZmluZWQnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBoZWFkZXIgaW4gb3B0aW9ucy5oZWFkZXJzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIgKGhlYWRlciwgb3B0aW9ucy5oZWFkZXJzW2hlYWRlcl0pXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHIuc2VuZCAob3B0aW9ucy5ib2R5KVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcblxuY29uc3QgZmV0Y2ggPSBub2RlRmV0Y2ggfHwgd2luZG93RmV0Y2ggfHwgeGhyRmV0Y2hcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gc3RyaW5nIOKGkOKGkiBiaW5hcnkg4oaQ4oaSIGJhc2U2NCBjb252ZXJzaW9uIHJvdXRpbmVzXG5cbmNvbnN0IHN0cmluZ1RvQmluYXJ5ID0gc3RyID0+IHtcbiAgICBjb25zdCBhcnIgPSBuZXcgVWludDhBcnJheSAoc3RyLmxlbmd0aClcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykgeyBhcnJbaV0gPSBzdHIuY2hhckNvZGVBdChpKTsgfVxuICAgIHJldHVybiBDcnlwdG9KUy5saWIuV29yZEFycmF5LmNyZWF0ZSAoYXJyKVxufVxuXG5jb25zdCBzdHJpbmdUb0Jhc2U2NCA9IHN0cmluZyA9PiBDcnlwdG9KUy5lbmMuTGF0aW4xLnBhcnNlIChzdHJpbmcpLnRvU3RyaW5nIChDcnlwdG9KUy5lbmMuQmFzZTY0KVxuICAgICwgdXRmMTZUb0Jhc2U2NCAgPSBzdHJpbmcgPT4gQ3J5cHRvSlMuZW5jLlV0ZjE2IC5wYXJzZSAoc3RyaW5nKS50b1N0cmluZyAoQ3J5cHRvSlMuZW5jLkJhc2U2NClcbiAgICAsIGJhc2U2NFRvQmluYXJ5ID0gc3RyaW5nID0+IENyeXB0b0pTLmVuYy5CYXNlNjQucGFyc2UgKHN0cmluZylcbiAgICAsIGJhc2U2NFRvU3RyaW5nID0gc3RyaW5nID0+IENyeXB0b0pTLmVuYy5CYXNlNjQucGFyc2UgKHN0cmluZykudG9TdHJpbmcgKENyeXB0b0pTLmVuYy5VdGY4KVxuICAgICwgYmluYXJ5VG9TdHJpbmcgPSBzdHJpbmcgPT4gc3RyaW5nXG5cbmNvbnN0IGJpbmFyeUNvbmNhdCA9ICguLi5hcmdzKSA9PiBhcmdzLnJlZHVjZSAoKGEsIGIpID0+IGEuY29uY2F0IChiKSlcblxuLy8gdXJsLXNhZmUtYmFzZTY0IHdpdGhvdXQgZXF1YWxzIHNpZ25zLCB3aXRoICsgcmVwbGFjZWQgYnkgLSBhbmQgc2xhc2hlcyByZXBsYWNlZCBieSB1bmRlcnNjb3Jlc1xuY29uc3QgdXJsZW5jb2RlQmFzZTY0ID0gYmFzZTY0c3RyaW5nID0+IGJhc2U2NHN0cmluZy5yZXBsYWNlICgvWz1dKyQvLCAnJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSAoL1xcKy9nLCAnLScpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UgKC9cXC8vZywgJ18nKVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBjcnlwdG9ncmFwaHlcblxuY29uc3QgaGFzaCA9IChyZXF1ZXN0LCBoYXNoID0gJ21kNScsIGRpZ2VzdCA9ICdoZXgnKSA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gQ3J5cHRvSlNbaGFzaC50b1VwcGVyQ2FzZSAoKV0gKHJlcXVlc3QpXG4gICAgcmV0dXJuIChkaWdlc3QgPT0gJ2JpbmFyeScpID8gcmVzdWx0IDogcmVzdWx0LnRvU3RyaW5nIChDcnlwdG9KUy5lbmNbY2FwaXRhbGl6ZSAoZGlnZXN0KV0pXG59XG5cbmNvbnN0IGhtYWMgPSAocmVxdWVzdCwgc2VjcmV0LCBoYXNoID0gJ3NoYTI1NicsIGRpZ2VzdCA9ICdoZXgnKSA9PiB7XG4gICAgY29uc3QgZW5jb2RpbmcgPSAoZGlnZXN0ID09ICdiaW5hcnknKSA/ICdMYXRpbjEnIDogY2FwaXRhbGl6ZSAoZGlnZXN0KVxuICAgIHJldHVybiBDcnlwdG9KU1snSG1hYycgKyBoYXNoLnRvVXBwZXJDYXNlICgpXSAocmVxdWVzdCwgc2VjcmV0KS50b1N0cmluZyAoQ3J5cHRvSlMuZW5jW2NhcGl0YWxpemUgKGVuY29kaW5nKV0pXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIGEgSlNPTiBXZWIgVG9rZW4gYXV0aGVudGljYXRpb24gbWV0aG9kXG5cbmNvbnN0IGp3dCA9IChyZXF1ZXN0LCBzZWNyZXQsIGFsZyA9ICdIUzI1NicsIGhhc2ggPSAnc2hhMjU2JykgPT4ge1xuICAgIGNvbnN0IGVuY29kZWRIZWFkZXIgPSB1cmxlbmNvZGVCYXNlNjQgKHN0cmluZ1RvQmFzZTY0IChKU09OLnN0cmluZ2lmeSAoeyAnYWxnJzogYWxnLCAndHlwJzogJ0pXVCcgfSkpKVxuICAgICAgICAsIGVuY29kZWREYXRhID0gdXJsZW5jb2RlQmFzZTY0IChzdHJpbmdUb0Jhc2U2NCAoSlNPTi5zdHJpbmdpZnkgKHJlcXVlc3QpKSlcbiAgICAgICAgLCB0b2tlbiA9IFsgZW5jb2RlZEhlYWRlciwgZW5jb2RlZERhdGEgXS5qb2luICgnLicpXG4gICAgICAgICwgc2lnbmF0dXJlID0gdXJsZW5jb2RlQmFzZTY0ICh1dGYxNlRvQmFzZTY0IChobWFjICh0b2tlbiwgc2VjcmV0LCBoYXNoLCAndXRmMTYnKSkpXG4gICAgcmV0dXJuIFsgdG9rZW4sIHNpZ25hdHVyZSBdLmpvaW4gKCcuJylcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gY29uc3QgV2ViU29ja2V0ID0gcmVxdWlyZSgnd3MnKVxuLy8gY29uc3Qgd3MgPSBuZXcgV2ViU29ja2V0ICh0aGlzLnVybHNbJ3dlYnNvY2tldCddKVxuLy8gd3Mub24gKCdvcGVuJywgZnVuY3Rpb24gb3BlbiAoKSB7XG4vLyAgICAgY29uc29sZS5sb2cgKCdjb25uZWN0ZWQnKVxuLy8gICAgIC8vIHdzLnNlbmQgKERhdGUubm93ICgpKVxuLy8gfSlcbi8vIHdzLm9uICgnY2xvc2UnLCBmdW5jdGlvbiBjbG9zZSAoKSB7XG4vLyAgICAgY29uc29sZS5sb2cgKCdkaXNjb25uZWN0ZWQnKVxuLy8gfSk7XG4vLyB3cy5vbiAoJ21lc3NhZ2UnLCBmdW5jdGlvbiBpbmNvbWluZyAoZGF0YSkge1xuLy8gICAgIC8vIGNvbnNvbGUubG9nIChgUm91bmR0cmlwIHRpbWU6ICR7RGF0ZS5ub3coKSAtIGRhdGF9IG1zYCk7XG4vLyAgICAgc2V0VGltZW91dCAoZnVuY3Rpb24gdGltZW91dCAoKSB7XG4vLyAgICAgICAgIHdzLnNlbmQgKERhdGUubm93ICgpKVxuLy8gICAgIH0sIDUwMClcbi8vIH0pXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIHRoZSBiYXNlIGNsYXNzXG5cbmNvbnN0IEV4Y2hhbmdlID0gZnVuY3Rpb24gKGNvbmZpZykge1xuXG4gICAgdGhpcy5oYXNoID0gaGFzaFxuICAgIHRoaXMuaG1hYyA9IGhtYWNcbiAgICB0aGlzLmp3dCA9IGp3dCAvLyBKU09OIFdlYiBUb2tlblxuICAgIHRoaXMuYmluYXJ5Q29uY2F0ID0gYmluYXJ5Q29uY2F0XG4gICAgdGhpcy5zdHJpbmdUb0JpbmFyeSA9IHN0cmluZ1RvQmluYXJ5XG4gICAgdGhpcy5zdHJpbmdUb0Jhc2U2NCA9IHN0cmluZ1RvQmFzZTY0XG4gICAgdGhpcy5iYXNlNjRUb0JpbmFyeSA9IGJhc2U2NFRvQmluYXJ5XG4gICAgdGhpcy5iYXNlNjRUb1N0cmluZyA9IGJhc2U2NFRvU3RyaW5nXG4gICAgdGhpcy5iaW5hcnlUb1N0cmluZyA9IGJpbmFyeVRvU3RyaW5nXG4gICAgdGhpcy51dGYxNlRvQmFzZTY0ID0gdXRmMTZUb0Jhc2U2NFxuICAgIHRoaXMudXJsZW5jb2RlID0gdXJsZW5jb2RlXG4gICAgdGhpcy5lbmNvZGVVUklDb21wb25lbnQgPSBlbmNvZGVVUklDb21wb25lbnRcbiAgICB0aGlzLm9taXQgPSBvbWl0XG4gICAgdGhpcy5wbHVjayA9IHBsdWNrXG4gICAgdGhpcy51bmlxdWUgPSB1bmlxdWVcbiAgICB0aGlzLmV4dGVuZCA9IGV4dGVuZFxuICAgIHRoaXMuZmxhdHRlbiA9IGZsYXR0ZW5cbiAgICB0aGlzLmluZGV4QnkgPSBpbmRleEJ5XG4gICAgdGhpcy5zb3J0QnkgPSBzb3J0QnlcbiAgICB0aGlzLmtleXNvcnQgPSBrZXlzb3J0XG4gICAgdGhpcy5kZWNpbWFsID0gZGVjaW1hbFxuICAgIHRoaXMuY2FwaXRhbGl6ZSA9IGNhcGl0YWxpemVcbiAgICB0aGlzLmpzb24gPSBKU09OLnN0cmluZ2lmeVxuICAgIHRoaXMuc3VtID0gc3VtXG4gICAgdGhpcy5vcmRlcmVkID0gb3JkZXJlZFxuXG4gICAgdGhpcy5lbmNvZGUgPSBzdHJpbmcgPT4gc3RyaW5nXG4gICAgdGhpcy5kZWNvZGUgPSBzdHJpbmcgPT4gc3RyaW5nXG5cbiAgICBpZiAoaXNOb2RlKVxuICAgICAgICB0aGlzLm5vZGVWZXJzaW9uID0gcHJvY2Vzcy52ZXJzaW9uLm1hdGNoICgvXFxkK1xcLlxcZCsuXFxkKy8pIFswXVxuXG4gICAgdGhpcy5pbml0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLm9yZGVycyA9IHt9XG4gICAgICAgIHRoaXMudHJhZGVzID0ge31cbiAgICAgICAgaWYgKHRoaXMuYXBpKVxuICAgICAgICAgICAgdGhpcy5kZWZpbmVSRVNUQVBJICh0aGlzLmFwaSwgJ3JlcXVlc3QnKTtcbiAgICAgICAgaWYgKHRoaXMubWFya2V0cylcbiAgICAgICAgICAgIHRoaXMuc2V0TWFya2V0cyAodGhpcy5tYXJrZXRzKTtcbiAgICB9XG5cbiAgICB0aGlzLmRlZmluZVJFU1RBUEkgPSBmdW5jdGlvbiAoYXBpLCBtZXRob2ROYW1lLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgT2JqZWN0LmtleXMgKGFwaSkuZm9yRWFjaCAodHlwZSA9PiB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyAoYXBpW3R5cGVdKS5mb3JFYWNoIChodHRwTWV0aG9kID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgdXJscyA9IGFwaVt0eXBlXVtodHRwTWV0aG9kXVxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdXJscy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgdXJsID0gdXJsc1tpXS50cmltICgpXG4gICAgICAgICAgICAgICAgICAgIGxldCBzcGxpdFBhdGggPSB1cmwuc3BsaXQgKC9bXmEtekEtWjAtOV0vKVxuXG4gICAgICAgICAgICAgICAgICAgIGxldCB1cHBlcmNhc2VNZXRob2QgID0gaHR0cE1ldGhvZC50b1VwcGVyQ2FzZSAoKVxuICAgICAgICAgICAgICAgICAgICBsZXQgbG93ZXJjYXNlTWV0aG9kICA9IGh0dHBNZXRob2QudG9Mb3dlckNhc2UgKClcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNhbWVsY2FzZU1ldGhvZCAgPSBjYXBpdGFsaXplIChsb3dlcmNhc2VNZXRob2QpXG4gICAgICAgICAgICAgICAgICAgIGxldCBjYW1lbGNhc2VTdWZmaXggID0gc3BsaXRQYXRoLm1hcCAoY2FwaXRhbGl6ZSkuam9pbiAoJycpXG4gICAgICAgICAgICAgICAgICAgIGxldCB1bmRlcnNjb3JlU3VmZml4ID0gc3BsaXRQYXRoLm1hcCAoeCA9PiB4LnRyaW0gKCkudG9Mb3dlckNhc2UgKCkpLmZpbHRlciAoeCA9PiB4Lmxlbmd0aCA+IDApLmpvaW4gKCdfJylcblxuICAgICAgICAgICAgICAgICAgICBpZiAoY2FtZWxjYXNlU3VmZml4LmluZGV4T2YgKGNhbWVsY2FzZU1ldGhvZCkgPT09IDApXG4gICAgICAgICAgICAgICAgICAgICAgICBjYW1lbGNhc2VTdWZmaXggPSBjYW1lbGNhc2VTdWZmaXguc2xpY2UgKGNhbWVsY2FzZU1ldGhvZC5sZW5ndGgpXG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHVuZGVyc2NvcmVTdWZmaXguaW5kZXhPZiAobG93ZXJjYXNlTWV0aG9kKSA9PT0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVyc2NvcmVTdWZmaXggPSB1bmRlcnNjb3JlU3VmZml4LnNsaWNlIChsb3dlcmNhc2VNZXRob2QubGVuZ3RoKVxuXG4gICAgICAgICAgICAgICAgICAgIGxldCBjYW1lbGNhc2UgID0gdHlwZSArIGNhbWVsY2FzZU1ldGhvZCArIGNhcGl0YWxpemUgKGNhbWVsY2FzZVN1ZmZpeClcbiAgICAgICAgICAgICAgICAgICAgbGV0IHVuZGVyc2NvcmUgPSB0eXBlICsgJ18nICsgbG93ZXJjYXNlTWV0aG9kICsgJ18nICsgdW5kZXJzY29yZVN1ZmZpeFxuXG4gICAgICAgICAgICAgICAgICAgIGlmICgnc3VmZml4ZXMnIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgnY2FtZWxjYXNlJyBpbiBvcHRpb25zWydzdWZmaXhlcyddKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbWVsY2FzZSArPSBvcHRpb25zWydzdWZmaXhlcyddWydjYW1lbGNhc2UnXVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCd1bmRlcnNjb3JlJyBpbiBvcHRpb25zLnN1ZmZpeGVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVyc2NvcmUgKz0gb3B0aW9uc1snc3VmZml4ZXMnXVsndW5kZXJzY29yZSddXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoJ3VuZGVyc2NvcmVfc3VmZml4JyBpbiBvcHRpb25zKVxuICAgICAgICAgICAgICAgICAgICAgICAgdW5kZXJzY29yZSArPSBvcHRpb25zLnVuZGVyc2NvcmVTdWZmaXg7XG4gICAgICAgICAgICAgICAgICAgIGlmICgnY2FtZWxjYXNlX3N1ZmZpeCcgaW4gb3B0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbWVsY2FzZSArPSBvcHRpb25zLmNhbWVsY2FzZVN1ZmZpeDtcblxuICAgICAgICAgICAgICAgICAgICBsZXQgcGFydGlhbCA9IHBhcmFtcyA9PiB0aGlzW21ldGhvZE5hbWVdICh1cmwsIHR5cGUsIHVwcGVyY2FzZU1ldGhvZCwgcGFyYW1zKVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXNbY2FtZWxjYXNlXSAgPSBwYXJ0aWFsXG4gICAgICAgICAgICAgICAgICAgIHRoaXNbdW5kZXJzY29yZV0gPSBwYXJ0aWFsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICB9LFxuXG4gICAgLy8gdGhpcy5pbml0aWFsaXplU3RyZWFtaW5nQVBJID0gZnVuY3Rpb24gKCkge1xuICAgIC8vICAgICB0aGlzLndzID0gbmV3IFdlYlNvY2tldCAodGhpcy51cmxzWyd3ZWJzb2NrZXQnXSlcbiAgICAvLyAgICAgd3Mub24gKCdvcGVuJywgZnVuY3Rpb24gb3BlbiAoKSB7XG4gICAgLy8gICAgICAgICBjb25zb2xlLmxvZyAoJ2Nvbm5lY3RlZCcpXG4gICAgLy8gICAgICAgICAvLyB3cy5zZW5kIChEYXRlLm5vdyAoKSlcbiAgICAvLyAgICAgfSlcbiAgICAvLyAgICAgd3Mub24gKCdjbG9zZScsIGZ1bmN0aW9uIGNsb3NlICgpIHtcbiAgICAvLyAgICAgICAgIGNvbnNvbGUubG9nICgnZGlzY29ubmVjdGVkJylcbiAgICAvLyAgICAgfSlcbiAgICAvLyAgICAgd3Mub24gKCdtZXNzYWdlJywgZnVuY3Rpb24gaW5jb21pbmcgKGRhdGEpIHtcbiAgICAvLyAgICAgICAgIC8vIGNvbnNvbGUubG9nIChgUm91bmR0cmlwIHRpbWU6ICR7RGF0ZS5ub3coKSAtIGRhdGF9IG1zYCk7XG4gICAgLy8gICAgICAgICBzZXRUaW1lb3V0IChmdW5jdGlvbiB0aW1lb3V0ICgpIHtcbiAgICAvLyAgICAgICAgICAgICB3cy5zZW5kIChEYXRlLm5vdyAoKSlcbiAgICAvLyAgICAgICAgIH0sIDUwMClcbiAgICAvLyAgICAgfSlcbiAgICAvLyB9LFxuXG4gICAgdGhpcy5mZXRjaCA9IGZ1bmN0aW9uICh1cmwsIG1ldGhvZCA9ICdHRVQnLCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG5cbiAgICAgICAgaWYgKGlzTm9kZSAmJiB0aGlzLnVzZXJBZ2VudClcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy51c2VyQWdlbnQgPT0gJ3N0cmluZycpXG4gICAgICAgICAgICAgICAgaGVhZGVycyA9IGV4dGVuZCAoeyAnVXNlci1BZ2VudCc6IHRoaXMudXNlckFnZW50IH0sIGhlYWRlcnMpXG4gICAgICAgICAgICBlbHNlIGlmICgodHlwZW9mIHRoaXMudXNlckFnZW50ID09ICdvYmplY3QnKSAmJiAoJ1VzZXItQWdlbnQnIGluIHRoaXMudXNlckFnZW50KSlcbiAgICAgICAgICAgICAgICBoZWFkZXJzID0gZXh0ZW5kICh0aGlzLnVzZXJBZ2VudCwgaGVhZGVycylcblxuICAgICAgICBpZiAodGhpcy5wcm94eS5sZW5ndGgpXG4gICAgICAgICAgICBoZWFkZXJzID0gZXh0ZW5kICh7ICdPcmlnaW4nOiAnKicgfSwgaGVhZGVycylcblxuICAgICAgICBsZXQgb3B0aW9ucyA9IHsgJ21ldGhvZCc6IG1ldGhvZCwgJ2hlYWRlcnMnOiBoZWFkZXJzLCAnYm9keSc6IGJvZHkgfVxuXG4gICAgICAgIHVybCA9IHRoaXMucHJveHkgKyB1cmxcblxuICAgICAgICBpZiAodGhpcy52ZXJib3NlKVxuICAgICAgICAgICAgY29uc29sZS5sb2cgKHRoaXMuaWQsIG1ldGhvZCwgdXJsLCBcIlxcblJlcXVlc3Q6XFxuXCIsIG9wdGlvbnMpXG5cbiAgICAgICAgcmV0dXJuIHRpbWVvdXQgKHRoaXMudGltZW91dCwgZmV0Y2ggKHVybCwgb3B0aW9ucylcbiAgICAgICAgICAgIC5jYXRjaCAoZSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGlzTm9kZSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VOb3RBdmFpbGFibGUgKFsgdGhpcy5pZCwgbWV0aG9kLCB1cmwsIGUudHlwZSwgZS5tZXNzYWdlIF0uam9pbiAoJyAnKSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgZSAvLyByZXRocm93IGFsbCB1bmtub3duIGVycm9yc1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuIChyZXNwb25zZSA9PiB7XG5cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJlc3BvbnNlID09ICdzdHJpbmcnKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2VcblxuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZS50ZXh0ICgpLnRoZW4gKHRleHQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy52ZXJib3NlKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cgKHRoaXMuaWQsIG1ldGhvZCwgdXJsLCB0ZXh0ID8gKFwiXFxuUmVzcG9uc2U6XFxuXCIgKyB0ZXh0KSA6ICcnKVxuICAgICAgICAgICAgICAgICAgICBpZiAoKHJlc3BvbnNlLnN0YXR1cyA+PSAyMDApICYmIChyZXNwb25zZS5zdGF0dXMgPD0gMzAwKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0XG4gICAgICAgICAgICAgICAgICAgIGxldCBlcnJvciA9IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICBsZXQgZGV0YWlscyA9IHRleHRcbiAgICAgICAgICAgICAgICAgICAgaWYgKFsgNDI5IF0uaW5kZXhPZiAocmVzcG9uc2Uuc3RhdHVzKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IEREb1NQcm90ZWN0aW9uXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoWyA0MDQsIDQwOSwgNTAwLCA1MDEsIDUwMiwgNTIxLCA1MjIsIDUyNSBdLmluZGV4T2YgKHJlc3BvbnNlLnN0YXR1cykgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBFeGNoYW5nZU5vdEF2YWlsYWJsZVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFsgNDAwLCA0MDMsIDQwNSwgNTAzIF0uaW5kZXhPZiAocmVzcG9uc2Uuc3RhdHVzKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGRvc1Byb3RlY3Rpb24gPSB0ZXh0Lm1hdGNoICgvY2xvdWRmbGFyZXxpbmNhcHN1bGEvaSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZG9zUHJvdGVjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gRERvU1Byb3RlY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBFeGNoYW5nZU5vdEF2YWlsYWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbHMgPSB0ZXh0ICsgJyAocG9zc2libGUgcmVhc29uczogJyArIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ludmFsaWQgQVBJIGtleXMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFkIG9yIG9sZCBub25jZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleGNoYW5nZSBpcyBkb3duIG9yIG9mZmxpbmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb24gbWFpbnRlbmFuY2UnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRERvUyBwcm90ZWN0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JhdGUtbGltaXRpbmcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0uam9pbiAoJywgJykgKyAnKSdcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChbIDQwOCwgNTA0IF0uaW5kZXhPZiAocmVzcG9uc2Uuc3RhdHVzKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IFJlcXVlc3RUaW1lb3V0XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoWyA0MDEsIDQyMiwgNTExIF0uaW5kZXhPZiAocmVzcG9uc2Uuc3RhdHVzKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IEF1dGhlbnRpY2F0aW9uRXJyb3JcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gRXJyb3JcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3IgKFsgdGhpcy5pZCwgbWV0aG9kLCB1cmwsIHJlc3BvbnNlLnN0YXR1cywgcmVzcG9uc2Uuc3RhdHVzVGV4dCwgZGV0YWlscyBdLmpvaW4gKCcgJykpXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pLnRoZW4gKHJlc3BvbnNlID0+IHRoaXMuaGFuZGxlUmVzcG9uc2UgKHVybCwgbWV0aG9kLCBoZWFkZXJzLCByZXNwb25zZSkpKVxuICAgIH1cblxuICAgIHRoaXMuaGFuZGxlUmVzcG9uc2UgPSBmdW5jdGlvbiAodXJsLCBtZXRob2QgPSAnR0VUJywgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuXG4gICAgICAgIHRyeSB7XG5cbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlIChib2R5KVxuXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcblxuICAgICAgICAgICAgbGV0IG1haW50ZW5hbmNlID0gYm9keS5tYXRjaCAoL29mZmxpbmV8YnVzeXxyZXRyeXx3YWl0fHVuYXZhaWxhYmxlfG1haW50YWlufG1haW50ZW5hbmNlfG1haW50ZW5hbmNpbmcvaSlcbiAgICAgICAgICAgIGxldCBkZG9zUHJvdGVjdGlvbiA9IGJvZHkubWF0Y2ggKC9jbG91ZGZsYXJlfGluY2Fwc3VsYXxvdmVybG9hZC9pKVxuXG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgZXJyb3IgPSBFeGNoYW5nZU5vdEF2YWlsYWJsZVxuICAgICAgICAgICAgICAgIGxldCBkZXRhaWxzID0gJ25vdCBhY2Nlc3NpYmxlIGZyb20gdGhpcyBsb2NhdGlvbiBhdCB0aGUgbW9tZW50J1xuICAgICAgICAgICAgICAgIGlmIChtYWludGVuYW5jZSlcbiAgICAgICAgICAgICAgICAgICAgZGV0YWlscyA9ICdvZmZsaW5lLCBvbiBtYWludGVuYW5jZSBvciB1bnJlYWNoYWJsZSBmcm9tIHRoaXMgbG9jYXRpb24gYXQgdGhlIG1vbWVudCdcbiAgICAgICAgICAgICAgICBpZiAoZGRvc1Byb3RlY3Rpb24pXG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0gRERvU1Byb3RlY3Rpb25cbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3IgKFsgdGhpcy5pZCwgbWV0aG9kLCB1cmwsIGRldGFpbHMgXS5qb2luICgnICcpKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy52ZXJib3NlKVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nICh0aGlzLmlkLCBtZXRob2QsIHVybCwgJ2Vycm9yJywgZSwgXCJyZXNwb25zZSBib2R5OlxcbidcIiArIGJvZHkgKyBcIidcIilcblxuICAgICAgICAgICAgdGhyb3cgZVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zZXRfbWFya2V0cyA9XG4gICAgdGhpcy5zZXRNYXJrZXRzID0gZnVuY3Rpb24gKG1hcmtldHMpIHtcbiAgICAgICAgbGV0IHZhbHVlcyA9IE9iamVjdC52YWx1ZXMgKG1hcmtldHMpXG4gICAgICAgIHRoaXMubWFya2V0cyA9IGluZGV4QnkgKHZhbHVlcywgJ3N5bWJvbCcpXG4gICAgICAgIHRoaXMubWFya2V0c0J5SWQgPSBpbmRleEJ5IChtYXJrZXRzLCAnaWQnKVxuICAgICAgICB0aGlzLm1hcmtldHNfYnlfaWQgPSB0aGlzLm1hcmtldHNCeUlkXG4gICAgICAgIHRoaXMuc3ltYm9scyA9IE9iamVjdC5rZXlzICh0aGlzLm1hcmtldHMpXG4gICAgICAgIGxldCBiYXNlID0gdGhpcy5wbHVjayAodmFsdWVzLmZpbHRlciAobWFya2V0ID0+ICdiYXNlJyBpbiBtYXJrZXQpLCAnYmFzZScpXG4gICAgICAgIGxldCBxdW90ZSA9IHRoaXMucGx1Y2sgKHZhbHVlcy5maWx0ZXIgKG1hcmtldCA9PiAncXVvdGUnIGluIG1hcmtldCksICdxdW90ZScpXG4gICAgICAgIHRoaXMuY3VycmVuY2llcyA9IHRoaXMudW5pcXVlIChiYXNlLmNvbmNhdCAocXVvdGUpKVxuICAgICAgICByZXR1cm4gdGhpcy5tYXJrZXRzXG4gICAgfVxuXG4gICAgdGhpcy5sb2FkX21hcmtldHMgPVxuICAgIHRoaXMubG9hZE1hcmtldHMgPSBmdW5jdGlvbiAocmVsb2FkID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKCFyZWxvYWQgJiYgdGhpcy5tYXJrZXRzKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMubWFya2V0c0J5SWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UgKChyZXNvbHZlLCByZWplY3QpID0+IHJlc29sdmUgKHRoaXMuc2V0TWFya2V0cyAodGhpcy5tYXJrZXRzKSkpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UgKChyZXNvbHZlLCByZWplY3QpID0+IHJlc29sdmUgKHRoaXMubWFya2V0cykpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZmV0Y2hNYXJrZXRzICgpLnRoZW4gKG1hcmtldHMgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0TWFya2V0cyAobWFya2V0cylcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICB0aGlzLmZldGNoX3RpY2tlcnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZldGNoVGlja2VycyAoKVxuICAgIH1cblxuICAgIHRoaXMuZmV0Y2hUaWNrZXJzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkICh0aGlzLmlkICsgJyBBUEkgZG9lcyBub3QgYWxsb3cgdG8gZmV0Y2ggYWxsIHRpY2tlcnMgYXQgb25jZSB3aXRoIGEgc2luZ2xlIGNhbGwgdG8gZmV0Y2hfdGlja2VycyAoKSBmb3Igbm93JylcbiAgICB9XG5cbiAgICB0aGlzLmZldGNoX21hcmtldHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZldGNoTWFya2V0cyAoKVxuICAgIH1cblxuICAgIHRoaXMuZmV0Y2hNYXJrZXRzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UgKChyZXNvbHZlLCByZWplY3QpID0+IHJlc29sdmUgKHRoaXMubWFya2V0cykpXG4gICAgfVxuXG4gICAgdGhpcy5jb21tb25DdXJyZW5jeUNvZGUgPSBmdW5jdGlvbiAoY3VycmVuY3kpIHtcbiAgICAgICAgaWYgKCF0aGlzLnN1YnN0aXR1dGVDb21tb25DdXJyZW5jeUNvZGVzKVxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbmN5XG4gICAgICAgIGlmIChjdXJyZW5jeSA9PSAnWEJUJylcbiAgICAgICAgICAgIHJldHVybiAnQlRDJ1xuICAgICAgICBpZiAoY3VycmVuY3kgPT0gJ0JDQycpXG4gICAgICAgICAgICByZXR1cm4gJ0JDSCdcbiAgICAgICAgaWYgKGN1cnJlbmN5ID09ICdEUksnKVxuICAgICAgICAgICAgcmV0dXJuICdEQVNIJ1xuICAgICAgICByZXR1cm4gY3VycmVuY3lcbiAgICB9XG5cbiAgICB0aGlzLm1hcmtldCA9IGZ1bmN0aW9uIChtYXJrZXQpIHtcbiAgICAgICAgcmV0dXJuICgoKHR5cGVvZiBtYXJrZXQgPT09ICdzdHJpbmcnKSAmJlxuICAgICAgICAgICAgKHR5cGVvZiB0aGlzLm1hcmtldHMgIT0gJ3VuZGVmaW5lZCcpICYmXG4gICAgICAgICAgICAodHlwZW9mIHRoaXMubWFya2V0c1ttYXJrZXRdICE9ICd1bmRlZmluZWQnKSkgP1xuICAgICAgICAgICAgICAgIHRoaXMubWFya2V0c1ttYXJrZXRdIDpcbiAgICAgICAgICAgICAgICBtYXJrZXQpXG4gICAgfVxuXG4gICAgdGhpcy5tYXJrZXRfaWQgPVxuICAgIHRoaXMubWFya2V0SWQgPSBmdW5jdGlvbiAobWFya2V0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcmtldCAobWFya2V0KS5pZCB8fCBtYXJrZXRcbiAgICB9XG5cbiAgICB0aGlzLnN5bWJvbCA9IGZ1bmN0aW9uIChtYXJrZXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFya2V0IChtYXJrZXQpLnN5bWJvbCB8fCBtYXJrZXRcbiAgICB9XG5cbiAgICB0aGlzLmV4dHJhY3RfcGFyYW1zID1cbiAgICB0aGlzLmV4dHJhY3RQYXJhbXMgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgIHZhciByZSA9IC97KFthLXpBLVowLTlfXSs/KX0vZ1xuICAgICAgICB2YXIgbWF0Y2hlcyA9IFtdXG4gICAgICAgIGxldCBtYXRjaFxuICAgICAgICB3aGlsZSAobWF0Y2ggPSByZS5leGVjIChzdHJpbmcpKVxuICAgICAgICAgICAgbWF0Y2hlcy5wdXNoIChtYXRjaFsxXSlcbiAgICAgICAgcmV0dXJuIG1hdGNoZXNcbiAgICB9XG5cbiAgICB0aGlzLmltcGxvZGVfcGFyYW1zID1cbiAgICB0aGlzLmltcGxvZGVQYXJhbXMgPSBmdW5jdGlvbiAoc3RyaW5nLCBwYXJhbXMpIHtcbiAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gcGFyYW1zKVxuICAgICAgICAgICAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UgKCd7JyArIHByb3BlcnR5ICsgJ30nLCBwYXJhbXNbcHJvcGVydHldKVxuICAgICAgICByZXR1cm4gc3RyaW5nXG4gICAgfVxuXG4gICAgdGhpcy51cmwgPSBmdW5jdGlvbiAocGF0aCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHRoaXMuaW1wbG9kZVBhcmFtcyAocGF0aCwgcGFyYW1zKTtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5vbWl0IChwYXJhbXMsIHRoaXMuZXh0cmFjdFBhcmFtcyAocGF0aCkpXG4gICAgICAgIGlmIChPYmplY3Qua2V5cyAocXVlcnkpLmxlbmd0aClcbiAgICAgICAgICAgIHJlc3VsdCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocXVlcnkpXG4gICAgICAgIHJldHVybiByZXN1bHRcbiAgICB9XG5cbiAgICB0aGlzLnBhcnNlX3RyYWRlcyA9XG4gICAgdGhpcy5wYXJzZVRyYWRlcyA9IGZ1bmN0aW9uICh0cmFkZXMsIG1hcmtldCA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gW11cbiAgICAgICAgZm9yIChsZXQgdCA9IDA7IHQgPCB0cmFkZXMubGVuZ3RoOyB0KyspIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoICh0aGlzLnBhcnNlVHJhZGUgKHRyYWRlc1t0XSwgbWFya2V0KSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgfVxuXG4gICAgdGhpcy5wYXJzZV9vcmRlcnMgPVxuICAgIHRoaXMucGFyc2VPcmRlcnMgPSBmdW5jdGlvbiAob3JkZXIsIG1hcmtldCA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gW11cbiAgICAgICAgZm9yIChsZXQgdCA9IDA7IHQgPCBvcmRlci5sZW5ndGg7IHQrKykge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2ggKHRoaXMucGFyc2VPcmRlciAob3JkZXJbdF0sIG1hcmtldCkpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH1cblxuICAgIHRoaXMucGFyc2Vfb2hsY3YgPVxuICAgIHRoaXMucGFyc2VPSExDViA9IGZ1bmN0aW9uIChvaGxjdiwgbWFya2V0ID0gdW5kZWZpbmVkLCB0aW1lZnJhbWUgPSA2MCwgc2luY2UgPSB1bmRlZmluZWQsIGxpbWl0ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBvaGxjdlxuICAgIH1cblxuICAgIHRoaXMucGFyc2Vfb2hsY3ZzID1cbiAgICB0aGlzLnBhcnNlT0hMQ1ZzID0gZnVuY3Rpb24gKG9obGN2cywgbWFya2V0ID0gdW5kZWZpbmVkLCB0aW1lZnJhbWUgPSA2MCwgc2luY2UgPSB1bmRlZmluZWQsIGxpbWl0ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSBbXVxuICAgICAgICBmb3IgKGxldCB0ID0gMDsgdCA8IG9obGN2cy5sZW5ndGg7IHQrKykge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2ggKHRoaXMucGFyc2VPSExDViAob2hsY3ZzW3RdLCBtYXJrZXQsIHRpbWVmcmFtZSwgc2luY2UsIGxpbWl0KSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgfVxuXG4gICAgdGhpcy5jcmVhdGVfbGltaXRfYnV5X29yZGVyID1cbiAgICB0aGlzLmNyZWF0ZUxpbWl0QnV5T3JkZXIgPSBmdW5jdGlvbiAobWFya2V0LCBhbW91bnQsIHByaWNlLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVPcmRlciAgKG1hcmtldCwgJ2xpbWl0JywgJ2J1eScsIGFtb3VudCwgcHJpY2UsIHBhcmFtcylcbiAgICB9XG5cbiAgICB0aGlzLmNyZWF0ZV9saW1pdF9zZWxsX29yZGVyID1cbiAgICB0aGlzLmNyZWF0ZUxpbWl0U2VsbE9yZGVyID0gZnVuY3Rpb24gKG1hcmtldCwgYW1vdW50LCBwcmljZSwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlT3JkZXIgKG1hcmtldCwgJ2xpbWl0JywgJ3NlbGwnLCBhbW91bnQsIHByaWNlLCBwYXJhbXMpXG4gICAgfVxuXG4gICAgdGhpcy5jcmVhdGVfbWFya2V0X2J1eV9vcmRlciA9XG4gICAgdGhpcy5jcmVhdGVNYXJrZXRCdXlPcmRlciA9IGZ1bmN0aW9uIChtYXJrZXQsIGFtb3VudCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlT3JkZXIgKG1hcmtldCwgJ21hcmtldCcsICdidXknLCBhbW91bnQsIHVuZGVmaW5lZCwgcGFyYW1zKVxuICAgIH1cblxuICAgIHRoaXMuY3JlYXRlX21hcmtldF9zZWxsX29yZGVyID1cbiAgICB0aGlzLmNyZWF0ZU1hcmtldFNlbGxPcmRlciA9IGZ1bmN0aW9uIChtYXJrZXQsIGFtb3VudCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlT3JkZXIgKG1hcmtldCwgJ21hcmtldCcsICdzZWxsJywgYW1vdW50LCB1bmRlZmluZWQsIHBhcmFtcylcbiAgICB9XG5cbiAgICB0aGlzLmlzbzg2MDEgICAgICAgID0gdGltZXN0YW1wID0+IG5ldyBEYXRlICh0aW1lc3RhbXApLnRvSVNPU3RyaW5nICgpXG4gICAgdGhpcy5wYXJzZTg2MDEgICAgICA9IERhdGUucGFyc2VcbiAgICB0aGlzLnNlY29uZHMgICAgICAgID0gKCkgPT4gTWF0aC5mbG9vciAodGhpcy5taWxsaXNlY29uZHMgKCkgLyAxMDAwKVxuICAgIHRoaXMubWljcm9zZWNvbmRzICAgPSAoKSA9PiBNYXRoLmZsb29yICh0aGlzLm1pbGxpc2Vjb25kcyAoKSAqIDEwMDApXG4gICAgdGhpcy5taWxsaXNlY29uZHMgICA9IERhdGUubm93XG4gICAgdGhpcy5ub25jZSAgICAgICAgICA9IHRoaXMuc2Vjb25kc1xuICAgIHRoaXMuaWQgICAgICAgICAgICAgPSB1bmRlZmluZWRcbiAgICB0aGlzLnJhdGVMaW1pdCAgICAgID0gMjAwMCAgLy8gbWlsbGlzZWNvbmRzID0gc2Vjb25kcyAqIDEwMDBcbiAgICB0aGlzLnRpbWVvdXQgICAgICAgID0gMTAwMDAgLy8gbWlsbGlzZWNvbmRzID0gc2Vjb25kcyAqIDEwMDBcbiAgICB0aGlzLnZlcmJvc2UgICAgICAgID0gZmFsc2VcbiAgICB0aGlzLnVzZXJBZ2VudCAgICAgID0gZmFsc2VcbiAgICB0aGlzLnR3b2ZhICAgICAgICAgID0gZmFsc2UgLy8gdHdvLWZhY3RvciBhdXRoZW50aWNhdGlvblxuICAgIHRoaXMuc3Vic3RpdHV0ZUNvbW1vbkN1cnJlbmN5Q29kZXMgPSB0cnVlXG4gICAgdGhpcy55eXl5bW1kZGhobW1zcyA9IHRpbWVzdGFtcCA9PiB7XG4gICAgICAgIGxldCBkYXRlID0gbmV3IERhdGUgKHRpbWVzdGFtcClcbiAgICAgICAgbGV0IHl5eXkgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyICgpXG4gICAgICAgIGxldCBNTSA9IGRhdGUuZ2V0VVRDTW9udGggKClcbiAgICAgICAgbGV0IGRkID0gZGF0ZS5nZXRVVENEYXkgKClcbiAgICAgICAgbGV0IGhoID0gZGF0ZS5nZXRVVENIb3VycyAoKVxuICAgICAgICBsZXQgbW0gPSBkYXRlLmdldFVUQ01pbnV0ZXMgKClcbiAgICAgICAgbGV0IHNzID0gZGF0ZS5nZXRVVENTZWNvbmRzICgpXG4gICAgICAgIE1NID0gTU0gPCAxMCA/ICgnMCcgKyBNTSkgOiBNTVxuICAgICAgICBkZCA9IGRkIDwgMTAgPyAoJzAnICsgZGQpIDogZGRcbiAgICAgICAgaGggPSBoaCA8IDEwID8gKCcwJyArIGhoKSA6IGhoXG4gICAgICAgIG1tID0gbW0gPCAxMCA/ICgnMCcgKyBtbSkgOiBtbVxuICAgICAgICBzcyA9IHNzIDwgMTAgPyAoJzAnICsgc3MpIDogc3NcbiAgICAgICAgcmV0dXJuIHl5eXkgKyAnLScgKyBNTSArICctJyArIGRkICsgJyAnICsgaGggKyAnOicgKyBtbSArICc6JyArIHNzXG4gICAgfVxuXG4gICAgaWYgKGlzTm9kZSlcbiAgICAgICAgdGhpcy51c2VyQWdlbnQgPSB7XG4gICAgICAgICAgICAnVXNlci1BZ2VudCc6ICdjY3h0LycgKyB2ZXJzaW9uICtcbiAgICAgICAgICAgICAgICAnICgraHR0cHM6Ly9naXRodWIuY29tL2tyb2l0b3IvY2N4dCknICtcbiAgICAgICAgICAgICAgICAnIE5vZGUuanMvJyArIHRoaXMubm9kZVZlcnNpb24gKyAnIChKYXZhU2NyaXB0KSdcbiAgICAgICAgfVxuXG4gICAgLy8gcHJlcGVuZGVkIHRvIFVSTCwgbGlrZSBodHRwczovL3Byb3h5LmNvbS9odHRwczovL2V4Y2hhbmdlLmNvbS9hcGkuLi5cbiAgICB0aGlzLnByb3h5ID0gJydcblxuICAgIHRoaXMuaGFzRmV0Y2hUaWNrZXJzID0gZmFsc2VcblxuICAgIGZvciAodmFyIHByb3BlcnR5IGluIGNvbmZpZylcbiAgICAgICAgdGhpc1twcm9wZXJ0eV0gPSBjb25maWdbcHJvcGVydHldXG5cbiAgICB0aGlzLmZldGNoX2JhbGFuY2UgICAgPSB0aGlzLmZldGNoQmFsYW5jZVxuICAgIHRoaXMuZmV0Y2hfb3JkZXJfYm9vayA9IHRoaXMuZmV0Y2hPcmRlckJvb2tcbiAgICB0aGlzLmZldGNoX3RpY2tlciAgICAgPSB0aGlzLmZldGNoVGlja2VyXG4gICAgdGhpcy5mZXRjaF90cmFkZXMgICAgID0gdGhpcy5mZXRjaFRyYWRlc1xuXG4gICAgdGhpcy5pbml0ICgpXG59XG5cbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxudmFyIF8xYnJva2VyID0ge1xuXG4gICAgJ2lkJzogJ18xYnJva2VyJyxcbiAgICAnbmFtZSc6ICcxQnJva2VyJyxcbiAgICAnY291bnRyaWVzJzogJ1VTJyxcbiAgICAncmF0ZUxpbWl0JzogMTUwMCxcbiAgICAndmVyc2lvbic6ICd2MicsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc3NjYwMjEtNDIwYmQ5ZmMtNWVjYi0xMWU3LThlZDYtNTZkMDA4MWVmZWQyLmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly8xYnJva2VyLmNvbS9hcGknLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vMWJyb2tlci5jb20nLFxuICAgICAgICAnZG9jJzogJ2h0dHBzOi8vMWJyb2tlci5jb20vP2M9ZW4vY29udGVudC9hcGktZG9jdW1lbnRhdGlvbicsXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHJpdmF0ZSc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ21hcmtldC9iYXJzJyxcbiAgICAgICAgICAgICAgICAnbWFya2V0L2NhdGVnb3JpZXMnLFxuICAgICAgICAgICAgICAgICdtYXJrZXQvZGV0YWlscycsXG4gICAgICAgICAgICAgICAgJ21hcmtldC9saXN0JyxcbiAgICAgICAgICAgICAgICAnbWFya2V0L3F1b3RlcycsXG4gICAgICAgICAgICAgICAgJ21hcmtldC90aWNrcycsXG4gICAgICAgICAgICAgICAgJ29yZGVyL2NhbmNlbCcsXG4gICAgICAgICAgICAgICAgJ29yZGVyL2NyZWF0ZScsXG4gICAgICAgICAgICAgICAgJ29yZGVyL29wZW4nLFxuICAgICAgICAgICAgICAgICdwb3NpdGlvbi9jbG9zZScsXG4gICAgICAgICAgICAgICAgJ3Bvc2l0aW9uL2Nsb3NlX2NhbmNlbCcsXG4gICAgICAgICAgICAgICAgJ3Bvc2l0aW9uL2VkaXQnLFxuICAgICAgICAgICAgICAgICdwb3NpdGlvbi9oaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAncG9zaXRpb24vb3BlbicsXG4gICAgICAgICAgICAgICAgJ3Bvc2l0aW9uL3NoYXJlZC9nZXQnLFxuICAgICAgICAgICAgICAgICdzb2NpYWwvcHJvZmlsZV9zdGF0aXN0aWNzJyxcbiAgICAgICAgICAgICAgICAnc29jaWFsL3Byb2ZpbGVfdHJhZGVzJyxcbiAgICAgICAgICAgICAgICAndXNlci9iaXRjb2luX2RlcG9zaXRfYWRkcmVzcycsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZGV0YWlscycsXG4gICAgICAgICAgICAgICAgJ3VzZXIvb3ZlcnZpZXcnLFxuICAgICAgICAgICAgICAgICd1c2VyL3F1b3RhX3N0YXR1cycsXG4gICAgICAgICAgICAgICAgJ3VzZXIvdHJhbnNhY3Rpb25fbG9nJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQ2F0ZWdvcmllcyAoKSB7XG4gICAgICAgIGxldCBjYXRlZ29yaWVzID0gYXdhaXQgdGhpcy5wcml2YXRlR2V0TWFya2V0Q2F0ZWdvcmllcyAoKTtcbiAgICAgICAgcmV0dXJuIGNhdGVnb3JpZXNbJ3Jlc3BvbnNlJ107XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoTWFya2V0cyAoKSB7XG4gICAgICAgIGxldCB0aGlzXyA9IHRoaXM7IC8vIHdvcmthcm91bmQgZm9yIEJhYmVsIGJ1ZyAobm90IHBhc3NpbmcgYHRoaXNgIHRvIF9yZWN1cnNpdmUoKSBjYWxsKVxuICAgICAgICBsZXQgY2F0ZWdvcmllcyA9IGF3YWl0IHRoaXMuZmV0Y2hDYXRlZ29yaWVzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgY2F0ZWdvcmllcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgbGV0IGNhdGVnb3J5ID0gY2F0ZWdvcmllc1tjXTtcbiAgICAgICAgICAgIGxldCBtYXJrZXRzID0gYXdhaXQgdGhpc18ucHJpdmF0ZUdldE1hcmtldExpc3QgKHtcbiAgICAgICAgICAgICAgICAnY2F0ZWdvcnknOiBjYXRlZ29yeS50b0xvd2VyQ2FzZSAoKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZm9yIChsZXQgcCA9IDA7IHAgPCBtYXJrZXRzWydyZXNwb25zZSddLmxlbmd0aDsgcCsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IG1hcmtldCA9IG1hcmtldHNbJ3Jlc3BvbnNlJ11bcF07XG4gICAgICAgICAgICAgICAgbGV0IGlkID0gbWFya2V0WydzeW1ib2wnXTtcbiAgICAgICAgICAgICAgICBsZXQgc3ltYm9sID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGxldCBiYXNlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGxldCBxdW90ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBpZiAoKGNhdGVnb3J5ID09ICdGT1JFWCcpIHx8IChjYXRlZ29yeSA9PSAnQ1JZUFRPJykpIHtcbiAgICAgICAgICAgICAgICAgICAgc3ltYm9sID0gbWFya2V0WyduYW1lJ107XG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXJ0cyA9IHN5bWJvbC5zcGxpdCAoJy8nKTtcbiAgICAgICAgICAgICAgICAgICAgYmFzZSA9IHBhcnRzWzBdO1xuICAgICAgICAgICAgICAgICAgICBxdW90ZSA9IHBhcnRzWzFdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGJhc2UgPSBpZDtcbiAgICAgICAgICAgICAgICAgICAgcXVvdGUgPSAnVVNEJztcbiAgICAgICAgICAgICAgICAgICAgc3ltYm9sID0gYmFzZSArICcvJyArIHF1b3RlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBiYXNlID0gdGhpc18uY29tbW9uQ3VycmVuY3lDb2RlIChiYXNlKTtcbiAgICAgICAgICAgICAgICBxdW90ZSA9IHRoaXNfLmNvbW1vbkN1cnJlbmN5Q29kZSAocXVvdGUpO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoICh7XG4gICAgICAgICAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICAgICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgICAgICAgICAnYmFzZSc6IGJhc2UsXG4gICAgICAgICAgICAgICAgICAgICdxdW90ZSc6IHF1b3RlLFxuICAgICAgICAgICAgICAgICAgICAnaW5mbyc6IG1hcmtldCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgYmFsYW5jZSA9IGF3YWl0IHRoaXMucHJpdmF0ZUdldFVzZXJPdmVydmlldyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYmFsYW5jZVsncmVzcG9uc2UnXTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgIH07XG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgdGhpcy5jdXJyZW5jaWVzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSB0aGlzLmN1cnJlbmNpZXNbY107XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd1c2VkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0WydCVEMnXVsnZnJlZSddID0gcGFyc2VGbG9hdCAocmVzcG9uc2VbJ2JhbGFuY2UnXSk7XG4gICAgICAgIHJlc3VsdFsnQlRDJ11bJ3RvdGFsJ10gPSByZXN1bHRbJ0JUQyddWydmcmVlJ107XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZUdldE1hcmtldFF1b3RlcyAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdzeW1ib2xzJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSByZXNwb25zZVsncmVzcG9uc2UnXVswXTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMucGFyc2U4NjAxIChvcmRlcmJvb2tbJ3VwZGF0ZWQnXSk7XG4gICAgICAgIGxldCBiaWRQcmljZSA9IHBhcnNlRmxvYXQgKG9yZGVyYm9va1snYmlkJ10pO1xuICAgICAgICBsZXQgYXNrUHJpY2UgPSBwYXJzZUZsb2F0IChvcmRlcmJvb2tbJ2FzayddKTtcbiAgICAgICAgbGV0IGJpZCA9IFsgYmlkUHJpY2UsIHVuZGVmaW5lZCBdO1xuICAgICAgICBsZXQgYXNrID0gWyBhc2tQcmljZSwgdW5kZWZpbmVkIF07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2JpZHMnOiBbIGJpZCBdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbIGFzayBdLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0KSB7XG4gICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyBmZXRjaFRyYWRlcyAoKSBtZXRob2Qgbm90IGltcGxlbWVudGVkIHlldCcpO1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCB0aGlzLnByaXZhdGVHZXRNYXJrZXRCYXJzICh7XG4gICAgICAgICAgICAnc3ltYm9sJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICdyZXNvbHV0aW9uJzogNjAsXG4gICAgICAgICAgICAnbGltaXQnOiAxLFxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IGF3YWl0IHRoaXMuZmV0Y2hPcmRlckJvb2sgKG1hcmtldCk7XG4gICAgICAgIGxldCB0aWNrZXIgPSByZXN1bHRbJ3Jlc3BvbnNlJ11bMF07XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLnBhcnNlODYwMSAodGlja2VyWydkYXRlJ10pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydoJ10pLFxuICAgICAgICAgICAgJ2xvdyc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbCddKSxcbiAgICAgICAgICAgICdiaWQnOiBvcmRlcmJvb2tbJ2JpZHMnXVswXVswXSxcbiAgICAgICAgICAgICdhc2snOiBvcmRlcmJvb2tbJ2Fza3MnXVswXVswXSxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ28nXSksXG4gICAgICAgICAgICAnY2xvc2UnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2MnXSksXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdzeW1ib2wnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICAgICAgJ21hcmdpbic6IGFtb3VudCxcbiAgICAgICAgICAgICdkaXJlY3Rpb24nOiAoc2lkZSA9PSAnc2VsbCcpID8gJ3Nob3J0JyA6ICdsb25nJyxcbiAgICAgICAgICAgICdsZXZlcmFnZSc6IDEsXG4gICAgICAgICAgICAndHlwZSc6IHNpZGUsXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlID09ICdsaW1pdCcpXG4gICAgICAgICAgICBvcmRlclsncHJpY2UnXSA9IHByaWNlO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBvcmRlclsndHlwZSddICs9ICdfbWFya2V0JztcbiAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMucHJpdmF0ZUdldE9yZGVyQ3JlYXRlICh0aGlzLmV4dGVuZCAob3JkZXIsIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXN1bHQsXG4gICAgICAgICAgICAnaWQnOiByZXN1bHRbJ3Jlc3BvbnNlJ11bJ29yZGVyX2lkJ10sXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdE9yZGVyQ2FuY2VsICh7ICdvcmRlcl9pZCc6IGlkIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICghdGhpcy5hcGlLZXkpXG4gICAgICAgICAgICB0aHJvdyBuZXcgQXV0aGVudGljYXRpb25FcnJvciAodGhpcy5pZCArICcgcmVxdWlyZXMgYXBpS2V5IGZvciBhbGwgcmVxdWVzdHMnKTtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ10gKyAnLycgKyB0aGlzLnZlcnNpb24gKyAnLycgKyBwYXRoICsgJy5waHAnO1xuICAgICAgICBsZXQgcXVlcnkgPSB0aGlzLmV4dGVuZCAoeyAndG9rZW4nOiB0aGlzLmFwaUtleSB9LCBwYXJhbXMpO1xuICAgICAgICB1cmwgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHF1ZXJ5KTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCAodXJsLCBtZXRob2QpO1xuICAgICAgICBpZiAoJ3dhcm5pbmcnIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlWyd3YXJuaW5nJ10pXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnIFdhcm5pbmc6ICcgKyByZXNwb25zZVsnd2FybmluZ19tZXNzYWdlJ10pO1xuICAgICAgICBpZiAoJ2Vycm9yJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIGlmIChyZXNwb25zZVsnZXJyb3InXSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgRXJyb3I6ICcgKyByZXNwb25zZVsnZXJyb3JfY29kZSddICsgcmVzcG9uc2VbJ2Vycm9yX21lc3NhZ2UnXSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBjcnlwdG9jYXBpdGFsID0ge1xuXG4gICAgJ2lkJzogJ2NyeXB0b2NhcGl0YWwnLFxuICAgICduYW1lJzogJ0NyeXB0byBDYXBpdGFsJyxcbiAgICAnY29tbWVudCc6ICdDcnlwdG8gQ2FwaXRhbCBBUEknLFxuICAgICdjb3VudHJpZXMnOiAnUEEnLCAvLyBQYW5hbWFcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yNzk5MzE1OC03YTEzZjE0MC02NGFjLTExZTctODljYy1hM2I0NDFmMGIwZjguanBnJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL2NyeXB0b2NhcGl0YWwuY28nLFxuICAgICAgICAnZG9jJzogJ2h0dHBzOi8vZ2l0aHViLmNvbS9jcnlwdG9jYXAnLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ3N0YXRzJyxcbiAgICAgICAgICAgICAgICAnaGlzdG9yaWNhbC1wcmljZXMnLFxuICAgICAgICAgICAgICAgICdvcmRlci1ib29rJyxcbiAgICAgICAgICAgICAgICAndHJhbnNhY3Rpb25zJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2JhbGFuY2VzLWFuZC1pbmZvJyxcbiAgICAgICAgICAgICAgICAnb3Blbi1vcmRlcnMnLFxuICAgICAgICAgICAgICAgICd1c2VyLXRyYW5zYWN0aW9ucycsXG4gICAgICAgICAgICAgICAgJ2J0Yy1kZXBvc2l0LWFkZHJlc3MvZ2V0JyxcbiAgICAgICAgICAgICAgICAnYnRjLWRlcG9zaXQtYWRkcmVzcy9uZXcnLFxuICAgICAgICAgICAgICAgICdkZXBvc2l0cy9nZXQnLFxuICAgICAgICAgICAgICAgICd3aXRoZHJhd2Fscy9nZXQnLFxuICAgICAgICAgICAgICAgICdvcmRlcnMvbmV3JyxcbiAgICAgICAgICAgICAgICAnb3JkZXJzL2VkaXQnLFxuICAgICAgICAgICAgICAgICdvcmRlcnMvY2FuY2VsJyxcbiAgICAgICAgICAgICAgICAnb3JkZXJzL3N0YXR1cycsXG4gICAgICAgICAgICAgICAgJ3dpdGhkcmF3YWxzL25ldycsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0QmFsYW5jZXNBbmRJbmZvICgpO1xuICAgICAgICBsZXQgYmFsYW5jZSA9IHJlc3BvbnNlWydiYWxhbmNlcy1hbmQtaW5mbyddO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGJhbGFuY2UgfTtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCB0aGlzLmN1cnJlbmNpZXMubGVuZ3RoOyBjKyspIHtcbiAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IHRoaXMuY3VycmVuY2llc1tjXTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd1c2VkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoY3VycmVuY3kgaW4gYmFsYW5jZVsnYXZhaWxhYmxlJ10pXG4gICAgICAgICAgICAgICAgYWNjb3VudFsnZnJlZSddID0gcGFyc2VGbG9hdCAoYmFsYW5jZVsnYXZhaWxhYmxlJ11bY3VycmVuY3ldKTtcbiAgICAgICAgICAgIGlmIChjdXJyZW5jeSBpbiBiYWxhbmNlWydvbl9ob2xkJ10pXG4gICAgICAgICAgICAgICAgYWNjb3VudFsndXNlZCddID0gcGFyc2VGbG9hdCAoYmFsYW5jZVsnb25faG9sZCddW2N1cnJlbmN5XSk7XG4gICAgICAgICAgICBhY2NvdW50Wyd0b3RhbCddID0gdGhpcy5zdW0gKGFjY291bnRbJ2ZyZWUnXSwgYWNjb3VudFsndXNlZCddKTtcbiAgICAgICAgICAgIHJlc3VsdFtjdXJyZW5jeV0gPSBhY2NvdW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0T3JkZXJCb29rICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2N1cnJlbmN5JzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSByZXNwb25zZVsnb3JkZXItYm9vayddO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IFtdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaWRlcyA9IHsgJ2JpZHMnOiAnYmlkJywgJ2Fza3MnOiAnYXNrJyB9O1xuICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzIChzaWRlcyk7XG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwga2V5cy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgbGV0IGtleSA9IGtleXNba107XG4gICAgICAgICAgICBsZXQgc2lkZSA9IHNpZGVzW2tleV07XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHBhcnNlSW50IChvcmRlclsndGltZXN0YW1wJ10pICogMTAwMDtcbiAgICAgICAgICAgICAgICBsZXQgcHJpY2UgPSBwYXJzZUZsb2F0IChvcmRlclsncHJpY2UnXSk7XG4gICAgICAgICAgICAgICAgbGV0IGFtb3VudCA9IHBhcnNlRmxvYXQgKG9yZGVyWydvcmRlcl9hbW91bnQnXSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W2tleV0ucHVzaCAoWyBwcmljZSwgYW1vdW50LCB0aW1lc3RhbXAgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFN0YXRzICh7XG4gICAgICAgICAgICAnY3VycmVuY3knOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IHRpY2tlciA9IHJlc3BvbnNlWydzdGF0cyddO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ21heCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ21pbiddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2JpZCddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2FzayddKSxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ29wZW4nXSksXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdF9wcmljZSddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2RhaWx5X2NoYW5nZSddKSxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndG90YWxfYnRjX3RyYWRlZCddKSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0VHJhbnNhY3Rpb25zICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2N1cnJlbmN5JzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdzaWRlJzogc2lkZSxcbiAgICAgICAgICAgICd0eXBlJzogdHlwZSxcbiAgICAgICAgICAgICdjdXJyZW5jeSc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgICAgICAnYW1vdW50JzogYW1vdW50LFxuICAgICAgICB9O1xuICAgICAgICBpZiAodHlwZSA9PSAnbGltaXQnKVxuICAgICAgICAgICAgb3JkZXJbJ2xpbWl0X3ByaWNlJ10gPSBwcmljZTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RPcmRlcnNOZXcgKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3VsdCxcbiAgICAgICAgICAgICdpZCc6IHJlc3VsdCxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0T3JkZXJzQ2FuY2VsICh7ICdpZCc6IGlkIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0aGlzLmlkID09ICdjcnlwdG9jYXBpdGFsJylcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyBpcyBhbiBhYnN0cmFjdCBiYXNlIEFQSSBmb3IgXzFidGN4ZScpO1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArICcvJyArIHBhdGg7XG4gICAgICAgIGlmIChhcGkgPT0gJ3B1YmxpYycpIHtcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyAocGFyYW1zKS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChwYXJhbXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICAgICAnYXBpX2tleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgICAgICdub25jZSc6IHRoaXMubm9uY2UgKCksXG4gICAgICAgICAgICB9LCBwYXJhbXMpO1xuICAgICAgICAgICAgbGV0IHJlcXVlc3QgPSB0aGlzLmpzb24gKHF1ZXJ5KTtcbiAgICAgICAgICAgIHF1ZXJ5WydzaWduYXR1cmUnXSA9IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKHJlcXVlc3QpLCB0aGlzLmVuY29kZSAodGhpcy5zZWNyZXQpKTtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLmpzb24gKHF1ZXJ5KTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgICAgIGlmICgnZXJyb3JzJyBpbiByZXNwb25zZSkge1xuICAgICAgICAgICAgbGV0IGVycm9ycyA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgZSA9IDA7IGUgPCByZXNwb25zZVsnZXJyb3JzJ10ubGVuZ3RoOyBlKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgZXJyb3IgPSByZXNwb25zZVsnZXJyb3JzJ11bZV07XG4gICAgICAgICAgICAgICAgZXJyb3JzLnB1c2ggKGVycm9yWydjb2RlJ10gKyAnOiAnICsgZXJyb3JbJ21lc3NhZ2UnXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlcnJvcnMgPSBlcnJvcnMuam9pbiAoJyAnKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgZXJyb3JzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIF8xYnRjeGUgPSBleHRlbmQgKGNyeXB0b2NhcGl0YWwsIHtcblxuICAgICdpZCc6ICdfMWJ0Y3hlJyxcbiAgICAnbmFtZSc6ICcxQlRDWEUnLFxuICAgICdjb3VudHJpZXMnOiAnUEEnLCAvLyBQYW5hbWFcbiAgICAnY29tbWVudCc6ICdDcnlwdG8gQ2FwaXRhbCBBUEknLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2MDQ5LTJiMjk0NDA4LTVlY2MtMTFlNy04NWNjLWFkYWZmMDEzZGMxYS5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vMWJ0Y3hlLmNvbS9hcGknLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vMWJ0Y3hlLmNvbScsXG4gICAgICAgICdkb2MnOiAnaHR0cHM6Ly8xYnRjeGUuY29tL2FwaS1kb2NzLnBocCcsXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9VU0QnOiB7ICdpZCc6ICdVU0QnLCAnc3ltYm9sJzogJ0JUQy9VU0QnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnVVNEJyB9LFxuICAgICAgICAnQlRDL0VVUic6IHsgJ2lkJzogJ0VVUicsICdzeW1ib2wnOiAnQlRDL0VVUicsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdFVVInIH0sXG4gICAgICAgICdCVEMvQ05ZJzogeyAnaWQnOiAnQ05ZJywgJ3N5bWJvbCc6ICdCVEMvQ05ZJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ0NOWScgfSxcbiAgICAgICAgJ0JUQy9SVUInOiB7ICdpZCc6ICdSVUInLCAnc3ltYm9sJzogJ0JUQy9SVUInLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnUlVCJyB9LFxuICAgICAgICAnQlRDL0NIRic6IHsgJ2lkJzogJ0NIRicsICdzeW1ib2wnOiAnQlRDL0NIRicsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdDSEYnIH0sXG4gICAgICAgICdCVEMvSlBZJzogeyAnaWQnOiAnSlBZJywgJ3N5bWJvbCc6ICdCVEMvSlBZJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ0pQWScgfSxcbiAgICAgICAgJ0JUQy9HQlAnOiB7ICdpZCc6ICdHQlAnLCAnc3ltYm9sJzogJ0JUQy9HQlAnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnR0JQJyB9LFxuICAgICAgICAnQlRDL0NBRCc6IHsgJ2lkJzogJ0NBRCcsICdzeW1ib2wnOiAnQlRDL0NBRCcsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdDQUQnIH0sXG4gICAgICAgICdCVEMvQVVEJzogeyAnaWQnOiAnQVVEJywgJ3N5bWJvbCc6ICdCVEMvQVVEJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ0FVRCcgfSxcbiAgICAgICAgJ0JUQy9BRUQnOiB7ICdpZCc6ICdBRUQnLCAnc3ltYm9sJzogJ0JUQy9BRUQnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnQUVEJyB9LFxuICAgICAgICAnQlRDL0JHTic6IHsgJ2lkJzogJ0JHTicsICdzeW1ib2wnOiAnQlRDL0JHTicsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdCR04nIH0sXG4gICAgICAgICdCVEMvQ1pLJzogeyAnaWQnOiAnQ1pLJywgJ3N5bWJvbCc6ICdCVEMvQ1pLJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ0NaSycgfSxcbiAgICAgICAgJ0JUQy9ES0snOiB7ICdpZCc6ICdES0snLCAnc3ltYm9sJzogJ0JUQy9ES0snLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnREtLJyB9LFxuICAgICAgICAnQlRDL0hLRCc6IHsgJ2lkJzogJ0hLRCcsICdzeW1ib2wnOiAnQlRDL0hLRCcsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdIS0QnIH0sXG4gICAgICAgICdCVEMvSFJLJzogeyAnaWQnOiAnSFJLJywgJ3N5bWJvbCc6ICdCVEMvSFJLJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ0hSSycgfSxcbiAgICAgICAgJ0JUQy9IVUYnOiB7ICdpZCc6ICdIVUYnLCAnc3ltYm9sJzogJ0JUQy9IVUYnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnSFVGJyB9LFxuICAgICAgICAnQlRDL0lMUyc6IHsgJ2lkJzogJ0lMUycsICdzeW1ib2wnOiAnQlRDL0lMUycsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdJTFMnIH0sXG4gICAgICAgICdCVEMvSU5SJzogeyAnaWQnOiAnSU5SJywgJ3N5bWJvbCc6ICdCVEMvSU5SJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ0lOUicgfSxcbiAgICAgICAgJ0JUQy9NVVInOiB7ICdpZCc6ICdNVVInLCAnc3ltYm9sJzogJ0JUQy9NVVInLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnTVVSJyB9LFxuICAgICAgICAnQlRDL01YTic6IHsgJ2lkJzogJ01YTicsICdzeW1ib2wnOiAnQlRDL01YTicsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdNWE4nIH0sXG4gICAgICAgICdCVEMvTk9LJzogeyAnaWQnOiAnTk9LJywgJ3N5bWJvbCc6ICdCVEMvTk9LJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ05PSycgfSxcbiAgICAgICAgJ0JUQy9OWkQnOiB7ICdpZCc6ICdOWkQnLCAnc3ltYm9sJzogJ0JUQy9OWkQnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnTlpEJyB9LFxuICAgICAgICAnQlRDL1BMTic6IHsgJ2lkJzogJ1BMTicsICdzeW1ib2wnOiAnQlRDL1BMTicsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdQTE4nIH0sXG4gICAgICAgICdCVEMvUk9OJzogeyAnaWQnOiAnUk9OJywgJ3N5bWJvbCc6ICdCVEMvUk9OJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ1JPTicgfSxcbiAgICAgICAgJ0JUQy9TRUsnOiB7ICdpZCc6ICdTRUsnLCAnc3ltYm9sJzogJ0JUQy9TRUsnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnU0VLJyB9LFxuICAgICAgICAnQlRDL1NHRCc6IHsgJ2lkJzogJ1NHRCcsICdzeW1ib2wnOiAnQlRDL1NHRCcsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdTR0QnIH0sXG4gICAgICAgICdCVEMvVEhCJzogeyAnaWQnOiAnVEhCJywgJ3N5bWJvbCc6ICdCVEMvVEhCJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ1RIQicgfSxcbiAgICAgICAgJ0JUQy9UUlknOiB7ICdpZCc6ICdUUlknLCAnc3ltYm9sJzogJ0JUQy9UUlknLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnVFJZJyB9LFxuICAgICAgICAnQlRDL1pBUic6IHsgJ2lkJzogJ1pBUicsICdzeW1ib2wnOiAnQlRDL1pBUicsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdaQVInIH0sXG4gICAgfSxcbn0pXG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGFueHBybyA9IHtcblxuICAgICdpZCc6ICdhbnhwcm8nLFxuICAgICduYW1lJzogJ0FOWFBybycsXG4gICAgJ2NvdW50cmllcyc6IFsgJ0pQJywgJ1NHJywgJ0hLJywgJ05aJyBdLFxuICAgICd2ZXJzaW9uJzogJzInLFxuICAgICdyYXRlTGltaXQnOiAxNTAwLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY1OTgzLWZkODU5NWRhLTVlYzktMTFlNy04MmUzLWFkYjNhYjhjMjYxMi5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vYW54cHJvLmNvbS9hcGknLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vYW54cHJvLmNvbScsXG4gICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAnaHR0cDovL2RvY3MuYW54djIuYXBpYXJ5LmlvJyxcbiAgICAgICAgICAgICdodHRwczovL2FueHByby5jb20vcGFnZXMvYXBpJyxcbiAgICAgICAgXSxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICd7Y3VycmVuY3lfcGFpcn0vbW9uZXkvdGlja2VyJyxcbiAgICAgICAgICAgICAgICAne2N1cnJlbmN5X3BhaXJ9L21vbmV5L2RlcHRoL2Z1bGwnLFxuICAgICAgICAgICAgICAgICd7Y3VycmVuY3lfcGFpcn0vbW9uZXkvdHJhZGUvZmV0Y2gnLCAvLyBkaXNhYmxlZCBieSBBTlhQcm9cbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ3tjdXJyZW5jeV9wYWlyfS9tb25leS9vcmRlci9hZGQnLFxuICAgICAgICAgICAgICAgICd7Y3VycmVuY3lfcGFpcn0vbW9uZXkvb3JkZXIvY2FuY2VsJyxcbiAgICAgICAgICAgICAgICAne2N1cnJlbmN5X3BhaXJ9L21vbmV5L29yZGVyL3F1b3RlJyxcbiAgICAgICAgICAgICAgICAne2N1cnJlbmN5X3BhaXJ9L21vbmV5L29yZGVyL3Jlc3VsdCcsXG4gICAgICAgICAgICAgICAgJ3tjdXJyZW5jeV9wYWlyfS9tb25leS9vcmRlcnMnLFxuICAgICAgICAgICAgICAgICdtb25leS97Y3VycmVuY3l9L2FkZHJlc3MnLFxuICAgICAgICAgICAgICAgICdtb25leS97Y3VycmVuY3l9L3NlbmRfc2ltcGxlJyxcbiAgICAgICAgICAgICAgICAnbW9uZXkvaW5mbycsXG4gICAgICAgICAgICAgICAgJ21vbmV5L3RyYWRlL2xpc3QnLFxuICAgICAgICAgICAgICAgICdtb25leS93YWxsZXQvaGlzdG9yeScsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgJ21hcmtldHMnOiB7XG4gICAgICAgICdCVEMvVVNEJzogeyAnaWQnOiAnQlRDVVNEJywgJ3N5bWJvbCc6ICdCVEMvVVNEJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ1VTRCcgfSxcbiAgICAgICAgJ0JUQy9IS0QnOiB7ICdpZCc6ICdCVENIS0QnLCAnc3ltYm9sJzogJ0JUQy9IS0QnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnSEtEJyB9LFxuICAgICAgICAnQlRDL0VVUic6IHsgJ2lkJzogJ0JUQ0VVUicsICdzeW1ib2wnOiAnQlRDL0VVUicsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdFVVInIH0sXG4gICAgICAgICdCVEMvQ0FEJzogeyAnaWQnOiAnQlRDQ0FEJywgJ3N5bWJvbCc6ICdCVEMvQ0FEJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ0NBRCcgfSxcbiAgICAgICAgJ0JUQy9BVUQnOiB7ICdpZCc6ICdCVENBVUQnLCAnc3ltYm9sJzogJ0JUQy9BVUQnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnQVVEJyB9LFxuICAgICAgICAnQlRDL1NHRCc6IHsgJ2lkJzogJ0JUQ1NHRCcsICdzeW1ib2wnOiAnQlRDL1NHRCcsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdTR0QnIH0sXG4gICAgICAgICdCVEMvSlBZJzogeyAnaWQnOiAnQlRDSlBZJywgJ3N5bWJvbCc6ICdCVEMvSlBZJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ0pQWScgfSxcbiAgICAgICAgJ0JUQy9HQlAnOiB7ICdpZCc6ICdCVENHQlAnLCAnc3ltYm9sJzogJ0JUQy9HQlAnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnR0JQJyB9LFxuICAgICAgICAnQlRDL05aRCc6IHsgJ2lkJzogJ0JUQ05aRCcsICdzeW1ib2wnOiAnQlRDL05aRCcsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdOWkQnIH0sXG4gICAgICAgICdMVEMvQlRDJzogeyAnaWQnOiAnTFRDQlRDJywgJ3N5bWJvbCc6ICdMVEMvQlRDJywgJ2Jhc2UnOiAnTFRDJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ0RPR0UvQlRDJzogeyAnaWQnOiAnRE9HRUJUQycsICdzeW1ib2wnOiAnRE9HRS9CVEMnLCAnYmFzZSc6ICdET0dFJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ1NUUi9CVEMnOiB7ICdpZCc6ICdTVFJCVEMnLCAnc3ltYm9sJzogJ1NUUi9CVEMnLCAnYmFzZSc6ICdTVFInLCAncXVvdGUnOiAnQlRDJyB9LFxuICAgICAgICAnWFJQL0JUQyc6IHsgJ2lkJzogJ1hSUEJUQycsICdzeW1ib2wnOiAnWFJQL0JUQycsICdiYXNlJzogJ1hSUCcsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RNb25leUluZm8gKCk7XG4gICAgICAgIGxldCBiYWxhbmNlID0gcmVzcG9uc2VbJ2RhdGEnXTtcbiAgICAgICAgbGV0IGN1cnJlbmNpZXMgPSBPYmplY3Qua2V5cyAoYmFsYW5jZVsnV2FsbGV0cyddKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiBiYWxhbmNlIH07XG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgY3VycmVuY2llcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gY3VycmVuY2llc1tjXTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd1c2VkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoY3VycmVuY3kgaW4gYmFsYW5jZVsnV2FsbGV0cyddKSB7XG4gICAgICAgICAgICAgICAgbGV0IHdhbGxldCA9IGJhbGFuY2VbJ1dhbGxldHMnXVtjdXJyZW5jeV07XG4gICAgICAgICAgICAgICAgYWNjb3VudFsnZnJlZSddID0gcGFyc2VGbG9hdCAod2FsbGV0WydBdmFpbGFibGVfQmFsYW5jZSddWyd2YWx1ZSddKTtcbiAgICAgICAgICAgICAgICBhY2NvdW50Wyd0b3RhbCddID0gcGFyc2VGbG9hdCAod2FsbGV0WydCYWxhbmNlJ11bJ3ZhbHVlJ10pO1xuICAgICAgICAgICAgICAgIGFjY291bnRbJ3VzZWQnXSA9IGFjY291bnRbJ3RvdGFsJ10gLSBhY2NvdW50WydmcmVlJ107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldEN1cnJlbmN5UGFpck1vbmV5RGVwdGhGdWxsICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2N1cnJlbmN5X3BhaXInOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IHJlc3BvbnNlWydkYXRhJ107XG4gICAgICAgIGxldCB0ID0gcGFyc2VJbnQgKG9yZGVyYm9va1snZGF0YVVwZGF0ZVRpbWUnXSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSBwYXJzZUludCAodCAvIDEwMDApO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAob3JkZXJbJ3ByaWNlJ10pO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBwYXJzZUZsb2F0IChvcmRlclsnYW1vdW50J10pO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtzaWRlXS5wdXNoIChbIHByaWNlLCBhbW91bnQgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldEN1cnJlbmN5UGFpck1vbmV5VGlja2VyICh7XG4gICAgICAgICAgICAnY3VycmVuY3lfcGFpcic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgdGlja2VyID0gcmVzcG9uc2VbJ2RhdGEnXTtcbiAgICAgICAgbGV0IHQgPSBwYXJzZUludCAodGlja2VyWydkYXRhVXBkYXRlVGltZSddKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHBhcnNlSW50ICh0IC8gMTAwMCk7XG4gICAgICAgIGxldCBiaWQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGxldCBhc2sgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmICh0aWNrZXJbJ2J1eSddWyd2YWx1ZSddKVxuICAgICAgICAgICAgYmlkID0gcGFyc2VGbG9hdCAodGlja2VyWydidXknXVsndmFsdWUnXSk7XG4gICAgICAgIGlmICh0aWNrZXJbJ3NlbGwnXVsndmFsdWUnXSlcbiAgICAgICAgICAgIGFzayA9IHBhcnNlRmxvYXQgKHRpY2tlclsnc2VsbCddWyd2YWx1ZSddKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddWyd2YWx1ZSddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddWyd2YWx1ZSddKSxcbiAgICAgICAgICAgICdiaWQnOiBiaWQsXG4gICAgICAgICAgICAnYXNrJzogYXNrLFxuICAgICAgICAgICAgJ3Z3YXAnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3Z3YXAnXVsndmFsdWUnXSksXG4gICAgICAgICAgICAnb3Blbic6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjbG9zZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdmaXJzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsYXN0JzogcGFyc2VGbG9hdCAodGlja2VyWydsYXN0J11bJ3ZhbHVlJ10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2F2ZyddWyd2YWx1ZSddKSxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWyd2b2wnXVsndmFsdWUnXSksXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBlcnJvciA9IHRoaXMuaWQgKyAnIHN3aXRjaGVkIG9mZiB0aGUgdHJhZGVzIGVuZHBvaW50LCBzZWUgdGhlaXIgZG9jcyBhdCBodHRwOi8vZG9jcy5hbnh2Mi5hcGlhcnkuaW8vcmVmZXJlbmNlL21hcmtldC1kYXRhL2N1cnJlbmN5cGFpcm1vbmV5dHJhZGVmZXRjaC1kaXNhYmxlZCc7XG4gICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yIChlcnJvcik7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldEN1cnJlbmN5UGFpck1vbmV5VHJhZGVGZXRjaCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdjdXJyZW5jeV9wYWlyJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdjdXJyZW5jeV9wYWlyJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICdhbW91bnRfaW50JzogYW1vdW50LFxuICAgICAgICAgICAgJ3R5cGUnOiBzaWRlLFxuICAgICAgICB9O1xuICAgICAgICBpZiAodHlwZSA9PSAnbGltaXQnKVxuICAgICAgICAgICAgb3JkZXJbJ3ByaWNlX2ludCddID0gcHJpY2U7XG4gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0Q3VycmVuY3lQYWlyT3JkZXJBZGQgKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3VsdCxcbiAgICAgICAgICAgICdpZCc6IHJlc3VsdFsnZGF0YSddXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdEN1cnJlbmN5UGFpck9yZGVyQ2FuY2VsICh7ICdvaWQnOiBpZCB9KTtcbiAgICB9LFxuXG4gICAgbm9uY2UgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHJlcXVlc3QgPSB0aGlzLmltcGxvZGVQYXJhbXMgKHBhdGgsIHBhcmFtcyk7XG4gICAgICAgIGxldCBxdWVyeSA9IHRoaXMub21pdCAocGFyYW1zLCB0aGlzLmV4dHJhY3RQYXJhbXMgKHBhdGgpKTtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ10gKyAnLycgKyB0aGlzLnZlcnNpb24gKyAnLycgKyByZXF1ZXN0O1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHF1ZXJ5KS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChxdWVyeSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpO1xuICAgICAgICAgICAgYm9keSA9IHRoaXMudXJsZW5jb2RlICh0aGlzLmV4dGVuZCAoeyAnbm9uY2UnOiBub25jZSB9LCBxdWVyeSkpO1xuICAgICAgICAgICAgbGV0IHNlY3JldCA9IHRoaXMuYmFzZTY0VG9CaW5hcnkgKHRoaXMuc2VjcmV0KTtcbiAgICAgICAgICAgIGxldCBhdXRoID0gcmVxdWVzdCArIFwiXFwwXCIgKyBib2R5O1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgICAgICAgJ1Jlc3QtS2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ1Jlc3QtU2lnbic6IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKGF1dGgpLCBzZWNyZXQsICdzaGE1MTInLCAnYmFzZTY0JyksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdyZXN1bHQnIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlWydyZXN1bHQnXSA9PSAnc3VjY2VzcycpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgJyArIHRoaXMuanNvbiAocmVzcG9uc2UpKTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBiaW5hbmNlID0ge1xuXG4gICAgJ2lkJzogJ2JpbmFuY2UnLFxuICAgICduYW1lJzogJ0JpbmFuY2UnLFxuICAgICdjb3VudHJpZXMnOiAnQ04nLCAvLyBDaGluYVxuICAgICdyYXRlTGltaXQnOiAxMDAwLFxuICAgICd2ZXJzaW9uJzogJ3YxJyxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yOTYwNDAyMC1kNTQ4M2NkYy04N2VlLTExZTctOTRjNy1kMWE4ZDkxNjkyOTMuanBnJyxcbiAgICAgICAgJ2FwaSc6ICdodHRwczovL3d3dy5iaW5hbmNlLmNvbS9hcGknLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vd3d3LmJpbmFuY2UuY29tJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL3d3dy5iaW5hbmNlLmNvbS9yZXN0YXBpcHViLmh0bWwnLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ3BpbmcnLFxuICAgICAgICAgICAgICAgICd0aW1lJyxcbiAgICAgICAgICAgICAgICAnZGVwdGgnLFxuICAgICAgICAgICAgICAgICdhZ2dUcmFkZXMnLFxuICAgICAgICAgICAgICAgICdrbGluZXMnLFxuICAgICAgICAgICAgICAgICd0aWNrZXIvMjRocicsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAncHJpdmF0ZSc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ29yZGVyJyxcbiAgICAgICAgICAgICAgICAnb3Blbk9yZGVycycsXG4gICAgICAgICAgICAgICAgJ2FsbE9yZGVycycsXG4gICAgICAgICAgICAgICAgJ2FjY291bnQnLFxuICAgICAgICAgICAgICAgICdteVRyYWRlcycsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ29yZGVyJyxcbiAgICAgICAgICAgICAgICAnb3JkZXIvdGVzdCcsXG4gICAgICAgICAgICAgICAgJ3VzZXJEYXRhU3RyZWFtJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAncHV0JzogW1xuICAgICAgICAgICAgICAgICd1c2VyRGF0YVN0cmVhbSdcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAnZGVsZXRlJzogW1xuICAgICAgICAgICAgICAgICdvcmRlcicsXG4gICAgICAgICAgICAgICAgJ3VzZXJEYXRhU3RyZWFtJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JOQi9CVEMnOiB7ICdpZCc6ICdCTkJCVEMnLCAnc3ltYm9sJzogJ0JOQi9CVEMnLCAnYmFzZSc6ICdCTkInLCAncXVvdGUnOiAnQlRDJyB9LFxuICAgICAgICAnTkVPL0JUQyc6IHsgJ2lkJzogJ05FT0JUQycsICdzeW1ib2wnOiAnTkVPL0JUQycsICdiYXNlJzogJ05FTycsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdFVEgvQlRDJzogeyAnaWQnOiAnRVRIQlRDJywgJ3N5bWJvbCc6ICdFVEgvQlRDJywgJ2Jhc2UnOiAnRVRIJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ0hTUi9CVEMnOiB7ICdpZCc6ICdIU1JCVEMnLCAnc3ltYm9sJzogJ0hTUi9CVEMnLCAnYmFzZSc6ICdIU1InLCAncXVvdGUnOiAnQlRDJyB9LFxuICAgICAgICAnTFRDL0JUQyc6IHsgJ2lkJzogJ0xUQ0JUQycsICdzeW1ib2wnOiAnTFRDL0JUQycsICdiYXNlJzogJ0xUQycsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdHQVMvQlRDJzogeyAnaWQnOiAnR0FTQlRDJywgJ3N5bWJvbCc6ICdHQVMvQlRDJywgJ2Jhc2UnOiAnR0FTJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ0hDQy9CVEMnOiB7ICdpZCc6ICdIQ0NCVEMnLCAnc3ltYm9sJzogJ0hDQy9CVEMnLCAnYmFzZSc6ICdIQ0MnLCAncXVvdGUnOiAnQlRDJyB9LFxuICAgICAgICAnQkNIL0JUQyc6IHsgJ2lkJzogJ0JDQ0JUQycsICdzeW1ib2wnOiAnQkNIL0JUQycsICdiYXNlJzogJ0JDSCcsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdCTkIvRVRIJzogeyAnaWQnOiAnQk5CRVRIJywgJ3N5bWJvbCc6ICdCTkIvRVRIJywgJ2Jhc2UnOiAnQk5CJywgJ3F1b3RlJzogJ0VUSCcgfSxcbiAgICAgICAgJ0ROVC9FVEgnOiB7ICdpZCc6ICdETlRFVEgnLCAnc3ltYm9sJzogJ0ROVC9FVEgnLCAnYmFzZSc6ICdETlQnLCAncXVvdGUnOiAnRVRIJyB9LFxuICAgICAgICAnT0FYL0VUSCc6IHsgJ2lkJzogJ09BWEVUSCcsICdzeW1ib2wnOiAnT0FYL0VUSCcsICdiYXNlJzogJ09BWCcsICdxdW90ZSc6ICdFVEgnIH0sXG4gICAgICAgICdNQ08vRVRIJzogeyAnaWQnOiAnTUNPRVRIJywgJ3N5bWJvbCc6ICdNQ08vRVRIJywgJ2Jhc2UnOiAnTUNPJywgJ3F1b3RlJzogJ0VUSCcgfSxcbiAgICAgICAgJ0JUTS9FVEgnOiB7ICdpZCc6ICdCVE1FVEgnLCAnc3ltYm9sJzogJ0JUTS9FVEgnLCAnYmFzZSc6ICdCVE0nLCAncXVvdGUnOiAnRVRIJyB9LFxuICAgICAgICAnU05UL0VUSCc6IHsgJ2lkJzogJ1NOVEVUSCcsICdzeW1ib2wnOiAnU05UL0VUSCcsICdiYXNlJzogJ1NOVCcsICdxdW90ZSc6ICdFVEgnIH0sXG4gICAgICAgICdFT1MvRVRIJzogeyAnaWQnOiAnRU9TRVRIJywgJ3N5bWJvbCc6ICdFT1MvRVRIJywgJ2Jhc2UnOiAnRU9TJywgJ3F1b3RlJzogJ0VUSCcgfSxcbiAgICAgICAgJ0JOVC9FVEgnOiB7ICdpZCc6ICdCTlRFVEgnLCAnc3ltYm9sJzogJ0JOVC9FVEgnLCAnYmFzZSc6ICdCTlQnLCAncXVvdGUnOiAnRVRIJyB9LFxuICAgICAgICAnSUNOL0VUSCc6IHsgJ2lkJzogJ0lDTkVUSCcsICdzeW1ib2wnOiAnSUNOL0VUSCcsICdiYXNlJzogJ0lDTicsICdxdW90ZSc6ICdFVEgnIH0sXG4gICAgICAgICdCVEMvVVNEVCc6IHsgJ2lkJzogJ0JUQ1VTRFQnLCAnc3ltYm9sJzogJ0JUQy9VU0RUJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ1VTRFQnIH0sXG4gICAgICAgICdFVEgvVVNEVCc6IHsgJ2lkJzogJ0VUSFVTRFQnLCAnc3ltYm9sJzogJ0VUSC9VU0RUJywgJ2Jhc2UnOiAnRVRIJywgJ3F1b3RlJzogJ1VTRFQnIH0sXG4gICAgICAgICdRVFVNL0VUSCc6IHsgJ2lkJzogJ1FUVU1FVEgnLCAnc3ltYm9sJzogJ1FUVU0vRVRIJywgJ2Jhc2UnOiAnUVRVTScsICdxdW90ZSc6ICdFVEgnIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZUdldEFjY291bnQgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogcmVzcG9uc2UgfTtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gcmVzcG9uc2VbJ2JhbGFuY2VzJ107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmFsYW5jZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCBiYWxhbmNlID0gYmFsYW5jZXNbaV07XG4gICAgICAgICAgICBsZXQgYXNzZXQgPSBiYWxhbmNlWydhc3NldCddO1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gdGhpcy5jb21tb25DdXJyZW5jeUNvZGUgKGFzc2V0KTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogcGFyc2VGbG9hdCAoYmFsYW5jZVsnZnJlZSddKSxcbiAgICAgICAgICAgICAgICAndXNlZCc6IHBhcnNlRmxvYXQgKGJhbGFuY2VbJ2xvY2tlZCddKSxcbiAgICAgICAgICAgICAgICAndG90YWwnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYWNjb3VudFsndG90YWwnXSA9IHRoaXMuc3VtIChhY2NvdW50WydmcmVlJ10sIGFjY291bnRbJ3VzZWQnXSk7XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgbSA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgdGhpcy5wdWJsaWNHZXREZXB0aCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiBtWydpZCddLFxuICAgICAgICAgICAgJ2xpbWl0JzogMTAwLCAvLyBkZWZhdWx0ID0gbWF4aW11bSA9IDEwMFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAob3JkZXJbMF0pO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBwYXJzZUZsb2F0IChvcmRlclsxXSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3NpZGVdLnB1c2ggKFsgcHJpY2UsIGFtb3VudCBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBwYXJzZVRpY2tlciAodGlja2VyLCBtYXJrZXQpIHtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRpY2tlclsnY2xvc2VUaW1lJ107XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2hpZ2hQcmljZSddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvd1ByaWNlJ10pLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYmlkUHJpY2UnXSksXG4gICAgICAgICAgICAnYXNrJzogcGFyc2VGbG9hdCAodGlja2VyWydhc2tQcmljZSddKSxcbiAgICAgICAgICAgICd2d2FwJzogcGFyc2VGbG9hdCAodGlja2VyWyd3ZWlnaHRlZEF2Z1ByaWNlJ10pLFxuICAgICAgICAgICAgJ29wZW4nOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ29wZW5QcmljZSddKSxcbiAgICAgICAgICAgICdjbG9zZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsncHJldkNsb3NlUHJpY2UnXSksXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdFByaWNlJ10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsncHJpY2VDaGFuZ2VQZXJjZW50J10pLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWyd2b2x1bWUnXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBsZXQgbSA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFRpY2tlcjI0aHIgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiBtWydpZCddLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VUaWNrZXIgKHJlc3BvbnNlLCBtKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPSExDViAobWFya2V0LCB0aW1lZnJhbWUgPSA2MCwgc2luY2UgPSB1bmRlZmluZWQsIGxpbWl0ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIEtsaW5lL2NhbmRsZXN0aWNrIGJhcnMgZm9yIGEgc3ltYm9sLiBLbGluZXMgYXJlIHVuaXF1ZWx5IGlkZW50aWZpZWQgYnkgdGhlaXIgb3BlbiB0aW1lLlxuICAgICAgICAvLyBQYXJhbWV0ZXJzOlxuICAgICAgICAvLyBOYW1lICAgIFR5cGUgICAgTWFuZGF0b3J5ICAgRGVzY3JpcHRpb25cbiAgICAgICAgLy8gc3ltYm9sICBTVFJJTkcgIFlFU1xuICAgICAgICAvLyBpbnRlcnZhbCAgICBFTlVNICAgIFlFU1xuICAgICAgICAvLyBsaW1pdCAgIElOVCBOTyAgRGVmYXVsdCA1MDA7IG1heCA1MDAuXG4gICAgICAgIC8vIHN0YXJ0VGltZSAgIExPTkcgICAgTk9cbiAgICAgICAgLy8gZW5kVGltZSBMT05HICAgIE5PXG4gICAgICAgIC8vIElmIHN0YXJ0VGltZSBhbmQgZW5kVGltZSBhcmUgbm90IHNlbnQsIHRoZSBtb3N0IHJlY2VudCBrbGluZXMgYXJlIHJldHVybmVkLlxuICAgICAgICAvLyBSZXNwb25zZTpcbiAgICAgICAgLy8gW1xuICAgICAgICAvLyAgIFtcbiAgICAgICAgLy8gICAgIDE0OTkwNDAwMDAwMDAsICAgICAgLy8gT3BlbiB0aW1lXG4gICAgICAgIC8vICAgICBcIjAuMDE2MzQ3OTBcIiwgICAgICAgLy8gT3BlblxuICAgICAgICAvLyAgICAgXCIwLjgwMDAwMDAwXCIsICAgICAgIC8vIEhpZ2hcbiAgICAgICAgLy8gICAgIFwiMC4wMTU3NTgwMFwiLCAgICAgICAvLyBMb3dcbiAgICAgICAgLy8gICAgIFwiMC4wMTU3NzEwMFwiLCAgICAgICAvLyBDbG9zZVxuICAgICAgICAvLyAgICAgXCIxNDg5NzYuMTE0Mjc4MTVcIiwgIC8vIFZvbHVtZVxuICAgICAgICAvLyAgICAgMTQ5OTY0NDc5OTk5OSwgICAgICAvLyBDbG9zZSB0aW1lXG4gICAgICAgIC8vICAgICBcIjI0MzQuMTkwNTUzMzRcIiwgICAgLy8gUXVvdGUgYXNzZXQgdm9sdW1lXG4gICAgICAgIC8vICAgICAzMDgsICAgICAgICAgICAgICAgIC8vIE51bWJlciBvZiB0cmFkZXNcbiAgICAgICAgLy8gICAgIFwiMTc1Ni44NzQwMjM5N1wiLCAgICAvLyBUYWtlciBidXkgYmFzZSBhc3NldCB2b2x1bWVcbiAgICAgICAgLy8gICAgIFwiMjguNDY2OTQzNjhcIiwgICAgICAvLyBUYWtlciBidXkgcXVvdGUgYXNzZXQgdm9sdW1lXG4gICAgICAgIC8vICAgICBcIjE3OTI4ODk5LjYyNDg0MzM5XCIgLy8gQ2FuIGJlIGlnbm9yZWRcbiAgICAgICAgLy8gICBdXG4gICAgICAgIC8vIF1cbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkICh0aGlzLmlkICsgJyBmZXRjaE9ITENWIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQnKTtcbiAgICB9LFxuXG4gICAgcGFyc2VUcmFkZSAodHJhZGUsIG1hcmtldCA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdGltZXN0YW1wRmllbGQgPSAoJ1QnIGluIHRyYWRlKSA/ICdUJyA6ICd0aW1lJztcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRyYWRlW3RpbWVzdGFtcEZpZWxkXTtcbiAgICAgICAgbGV0IHByaWNlRmllbGQgPSAoJ3AnIGluIHRyYWRlKSA/ICdwJyA6ICdwcmljZSc7XG4gICAgICAgIGxldCBwcmljZSA9IHBhcnNlRmxvYXQgKHRyYWRlW3ByaWNlRmllbGRdKTtcbiAgICAgICAgbGV0IGFtb3VudEZpZWxkID0gKCdxJyBpbiB0cmFkZSkgPyAncScgOiAncXR5JztcbiAgICAgICAgbGV0IGFtb3VudCA9IHBhcnNlRmxvYXQgKHRyYWRlW2Ftb3VudEZpZWxkXSk7XG4gICAgICAgIGxldCBpZEZpZWxkID0gKCdhJyBpbiB0cmFkZSkgPyAnYScgOiAnaWQnO1xuICAgICAgICBsZXQgaWQgPSB0cmFkZVtpZEZpZWxkXS50b1N0cmluZyAoKTtcbiAgICAgICAgbGV0IHNpZGUgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmICgnbScgaW4gdHJhZGUpIHtcbiAgICAgICAgICAgIHNpZGUgPSAnc2VsbCc7XG4gICAgICAgICAgICBpZiAodHJhZGVbJ20nXSlcbiAgICAgICAgICAgICAgICBzaWRlID0gJ2J1eSc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgaXNCdXllciA9IHRyYWRlWydpc0J1eWVyJ107XG4gICAgICAgICAgICBsZXQgaXNNYWtlciA9IHRyYWRlWydpc01ha2VyJ107XG4gICAgICAgICAgICBpZiAoaXNCdXllcikge1xuICAgICAgICAgICAgICAgIHNpZGUgPSBpc01ha2VyID8gJ3NlbGwnIDogJ2J1eSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNpZGUgPSBpc01ha2VyID8gJ2J1eScgOiAnc2VsbCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogdHJhZGUsXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ3N5bWJvbCc6IG1hcmtldFsnc3ltYm9sJ10sXG4gICAgICAgICAgICAnaWQnOiBpZCxcbiAgICAgICAgICAgICd0eXBlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3NpZGUnOiBzaWRlLFxuICAgICAgICAgICAgJ3ByaWNlJzogcHJpY2UsXG4gICAgICAgICAgICAnYW1vdW50JzogYW1vdW50LFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgbSA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldEFnZ1RyYWRlcyAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiBtWydpZCddLFxuICAgICAgICAgICAgLy8gJ2Zyb21JZCc6IDEyMywgICAgLy8gSUQgdG8gZ2V0IGFnZ3JlZ2F0ZSB0cmFkZXMgZnJvbSBJTkNMVVNJVkUuXG4gICAgICAgICAgICAvLyAnc3RhcnRUaW1lJzogNDU2LCAvLyBUaW1lc3RhbXAgaW4gbXMgdG8gZ2V0IGFnZ3JlZ2F0ZSB0cmFkZXMgZnJvbSBJTkNMVVNJVkUuXG4gICAgICAgICAgICAvLyAnZW5kVGltZSc6IDc4OSwgICAvLyBUaW1lc3RhbXAgaW4gbXMgdG8gZ2V0IGFnZ3JlZ2F0ZSB0cmFkZXMgdW50aWwgSU5DTFVTSVZFLlxuICAgICAgICAgICAgJ2xpbWl0JzogNTAwLCAgICAgICAgLy8gZGVmYXVsdCA9IG1heGltdW0gPSA1MDBcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlVHJhZGVzIChyZXNwb25zZSwgbSk7XG4gICAgfSxcblxuICAgIHBhcnNlT3JkZXIgKG9yZGVyKSB7XG4gICAgICAgIC8vIHtcbiAgICAgICAgLy8gICBcInN5bWJvbFwiOiBcIkxUQ0JUQ1wiLFxuICAgICAgICAvLyAgIFwib3JkZXJJZFwiOiAxLFxuICAgICAgICAvLyAgIFwiY2xpZW50T3JkZXJJZFwiOiBcIm15T3JkZXIxXCIsXG4gICAgICAgIC8vICAgXCJwcmljZVwiOiBcIjAuMVwiLFxuICAgICAgICAvLyAgIFwib3JpZ1F0eVwiOiBcIjEuMFwiLFxuICAgICAgICAvLyAgIFwiZXhlY3V0ZWRRdHlcIjogXCIwLjBcIixcbiAgICAgICAgLy8gICBcInN0YXR1c1wiOiBcIk5FV1wiLFxuICAgICAgICAvLyAgIFwidGltZUluRm9yY2VcIjogXCJHVENcIixcbiAgICAgICAgLy8gICBcInR5cGVcIjogXCJMSU1JVFwiLFxuICAgICAgICAvLyAgIFwic2lkZVwiOiBcIkJVWVwiLFxuICAgICAgICAvLyAgIFwic3RvcFByaWNlXCI6IFwiMC4wXCIsXG4gICAgICAgIC8vICAgXCJpY2ViZXJnUXR5XCI6IFwiMC4wXCIsXG4gICAgICAgIC8vICAgXCJ0aW1lXCI6IDE0OTk4MjczMTk1NTlcbiAgICAgICAgLy8gfVxuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWQgKHRoaXMuaWQgKyAnIHBhcnNlT3JkZXIgaXMgbm90IGltcGxlbWVudGVkIHlldCcpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAnc3ltYm9sJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICdxdWFudGl0eSc6ICclZicuc3ByaW50ZiAoYW1vdW50KSxcbiAgICAgICAgICAgICdwcmljZSc6ICclZicuc3ByaW50ZiAocHJpY2UpLFxuICAgICAgICAgICAgJ3R5cGUnOiB0eXBlLnRvVXBwZXJDYXNlICgpLFxuICAgICAgICAgICAgJ3NpZGUnOiBzaWRlLnRvVXBwZXJDYXNlICgpLFxuICAgICAgICAgICAgJ3RpbWVJbkZvcmNlJzogJ0dUQycsIC8vIEdvb2QgVG8gQ2FuY2VsXG4gICAgICAgICAgICAvLyAndGltZUluRm9yY2UnOiAnSU9DJywgLy8gSW1tZWRpYXRlIE9yIENhbmNlbFxuICAgICAgICB9O1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0T3JkZXIgKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ2lkJzogcmVzcG9uc2VbJ29yZGVySWQnXS50b1N0cmluZyAoKSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlciAoaWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBzeW1ib2wgPSAoJ3N5bWJvbCcgaW4gcGFyYW1zKTtcbiAgICAgICAgaWYgKCFzeW1ib2wpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgZmV0Y2hPcmRlciByZXF1aXJlcyBhIHN5bWJvbCBwYXJhbScpO1xuICAgICAgICBsZXQgbSA9IHRoaXMubWFya2V0IChzeW1ib2wpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVHZXRPcmRlciAodGhpcy5leHRlbmQgKHBhcmFtcywge1xuICAgICAgICAgICAgJ3N5bWJvbCc6IG1bJ2lkJ10sXG4gICAgICAgICAgICAnb3JkZXJJZCc6IGlkLnRvU3RyaW5nICgpLFxuICAgICAgICB9KSk7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlT3JkZXIgKHJlc3BvbnNlKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlcnMgKCkge1xuICAgICAgICAvLyBzeW1ib2wgIFNUUklORyAgWUVTXG4gICAgICAgIC8vIG9yZGVySWQgTE9ORyAgICBOT1xuICAgICAgICAvLyBsaW1pdCAgIElOVCBOTyAgRGVmYXVsdCA1MDA7IG1heCA1MDAuXG4gICAgICAgIC8vIHJlY3ZXaW5kb3cgIExPTkcgICAgTk9cbiAgICAgICAgLy8gdGltZXN0YW1wICAgTE9ORyAgICBZRVNcbiAgICAgICAgLy8gSWYgb3JkZXJJZCBpcyBzZXQsIGl0IHdpbGwgZ2V0IG9yZGVycyA+PSB0aGF0IG9yZGVySWQuIE90aGVyd2lzZSBtb3N0IHJlY2VudCBvcmRlcnMgYXJlIHJldHVybmVkLlxuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWQgKHRoaXMuaWQgKyAnIGZldGNoT3JkZXJzIG5vdCBpbXBsZW1lbnRlZCB5ZXQnKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hNeU9wZW5PcmRlcnMgKG1hcmtldCA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgaWYgKCFtYXJrZXQpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgZmV0Y2hNeU9wZW5PcmRlcnMgcmVxdWlyZXMgYSBzeW1ib2wnKTtcbiAgICAgICAgbGV0IG0gPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlR2V0T3Blbk9yZGVycyAoe1xuICAgICAgICAgICAgJ3N5bWJvbCc6IG1bJ2lkJ10sXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZU9yZGVycyAocmVzcG9uc2UsIG0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0T3JkZXJDYW5jZWwgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnb3JkZXJJZCc6IHBhcnNlSW50IChpZCksXG4gICAgICAgICAgICAvLyAnb3JpZ0NsaWVudE9yZGVySWQnOiBpZCxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIG5vbmNlICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgJy8nICsgdGhpcy52ZXJzaW9uICsgJy8nICsgcGF0aDtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChwYXJhbXMpLmxlbmd0aClcbiAgICAgICAgICAgICAgICB1cmwgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHBhcmFtcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpO1xuICAgICAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy51cmxlbmNvZGUgKHRoaXMuZXh0ZW5kICh7ICd0aW1lc3RhbXAnOiBub25jZSB9LCBwYXJhbXMpKTtcbiAgICAgICAgICAgIGxldCBhdXRoID0gdGhpcy5zZWNyZXQgKyAnfCcgKyBxdWVyeTtcbiAgICAgICAgICAgIGxldCBzaWduYXR1cmUgPSB0aGlzLmhhc2ggKHRoaXMuZW5jb2RlIChhdXRoKSwgJ3NoYTI1NicpO1xuICAgICAgICAgICAgcXVlcnkgKz0gJyYnICsgJ3NpZ25hdHVyZT0nICsgc2lnbmF0dXJlO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnWC1NQlgtQVBJS0VZJzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKG1ldGhvZCA9PSAnR0VUJykge1xuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyBxdWVyeTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYm9keSA9IHF1ZXJ5O1xuICAgICAgICAgICAgICAgIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgICAgICBpZiAoJ2NvZGUnIGluIHJlc3BvbnNlKSB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2VbJ2NvZGUnXSA8IDApXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGJpdDJjID0ge1xuXG4gICAgJ2lkJzogJ2JpdDJjJyxcbiAgICAnbmFtZSc6ICdCaXQyQycsXG4gICAgJ2NvdW50cmllcyc6ICdJTCcsIC8vIElzcmFlbFxuICAgICdyYXRlTGltaXQnOiAzMDAwLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2MTE5LTM1OTMyMjBlLTVlY2UtMTFlNy04YjNhLTVhMDQxZjZiY2MzZi5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vd3d3LmJpdDJjLmNvLmlsJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy5iaXQyYy5jby5pbCcsXG4gICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAnaHR0cHM6Ly93d3cuYml0MmMuY28uaWwvaG9tZS9hcGknLFxuICAgICAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS9PZmVyRS9iaXQyYycsXG4gICAgICAgIF0sXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnRXhjaGFuZ2VzL3twYWlyfS9UaWNrZXInLFxuICAgICAgICAgICAgICAgICdFeGNoYW5nZXMve3BhaXJ9L29yZGVyYm9vaycsXG4gICAgICAgICAgICAgICAgJ0V4Y2hhbmdlcy97cGFpcn0vdHJhZGVzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvQmFsYW5jZScsXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvQmFsYW5jZS92MicsXG4gICAgICAgICAgICAgICAgJ01lcmNoYW50L0NyZWF0ZUNoZWNrb3V0JyxcbiAgICAgICAgICAgICAgICAnT3JkZXIvQWNjb3VudEhpc3RvcnknLFxuICAgICAgICAgICAgICAgICdPcmRlci9BZGRDb2luRnVuZHNSZXF1ZXN0JyxcbiAgICAgICAgICAgICAgICAnT3JkZXIvQWRkRnVuZCcsXG4gICAgICAgICAgICAgICAgJ09yZGVyL0FkZE9yZGVyJyxcbiAgICAgICAgICAgICAgICAnT3JkZXIvQWRkT3JkZXJNYXJrZXRQcmljZUJ1eScsXG4gICAgICAgICAgICAgICAgJ09yZGVyL0FkZE9yZGVyTWFya2V0UHJpY2VTZWxsJyxcbiAgICAgICAgICAgICAgICAnT3JkZXIvQ2FuY2VsT3JkZXInLFxuICAgICAgICAgICAgICAgICdPcmRlci9NeU9yZGVycycsXG4gICAgICAgICAgICAgICAgJ1BheW1lbnQvR2V0TXlJZCcsXG4gICAgICAgICAgICAgICAgJ1BheW1lbnQvU2VuZCcsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgJ21hcmtldHMnOiB7XG4gICAgICAgICdCVEMvTklTJzogeyAnaWQnOiAnQnRjTmlzJywgJ3N5bWJvbCc6ICdCVEMvTklTJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ05JUycgfSxcbiAgICAgICAgJ0xUQy9CVEMnOiB7ICdpZCc6ICdMdGNCdGMnLCAnc3ltYm9sJzogJ0xUQy9CVEMnLCAnYmFzZSc6ICdMVEMnLCAncXVvdGUnOiAnQlRDJyB9LFxuICAgICAgICAnTFRDL05JUyc6IHsgJ2lkJzogJ0x0Y05pcycsICdzeW1ib2wnOiAnTFRDL05JUycsICdiYXNlJzogJ0xUQycsICdxdW90ZSc6ICdOSVMnIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGxldCBiYWxhbmNlID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdEFjY291bnRCYWxhbmNlVjIgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogYmFsYW5jZSB9O1xuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IHRoaXMuY3VycmVuY2llcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gdGhpcy5jdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChjdXJyZW5jeSBpbiBiYWxhbmNlKSB7XG4gICAgICAgICAgICAgICAgbGV0IGF2YWlsYWJsZSA9ICdBVkFJTEFCTEVfJyArIGN1cnJlbmN5O1xuICAgICAgICAgICAgICAgIGFjY291bnRbJ2ZyZWUnXSA9IGJhbGFuY2VbYXZhaWxhYmxlXTtcbiAgICAgICAgICAgICAgICBhY2NvdW50Wyd0b3RhbCddID0gYmFsYW5jZVtjdXJyZW5jeV07XG4gICAgICAgICAgICAgICAgYWNjb3VudFsndXNlZCddID0gYWNjb3VudFsndG90YWwnXSAtIGFjY291bnRbJ2ZyZWUnXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdFtjdXJyZW5jeV0gPSBhY2NvdW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSBhd2FpdCB0aGlzLnB1YmxpY0dldEV4Y2hhbmdlc1BhaXJPcmRlcmJvb2sgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAncGFpcic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IFtdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaWRlcyA9IFsgJ2JpZHMnLCAnYXNrcycgXTtcbiAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBzaWRlcy5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1tzXTtcbiAgICAgICAgICAgIGxldCBvcmRlcnMgPSBvcmRlcmJvb2tbc2lkZV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBvcmRlciA9IG9yZGVyc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgcHJpY2UgPSBvcmRlclswXTtcbiAgICAgICAgICAgICAgICBsZXQgYW1vdW50ID0gb3JkZXJbMV07XG4gICAgICAgICAgICAgICAgbGV0IHRpbWVzdGFtcCA9IG9yZGVyWzJdICogMTAwMDtcbiAgICAgICAgICAgICAgICByZXN1bHRbc2lkZV0ucHVzaCAoWyBwcmljZSwgYW1vdW50LCB0aW1lc3RhbXAgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBsZXQgdGlja2VyID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRFeGNoYW5nZXNQYWlyVGlja2VyICh7XG4gICAgICAgICAgICAncGFpcic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2gnXSksXG4gICAgICAgICAgICAnbG93JzogcGFyc2VGbG9hdCAodGlja2VyWydsJ10pLFxuICAgICAgICAgICAgJ2JpZCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhc2snOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xsJ10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2F2J10pLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2EnXSksXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldEV4Y2hhbmdlc1BhaXJUcmFkZXMgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAncGFpcic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgbWV0aG9kID0gJ3ByaXZhdGVQb3N0T3JkZXJBZGRPcmRlcic7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdBbW91bnQnOiBhbW91bnQsXG4gICAgICAgICAgICAnUGFpcic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlID09ICdtYXJrZXQnKSB7XG4gICAgICAgICAgICBtZXRob2QgKz0gJ01hcmtldFByaWNlJyArIHRoaXMuY2FwaXRhbGl6ZSAoc2lkZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvcmRlclsnUHJpY2UnXSA9IHByaWNlO1xuICAgICAgICAgICAgb3JkZXJbJ1RvdGFsJ10gPSBhbW91bnQgKiBwcmljZTtcbiAgICAgICAgICAgIG9yZGVyWydJc0JpZCddID0gKHNpZGUgPT0gJ2J1eScpO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCB0aGlzW21ldGhvZF0gKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3VsdCxcbiAgICAgICAgICAgICdpZCc6IHJlc3VsdFsnTmV3T3JkZXInXVsnaWQnXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0T3JkZXJDYW5jZWxPcmRlciAoeyAnaWQnOiBpZCB9KTtcbiAgICB9LFxuXG4gICAgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArICcvJyArIHRoaXMuaW1wbG9kZVBhcmFtcyAocGF0aCwgcGFyYW1zKTtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgdXJsICs9ICcuanNvbic7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpO1xuICAgICAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5leHRlbmQgKHsgJ25vbmNlJzogbm9uY2UgfSwgcGFyYW1zKTtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtTGVuZ3RoJzogYm9keS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgJ2tleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgICAgICdzaWduJzogdGhpcy5obWFjICh0aGlzLmVuY29kZSAoYm9keSksIHRoaXMuZW5jb2RlICh0aGlzLnNlY3JldCksICdzaGE1MTInLCAnYmFzZTY0JyksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgYml0YmF5ID0ge1xuXG4gICAgJ2lkJzogJ2JpdGJheScsXG4gICAgJ25hbWUnOiAnQml0QmF5JyxcbiAgICAnY291bnRyaWVzJzogWyAnUEwnLCAnRVUnIF0sIC8vIFBvbGFuZFxuICAgICdyYXRlTGltaXQnOiAxMDAwLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2MTMyLTk3OGE3YmQ4LTVlY2UtMTFlNy05NTQwLWJjOTZkMWU5YmJiOC5qcGcnLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vYml0YmF5Lm5ldCcsXG4gICAgICAgICdhcGknOiB7XG4gICAgICAgICAgICAncHVibGljJzogJ2h0dHBzOi8vYml0YmF5Lm5ldC9BUEkvUHVibGljJyxcbiAgICAgICAgICAgICdwcml2YXRlJzogJ2h0dHBzOi8vYml0YmF5Lm5ldC9BUEkvVHJhZGluZy90cmFkaW5nQXBpLnBocCcsXG4gICAgICAgIH0sXG4gICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAnaHR0cHM6Ly9iaXRiYXkubmV0L3B1YmxpYy1hcGknLFxuICAgICAgICAgICAgJ2h0dHBzOi8vYml0YmF5Lm5ldC9hY2NvdW50L3RhYi1hcGknLFxuICAgICAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS9CaXRCYXlOZXQvQVBJJyxcbiAgICAgICAgXSxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICd7aWR9L2FsbCcsXG4gICAgICAgICAgICAgICAgJ3tpZH0vbWFya2V0JyxcbiAgICAgICAgICAgICAgICAne2lkfS9vcmRlcmJvb2snLFxuICAgICAgICAgICAgICAgICd7aWR9L3RpY2tlcicsXG4gICAgICAgICAgICAgICAgJ3tpZH0vdHJhZGVzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2luZm8nLFxuICAgICAgICAgICAgICAgICd0cmFkZScsXG4gICAgICAgICAgICAgICAgJ2NhbmNlbCcsXG4gICAgICAgICAgICAgICAgJ29yZGVyYm9vaycsXG4gICAgICAgICAgICAgICAgJ29yZGVycycsXG4gICAgICAgICAgICAgICAgJ3RyYW5zZmVyJyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXcnLFxuICAgICAgICAgICAgICAgICdoaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAndHJhbnNhY3Rpb25zJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9VU0QnOiB7ICdpZCc6ICdCVENVU0QnLCAnc3ltYm9sJzogJ0JUQy9VU0QnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnVVNEJyB9LFxuICAgICAgICAnQlRDL0VVUic6IHsgJ2lkJzogJ0JUQ0VVUicsICdzeW1ib2wnOiAnQlRDL0VVUicsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdFVVInIH0sXG4gICAgICAgICdCVEMvUExOJzogeyAnaWQnOiAnQlRDUExOJywgJ3N5bWJvbCc6ICdCVEMvUExOJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ1BMTicgfSxcbiAgICAgICAgJ0xUQy9VU0QnOiB7ICdpZCc6ICdMVENVU0QnLCAnc3ltYm9sJzogJ0xUQy9VU0QnLCAnYmFzZSc6ICdMVEMnLCAncXVvdGUnOiAnVVNEJyB9LFxuICAgICAgICAnTFRDL0VVUic6IHsgJ2lkJzogJ0xUQ0VVUicsICdzeW1ib2wnOiAnTFRDL0VVUicsICdiYXNlJzogJ0xUQycsICdxdW90ZSc6ICdFVVInIH0sXG4gICAgICAgICdMVEMvUExOJzogeyAnaWQnOiAnTFRDUExOJywgJ3N5bWJvbCc6ICdMVEMvUExOJywgJ2Jhc2UnOiAnTFRDJywgJ3F1b3RlJzogJ1BMTicgfSxcbiAgICAgICAgJ0xUQy9CVEMnOiB7ICdpZCc6ICdMVENCVEMnLCAnc3ltYm9sJzogJ0xUQy9CVEMnLCAnYmFzZSc6ICdMVEMnLCAncXVvdGUnOiAnQlRDJyB9LFxuICAgICAgICAnRVRIL1VTRCc6IHsgJ2lkJzogJ0VUSFVTRCcsICdzeW1ib2wnOiAnRVRIL1VTRCcsICdiYXNlJzogJ0VUSCcsICdxdW90ZSc6ICdVU0QnIH0sXG4gICAgICAgICdFVEgvRVVSJzogeyAnaWQnOiAnRVRIRVVSJywgJ3N5bWJvbCc6ICdFVEgvRVVSJywgJ2Jhc2UnOiAnRVRIJywgJ3F1b3RlJzogJ0VVUicgfSxcbiAgICAgICAgJ0VUSC9QTE4nOiB7ICdpZCc6ICdFVEhQTE4nLCAnc3ltYm9sJzogJ0VUSC9QTE4nLCAnYmFzZSc6ICdFVEgnLCAncXVvdGUnOiAnUExOJyB9LFxuICAgICAgICAnRVRIL0JUQyc6IHsgJ2lkJzogJ0VUSEJUQycsICdzeW1ib2wnOiAnRVRIL0JUQycsICdiYXNlJzogJ0VUSCcsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdMU0svVVNEJzogeyAnaWQnOiAnTFNLVVNEJywgJ3N5bWJvbCc6ICdMU0svVVNEJywgJ2Jhc2UnOiAnTFNLJywgJ3F1b3RlJzogJ1VTRCcgfSxcbiAgICAgICAgJ0xTSy9FVVInOiB7ICdpZCc6ICdMU0tFVVInLCAnc3ltYm9sJzogJ0xTSy9FVVInLCAnYmFzZSc6ICdMU0snLCAncXVvdGUnOiAnRVVSJyB9LFxuICAgICAgICAnTFNLL1BMTic6IHsgJ2lkJzogJ0xTS1BMTicsICdzeW1ib2wnOiAnTFNLL1BMTicsICdiYXNlJzogJ0xTSycsICdxdW90ZSc6ICdQTE4nIH0sXG4gICAgICAgICdMU0svQlRDJzogeyAnaWQnOiAnTFNLQlRDJywgJ3N5bWJvbCc6ICdMU0svQlRDJywgJ2Jhc2UnOiAnTFNLJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdEluZm8gKCk7XG4gICAgICAgIGxldCBiYWxhbmNlID0gcmVzcG9uc2VbJ2JhbGFuY2VzJ107XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogYmFsYW5jZSB9O1xuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IHRoaXMuY3VycmVuY2llcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gdGhpcy5jdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChjdXJyZW5jeSBpbiBiYWxhbmNlKSB7XG4gICAgICAgICAgICAgICAgYWNjb3VudFsnZnJlZSddID0gcGFyc2VGbG9hdCAoYmFsYW5jZVtjdXJyZW5jeV1bJ2F2YWlsYWJsZSddKTtcbiAgICAgICAgICAgICAgICBhY2NvdW50Wyd1c2VkJ10gPSBwYXJzZUZsb2F0IChiYWxhbmNlW2N1cnJlbmN5XVsnbG9ja2VkJ10pO1xuICAgICAgICAgICAgICAgIGFjY291bnRbJ3RvdGFsJ10gPSB0aGlzLnN1bSAoYWNjb3VudFsnZnJlZSddLCBhY2NvdW50Wyd1c2VkJ10pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IGF3YWl0IHRoaXMucHVibGljR2V0SWRPcmRlcmJvb2sgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnaWQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBvcmRlcmJvb2tbJ2JpZHMnXSxcbiAgICAgICAgICAgICdhc2tzJzogb3JkZXJib29rWydhc2tzJ10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGxldCB0aWNrZXIgPSBhd2FpdCB0aGlzLnB1YmxpY0dldElkVGlja2VyICh7XG4gICAgICAgICAgICAnaWQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydtYXgnXSksXG4gICAgICAgICAgICAnbG93JzogcGFyc2VGbG9hdCAodGlja2VyWydtaW4nXSksXG4gICAgICAgICAgICAnYmlkJzogcGFyc2VGbG9hdCAodGlja2VyWydiaWQnXSksXG4gICAgICAgICAgICAnYXNrJzogcGFyc2VGbG9hdCAodGlja2VyWydhc2snXSksXG4gICAgICAgICAgICAndndhcCc6IHBhcnNlRmxvYXQgKHRpY2tlclsndndhcCddKSxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xhc3QnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYXZlcmFnZSddKSxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWyd2b2x1bWUnXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0SWRUcmFkZXMgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnaWQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcblxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdFRyYWRlICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ3R5cGUnOiBzaWRlLFxuICAgICAgICAgICAgJ2N1cnJlbmN5JzogcFsnYmFzZSddLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IGFtb3VudCxcbiAgICAgICAgICAgICdwYXltZW50X2N1cnJlbmN5JzogcFsncXVvdGUnXSxcbiAgICAgICAgICAgICdyYXRlJzogcHJpY2UsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJpdmF0ZVBvc3RDYW5jZWwgKHsgJ2lkJzogaWQgfSk7XG4gICAgfSxcblxuICAgIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ11bYXBpXTtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgdXJsICs9ICcvJyArIHRoaXMuaW1wbG9kZVBhcmFtcyAocGF0aCwgcGFyYW1zKSArICcuanNvbic7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBib2R5ID0gdGhpcy51cmxlbmNvZGUgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAgICAgJ21ldGhvZCc6IHBhdGgsXG4gICAgICAgICAgICAgICAgJ21vbWVudCc6IHRoaXMubm9uY2UgKCksXG4gICAgICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgICAgICAgICdDb250ZW50LUxlbmd0aCc6IGJvZHkubGVuZ3RoLFxuICAgICAgICAgICAgICAgICdBUEktS2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ0FQSS1IYXNoJzogdGhpcy5obWFjICh0aGlzLmVuY29kZSAoYm9keSksIHRoaXMuZW5jb2RlICh0aGlzLnNlY3JldCksICdzaGE1MTInKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBiaXRiYXlzID0ge1xuXG4gICAgJ2lkJzogJ2JpdGJheXMnLFxuICAgICduYW1lJzogJ0JpdEJheXMnLFxuICAgICdjb3VudHJpZXMnOiBbICdDTicsICdHQicsICdISycsICdBVScsICdDQScgXSxcbiAgICAncmF0ZUxpbWl0JzogMTUwMCxcbiAgICAndmVyc2lvbic6ICd2MScsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc4MDg1OTktOTgzNjg3ZDItNjA1MS0xMWU3LThkOTUtODBkZmNiZTVjYmI0LmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly9iaXRiYXlzLmNvbS9hcGknLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vYml0YmF5cy5jb20nLFxuICAgICAgICAnZG9jJzogJ2h0dHBzOi8vYml0YmF5cy5jb20vaGVscC9hcGkvJyxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICd0aWNrZXInLFxuICAgICAgICAgICAgICAgICd0cmFkZXMnLFxuICAgICAgICAgICAgICAgICdkZXB0aCcsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAncHJpdmF0ZSc6IHtcbiAgICAgICAgICAgICdwb3N0JzogW1xuICAgICAgICAgICAgICAgICdjYW5jZWwnLFxuICAgICAgICAgICAgICAgICdpbmZvJyxcbiAgICAgICAgICAgICAgICAnb3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnb3JkZXInLFxuICAgICAgICAgICAgICAgICd0cmFuc2FjdGlvbnMnLFxuICAgICAgICAgICAgICAgICd0cmFkZScsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgJ21hcmtldHMnOiB7XG4gICAgICAgICdCVEMvVVNEJzogeyAnaWQnOiAnYnRjX3VzZCcsICdzeW1ib2wnOiAnQlRDL1VTRCcsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdVU0QnIH0sXG4gICAgICAgICdCVEMvQ05ZJzogeyAnaWQnOiAnYnRjX2NueScsICdzeW1ib2wnOiAnQlRDL0NOWScsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdDTlknIH0sXG4gICAgICAgICdPRFMvQlRDJzogeyAnaWQnOiAnb2RzX2J0YycsICdzeW1ib2wnOiAnT0RTL0JUQycsICdiYXNlJzogJ09EUycsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdMU0svQlRDJzogeyAnaWQnOiAnbHNrX2J0YycsICdzeW1ib2wnOiAnTFNLL0JUQycsICdiYXNlJzogJ0xTSycsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdMU0svQ05ZJzogeyAnaWQnOiAnbHNrX2NueScsICdzeW1ib2wnOiAnTFNLL0NOWScsICdiYXNlJzogJ0xTSycsICdxdW90ZSc6ICdDTlknIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RJbmZvICgpO1xuICAgICAgICBsZXQgYmFsYW5jZSA9IHJlc3BvbnNlWydyZXN1bHQnXVsnd2FsbGV0J107XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogYmFsYW5jZSB9O1xuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IHRoaXMuY3VycmVuY2llcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gdGhpcy5jdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IGxvd2VyY2FzZSA9IGN1cnJlbmN5LnRvTG93ZXJDYXNlICgpO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChsb3dlcmNhc2UgaW4gYmFsYW5jZSkge1xuICAgICAgICAgICAgICAgIGFjY291bnRbJ2ZyZWUnXSA9IHBhcnNlRmxvYXQgKGJhbGFuY2VbbG93ZXJjYXNlXVsnYXZhaWwnXSk7XG4gICAgICAgICAgICAgICAgYWNjb3VudFsndXNlZCddID0gcGFyc2VGbG9hdCAoYmFsYW5jZVtsb3dlcmNhc2VdWydsb2NrJ10pO1xuICAgICAgICAgICAgICAgIGFjY291bnRbJ3RvdGFsJ10gPSB0aGlzLnN1bSAoYWNjb3VudFsnZnJlZSddLCBhY2NvdW50Wyd1c2VkJ10pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXREZXB0aCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdtYXJrZXQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IHJlc3BvbnNlWydyZXN1bHQnXTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAob3JkZXJbMF0pO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBwYXJzZUZsb2F0IChvcmRlclsxXSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3NpZGVdLnB1c2ggKFsgcHJpY2UsIGFtb3VudCBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0VGlja2VyICh7XG4gICAgICAgICAgICAnbWFya2V0JzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aWNrZXIgPSByZXNwb25zZVsncmVzdWx0J107XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2J1eSddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3NlbGwnXSksXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xhc3QnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWyd2b2wnXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0VHJhZGVzICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ21hcmtldCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAnbWFya2V0JzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICdvcCc6IHNpZGUsXG4gICAgICAgICAgICAnYW1vdW50JzogYW1vdW50LFxuICAgICAgICB9O1xuICAgICAgICBpZiAodHlwZSA9PSAnbWFya2V0Jykge1xuICAgICAgICAgICAgb3JkZXJbJ29yZGVyX3R5cGUnXSA9IDE7XG4gICAgICAgICAgICBvcmRlclsncHJpY2UnXSA9IHByaWNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3JkZXJbJ29yZGVyX3R5cGUnXSA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdFRyYWRlICh0aGlzLmV4dGVuZCAob3JkZXIsIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXNwb25zZSxcbiAgICAgICAgICAgICdpZCc6IHJlc3BvbnNlWydyZXN1bHQnXVsnaWQnXS50b1N0cmluZyAoKSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0Q2FuY2VsICh7ICdpZCc6IGlkIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgJy8nICsgdGhpcy52ZXJzaW9uICsgJy8nICsgcGF0aDtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChwYXJhbXMpLmxlbmd0aClcbiAgICAgICAgICAgICAgICB1cmwgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHBhcmFtcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpO1xuICAgICAgICAgICAgYm9keSA9IHRoaXMudXJsZW5jb2RlICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgICAgICdub25jZSc6IG5vbmNlLFxuICAgICAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICAgICAgICAnQ29udGVudC1MZW5ndGgnOiBib2R5Lmxlbmd0aCxcbiAgICAgICAgICAgICAgICAnS2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ1NpZ24nOiB0aGlzLmhtYWMgKHRoaXMuZW5jb2RlIChib2R5KSwgdGhpcy5zZWNyZXQsICdzaGE1MTInKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgICAgICBpZiAoJ3N0YXR1cycgaW4gcmVzcG9uc2UpXG4gICAgICAgICAgICBpZiAocmVzcG9uc2VbJ3N0YXR1cyddID09IDIwMClcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGJpdGNvaW5jb2lkID0ge1xuXG4gICAgJ2lkJzogJ2JpdGNvaW5jb2lkJyxcbiAgICAnbmFtZSc6ICdCaXRjb2luLmNvLmlkJyxcbiAgICAnY291bnRyaWVzJzogJ0lEJywgLy8gSW5kb25lc2lhXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc3NjYxMzgtMDQzYzc3ODYtNWVjZi0xMWU3LTg4MmItODA5YzE0ZjM4YjUzLmpwZycsXG4gICAgICAgICdhcGknOiB7XG4gICAgICAgICAgICAncHVibGljJzogJ2h0dHBzOi8vdmlwLmJpdGNvaW4uY28uaWQvYXBpJyxcbiAgICAgICAgICAgICdwcml2YXRlJzogJ2h0dHBzOi8vdmlwLmJpdGNvaW4uY28uaWQvdGFwaScsXG4gICAgICAgIH0sXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly93d3cuYml0Y29pbi5jby5pZCcsXG4gICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAnaHR0cHM6Ly92aXAuYml0Y29pbi5jby5pZC9kb3dubG9hZHMvQklUQ09JTkNPSUQtQVBJLURPQ1VNRU5UQVRJT04ucGRmJyxcbiAgICAgICAgICAgICdodHRwczovL3ZpcC5iaXRjb2luLmNvLmlkL3RyYWRlX2FwaScsXG4gICAgICAgIF0sXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAne3BhaXJ9L3RpY2tlcicsXG4gICAgICAgICAgICAgICAgJ3twYWlyfS90cmFkZXMnLFxuICAgICAgICAgICAgICAgICd7cGFpcn0vZGVwdGgnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnZ2V0SW5mbycsXG4gICAgICAgICAgICAgICAgJ3RyYW5zSGlzdG9yeScsXG4gICAgICAgICAgICAgICAgJ3RyYWRlJyxcbiAgICAgICAgICAgICAgICAndHJhZGVIaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAnb3Blbk9yZGVycycsXG4gICAgICAgICAgICAgICAgJ2NhbmNlbE9yZGVyJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9JRFInOiAgeyAnaWQnOiAnYnRjX2lkcicsICdzeW1ib2wnOiAnQlRDL0lEUicsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdJRFInLCAnYmFzZUlkJzogJ2J0YycsICdxdW90ZUlkJzogJ2lkcicgfSxcbiAgICAgICAgJ0JUUy9CVEMnOiAgeyAnaWQnOiAnYnRzX2J0YycsICdzeW1ib2wnOiAnQlRTL0JUQycsICdiYXNlJzogJ0JUUycsICdxdW90ZSc6ICdCVEMnLCAnYmFzZUlkJzogJ2J0cycsICdxdW90ZUlkJzogJ2J0YycgfSxcbiAgICAgICAgJ0RBU0gvQlRDJzogeyAnaWQnOiAnZHJrX2J0YycsICdzeW1ib2wnOiAnREFTSC9CVEMnLCAnYmFzZSc6ICdEQVNIJywgJ3F1b3RlJzogJ0JUQycsICdiYXNlSWQnOiAnZHJrJywgJ3F1b3RlSWQnOiAnYnRjJyB9LFxuICAgICAgICAnRE9HRS9CVEMnOiB7ICdpZCc6ICdkb2dlX2J0YycsICdzeW1ib2wnOiAnRE9HRS9CVEMnLCAnYmFzZSc6ICdET0dFJywgJ3F1b3RlJzogJ0JUQycsICdiYXNlSWQnOiAnZG9nZScsICdxdW90ZUlkJzogJ2J0YycgfSxcbiAgICAgICAgJ0VUSC9CVEMnOiAgeyAnaWQnOiAnZXRoX2J0YycsICdzeW1ib2wnOiAnRVRIL0JUQycsICdiYXNlJzogJ0VUSCcsICdxdW90ZSc6ICdCVEMnLCAnYmFzZUlkJzogJ2V0aCcsICdxdW90ZUlkJzogJ2J0YycgfSxcbiAgICAgICAgJ0xUQy9CVEMnOiAgeyAnaWQnOiAnbHRjX2J0YycsICdzeW1ib2wnOiAnTFRDL0JUQycsICdiYXNlJzogJ0xUQycsICdxdW90ZSc6ICdCVEMnLCAnYmFzZUlkJzogJ2x0YycsICdxdW90ZUlkJzogJ2J0YycgfSxcbiAgICAgICAgJ05YVC9CVEMnOiAgeyAnaWQnOiAnbnh0X2J0YycsICdzeW1ib2wnOiAnTlhUL0JUQycsICdiYXNlJzogJ05YVCcsICdxdW90ZSc6ICdCVEMnLCAnYmFzZUlkJzogJ254dCcsICdxdW90ZUlkJzogJ2J0YycgfSxcbiAgICAgICAgJ1NUUi9CVEMnOiAgeyAnaWQnOiAnc3RyX2J0YycsICdzeW1ib2wnOiAnU1RSL0JUQycsICdiYXNlJzogJ1NUUicsICdxdW90ZSc6ICdCVEMnLCAnYmFzZUlkJzogJ3N0cicsICdxdW90ZUlkJzogJ2J0YycgfSxcbiAgICAgICAgJ05FTS9CVEMnOiAgeyAnaWQnOiAnbmVtX2J0YycsICdzeW1ib2wnOiAnTkVNL0JUQycsICdiYXNlJzogJ05FTScsICdxdW90ZSc6ICdCVEMnLCAnYmFzZUlkJzogJ25lbScsICdxdW90ZUlkJzogJ2J0YycgfSxcbiAgICAgICAgJ1hSUC9CVEMnOiAgeyAnaWQnOiAneHJwX2J0YycsICdzeW1ib2wnOiAnWFJQL0JUQycsICdiYXNlJzogJ1hSUCcsICdxdW90ZSc6ICdCVEMnLCAnYmFzZUlkJzogJ3hycCcsICdxdW90ZUlkJzogJ2J0YycgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdEdldEluZm8gKCk7XG4gICAgICAgIGxldCBiYWxhbmNlID0gcmVzcG9uc2VbJ3JldHVybiddWydiYWxhbmNlJ107XG4gICAgICAgIGxldCBmcm96ZW4gPSByZXNwb25zZVsncmV0dXJuJ11bJ2JhbGFuY2VfaG9sZCddO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGJhbGFuY2UgfTtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCB0aGlzLmN1cnJlbmNpZXMubGVuZ3RoOyBjKyspIHtcbiAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IHRoaXMuY3VycmVuY2llc1tjXTtcbiAgICAgICAgICAgIGxldCBsb3dlcmNhc2UgPSBjdXJyZW5jeS50b0xvd2VyQ2FzZSAoKTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd1c2VkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAobG93ZXJjYXNlIGluIGJhbGFuY2UpIHtcbiAgICAgICAgICAgICAgICBhY2NvdW50WydmcmVlJ10gPSBwYXJzZUZsb2F0IChiYWxhbmNlW2xvd2VyY2FzZV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGxvd2VyY2FzZSBpbiBmcm96ZW4pIHtcbiAgICAgICAgICAgICAgICBhY2NvdW50Wyd1c2VkJ10gPSBwYXJzZUZsb2F0IChmcm96ZW5bbG93ZXJjYXNlXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhY2NvdW50Wyd0b3RhbCddID0gdGhpcy5zdW0gKGFjY291bnRbJ2ZyZWUnXSwgYWNjb3VudFsndXNlZCddKTtcbiAgICAgICAgICAgIHJlc3VsdFtjdXJyZW5jeV0gPSBhY2NvdW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFBhaXJEZXB0aCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdwYWlyJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdiaWRzJzogW10sXG4gICAgICAgICAgICAnYXNrcyc6IFtdLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHNpZGVzID0geyAnYmlkcyc6ICdidXknLCAnYXNrcyc6ICdzZWxsJyB9O1xuICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzIChzaWRlcyk7XG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwga2V5cy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgbGV0IGtleSA9IGtleXNba107XG4gICAgICAgICAgICBsZXQgc2lkZSA9IHNpZGVzW2tleV07XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAob3JkZXJbMF0pO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBwYXJzZUZsb2F0IChvcmRlclsxXSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W2tleV0ucHVzaCAoWyBwcmljZSwgYW1vdW50IF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgbGV0IHBhaXIgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRQYWlyVGlja2VyICh7XG4gICAgICAgICAgICAncGFpcic6IHBhaXJbJ2lkJ10sXG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgdGlja2VyID0gcmVzcG9uc2VbJ3RpY2tlciddO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gcGFyc2VGbG9hdCAodGlja2VyWydzZXJ2ZXJfdGltZSddKSAqIDEwMDA7XG4gICAgICAgIGxldCBiYXNlVm9sdW1lID0gJ3ZvbF8nICsgcGFpclsnYmFzZUlkJ10udG9Mb3dlckNhc2UgKCk7XG4gICAgICAgIGxldCBxdW90ZVZvbHVtZSA9ICd2b2xfJyArIHBhaXJbJ3F1b3RlSWQnXS50b0xvd2VyQ2FzZSAoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2J1eSddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3NlbGwnXSksXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xhc3QnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyW2Jhc2VWb2x1bWVdKSxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlcltxdW90ZVZvbHVtZV0pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldFBhaXJUcmFkZXMgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAncGFpcic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAncGFpcic6IHBbJ2lkJ10sXG4gICAgICAgICAgICAndHlwZSc6IHNpZGUsXG4gICAgICAgICAgICAncHJpY2UnOiBwcmljZSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IGJhc2UgPSBwWydiYXNlJ10udG9Mb3dlckNhc2UgKCk7XG4gICAgICAgIG9yZGVyW2Jhc2VdID0gYW1vdW50O1xuICAgICAgICBsZXQgcmVzdWx0ID0gdGhpcy5wcml2YXRlUG9zdFRyYWRlICh0aGlzLmV4dGVuZCAob3JkZXIsIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXN1bHQsXG4gICAgICAgICAgICAnaWQnOiByZXN1bHRbJ3JldHVybiddWydvcmRlcl9pZCddLnRvU3RyaW5nICgpLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0Q2FuY2VsT3JkZXIgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnaWQnOiBpZCxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ11bYXBpXTtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgdXJsICs9ICcvJyArIHRoaXMuaW1wbG9kZVBhcmFtcyAocGF0aCwgcGFyYW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLnVybGVuY29kZSAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICAgICAnbWV0aG9kJzogcGF0aCxcbiAgICAgICAgICAgICAgICAnbm9uY2UnOiB0aGlzLm5vbmNlICgpLFxuICAgICAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICAgICAgICAnQ29udGVudC1MZW5ndGgnOiBib2R5Lmxlbmd0aCxcbiAgICAgICAgICAgICAgICAnS2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ1NpZ24nOiB0aGlzLmhtYWMgKHRoaXMuZW5jb2RlIChib2R5KSwgdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSwgJ3NoYTUxMicpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgICAgIGlmICgnZXJyb3InIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyByZXNwb25zZVsnZXJyb3InXSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBiaXRmaW5leCA9IHtcblxuICAgICdpZCc6ICdiaXRmaW5leCcsXG4gICAgJ25hbWUnOiAnQml0ZmluZXgnLFxuICAgICdjb3VudHJpZXMnOiAnVVMnLFxuICAgICd2ZXJzaW9uJzogJ3YxJyxcbiAgICAncmF0ZUxpbWl0JzogMTUwMCxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yNzc2NjI0NC1lMzI4YTUwYy01ZWQyLTExZTctOTQ3Yi0wNDE0MTY1NzliYjMuanBnJyxcbiAgICAgICAgJ2FwaSc6ICdodHRwczovL2FwaS5iaXRmaW5leC5jb20nLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vd3d3LmJpdGZpbmV4LmNvbScsXG4gICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAnaHR0cHM6Ly9iaXRmaW5leC5yZWFkbWUuaW8vdjEvZG9jcycsXG4gICAgICAgICAgICAnaHR0cHM6Ly9iaXRmaW5leC5yZWFkbWUuaW8vdjIvZG9jcycsXG4gICAgICAgICAgICAnaHR0cHM6Ly9naXRodWIuY29tL2JpdGZpbmV4Y29tL2JpdGZpbmV4LWFwaS1ub2RlJyxcbiAgICAgICAgXSxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdib29rL3tzeW1ib2x9JyxcbiAgICAgICAgICAgICAgICAnY2FuZGxlcy97c3ltYm9sfScsXG4gICAgICAgICAgICAgICAgJ2xlbmRib29rL3tjdXJyZW5jeX0nLFxuICAgICAgICAgICAgICAgICdsZW5kcy97Y3VycmVuY3l9JyxcbiAgICAgICAgICAgICAgICAncHVidGlja2VyL3tzeW1ib2x9JyxcbiAgICAgICAgICAgICAgICAnc3RhdHMve3N5bWJvbH0nLFxuICAgICAgICAgICAgICAgICdzeW1ib2xzJyxcbiAgICAgICAgICAgICAgICAnc3ltYm9sc19kZXRhaWxzJyxcbiAgICAgICAgICAgICAgICAndG9kYXknLFxuICAgICAgICAgICAgICAgICd0cmFkZXMve3N5bWJvbH0nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnYWNjb3VudF9pbmZvcycsXG4gICAgICAgICAgICAgICAgJ2JhbGFuY2VzJyxcbiAgICAgICAgICAgICAgICAnYmFza2V0X21hbmFnZScsXG4gICAgICAgICAgICAgICAgJ2NyZWRpdHMnLFxuICAgICAgICAgICAgICAgICdkZXBvc2l0L25ldycsXG4gICAgICAgICAgICAgICAgJ2Z1bmRpbmcvY2xvc2UnLFxuICAgICAgICAgICAgICAgICdoaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAnaGlzdG9yeS9tb3ZlbWVudHMnLFxuICAgICAgICAgICAgICAgICdrZXlfaW5mbycsXG4gICAgICAgICAgICAgICAgJ21hcmdpbl9pbmZvcycsXG4gICAgICAgICAgICAgICAgJ215dHJhZGVzJyxcbiAgICAgICAgICAgICAgICAnb2ZmZXIvY2FuY2VsJyxcbiAgICAgICAgICAgICAgICAnb2ZmZXIvbmV3JyxcbiAgICAgICAgICAgICAgICAnb2ZmZXIvc3RhdHVzJyxcbiAgICAgICAgICAgICAgICAnb2ZmZXJzJyxcbiAgICAgICAgICAgICAgICAnb3JkZXIvY2FuY2VsJyxcbiAgICAgICAgICAgICAgICAnb3JkZXIvY2FuY2VsL2FsbCcsXG4gICAgICAgICAgICAgICAgJ29yZGVyL2NhbmNlbC9tdWx0aScsXG4gICAgICAgICAgICAgICAgJ29yZGVyL2NhbmNlbC9yZXBsYWNlJyxcbiAgICAgICAgICAgICAgICAnb3JkZXIvbmV3JyxcbiAgICAgICAgICAgICAgICAnb3JkZXIvbmV3L211bHRpJyxcbiAgICAgICAgICAgICAgICAnb3JkZXIvc3RhdHVzJyxcbiAgICAgICAgICAgICAgICAnb3JkZXJzJyxcbiAgICAgICAgICAgICAgICAncG9zaXRpb24vY2xhaW0nLFxuICAgICAgICAgICAgICAgICdwb3NpdGlvbnMnLFxuICAgICAgICAgICAgICAgICdzdW1tYXJ5JyxcbiAgICAgICAgICAgICAgICAndGFrZW5fZnVuZHMnLFxuICAgICAgICAgICAgICAgICd0b3RhbF90YWtlbl9mdW5kcycsXG4gICAgICAgICAgICAgICAgJ3RyYW5zZmVyJyxcbiAgICAgICAgICAgICAgICAndW51c2VkX3Rha2VuX2Z1bmRzJyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXcnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hNYXJrZXRzICgpIHtcbiAgICAgICAgbGV0IG1hcmtldHMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFN5bWJvbHNEZXRhaWxzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgbWFya2V0cy5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IG1hcmtldHNbcF07XG4gICAgICAgICAgICBsZXQgaWQgPSBtYXJrZXRbJ3BhaXInXS50b1VwcGVyQ2FzZSAoKTtcbiAgICAgICAgICAgIGxldCBiYXNlSWQgPSBpZC5zbGljZSAoMCwgMyk7XG4gICAgICAgICAgICBsZXQgcXVvdGVJZCA9IGlkLnNsaWNlICgzLCA2KTtcbiAgICAgICAgICAgIGxldCBiYXNlID0gYmFzZUlkO1xuICAgICAgICAgICAgbGV0IHF1b3RlID0gcXVvdGVJZDtcbiAgICAgICAgICAgIC8vIGlzc3VlICM0IEJpdGZpbmV4IG5hbWVzIERhc2ggYXMgRFNILCBpbnN0ZWFkIG9mIERBU0hcbiAgICAgICAgICAgIGlmIChiYXNlID09ICdEU0gnKVxuICAgICAgICAgICAgICAgIGJhc2UgPSAnREFTSCc7XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gYmFzZSArICcvJyArIHF1b3RlO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2ggKHtcbiAgICAgICAgICAgICAgICAnaWQnOiBpZCxcbiAgICAgICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgICAgICdiYXNlJzogYmFzZSxcbiAgICAgICAgICAgICAgICAncXVvdGUnOiBxdW90ZSxcbiAgICAgICAgICAgICAgICAnYmFzZUlkJzogYmFzZUlkLFxuICAgICAgICAgICAgICAgICdxdW90ZUlkJzogcXVvdGVJZCxcbiAgICAgICAgICAgICAgICAnaW5mbyc6IG1hcmtldCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RCYWxhbmNlcyAoKTtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0ge307XG4gICAgICAgIGZvciAobGV0IGIgPSAwOyBiIDwgcmVzcG9uc2UubGVuZ3RoOyBiKyspIHtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0gcmVzcG9uc2VbYl07XG4gICAgICAgICAgICBpZiAoYWNjb3VudFsndHlwZSddID09ICdleGNoYW5nZScpIHtcbiAgICAgICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBhY2NvdW50WydjdXJyZW5jeSddO1xuICAgICAgICAgICAgICAgIC8vIGlzc3VlICM0IEJpdGZpbmV4IG5hbWVzIERhc2ggYXMgRFNILCBpbnN0ZWFkIG9mIERBU0hcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVuY3kgPT0gJ0RTSCcpXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbmN5ID0gJ0RBU0gnO1xuICAgICAgICAgICAgICAgIGxldCB1cHBlcmNhc2UgPSBjdXJyZW5jeS50b1VwcGVyQ2FzZSAoKTtcbiAgICAgICAgICAgICAgICBiYWxhbmNlc1t1cHBlcmNhc2VdID0gYWNjb3VudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IHJlc3BvbnNlIH07XG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgdGhpcy5jdXJyZW5jaWVzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSB0aGlzLmN1cnJlbmNpZXNbY107XG4gICAgICAgICAgICBsZXQgYWNjb3VudCA9IHtcbiAgICAgICAgICAgICAgICAnZnJlZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAndXNlZCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAndG90YWwnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGN1cnJlbmN5IGluIGJhbGFuY2VzKSB7XG4gICAgICAgICAgICAgICAgYWNjb3VudFsnZnJlZSddID0gcGFyc2VGbG9hdCAoYmFsYW5jZXNbY3VycmVuY3ldWydhdmFpbGFibGUnXSk7XG4gICAgICAgICAgICAgICAgYWNjb3VudFsndG90YWwnXSA9IHBhcnNlRmxvYXQgKGJhbGFuY2VzW2N1cnJlbmN5XVsnYW1vdW50J10pO1xuICAgICAgICAgICAgICAgIGFjY291bnRbJ3VzZWQnXSA9IGFjY291bnRbJ3RvdGFsJ10gLSBhY2NvdW50WydmcmVlJ107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRCb29rU3ltYm9sICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ3N5bWJvbCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IFtdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaWRlcyA9IFsgJ2JpZHMnLCAnYXNrcycgXTtcbiAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBzaWRlcy5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1tzXTtcbiAgICAgICAgICAgIGxldCBvcmRlcnMgPSBvcmRlcmJvb2tbc2lkZV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBvcmRlciA9IG9yZGVyc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgcHJpY2UgPSBwYXJzZUZsb2F0IChvcmRlclsncHJpY2UnXSk7XG4gICAgICAgICAgICAgICAgbGV0IGFtb3VudCA9IHBhcnNlRmxvYXQgKG9yZGVyWydhbW91bnQnXSk7XG4gICAgICAgICAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHBhcnNlSW50IChwYXJzZUZsb2F0IChvcmRlclsndGltZXN0YW1wJ10pKTtcbiAgICAgICAgICAgICAgICByZXN1bHRbc2lkZV0ucHVzaCAoWyBwcmljZSwgYW1vdW50LCB0aW1lc3RhbXAgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgdGlja2VyID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRQdWJ0aWNrZXJTeW1ib2wgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHBhcnNlRmxvYXQgKHRpY2tlclsndGltZXN0YW1wJ10pICogMTAwMDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2JpZCddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2FzayddKSxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdF9wcmljZSddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogcGFyc2VGbG9hdCAodGlja2VyWydtaWQnXSksXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndm9sdW1lJ10pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIHBhcnNlVHJhZGUgKHRyYWRlLCBtYXJrZXQpIHtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRyYWRlWyd0aW1lc3RhbXAnXSAqIDEwMDA7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaWQnOiB0cmFkZVsndGlkJ10udG9TdHJpbmcgKCksXG4gICAgICAgICAgICAnaW5mbyc6IHRyYWRlLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdzeW1ib2wnOiBtYXJrZXRbJ3N5bWJvbCddLFxuICAgICAgICAgICAgJ3R5cGUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnc2lkZSc6IHRyYWRlWyd0eXBlJ10sXG4gICAgICAgICAgICAncHJpY2UnOiBwYXJzZUZsb2F0ICh0cmFkZVsncHJpY2UnXSksXG4gICAgICAgICAgICAnYW1vdW50JzogcGFyc2VGbG9hdCAodHJhZGVbJ2Ftb3VudCddKSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG0gPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHRyYWRlcyA9IGF3YWl0IHRoaXMucHVibGljR2V0VHJhZGVzU3ltYm9sICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ3N5bWJvbCc6IG1bJ2lkJ10sXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVRyYWRlcyAodHJhZGVzLCBtKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG9yZGVyID0ge1xuICAgICAgICAgICAgJ3N5bWJvbCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgICAgICAnYW1vdW50JzogYW1vdW50LnRvU3RyaW5nICgpLFxuICAgICAgICAgICAgJ3NpZGUnOiBzaWRlLFxuICAgICAgICAgICAgJ3R5cGUnOiAnZXhjaGFuZ2UgJyArIHR5cGUsXG4gICAgICAgICAgICAnb2Nvb3JkZXInOiBmYWxzZSxcbiAgICAgICAgICAgICdidXlfcHJpY2Vfb2NvJzogMCxcbiAgICAgICAgICAgICdzZWxsX3ByaWNlX29jbyc6IDAsXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlID09ICdtYXJrZXQnKSB7XG4gICAgICAgICAgICBvcmRlclsncHJpY2UnXSA9IHRoaXMubm9uY2UgKCkudG9TdHJpbmcgKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvcmRlclsncHJpY2UnXSA9IHByaWNlLnRvU3RyaW5nICgpO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0T3JkZXJOZXcgKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3VsdCxcbiAgICAgICAgICAgICdpZCc6IHJlc3VsdFsnb3JkZXJfaWQnXS50b1N0cmluZyAoKSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0T3JkZXJDYW5jZWwgKHsgJ29yZGVyX2lkJzogaWQgfSk7XG4gICAgfSxcblxuICAgIG5vbmNlICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCByZXF1ZXN0ID0gJy8nICsgdGhpcy52ZXJzaW9uICsgJy8nICsgdGhpcy5pbXBsb2RlUGFyYW1zIChwYXRoLCBwYXJhbXMpO1xuICAgICAgICBsZXQgcXVlcnkgPSB0aGlzLm9taXQgKHBhcmFtcywgdGhpcy5leHRyYWN0UGFyYW1zIChwYXRoKSk7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgcmVxdWVzdDtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChxdWVyeSkubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG5vbmNlID0gdGhpcy5ub25jZSAoKTtcbiAgICAgICAgICAgIHF1ZXJ5ID0gdGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICAgICAnbm9uY2UnOiBub25jZS50b1N0cmluZyAoKSxcbiAgICAgICAgICAgICAgICAncmVxdWVzdCc6IHJlcXVlc3QsXG4gICAgICAgICAgICB9LCBxdWVyeSk7XG4gICAgICAgICAgICBxdWVyeSA9IHRoaXMuanNvbiAocXVlcnkpO1xuICAgICAgICAgICAgcXVlcnkgPSB0aGlzLmVuY29kZSAocXVlcnkpO1xuICAgICAgICAgICAgbGV0IHBheWxvYWQgPSB0aGlzLnN0cmluZ1RvQmFzZTY0IChxdWVyeSk7XG4gICAgICAgICAgICBsZXQgc2VjcmV0ID0gdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KTtcbiAgICAgICAgICAgIGxldCBzaWduYXR1cmUgPSB0aGlzLmhtYWMgKHBheWxvYWQsIHNlY3JldCwgJ3NoYTM4NCcpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnWC1CRlgtQVBJS0VZJzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ1gtQkZYLVBBWUxPQUQnOiB0aGlzLmRlY29kZSAocGF5bG9hZCksXG4gICAgICAgICAgICAgICAgJ1gtQkZYLVNJR05BVFVSRSc6IHNpZ25hdHVyZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgICAgICBpZiAoJ21lc3NhZ2UnIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBiaXRmbHllciA9IHtcblxuICAgICdpZCc6ICdiaXRmbHllcicsXG4gICAgJ25hbWUnOiAnYml0Rmx5ZXInLFxuICAgICdjb3VudHJpZXMnOiAnSlAnLFxuICAgICd2ZXJzaW9uJzogJ3YxJyxcbiAgICAncmF0ZUxpbWl0JzogNTAwLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI4MDUxNjQyLTU2MTU0MTgyLTY2MGUtMTFlNy05YjBkLTYwNDJkMWU2ZWRkOC5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vYXBpLmJpdGZseWVyLmpwJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL2JpdGZseWVyLmpwJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL2JpdGZseWVyLmpwL0FQSScsXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnZ2V0bWFya2V0cycsICAgIC8vIG9yICdtYXJrZXRzJ1xuICAgICAgICAgICAgICAgICdnZXRib2FyZCcsICAgICAgLy8gb3IgJ2JvYXJkJ1xuICAgICAgICAgICAgICAgICdnZXR0aWNrZXInLCAgICAgLy8gb3IgJ3RpY2tlcidcbiAgICAgICAgICAgICAgICAnZ2V0ZXhlY3V0aW9ucycsIC8vIG9yICdleGVjdXRpb25zJ1xuICAgICAgICAgICAgICAgICdnZXRoZWFsdGgnLFxuICAgICAgICAgICAgICAgICdnZXRjaGF0cycsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAncHJpdmF0ZSc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ2dldHBlcm1pc3Npb25zJyxcbiAgICAgICAgICAgICAgICAnZ2V0YmFsYW5jZScsXG4gICAgICAgICAgICAgICAgJ2dldGNvbGxhdGVyYWwnLFxuICAgICAgICAgICAgICAgICdnZXRjb2xsYXRlcmFsYWNjb3VudHMnLFxuICAgICAgICAgICAgICAgICdnZXRhZGRyZXNzZXMnLFxuICAgICAgICAgICAgICAgICdnZXRjb2luaW5zJyxcbiAgICAgICAgICAgICAgICAnZ2V0Y29pbm91dHMnLFxuICAgICAgICAgICAgICAgICdnZXRiYW5rYWNjb3VudHMnLFxuICAgICAgICAgICAgICAgICdnZXRkZXBvc2l0cycsXG4gICAgICAgICAgICAgICAgJ2dldHdpdGhkcmF3YWxzJyxcbiAgICAgICAgICAgICAgICAnZ2V0Y2hpbGRvcmRlcnMnLFxuICAgICAgICAgICAgICAgICdnZXRwYXJlbnRvcmRlcnMnLFxuICAgICAgICAgICAgICAgICdnZXRwYXJlbnRvcmRlcicsXG4gICAgICAgICAgICAgICAgJ2dldGV4ZWN1dGlvbnMnLFxuICAgICAgICAgICAgICAgICdnZXRwb3NpdGlvbnMnLFxuICAgICAgICAgICAgICAgICdnZXR0cmFkaW5nY29tbWlzc2lvbicsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ3NlbmRjb2luJyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXcnLFxuICAgICAgICAgICAgICAgICdzZW5kY2hpbGRvcmRlcicsXG4gICAgICAgICAgICAgICAgJ2NhbmNlbGNoaWxkb3JkZXInLFxuICAgICAgICAgICAgICAgICdzZW5kcGFyZW50b3JkZXInLFxuICAgICAgICAgICAgICAgICdjYW5jZWxwYXJlbnRvcmRlcicsXG4gICAgICAgICAgICAgICAgJ2NhbmNlbGFsbGNoaWxkb3JkZXJzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoTWFya2V0cyAoKSB7XG4gICAgICAgIGxldCBtYXJrZXRzID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgbWFya2V0cy5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IG1hcmtldHNbcF07XG4gICAgICAgICAgICBsZXQgaWQgPSBtYXJrZXRbJ3Byb2R1Y3RfY29kZSddO1xuICAgICAgICAgICAgbGV0IGN1cnJlbmNpZXMgPSBpZC5zcGxpdCAoJ18nKTtcbiAgICAgICAgICAgIGxldCBiYXNlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgbGV0IHF1b3RlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgbGV0IHN5bWJvbCA9IGlkO1xuICAgICAgICAgICAgbGV0IG51bUN1cnJlbmNpZXMgPSBjdXJyZW5jaWVzLmxlbmd0aDtcbiAgICAgICAgICAgIGlmIChudW1DdXJyZW5jaWVzID09IDIpIHtcbiAgICAgICAgICAgICAgICBiYXNlID0gY3VycmVuY2llc1swXTtcbiAgICAgICAgICAgICAgICBxdW90ZSA9IGN1cnJlbmNpZXNbMV07XG4gICAgICAgICAgICAgICAgc3ltYm9sID0gYmFzZSArICcvJyArIHF1b3RlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0LnB1c2ggKHtcbiAgICAgICAgICAgICAgICAnaWQnOiBpZCxcbiAgICAgICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgICAgICdiYXNlJzogYmFzZSxcbiAgICAgICAgICAgICAgICAncXVvdGUnOiBxdW90ZSxcbiAgICAgICAgICAgICAgICAnaW5mbyc6IG1hcmtldCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZUdldEJhbGFuY2UgKCk7XG4gICAgICAgIGxldCBiYWxhbmNlcyA9IHt9O1xuICAgICAgICBmb3IgKGxldCBiID0gMDsgYiA8IHJlc3BvbnNlLmxlbmd0aDsgYisrKSB7XG4gICAgICAgICAgICBsZXQgYWNjb3VudCA9IHJlc3BvbnNlW2JdO1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gYWNjb3VudFsnY3VycmVuY3lfY29kZSddO1xuICAgICAgICAgICAgYmFsYW5jZXNbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IHJlc3BvbnNlIH07XG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgdGhpcy5jdXJyZW5jaWVzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSB0aGlzLmN1cnJlbmNpZXNbY107XG4gICAgICAgICAgICBsZXQgYWNjb3VudCA9IHtcbiAgICAgICAgICAgICAgICAnZnJlZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAndXNlZCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAndG90YWwnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGN1cnJlbmN5IGluIGJhbGFuY2VzKSB7XG4gICAgICAgICAgICAgICAgYWNjb3VudFsndG90YWwnXSA9IGJhbGFuY2VzW2N1cnJlbmN5XVsnYW1vdW50J107XG4gICAgICAgICAgICAgICAgYWNjb3VudFsnZnJlZSddID0gYmFsYW5jZXNbY3VycmVuY3ldWydhdmFpbGFibGUnXTtcbiAgICAgICAgICAgICAgICBhY2NvdW50Wyd1c2VkJ10gPSBhY2NvdW50Wyd0b3RhbCddIC0gYWNjb3VudFsnZnJlZSddO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IGF3YWl0IHRoaXMucHVibGljR2V0Qm9hcmQgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAncHJvZHVjdF9jb2RlJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdiaWRzJzogW10sXG4gICAgICAgICAgICAnYXNrcyc6IFtdLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHNpZGVzID0gWyAnYmlkcycsICdhc2tzJyBdO1xuICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IHNpZGVzLmxlbmd0aDsgcysrKSB7XG4gICAgICAgICAgICBsZXQgc2lkZSA9IHNpZGVzW3NdO1xuICAgICAgICAgICAgbGV0IG9yZGVycyA9IG9yZGVyYm9va1tzaWRlXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9yZGVyID0gb3JkZXJzW2ldO1xuICAgICAgICAgICAgICAgIGxldCBwcmljZSA9IHBhcnNlRmxvYXQgKG9yZGVyWydwcmljZSddKTtcbiAgICAgICAgICAgICAgICBsZXQgYW1vdW50ID0gcGFyc2VGbG9hdCAob3JkZXJbJ3NpemUnXSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3NpZGVdLnB1c2ggKFsgcHJpY2UsIGFtb3VudCBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCB0aWNrZXIgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFRpY2tlciAoe1xuICAgICAgICAgICAgJ3Byb2R1Y3RfY29kZSc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5wYXJzZTg2MDEgKHRpY2tlclsndGltZXN0YW1wJ10pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xvdyc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2Jlc3RfYmlkJ10pLFxuICAgICAgICAgICAgJ2Fzayc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYmVzdF9hc2snXSksXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2x0cCddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbHVtZV9ieV9wcm9kdWN0J10pLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWyd2b2x1bWUnXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0RXhlY3V0aW9ucyAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdwcm9kdWN0X2NvZGUnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG9yZGVyID0ge1xuICAgICAgICAgICAgJ3Byb2R1Y3RfY29kZSc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgICAgICAnY2hpbGRfb3JkZXJfdHlwZSc6IHR5cGUudG9VcHBlckNhc2UgKCksXG4gICAgICAgICAgICAnc2lkZSc6IHNpZGUudG9VcHBlckNhc2UgKCksXG4gICAgICAgICAgICAncHJpY2UnOiBwcmljZSxcbiAgICAgICAgICAgICdzaXplJzogYW1vdW50LFxuICAgICAgICB9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdFNlbmRjaGlsZG9yZGVyICh0aGlzLmV4dGVuZCAob3JkZXIsIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXN1bHQsXG4gICAgICAgICAgICAnaWQnOiByZXN1bHRbJ2NoaWxkX29yZGVyX2FjY2VwdGFuY2VfaWQnXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdENhbmNlbGNoaWxkb3JkZXIgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAncGFyZW50X29yZGVyX2lkJzogaWQsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCByZXF1ZXN0ID0gJy8nICsgdGhpcy52ZXJzaW9uICsgJy8nO1xuICAgICAgICBpZiAoYXBpID09ICdwcml2YXRlJylcbiAgICAgICAgICAgIHJlcXVlc3QgKz0gJ21lLyc7XG4gICAgICAgIHJlcXVlc3QgKz0gcGF0aDtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ10gKyByZXF1ZXN0O1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHBhcmFtcykubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocGFyYW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCkudG9TdHJpbmcgKCk7XG4gICAgICAgICAgICBib2R5ID0gdGhpcy5qc29uIChwYXJhbXMpO1xuICAgICAgICAgICAgbGV0IGF1dGggPSBbIG5vbmNlLCBtZXRob2QsIHJlcXVlc3QsIGJvZHkgXS5qb2luICgnJyk7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdBQ0NFU1MtS0VZJzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ0FDQ0VTUy1USU1FU1RBTVAnOiBub25jZSxcbiAgICAgICAgICAgICAgICAnQUNDRVNTLVNJR04nOiB0aGlzLmhtYWMgKHRoaXMuZW5jb2RlIChhdXRoKSwgdGhpcy5zZWNyZXQpLFxuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgYml0bGlzaCA9IHtcblxuICAgICdpZCc6ICdiaXRsaXNoJyxcbiAgICAnbmFtZSc6ICdiaXRsaXNoJyxcbiAgICAnY291bnRyaWVzJzogWyAnR0InLCAnRVUnLCAnUlUnIF0sXG4gICAgJ3JhdGVMaW1pdCc6IDE1MDAsXG4gICAgJ3ZlcnNpb24nOiAndjEnLFxuICAgICdoYXNGZXRjaFRpY2tlcnMnOiB0cnVlLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2Mjc1LWRjZmM2YzMwLTVlZDMtMTFlNy04MzlkLTAwYTg0NjM4NWQwYi5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vYml0bGlzaC5jb20vYXBpJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL2JpdGxpc2guY29tJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL2JpdGxpc2guY29tL2FwaScsXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnaW5zdHJ1bWVudHMnLFxuICAgICAgICAgICAgICAgICdvaGxjdicsXG4gICAgICAgICAgICAgICAgJ3BhaXJzJyxcbiAgICAgICAgICAgICAgICAndGlja2VycycsXG4gICAgICAgICAgICAgICAgJ3RyYWRlc19kZXB0aCcsXG4gICAgICAgICAgICAgICAgJ3RyYWRlc19oaXN0b3J5JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2FjY291bnRzX29wZXJhdGlvbnMnLFxuICAgICAgICAgICAgICAgICdiYWxhbmNlJyxcbiAgICAgICAgICAgICAgICAnY2FuY2VsX3RyYWRlJyxcbiAgICAgICAgICAgICAgICAnY2FuY2VsX3RyYWRlc19ieV9pZHMnLFxuICAgICAgICAgICAgICAgICdjYW5jZWxfYWxsX3RyYWRlcycsXG4gICAgICAgICAgICAgICAgJ2NyZWF0ZV9iY29kZScsXG4gICAgICAgICAgICAgICAgJ2NyZWF0ZV90ZW1wbGF0ZV93YWxsZXQnLFxuICAgICAgICAgICAgICAgICdjcmVhdGVfdHJhZGUnLFxuICAgICAgICAgICAgICAgICdkZXBvc2l0JyxcbiAgICAgICAgICAgICAgICAnbGlzdF9hY2NvdW50c19vcGVyYXRpb25zX2Zyb21fdHMnLFxuICAgICAgICAgICAgICAgICdsaXN0X2FjdGl2ZV90cmFkZXMnLFxuICAgICAgICAgICAgICAgICdsaXN0X2Jjb2RlcycsXG4gICAgICAgICAgICAgICAgJ2xpc3RfbXlfbWF0Y2hlc19mcm9tX3RzJyxcbiAgICAgICAgICAgICAgICAnbGlzdF9teV90cmFkZXMnLFxuICAgICAgICAgICAgICAgICdsaXN0X215X3RyYWRzX2Zyb21fdHMnLFxuICAgICAgICAgICAgICAgICdsaXN0X3BheW1lbnRfbWV0aG9kcycsXG4gICAgICAgICAgICAgICAgJ2xpc3RfcGF5bWVudHMnLFxuICAgICAgICAgICAgICAgICdyZWRlZW1fY29kZScsXG4gICAgICAgICAgICAgICAgJ3Jlc2lnbicsXG4gICAgICAgICAgICAgICAgJ3NpZ25pbicsXG4gICAgICAgICAgICAgICAgJ3NpZ25vdXQnLFxuICAgICAgICAgICAgICAgICd0cmFkZV9kZXRhaWxzJyxcbiAgICAgICAgICAgICAgICAndHJhZGVfb3B0aW9ucycsXG4gICAgICAgICAgICAgICAgJ3dpdGhkcmF3JyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXdfYnlfaWQnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hNYXJrZXRzICgpIHtcbiAgICAgICAgbGV0IG1hcmtldHMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFBhaXJzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMgKG1hcmtldHMpO1xuICAgICAgICBmb3IgKGxldCBwID0gMDsgcCA8IGtleXMubGVuZ3RoOyBwKyspIHtcbiAgICAgICAgICAgIGxldCBtYXJrZXQgPSBtYXJrZXRzW2tleXNbcF1dO1xuICAgICAgICAgICAgbGV0IGlkID0gbWFya2V0WydpZCddO1xuICAgICAgICAgICAgbGV0IHN5bWJvbCA9IG1hcmtldFsnbmFtZSddO1xuICAgICAgICAgICAgbGV0IFsgYmFzZSwgcXVvdGUgXSA9IHN5bWJvbC5zcGxpdCAoJy8nKTtcbiAgICAgICAgICAgIC8vIGlzc3VlICM0IGJpdGxpc2ggbmFtZXMgRGFzaCBhcyBEU0gsIGluc3RlYWQgb2YgREFTSFxuICAgICAgICAgICAgaWYgKGJhc2UgPT0gJ0RTSCcpXG4gICAgICAgICAgICAgICAgYmFzZSA9ICdEQVNIJztcbiAgICAgICAgICAgIHN5bWJvbCA9IGJhc2UgKyAnLycgKyBxdW90ZTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoICh7XG4gICAgICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgICAgICAgICAgJ3N5bWJvbCc6IHN5bWJvbCxcbiAgICAgICAgICAgICAgICAnYmFzZSc6IGJhc2UsXG4gICAgICAgICAgICAgICAgJ3F1b3RlJzogcXVvdGUsXG4gICAgICAgICAgICAgICAgJ2luZm8nOiBtYXJrZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBwYXJzZVRpY2tlciAodGlja2VyLCBtYXJrZXQpIHtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydtYXgnXSksXG4gICAgICAgICAgICAnbG93JzogcGFyc2VGbG9hdCAodGlja2VyWydtaW4nXSksXG4gICAgICAgICAgICAnYmlkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Fzayc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2ZpcnN0J10pLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xhc3QnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VycyAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCB0aWNrZXJzID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRUaWNrZXJzICgpO1xuICAgICAgICBsZXQgaWRzID0gT2JqZWN0LmtleXMgKHRpY2tlcnMpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge307XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgaWQgPSBpZHNbaV07XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gdGhpcy5tYXJrZXRzX2J5X2lkW2lkXTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBtYXJrZXRbJ3N5bWJvbCddO1xuICAgICAgICAgICAgbGV0IHRpY2tlciA9IHRpY2tlcnNbaWRdO1xuICAgICAgICAgICAgcmVzdWx0W3N5bWJvbF0gPSB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIG1hcmtldCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgdGlja2VycyA9IGF3YWl0IHRoaXMucHVibGljR2V0VGlja2VycyAoKTtcbiAgICAgICAgbGV0IHRpY2tlciA9IHRpY2tlcnNbcFsnaWQnXV07XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIHApO1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRUcmFkZXNEZXB0aCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdwYWlyX2lkJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSBwYXJzZUludCAocGFyc2VJbnQgKG9yZGVyYm9va1snbGFzdCddKSAvIDEwMDApO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSB7ICdiaWRzJzogJ2JpZCcsICdhc2tzJzogJ2FzaycgfTtcbiAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyAoc2lkZXMpO1xuICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGtleXMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgIGxldCBrZXkgPSBrZXlzW2tdO1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1trZXldO1xuICAgICAgICAgICAgbGV0IG9yZGVycyA9IG9yZGVyYm9va1tzaWRlXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9yZGVyID0gb3JkZXJzW2ldO1xuICAgICAgICAgICAgICAgIGxldCBwcmljZSA9IHBhcnNlRmxvYXQgKG9yZGVyWydwcmljZSddKTtcbiAgICAgICAgICAgICAgICBsZXQgYW1vdW50ID0gcGFyc2VGbG9hdCAob3JkZXJbJ3ZvbHVtZSddKTtcbiAgICAgICAgICAgICAgICByZXN1bHRba2V5XS5wdXNoIChbIHByaWNlLCBhbW91bnQgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0VHJhZGVzSGlzdG9yeSAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdwYWlyX2lkJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RCYWxhbmNlICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IHJlc3BvbnNlIH07XG4gICAgICAgIGxldCBjdXJyZW5jaWVzID0gT2JqZWN0LmtleXMgKHJlc3BvbnNlKTtcbiAgICAgICAgbGV0IGJhbGFuY2UgPSB7fTtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBjdXJyZW5jaWVzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBjdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSByZXNwb25zZVtjdXJyZW5jeV07XG4gICAgICAgICAgICBjdXJyZW5jeSA9IGN1cnJlbmN5LnRvVXBwZXJDYXNlICgpO1xuICAgICAgICAgICAgLy8gaXNzdWUgIzQgYml0bGlzaCBuYW1lcyBEYXNoIGFzIERTSCwgaW5zdGVhZCBvZiBEQVNIXG4gICAgICAgICAgICBpZiAoY3VycmVuY3kgPT0gJ0RTSCcpXG4gICAgICAgICAgICAgICAgY3VycmVuY3kgPSAnREFTSCc7XG4gICAgICAgICAgICBiYWxhbmNlW2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCB0aGlzLmN1cnJlbmNpZXMubGVuZ3RoOyBjKyspIHtcbiAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IHRoaXMuY3VycmVuY2llc1tjXTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd1c2VkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoY3VycmVuY3kgaW4gYmFsYW5jZSkge1xuICAgICAgICAgICAgICAgIGFjY291bnRbJ2ZyZWUnXSA9IHBhcnNlRmxvYXQgKGJhbGFuY2VbY3VycmVuY3ldWydmdW5kcyddKTtcbiAgICAgICAgICAgICAgICBhY2NvdW50Wyd1c2VkJ10gPSBwYXJzZUZsb2F0IChiYWxhbmNlW2N1cnJlbmN5XVsnaG9sZGVkJ10pO1xuICAgICAgICAgICAgICAgIGFjY291bnRbJ3RvdGFsJ10gPSB0aGlzLnN1bSAoYWNjb3VudFsnZnJlZSddLCBhY2NvdW50Wyd1c2VkJ10pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgc2lnbkluICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJpdmF0ZVBvc3RTaWduaW4gKHtcbiAgICAgICAgICAgICdsb2dpbic6IHRoaXMubG9naW4sXG4gICAgICAgICAgICAncGFzc3dkJzogdGhpcy5wYXNzd29yZCxcbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdwYWlyX2lkJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICdkaXInOiAoc2lkZSA9PSAnYnV5JykgPyAnYmlkJyA6ICdhc2snLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IGFtb3VudCxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHR5cGUgPT0gJ2xpbWl0JylcbiAgICAgICAgICAgIG9yZGVyWydwcmljZSddID0gcHJpY2U7XG4gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0Q3JlYXRlVHJhZGUgKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3VsdCxcbiAgICAgICAgICAgICdpZCc6IHJlc3VsdFsnaWQnXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0Q2FuY2VsVHJhZGUgKHsgJ2lkJzogaWQgfSk7XG4gICAgfSxcblxuICAgIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ10gKyAnLycgKyB0aGlzLnZlcnNpb24gKyAnLycgKyBwYXRoO1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHBhcmFtcykubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocGFyYW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLmpzb24gKHRoaXMuZXh0ZW5kICh7ICd0b2tlbic6IHRoaXMuYXBpS2V5IH0sIHBhcmFtcykpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgYml0bWFya2V0ID0ge1xuXG4gICAgJ2lkJzogJ2JpdG1hcmtldCcsXG4gICAgJ25hbWUnOiAnQml0TWFya2V0JyxcbiAgICAnY291bnRyaWVzJzogWyAnUEwnLCAnRVUnIF0sXG4gICAgJ3JhdGVMaW1pdCc6IDE1MDAsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc3NjcyNTYtYTg1NTUyMDAtNWVmOS0xMWU3LTk2ZmQtNDY5YTY1ZTJiMGJkLmpwZycsXG4gICAgICAgICdhcGknOiB7XG4gICAgICAgICAgICAncHVibGljJzogJ2h0dHBzOi8vd3d3LmJpdG1hcmtldC5uZXQnLFxuICAgICAgICAgICAgJ3ByaXZhdGUnOiAnaHR0cHM6Ly93d3cuYml0bWFya2V0LnBsL2FwaTIvJywgLy8gbGFzdCBzbGFzaCBpcyBjcml0aWNhbFxuICAgICAgICB9LFxuICAgICAgICAnd3d3JzogW1xuICAgICAgICAgICAgJ2h0dHBzOi8vd3d3LmJpdG1hcmtldC5wbCcsXG4gICAgICAgICAgICAnaHR0cHM6Ly93d3cuYml0bWFya2V0Lm5ldCcsXG4gICAgICAgIF0sXG4gICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAnaHR0cHM6Ly93d3cuYml0bWFya2V0Lm5ldC9kb2NzLnBocD9maWxlPWFwaV9wdWJsaWMuaHRtbCcsXG4gICAgICAgICAgICAnaHR0cHM6Ly93d3cuYml0bWFya2V0Lm5ldC9kb2NzLnBocD9maWxlPWFwaV9wcml2YXRlLmh0bWwnLFxuICAgICAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS9iaXRtYXJrZXQtbmV0L2FwaScsXG4gICAgICAgIF0sXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnanNvbi97bWFya2V0fS90aWNrZXInLFxuICAgICAgICAgICAgICAgICdqc29uL3ttYXJrZXR9L29yZGVyYm9vaycsXG4gICAgICAgICAgICAgICAgJ2pzb24ve21hcmtldH0vdHJhZGVzJyxcbiAgICAgICAgICAgICAgICAnanNvbi9jdHJhbnNmZXInLFxuICAgICAgICAgICAgICAgICdncmFwaHMve21hcmtldH0vOTBtJyxcbiAgICAgICAgICAgICAgICAnZ3JhcGhzL3ttYXJrZXR9LzZoJyxcbiAgICAgICAgICAgICAgICAnZ3JhcGhzL3ttYXJrZXR9LzFkJyxcbiAgICAgICAgICAgICAgICAnZ3JhcGhzL3ttYXJrZXR9LzdkJyxcbiAgICAgICAgICAgICAgICAnZ3JhcGhzL3ttYXJrZXR9LzFtJyxcbiAgICAgICAgICAgICAgICAnZ3JhcGhzL3ttYXJrZXR9LzNtJyxcbiAgICAgICAgICAgICAgICAnZ3JhcGhzL3ttYXJrZXR9LzZtJyxcbiAgICAgICAgICAgICAgICAnZ3JhcGhzL3ttYXJrZXR9LzF5JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2luZm8nLFxuICAgICAgICAgICAgICAgICd0cmFkZScsXG4gICAgICAgICAgICAgICAgJ2NhbmNlbCcsXG4gICAgICAgICAgICAgICAgJ29yZGVycycsXG4gICAgICAgICAgICAgICAgJ3RyYWRlcycsXG4gICAgICAgICAgICAgICAgJ2hpc3RvcnknLFxuICAgICAgICAgICAgICAgICd3aXRoZHJhd2FscycsXG4gICAgICAgICAgICAgICAgJ3RyYWRpbmdkZXNrJyxcbiAgICAgICAgICAgICAgICAndHJhZGluZ2Rlc2tTdGF0dXMnLFxuICAgICAgICAgICAgICAgICd0cmFkaW5nZGVza0NvbmZpcm0nLFxuICAgICAgICAgICAgICAgICdjcnlwdG90cmFkaW5nZGVzaycsXG4gICAgICAgICAgICAgICAgJ2NyeXB0b3RyYWRpbmdkZXNrU3RhdHVzJyxcbiAgICAgICAgICAgICAgICAnY3J5cHRvdHJhZGluZ2Rlc2tDb25maXJtJyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXcnLFxuICAgICAgICAgICAgICAgICd3aXRoZHJhd0ZpYXQnLFxuICAgICAgICAgICAgICAgICd3aXRoZHJhd1BMTlBQJyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXdGaWF0RmFzdCcsXG4gICAgICAgICAgICAgICAgJ2RlcG9zaXQnLFxuICAgICAgICAgICAgICAgICd0cmFuc2ZlcicsXG4gICAgICAgICAgICAgICAgJ3RyYW5zZmVycycsXG4gICAgICAgICAgICAgICAgJ21hcmdpbkxpc3QnLFxuICAgICAgICAgICAgICAgICdtYXJnaW5PcGVuJyxcbiAgICAgICAgICAgICAgICAnbWFyZ2luQ2xvc2UnLFxuICAgICAgICAgICAgICAgICdtYXJnaW5DYW5jZWwnLFxuICAgICAgICAgICAgICAgICdtYXJnaW5Nb2RpZnknLFxuICAgICAgICAgICAgICAgICdtYXJnaW5CYWxhbmNlQWRkJyxcbiAgICAgICAgICAgICAgICAnbWFyZ2luQmFsYW5jZVJlbW92ZScsXG4gICAgICAgICAgICAgICAgJ3N3YXBMaXN0JyxcbiAgICAgICAgICAgICAgICAnc3dhcE9wZW4nLFxuICAgICAgICAgICAgICAgICdzd2FwQ2xvc2UnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgICdtYXJrZXRzJzoge1xuICAgICAgICAnQlRDL1BMTic6IHsgJ2lkJzogJ0JUQ1BMTicsICdzeW1ib2wnOiAnQlRDL1BMTicsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdQTE4nIH0sXG4gICAgICAgICdCVEMvRVVSJzogeyAnaWQnOiAnQlRDRVVSJywgJ3N5bWJvbCc6ICdCVEMvRVVSJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ0VVUicgfSxcbiAgICAgICAgJ0xUQy9QTE4nOiB7ICdpZCc6ICdMVENQTE4nLCAnc3ltYm9sJzogJ0xUQy9QTE4nLCAnYmFzZSc6ICdMVEMnLCAncXVvdGUnOiAnUExOJyB9LFxuICAgICAgICAnTFRDL0JUQyc6IHsgJ2lkJzogJ0xUQ0JUQycsICdzeW1ib2wnOiAnTFRDL0JUQycsICdiYXNlJzogJ0xUQycsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdMaXRlTWluZVgvQlRDJzogeyAnaWQnOiAnTGl0ZU1pbmVYQlRDJywgJ3N5bWJvbCc6ICdMaXRlTWluZVgvQlRDJywgJ2Jhc2UnOiAnTGl0ZU1pbmVYJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ1BsblgvQlRDJzogeyAnaWQnOiAnUGxueEJUQycsICdzeW1ib2wnOiAnUGxuWC9CVEMnLCAnYmFzZSc6ICdQbG5YJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdEluZm8gKCk7XG4gICAgICAgIGxldCBkYXRhID0gcmVzcG9uc2VbJ2RhdGEnXTtcbiAgICAgICAgbGV0IGJhbGFuY2UgPSBkYXRhWydiYWxhbmNlcyddO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGRhdGEgfTtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCB0aGlzLmN1cnJlbmNpZXMubGVuZ3RoOyBjKyspIHtcbiAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IHRoaXMuY3VycmVuY2llc1tjXTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd1c2VkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoY3VycmVuY3kgaW4gYmFsYW5jZVsnYXZhaWxhYmxlJ10pXG4gICAgICAgICAgICAgICAgYWNjb3VudFsnZnJlZSddID0gYmFsYW5jZVsnYXZhaWxhYmxlJ11bY3VycmVuY3ldO1xuICAgICAgICAgICAgaWYgKGN1cnJlbmN5IGluIGJhbGFuY2VbJ2Jsb2NrZWQnXSlcbiAgICAgICAgICAgICAgICBhY2NvdW50Wyd1c2VkJ10gPSBiYWxhbmNlWydibG9ja2VkJ11bY3VycmVuY3ldO1xuICAgICAgICAgICAgYWNjb3VudFsndG90YWwnXSA9IHRoaXMuc3VtIChhY2NvdW50WydmcmVlJ10sIGFjY291bnRbJ3VzZWQnXSk7XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRKc29uTWFya2V0T3JkZXJib29rICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ21hcmtldCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IG9yZGVyYm9va1snYmlkcyddLFxuICAgICAgICAgICAgJ2Fza3MnOiBvcmRlcmJvb2tbJ2Fza3MnXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG5cbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBsZXQgdGlja2VyID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRKc29uTWFya2V0VGlja2VyICh7XG4gICAgICAgICAgICAnbWFya2V0JzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2JpZCddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2FzayddKSxcbiAgICAgICAgICAgICd2d2FwJzogcGFyc2VGbG9hdCAodGlja2VyWyd2d2FwJ10pLFxuICAgICAgICAgICAgJ29wZW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdCddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbHVtZSddKSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdGhpcy5wdWJsaWNHZXRKc29uTWFya2V0VHJhZGVzICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ21hcmtldCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0VHJhZGUgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnbWFya2V0JzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICd0eXBlJzogc2lkZSxcbiAgICAgICAgICAgICdhbW91bnQnOiBhbW91bnQsXG4gICAgICAgICAgICAncmF0ZSc6IHByaWNlLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgIH07XG4gICAgICAgIGlmICgnaWQnIGluIHJlc3BvbnNlWydvcmRlciddKVxuICAgICAgICAgICAgcmVzdWx0WydpZCddID0gcmVzcG9uc2VbJ2lkJ107XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdENhbmNlbCAoeyAnaWQnOiBpZCB9KTtcbiAgICB9LFxuXG4gICAgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXVthcGldO1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICB1cmwgKz0gJy8nICsgdGhpcy5pbXBsb2RlUGFyYW1zIChwYXRoICsgJy5qc29uJywgcGFyYW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCk7XG4gICAgICAgICAgICBsZXQgcXVlcnkgPSB0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgICAgICd0b25jZSc6IG5vbmNlLFxuICAgICAgICAgICAgICAgICdtZXRob2QnOiBwYXRoLFxuICAgICAgICAgICAgfSwgcGFyYW1zKTtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQVBJLUtleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgICAgICdBUEktSGFzaCc6IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKGJvZHkpLCB0aGlzLmVuY29kZSAodGhpcy5zZWNyZXQpLCAnc2hhNTEyJyksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgYml0bWV4ID0ge1xuXG4gICAgJ2lkJzogJ2JpdG1leCcsXG4gICAgJ25hbWUnOiAnQml0TUVYJyxcbiAgICAnY291bnRyaWVzJzogJ1NDJywgLy8gU2V5Y2hlbGxlc1xuICAgICd2ZXJzaW9uJzogJ3YxJyxcbiAgICAncmF0ZUxpbWl0JzogMTUwMCxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yNzc2NjMxOS1mNjUzYzZlNi01ZWQ0LTExZTctOTMzZC1mMGJjMzY5OWFlOGYuanBnJyxcbiAgICAgICAgJ2FwaSc6ICdodHRwczovL3d3dy5iaXRtZXguY29tJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy5iaXRtZXguY29tJyxcbiAgICAgICAgJ2RvYyc6IFtcbiAgICAgICAgICAgICdodHRwczovL3d3dy5iaXRtZXguY29tL2FwcC9hcGlPdmVydmlldycsXG4gICAgICAgICAgICAnaHR0cHM6Ly9naXRodWIuY29tL0JpdE1FWC9hcGktY29ubmVjdG9ycy90cmVlL21hc3Rlci9vZmZpY2lhbC1odHRwJyxcbiAgICAgICAgXSxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdhbm5vdW5jZW1lbnQnLFxuICAgICAgICAgICAgICAgICdhbm5vdW5jZW1lbnQvdXJnZW50JyxcbiAgICAgICAgICAgICAgICAnZnVuZGluZycsXG4gICAgICAgICAgICAgICAgJ2luc3RydW1lbnQnLFxuICAgICAgICAgICAgICAgICdpbnN0cnVtZW50L2FjdGl2ZScsXG4gICAgICAgICAgICAgICAgJ2luc3RydW1lbnQvYWN0aXZlQW5kSW5kaWNlcycsXG4gICAgICAgICAgICAgICAgJ2luc3RydW1lbnQvYWN0aXZlSW50ZXJ2YWxzJyxcbiAgICAgICAgICAgICAgICAnaW5zdHJ1bWVudC9jb21wb3NpdGVJbmRleCcsXG4gICAgICAgICAgICAgICAgJ2luc3RydW1lbnQvaW5kaWNlcycsXG4gICAgICAgICAgICAgICAgJ2luc3VyYW5jZScsXG4gICAgICAgICAgICAgICAgJ2xlYWRlcmJvYXJkJyxcbiAgICAgICAgICAgICAgICAnbGlxdWlkYXRpb24nLFxuICAgICAgICAgICAgICAgICdvcmRlckJvb2snLFxuICAgICAgICAgICAgICAgICdvcmRlckJvb2svTDInLFxuICAgICAgICAgICAgICAgICdxdW90ZScsXG4gICAgICAgICAgICAgICAgJ3F1b3RlL2J1Y2tldGVkJyxcbiAgICAgICAgICAgICAgICAnc2NoZW1hJyxcbiAgICAgICAgICAgICAgICAnc2NoZW1hL3dlYnNvY2tldEhlbHAnLFxuICAgICAgICAgICAgICAgICdzZXR0bGVtZW50JyxcbiAgICAgICAgICAgICAgICAnc3RhdHMnLFxuICAgICAgICAgICAgICAgICdzdGF0cy9oaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAndHJhZGUnLFxuICAgICAgICAgICAgICAgICd0cmFkZS9idWNrZXRlZCcsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAncHJpdmF0ZSc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ2FwaUtleScsXG4gICAgICAgICAgICAgICAgJ2NoYXQnLFxuICAgICAgICAgICAgICAgICdjaGF0L2NoYW5uZWxzJyxcbiAgICAgICAgICAgICAgICAnY2hhdC9jb25uZWN0ZWQnLFxuICAgICAgICAgICAgICAgICdleGVjdXRpb24nLFxuICAgICAgICAgICAgICAgICdleGVjdXRpb24vdHJhZGVIaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAnbm90aWZpY2F0aW9uJyxcbiAgICAgICAgICAgICAgICAnb3JkZXInLFxuICAgICAgICAgICAgICAgICdwb3NpdGlvbicsXG4gICAgICAgICAgICAgICAgJ3VzZXInLFxuICAgICAgICAgICAgICAgICd1c2VyL2FmZmlsaWF0ZVN0YXR1cycsXG4gICAgICAgICAgICAgICAgJ3VzZXIvY2hlY2tSZWZlcnJhbENvZGUnLFxuICAgICAgICAgICAgICAgICd1c2VyL2NvbW1pc3Npb24nLFxuICAgICAgICAgICAgICAgICd1c2VyL2RlcG9zaXRBZGRyZXNzJyxcbiAgICAgICAgICAgICAgICAndXNlci9tYXJnaW4nLFxuICAgICAgICAgICAgICAgICd1c2VyL21pbldpdGhkcmF3YWxGZWUnLFxuICAgICAgICAgICAgICAgICd1c2VyL3dhbGxldCcsXG4gICAgICAgICAgICAgICAgJ3VzZXIvd2FsbGV0SGlzdG9yeScsXG4gICAgICAgICAgICAgICAgJ3VzZXIvd2FsbGV0U3VtbWFyeScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2FwaUtleScsXG4gICAgICAgICAgICAgICAgJ2FwaUtleS9kaXNhYmxlJyxcbiAgICAgICAgICAgICAgICAnYXBpS2V5L2VuYWJsZScsXG4gICAgICAgICAgICAgICAgJ2NoYXQnLFxuICAgICAgICAgICAgICAgICdvcmRlcicsXG4gICAgICAgICAgICAgICAgJ29yZGVyL2J1bGsnLFxuICAgICAgICAgICAgICAgICdvcmRlci9jYW5jZWxBbGxBZnRlcicsXG4gICAgICAgICAgICAgICAgJ29yZGVyL2Nsb3NlUG9zaXRpb24nLFxuICAgICAgICAgICAgICAgICdwb3NpdGlvbi9pc29sYXRlJyxcbiAgICAgICAgICAgICAgICAncG9zaXRpb24vbGV2ZXJhZ2UnLFxuICAgICAgICAgICAgICAgICdwb3NpdGlvbi9yaXNrTGltaXQnLFxuICAgICAgICAgICAgICAgICdwb3NpdGlvbi90cmFuc2Zlck1hcmdpbicsXG4gICAgICAgICAgICAgICAgJ3VzZXIvY2FuY2VsV2l0aGRyYXdhbCcsXG4gICAgICAgICAgICAgICAgJ3VzZXIvY29uZmlybUVtYWlsJyxcbiAgICAgICAgICAgICAgICAndXNlci9jb25maXJtRW5hYmxlVEZBJyxcbiAgICAgICAgICAgICAgICAndXNlci9jb25maXJtV2l0aGRyYXdhbCcsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZGlzYWJsZVRGQScsXG4gICAgICAgICAgICAgICAgJ3VzZXIvbG9nb3V0JyxcbiAgICAgICAgICAgICAgICAndXNlci9sb2dvdXRBbGwnLFxuICAgICAgICAgICAgICAgICd1c2VyL3ByZWZlcmVuY2VzJyxcbiAgICAgICAgICAgICAgICAndXNlci9yZXF1ZXN0RW5hYmxlVEZBJyxcbiAgICAgICAgICAgICAgICAndXNlci9yZXF1ZXN0V2l0aGRyYXdhbCcsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ3B1dCc6IFtcbiAgICAgICAgICAgICAgICAnb3JkZXInLFxuICAgICAgICAgICAgICAgICdvcmRlci9idWxrJyxcbiAgICAgICAgICAgICAgICAndXNlcicsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ2RlbGV0ZSc6IFtcbiAgICAgICAgICAgICAgICAnYXBpS2V5JyxcbiAgICAgICAgICAgICAgICAnb3JkZXInLFxuICAgICAgICAgICAgICAgICdvcmRlci9hbGwnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE1hcmtldHMgKCkge1xuICAgICAgICBsZXQgbWFya2V0cyA9IGF3YWl0IHRoaXMucHVibGljR2V0SW5zdHJ1bWVudEFjdGl2ZSAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGxldCBwID0gMDsgcCA8IG1hcmtldHMubGVuZ3RoOyBwKyspIHtcbiAgICAgICAgICAgIGxldCBtYXJrZXQgPSBtYXJrZXRzW3BdO1xuICAgICAgICAgICAgbGV0IGlkID0gbWFya2V0WydzeW1ib2wnXTtcbiAgICAgICAgICAgIGxldCBiYXNlID0gbWFya2V0Wyd1bmRlcmx5aW5nJ107XG4gICAgICAgICAgICBsZXQgcXVvdGUgPSBtYXJrZXRbJ3F1b3RlQ3VycmVuY3knXTtcbiAgICAgICAgICAgIGxldCBpc0Z1dHVyZXNDb250cmFjdCA9IGlkICE9IChiYXNlICsgcXVvdGUpO1xuICAgICAgICAgICAgYmFzZSA9IHRoaXMuY29tbW9uQ3VycmVuY3lDb2RlIChiYXNlKTtcbiAgICAgICAgICAgIHF1b3RlID0gdGhpcy5jb21tb25DdXJyZW5jeUNvZGUgKHF1b3RlKTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBpc0Z1dHVyZXNDb250cmFjdCA/IGlkIDogKGJhc2UgKyAnLycgKyBxdW90ZSk7XG4gICAgICAgICAgICByZXN1bHQucHVzaCAoe1xuICAgICAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICAgICAgICAgICdzeW1ib2wnOiBzeW1ib2wsXG4gICAgICAgICAgICAgICAgJ2Jhc2UnOiBiYXNlLFxuICAgICAgICAgICAgICAgICdxdW90ZSc6IHF1b3RlLFxuICAgICAgICAgICAgICAgICdpbmZvJzogbWFya2V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlR2V0VXNlck1hcmdpbiAoeyAnY3VycmVuY3knOiAnYWxsJyB9KTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiByZXNwb25zZSB9O1xuICAgICAgICBmb3IgKGxldCBiID0gMDsgYiA8IHJlc3BvbnNlLmxlbmd0aDsgYisrKSB7XG4gICAgICAgICAgICBsZXQgYmFsYW5jZSA9IHJlc3BvbnNlW2JdO1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gYmFsYW5jZVsnY3VycmVuY3knXS50b1VwcGVyQ2FzZSAoKTtcbiAgICAgICAgICAgIGN1cnJlbmN5ID0gdGhpcy5jb21tb25DdXJyZW5jeUNvZGUgKGN1cnJlbmN5KTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogYmFsYW5jZVsnYXZhaWxhYmxlTWFyZ2luJ10sXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogYmFsYW5jZVsnYW1vdW50J10sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGN1cnJlbmN5ID09ICdCVEMnKSB7XG4gICAgICAgICAgICAgICAgYWNjb3VudFsnZnJlZSddID0gYWNjb3VudFsnZnJlZSddICogMC4wMDAwMDAwMTtcbiAgICAgICAgICAgICAgICBhY2NvdW50Wyd0b3RhbCddID0gYWNjb3VudFsndG90YWwnXSAqIDAuMDAwMDAwMDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhY2NvdW50Wyd1c2VkJ10gPSBhY2NvdW50Wyd0b3RhbCddIC0gYWNjb3VudFsnZnJlZSddO1xuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IGF3YWl0IHRoaXMucHVibGljR2V0T3JkZXJCb29rTDIgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnc3ltYm9sJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdiaWRzJzogW10sXG4gICAgICAgICAgICAnYXNrcyc6IFtdLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgZm9yIChsZXQgbyA9IDA7IG8gPCBvcmRlcmJvb2subGVuZ3RoOyBvKyspIHtcbiAgICAgICAgICAgIGxldCBvcmRlciA9IG9yZGVyYm9va1tvXTtcbiAgICAgICAgICAgIGxldCBzaWRlID0gKG9yZGVyWydzaWRlJ10gPT0gJ1NlbGwnKSA/ICdhc2tzJyA6ICdiaWRzJztcbiAgICAgICAgICAgIGxldCBhbW91bnQgPSBvcmRlclsnc2l6ZSddO1xuICAgICAgICAgICAgbGV0IHByaWNlID0gb3JkZXJbJ3ByaWNlJ107XG4gICAgICAgICAgICByZXN1bHRbc2lkZV0ucHVzaCAoWyBwcmljZSwgYW1vdW50IF0pO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdFsnYmlkcyddID0gdGhpcy5zb3J0QnkgKHJlc3VsdFsnYmlkcyddLCAwLCB0cnVlKTtcbiAgICAgICAgcmVzdWx0Wydhc2tzJ10gPSB0aGlzLnNvcnRCeSAocmVzdWx0Wydhc2tzJ10sIDApO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXF1ZXN0ID0ge1xuICAgICAgICAgICAgJ3N5bWJvbCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgICAgICAnYmluU2l6ZSc6ICcxZCcsXG4gICAgICAgICAgICAncGFydGlhbCc6IHRydWUsXG4gICAgICAgICAgICAnY291bnQnOiAxLFxuICAgICAgICAgICAgJ3JldmVyc2UnOiB0cnVlLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgcXVvdGVzID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRRdW90ZUJ1Y2tldGVkIChyZXF1ZXN0KTtcbiAgICAgICAgbGV0IHF1b3Rlc0xlbmd0aCA9IHF1b3Rlcy5sZW5ndGg7XG4gICAgICAgIGxldCBxdW90ZSA9IHF1b3Rlc1txdW90ZXNMZW5ndGggLSAxXTtcbiAgICAgICAgbGV0IHRpY2tlcnMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFRyYWRlQnVja2V0ZWQgKHJlcXVlc3QpO1xuICAgICAgICBsZXQgdGlja2VyID0gdGlja2Vyc1swXTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydoaWdoJ10pLFxuICAgICAgICAgICAgJ2xvdyc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbG93J10pLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHF1b3RlWydiaWRQcmljZSddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0IChxdW90ZVsnYXNrUHJpY2UnXSksXG4gICAgICAgICAgICAndndhcCc6IHBhcnNlRmxvYXQgKHRpY2tlclsndndhcCddKSxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogcGFyc2VGbG9hdCAodGlja2VyWydjbG9zZSddKSxcbiAgICAgICAgICAgICdmaXJzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsYXN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaG9tZU5vdGlvbmFsJ10pLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWydmb3JlaWduTm90aW9uYWwnXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0VHJhZGUgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnc3ltYm9sJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdzeW1ib2wnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICAgICAgJ3NpZGUnOiB0aGlzLmNhcGl0YWxpemUgKHNpZGUpLFxuICAgICAgICAgICAgJ29yZGVyUXR5JzogYW1vdW50LFxuICAgICAgICAgICAgJ29yZFR5cGUnOiB0aGlzLmNhcGl0YWxpemUgKHR5cGUpLFxuICAgICAgICB9O1xuICAgICAgICBpZiAodHlwZSA9PSAnbGltaXQnKVxuICAgICAgICAgICAgb3JkZXJbJ3JhdGUnXSA9IHByaWNlO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0T3JkZXIgKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ2lkJzogcmVzcG9uc2VbJ29yZGVySUQnXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVEZWxldGVPcmRlciAoeyAnb3JkZXJJRCc6IGlkIH0pO1xuICAgIH0sXG5cbiAgICByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCBxdWVyeSA9ICcvYXBpLycgKyB0aGlzLnZlcnNpb24gKyAnLycgKyBwYXRoO1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHBhcmFtcykubGVuZ3RoKVxuICAgICAgICAgICAgcXVlcnkgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHBhcmFtcyk7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgcXVlcnk7XG4gICAgICAgIGlmIChhcGkgPT0gJ3ByaXZhdGUnKSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpLnRvU3RyaW5nICgpO1xuICAgICAgICAgICAgaWYgKG1ldGhvZCA9PSAnUE9TVCcpXG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChwYXJhbXMpLmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgYm9keSA9IHRoaXMuanNvbiAocGFyYW1zKTtcbiAgICAgICAgICAgIGxldCByZXF1ZXN0ID0gWyBtZXRob2QsIHF1ZXJ5LCBub25jZSwgYm9keSB8fCAnJ10uam9pbiAoJycpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICdhcGktbm9uY2UnOiBub25jZSxcbiAgICAgICAgICAgICAgICAnYXBpLWtleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgICAgICdhcGktc2lnbmF0dXJlJzogdGhpcy5obWFjICh0aGlzLmVuY29kZSAocmVxdWVzdCksIHRoaXMuZW5jb2RlICh0aGlzLnNlY3JldCkpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGJpdHNvID0ge1xuXG4gICAgJ2lkJzogJ2JpdHNvJyxcbiAgICAnbmFtZSc6ICdCaXRzbycsXG4gICAgJ2NvdW50cmllcyc6ICdNWCcsIC8vIE1leGljb1xuICAgICdyYXRlTGltaXQnOiAyMDAwLCAvLyAzMCByZXF1ZXN0cyBwZXIgbWludXRlXG4gICAgJ3ZlcnNpb24nOiAndjMnLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2MzM1LTcxNWNlN2FhLTVlZDUtMTFlNy04OGE4LTE3M2EyN2JiMzBmZS5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vYXBpLmJpdHNvLmNvbScsXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly9iaXRzby5jb20nLFxuICAgICAgICAnZG9jJzogJ2h0dHBzOi8vYml0c28uY29tL2FwaV9pbmZvJyxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdhdmFpbGFibGVfYm9va3MnLFxuICAgICAgICAgICAgICAgICd0aWNrZXInLFxuICAgICAgICAgICAgICAgICdvcmRlcl9ib29rJyxcbiAgICAgICAgICAgICAgICAndHJhZGVzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnYWNjb3VudF9zdGF0dXMnLFxuICAgICAgICAgICAgICAgICdiYWxhbmNlJyxcbiAgICAgICAgICAgICAgICAnZmVlcycsXG4gICAgICAgICAgICAgICAgJ2Z1bmRpbmdzJyxcbiAgICAgICAgICAgICAgICAnZnVuZGluZ3Mve2ZpZH0nLFxuICAgICAgICAgICAgICAgICdmdW5kaW5nX2Rlc3RpbmF0aW9uJyxcbiAgICAgICAgICAgICAgICAna3ljX2RvY3VtZW50cycsXG4gICAgICAgICAgICAgICAgJ2xlZGdlcicsXG4gICAgICAgICAgICAgICAgJ2xlZGdlci90cmFkZXMnLFxuICAgICAgICAgICAgICAgICdsZWRnZXIvZmVlcycsXG4gICAgICAgICAgICAgICAgJ2xlZGdlci9mdW5kaW5ncycsXG4gICAgICAgICAgICAgICAgJ2xlZGdlci93aXRoZHJhd2FscycsXG4gICAgICAgICAgICAgICAgJ214X2JhbmtfY29kZXMnLFxuICAgICAgICAgICAgICAgICdvcGVuX29yZGVycycsXG4gICAgICAgICAgICAgICAgJ29yZGVyX3RyYWRlcy97b2lkfScsXG4gICAgICAgICAgICAgICAgJ29yZGVycy97b2lkfScsXG4gICAgICAgICAgICAgICAgJ3VzZXJfdHJhZGVzJyxcbiAgICAgICAgICAgICAgICAndXNlcl90cmFkZXMve3RpZH0nLFxuICAgICAgICAgICAgICAgICd3aXRoZHJhd2Fscy8nLFxuICAgICAgICAgICAgICAgICd3aXRoZHJhd2Fscy97d2lkfScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2JpdGNvaW5fd2l0aGRyYXdhbCcsXG4gICAgICAgICAgICAgICAgJ2RlYml0X2NhcmRfd2l0aGRyYXdhbCcsXG4gICAgICAgICAgICAgICAgJ2V0aGVyX3dpdGhkcmF3YWwnLFxuICAgICAgICAgICAgICAgICdvcmRlcnMnLFxuICAgICAgICAgICAgICAgICdwaG9uZV9udW1iZXInLFxuICAgICAgICAgICAgICAgICdwaG9uZV92ZXJpZmljYXRpb24nLFxuICAgICAgICAgICAgICAgICdwaG9uZV93aXRoZHJhd2FsJyxcbiAgICAgICAgICAgICAgICAnc3BlaV93aXRoZHJhd2FsJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAnZGVsZXRlJzogW1xuICAgICAgICAgICAgICAgICdvcmRlcnMve29pZH0nLFxuICAgICAgICAgICAgICAgICdvcmRlcnMvYWxsJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hNYXJrZXRzICgpIHtcbiAgICAgICAgbGV0IG1hcmtldHMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldEF2YWlsYWJsZUJvb2tzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgbWFya2V0c1sncGF5bG9hZCddLmxlbmd0aDsgcCsrKSB7XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gbWFya2V0c1sncGF5bG9hZCddW3BdO1xuICAgICAgICAgICAgbGV0IGlkID0gbWFya2V0Wydib29rJ107XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gaWQudG9VcHBlckNhc2UgKCkucmVwbGFjZSAoJ18nLCAnLycpO1xuICAgICAgICAgICAgbGV0IFsgYmFzZSwgcXVvdGUgXSA9IHN5bWJvbC5zcGxpdCAoJy8nKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoICh7XG4gICAgICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgICAgICAgICAgJ3N5bWJvbCc6IHN5bWJvbCxcbiAgICAgICAgICAgICAgICAnYmFzZSc6IGJhc2UsXG4gICAgICAgICAgICAgICAgJ3F1b3RlJzogcXVvdGUsXG4gICAgICAgICAgICAgICAgJ2luZm8nOiBtYXJrZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVHZXRCYWxhbmNlICgpO1xuICAgICAgICBsZXQgYmFsYW5jZXMgPSByZXNwb25zZVsncGF5bG9hZCddWydiYWxhbmNlcyddO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IHJlc3BvbnNlIH07XG4gICAgICAgIGZvciAobGV0IGIgPSAwOyBiIDwgYmFsYW5jZXMubGVuZ3RoOyBiKyspIHtcbiAgICAgICAgICAgIGxldCBiYWxhbmNlID0gYmFsYW5jZXNbYl07XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBiYWxhbmNlWydjdXJyZW5jeSddLnRvVXBwZXJDYXNlICgpO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiBwYXJzZUZsb2F0IChiYWxhbmNlWydhdmFpbGFibGUnXSksXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiBwYXJzZUZsb2F0IChiYWxhbmNlWydsb2NrZWQnXSksXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogcGFyc2VGbG9hdCAoYmFsYW5jZVsndG90YWwnXSksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRPcmRlckJvb2sgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnYm9vayc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgb3JkZXJib29rID0gcmVzcG9uc2VbJ3BheWxvYWQnXTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMucGFyc2U4NjAxIChvcmRlcmJvb2tbJ3VwZGF0ZWRfYXQnXSk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IFtdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaWRlcyA9IFsgJ2JpZHMnLCAnYXNrcycgXTtcbiAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBzaWRlcy5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1tzXTtcbiAgICAgICAgICAgIGxldCBvcmRlcnMgPSBvcmRlcmJvb2tbc2lkZV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBvcmRlciA9IG9yZGVyc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgcHJpY2UgPSBwYXJzZUZsb2F0IChvcmRlclsncHJpY2UnXSk7XG4gICAgICAgICAgICAgICAgbGV0IGFtb3VudCA9IHBhcnNlRmxvYXQgKG9yZGVyWydhbW91bnQnXSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3NpZGVdLnB1c2ggKFsgcHJpY2UsIGFtb3VudCBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRUaWNrZXIgKHtcbiAgICAgICAgICAgICdib29rJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aWNrZXIgPSByZXNwb25zZVsncGF5bG9hZCddO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5wYXJzZTg2MDEgKHRpY2tlclsnY3JlYXRlZF9hdCddKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2JpZCddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2FzayddKSxcbiAgICAgICAgICAgICd2d2FwJzogcGFyc2VGbG9hdCAodGlja2VyWyd2d2FwJ10pLFxuICAgICAgICAgICAgJ29wZW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbHVtZSddKSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wdWJsaWNHZXRUcmFkZXMgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnYm9vayc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAnYm9vayc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgICAgICAnc2lkZSc6IHNpZGUsXG4gICAgICAgICAgICAndHlwZSc6IHR5cGUsXG4gICAgICAgICAgICAnbWFqb3InOiBhbW91bnQsXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlID09ICdsaW1pdCcpXG4gICAgICAgICAgICBvcmRlclsncHJpY2UnXSA9IHByaWNlO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0T3JkZXJzICh0aGlzLmV4dGVuZCAob3JkZXIsIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXNwb25zZSxcbiAgICAgICAgICAgICdpZCc6IHJlc3BvbnNlWydwYXlsb2FkJ11bJ29pZCddLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJpdmF0ZURlbGV0ZU9yZGVycyAoeyAnb2lkJzogaWQgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gJy8nICsgdGhpcy52ZXJzaW9uICsgJy8nICsgdGhpcy5pbXBsb2RlUGFyYW1zIChwYXRoLCBwYXJhbXMpO1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArIHF1ZXJ5O1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHBhcmFtcykubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocGFyYW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyAocGFyYW1zKS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgYm9keSA9IHRoaXMuanNvbiAocGFyYW1zKTtcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCkudG9TdHJpbmcgKCk7XG4gICAgICAgICAgICBsZXQgcmVxdWVzdCA9IFsgbm9uY2UsIG1ldGhvZCwgcXVlcnksIGJvZHkgfHwgJycgXS5qb2luICgnJyk7XG4gICAgICAgICAgICBsZXQgc2lnbmF0dXJlID0gdGhpcy5obWFjICh0aGlzLmVuY29kZSAocmVxdWVzdCksIHRoaXMuZW5jb2RlICh0aGlzLnNlY3JldCkpO1xuICAgICAgICAgICAgbGV0IGF1dGggPSB0aGlzLmFwaUtleSArICc6JyArIG5vbmNlICsgJzonICsgc2lnbmF0dXJlO1xuICAgICAgICAgICAgaGVhZGVycyA9IHsgJ0F1dGhvcml6YXRpb24nOiBcIkJpdHNvIFwiICsgYXV0aCB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdzdWNjZXNzJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIGlmIChyZXNwb25zZVsnc3VjY2VzcyddKVxuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgYml0c3RhbXAgPSB7XG5cbiAgICAnaWQnOiAnYml0c3RhbXAnLFxuICAgICduYW1lJzogJ0JpdHN0YW1wJyxcbiAgICAnY291bnRyaWVzJzogJ0dCJyxcbiAgICAncmF0ZUxpbWl0JzogMTAwMCxcbiAgICAndmVyc2lvbic6ICd2MicsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc3ODYzNzctOGM4YWI1N2UtNWZlOS0xMWU3LThlYTQtMmIwNWI2YmNjZWVjLmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly93d3cuYml0c3RhbXAubmV0L2FwaScsXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly93d3cuYml0c3RhbXAubmV0JyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL3d3dy5iaXRzdGFtcC5uZXQvYXBpJyxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdvcmRlcl9ib29rL3tpZH0vJyxcbiAgICAgICAgICAgICAgICAndGlja2VyX2hvdXIve2lkfS8nLFxuICAgICAgICAgICAgICAgICd0aWNrZXIve2lkfS8nLFxuICAgICAgICAgICAgICAgICd0cmFuc2FjdGlvbnMve2lkfS8nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnYmFsYW5jZS8nLFxuICAgICAgICAgICAgICAgICdiYWxhbmNlL3tpZH0vJyxcbiAgICAgICAgICAgICAgICAnYnV5L3tpZH0vJyxcbiAgICAgICAgICAgICAgICAnYnV5L21hcmtldC97aWR9LycsXG4gICAgICAgICAgICAgICAgJ2NhbmNlbF9vcmRlci8nLFxuICAgICAgICAgICAgICAgICdsaXF1aWRhdGlvbl9hZGRyZXNzL2luZm8vJyxcbiAgICAgICAgICAgICAgICAnbGlxdWlkYXRpb25fYWRkcmVzcy9uZXcvJyxcbiAgICAgICAgICAgICAgICAnb3Blbl9vcmRlcnMvYWxsLycsXG4gICAgICAgICAgICAgICAgJ29wZW5fb3JkZXJzL3tpZH0vJyxcbiAgICAgICAgICAgICAgICAnc2VsbC97aWR9LycsXG4gICAgICAgICAgICAgICAgJ3NlbGwvbWFya2V0L3tpZH0vJyxcbiAgICAgICAgICAgICAgICAndHJhbnNmZXItZnJvbS1tYWluLycsXG4gICAgICAgICAgICAgICAgJ3RyYW5zZmVyLXRvLW1haW4vJyxcbiAgICAgICAgICAgICAgICAndXNlcl90cmFuc2FjdGlvbnMvJyxcbiAgICAgICAgICAgICAgICAndXNlcl90cmFuc2FjdGlvbnMve2lkfS8nLFxuICAgICAgICAgICAgICAgICd3aXRoZHJhd2FsL2NhbmNlbC8nLFxuICAgICAgICAgICAgICAgICd3aXRoZHJhd2FsL29wZW4vJyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXdhbC9zdGF0dXMvJyxcbiAgICAgICAgICAgICAgICAneHJwX2FkZHJlc3MvJyxcbiAgICAgICAgICAgICAgICAneHJwX3dpdGhkcmF3YWwvJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9VU0QnOiB7ICdpZCc6ICdidGN1c2QnLCAnc3ltYm9sJzogJ0JUQy9VU0QnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnVVNEJyB9LFxuICAgICAgICAnQlRDL0VVUic6IHsgJ2lkJzogJ2J0Y2V1cicsICdzeW1ib2wnOiAnQlRDL0VVUicsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdFVVInIH0sXG4gICAgICAgICdFVVIvVVNEJzogeyAnaWQnOiAnZXVydXNkJywgJ3N5bWJvbCc6ICdFVVIvVVNEJywgJ2Jhc2UnOiAnRVVSJywgJ3F1b3RlJzogJ1VTRCcgfSxcbiAgICAgICAgJ1hSUC9VU0QnOiB7ICdpZCc6ICd4cnB1c2QnLCAnc3ltYm9sJzogJ1hSUC9VU0QnLCAnYmFzZSc6ICdYUlAnLCAncXVvdGUnOiAnVVNEJyB9LFxuICAgICAgICAnWFJQL0VVUic6IHsgJ2lkJzogJ3hycGV1cicsICdzeW1ib2wnOiAnWFJQL0VVUicsICdiYXNlJzogJ1hSUCcsICdxdW90ZSc6ICdFVVInIH0sXG4gICAgICAgICdYUlAvQlRDJzogeyAnaWQnOiAneHJwYnRjJywgJ3N5bWJvbCc6ICdYUlAvQlRDJywgJ2Jhc2UnOiAnWFJQJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ0xUQy9VU0QnOiB7ICdpZCc6ICdsdGN1c2QnLCAnc3ltYm9sJzogJ0xUQy9VU0QnLCAnYmFzZSc6ICdMVEMnLCAncXVvdGUnOiAnVVNEJyB9LFxuICAgICAgICAnTFRDL0VVUic6IHsgJ2lkJzogJ2x0Y2V1cicsICdzeW1ib2wnOiAnTFRDL0VVUicsICdiYXNlJzogJ0xUQycsICdxdW90ZSc6ICdFVVInIH0sXG4gICAgICAgICdMVEMvQlRDJzogeyAnaWQnOiAnbHRjYnRjJywgJ3N5bWJvbCc6ICdMVEMvQlRDJywgJ2Jhc2UnOiAnTFRDJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ0VUSC9VU0QnOiB7ICdpZCc6ICdldGh1c2QnLCAnc3ltYm9sJzogJ0VUSC9VU0QnLCAnYmFzZSc6ICdFVEgnLCAncXVvdGUnOiAnVVNEJyB9LFxuICAgICAgICAnRVRIL0VVUic6IHsgJ2lkJzogJ2V0aGV1cicsICdzeW1ib2wnOiAnRVRIL0VVUicsICdiYXNlJzogJ0VUSCcsICdxdW90ZSc6ICdFVVInIH0sXG4gICAgICAgICdFVEgvQlRDJzogeyAnaWQnOiAnZXRoYnRjJywgJ3N5bWJvbCc6ICdFVEgvQlRDJywgJ2Jhc2UnOiAnRVRIJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IGF3YWl0IHRoaXMucHVibGljR2V0T3JkZXJCb29rSWQgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnaWQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHBhcnNlSW50IChvcmRlcmJvb2tbJ3RpbWVzdGFtcCddKSAqIDEwMDA7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IFtdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaWRlcyA9IFsgJ2JpZHMnLCAnYXNrcycgXTtcbiAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBzaWRlcy5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1tzXTtcbiAgICAgICAgICAgIGxldCBvcmRlcnMgPSBvcmRlcmJvb2tbc2lkZV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBvcmRlciA9IG9yZGVyc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgcHJpY2UgPSBwYXJzZUZsb2F0IChvcmRlclswXSk7XG4gICAgICAgICAgICAgICAgbGV0IGFtb3VudCA9IHBhcnNlRmxvYXQgKG9yZGVyWzFdKTtcbiAgICAgICAgICAgICAgICByZXN1bHRbc2lkZV0ucHVzaCAoWyBwcmljZSwgYW1vdW50IF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgbGV0IHRpY2tlciA9IGF3YWl0IHRoaXMucHVibGljR2V0VGlja2VySWQgKHtcbiAgICAgICAgICAgICdpZCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gcGFyc2VJbnQgKHRpY2tlclsndGltZXN0YW1wJ10pICogMTAwMDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2JpZCddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2FzayddKSxcbiAgICAgICAgICAgICd2d2FwJzogcGFyc2VGbG9hdCAodGlja2VyWyd2d2FwJ10pLFxuICAgICAgICAgICAgJ29wZW4nOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ29wZW4nXSksXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdCddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbHVtZSddKSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBwYXJzZVRyYWRlICh0cmFkZSwgbWFya2V0KSB7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSBwYXJzZUludCAodHJhZGVbJ2RhdGUnXSk7XG4gICAgICAgIGxldCBzaWRlID0gKHRyYWRlWyd0eXBlJ10gPT0gMCkgPyAnYnV5JyA6ICdzZWxsJztcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpZCc6IHRyYWRlWyd0aWQnXS50b1N0cmluZyAoKSxcbiAgICAgICAgICAgICdpbmZvJzogdHJhZGUsXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ3N5bWJvbCc6IG1hcmtldFsnc3ltYm9sJ10sXG4gICAgICAgICAgICAndHlwZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdzaWRlJzogc2lkZSxcbiAgICAgICAgICAgICdwcmljZSc6IHBhcnNlRmxvYXQgKHRyYWRlWydwcmljZSddKSxcbiAgICAgICAgICAgICdhbW91bnQnOiBwYXJzZUZsb2F0ICh0cmFkZVsnYW1vdW50J10pLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgbSA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFRyYW5zYWN0aW9uc0lkICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2lkJzogbVsnaWQnXSxcbiAgICAgICAgICAgICd0aW1lJzogJ21pbnV0ZScsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVRyYWRlcyAocmVzcG9uc2UsIG0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBsZXQgYmFsYW5jZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RCYWxhbmNlICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGJhbGFuY2UgfTtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCB0aGlzLmN1cnJlbmNpZXMubGVuZ3RoOyBjKyspIHtcbiAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IHRoaXMuY3VycmVuY2llc1tjXTtcbiAgICAgICAgICAgIGxldCBsb3dlcmNhc2UgPSBjdXJyZW5jeS50b0xvd2VyQ2FzZSAoKTtcbiAgICAgICAgICAgIGxldCB0b3RhbCA9IGxvd2VyY2FzZSArICdfYmFsYW5jZSc7XG4gICAgICAgICAgICBsZXQgZnJlZSA9IGxvd2VyY2FzZSArICdfYXZhaWxhYmxlJztcbiAgICAgICAgICAgIGxldCB1c2VkID0gbG93ZXJjYXNlICsgJ19yZXNlcnZlZCc7XG4gICAgICAgICAgICBsZXQgYWNjb3VudCA9IHtcbiAgICAgICAgICAgICAgICAnZnJlZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAndXNlZCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAndG90YWwnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGZyZWUgaW4gYmFsYW5jZSlcbiAgICAgICAgICAgICAgICBhY2NvdW50WydmcmVlJ10gPSBwYXJzZUZsb2F0IChiYWxhbmNlW2ZyZWVdKTtcbiAgICAgICAgICAgIGlmICh1c2VkIGluIGJhbGFuY2UpXG4gICAgICAgICAgICAgICAgYWNjb3VudFsndXNlZCddID0gcGFyc2VGbG9hdCAoYmFsYW5jZVt1c2VkXSk7XG4gICAgICAgICAgICBpZiAodG90YWwgaW4gYmFsYW5jZSlcbiAgICAgICAgICAgICAgICBhY2NvdW50Wyd0b3RhbCddID0gcGFyc2VGbG9hdCAoYmFsYW5jZVt0b3RhbF0pO1xuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IG1ldGhvZCA9ICdwcml2YXRlUG9zdCcgKyB0aGlzLmNhcGl0YWxpemUgKHNpZGUpO1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAnaWQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IGFtb3VudCxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHR5cGUgPT0gJ21hcmtldCcpXG4gICAgICAgICAgICBtZXRob2QgKz0gJ01hcmtldCc7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIG9yZGVyWydwcmljZSddID0gcHJpY2U7XG4gICAgICAgIG1ldGhvZCArPSAnSWQnO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzW21ldGhvZF0gKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ2lkJzogcmVzcG9uc2VbJ2lkJ10sXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdENhbmNlbE9yZGVyICh7ICdpZCc6IGlkIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgJy8nICsgdGhpcy52ZXJzaW9uICsgJy8nICsgdGhpcy5pbXBsb2RlUGFyYW1zIChwYXRoLCBwYXJhbXMpO1xuICAgICAgICBsZXQgcXVlcnkgPSB0aGlzLm9taXQgKHBhcmFtcywgdGhpcy5leHRyYWN0UGFyYW1zIChwYXRoKSk7XG4gICAgICAgIGlmIChhcGkgPT0gJ3B1YmxpYycpIHtcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyAocXVlcnkpLmxlbmd0aClcbiAgICAgICAgICAgICAgICB1cmwgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHF1ZXJ5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghdGhpcy51aWQpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEF1dGhlbnRpY2F0aW9uRXJyb3IgKHRoaXMuaWQgKyAnIHJlcXVpcmVzIGAnICsgdGhpcy5pZCArICcudWlkYCBwcm9wZXJ0eSBmb3IgYXV0aGVudGljYXRpb24nKTtcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCkudG9TdHJpbmcgKCk7XG4gICAgICAgICAgICBsZXQgYXV0aCA9IG5vbmNlICsgdGhpcy51aWQgKyB0aGlzLmFwaUtleTtcbiAgICAgICAgICAgIGxldCBzaWduYXR1cmUgPSB0aGlzLmVuY29kZSAodGhpcy5obWFjICh0aGlzLmVuY29kZSAoYXV0aCksIHRoaXMuZW5jb2RlICh0aGlzLnNlY3JldCkpKTtcbiAgICAgICAgICAgIHF1ZXJ5ID0gdGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICAgICAna2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ3NpZ25hdHVyZSc6IHNpZ25hdHVyZS50b1VwcGVyQ2FzZSAoKSxcbiAgICAgICAgICAgICAgICAnbm9uY2UnOiBub25jZSxcbiAgICAgICAgICAgIH0sIHF1ZXJ5KTtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtTGVuZ3RoJzogYm9keS5sZW5ndGgudG9TdHJpbmcgKCksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdzdGF0dXMnIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlWydzdGF0dXMnXSA9PSAnZXJyb3InKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgYml0dHJleCA9IHtcblxuICAgICdpZCc6ICdiaXR0cmV4JyxcbiAgICAnbmFtZSc6ICdCaXR0cmV4JyxcbiAgICAnY291bnRyaWVzJzogJ1VTJyxcbiAgICAndmVyc2lvbic6ICd2MS4xJyxcbiAgICAncmF0ZUxpbWl0JzogMTUwMCxcbiAgICAnaGFzRmV0Y2hUaWNrZXJzJzogdHJ1ZSxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yNzc2NjM1Mi1jZjBiM2MyNi01ZWQ1LTExZTctODJiNy1mMzgyNmI3YTk3ZDguanBnJyxcbiAgICAgICAgJ2FwaSc6ICdodHRwczovL2JpdHRyZXguY29tL2FwaScsXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly9iaXR0cmV4LmNvbScsXG4gICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAnaHR0cHM6Ly9iaXR0cmV4LmNvbS9Ib21lL0FwaScsXG4gICAgICAgICAgICAnaHR0cHM6Ly93d3cubnBtanMub3JnL3BhY2thZ2Uvbm9kZS5iaXR0cmV4LmFwaScsXG4gICAgICAgIF0sXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnY3VycmVuY2llcycsXG4gICAgICAgICAgICAgICAgJ21hcmtldGhpc3RvcnknLFxuICAgICAgICAgICAgICAgICdtYXJrZXRzJyxcbiAgICAgICAgICAgICAgICAnbWFya2V0c3VtbWFyaWVzJyxcbiAgICAgICAgICAgICAgICAnbWFya2V0c3VtbWFyeScsXG4gICAgICAgICAgICAgICAgJ29yZGVyYm9vaycsXG4gICAgICAgICAgICAgICAgJ3RpY2tlcicsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAnYWNjb3VudCc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ2JhbGFuY2UnLFxuICAgICAgICAgICAgICAgICdiYWxhbmNlcycsXG4gICAgICAgICAgICAgICAgJ2RlcG9zaXRhZGRyZXNzJyxcbiAgICAgICAgICAgICAgICAnZGVwb3NpdGhpc3RvcnknLFxuICAgICAgICAgICAgICAgICdvcmRlcicsXG4gICAgICAgICAgICAgICAgJ29yZGVyaGlzdG9yeScsXG4gICAgICAgICAgICAgICAgJ3dpdGhkcmF3YWxoaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXcnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ21hcmtldCc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ2J1eWxpbWl0JyxcbiAgICAgICAgICAgICAgICAnYnV5bWFya2V0JyxcbiAgICAgICAgICAgICAgICAnY2FuY2VsJyxcbiAgICAgICAgICAgICAgICAnb3Blbm9yZGVycycsXG4gICAgICAgICAgICAgICAgJ3NlbGxsaW1pdCcsXG4gICAgICAgICAgICAgICAgJ3NlbGxtYXJrZXQnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hNYXJrZXRzICgpIHtcbiAgICAgICAgbGV0IG1hcmtldHMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgcCA9IDA7IHAgPCBtYXJrZXRzWydyZXN1bHQnXS5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IG1hcmtldHNbJ3Jlc3VsdCddW3BdO1xuICAgICAgICAgICAgbGV0IGlkID0gbWFya2V0WydNYXJrZXROYW1lJ107XG4gICAgICAgICAgICBsZXQgYmFzZSA9IG1hcmtldFsnTWFya2V0Q3VycmVuY3knXTtcbiAgICAgICAgICAgIGxldCBxdW90ZSA9IG1hcmtldFsnQmFzZUN1cnJlbmN5J107XG4gICAgICAgICAgICBiYXNlID0gdGhpcy5jb21tb25DdXJyZW5jeUNvZGUgKGJhc2UpO1xuICAgICAgICAgICAgcXVvdGUgPSB0aGlzLmNvbW1vbkN1cnJlbmN5Q29kZSAocXVvdGUpO1xuICAgICAgICAgICAgbGV0IHN5bWJvbCA9IGJhc2UgKyAnLycgKyBxdW90ZTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoICh7XG4gICAgICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgICAgICAgICAgJ3N5bWJvbCc6IHN5bWJvbCxcbiAgICAgICAgICAgICAgICAnYmFzZSc6IGJhc2UsXG4gICAgICAgICAgICAgICAgJ3F1b3RlJzogcXVvdGUsXG4gICAgICAgICAgICAgICAgJ2luZm8nOiBtYXJrZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmFjY291bnRHZXRCYWxhbmNlcyAoKTtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gcmVzcG9uc2VbJ3Jlc3VsdCddO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGJhbGFuY2VzIH07XG4gICAgICAgIGxldCBpbmRleGVkID0gdGhpcy5pbmRleEJ5IChiYWxhbmNlcywgJ0N1cnJlbmN5Jyk7XG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgdGhpcy5jdXJyZW5jaWVzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSB0aGlzLmN1cnJlbmNpZXNbY107XG4gICAgICAgICAgICBsZXQgYWNjb3VudCA9IHtcbiAgICAgICAgICAgICAgICAnZnJlZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAndXNlZCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAndG90YWwnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGN1cnJlbmN5IGluIGluZGV4ZWQpIHtcbiAgICAgICAgICAgICAgICBsZXQgYmFsYW5jZSA9IGluZGV4ZWRbY3VycmVuY3ldO1xuICAgICAgICAgICAgICAgIGFjY291bnRbJ2ZyZWUnXSA9IGJhbGFuY2VbJ0F2YWlsYWJsZSddO1xuICAgICAgICAgICAgICAgIGFjY291bnRbJ3VzZWQnXSA9IGJhbGFuY2VbJ0JhbGFuY2UnXSAtIGJhbGFuY2VbJ0F2YWlsYWJsZSddO1xuICAgICAgICAgICAgICAgIGFjY291bnRbJ3RvdGFsJ10gPSBiYWxhbmNlWydCYWxhbmNlJ107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBwYXJzZUJpZEFzayAoYmlkYXNrKSB7XG4gICAgICAgIGxldCBwcmljZSA9IHBhcnNlRmxvYXQgKGJpZGFza1snUmF0ZSddKTtcbiAgICAgICAgbGV0IGFtb3VudCA9IHBhcnNlRmxvYXQgKGJpZGFza1snUXVhbnRpdHknXSk7XG4gICAgICAgIHJldHVybiBbIHByaWNlLCBhbW91bnQgXTtcbiAgICB9LFxuXG4gICAgcGFyc2VCaWRBc2tzIChiaWRhc2tzKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiaWRhc2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCAodGhpcy5wYXJzZUJpZEFzayAoYmlkYXNrc1tpXSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0T3JkZXJib29rICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ21hcmtldCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgICAgICAndHlwZSc6ICdib3RoJyxcbiAgICAgICAgICAgICdkZXB0aCc6IDUwLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IHJlc3BvbnNlWydyZXN1bHQnXTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSB7ICdiaWRzJzogJ2J1eScsICdhc2tzJzogJ3NlbGwnIH07XG4gICAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMgKHNpZGVzKTtcbiAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBrZXlzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICBsZXQga2V5ID0ga2V5c1trXTtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNba2V5XTtcbiAgICAgICAgICAgIHJlc3VsdFtrZXldID0gdGhpcy5wYXJzZUJpZEFza3MgKG9yZGVyYm9va1tzaWRlXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgcGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KSB7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLnBhcnNlODYwMSAodGlja2VyWydUaW1lU3RhbXAnXSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ0hpZ2gnXSksXG4gICAgICAgICAgICAnbG93JzogcGFyc2VGbG9hdCAodGlja2VyWydMb3cnXSksXG4gICAgICAgICAgICAnYmlkJzogcGFyc2VGbG9hdCAodGlja2VyWydCaWQnXSksXG4gICAgICAgICAgICAnYXNrJzogcGFyc2VGbG9hdCAodGlja2VyWydBc2snXSksXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ0xhc3QnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWydCYXNlVm9sdW1lJ10pLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWydWb2x1bWUnXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXJzICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRNYXJrZXRzdW1tYXJpZXMgKCk7XG4gICAgICAgIGxldCB0aWNrZXJzID0gcmVzcG9uc2VbJ3Jlc3VsdCddO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge307XG4gICAgICAgIGZvciAobGV0IHQgPSAwOyB0IDwgdGlja2Vycy5sZW5ndGg7IHQrKykge1xuICAgICAgICAgICAgbGV0IHRpY2tlciA9IHRpY2tlcnNbdF07XG4gICAgICAgICAgICBsZXQgaWQgPSB0aWNrZXJbJ01hcmtldE5hbWUnXTtcbiAgICAgICAgICAgIGxldCBtYXJrZXQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gaWQ7XG4gICAgICAgICAgICBpZiAoaWQgaW4gdGhpcy5tYXJrZXRzX2J5X2lkKSB7XG4gICAgICAgICAgICAgICAgbWFya2V0ID0gdGhpcy5tYXJrZXRzX2J5X2lkW2lkXTtcbiAgICAgICAgICAgICAgICBzeW1ib2wgPSBtYXJrZXRbJ3N5bWJvbCddO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsZXQgWyBxdW90ZSwgYmFzZSBdID0gaWQuc3BsaXQgKCctJyk7XG4gICAgICAgICAgICAgICAgYmFzZSA9IHRoaXMuY29tbW9uQ3VycmVuY3lDb2RlIChiYXNlKTtcbiAgICAgICAgICAgICAgICBxdW90ZSA9IHRoaXMuY29tbW9uQ3VycmVuY3lDb2RlIChxdW90ZSk7XG4gICAgICAgICAgICAgICAgc3ltYm9sID0gYmFzZSArICcvJyArIHF1b3RlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0W3N5bWJvbF0gPSB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIG1hcmtldCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgbSA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldE1hcmtldHN1bW1hcnkgKHtcbiAgICAgICAgICAgICdtYXJrZXQnOiBtWydpZCddLFxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IHRpY2tlciA9IHJlc3BvbnNlWydyZXN1bHQnXVswXTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VUaWNrZXIgKHRpY2tlciwgbSk7XG4gICAgfSxcblxuICAgIHBhcnNlVHJhZGUgKHRyYWRlLCBtYXJrZXQgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMucGFyc2U4NjAxICh0cmFkZVsnVGltZVN0YW1wJ10pO1xuICAgICAgICBsZXQgc2lkZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHRyYWRlWydPcmRlclR5cGUnXSA9PSAnQlVZJykge1xuICAgICAgICAgICAgc2lkZSA9ICdidXknO1xuICAgICAgICB9IGVsc2UgaWYgKHRyYWRlWydPcmRlclR5cGUnXSA9PSAnU0VMTCcpIHtcbiAgICAgICAgICAgIHNpZGUgPSAnc2VsbCc7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHR5cGUgPSB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaWQnOiB0cmFkZVsnSWQnXS50b1N0cmluZyAoKSxcbiAgICAgICAgICAgICdpbmZvJzogdHJhZGUsXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ3N5bWJvbCc6IG1hcmtldFsnc3ltYm9sJ10sXG4gICAgICAgICAgICAndHlwZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdzaWRlJzogc2lkZSxcbiAgICAgICAgICAgICdwcmljZSc6IHRyYWRlWydQcmljZSddLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IHRyYWRlWydRdWFudGl0eSddLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgbSA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldE1hcmtldGhpc3RvcnkgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnbWFya2V0JzogbVsnaWQnXSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlVHJhZGVzIChyZXNwb25zZVsncmVzdWx0J10sIG0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE15T3Blbk9yZGVycyAobWFya2V0ID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgbSA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0UmV0dXJuT3Blbk9yZGVycyAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdjdXJyZW5jeVBhaXInOiBtWydpZCddLFxuICAgICAgICB9KSk7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlT3JkZXJzIChyZXNwb25zZVsncmVzdWx0J10sIG1hcmtldCk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBtZXRob2QgPSAnbWFya2V0R2V0JyArIHRoaXMuY2FwaXRhbGl6ZSAoc2lkZSkgKyB0eXBlO1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAnbWFya2V0JzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICdxdWFudGl0eSc6IGFtb3VudCxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHR5cGUgPT0gJ2xpbWl0JylcbiAgICAgICAgICAgIG9yZGVyWydyYXRlJ10gPSBwcmljZTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpc1ttZXRob2RdICh0aGlzLmV4dGVuZCAob3JkZXIsIHBhcmFtcykpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXNwb25zZSxcbiAgICAgICAgICAgICdpZCc6IHJlc3BvbnNlWydyZXN1bHQnXVsndXVpZCddLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFya2V0R2V0Q2FuY2VsICh7ICd1dWlkJzogaWQgfSk7XG4gICAgfSxcblxuICAgIHBhcnNlT3JkZXIgKG9yZGVyLCBtYXJrZXQgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHNpZGUgPSAob3JkZXJbJ1R5cGUnXSA9PSAnTElNSVRfQlVZJykgPyAnYnV5JyA6ICdzZWxsJztcbiAgICAgICAgbGV0IG9wZW4gPSBvcmRlclsnSXNPcGVuJ107XG4gICAgICAgIGxldCBjYW5jZWxlZCA9IG9yZGVyWydDYW5jZWxJbml0aWF0ZWQnXTtcbiAgICAgICAgbGV0IHN0YXR1cyA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKG9wZW4pIHtcbiAgICAgICAgICAgIHN0YXR1cyA9ICdvcGVuJztcbiAgICAgICAgfSBlbHNlIGlmIChjYW5jZWxlZCkge1xuICAgICAgICAgICAgc3RhdHVzID0gJ2NhbmNlbGVkJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0YXR1cyA9ICdjbG9zZWQnO1xuICAgICAgICB9XG4gICAgICAgIGxldCBzeW1ib2wgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChtYXJrZXQpIHtcbiAgICAgICAgICAgIHN5bWJvbCA9IG1hcmtldFsnc3ltYm9sJ107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgZXhjaGFuZ2UgPSBvcmRlclsnRXhjaGFuZ2UnXTtcbiAgICAgICAgICAgIGlmIChleGNoYW5nZSBpbiB0aGlzLm1hcmtldHNfYnlfaWQpIHtcbiAgICAgICAgICAgICAgICBtYXJrZXQgPSB0aGlzLm1hcmtldHNfYnlfaWRbZXhjaGFuZ2VdO1xuICAgICAgICAgICAgICAgIHN5bWJvbCA9IFsnc3ltYm9sJ107XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMucGFyc2U4NjAxIChvcmRlclsnT3BlbmVkJ10pO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2luZm8nOiBvcmRlcixcbiAgICAgICAgICAgICdpZCc6IG9yZGVyWydPcmRlclV1aWQnXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgJ3R5cGUnOiAnbGltaXQnLFxuICAgICAgICAgICAgJ3NpZGUnOiBzaWRlLFxuICAgICAgICAgICAgJ3ByaWNlJzogb3JkZXJbJ1ByaWNlUGVyVW5pdCddLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IG9yZGVyWydRdWFudGl0eSddLFxuICAgICAgICAgICAgJ3JlbWFpbmluZyc6IG9yZGVyWydRdWFudGl0eVJlbWFpbmluZyddLFxuICAgICAgICAgICAgJ3N0YXR1cyc6IHN0YXR1cyxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlciAoaWQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5hY2NvdW50R2V0T3JkZXIgKHsgJ3V1aWQnOiBpZCB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VPcmRlciAocmVzcG9uc2VbJ3Jlc3VsdCddKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArICcvJyArIHRoaXMudmVyc2lvbiArICcvJztcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgdXJsICs9IGFwaSArICcvJyArIG1ldGhvZC50b0xvd2VyQ2FzZSAoKSArIHBhdGg7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHBhcmFtcykubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocGFyYW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCk7XG4gICAgICAgICAgICB1cmwgKz0gYXBpICsgJy8nO1xuICAgICAgICAgICAgaWYgKCgoYXBpID09ICdhY2NvdW50JykgJiYgKHBhdGggIT0gJ3dpdGhkcmF3JykpIHx8IChwYXRoID09ICdvcGVub3JkZXJzJykpXG4gICAgICAgICAgICAgICAgdXJsICs9IG1ldGhvZC50b0xvd2VyQ2FzZSAoKTtcbiAgICAgICAgICAgIHVybCArPSBwYXRoICsgJz8nICsgdGhpcy51cmxlbmNvZGUgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAgICAgJ25vbmNlJzogbm9uY2UsXG4gICAgICAgICAgICAgICAgJ2FwaWtleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgICAgICBsZXQgc2lnbmF0dXJlID0gdGhpcy5obWFjICh0aGlzLmVuY29kZSAodXJsKSwgdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSwgJ3NoYTUxMicpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHsgJ2FwaXNpZ24nOiBzaWduYXR1cmUgfTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgICAgIGlmICgnc3VjY2VzcycgaW4gcmVzcG9uc2UpXG4gICAgICAgICAgICBpZiAocmVzcG9uc2VbJ3N1Y2Nlc3MnXSlcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGJsaW5rdHJhZGUgPSB7XG5cbiAgICAnaWQnOiAnYmxpbmt0cmFkZScsXG4gICAgJ25hbWUnOiAnQmxpbmtUcmFkZScsXG4gICAgJ2NvdW50cmllcyc6IFsgJ1VTJywgJ1ZFJywgJ1ZOJywgJ0JSJywgJ1BLJywgJ0NMJyBdLFxuICAgICdyYXRlTGltaXQnOiAxMDAwLFxuICAgICd2ZXJzaW9uJzogJ3YxJyxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yNzk5MDk2OC03NWQ5Yzg4NC02NDcwLTExZTctOTA3My00Njc1NmM4ZTdlOGMuanBnJyxcbiAgICAgICAgJ2FwaSc6IHtcbiAgICAgICAgICAgICdwdWJsaWMnOiAnaHR0cHM6Ly9hcGkuYmxpbmt0cmFkZS5jb20vYXBpJyxcbiAgICAgICAgICAgICdwcml2YXRlJzogJ2h0dHBzOi8vYXBpLmJsaW5rdHJhZGUuY29tL3RhcGknLFxuICAgICAgICB9LFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vYmxpbmt0cmFkZS5jb20nLFxuICAgICAgICAnZG9jJzogJ2h0dHBzOi8vYmxpbmt0cmFkZS5jb20vZG9jcycsXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAne2N1cnJlbmN5fS90aWNrZXInLCAgICAvLyA/Y3J5cHRvX2N1cnJlbmN5PUJUQ1xuICAgICAgICAgICAgICAgICd7Y3VycmVuY3l9L29yZGVyYm9vaycsIC8vID9jcnlwdG9fY3VycmVuY3k9QlRDXG4gICAgICAgICAgICAgICAgJ3tjdXJyZW5jeX0vdHJhZGVzJywgICAgLy8gP2NyeXB0b19jdXJyZW5jeT1CVEMmc2luY2U9PFRJTUVTVEFNUD4mbGltaXQ9PE5VTUJFUj5cbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ0QnLCAgIC8vIG9yZGVyXG4gICAgICAgICAgICAgICAgJ0YnLCAgIC8vIGNhbmNlbCBvcmRlclxuICAgICAgICAgICAgICAgICdVMicsICAvLyBiYWxhbmNlXG4gICAgICAgICAgICAgICAgJ1U0JywgIC8vIG15IG9yZGVyc1xuICAgICAgICAgICAgICAgICdVNicsICAvLyB3aXRoZHJhd1xuICAgICAgICAgICAgICAgICdVMTgnLCAvLyBkZXBvc2l0XG4gICAgICAgICAgICAgICAgJ1UyNCcsIC8vIGNvbmZpcm0gd2l0aGRyYXdhbFxuICAgICAgICAgICAgICAgICdVMjYnLCAvLyBsaXN0IHdpdGhkcmF3YWxzXG4gICAgICAgICAgICAgICAgJ1UzMCcsIC8vIGxpc3QgZGVwb3NpdHNcbiAgICAgICAgICAgICAgICAnVTM0JywgLy8gbGVkZ2VyXG4gICAgICAgICAgICAgICAgJ1U3MCcsIC8vIGNhbmNlbCB3aXRoZHJhd2FsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgJ21hcmtldHMnOiB7XG4gICAgICAgICdCVEMvVkVGJzogeyAnaWQnOiAnQlRDVkVGJywgJ3N5bWJvbCc6ICdCVEMvVkVGJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ1ZFRicsICdicm9rZXJJZCc6IDEsICdicm9rZXInOiAnU3VyQml0Y29pbicgfSxcbiAgICAgICAgJ0JUQy9WTkQnOiB7ICdpZCc6ICdCVENWTkQnLCAnc3ltYm9sJzogJ0JUQy9WTkQnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnVk5EJywgJ2Jyb2tlcklkJzogMywgJ2Jyb2tlcic6ICdWQlRDJyB9LFxuICAgICAgICAnQlRDL0JSTCc6IHsgJ2lkJzogJ0JUQ0JSTCcsICdzeW1ib2wnOiAnQlRDL0JSTCcsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdCUkwnLCAnYnJva2VySWQnOiA0LCAnYnJva2VyJzogJ0ZveEJpdCcgfSxcbiAgICAgICAgJ0JUQy9QS1InOiB7ICdpZCc6ICdCVENQS1InLCAnc3ltYm9sJzogJ0JUQy9QS1InLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnUEtSJywgJ2Jyb2tlcklkJzogOCwgJ2Jyb2tlcic6ICdVcmR1Qml0JyB9LFxuICAgICAgICAnQlRDL0NMUCc6IHsgJ2lkJzogJ0JUQ0NMUCcsICdzeW1ib2wnOiAnQlRDL0NMUCcsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdDTFAnLCAnYnJva2VySWQnOiA5LCAnYnJva2VyJzogJ0NoaWxlQml0JyB9LFxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdFUyICh7XG4gICAgICAgICAgICAnQmFsYW5jZVJlcUlEJzogdGhpcy5ub25jZSAoKSxcbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSBhd2FpdCB0aGlzLnB1YmxpY0dldEN1cnJlbmN5T3JkZXJib29rICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2N1cnJlbmN5JzogcFsncXVvdGUnXSxcbiAgICAgICAgICAgICdjcnlwdG9fY3VycmVuY3knOiBwWydiYXNlJ10sXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IFtdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaWRlcyA9IFsgJ2JpZHMnLCAnYXNrcycgXTtcbiAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBzaWRlcy5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1tzXTtcbiAgICAgICAgICAgIGxldCBvcmRlcnMgPSBvcmRlcmJvb2tbc2lkZV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBvcmRlciA9IG9yZGVyc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgcHJpY2UgPSBwYXJzZUZsb2F0IChvcmRlclswXSk7XG4gICAgICAgICAgICAgICAgbGV0IGFtb3VudCA9IHBhcnNlRmxvYXQgKG9yZGVyWzFdKTtcbiAgICAgICAgICAgICAgICByZXN1bHRbc2lkZV0ucHVzaCAoWyBwcmljZSwgYW1vdW50IF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHRpY2tlciA9IGF3YWl0IHRoaXMucHVibGljR2V0Q3VycmVuY3lUaWNrZXIgKHtcbiAgICAgICAgICAgICdjdXJyZW5jeSc6IHBbJ3F1b3RlJ10sXG4gICAgICAgICAgICAnY3J5cHRvX2N1cnJlbmN5JzogcFsnYmFzZSddLFxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgbG93ZXJjYXNlUXVvdGUgPSBwWydxdW90ZSddLnRvTG93ZXJDYXNlICgpO1xuICAgICAgICBsZXQgcXVvdGVWb2x1bWUgPSAndm9sXycgKyBsb3dlcmNhc2VRdW90ZTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2J1eSddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3NlbGwnXSksXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xhc3QnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWyd2b2wnXSksXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbcXVvdGVWb2x1bWVdKSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICByZXR1cm4gdGhpcy5wdWJsaWNHZXRDdXJyZW5jeVRyYWRlcyAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdjdXJyZW5jeSc6IHBbJ3F1b3RlJ10sXG4gICAgICAgICAgICAnY3J5cHRvX2N1cnJlbmN5JzogcFsnYmFzZSddLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgaWYgKHR5cGUgPT0gJ21hcmtldCcpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgYWxsb3dzIGxpbWl0IG9yZGVycyBvbmx5Jyk7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdDbE9yZElEJzogdGhpcy5ub25jZSAoKSxcbiAgICAgICAgICAgICdTeW1ib2wnOiBwWydpZCddLFxuICAgICAgICAgICAgJ1NpZGUnOiB0aGlzLmNhcGl0YWxpemUgKHNpZGUpLFxuICAgICAgICAgICAgJ09yZFR5cGUnOiAyLFxuICAgICAgICAgICAgJ1ByaWNlJzogcHJpY2UsXG4gICAgICAgICAgICAnT3JkZXJRdHknOiBhbW91bnQsXG4gICAgICAgICAgICAnQnJva2VySUQnOiBwWydicm9rZXJJZCddLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0RCAodGhpcy5leHRlbmQgKG9yZGVyLCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnT3JkZXJJRCddLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0RiAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdDbE9yZElEJzogaWQsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddW2FwaV0gKyAnLycgKyB0aGlzLnZlcnNpb24gKyAnLycgKyB0aGlzLmltcGxvZGVQYXJhbXMgKHBhdGgsIHBhcmFtcyk7XG4gICAgICAgIGxldCBxdWVyeSA9IHRoaXMub21pdCAocGFyYW1zLCB0aGlzLmV4dHJhY3RQYXJhbXMgKHBhdGgpKTtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChxdWVyeSkubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG5vbmNlID0gdGhpcy5ub25jZSAoKS50b1N0cmluZyAoKTtcbiAgICAgICAgICAgIGxldCByZXF1ZXN0ID0gdGhpcy5leHRlbmQgKHsgJ01zZ1R5cGUnOiBwYXRoIH0sIHF1ZXJ5KTtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLmpzb24gKHJlcXVlc3QpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQVBJS2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ05vbmNlJzogbm9uY2UsXG4gICAgICAgICAgICAgICAgJ1NpZ25hdHVyZSc6IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKG5vbmNlKSwgdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSksXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBibDNwID0ge1xuXG4gICAgJ2lkJzogJ2JsM3AnLFxuICAgICduYW1lJzogJ0JMM1AnLFxuICAgICdjb3VudHJpZXMnOiBbICdOTCcsICdFVScgXSwgLy8gTmV0aGVybGFuZHMsIEVVXG4gICAgJ3JhdGVMaW1pdCc6IDEwMDAsXG4gICAgJ3ZlcnNpb24nOiAnMScsXG4gICAgJ2NvbW1lbnQnOiAnQW4gZXhjaGFuZ2UgbWFya2V0IGJ5IEJpdG9uaWNOTCcsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjg1MDE3NTItNjBjMjFiODItNmZlYi0xMWU3LTgxOGItMDU1ZWU2ZDBlNzU0LmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly9hcGkuYmwzcC5ldScsXG4gICAgICAgICd3d3cnOiBbXG4gICAgICAgICAgICAnaHR0cHM6Ly9ibDNwLmV1JyxcbiAgICAgICAgICAgICdodHRwczovL2JpdG9uaWMubmwnLFxuICAgICAgICBdLFxuICAgICAgICAnZG9jJzogW1xuICAgICAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS9CaXRvbmljTkwvYmwzcC1hcGkvdHJlZS9tYXN0ZXIvZG9jcycsXG4gICAgICAgICAgICAnaHR0cHM6Ly9ibDNwLmV1L2FwaScsXG4gICAgICAgICAgICAnaHR0cHM6Ly9iaXRvbmljLm5sL2VuL2FwaScsXG4gICAgICAgIF0sXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAne21hcmtldH0vdGlja2VyJyxcbiAgICAgICAgICAgICAgICAne21hcmtldH0vb3JkZXJib29rJyxcbiAgICAgICAgICAgICAgICAne21hcmtldH0vdHJhZGVzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ3ttYXJrZXR9L21vbmV5L2RlcHRoL2Z1bGwnLFxuICAgICAgICAgICAgICAgICd7bWFya2V0fS9tb25leS9vcmRlci9hZGQnLFxuICAgICAgICAgICAgICAgICd7bWFya2V0fS9tb25leS9vcmRlci9jYW5jZWwnLFxuICAgICAgICAgICAgICAgICd7bWFya2V0fS9tb25leS9vcmRlci9yZXN1bHQnLFxuICAgICAgICAgICAgICAgICd7bWFya2V0fS9tb25leS9vcmRlcnMnLFxuICAgICAgICAgICAgICAgICd7bWFya2V0fS9tb25leS9vcmRlcnMvaGlzdG9yeScsXG4gICAgICAgICAgICAgICAgJ3ttYXJrZXR9L21vbmV5L3RyYWRlcy9mZXRjaCcsXG4gICAgICAgICAgICAgICAgJ0dFTk1LVC9tb25leS9pbmZvJyxcbiAgICAgICAgICAgICAgICAnR0VOTUtUL21vbmV5L2RlcG9zaXRfYWRkcmVzcycsXG4gICAgICAgICAgICAgICAgJ0dFTk1LVC9tb25leS9uZXdfZGVwb3NpdF9hZGRyZXNzJyxcbiAgICAgICAgICAgICAgICAnR0VOTUtUL21vbmV5L3dhbGxldC9oaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAnR0VOTUtUL21vbmV5L3dpdGhkcmF3JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9FVVInOiB7ICdpZCc6ICdCVENFVVInLCAnc3ltYm9sJzogJ0JUQy9FVVInLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnRVVSJyB9LFxuICAgICAgICAnTFRDL0VVUic6IHsgJ2lkJzogJ0xUQ0VVUicsICdzeW1ib2wnOiAnTFRDL0VVUicsICdiYXNlJzogJ0xUQycsICdxdW90ZSc6ICdFVVInIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RHRU5NS1RNb25leUluZm8gKCk7XG4gICAgICAgIGxldCBkYXRhID0gcmVzcG9uc2VbJ2RhdGEnXTtcbiAgICAgICAgbGV0IGJhbGFuY2UgPSBkYXRhWyd3YWxsZXRzJ107XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogZGF0YSB9O1xuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IHRoaXMuY3VycmVuY2llcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gdGhpcy5jdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChjdXJyZW5jeSBpbiBiYWxhbmNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCdhdmFpbGFibGUnIGluIGJhbGFuY2VbY3VycmVuY3ldKSB7XG4gICAgICAgICAgICAgICAgICAgIGFjY291bnRbJ2ZyZWUnXSA9IHBhcnNlRmxvYXQgKGJhbGFuY2VbY3VycmVuY3ldWydhdmFpbGFibGUnXVsndmFsdWUnXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGN1cnJlbmN5IGluIGJhbGFuY2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoJ2JhbGFuY2UnIGluIGJhbGFuY2VbY3VycmVuY3ldKSB7XG4gICAgICAgICAgICAgICAgICAgIGFjY291bnRbJ3RvdGFsJ10gPSBwYXJzZUZsb2F0IChiYWxhbmNlW2N1cnJlbmN5XVsnYmFsYW5jZSddWyd2YWx1ZSddKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYWNjb3VudFsndG90YWwnXSkge1xuICAgICAgICAgICAgICAgIGlmIChhY2NvdW50WydmcmVlJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgYWNjb3VudFsndXNlZCddID0gYWNjb3VudFsndG90YWwnXSAtIGFjY291bnRbJ2ZyZWUnXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldE1hcmtldE9yZGVyYm9vayAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdtYXJrZXQnOiBwWydpZCddLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IHJlc3BvbnNlWydkYXRhJ107XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdiaWRzJzogW10sXG4gICAgICAgICAgICAnYXNrcyc6IFtdLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHNpZGVzID0gWyAnYmlkcycsICdhc2tzJyBdO1xuICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IHNpZGVzLmxlbmd0aDsgcysrKSB7XG4gICAgICAgICAgICBsZXQgc2lkZSA9IHNpZGVzW3NdO1xuICAgICAgICAgICAgbGV0IG9yZGVycyA9IG9yZGVyYm9va1tzaWRlXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9yZGVyID0gb3JkZXJzW2ldO1xuICAgICAgICAgICAgICAgIGxldCBwcmljZSA9IG9yZGVyWydwcmljZV9pbnQnXSAvIDEwMDAwMDtcbiAgICAgICAgICAgICAgICBsZXQgYW1vdW50ID0gb3JkZXJbJ2Ftb3VudF9pbnQnXSAvIDEwMDAwMDAwMDtcbiAgICAgICAgICAgICAgICByZXN1bHRbc2lkZV0ucHVzaCAoWyBwcmljZSwgYW1vdW50IF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgbGV0IHRpY2tlciA9IGF3YWl0IHRoaXMucHVibGljR2V0TWFya2V0VGlja2VyICh7XG4gICAgICAgICAgICAnbWFya2V0JzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aWNrZXJbJ3RpbWVzdGFtcCddICogMTAwMDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2JpZCddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2FzayddKSxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdCddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbHVtZSddWycyNGgnXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0TWFya2V0VHJhZGVzICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ21hcmtldCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAnbWFya2V0JzogcFsnaWQnXSxcbiAgICAgICAgICAgICdhbW91bnRfaW50JzogYW1vdW50LFxuICAgICAgICAgICAgJ2ZlZV9jdXJyZW5jeSc6IHBbJ3F1b3RlJ10sXG4gICAgICAgICAgICAndHlwZSc6IChzaWRlID09ICdidXknKSA/ICdiaWQnIDogJ2FzaycsXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlID09ICdsaW1pdCcpXG4gICAgICAgICAgICBvcmRlclsncHJpY2VfaW50J10gPSBwcmljZTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdE1hcmtldE1vbmV5T3JkZXJBZGQgKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ2lkJzogcmVzcG9uc2VbJ29yZGVyX2lkJ10udG9TdHJpbmcgKCksXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdE1hcmtldE1vbmV5T3JkZXJDYW5jZWwgKHsgJ29yZGVyX2lkJzogaWQgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHJlcXVlc3QgPSB0aGlzLmltcGxvZGVQYXJhbXMgKHBhdGgsIHBhcmFtcyk7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgJy8nICsgdGhpcy52ZXJzaW9uICsgJy8nICsgcmVxdWVzdDtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5vbWl0IChwYXJhbXMsIHRoaXMuZXh0cmFjdFBhcmFtcyAocGF0aCkpO1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHF1ZXJ5KS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChxdWVyeSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpO1xuICAgICAgICAgICAgYm9keSA9IHRoaXMudXJsZW5jb2RlICh0aGlzLmV4dGVuZCAoeyAnbm9uY2UnOiBub25jZSB9LCBxdWVyeSkpO1xuICAgICAgICAgICAgbGV0IHNlY3JldCA9IHRoaXMuYmFzZTY0VG9CaW5hcnkgKHRoaXMuc2VjcmV0KTtcbiAgICAgICAgICAgIGxldCBhdXRoID0gcmVxdWVzdCArIFwiXFwwXCIgKyBib2R5O1xuICAgICAgICAgICAgbGV0IHNpZ25hdHVyZSA9IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKGF1dGgpLCBzZWNyZXQsICdzaGE1MTInLCAnYmFzZTY0Jyk7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICAgICAgICAnQ29udGVudC1MZW5ndGgnOiBib2R5Lmxlbmd0aCxcbiAgICAgICAgICAgICAgICAnUmVzdC1LZXknOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgICAgICAnUmVzdC1TaWduJzogc2lnbmF0dXJlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGJ0Y2NoaW5hID0ge1xuXG4gICAgJ2lkJzogJ2J0Y2NoaW5hJyxcbiAgICAnbmFtZSc6ICdCVENDaGluYScsXG4gICAgJ2NvdW50cmllcyc6ICdDTicsXG4gICAgJ3JhdGVMaW1pdCc6IDE1MDAsXG4gICAgJ3ZlcnNpb24nOiAndjEnLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2MzY4LTQ2NWIzMjg2LTVlZDYtMTFlNy05YTExLTBmNjQ2N2UxZDgyYi5qcGcnLFxuICAgICAgICAnYXBpJzoge1xuICAgICAgICAgICAgJ3B1YmxpYyc6ICdodHRwczovL2RhdGEuYnRjY2hpbmEuY29tL2RhdGEnLFxuICAgICAgICAgICAgJ3ByaXZhdGUnOiAnaHR0cHM6Ly9hcGkuYnRjY2hpbmEuY29tL2FwaV90cmFkZV92MS5waHAnLFxuICAgICAgICB9LFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vd3d3LmJ0Y2NoaW5hLmNvbScsXG4gICAgICAgICdkb2MnOiAnaHR0cHM6Ly93d3cuYnRjY2hpbmEuY29tL2FwaWRvY3MnXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnaGlzdG9yeWRhdGEnLFxuICAgICAgICAgICAgICAgICdvcmRlcmJvb2snLFxuICAgICAgICAgICAgICAgICd0aWNrZXInLFxuICAgICAgICAgICAgICAgICd0cmFkZXMnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnQnV5SWNlYmVyZ09yZGVyJyxcbiAgICAgICAgICAgICAgICAnQnV5T3JkZXInLFxuICAgICAgICAgICAgICAgICdCdXlPcmRlcjInLFxuICAgICAgICAgICAgICAgICdCdXlTdG9wT3JkZXInLFxuICAgICAgICAgICAgICAgICdDYW5jZWxJY2ViZXJnT3JkZXInLFxuICAgICAgICAgICAgICAgICdDYW5jZWxPcmRlcicsXG4gICAgICAgICAgICAgICAgJ0NhbmNlbFN0b3BPcmRlcicsXG4gICAgICAgICAgICAgICAgJ0dldEFjY291bnRJbmZvJyxcbiAgICAgICAgICAgICAgICAnZ2V0QXJjaGl2ZWRPcmRlcicsXG4gICAgICAgICAgICAgICAgJ2dldEFyY2hpdmVkT3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnR2V0RGVwb3NpdHMnLFxuICAgICAgICAgICAgICAgICdHZXRJY2ViZXJnT3JkZXInLFxuICAgICAgICAgICAgICAgICdHZXRJY2ViZXJnT3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnR2V0TWFya2V0RGVwdGgnLFxuICAgICAgICAgICAgICAgICdHZXRNYXJrZXREZXB0aDInLFxuICAgICAgICAgICAgICAgICdHZXRPcmRlcicsXG4gICAgICAgICAgICAgICAgJ0dldE9yZGVycycsXG4gICAgICAgICAgICAgICAgJ0dldFN0b3BPcmRlcicsXG4gICAgICAgICAgICAgICAgJ0dldFN0b3BPcmRlcnMnLFxuICAgICAgICAgICAgICAgICdHZXRUcmFuc2FjdGlvbnMnLFxuICAgICAgICAgICAgICAgICdHZXRXaXRoZHJhd2FsJyxcbiAgICAgICAgICAgICAgICAnR2V0V2l0aGRyYXdhbHMnLFxuICAgICAgICAgICAgICAgICdSZXF1ZXN0V2l0aGRyYXdhbCcsXG4gICAgICAgICAgICAgICAgJ1NlbGxJY2ViZXJnT3JkZXInLFxuICAgICAgICAgICAgICAgICdTZWxsT3JkZXInLFxuICAgICAgICAgICAgICAgICdTZWxsT3JkZXIyJyxcbiAgICAgICAgICAgICAgICAnU2VsbFN0b3BPcmRlcicsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE1hcmtldHMgKCkge1xuICAgICAgICBsZXQgbWFya2V0cyA9IGF3YWl0IHRoaXMucHVibGljR2V0VGlja2VyICh7XG4gICAgICAgICAgICAnbWFya2V0JzogJ2FsbCcsXG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMgKG1hcmtldHMpO1xuICAgICAgICBmb3IgKGxldCBwID0gMDsgcCA8IGtleXMubGVuZ3RoOyBwKyspIHtcbiAgICAgICAgICAgIGxldCBrZXkgPSBrZXlzW3BdO1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IG1hcmtldHNba2V5XTtcbiAgICAgICAgICAgIGxldCBwYXJ0cyA9IGtleS5zcGxpdCAoJ18nKTtcbiAgICAgICAgICAgIGxldCBpZCA9IHBhcnRzWzFdO1xuICAgICAgICAgICAgbGV0IGJhc2UgPSBpZC5zbGljZSAoMCwgMyk7XG4gICAgICAgICAgICBsZXQgcXVvdGUgPSBpZC5zbGljZSAoMywgNik7XG4gICAgICAgICAgICBiYXNlID0gYmFzZS50b1VwcGVyQ2FzZSAoKTtcbiAgICAgICAgICAgIHF1b3RlID0gcXVvdGUudG9VcHBlckNhc2UgKCk7XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gYmFzZSArICcvJyArIHF1b3RlO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2ggKHtcbiAgICAgICAgICAgICAgICAnaWQnOiBpZCxcbiAgICAgICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgICAgICdiYXNlJzogYmFzZSxcbiAgICAgICAgICAgICAgICAncXVvdGUnOiBxdW90ZSxcbiAgICAgICAgICAgICAgICAnaW5mbyc6IG1hcmtldCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RHZXRBY2NvdW50SW5mbyAoKTtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gcmVzcG9uc2VbJ3Jlc3VsdCddO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGJhbGFuY2VzIH07XG5cbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCB0aGlzLmN1cnJlbmNpZXMubGVuZ3RoOyBjKyspIHtcbiAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IHRoaXMuY3VycmVuY2llc1tjXTtcbiAgICAgICAgICAgIGxldCBsb3dlcmNhc2UgPSBjdXJyZW5jeS50b0xvd2VyQ2FzZSAoKTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd1c2VkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAobG93ZXJjYXNlIGluIGJhbGFuY2VzWydiYWxhbmNlJ10pXG4gICAgICAgICAgICAgICAgYWNjb3VudFsndG90YWwnXSA9IHBhcnNlRmxvYXQgKGJhbGFuY2VzWydiYWxhbmNlJ11bbG93ZXJjYXNlXVsnYW1vdW50J10pO1xuICAgICAgICAgICAgaWYgKGxvd2VyY2FzZSBpbiBiYWxhbmNlc1snZnJvemVuJ10pXG4gICAgICAgICAgICAgICAgYWNjb3VudFsndXNlZCddID0gcGFyc2VGbG9hdCAoYmFsYW5jZXNbJ2Zyb3plbiddW2xvd2VyY2FzZV1bJ2Ftb3VudCddKTtcbiAgICAgICAgICAgIGFjY291bnRbJ2ZyZWUnXSA9IGFjY291bnRbJ3RvdGFsJ10gLSBhY2NvdW50Wyd1c2VkJ107XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRPcmRlcmJvb2sgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnbWFya2V0JzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSBvcmRlcmJvb2tbJ2RhdGUnXSAqIDEwMDA7O1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBvcmRlcmJvb2tbJ2JpZHMnXSxcbiAgICAgICAgICAgICdhc2tzJzogb3JkZXJib29rWydhc2tzJ10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICByZXN1bHRbJ2Fza3MnXSA9IHRoaXMuc29ydEJ5IChyZXN1bHRbJ2Fza3MnXSwgMCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHRpY2tlcnMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFRpY2tlciAoe1xuICAgICAgICAgICAgJ21hcmtldCc6IHBbJ2lkJ10sXG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgdGlja2VyID0gdGlja2Vyc1sndGlja2VyJ107XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aWNrZXJbJ2RhdGUnXSAqIDEwMDA7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2hpZ2gnXSksXG4gICAgICAgICAgICAnbG93JzogcGFyc2VGbG9hdCAodGlja2VyWydsb3cnXSksXG4gICAgICAgICAgICAnYmlkJzogcGFyc2VGbG9hdCAodGlja2VyWydidXknXSksXG4gICAgICAgICAgICAnYXNrJzogcGFyc2VGbG9hdCAodGlja2VyWydzZWxsJ10pLFxuICAgICAgICAgICAgJ3Z3YXAnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3Z3YXAnXSksXG4gICAgICAgICAgICAnb3Blbic6IHBhcnNlRmxvYXQgKHRpY2tlclsnb3BlbiddKSxcbiAgICAgICAgICAgICdjbG9zZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsncHJldl9jbG9zZSddKSxcbiAgICAgICAgICAgICdmaXJzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsYXN0JzogcGFyc2VGbG9hdCAodGlja2VyWydsYXN0J10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndm9sJ10pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldFRyYWRlcyAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdtYXJrZXQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IG1ldGhvZCA9ICdwcml2YXRlUG9zdCcgKyB0aGlzLmNhcGl0YWxpemUgKHNpZGUpICsgJ09yZGVyMic7XG4gICAgICAgIGxldCBvcmRlciA9IHt9O1xuICAgICAgICBsZXQgaWQgPSBwWydpZCddLnRvVXBwZXJDYXNlICgpO1xuICAgICAgICBpZiAodHlwZSA9PSAnbWFya2V0Jykge1xuICAgICAgICAgICAgb3JkZXJbJ3BhcmFtcyddID0gWyB1bmRlZmluZWQsIGFtb3VudCwgaWQgXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9yZGVyWydwYXJhbXMnXSA9IFsgcHJpY2UsIGFtb3VudCwgaWQgXTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzW21ldGhvZF0gKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ2lkJzogcmVzcG9uc2VbJ2lkJ10sXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG1hcmtldCA9IHBhcmFtc1snbWFya2V0J107IC8vIFRPRE8gZml4bWVcbiAgICAgICAgcmV0dXJuIHRoaXMucHJpdmF0ZVBvc3RDYW5jZWxPcmRlciAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdwYXJhbXMnOiBbIGlkLCBtYXJrZXQgXSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIG5vbmNlICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWljcm9zZWNvbmRzICgpO1xuICAgIH0sXG5cbiAgICByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddW2FwaV0gKyAnLycgKyBwYXRoO1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHBhcmFtcykubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocGFyYW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5hcGlLZXkpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEF1dGhlbnRpY2F0aW9uRXJyb3IgKHRoaXMuaWQgKyAnIHJlcXVpcmVzIGAnICsgdGhpcy5pZCArICcuYXBpS2V5YCBwcm9wZXJ0eSBmb3IgYXV0aGVudGljYXRpb24nKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5zZWNyZXQpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEF1dGhlbnRpY2F0aW9uRXJyb3IgKHRoaXMuaWQgKyAnIHJlcXVpcmVzIGAnICsgdGhpcy5pZCArICcuc2VjcmV0YCBwcm9wZXJ0eSBmb3IgYXV0aGVudGljYXRpb24nKTtcbiAgICAgICAgICAgIGxldCBwID0gW107XG4gICAgICAgICAgICBpZiAoJ3BhcmFtcycgaW4gcGFyYW1zKVxuICAgICAgICAgICAgICAgIHAgPSBwYXJhbXNbJ3BhcmFtcyddO1xuICAgICAgICAgICAgbGV0IG5vbmNlID0gdGhpcy5ub25jZSAoKTtcbiAgICAgICAgICAgIGxldCByZXF1ZXN0ID0ge1xuICAgICAgICAgICAgICAgICdtZXRob2QnOiBwYXRoLFxuICAgICAgICAgICAgICAgICdpZCc6IG5vbmNlLFxuICAgICAgICAgICAgICAgICdwYXJhbXMnOiBwLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHAgPSBwLmpvaW4gKCcsJyk7XG4gICAgICAgICAgICBib2R5ID0gdGhpcy5qc29uIChyZXF1ZXN0KTtcbiAgICAgICAgICAgIGxldCBxdWVyeSA9IChcbiAgICAgICAgICAgICAgICAndG9uY2U9JyArIG5vbmNlICtcbiAgICAgICAgICAgICAgICAnJmFjY2Vzc2tleT0nICsgdGhpcy5hcGlLZXkgK1xuICAgICAgICAgICAgICAgICcmcmVxdWVzdG1ldGhvZD0nICsgbWV0aG9kLnRvTG93ZXJDYXNlICgpICtcbiAgICAgICAgICAgICAgICAnJmlkPScgKyBub25jZSArXG4gICAgICAgICAgICAgICAgJyZtZXRob2Q9JyArIHBhdGggK1xuICAgICAgICAgICAgICAgICcmcGFyYW1zPScgKyBwXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbGV0IHNpZ25hdHVyZSA9IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKHF1ZXJ5KSwgdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSwgJ3NoYTEnKTtcbiAgICAgICAgICAgIGxldCBhdXRoID0gdGhpcy5hcGlLZXkgKyAnOicgKyBzaWduYXR1cmU7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdDb250ZW50LUxlbmd0aCc6IGJvZHkubGVuZ3RoLFxuICAgICAgICAgICAgICAgICdBdXRob3JpemF0aW9uJzogJ0Jhc2ljICcgKyB0aGlzLnN0cmluZ1RvQmFzZTY0IChhdXRoKSxcbiAgICAgICAgICAgICAgICAnSnNvbi1ScGMtVG9uY2UnOiBub25jZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBidGNlID0ge1xuXG4gICAgJ2lkJzogJ2J0Y2UnLFxuICAgICduYW1lJzogJ0JUQy1lJyxcbiAgICAnY291bnRyaWVzJzogWyAnQkcnLCAnUlUnIF0sIC8vIEJ1bGdhcmlhLCBSdXNzaWFcbiAgICAndmVyc2lvbic6ICczJyxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yNzg0MzIyNS0xYjU3MTUxNC02MTFhLTExZTctOTIwOC0yNjQxYTU2MGI1NjEuanBnJyxcbiAgICAgICAgJ2FwaSc6IHtcbiAgICAgICAgICAgICdwdWJsaWMnOiAnaHR0cHM6Ly9idGMtZS5jb20vYXBpJyxcbiAgICAgICAgICAgICdwcml2YXRlJzogJ2h0dHBzOi8vYnRjLWUuY29tL3RhcGknLFxuICAgICAgICB9LFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vYnRjLWUuY29tJyxcbiAgICAgICAgJ2RvYyc6IFtcbiAgICAgICAgICAgICdodHRwczovL2J0Yy1lLmNvbS9hcGkvMy9kb2NzJyxcbiAgICAgICAgICAgICdodHRwczovL2J0Yy1lLmNvbS90YXBpL2RvY3MnLFxuICAgICAgICBdLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ2luZm8nLFxuICAgICAgICAgICAgICAgICd0aWNrZXIve3BhaXJ9JyxcbiAgICAgICAgICAgICAgICAnZGVwdGgve3BhaXJ9JyxcbiAgICAgICAgICAgICAgICAndHJhZGVzL3twYWlyfScsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAncHJpdmF0ZSc6IHtcbiAgICAgICAgICAgICdwb3N0JzogW1xuICAgICAgICAgICAgICAgICdnZXRJbmZvJyxcbiAgICAgICAgICAgICAgICAnVHJhZGUnLFxuICAgICAgICAgICAgICAgICdBY3RpdmVPcmRlcnMnLFxuICAgICAgICAgICAgICAgICdPcmRlckluZm8nLFxuICAgICAgICAgICAgICAgICdDYW5jZWxPcmRlcicsXG4gICAgICAgICAgICAgICAgJ1RyYWRlSGlzdG9yeScsXG4gICAgICAgICAgICAgICAgJ1RyYW5zSGlzdG9yeScsXG4gICAgICAgICAgICAgICAgJ0NvaW5EZXBvc2l0QWRkcmVzcycsXG4gICAgICAgICAgICAgICAgJ1dpdGhkcmF3Q29pbicsXG4gICAgICAgICAgICAgICAgJ0NyZWF0ZUNvdXBvbicsXG4gICAgICAgICAgICAgICAgJ1JlZGVlbUNvdXBvbicsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoTWFya2V0cyAoKSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0SW5mbyAoKTtcbiAgICAgICAgbGV0IG1hcmtldHMgPSByZXNwb25zZVsncGFpcnMnXTtcbiAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyAobWFya2V0cyk7XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgcCA9IDA7IHAgPCBrZXlzLmxlbmd0aDsgcCsrKSB7XG4gICAgICAgICAgICBsZXQgaWQgPSBrZXlzW3BdO1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IG1hcmtldHNbaWRdO1xuICAgICAgICAgICAgbGV0IFsgYmFzZSwgcXVvdGUgXSA9IGlkLnNwbGl0ICgnXycpO1xuICAgICAgICAgICAgYmFzZSA9IGJhc2UudG9VcHBlckNhc2UgKCk7XG4gICAgICAgICAgICBxdW90ZSA9IHF1b3RlLnRvVXBwZXJDYXNlICgpO1xuICAgICAgICAgICAgaWYgKGJhc2UgPT0gJ0RTSCcpXG4gICAgICAgICAgICAgICAgYmFzZSA9ICdEQVNIJztcbiAgICAgICAgICAgIGJhc2UgPSB0aGlzLmNvbW1vbkN1cnJlbmN5Q29kZSAoYmFzZSk7XG4gICAgICAgICAgICBxdW90ZSA9IHRoaXMuY29tbW9uQ3VycmVuY3lDb2RlIChxdW90ZSk7XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gYmFzZSArICcvJyArIHF1b3RlO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2ggKHtcbiAgICAgICAgICAgICAgICAnaWQnOiBpZCxcbiAgICAgICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgICAgICdiYXNlJzogYmFzZSxcbiAgICAgICAgICAgICAgICAncXVvdGUnOiBxdW90ZSxcbiAgICAgICAgICAgICAgICAnaW5mbyc6IG1hcmtldCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RHZXRJbmZvICgpO1xuICAgICAgICBsZXQgYmFsYW5jZXMgPSByZXNwb25zZVsncmV0dXJuJ107XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogYmFsYW5jZXMgfTtcbiAgICAgICAgbGV0IGZ1bmRzID0gYmFsYW5jZXNbJ2Z1bmRzJ107XG4gICAgICAgIGxldCBjdXJyZW5jaWVzID0gT2JqZWN0LmtleXMgKGZ1bmRzKTtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBjdXJyZW5jaWVzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBjdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IHVwcGVyY2FzZSA9IGN1cnJlbmN5LnRvVXBwZXJDYXNlICgpO1xuICAgICAgICAgICAgLy8gdGhleSBtaXNzcGVsbCBEQVNIIGFzIGRzaCA6L1xuICAgICAgICAgICAgaWYgKHVwcGVyY2FzZSA9PSAnRFNIJylcbiAgICAgICAgICAgICAgICB1cHBlcmNhc2UgPSAnREFTSCc7XG4gICAgICAgICAgICBsZXQgYWNjb3VudCA9IHtcbiAgICAgICAgICAgICAgICAnZnJlZSc6IGZ1bmRzW2N1cnJlbmN5XSxcbiAgICAgICAgICAgICAgICAndXNlZCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAndG90YWwnOiBmdW5kc1tjdXJyZW5jeV0sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVzdWx0W3VwcGVyY2FzZV0gPSBhY2NvdW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0RGVwdGhQYWlyICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ3BhaXInOiBwWydpZCddLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgaWYgKHBbJ2lkJ10gaW4gcmVzcG9uc2UpIHtcbiAgICAgICAgICAgIGxldCBvcmRlcmJvb2sgPSByZXNwb25zZVtwWydpZCddXTtcbiAgICAgICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAgICAgJ2JpZHMnOiBvcmRlcmJvb2tbJ2JpZHMnXSxcbiAgICAgICAgICAgICAgICAnYXNrcyc6IG9yZGVyYm9va1snYXNrcyddLFxuICAgICAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlc3VsdFsnYmlkcyddID0gdGhpcy5zb3J0QnkgKHJlc3VsdFsnYmlkcyddLCAwLCB0cnVlKTtcbiAgICAgICAgICAgIHJlc3VsdFsnYXNrcyddID0gdGhpcy5zb3J0QnkgKHJlc3VsdFsnYXNrcyddLCAwKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyBwWydzeW1ib2wnXSArICcgb3JkZXIgYm9vayBpcyBlbXB0eSBvciBub3QgYXZhaWxhYmxlJyk7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHRpY2tlcnMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFRpY2tlclBhaXIgKHtcbiAgICAgICAgICAgICdwYWlyJzogcFsnaWQnXSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aWNrZXIgPSB0aWNrZXJzW3BbJ2lkJ11dO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGlja2VyWyd1cGRhdGVkJ10gKiAxMDAwO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogdGlja2VyWydoaWdoJ10gPyB0aWNrZXJbJ2hpZ2gnXSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsb3cnOiB0aWNrZXJbJ2xvdyddID8gdGlja2VyWydsb3cnXSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiaWQnOiB0aWNrZXJbJ3NlbGwnXSA/IHRpY2tlclsnYnV5J10gOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXNrJzogdGlja2VyWydidXknXSA/IHRpY2tlclsnc2VsbCddIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3Z3YXAnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnb3Blbic6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjbG9zZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdmaXJzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsYXN0JzogdGlja2VyWydsYXN0J10gPyB0aWNrZXJbJ2xhc3QnXSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdGlja2VyWydhdmcnXSA/IHRpY2tlclsnYXZnJ10gOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHRpY2tlclsndm9sX2N1ciddID8gdGlja2VyWyd2b2xfY3VyJ10gOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiB0aWNrZXJbJ3ZvbCddID8gdGlja2VyWyd2b2wnXSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wdWJsaWNHZXRUcmFkZXNQYWlyICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ3BhaXInOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG9yZGVyID0ge1xuICAgICAgICAgICAgJ3BhaXInOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICAgICAgJ3R5cGUnOiBzaWRlLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IGFtb3VudCxcbiAgICAgICAgICAgICdyYXRlJzogcHJpY2UsXG4gICAgICAgIH07XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RUcmFkZSAodGhpcy5leHRlbmQgKG9yZGVyLCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsncmV0dXJuJ11bJ29yZGVyX2lkJ10sXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdENhbmNlbE9yZGVyICh7ICdvcmRlcl9pZCc6IGlkIH0pO1xuICAgIH0sXG5cbiAgICBwYXJzZU9yZGVyIChvcmRlcikge1xuICAgICAgICBsZXQgc3RhdHVzQ29kZSA9IG9yZGVyWydzdGF0dXMnXTtcbiAgICAgICAgbGV0IHN0YXR1cyA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHN0YXR1c0NvZGUgPT0gMCkge1xuICAgICAgICAgICAgc3RhdHVzID0gJ29wZW4nO1xuICAgICAgICB9IGVsc2UgaWYgKChzdGF0dXNDb2RlID09IDIpIHx8IChzdGF0dXNDb2RlID09IDMpKSB7XG4gICAgICAgICAgICBzdGF0dXMgPSAnY2FuY2VsZWQnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RhdHVzID0gJ2Nsb3NlZCc7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IG9yZGVyWyd0aW1lc3RhbXBfY3JlYXRlZCddICogMTAwMDtcbiAgICAgICAgbGV0IG1hcmtldCA9IHRoaXMubWFya2V0c19ieV9pZFtvcmRlclsncGFpciddXTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdpbmZvJzogb3JkZXIsXG4gICAgICAgICAgICAnaWQnOiBvcmRlclsnaWQnXSxcbiAgICAgICAgICAgICdzeW1ib2wnOiBtYXJrZXRbJ3N5bWJvbCddLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICd0eXBlJzogJ2xpbWl0JyxcbiAgICAgICAgICAgICdzaWRlJzogb3JkZXJbJ3R5cGUnXSxcbiAgICAgICAgICAgICdwcmljZSc6IG9yZGVyWydyYXRlJ10sXG4gICAgICAgICAgICAnYW1vdW50Jzogb3JkZXJbJ3N0YXJ0X2Ftb3VudCddLFxuICAgICAgICAgICAgJ3JlbWFpbmluZyc6IG9yZGVyWydhbW91bnQnXSxcbiAgICAgICAgICAgICdzdGF0dXMnOiBzdGF0dXMsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXIgKGlkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RPcmRlckluZm8gKHsgJ29yZGVyX2lkJzogaWQgfSk7XG4gICAgICAgIGxldCBvcmRlciA9IHJlc3BvbnNlWydyZXR1cm4nXVtpZF07XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlT3JkZXIgKHRoaXMuZXh0ZW5kICh7ICdpZCc6IGlkIH0sIG9yZGVyKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ11bYXBpXSArICcvJyArIHRoaXMudmVyc2lvbiArICcvJyArIHRoaXMuaW1wbG9kZVBhcmFtcyAocGF0aCwgcGFyYW1zKTtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5vbWl0IChwYXJhbXMsIHRoaXMuZXh0cmFjdFBhcmFtcyAocGF0aCkpO1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHF1ZXJ5KS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChxdWVyeSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpO1xuICAgICAgICAgICAgYm9keSA9IHRoaXMudXJsZW5jb2RlICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgICAgICdub25jZSc6IG5vbmNlLFxuICAgICAgICAgICAgICAgICdtZXRob2QnOiBwYXRoLFxuICAgICAgICAgICAgfSwgcXVlcnkpKTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgICAgICAgICdDb250ZW50LUxlbmd0aCc6IGJvZHkubGVuZ3RoLFxuICAgICAgICAgICAgICAgICdLZXknOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgICAgICAnU2lnbic6IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKGJvZHkpLCB0aGlzLmVuY29kZSAodGhpcy5zZWNyZXQpLCAnc2hhNTEyJyksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdzdWNjZXNzJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIGlmICghcmVzcG9uc2VbJ3N1Y2Nlc3MnXSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgJyArIHRoaXMuanNvbiAocmVzcG9uc2UpKTtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGJ0Y21hcmtldHMgPSB7XG5cbiAgICAnaWQnOiAnYnRjbWFya2V0cycsXG4gICAgJ25hbWUnOiAnQlRDIE1hcmtldHMnLFxuICAgICdjb3VudHJpZXMnOiAnQVUnLCAvLyBBdXN0cmFsaWFcbiAgICAncmF0ZUxpbWl0JzogMTAwMCwgLy8gbWFya2V0IGRhdGEgY2FjaGVkIGZvciAxIHNlY29uZCAodHJhZGVzIGNhY2hlZCBmb3IgMiBzZWNvbmRzKVxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI5MTQyOTExLTBlMWFjZmMyLTdkNWMtMTFlNy05OGM0LTA3ZDk1MzJiMjlkNy5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vYXBpLmJ0Y21hcmtldHMubmV0JyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL2J0Y21hcmtldHMubmV0LycsXG4gICAgICAgICdkb2MnOiAnaHR0cHM6Ly9naXRodWIuY29tL0JUQ01hcmtldHMvQVBJJyxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdtYXJrZXQve2lkfS90aWNrJyxcbiAgICAgICAgICAgICAgICAnbWFya2V0L3tpZH0vb3JkZXJib29rJyxcbiAgICAgICAgICAgICAgICAnbWFya2V0L3tpZH0vdHJhZGVzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnYWNjb3VudC9iYWxhbmNlJyxcbiAgICAgICAgICAgICAgICAnYWNjb3VudC97aWR9L3RyYWRpbmdmZWUnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICdwb3N0JzogW1xuICAgICAgICAgICAgICAgICdmdW5kdHJhbnNmZXIvd2l0aGRyYXdDcnlwdG8nLFxuICAgICAgICAgICAgICAgICdmdW5kdHJhbnNmZXIvd2l0aGRyYXdFRlQnLFxuICAgICAgICAgICAgICAgICdvcmRlci9jcmVhdGUnLFxuICAgICAgICAgICAgICAgICdvcmRlci9jYW5jZWwnLFxuICAgICAgICAgICAgICAgICdvcmRlci9oaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAnb3JkZXIvb3BlbicsXG4gICAgICAgICAgICAgICAgJ29yZGVyL3RyYWRlL2hpc3RvcnknLFxuICAgICAgICAgICAgICAgICdvcmRlci9jcmVhdGVCYXRjaCcsIC8vIHRoZXkgcHJvbWlzZSBpdCdzIGNvbWluZyBzb29uLi4uXG4gICAgICAgICAgICAgICAgJ29yZGVyL2RldGFpbCcsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgJ21hcmtldHMnOiB7XG4gICAgICAgICdCVEMvQVVEJzogeyAnaWQnOiAnQlRDL0FVRCcsICdzeW1ib2wnOiAnQlRDL0FVRCcsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdBVUQnIH0sXG4gICAgICAgICdMVEMvQVVEJzogeyAnaWQnOiAnTFRDL0FVRCcsICdzeW1ib2wnOiAnTFRDL0FVRCcsICdiYXNlJzogJ0xUQycsICdxdW90ZSc6ICdBVUQnIH0sXG4gICAgICAgICdFVEgvQVVEJzogeyAnaWQnOiAnRVRIL0FVRCcsICdzeW1ib2wnOiAnRVRIL0FVRCcsICdiYXNlJzogJ0VUSCcsICdxdW90ZSc6ICdBVUQnIH0sXG4gICAgICAgICdFVEMvQVVEJzogeyAnaWQnOiAnRVRDL0FVRCcsICdzeW1ib2wnOiAnRVRDL0FVRCcsICdiYXNlJzogJ0VUQycsICdxdW90ZSc6ICdBVUQnIH0sXG4gICAgICAgICdYUlAvQVVEJzogeyAnaWQnOiAnWFJQL0FVRCcsICdzeW1ib2wnOiAnWFJQL0FVRCcsICdiYXNlJzogJ1hSUCcsICdxdW90ZSc6ICdBVUQnIH0sXG4gICAgICAgICdCQ0gvQVVEJzogeyAnaWQnOiAnQkNIL0FVRCcsICdzeW1ib2wnOiAnQkNIL0FVRCcsICdiYXNlJzogJ0JDSCcsICdxdW90ZSc6ICdBVUQnIH0sXG4gICAgICAgICdMVEMvQlRDJzogeyAnaWQnOiAnTFRDL0JUQycsICdzeW1ib2wnOiAnTFRDL0JUQycsICdiYXNlJzogJ0xUQycsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdFVEgvQlRDJzogeyAnaWQnOiAnRVRIL0JUQycsICdzeW1ib2wnOiAnRVRIL0JUQycsICdiYXNlJzogJ0VUSCcsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdFVEMvQlRDJzogeyAnaWQnOiAnRVRDL0JUQycsICdzeW1ib2wnOiAnRVRDL0JUQycsICdiYXNlJzogJ0VUQycsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdYUlAvQlRDJzogeyAnaWQnOiAnWFJQL0JUQycsICdzeW1ib2wnOiAnWFJQL0JUQycsICdiYXNlJzogJ1hSUCcsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdCQ0gvQlRDJzogeyAnaWQnOiAnQkNIL0JUQycsICdzeW1ib2wnOiAnQkNIL0JUQycsICdiYXNlJzogJ0JDSCcsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBiYWxhbmNlcyA9IGF3YWl0IHRoaXMucHJpdmF0ZUdldEFjY291bnRCYWxhbmNlICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGJhbGFuY2VzIH07XG4gICAgICAgIGZvciAobGV0IGIgPSAwOyBiIDwgYmFsYW5jZXMubGVuZ3RoOyBiKyspIHtcbiAgICAgICAgICAgIGxldCBiYWxhbmNlID0gYmFsYW5jZXNbYl07XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBiYWxhbmNlWydjdXJyZW5jeSddO1xuICAgICAgICAgICAgbGV0IG11bHRpcGxpZXIgPSAxMDAwMDAwMDA7XG4gICAgICAgICAgICBsZXQgZnJlZSA9IHBhcnNlRmxvYXQgKGJhbGFuY2VbJ2JhbGFuY2UnXSAvIG11bHRpcGxpZXIpO1xuICAgICAgICAgICAgbGV0IHVzZWQgPSBwYXJzZUZsb2F0IChiYWxhbmNlWydwZW5kaW5nRnVuZHMnXSAvIG11bHRpcGxpZXIpO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiBmcmVlLFxuICAgICAgICAgICAgICAgICd1c2VkJzogdXNlZCxcbiAgICAgICAgICAgICAgICAndG90YWwnOiB0aGlzLnN1bSAoZnJlZSwgdXNlZCksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgcGFyc2VCaWRBc2sgKGJpZGFzaykge1xuICAgICAgICBsZXQgcHJpY2UgPSBiaWRhc2tbMF07XG4gICAgICAgIGxldCBhbW91bnQgPSBiaWRhc2tbMV07XG4gICAgICAgIHJldHVybiBbIHByaWNlLCBhbW91bnQgXTtcbiAgICB9LFxuXG4gICAgcGFyc2VCaWRBc2tzIChiaWRhc2tzKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiaWRhc2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCAodGhpcy5wYXJzZUJpZEFzayAoYmlkYXNrc1tpXSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBtID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSBhd2FpdCB0aGlzLnB1YmxpY0dldE1hcmtldElkT3JkZXJib29rICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2lkJzogbVsnaWQnXSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSBvcmRlcmJvb2tbJ3RpbWVzdGFtcCddICogMTAwMDtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdiaWRzJzogW10sXG4gICAgICAgICAgICAnYXNrcyc6IFtdLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHNpZGVzID0gWyAnYmlkcycsICdhc2tzJyBdO1xuICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IHNpZGVzLmxlbmd0aDsgcysrKSB7XG4gICAgICAgICAgICBsZXQgc2lkZSA9IHNpZGVzW3NdO1xuICAgICAgICAgICAgcmVzdWx0W3NpZGVdID0gdGhpcy5wYXJzZUJpZEFza3MgKG9yZGVyYm9va1tzaWRlXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgcGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KSB7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aWNrZXJbJ3RpbWVzdGFtcCddICogMTAwMDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsb3cnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmlkJzogcGFyc2VGbG9hdCAodGlja2VyWydiZXN0QmlkJ10pLFxuICAgICAgICAgICAgJ2Fzayc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYmVzdEFzayddKSxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdFByaWNlJ10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndm9sdW1lMjRoJ10pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG0gPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHRpY2tlciA9IGF3YWl0IHRoaXMucHVibGljR2V0TWFya2V0SWRUaWNrICh7XG4gICAgICAgICAgICAnaWQnOiBtWydpZCddLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VUaWNrZXIgKHRpY2tlciwgbSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldE1hcmtldElkVHJhZGVzICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgLy8gJ3NpbmNlJzogNTk4NjgzNDUyMzEsXG4gICAgICAgICAgICAnaWQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG0gPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IG11bHRpcGxpZXIgPSAxMDAwMDAwMDA7IC8vIGZvciBwcmljZSBhbmQgdm9sdW1lXG4gICAgICAgIC8vIGRvZXMgQlRDIE1hcmtldHMgc3VwcG9ydCBtYXJrZXQgb3JkZXJzIGF0IGFsbD9cbiAgICAgICAgbGV0IG9yZGVyU2lkZSA9IChzaWRlID09ICdidXknKSA/ICdCaWQnIDogJ0Fzayc7XG4gICAgICAgIGxldCBvcmRlciA9IHRoaXMub3JkZXJlZCAoe1xuICAgICAgICAgICAgJ2N1cnJlbmN5JzogbVsncXVvdGUnXSxcbiAgICAgICAgICAgICdpbnN0cnVtZW50JzogbVsnYmFzZSddLFxuICAgICAgICAgICAgJ3ByaWNlJzogcHJpY2UgKiBtdWx0aXBsaWVyLFxuICAgICAgICAgICAgJ3ZvbHVtZSc6IGFtb3VudCAqIG11bHRpcGxpZXIsXG4gICAgICAgICAgICAnb3JkZXJTaWRlJzogb3JkZXJTaWRlLFxuICAgICAgICAgICAgJ29yZGVydHlwZSc6IHRoaXMuY2FwaXRhbGl6ZSAodHlwZSksXG4gICAgICAgICAgICAnY2xpZW50UmVxdWVzdElkJzogdGhpcy5ub25jZSAoKS50b1N0cmluZyAoKSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RPcmRlckNyZWF0ZSAodGhpcy5leHRlbmQgKG9yZGVyLCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnaWQnXS50b1N0cmluZyAoKSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXJzIChpZHMpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJpdmF0ZVBvc3RPcmRlckNhbmNlbCAoeyAnb3JkZXJfaWRzJzogaWRzIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FuY2VsT3JkZXJzIChbIGlkIF0pO1xuICAgIH0sXG5cbiAgICBub25jZSAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJpID0gJy8nICsgdGhpcy5pbXBsb2RlUGFyYW1zIChwYXRoLCBwYXJhbXMpO1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArIHVyaTtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5vbWl0IChwYXJhbXMsIHRoaXMuZXh0cmFjdFBhcmFtcyAocGF0aCkpO1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHBhcmFtcykubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocGFyYW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCkudG9TdHJpbmcgKCk7XG4gICAgICAgICAgICBsZXQgYXV0aCA9IHVyaSArIFwiXFxuXCIgKyBub25jZSArIFwiXFxuXCI7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgICAgJ2FwaWtleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgICAgICd0aW1lc3RhbXAnOiBub25jZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAobWV0aG9kID09ICdQT1NUJykge1xuICAgICAgICAgICAgICAgIGJvZHkgPSB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICAgICAgICAgIGhlYWRlcnNbJ0NvbnRlbnQtTGVuZ3RoJ10gPSBib2R5Lmxlbmd0aDtcbiAgICAgICAgICAgICAgICBhdXRoICs9IGJvZHk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgc2VjcmV0ID0gdGhpcy5iYXNlNjRUb0JpbmFyeSAodGhpcy5zZWNyZXQpO1xuICAgICAgICAgICAgbGV0IHNpZ25hdHVyZSA9IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKGF1dGgpLCBzZWNyZXQsICdzaGE1MTInLCAnYmFzZTY0Jyk7XG4gICAgICAgICAgICBoZWFkZXJzWydzaWduYXR1cmUnXSA9IHNpZ25hdHVyZTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgICAgIGlmIChhcGkgPT0gJ3ByaXZhdGUnKSB7XG4gICAgICAgICAgICBpZiAoJ3N1Y2Nlc3MnIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgICAgIGlmICghcmVzcG9uc2VbJ3N1Y2Nlc3MnXSlcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGJ0Y3RyYWRlciA9IHtcblxuICAgICdpZCc6ICdidGN0cmFkZXInLFxuICAgICduYW1lJzogJ0JUQ1RyYWRlcicsXG4gICAgJ2NvdW50cmllcyc6IFsgJ1RSJywgJ0dSJywgJ1BIJyBdLCAvLyBUdXJrZXksIEdyZWVjZSwgUGhpbGlwcGluZXNcbiAgICAncmF0ZUxpbWl0JzogMTAwMCxcbiAgICAnY29tbWVudCc6ICdiYXNlIEFQSSBmb3IgQlRDRXhjaGFuZ2UsIEJUQ1R1cmsnLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3OTkyNDA0LWNkYTFlMzg2LTY0OWMtMTFlNy04ZGMxLTQwYmJkMjg5Nzc2OC5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vd3d3LmJ0Y3RyYWRlci5jb20vYXBpJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy5idGN0cmFkZXIuY29tJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL2dpdGh1Yi5jb20vQlRDVHJhZGVyL2Jyb2tlci1hcGktZG9jcycsXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnb2hsY2RhdGEnLCAvLyA/bGFzdD1DT1VOVFxuICAgICAgICAgICAgICAgICdvcmRlcmJvb2snLFxuICAgICAgICAgICAgICAgICd0aWNrZXInLFxuICAgICAgICAgICAgICAgICd0cmFkZXMnLCAgIC8vID9sYXN0PUNPVU5UIChtYXggNTApXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAncHJpdmF0ZSc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ2JhbGFuY2UnLFxuICAgICAgICAgICAgICAgICdvcGVuT3JkZXJzJyxcbiAgICAgICAgICAgICAgICAndXNlclRyYW5zYWN0aW9ucycsIC8vID9vZmZzZXQ9MCZsaW1pdD0yNSZzb3J0PWFzY1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICdwb3N0JzogW1xuICAgICAgICAgICAgICAgICdidXknLFxuICAgICAgICAgICAgICAgICdjYW5jZWxPcmRlcicsXG4gICAgICAgICAgICAgICAgJ3NlbGwnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlR2V0QmFsYW5jZSAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiByZXNwb25zZSB9O1xuICAgICAgICBsZXQgYmFzZSA9IHtcbiAgICAgICAgICAgICdmcmVlJzogcmVzcG9uc2VbJ2JpdGNvaW5fYXZhaWxhYmxlJ10sXG4gICAgICAgICAgICAndXNlZCc6IHJlc3BvbnNlWydiaXRjb2luX3Jlc2VydmVkJ10sXG4gICAgICAgICAgICAndG90YWwnOiByZXNwb25zZVsnYml0Y29pbl9iYWxhbmNlJ10sXG4gICAgICAgIH07XG4gICAgICAgIGxldCBxdW90ZSA9IHtcbiAgICAgICAgICAgICdmcmVlJzogcmVzcG9uc2VbJ21vbmV5X2F2YWlsYWJsZSddLFxuICAgICAgICAgICAgJ3VzZWQnOiByZXNwb25zZVsnbW9uZXlfcmVzZXJ2ZWQnXSxcbiAgICAgICAgICAgICd0b3RhbCc6IHJlc3BvbnNlWydtb25leV9iYWxhbmNlJ10sXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzeW1ib2wgPSB0aGlzLnN5bWJvbHNbMF07XG4gICAgICAgIGxldCBtYXJrZXQgPSB0aGlzLm1hcmtldHNbc3ltYm9sXTtcbiAgICAgICAgcmVzdWx0W21hcmtldFsnYmFzZSddXSA9IGJhc2U7XG4gICAgICAgIHJlc3VsdFttYXJrZXRbJ3F1b3RlJ11dID0gcXVvdGU7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSBhd2FpdCB0aGlzLnB1YmxpY0dldE9yZGVyYm9vayAocGFyYW1zKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHBhcnNlSW50IChvcmRlcmJvb2tbJ3RpbWVzdGFtcCddICogMTAwMCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IFtdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaWRlcyA9IFsgJ2JpZHMnLCAnYXNrcycgXTtcbiAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBzaWRlcy5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1tzXTtcbiAgICAgICAgICAgIGxldCBvcmRlcnMgPSBvcmRlcmJvb2tbc2lkZV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBvcmRlciA9IG9yZGVyc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgcHJpY2UgPSBwYXJzZUZsb2F0IChvcmRlclswXSk7XG4gICAgICAgICAgICAgICAgbGV0IGFtb3VudCA9IHBhcnNlRmxvYXQgKG9yZGVyWzFdKTtcbiAgICAgICAgICAgICAgICByZXN1bHRbc2lkZV0ucHVzaCAoWyBwcmljZSwgYW1vdW50IF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgbGV0IHRpY2tlciA9IGF3YWl0IHRoaXMucHVibGljR2V0VGlja2VyICgpO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gcGFyc2VJbnQgKHRpY2tlclsndGltZXN0YW1wJ10gKiAxMDAwKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2JpZCddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2FzayddKSxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ29wZW4nXSksXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdCddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogcGFyc2VGbG9hdCAodGlja2VyWydhdmVyYWdlJ10pLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbHVtZSddKSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgbWF4Q291bnQgPSA1MDtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0VHJhZGVzIChwYXJhbXMpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgbWV0aG9kID0gJ3ByaXZhdGVQb3N0JyArIHRoaXMuY2FwaXRhbGl6ZSAoc2lkZSk7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdUeXBlJzogKHNpZGUgPT0gJ2J1eScpID8gJ0J1eUJ0YycgOiAnU2VsQnRjJyxcbiAgICAgICAgICAgICdJc01hcmtldE9yZGVyJzogKHR5cGUgPT0gJ21hcmtldCcpID8gMSA6IDAsXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlID09ICdtYXJrZXQnKSB7XG4gICAgICAgICAgICBpZiAoc2lkZSA9PSAnYnV5JylcbiAgICAgICAgICAgICAgICBvcmRlclsnVG90YWwnXSA9IGFtb3VudDtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBvcmRlclsnQW1vdW50J10gPSBhbW91bnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvcmRlclsnUHJpY2UnXSA9IHByaWNlO1xuICAgICAgICAgICAgb3JkZXJbJ0Ftb3VudCddID0gYW1vdW50O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXNbbWV0aG9kXSAodGhpcy5leHRlbmQgKG9yZGVyLCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnaWQnXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0Q2FuY2VsT3JkZXIgKHsgJ2lkJzogaWQgfSk7XG4gICAgfSxcblxuICAgIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHRoaXMuaWQgPT0gJ2J0Y3RyYWRlcicpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgaXMgYW4gYWJzdHJhY3QgYmFzZSBBUEkgZm9yIEJUQ0V4Y2hhbmdlLCBCVENUdXJrJyk7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgJy8nICsgcGF0aDtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChwYXJhbXMpLmxlbmd0aClcbiAgICAgICAgICAgICAgICB1cmwgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHBhcmFtcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpLnRvU3RyaW5nO1xuICAgICAgICAgICAgYm9keSA9IHRoaXMudXJsZW5jb2RlIChwYXJhbXMpO1xuICAgICAgICAgICAgbGV0IHNlY3JldCA9IHRoaXMuYmFzZTY0VG9TdHJpbmcgKHRoaXMuc2VjcmV0KTtcbiAgICAgICAgICAgIGxldCBhdXRoID0gdGhpcy5hcGlLZXkgKyBub25jZTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ1gtUENLJzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ1gtU3RhbXAnOiBub25jZS50b1N0cmluZyAoKSxcbiAgICAgICAgICAgICAgICAnWC1TaWduYXR1cmUnOiB0aGlzLmhtYWMgKHRoaXMuZW5jb2RlIChhdXRoKSwgc2VjcmV0LCAnc2hhMjU2JywgJ2Jhc2U2NCcpLFxuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICAgICAgICAnQ29udGVudC1MZW5ndGgnOiBib2R5Lmxlbmd0aCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBidGNleGNoYW5nZSA9IGV4dGVuZCAoYnRjdHJhZGVyLCB7XG5cbiAgICAnaWQnOiAnYnRjZXhjaGFuZ2UnLFxuICAgICduYW1lJzogJ0JUQ0V4Y2hhbmdlJyxcbiAgICAnY291bnRyaWVzJzogJ1BIJywgLy8gUGhpbGlwcGluZXNcbiAgICAncmF0ZUxpbWl0JzogMTUwMCxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yNzk5MzA1Mi00YzkyOTExYS02NGFhLTExZTctOTZkOC1lYzZhYzM0MzU3NTcuanBnJyxcbiAgICAgICAgJ2FwaSc6ICdodHRwczovL3d3dy5idGNleGNoYW5nZS5waC9hcGknLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vd3d3LmJ0Y2V4Y2hhbmdlLnBoJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL2dpdGh1Yi5jb20vQlRDVHJhZGVyL2Jyb2tlci1hcGktZG9jcycsXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9QSFAnOiB7ICdpZCc6ICdCVEMvUEhQJywgJ3N5bWJvbCc6ICdCVEMvUEhQJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ1BIUCcgfSxcbiAgICB9LFxufSlcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgYnRjdHJhZGV1YSA9IHtcblxuICAgICdpZCc6ICdidGN0cmFkZXVhJyxcbiAgICAnbmFtZSc6ICdCVEMgVHJhZGUgVUEnLFxuICAgICdjb3VudHJpZXMnOiAnVUEnLCAvLyBVa3JhaW5lLFxuICAgICdyYXRlTGltaXQnOiAzMDAwLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3OTQxNDgzLTc5ZmM3MzUwLTYyZDktMTFlNy05ZjYxLWFjNDdmMjhmY2Q5Ni5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vYnRjLXRyYWRlLmNvbS51YS9hcGknLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vYnRjLXRyYWRlLmNvbS51YScsXG4gICAgICAgICdkb2MnOiAnaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vZG9jdW1lbnQvZC8xb2NZQTB5TXlfUlhkNTYxc2ZHM3FFUFo4MGt5bGwzNkhVeHZDUmU1R2JoRS9lZGl0JyxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdkZWFscy97c3ltYm9sfScsXG4gICAgICAgICAgICAgICAgJ3RyYWRlcy9zZWxsL3tzeW1ib2x9JyxcbiAgICAgICAgICAgICAgICAndHJhZGVzL2J1eS97c3ltYm9sfScsXG4gICAgICAgICAgICAgICAgJ2phcGFuX3N0YXQvaGlnaC97c3ltYm9sfScsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAncHJpdmF0ZSc6IHtcbiAgICAgICAgICAgICdwb3N0JzogW1xuICAgICAgICAgICAgICAgICdhdXRoJyxcbiAgICAgICAgICAgICAgICAnYXNrL3tzeW1ib2x9JyxcbiAgICAgICAgICAgICAgICAnYmFsYW5jZScsXG4gICAgICAgICAgICAgICAgJ2JpZC97c3ltYm9sfScsXG4gICAgICAgICAgICAgICAgJ2J1eS97c3ltYm9sfScsXG4gICAgICAgICAgICAgICAgJ215X29yZGVycy97c3ltYm9sfScsXG4gICAgICAgICAgICAgICAgJ29yZGVyL3N0YXR1cy97aWR9JyxcbiAgICAgICAgICAgICAgICAncmVtb3ZlL29yZGVyL3tpZH0nLFxuICAgICAgICAgICAgICAgICdzZWxsL3tzeW1ib2x9JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9VQUgnOiB7ICdpZCc6ICdidGNfdWFoJywgJ3N5bWJvbCc6ICdCVEMvVUFIJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ1VBSCcgfSxcbiAgICAgICAgJ0VUSC9VQUgnOiB7ICdpZCc6ICdldGhfdWFoJywgJ3N5bWJvbCc6ICdFVEgvVUFIJywgJ2Jhc2UnOiAnRVRIJywgJ3F1b3RlJzogJ1VBSCcgfSxcbiAgICAgICAgJ0xUQy9VQUgnOiB7ICdpZCc6ICdsdGNfdWFoJywgJ3N5bWJvbCc6ICdMVEMvVUFIJywgJ2Jhc2UnOiAnTFRDJywgJ3F1b3RlJzogJ1VBSCcgfSxcbiAgICAgICAgJ0RPR0UvVUFIJzogeyAnaWQnOiAnZG9nZV91YWgnLCAnc3ltYm9sJzogJ0RPR0UvVUFIJywgJ2Jhc2UnOiAnRE9HRScsICdxdW90ZSc6ICdVQUgnIH0sXG4gICAgICAgICdEQVNIL1VBSCc6IHsgJ2lkJzogJ2Rhc2hfdWFoJywgJ3N5bWJvbCc6ICdEQVNIL1VBSCcsICdiYXNlJzogJ0RBU0gnLCAncXVvdGUnOiAnVUFIJyB9LFxuICAgICAgICAnU0lCL1VBSCc6IHsgJ2lkJzogJ3NpYl91YWgnLCAnc3ltYm9sJzogJ1NJQi9VQUgnLCAnYmFzZSc6ICdTSUInLCAncXVvdGUnOiAnVUFIJyB9LFxuICAgICAgICAnS1JCL1VBSCc6IHsgJ2lkJzogJ2tyYl91YWgnLCAnc3ltYm9sJzogJ0tSQi9VQUgnLCAnYmFzZSc6ICdLUkInLCAncXVvdGUnOiAnVUFIJyB9LFxuICAgICAgICAnTlZDL1VBSCc6IHsgJ2lkJzogJ252Y191YWgnLCAnc3ltYm9sJzogJ05WQy9VQUgnLCAnYmFzZSc6ICdOVkMnLCAncXVvdGUnOiAnVUFIJyB9LFxuICAgICAgICAnTFRDL0JUQyc6IHsgJ2lkJzogJ2x0Y19idGMnLCAnc3ltYm9sJzogJ0xUQy9CVEMnLCAnYmFzZSc6ICdMVEMnLCAncXVvdGUnOiAnQlRDJyB9LFxuICAgICAgICAnTlZDL0JUQyc6IHsgJ2lkJzogJ252Y19idGMnLCAnc3ltYm9sJzogJ05WQy9CVEMnLCAnYmFzZSc6ICdOVkMnLCAncXVvdGUnOiAnQlRDJyB9LFxuICAgICAgICAnSVRJL1VBSCc6IHsgJ2lkJzogJ2l0aV91YWgnLCAnc3ltYm9sJzogJ0lUSS9VQUgnLCAnYmFzZSc6ICdJVEknLCAncXVvdGUnOiAnVUFIJyB9LFxuICAgICAgICAnRE9HRS9CVEMnOiB7ICdpZCc6ICdkb2dlX2J0YycsICdzeW1ib2wnOiAnRE9HRS9CVEMnLCAnYmFzZSc6ICdET0dFJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ0RBU0gvQlRDJzogeyAnaWQnOiAnZGFzaF9idGMnLCAnc3ltYm9sJzogJ0RBU0gvQlRDJywgJ2Jhc2UnOiAnREFTSCcsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgfSxcblxuICAgIHNpZ25JbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0QXV0aCAoKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdEJhbGFuY2UgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogcmVzcG9uc2UgfTtcbiAgICAgICAgaWYgKCdhY2NvdW50cycgaW4gcmVzdWx0KSB7XG4gICAgICAgICAgICBsZXQgYWNjb3VudHMgPSByZXNwb25zZVsnYWNjb3VudHMnXTtcbiAgICAgICAgICAgIGZvciAobGV0IGIgPSAwOyBiIDwgYWNjb3VudHMubGVuZ3RoOyBiKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgYWNjb3VudCA9IGFjY291bnRzW2JdO1xuICAgICAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IGFjY291bnRbJ2N1cnJlbmN5J107XG4gICAgICAgICAgICAgICAgbGV0IGJhbGFuY2UgPSBwYXJzZUZsb2F0IChhY2NvdW50WydiYWxhbmNlJ10pO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtjdXJyZW5jeV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICdmcmVlJzogYmFsYW5jZSxcbiAgICAgICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICd0b3RhbCc6IGJhbGFuY2UsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgYmlkcyA9IGF3YWl0IHRoaXMucHVibGljR2V0VHJhZGVzQnV5U3ltYm9sICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ3N5bWJvbCc6IHBbJ2lkJ10sXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgYXNrcyA9IGF3YWl0IHRoaXMucHVibGljR2V0VHJhZGVzU2VsbFN5bWJvbCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiBwWydpZCddLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IHtcbiAgICAgICAgICAgICdiaWRzJzogW10sXG4gICAgICAgICAgICAnYXNrcyc6IFtdLFxuICAgICAgICB9O1xuICAgICAgICBpZiAoYmlkcykge1xuICAgICAgICAgICAgaWYgKCdsaXN0JyBpbiBiaWRzKVxuICAgICAgICAgICAgICAgIG9yZGVyYm9va1snYmlkcyddID0gYmlkc1snbGlzdCddO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhc2tzKSB7XG4gICAgICAgICAgICBpZiAoJ2xpc3QnIGluIGFza3MpXG4gICAgICAgICAgICAgICAgb3JkZXJib29rWydhc2tzJ10gPSBhc2tzWydsaXN0J107XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAob3JkZXJbJ3ByaWNlJ10pO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBwYXJzZUZsb2F0IChvcmRlclsnY3VycmVuY3lfdHJhZGUnXSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3NpZGVdLnB1c2ggKFsgcHJpY2UsIGFtb3VudCBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0SmFwYW5TdGF0SGlnaFN5bWJvbCAoe1xuICAgICAgICAgICAgJ3N5bWJvbCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgdGlja2VyID0gcmVzcG9uc2VbJ3RyYWRlcyddO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbG93JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2JpZCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhc2snOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgICAgIGxldCB0aWNrZXJMZW5ndGggPSB0aWNrZXIubGVuZ3RoO1xuICAgICAgICBpZiAodGlja2VyTGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgbGV0IHN0YXJ0ID0gTWF0aC5tYXggKHRpY2tlckxlbmd0aCAtIDQ4LCAwKTtcbiAgICAgICAgICAgIGZvciAobGV0IHQgPSBzdGFydDsgdCA8IHRpY2tlci5sZW5ndGg7IHQrKykge1xuICAgICAgICAgICAgICAgIGxldCBjYW5kbGUgPSB0aWNrZXJbdF07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByZXN1bHRbJ29wZW4nXSA9PSAndW5kZWZpbmVkJylcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0WydvcGVuJ10gPSBjYW5kbGVbMV07XG4gICAgICAgICAgICAgICAgaWYgKCh0eXBlb2YgcmVzdWx0WydoaWdoJ10gPT0gJ3VuZGVmaW5lZCcpIHx8IChyZXN1bHRbJ2hpZ2gnXSA8IGNhbmRsZVsyXSkpXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdFsnaGlnaCddID0gY2FuZGxlWzJdO1xuICAgICAgICAgICAgICAgIGlmICgodHlwZW9mIHJlc3VsdFsnbG93J10gPT0gJ3VuZGVmaW5lZCcpIHx8IChyZXN1bHRbJ2xvdyddID4gY2FuZGxlWzNdKSlcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0Wydsb3cnXSA9IGNhbmRsZVszXTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJlc3VsdFsncXVvdGVWb2x1bWUnXSA9PSAndW5kZWZpbmVkJylcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0WydxdW90ZVZvbHVtZSddID0gLWNhbmRsZVs1XTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdFsncXVvdGVWb2x1bWUnXSAtPSBjYW5kbGVbNV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgbGFzdCA9IHRpY2tlckxlbmd0aCAtIDE7XG4gICAgICAgICAgICByZXN1bHRbJ2Nsb3NlJ10gPSB0aWNrZXJbbGFzdF1bNF07XG4gICAgICAgICAgICByZXN1bHRbJ3F1b3RlVm9sdW1lJ10gPSAtMSAqIHJlc3VsdFsncXVvdGVWb2x1bWUnXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdGhpcy5wdWJsaWNHZXREZWFsc1N5bWJvbCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgaWYgKHR5cGUgPT0gJ21hcmtldCcpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgYWxsb3dzIGxpbWl0IG9yZGVycyBvbmx5Jyk7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCBtZXRob2QgPSAncHJpdmF0ZVBvc3QnICsgdGhpcy5jYXBpdGFsaXplIChzaWRlKSArICdJZCc7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdjb3VudCc6IGFtb3VudCxcbiAgICAgICAgICAgICdjdXJyZW5jeTEnOiBwWydxdW90ZSddLFxuICAgICAgICAgICAgJ2N1cnJlbmN5JzogcFsnYmFzZSddLFxuICAgICAgICAgICAgJ3ByaWNlJzogcHJpY2UsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB0aGlzW21ldGhvZF0gKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdFJlbW92ZU9yZGVySWQgKHsgJ2lkJzogaWQgfSk7XG4gICAgfSxcblxuICAgIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ10gKyAnLycgKyB0aGlzLmltcGxvZGVQYXJhbXMgKHBhdGgsIHBhcmFtcyk7XG4gICAgICAgIGxldCBxdWVyeSA9IHRoaXMub21pdCAocGFyYW1zLCB0aGlzLmV4dHJhY3RQYXJhbXMgKHBhdGgpKTtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChxdWVyeSkubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSB0aGlzLmltcGxvZGVQYXJhbXMgKHBhdGgsIHF1ZXJ5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCk7XG4gICAgICAgICAgICBib2R5ID0gdGhpcy51cmxlbmNvZGUgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAgICAgJ291dF9vcmRlcl9pZCc6IG5vbmNlLFxuICAgICAgICAgICAgICAgICdub25jZSc6IG5vbmNlLFxuICAgICAgICAgICAgfSwgcXVlcnkpKTtcbiAgICAgICAgICAgIGxldCBhdXRoID0gYm9keSArIHRoaXMuc2VjcmV0O1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAncHVibGljLWtleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgICAgICdhcGktc2lnbic6IHRoaXMuaGFzaCAodGhpcy5lbmNvZGUgKGF1dGgpLCAnc2hhMjU2JyksXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgICAgICAgICdDb250ZW50LUxlbmd0aCc6IGJvZHkubGVuZ3RoLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGJ0Y3R1cmsgPSBleHRlbmQgKGJ0Y3RyYWRlciwge1xuXG4gICAgJ2lkJzogJ2J0Y3R1cmsnLFxuICAgICduYW1lJzogJ0JUQ1R1cmsnLFxuICAgICdjb3VudHJpZXMnOiAnVFInLCAvLyBUdXJrZXlcbiAgICAncmF0ZUxpbWl0JzogMTAwMCxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yNzk5MjcwOS0xOGUxNTY0Ni02NGEzLTExZTctOWZhMi1iMDk1MGVjNzcxMmYuanBnJyxcbiAgICAgICAgJ2FwaSc6ICdodHRwczovL3d3dy5idGN0dXJrLmNvbS9hcGknLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vd3d3LmJ0Y3R1cmsuY29tJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL2dpdGh1Yi5jb20vQlRDVHJhZGVyL2Jyb2tlci1hcGktZG9jcycsXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9UUlknOiB7ICdpZCc6ICdCVEMvVFJZJywgJ3N5bWJvbCc6ICdCVEMvVFJZJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ1RSWScgfSxcbiAgICB9LFxufSlcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgYnRjeCA9IHtcblxuICAgICdpZCc6ICdidGN4JyxcbiAgICAnbmFtZSc6ICdCVENYJyxcbiAgICAnY291bnRyaWVzJzogWyAnSVMnLCAnVVMnLCAnRVUnIF0sXG4gICAgJ3JhdGVMaW1pdCc6IDE1MDAsIC8vIHN1cHBvcnQgaW4gZW5nbGlzaCBpcyB2ZXJ5IHBvb3IsIHVuYWJsZSB0byB0ZWxsIHJhdGUgbGltaXRzXG4gICAgJ3ZlcnNpb24nOiAndjEnLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2Mzg1LTlmZGNjOThjLTVlZDYtMTFlNy04ZjE0LTY2ZDVlNWNkNDdlNi5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vYnRjLXguaXMvYXBpJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL2J0Yy14LmlzJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL2J0Yy14LmlzL2N1c3RvbS9hcGktZG9jdW1lbnQuaHRtbCcsXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnZGVwdGgve2lkfS97bGltaXR9JyxcbiAgICAgICAgICAgICAgICAndGlja2VyL3tpZH0nLFxuICAgICAgICAgICAgICAgICd0cmFkZS97aWR9L3tsaW1pdH0nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnYmFsYW5jZScsXG4gICAgICAgICAgICAgICAgJ2NhbmNlbCcsXG4gICAgICAgICAgICAgICAgJ2hpc3RvcnknLFxuICAgICAgICAgICAgICAgICdvcmRlcicsXG4gICAgICAgICAgICAgICAgJ3JlZGVlbScsXG4gICAgICAgICAgICAgICAgJ3RyYWRlJyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXcnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgICdtYXJrZXRzJzoge1xuICAgICAgICAnQlRDL1VTRCc6IHsgJ2lkJzogJ2J0Yy91c2QnLCAnc3ltYm9sJzogJ0JUQy9VU0QnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnVVNEJyB9LFxuICAgICAgICAnQlRDL0VVUic6IHsgJ2lkJzogJ2J0Yy9ldXInLCAnc3ltYm9sJzogJ0JUQy9FVVInLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnRVVSJyB9LFxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBsZXQgYmFsYW5jZXMgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0QmFsYW5jZSAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiBiYWxhbmNlcyB9O1xuICAgICAgICBsZXQgY3VycmVuY2llcyA9IE9iamVjdC5rZXlzIChiYWxhbmNlcyk7XG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgY3VycmVuY2llcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gY3VycmVuY2llc1tjXTtcbiAgICAgICAgICAgIGxldCB1cHBlcmNhc2UgPSBjdXJyZW5jeS50b1VwcGVyQ2FzZSAoKTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogYmFsYW5jZXNbY3VycmVuY3ldLFxuICAgICAgICAgICAgICAgICd1c2VkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IGJhbGFuY2VzW2N1cnJlbmN5XSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXN1bHRbdXBwZXJjYXNlXSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IGF3YWl0IHRoaXMucHVibGljR2V0RGVwdGhJZExpbWl0ICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2lkJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICdsaW1pdCc6IDEwMDAsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IFtdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaWRlcyA9IFsgJ2JpZHMnLCAnYXNrcycgXTtcbiAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBzaWRlcy5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1tzXTtcbiAgICAgICAgICAgIGxldCBvcmRlcnMgPSBvcmRlcmJvb2tbc2lkZV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBvcmRlciA9IG9yZGVyc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgcHJpY2UgPSBvcmRlclsncHJpY2UnXTtcbiAgICAgICAgICAgICAgICBsZXQgYW1vdW50ID0gb3JkZXJbJ2Ftb3VudCddO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtzaWRlXS5wdXNoIChbIHByaWNlLCBhbW91bnQgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBsZXQgdGlja2VyID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRUaWNrZXJJZCAoe1xuICAgICAgICAgICAgJ2lkJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aWNrZXJbJ3RpbWUnXSAqIDEwMDA7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2hpZ2gnXSksXG4gICAgICAgICAgICAnbG93JzogcGFyc2VGbG9hdCAodGlja2VyWydsb3cnXSksXG4gICAgICAgICAgICAnYmlkJzogcGFyc2VGbG9hdCAodGlja2VyWydzZWxsJ10pLFxuICAgICAgICAgICAgJ2Fzayc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYnV5J10pLFxuICAgICAgICAgICAgJ3Z3YXAnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnb3Blbic6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjbG9zZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdmaXJzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsYXN0JzogcGFyc2VGbG9hdCAodGlja2VyWydsYXN0J10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndm9sdW1lJ10pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldFRyYWRlSWRMaW1pdCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdpZCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgICAgICAnbGltaXQnOiAxMDAwLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdFRyYWRlICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ3R5cGUnOiBzaWRlLnRvVXBwZXJDYXNlICgpLFxuICAgICAgICAgICAgJ21hcmtldCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgICAgICAnYW1vdW50JzogYW1vdW50LFxuICAgICAgICAgICAgJ3ByaWNlJzogcHJpY2UsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXNwb25zZSxcbiAgICAgICAgICAgICdpZCc6IHJlc3BvbnNlWydvcmRlciddWydpZCddLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJpdmF0ZVBvc3RDYW5jZWwgKHsgJ29yZGVyJzogaWQgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ10gKyAnLycgKyB0aGlzLnZlcnNpb24gKyAnLyc7XG4gICAgICAgIGlmIChhcGkgPT0gJ3B1YmxpYycpIHtcbiAgICAgICAgICAgIHVybCArPSB0aGlzLmltcGxvZGVQYXJhbXMgKHBhdGgsIHBhcmFtcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpO1xuICAgICAgICAgICAgdXJsICs9IGFwaTtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLnVybGVuY29kZSAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICAgICAnTWV0aG9kJzogcGF0aC50b1VwcGVyQ2FzZSAoKSxcbiAgICAgICAgICAgICAgICAnTm9uY2UnOiBub25jZSxcbiAgICAgICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgICAgICAgJ0tleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgICAgICdTaWduYXR1cmUnOiB0aGlzLmhtYWMgKHRoaXMuZW5jb2RlIChib2R5KSwgdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSwgJ3NoYTUxMicpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgICAgIGlmICgnZXJyb3InIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlWydlcnJvciddKSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBidGVyID0ge1xuICAgICdpZCc6ICdidGVyJyxcbiAgICAnbmFtZSc6ICdCdGVyJyxcbiAgICAnY291bnRyaWVzJzogWyAnVkcnLCAnQ04nIF0sIC8vIEJyaXRpc2ggVmlyZ2luIElzbGFuZHMsIENoaW5hXG4gICAgJ3ZlcnNpb24nOiAnMicsXG4gICAgJ2hhc0ZldGNoVGlja2Vycyc6IHRydWUsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc5ODA0NzktY2ZhMzE4OGMtNjM4Ny0xMWU3LTgxOTEtOTNmYzQxODRiYTVjLmpwZycsXG4gICAgICAgICdhcGknOiB7XG4gICAgICAgICAgICAncHVibGljJzogJ2h0dHBzOi8vZGF0YS5idGVyLmNvbS9hcGknLFxuICAgICAgICAgICAgJ3ByaXZhdGUnOiAnaHR0cHM6Ly9hcGkuYnRlci5jb20vYXBpJyxcbiAgICAgICAgfSxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL2J0ZXIuY29tJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL2J0ZXIuY29tL2FwaTInLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ3BhaXJzJyxcbiAgICAgICAgICAgICAgICAnbWFya2V0aW5mbycsXG4gICAgICAgICAgICAgICAgJ21hcmtldGxpc3QnLFxuICAgICAgICAgICAgICAgICd0aWNrZXJzJyxcbiAgICAgICAgICAgICAgICAndGlja2VyL3tpZH0nLFxuICAgICAgICAgICAgICAgICdvcmRlckJvb2sve2lkfScsXG4gICAgICAgICAgICAgICAgJ3RyYWRlL3tpZH0nLFxuICAgICAgICAgICAgICAgICd0cmFkZUhpc3Rvcnkve2lkfScsXG4gICAgICAgICAgICAgICAgJ3RyYWRlSGlzdG9yeS97aWR9L3t0aWR9JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2JhbGFuY2VzJyxcbiAgICAgICAgICAgICAgICAnZGVwb3NpdEFkZHJlc3MnLFxuICAgICAgICAgICAgICAgICduZXdBZGRyZXNzJyxcbiAgICAgICAgICAgICAgICAnZGVwb3NpdHNXaXRoZHJhd2FscycsXG4gICAgICAgICAgICAgICAgJ2J1eScsXG4gICAgICAgICAgICAgICAgJ3NlbGwnLFxuICAgICAgICAgICAgICAgICdjYW5jZWxPcmRlcicsXG4gICAgICAgICAgICAgICAgJ2NhbmNlbEFsbE9yZGVycycsXG4gICAgICAgICAgICAgICAgJ2dldE9yZGVyJyxcbiAgICAgICAgICAgICAgICAnb3Blbk9yZGVycycsXG4gICAgICAgICAgICAgICAgJ3RyYWRlSGlzdG9yeScsXG4gICAgICAgICAgICAgICAgJ3dpdGhkcmF3JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoTWFya2V0cyAoKSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0TWFya2V0bGlzdCAoKTtcbiAgICAgICAgbGV0IG1hcmtldHMgPSByZXNwb25zZVsnZGF0YSddO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgbWFya2V0cy5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IG1hcmtldHNbcF07XG4gICAgICAgICAgICBsZXQgaWQgPSBtYXJrZXRbJ3BhaXInXTtcbiAgICAgICAgICAgIGxldCBiYXNlID0gbWFya2V0WydjdXJyX2EnXTtcbiAgICAgICAgICAgIGxldCBxdW90ZSA9IG1hcmtldFsnY3Vycl9iJ107XG4gICAgICAgICAgICBiYXNlID0gdGhpcy5jb21tb25DdXJyZW5jeUNvZGUgKGJhc2UpO1xuICAgICAgICAgICAgcXVvdGUgPSB0aGlzLmNvbW1vbkN1cnJlbmN5Q29kZSAocXVvdGUpO1xuICAgICAgICAgICAgbGV0IHN5bWJvbCA9IGJhc2UgKyAnLycgKyBxdW90ZTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoICh7XG4gICAgICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgICAgICAgICAgJ3N5bWJvbCc6IHN5bWJvbCxcbiAgICAgICAgICAgICAgICAnYmFzZSc6IGJhc2UsXG4gICAgICAgICAgICAgICAgJ3F1b3RlJzogcXVvdGUsXG4gICAgICAgICAgICAgICAgJ2luZm8nOiBtYXJrZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgYmFsYW5jZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RCYWxhbmNlcyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiBiYWxhbmNlIH07XG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgdGhpcy5jdXJyZW5jaWVzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSB0aGlzLmN1cnJlbmNpZXNbY107XG4gICAgICAgICAgICBsZXQgY29kZSA9IHRoaXMuY29tbW9uQ3VycmVuY3lDb2RlIChjdXJyZW5jeSk7XG4gICAgICAgICAgICBsZXQgYWNjb3VudCA9IHtcbiAgICAgICAgICAgICAgICAnZnJlZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAndXNlZCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAndG90YWwnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKCdhdmFpbGFibGUnIGluIGJhbGFuY2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVuY3kgaW4gYmFsYW5jZVsnYXZhaWxhYmxlJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgYWNjb3VudFsnZnJlZSddID0gcGFyc2VGbG9hdCAoYmFsYW5jZVsnYXZhaWxhYmxlJ11bY3VycmVuY3ldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoJ2xvY2tlZCcgaW4gYmFsYW5jZSkge1xuICAgICAgICAgICAgICAgIGlmIChjdXJyZW5jeSBpbiBiYWxhbmNlWydsb2NrZWQnXSkge1xuICAgICAgICAgICAgICAgICAgICBhY2NvdW50Wyd1c2VkJ10gPSBwYXJzZUZsb2F0IChiYWxhbmNlWydsb2NrZWQnXVtjdXJyZW5jeV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFjY291bnRbJ3RvdGFsJ10gPSB0aGlzLnN1bSAoYWNjb3VudFsnZnJlZSddLCBhY2NvdW50Wyd1c2VkJ10pO1xuICAgICAgICAgICAgcmVzdWx0W2NvZGVdID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRPcmRlckJvb2tJZCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdpZCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IFtdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaWRlcyA9IFsgJ2JpZHMnLCAnYXNrcycgXTtcbiAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBzaWRlcy5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1tzXTtcbiAgICAgICAgICAgIGxldCBvcmRlcnMgPSBvcmRlcmJvb2tbc2lkZV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBvcmRlciA9IG9yZGVyc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgcHJpY2UgPSBwYXJzZUZsb2F0IChvcmRlclswXSk7XG4gICAgICAgICAgICAgICAgbGV0IGFtb3VudCA9IHBhcnNlRmxvYXQgKG9yZGVyWzFdKTtcbiAgICAgICAgICAgICAgICByZXN1bHRbc2lkZV0ucHVzaCAoWyBwcmljZSwgYW1vdW50IF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlc3VsdFsnYXNrcyddID0gdGhpcy5zb3J0QnkgKHJlc3VsdFsnYXNrcyddLCAwKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgcGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaDI0aHInXSksXG4gICAgICAgICAgICAnbG93JzogcGFyc2VGbG9hdCAodGlja2VyWydsb3cyNGhyJ10pLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaGVzdEJpZCddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvd2VzdEFzayddKSxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdCddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3BlcmNlbnRDaGFuZ2UnXSksXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2Jhc2VWb2x1bWUnXSksXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3F1b3RlVm9sdW1lJ10pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VycyAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCB0aWNrZXJzID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRUaWNrZXJzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge307XG4gICAgICAgIGxldCBpZHMgPSBPYmplY3Qua2V5cyAodGlja2Vycyk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgaWQgPSBpZHNbaV07XG4gICAgICAgICAgICBsZXQgWyBiYXNlSWQsIHF1b3RlSWQgXSA9IGlkLnNwbGl0ICgnXycpO1xuICAgICAgICAgICAgbGV0IGJhc2UgPSBiYXNlSWQudG9VcHBlckNhc2UgKCk7XG4gICAgICAgICAgICBsZXQgcXVvdGUgPSBxdW90ZUlkLnRvVXBwZXJDYXNlICgpO1xuICAgICAgICAgICAgYmFzZSA9IHRoaXMuY29tbW9uQ3VycmVuY3lDb2RlIChiYXNlKTtcbiAgICAgICAgICAgIHF1b3RlID0gdGhpcy5jb21tb25DdXJyZW5jeUNvZGUgKHF1b3RlKTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBiYXNlICsgJy8nICsgcXVvdGU7XG4gICAgICAgICAgICBsZXQgdGlja2VyID0gdGlja2Vyc1tpZF07XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKHN5bWJvbCBpbiB0aGlzLm1hcmtldHMpXG4gICAgICAgICAgICAgICAgbWFya2V0ID0gdGhpcy5tYXJrZXRzW3N5bWJvbF07XG4gICAgICAgICAgICBpZiAoaWQgaW4gdGhpcy5tYXJrZXRzX2J5X2lkKVxuICAgICAgICAgICAgICAgIG1hcmtldCA9IHRoaXMubWFya2V0c19ieV9pZFtpZF07XG4gICAgICAgICAgICByZXN1bHRbc3ltYm9sXSA9IHRoaXMucGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCB0aWNrZXIgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFRpY2tlcklkICh7XG4gICAgICAgICAgICAnaWQnOiBwWydpZCddLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VUaWNrZXIgKHRpY2tlciwgcCk7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldFRyYWRlSGlzdG9yeUlkICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2lkJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGlmICh0eXBlID09ICdtYXJrZXQnKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnIGFsbG93cyBsaW1pdCBvcmRlcnMgb25seScpO1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgbWV0aG9kID0gJ3ByaXZhdGVQb3N0JyArIHRoaXMuY2FwaXRhbGl6ZSAoc2lkZSk7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdjdXJyZW5jeVBhaXInOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICAgICAgJ3JhdGUnOiBwcmljZSxcbiAgICAgICAgICAgICdhbW91bnQnOiBhbW91bnQsXG4gICAgICAgIH07XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXNbbWV0aG9kXSAodGhpcy5leHRlbmQgKG9yZGVyLCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnb3JkZXJOdW1iZXInXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0Q2FuY2VsT3JkZXIgKHsgJ29yZGVyTnVtYmVyJzogaWQgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHByZWZpeCA9IChhcGkgPT0gJ3ByaXZhdGUnKSA/IChhcGkgKyAnLycpIDogJyc7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddW2FwaV0gKyB0aGlzLnZlcnNpb24gKyAnLzEvJyArIHByZWZpeCArIHRoaXMuaW1wbG9kZVBhcmFtcyAocGF0aCwgcGFyYW1zKTtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5vbWl0IChwYXJhbXMsIHRoaXMuZXh0cmFjdFBhcmFtcyAocGF0aCkpO1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHF1ZXJ5KS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChxdWVyeSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpO1xuICAgICAgICAgICAgbGV0IHJlcXVlc3QgPSB7ICdub25jZSc6IG5vbmNlIH07XG4gICAgICAgICAgICBib2R5ID0gdGhpcy51cmxlbmNvZGUgKHRoaXMuZXh0ZW5kIChyZXF1ZXN0LCBxdWVyeSkpO1xuICAgICAgICAgICAgbGV0IHNpZ25hdHVyZSA9IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKGJvZHkpLCB0aGlzLmVuY29kZSAodGhpcy5zZWNyZXQpLCAnc2hhNTEyJyk7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdLZXknOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgICAgICAnU2lnbic6IHNpZ25hdHVyZSxcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtTGVuZ3RoJzogYm9keS5sZW5ndGgudG9TdHJpbmcgKCksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdyZXN1bHQnIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlWydyZXN1bHQnXSAhPSAndHJ1ZScpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBieGludGggPSB7XG5cbiAgICAnaWQnOiAnYnhpbnRoJyxcbiAgICAnbmFtZSc6ICdCWC5pbi50aCcsXG4gICAgJ2NvdW50cmllcyc6ICdUSCcsIC8vIFRoYWlsYW5kXG4gICAgJ3JhdGVMaW1pdCc6IDE1MDAsXG4gICAgJ2hhc0ZldGNoVGlja2Vycyc6IHRydWUsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc3NjY0MTItNTY3YjFlYjQtNWVkNy0xMWU3LTk0YTgtZmY2YTM4ODRmNmM1LmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly9ieC5pbi50aC9hcGknLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vYnguaW4udGgnLFxuICAgICAgICAnZG9jJzogJ2h0dHBzOi8vYnguaW4udGgvaW5mby9hcGknLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJycsIC8vIHRpY2tlclxuICAgICAgICAgICAgICAgICdvcHRpb25zJyxcbiAgICAgICAgICAgICAgICAnb3B0aW9uYm9vaycsXG4gICAgICAgICAgICAgICAgJ29yZGVyYm9vaycsXG4gICAgICAgICAgICAgICAgJ3BhaXJpbmcnLFxuICAgICAgICAgICAgICAgICd0cmFkZScsXG4gICAgICAgICAgICAgICAgJ3RyYWRlaGlzdG9yeScsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAncHJpdmF0ZSc6IHtcbiAgICAgICAgICAgICdwb3N0JzogW1xuICAgICAgICAgICAgICAgICdiYWxhbmNlJyxcbiAgICAgICAgICAgICAgICAnYmlsbGVyJyxcbiAgICAgICAgICAgICAgICAnYmlsbGdyb3VwJyxcbiAgICAgICAgICAgICAgICAnYmlsbHBheScsXG4gICAgICAgICAgICAgICAgJ2NhbmNlbCcsXG4gICAgICAgICAgICAgICAgJ2RlcG9zaXQnLFxuICAgICAgICAgICAgICAgICdnZXRvcmRlcnMnLFxuICAgICAgICAgICAgICAgICdoaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAnb3B0aW9uLWlzc3VlJyxcbiAgICAgICAgICAgICAgICAnb3B0aW9uLWJpZCcsXG4gICAgICAgICAgICAgICAgJ29wdGlvbi1zZWxsJyxcbiAgICAgICAgICAgICAgICAnb3B0aW9uLW15aXNzdWUnLFxuICAgICAgICAgICAgICAgICdvcHRpb24tbXliaWQnLFxuICAgICAgICAgICAgICAgICdvcHRpb24tbXlvcHRpb25zJyxcbiAgICAgICAgICAgICAgICAnb3B0aW9uLWV4ZXJjaXNlJyxcbiAgICAgICAgICAgICAgICAnb3B0aW9uLWNhbmNlbCcsXG4gICAgICAgICAgICAgICAgJ29wdGlvbi1oaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAnb3JkZXInLFxuICAgICAgICAgICAgICAgICd3aXRoZHJhd2FsJyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXdhbC1oaXN0b3J5JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoTWFya2V0cyAoKSB7XG4gICAgICAgIGxldCBtYXJrZXRzID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRQYWlyaW5nICgpO1xuICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzIChtYXJrZXRzKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGxldCBwID0gMDsgcCA8IGtleXMubGVuZ3RoOyBwKyspIHtcbiAgICAgICAgICAgIGxldCBtYXJrZXQgPSBtYXJrZXRzW2tleXNbcF1dO1xuICAgICAgICAgICAgbGV0IGlkID0gbWFya2V0WydwYWlyaW5nX2lkJ10udG9TdHJpbmcgKCk7XG4gICAgICAgICAgICBsZXQgYmFzZSA9IG1hcmtldFsncHJpbWFyeV9jdXJyZW5jeSddO1xuICAgICAgICAgICAgbGV0IHF1b3RlID0gbWFya2V0WydzZWNvbmRhcnlfY3VycmVuY3knXTtcbiAgICAgICAgICAgIGJhc2UgPSB0aGlzLmNvbW1vbkN1cnJlbmN5Q29kZSAoYmFzZSk7XG4gICAgICAgICAgICBxdW90ZSA9IHRoaXMuY29tbW9uQ3VycmVuY3lDb2RlIChxdW90ZSk7XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gYmFzZSArICcvJyArIHF1b3RlO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2ggKHtcbiAgICAgICAgICAgICAgICAnaWQnOiBpZCxcbiAgICAgICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgICAgICdiYXNlJzogYmFzZSxcbiAgICAgICAgICAgICAgICAncXVvdGUnOiBxdW90ZSxcbiAgICAgICAgICAgICAgICAnaW5mbyc6IG1hcmtldCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGNvbW1vbkN1cnJlbmN5Q29kZSAoY3VycmVuY3kpIHtcbiAgICAgICAgLy8gd2h5IHdvdWxkIHRoZXkgdXNlIHRocmVlIGxldHRlcnMgaW5zdGVhZCBvZiBmb3VyIGZvciBjdXJyZW5jeSBjb2Rlc1xuICAgICAgICBpZiAoY3VycmVuY3kgPT0gJ0RBUycpXG4gICAgICAgICAgICByZXR1cm4gJ0RBU0gnO1xuICAgICAgICBpZiAoY3VycmVuY3kgPT0gJ0RPRycpXG4gICAgICAgICAgICByZXR1cm4gJ0RPR0UnO1xuICAgICAgICByZXR1cm4gY3VycmVuY3k7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RCYWxhbmNlICgpO1xuICAgICAgICBsZXQgYmFsYW5jZSA9IHJlc3BvbnNlWydiYWxhbmNlJ107XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogYmFsYW5jZSB9O1xuICAgICAgICBsZXQgY3VycmVuY2llcyA9IE9iamVjdC5rZXlzIChiYWxhbmNlKTtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBjdXJyZW5jaWVzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBjdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IGNvZGUgPSB0aGlzLmNvbW1vbkN1cnJlbmN5Q29kZSAoY3VycmVuY3kpO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiBwYXJzZUZsb2F0IChiYWxhbmNlW2N1cnJlbmN5XVsnYXZhaWxhYmxlJ10pLFxuICAgICAgICAgICAgICAgICd1c2VkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHBhcnNlRmxvYXQgKGJhbGFuY2VbY3VycmVuY3ldWyd0b3RhbCddKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhY2NvdW50Wyd1c2VkJ10gPSBhY2NvdW50Wyd0b3RhbCddIC0gYWNjb3VudFsnZnJlZSddO1xuICAgICAgICAgICAgcmVzdWx0W2NvZGVdID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRPcmRlcmJvb2sgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAncGFpcmluZyc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IFtdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaWRlcyA9IFsgJ2JpZHMnLCAnYXNrcycgXTtcbiAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBzaWRlcy5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1tzXTtcbiAgICAgICAgICAgIGxldCBvcmRlcnMgPSBvcmRlcmJvb2tbc2lkZV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBvcmRlciA9IG9yZGVyc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgcHJpY2UgPSBwYXJzZUZsb2F0IChvcmRlclswXSk7XG4gICAgICAgICAgICAgICAgbGV0IGFtb3VudCA9IHBhcnNlRmxvYXQgKG9yZGVyWzFdKTtcbiAgICAgICAgICAgICAgICByZXN1bHRbc2lkZV0ucHVzaCAoWyBwcmljZSwgYW1vdW50IF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIHBhcnNlVGlja2VyICh0aWNrZXIsIG1hcmtldCkge1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbG93JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnb3JkZXJib29rJ11bJ2JpZHMnXVsnaGlnaGJpZCddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ29yZGVyYm9vayddWydhc2tzJ11bJ2hpZ2hiaWQnXSksXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xhc3RfcHJpY2UnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogcGFyc2VGbG9hdCAodGlja2VyWydjaGFuZ2UnXSksXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbHVtZV8yNGhvdXJzJ10pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VycyAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCB0aWNrZXJzID0gYXdhaXQgdGhpcy5wdWJsaWNHZXQgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7fTtcbiAgICAgICAgbGV0IGlkcyA9IE9iamVjdC5rZXlzICh0aWNrZXJzKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCBpZCA9IGlkc1tpXTtcbiAgICAgICAgICAgIGxldCB0aWNrZXIgPSB0aWNrZXJzW2lkXTtcbiAgICAgICAgICAgIGxldCBtYXJrZXQgPSB0aGlzLm1hcmtldHNfYnlfaWRbaWRdO1xuICAgICAgICAgICAgbGV0IHN5bWJvbCA9IG1hcmtldFsnc3ltYm9sJ107XG4gICAgICAgICAgICByZXN1bHRbc3ltYm9sXSA9IHRoaXMucGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCB0aWNrZXJzID0gYXdhaXQgdGhpcy5wdWJsaWNHZXQgKHsgJ3BhaXJpbmcnOiBwWydpZCddIH0pO1xuICAgICAgICBsZXQgaWQgPSBwWydpZCddLnRvU3RyaW5nICgpO1xuICAgICAgICBsZXQgdGlja2VyID0gdGlja2Vyc1tpZF07XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIHApO1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wdWJsaWNHZXRUcmFkZSAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdwYWlyaW5nJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RPcmRlciAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdwYWlyaW5nJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICd0eXBlJzogc2lkZSxcbiAgICAgICAgICAgICdhbW91bnQnOiBhbW91bnQsXG4gICAgICAgICAgICAncmF0ZSc6IHByaWNlLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnb3JkZXJfaWQnXS50b1N0cmluZyAoKSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBwYWlyaW5nID0gdW5kZWZpbmVkOyAvLyBUT0RPIGZpeG1lXG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0Q2FuY2VsICh7XG4gICAgICAgICAgICAnb3JkZXJfaWQnOiBpZCxcbiAgICAgICAgICAgICdwYWlyaW5nJzogcGFpcmluZyxcbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ10gKyAnLyc7XG4gICAgICAgIGlmIChwYXRoKVxuICAgICAgICAgICAgdXJsICs9IHBhdGggKyAnLyc7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyAocGFyYW1zKS5sZW5ndGgpXG4gICAgICAgICAgICB1cmwgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHBhcmFtcyk7XG4gICAgICAgIGlmIChhcGkgPT0gJ3ByaXZhdGUnKSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpO1xuICAgICAgICAgICAgbGV0IGF1dGggPSB0aGlzLmFwaUtleSArIG5vbmNlLnRvU3RyaW5nICgpICsgdGhpcy5zZWNyZXQ7XG4gICAgICAgICAgICBsZXQgc2lnbmF0dXJlID0gdGhpcy5oYXNoICh0aGlzLmVuY29kZSAoYXV0aCksICdzaGEyNTYnKTtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLnVybGVuY29kZSAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICAgICAna2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ25vbmNlJzogbm9uY2UsXG4gICAgICAgICAgICAgICAgJ3NpZ25hdHVyZSc6IHNpZ25hdHVyZSxcbiAgICAgICAgICAgICAgICAvLyB0d29mYTogdGhpcy50d29mYSxcbiAgICAgICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtTGVuZ3RoJzogYm9keS5sZW5ndGgsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJylcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgaWYgKCdzdWNjZXNzJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIGlmIChyZXNwb25zZVsnc3VjY2VzcyddKVxuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgY2NleCA9IHtcblxuICAgICdpZCc6ICdjY2V4JyxcbiAgICAnbmFtZSc6ICdDLUNFWCcsXG4gICAgJ2NvdW50cmllcyc6IFsgJ0RFJywgJ0VVJyBdLFxuICAgICdyYXRlTGltaXQnOiAxNTAwLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2NDMzLTE2ODgxZjkwLTVlZDgtMTFlNy05MmY4LTNkOTJjYzc0N2E2Yy5qcGcnLFxuICAgICAgICAnYXBpJzoge1xuICAgICAgICAgICAgJ3RpY2tlcnMnOiAnaHR0cHM6Ly9jLWNleC5jb20vdCcsXG4gICAgICAgICAgICAncHVibGljJzogJ2h0dHBzOi8vYy1jZXguY29tL3QvYXBpX3B1Yi5odG1sJyxcbiAgICAgICAgICAgICdwcml2YXRlJzogJ2h0dHBzOi8vYy1jZXguY29tL3QvYXBpLmh0bWwnLFxuICAgICAgICB9LFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vYy1jZXguY29tJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL2MtY2V4LmNvbS8/aWQ9YXBpJyxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICd0aWNrZXJzJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnY29pbm5hbWVzJyxcbiAgICAgICAgICAgICAgICAne21hcmtldH0nLFxuICAgICAgICAgICAgICAgICdwYWlycycsXG4gICAgICAgICAgICAgICAgJ3ByaWNlcycsXG4gICAgICAgICAgICAgICAgJ3ZvbHVtZV97Y29pbn0nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ2JhbGFuY2VkaXN0cmlidXRpb24nLFxuICAgICAgICAgICAgICAgICdtYXJrZXRoaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAnbWFya2V0cycsXG4gICAgICAgICAgICAgICAgJ21hcmtldHN1bW1hcmllcycsXG4gICAgICAgICAgICAgICAgJ29yZGVyYm9vaycsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAncHJpdmF0ZSc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ2J1eWxpbWl0JyxcbiAgICAgICAgICAgICAgICAnY2FuY2VsJyxcbiAgICAgICAgICAgICAgICAnZ2V0YmFsYW5jZScsXG4gICAgICAgICAgICAgICAgJ2dldGJhbGFuY2VzJyxcbiAgICAgICAgICAgICAgICAnZ2V0b3Blbm9yZGVycycsXG4gICAgICAgICAgICAgICAgJ2dldG9yZGVyJyxcbiAgICAgICAgICAgICAgICAnZ2V0b3JkZXJoaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAnbXl0cmFkZXMnLFxuICAgICAgICAgICAgICAgICdzZWxsbGltaXQnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hNYXJrZXRzICgpIHtcbiAgICAgICAgbGV0IG1hcmtldHMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgcCA9IDA7IHAgPCBtYXJrZXRzWydyZXN1bHQnXS5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IG1hcmtldHNbJ3Jlc3VsdCddW3BdO1xuICAgICAgICAgICAgbGV0IGlkID0gbWFya2V0WydNYXJrZXROYW1lJ107XG4gICAgICAgICAgICBsZXQgYmFzZSA9IG1hcmtldFsnTWFya2V0Q3VycmVuY3knXTtcbiAgICAgICAgICAgIGxldCBxdW90ZSA9IG1hcmtldFsnQmFzZUN1cnJlbmN5J107XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gYmFzZSArICcvJyArIHF1b3RlO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2ggKHtcbiAgICAgICAgICAgICAgICAnaWQnOiBpZCxcbiAgICAgICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgICAgICdiYXNlJzogYmFzZSxcbiAgICAgICAgICAgICAgICAncXVvdGUnOiBxdW90ZSxcbiAgICAgICAgICAgICAgICAnaW5mbyc6IG1hcmtldCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZUdldEJhbGFuY2VzICgpO1xuICAgICAgICBsZXQgYmFsYW5jZXMgPSByZXNwb25zZVsncmVzdWx0J107XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogYmFsYW5jZXMgfTtcbiAgICAgICAgZm9yIChsZXQgYiA9IDA7IGIgPCBiYWxhbmNlcy5sZW5ndGg7IGIrKykge1xuICAgICAgICAgICAgbGV0IGJhbGFuY2UgPSBiYWxhbmNlc1tiXTtcbiAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IGJhbGFuY2VbJ0N1cnJlbmN5J107XG4gICAgICAgICAgICBsZXQgYWNjb3VudCA9IHtcbiAgICAgICAgICAgICAgICAnZnJlZSc6IGJhbGFuY2VbJ0F2YWlsYWJsZSddLFxuICAgICAgICAgICAgICAgICd1c2VkJzogYmFsYW5jZVsnUGVuZGluZyddLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IGJhbGFuY2VbJ0JhbGFuY2UnXSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldE9yZGVyYm9vayAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdtYXJrZXQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICAgICAgJ3R5cGUnOiAnYm90aCcsXG4gICAgICAgICAgICAnZGVwdGgnOiAxMDAsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgb3JkZXJib29rID0gcmVzcG9uc2VbJ3Jlc3VsdCddO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IFtdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaWRlcyA9IHsgJ2JpZHMnOiAnYnV5JywgJ2Fza3MnOiAnc2VsbCcgfTtcbiAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyAoc2lkZXMpO1xuICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGtleXMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgIGxldCBrZXkgPSBrZXlzW2tdO1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1trZXldO1xuICAgICAgICAgICAgbGV0IG9yZGVycyA9IG9yZGVyYm9va1tzaWRlXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9yZGVyID0gb3JkZXJzW2ldO1xuICAgICAgICAgICAgICAgIGxldCBwcmljZSA9IHBhcnNlRmxvYXQgKG9yZGVyWydSYXRlJ10pO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBwYXJzZUZsb2F0IChvcmRlclsnUXVhbnRpdHknXSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W2tleV0ucHVzaCAoWyBwcmljZSwgYW1vdW50IF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIHBhcnNlVGlja2VyICh0aWNrZXIsIG1hcmtldCkge1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGlja2VyWyd1cGRhdGVkJ10gKiAxMDAwO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydoaWdoJ10pLFxuICAgICAgICAgICAgJ2xvdyc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbG93J10pLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYnV5J10pLFxuICAgICAgICAgICAgJ2Fzayc6IHBhcnNlRmxvYXQgKHRpY2tlclsnc2VsbCddKSxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdHByaWNlJ10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2F2ZyddKSxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWydidXlzdXBwb3J0J10pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy50aWNrZXJzR2V0TWFya2V0ICh7XG4gICAgICAgICAgICAnbWFya2V0JzogcFsnaWQnXS50b0xvd2VyQ2FzZSAoKSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aWNrZXIgPSByZXNwb25zZVsndGlja2VyJ107XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIHApO1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wdWJsaWNHZXRNYXJrZXRoaXN0b3J5ICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ21hcmtldCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgICAgICAndHlwZSc6ICdib3RoJyxcbiAgICAgICAgICAgICdkZXB0aCc6IDEwMCxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBtZXRob2QgPSAncHJpdmF0ZUdldCcgKyB0aGlzLmNhcGl0YWxpemUgKHNpZGUpICsgdHlwZTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpc1ttZXRob2RdICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ21hcmtldCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgICAgICAncXVhbnRpdHknOiBhbW91bnQsXG4gICAgICAgICAgICAncmF0ZSc6IHByaWNlLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsncmVzdWx0J11bJ3V1aWQnXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVHZXRDYW5jZWwgKHsgJ3V1aWQnOiBpZCB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXVthcGldO1xuICAgICAgICBpZiAoYXBpID09ICdwcml2YXRlJykge1xuICAgICAgICAgICAgbGV0IG5vbmNlID0gdGhpcy5ub25jZSAoKS50b1N0cmluZyAoKTtcbiAgICAgICAgICAgIGxldCBxdWVyeSA9IHRoaXMua2V5c29ydCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICAgICAnYSc6IHBhdGgsXG4gICAgICAgICAgICAgICAgJ2FwaWtleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgICAgICdub25jZSc6IG5vbmNlLFxuICAgICAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgICAgICB1cmwgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHF1ZXJ5KTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7ICdhcGlzaWduJzogdGhpcy5obWFjICh0aGlzLmVuY29kZSAodXJsKSwgdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSwgJ3NoYTUxMicpIH07XG4gICAgICAgIH0gZWxzZSBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICB1cmwgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAgICAgJ2EnOiAnZ2V0JyArIHBhdGgsXG4gICAgICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHVybCArPSAnLycgKyB0aGlzLmltcGxvZGVQYXJhbXMgKHBhdGgsIHBhcmFtcykgKyAnLmpzb24nO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKGFwaSA9PSAndGlja2VycycpXG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgIGlmICgnc3VjY2VzcycgaW4gcmVzcG9uc2UpXG4gICAgICAgICAgICBpZiAocmVzcG9uc2VbJ3N1Y2Nlc3MnXSlcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGNleCA9IHtcblxuICAgICdpZCc6ICdjZXgnLFxuICAgICduYW1lJzogJ0NFWC5JTycsXG4gICAgJ2NvdW50cmllcyc6IFsgJ0dCJywgJ0VVJywgJ0NZJywgJ1JVJyBdLFxuICAgICdyYXRlTGltaXQnOiAxNTAwLFxuICAgICdoYXNGZXRjaFRpY2tlcnMnOiB0cnVlLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2NDQyLThkZGMzM2IwLTVlZDgtMTFlNy04Yjk4LWY3ODZhZWYwZjNjOS5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vY2V4LmlvL2FwaScsXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly9jZXguaW8nLFxuICAgICAgICAnZG9jJzogJ2h0dHBzOi8vY2V4LmlvL2NleC1hcGknLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ2N1cnJlbmN5X2xpbWl0cycsXG4gICAgICAgICAgICAgICAgJ2xhc3RfcHJpY2Uve3BhaXJ9JyxcbiAgICAgICAgICAgICAgICAnbGFzdF9wcmljZXMve2N1cnJlbmNpZXN9JyxcbiAgICAgICAgICAgICAgICAnb2hsY3YvaGQve3l5eXltbWRkfS97cGFpcn0nLFxuICAgICAgICAgICAgICAgICdvcmRlcl9ib29rL3twYWlyfScsXG4gICAgICAgICAgICAgICAgJ3RpY2tlci97cGFpcn0nLFxuICAgICAgICAgICAgICAgICd0aWNrZXJzL3tjdXJyZW5jaWVzfScsXG4gICAgICAgICAgICAgICAgJ3RyYWRlX2hpc3Rvcnkve3BhaXJ9JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnY29udmVydC97cGFpcn0nLFxuICAgICAgICAgICAgICAgICdwcmljZV9zdGF0cy97cGFpcn0nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnYWN0aXZlX29yZGVyc19zdGF0dXMvJyxcbiAgICAgICAgICAgICAgICAnYXJjaGl2ZWRfb3JkZXJzL3twYWlyfScsXG4gICAgICAgICAgICAgICAgJ2JhbGFuY2UvJyxcbiAgICAgICAgICAgICAgICAnY2FuY2VsX29yZGVyLycsXG4gICAgICAgICAgICAgICAgJ2NhbmNlbF9vcmRlcnMve3BhaXJ9JyxcbiAgICAgICAgICAgICAgICAnY2FuY2VsX3JlcGxhY2Vfb3JkZXIve3BhaXJ9JyxcbiAgICAgICAgICAgICAgICAnY2xvc2VfcG9zaXRpb24ve3BhaXJ9JyxcbiAgICAgICAgICAgICAgICAnZ2V0X2FkZHJlc3MvJyxcbiAgICAgICAgICAgICAgICAnZ2V0X215ZmVlLycsXG4gICAgICAgICAgICAgICAgJ2dldF9vcmRlci8nLFxuICAgICAgICAgICAgICAgICdnZXRfb3JkZXJfdHgvJyxcbiAgICAgICAgICAgICAgICAnb3Blbl9vcmRlcnMve3BhaXJ9JyxcbiAgICAgICAgICAgICAgICAnb3Blbl9vcmRlcnMvJyxcbiAgICAgICAgICAgICAgICAnb3Blbl9wb3NpdGlvbi97cGFpcn0nLFxuICAgICAgICAgICAgICAgICdvcGVuX3Bvc2l0aW9ucy97cGFpcn0nLFxuICAgICAgICAgICAgICAgICdwbGFjZV9vcmRlci97cGFpcn0nLFxuICAgICAgICAgICAgICAgICdwbGFjZV9vcmRlci97cGFpcn0nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE1hcmtldHMgKCkge1xuICAgICAgICBsZXQgbWFya2V0cyA9IGF3YWl0IHRoaXMucHVibGljR2V0Q3VycmVuY3lMaW1pdHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgcCA9IDA7IHAgPCBtYXJrZXRzWydkYXRhJ11bJ3BhaXJzJ10ubGVuZ3RoOyBwKyspIHtcbiAgICAgICAgICAgIGxldCBtYXJrZXQgPSBtYXJrZXRzWydkYXRhJ11bJ3BhaXJzJ11bcF07XG4gICAgICAgICAgICBsZXQgaWQgPSBtYXJrZXRbJ3N5bWJvbDEnXSArICcvJyArIG1hcmtldFsnc3ltYm9sMiddO1xuICAgICAgICAgICAgbGV0IHN5bWJvbCA9IGlkO1xuICAgICAgICAgICAgbGV0IFsgYmFzZSwgcXVvdGUgXSA9IHN5bWJvbC5zcGxpdCAoJy8nKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoICh7XG4gICAgICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgICAgICAgICAgJ3N5bWJvbCc6IHN5bWJvbCxcbiAgICAgICAgICAgICAgICAnYmFzZSc6IGJhc2UsXG4gICAgICAgICAgICAgICAgJ3F1b3RlJzogcXVvdGUsXG4gICAgICAgICAgICAgICAgJ2luZm8nOiBtYXJrZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgYmFsYW5jZXMgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0QmFsYW5jZSAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiBiYWxhbmNlcyB9O1xuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IHRoaXMuY3VycmVuY2llcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gdGhpcy5jdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiBwYXJzZUZsb2F0IChiYWxhbmNlc1tjdXJyZW5jeV1bJ2F2YWlsYWJsZSddKSxcbiAgICAgICAgICAgICAgICAndXNlZCc6IHBhcnNlRmxvYXQgKGJhbGFuY2VzW2N1cnJlbmN5XVsnb3JkZXJzJ10pLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhY2NvdW50Wyd0b3RhbCddID0gdGhpcy5zdW0gKGFjY291bnRbJ2ZyZWUnXSwgYWNjb3VudFsndXNlZCddKTtcbiAgICAgICAgICAgIHJlc3VsdFtjdXJyZW5jeV0gPSBhY2NvdW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSBhd2FpdCAgdGhpcy5wdWJsaWNHZXRPcmRlckJvb2tQYWlyICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ3BhaXInOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IG9yZGVyYm9va1sndGltZXN0YW1wJ10gKiAxMDAwO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBvcmRlcmJvb2tbJ2JpZHMnXSxcbiAgICAgICAgICAgICdhc2tzJzogb3JkZXJib29rWydhc2tzJ10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBwYXJzZVRpY2tlciAodGlja2VyLCBtYXJrZXQpIHtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHBhcnNlSW50ICh0aWNrZXJbJ3RpbWVzdGFtcCddKSAqIDEwMDA7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2hpZ2gnXSksXG4gICAgICAgICAgICAnbG93JzogcGFyc2VGbG9hdCAodGlja2VyWydsb3cnXSksXG4gICAgICAgICAgICAnYmlkJzogcGFyc2VGbG9hdCAodGlja2VyWydiaWQnXSksXG4gICAgICAgICAgICAnYXNrJzogcGFyc2VGbG9hdCAodGlja2VyWydhc2snXSksXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xhc3QnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWyd2b2x1bWUnXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXJzICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IGN1cnJlbmNpZXMgPSB0aGlzLmN1cnJlbmNpZXMuam9pbiAoJy8nKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRUaWNrZXJzQ3VycmVuY2llcyAoe1xuICAgICAgICAgICAgJ2N1cnJlbmNpZXMnOiBjdXJyZW5jaWVzLFxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IHRpY2tlcnMgPSByZXNwb25zZVsnZGF0YSddO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge307XG4gICAgICAgIGZvciAobGV0IHQgPSAwOyB0IDwgdGlja2Vycy5sZW5ndGg7IHQrKykge1xuICAgICAgICAgICAgbGV0IHRpY2tlciA9IHRpY2tlcnNbdF07XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gdGlja2VyWydwYWlyJ10ucmVwbGFjZSAoJzonLCAnLycpO1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IHRoaXMubWFya2V0c1tzeW1ib2xdO1xuICAgICAgICAgICAgcmVzdWx0W3N5bWJvbF0gPSB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIG1hcmtldCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgdGlja2VyID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRUaWNrZXJQYWlyICh7XG4gICAgICAgICAgICAncGFpcic6IHBbJ2lkJ10sXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVRpY2tlciAodGlja2VyLCBwKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0VHJhZGVIaXN0b3J5UGFpciAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdwYWlyJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdwYWlyJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICd0eXBlJzogc2lkZSxcbiAgICAgICAgICAgICdhbW91bnQnOiBhbW91bnQsXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlID09ICdsaW1pdCcpXG4gICAgICAgICAgICBvcmRlclsncHJpY2UnXSA9IHByaWNlO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBvcmRlclsnb3JkZXJfdHlwZSddID0gdHlwZTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdFBsYWNlT3JkZXJQYWlyICh0aGlzLmV4dGVuZCAob3JkZXIsIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXNwb25zZSxcbiAgICAgICAgICAgICdpZCc6IHJlc3BvbnNlWydpZCddLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJpdmF0ZVBvc3RDYW5jZWxPcmRlciAoeyAnaWQnOiBpZCB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArICcvJyArIHRoaXMuaW1wbG9kZVBhcmFtcyAocGF0aCwgcGFyYW1zKTtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5vbWl0IChwYXJhbXMsIHRoaXMuZXh0cmFjdFBhcmFtcyAocGF0aCkpO1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHF1ZXJ5KS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChxdWVyeSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMudWlkKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBBdXRoZW50aWNhdGlvbkVycm9yICh0aGlzLmlkICsgJyByZXF1aXJlcyBgJyArIHRoaXMuaWQgKyAnLnVpZGAgcHJvcGVydHkgZm9yIGF1dGhlbnRpY2F0aW9uJyk7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpLnRvU3RyaW5nICgpO1xuICAgICAgICAgICAgbGV0IGF1dGggPSBub25jZSArIHRoaXMudWlkICsgdGhpcy5hcGlLZXk7XG4gICAgICAgICAgICBsZXQgc2lnbmF0dXJlID0gdGhpcy5obWFjICh0aGlzLmVuY29kZSAoYXV0aCksIHRoaXMuZW5jb2RlICh0aGlzLnNlY3JldCkpO1xuICAgICAgICAgICAgYm9keSA9IHRoaXMudXJsZW5jb2RlICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgICAgICdrZXknOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgICAgICAnc2lnbmF0dXJlJzogc2lnbmF0dXJlLnRvVXBwZXJDYXNlICgpLFxuICAgICAgICAgICAgICAgICdub25jZSc6IG5vbmNlLFxuICAgICAgICAgICAgfSwgcXVlcnkpKTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgICAgICAgICdDb250ZW50LUxlbmd0aCc6IGJvZHkubGVuZ3RoLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgICAgIGlmICgnZScgaW4gcmVzcG9uc2UpIHtcbiAgICAgICAgICAgIGlmICgnb2snIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZVsnb2snXSA9PSAnb2snKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgJyArIHRoaXMuanNvbiAocmVzcG9uc2UpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgY2hidGMgPSB7XG4gICAgJ2lkJzogJ2NoYnRjJyxcbiAgICAnbmFtZSc6ICdDSEJUQycsXG4gICAgJ2NvdW50cmllcyc6ICdDTicsXG4gICAgJ3JhdGVMaW1pdCc6IDEwMDAsXG4gICAgJ3ZlcnNpb24nOiAndjEnLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI4NTU1NjU5LWYwMDQwZGMyLTcxMDktMTFlNy05ZDk5LTY4OGE0MzhiZjlmNC5qcGcnLFxuICAgICAgICAnYXBpJzoge1xuICAgICAgICAgICAgJ3B1YmxpYyc6ICdodHRwOi8vYXBpLmNoYnRjLmNvbS9kYXRhJywgLy8gbm8gaHR0cHMgZm9yIHB1YmxpYyBBUElcbiAgICAgICAgICAgICdwcml2YXRlJzogJ2h0dHBzOi8vdHJhZGUuY2hidGMuY29tL2FwaScsXG4gICAgICAgIH0sXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly90cmFkZS5jaGJ0Yy5jb20vYXBpJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL3d3dy5jaGJ0Yy5jb20vaS9kZXZlbG9wZXInLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ3RpY2tlcicsXG4gICAgICAgICAgICAgICAgJ2RlcHRoJyxcbiAgICAgICAgICAgICAgICAndHJhZGVzJyxcbiAgICAgICAgICAgICAgICAna2xpbmUnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnb3JkZXInLFxuICAgICAgICAgICAgICAgICdjYW5jZWxPcmRlcicsXG4gICAgICAgICAgICAgICAgJ2dldE9yZGVyJyxcbiAgICAgICAgICAgICAgICAnZ2V0T3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnZ2V0T3JkZXJzTmV3JyxcbiAgICAgICAgICAgICAgICAnZ2V0T3JkZXJzSWdub3JlVHJhZGVUeXBlJyxcbiAgICAgICAgICAgICAgICAnZ2V0VW5maW5pc2hlZE9yZGVyc0lnbm9yZVRyYWRlVHlwZScsXG4gICAgICAgICAgICAgICAgJ2dldEFjY291bnRJbmZvJyxcbiAgICAgICAgICAgICAgICAnZ2V0VXNlckFkZHJlc3MnLFxuICAgICAgICAgICAgICAgICdnZXRXaXRoZHJhd0FkZHJlc3MnLFxuICAgICAgICAgICAgICAgICdnZXRXaXRoZHJhd1JlY29yZCcsXG4gICAgICAgICAgICAgICAgJ2dldENoYXJnZVJlY29yZCcsXG4gICAgICAgICAgICAgICAgJ2dldENueVdpdGhkcmF3UmVjb3JkJyxcbiAgICAgICAgICAgICAgICAnZ2V0Q255Q2hhcmdlUmVjb3JkJyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXcnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgICdtYXJrZXRzJzoge1xuICAgICAgICAnQlRDL0NOWSc6IHsgJ2lkJzogJ2J0Y19jbnknLCAnc3ltYm9sJzogJ0JUQy9DTlknLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnQ05ZJyB9LFxuICAgICAgICAnTFRDL0NOWSc6IHsgJ2lkJzogJ2x0Y19jbnknLCAnc3ltYm9sJzogJ0xUQy9DTlknLCAnYmFzZSc6ICdMVEMnLCAncXVvdGUnOiAnQ05ZJyB9LFxuICAgICAgICAnRVRIL0NOWSc6IHsgJ2lkJzogJ2V0aF9jbnknLCAnc3ltYm9sJzogJ0VUSC9DTlknLCAnYmFzZSc6ICdFVEgnLCAncXVvdGUnOiAnQ05ZJyB9LFxuICAgICAgICAnRVRDL0NOWSc6IHsgJ2lkJzogJ2V0Y19jbnknLCAnc3ltYm9sJzogJ0VUQy9DTlknLCAnYmFzZSc6ICdFVEMnLCAncXVvdGUnOiAnQ05ZJyB9LFxuICAgICAgICAnQlRTL0NOWSc6IHsgJ2lkJzogJ2J0c19jbnknLCAnc3ltYm9sJzogJ0JUUy9DTlknLCAnYmFzZSc6ICdCVFMnLCAncXVvdGUnOiAnQ05ZJyB9LFxuICAgICAgICAnRU9TL0NOWSc6IHsgJ2lkJzogJ2Vvc19jbnknLCAnc3ltYm9sJzogJ0VPUy9DTlknLCAnYmFzZSc6ICdFT1MnLCAncXVvdGUnOiAnQ05ZJyB9LFxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0R2V0QWNjb3VudEluZm8gKCk7XG4gICAgICAgIGxldCBiYWxhbmNlcyA9IHJlc3BvbnNlWydyZXN1bHQnXTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiBiYWxhbmNlcyB9O1xuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IHRoaXMuY3VycmVuY2llcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gdGhpcy5jdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChjdXJyZW5jeSBpbiBiYWxhbmNlc1snYmFsYW5jZSddKVxuICAgICAgICAgICAgICAgIGFjY291bnRbJ2ZyZWUnXSA9IGJhbGFuY2VzWydiYWxhbmNlJ11bY3VycmVuY3ldWydhbW91bnQnXTtcbiAgICAgICAgICAgIGlmIChjdXJyZW5jeSBpbiBiYWxhbmNlc1snZnJvemVuJ10pXG4gICAgICAgICAgICAgICAgYWNjb3VudFsndXNlZCddID0gYmFsYW5jZXNbJ2Zyb3plbiddW2N1cnJlbmN5XVsnYW1vdW50J107XG4gICAgICAgICAgICBhY2NvdW50Wyd0b3RhbCddID0gdGhpcy5zdW0gKGFjY291bnRbJ2ZyZWUnXSwgYWNjb3VudFsndXNlZCddKTtcbiAgICAgICAgICAgIHJlc3VsdFtjdXJyZW5jeV0gPSBhY2NvdW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSBhd2FpdCB0aGlzLnB1YmxpY0dldERlcHRoICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2N1cnJlbmN5JzogcFsnaWQnXSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgbGV0IGJpZHMgPSB1bmRlZmluZWQ7XG4gICAgICAgIGxldCBhc2tzID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoJ2JpZHMnIGluIG9yZGVyYm9vaylcbiAgICAgICAgICAgIGJpZHMgPSBvcmRlcmJvb2tbJ2JpZHMnXTtcbiAgICAgICAgaWYgKCdhc2tzJyBpbiBvcmRlcmJvb2spXG4gICAgICAgICAgICBhc2tzID0gb3JkZXJib29rWydhc2tzJ107XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IGJpZHMsXG4gICAgICAgICAgICAnYXNrcyc6IGFza3MsXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBpZiAocmVzdWx0WydiaWRzJ10pXG4gICAgICAgICAgICByZXN1bHRbJ2JpZHMnXSA9IHRoaXMuc29ydEJ5IChyZXN1bHRbJ2JpZHMnXSwgMCwgdHJ1ZSk7XG4gICAgICAgIGlmIChyZXN1bHRbJ2Fza3MnXSlcbiAgICAgICAgICAgIHJlc3VsdFsnYXNrcyddID0gdGhpcy5zb3J0QnkgKHJlc3VsdFsnYXNrcyddLCAwKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFRpY2tlciAoe1xuICAgICAgICAgICAgJ2N1cnJlbmN5JzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aWNrZXIgPSByZXNwb25zZVsndGlja2VyJ107XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2J1eSddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3NlbGwnXSksXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xhc3QnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWyd2b2wnXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0VHJhZGVzICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2N1cnJlbmN5JzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBwYXJhbVN0cmluZyA9ICcmcHJpY2U9JyArIHByaWNlLnRvU3RyaW5nICgpO1xuICAgICAgICBwYXJhbVN0cmluZyArPSAnJmFtb3VudD0nICsgYW1vdW50LnRvU3RyaW5nICgpO1xuICAgICAgICBsZXQgdHJhZGVUeXBlID0gKHNpZGUgPT0gJ2J1eScpID8gJzEnIDogJzAnO1xuICAgICAgICBwYXJhbVN0cmluZyArPSAnJnRyYWRlVHlwZT0nICsgdHJhZGVUeXBlO1xuICAgICAgICBwYXJhbVN0cmluZyArPSAnJmN1cnJlbmN5PScgKyB0aGlzLm1hcmtldElkIChtYXJrZXQpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0T3JkZXIgKHBhcmFtU3RyaW5nKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnaWQnXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgcGFyYW1TdHJpbmcgPSAnJmlkPScgKyBpZC50b1N0cmluZyAoKTtcbiAgICAgICAgaWYgKCdjdXJyZW5jeScgaW4gcGFyYW1zKVxuICAgICAgICAgICAgcGFyYW1TdHJpbmcgKz0gJyZjdXJyZW5jeT0nICsgcGFyYW1zWydjdXJyZW5jeSddO1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdENhbmNlbE9yZGVyIChwYXJhbVN0cmluZyk7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXIgKGlkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgcGFyYW1TdHJpbmcgPSAnJmlkPScgKyBpZC50b1N0cmluZyAoKTtcbiAgICAgICAgaWYgKCdjdXJyZW5jeScgaW4gcGFyYW1zKVxuICAgICAgICAgICAgcGFyYW1TdHJpbmcgKz0gJyZjdXJyZW5jeT0nICsgcGFyYW1zWydjdXJyZW5jeSddO1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdEdldE9yZGVyIChwYXJhbVN0cmluZyk7XG4gICAgfSxcblxuICAgIG5vbmNlICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddW2FwaV07XG4gICAgICAgIGlmIChhcGkgPT0gJ3B1YmxpYycpIHtcbiAgICAgICAgICAgIHVybCArPSAnLycgKyB0aGlzLnZlcnNpb24gKyAnLycgKyBwYXRoO1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChwYXJhbXMpLmxlbmd0aClcbiAgICAgICAgICAgICAgICB1cmwgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHBhcmFtcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgcGFyYW1zTGVuZ3RoID0gcGFyYW1zLmxlbmd0aDsgLy8gcGFyYW1zIHNob3VsZCBiZSBhIHN0cmluZyBoZXJlXG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpO1xuICAgICAgICAgICAgbGV0IGF1dGggPSAnbWV0aG9kPScgKyBwYXRoO1xuICAgICAgICAgICAgYXV0aCArPSAnJmFjY2Vzc2tleT0nICsgdGhpcy5hcGlLZXk7XG4gICAgICAgICAgICBhdXRoICs9IHBhcmFtc0xlbmd0aCA/IHBhcmFtcyA6ICcnO1xuICAgICAgICAgICAgbGV0IHNlY3JldCA9IHRoaXMuaGFzaCAodGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSwgJ3NoYTEnKTtcbiAgICAgICAgICAgIGxldCBzaWduYXR1cmUgPSB0aGlzLmhtYWMgKHRoaXMuZW5jb2RlIChhdXRoKSwgdGhpcy5lbmNvZGUgKHNlY3JldCksICdtZDUnKTtcbiAgICAgICAgICAgIGxldCBzdWZmaXggPSAnc2lnbj0nICsgc2lnbmF0dXJlICsgJyZyZXFUaW1lPScgKyBub25jZS50b1N0cmluZyAoKTtcbiAgICAgICAgICAgIHVybCArPSAnLycgKyBwYXRoICsgJz8nICsgYXV0aCArICcmJyArIHN1ZmZpeDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgICAgIGlmIChhcGkgPT0gJ3ByaXZhdGUnKVxuICAgICAgICAgICAgaWYgKCdjb2RlJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgJyArIHRoaXMuanNvbiAocmVzcG9uc2UpKTtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGNoaWxlYml0ID0gZXh0ZW5kIChibGlua3RyYWRlLCB7XG4gICAgJ2lkJzogJ2NoaWxlYml0JyxcbiAgICAnbmFtZSc6ICdDaGlsZUJpdCcsXG4gICAgJ2NvdW50cmllcyc6ICdDTCcsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc5OTE0MTQtMTI5OGYwZDgtNjQ3Zi0xMWU3LTljNDAtZDU2NDA5MjY2MzM2LmpwZycsXG4gICAgICAgICdhcGknOiB7XG4gICAgICAgICAgICAncHVibGljJzogJ2h0dHBzOi8vYXBpLmJsaW5rdHJhZGUuY29tL2FwaScsXG4gICAgICAgICAgICAncHJpdmF0ZSc6ICdodHRwczovL2FwaS5ibGlua3RyYWRlLmNvbS90YXBpJyxcbiAgICAgICAgfSxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL2NoaWxlYml0Lm5ldCcsXG4gICAgICAgICdkb2MnOiAnaHR0cHM6Ly9ibGlua3RyYWRlLmNvbS9kb2NzJyxcbiAgICB9LFxuICAgICdjb21tZW50JzogJ0JsaW5rdHJhZGUgQVBJJyxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9DTFAnOiB7ICdpZCc6ICdCVENDTFAnLCAnc3ltYm9sJzogJ0JUQy9DTFAnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnQ0xQJywgJ2Jyb2tlcklkJzogOSwgJ2Jyb2tlcic6ICdDaGlsZUJpdCcgfSxcbiAgICB9LFxufSlcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgY29pbmNoZWNrID0ge1xuXG4gICAgJ2lkJzogJ2NvaW5jaGVjaycsXG4gICAgJ25hbWUnOiAnY29pbmNoZWNrJyxcbiAgICAnY291bnRyaWVzJzogWyAnSlAnLCAnSUQnIF0sXG4gICAgJ3JhdGVMaW1pdCc6IDE1MDAsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc3NjY0NjQtM2I1YzNjNzQtNWVkOS0xMWU3LTg0MGUtMzFiMzI5NjhlMWRhLmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly9jb2luY2hlY2suY29tL2FwaScsXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly9jb2luY2hlY2suY29tJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL2NvaW5jaGVjay5jb20vZG9jdW1lbnRzL2V4Y2hhbmdlL2FwaScsXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnZXhjaGFuZ2Uvb3JkZXJzL3JhdGUnLFxuICAgICAgICAgICAgICAgICdvcmRlcl9ib29rcycsXG4gICAgICAgICAgICAgICAgJ3JhdGUve3BhaXJ9JyxcbiAgICAgICAgICAgICAgICAndGlja2VyJyxcbiAgICAgICAgICAgICAgICAndHJhZGVzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnYWNjb3VudHMnLFxuICAgICAgICAgICAgICAgICdhY2NvdW50cy9iYWxhbmNlJyxcbiAgICAgICAgICAgICAgICAnYWNjb3VudHMvbGV2ZXJhZ2VfYmFsYW5jZScsXG4gICAgICAgICAgICAgICAgJ2JhbmtfYWNjb3VudHMnLFxuICAgICAgICAgICAgICAgICdkZXBvc2l0X21vbmV5JyxcbiAgICAgICAgICAgICAgICAnZXhjaGFuZ2Uvb3JkZXJzL29wZW5zJyxcbiAgICAgICAgICAgICAgICAnZXhjaGFuZ2Uvb3JkZXJzL3RyYW5zYWN0aW9ucycsXG4gICAgICAgICAgICAgICAgJ2V4Y2hhbmdlL29yZGVycy90cmFuc2FjdGlvbnNfcGFnaW5hdGlvbicsXG4gICAgICAgICAgICAgICAgJ2V4Y2hhbmdlL2xldmVyYWdlL3Bvc2l0aW9ucycsXG4gICAgICAgICAgICAgICAgJ2xlbmRpbmcvYm9ycm93cy9tYXRjaGVzJyxcbiAgICAgICAgICAgICAgICAnc2VuZF9tb25leScsXG4gICAgICAgICAgICAgICAgJ3dpdGhkcmF3cycsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2JhbmtfYWNjb3VudHMnLFxuICAgICAgICAgICAgICAgICdkZXBvc2l0X21vbmV5L3tpZH0vZmFzdCcsXG4gICAgICAgICAgICAgICAgJ2V4Y2hhbmdlL29yZGVycycsXG4gICAgICAgICAgICAgICAgJ2V4Y2hhbmdlL3RyYW5zZmVycy90b19sZXZlcmFnZScsXG4gICAgICAgICAgICAgICAgJ2V4Y2hhbmdlL3RyYW5zZmVycy9mcm9tX2xldmVyYWdlJyxcbiAgICAgICAgICAgICAgICAnbGVuZGluZy9ib3Jyb3dzJyxcbiAgICAgICAgICAgICAgICAnbGVuZGluZy9ib3Jyb3dzL3tpZH0vcmVwYXknLFxuICAgICAgICAgICAgICAgICdzZW5kX21vbmV5JyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXdzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAnZGVsZXRlJzogW1xuICAgICAgICAgICAgICAgICdiYW5rX2FjY291bnRzL3tpZH0nLFxuICAgICAgICAgICAgICAgICdleGNoYW5nZS9vcmRlcnMve2lkfScsXG4gICAgICAgICAgICAgICAgJ3dpdGhkcmF3cy97aWR9JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9KUFknOiAgeyAnaWQnOiAnYnRjX2pweScsICAnc3ltYm9sJzogJ0JUQy9KUFknLCAgJ2Jhc2UnOiAnQlRDJywgICdxdW90ZSc6ICdKUFknIH0sIC8vIHRoZSBvbmx5IHJlYWwgcGFpclxuICAgICAgICAnRVRIL0pQWSc6ICB7ICdpZCc6ICdldGhfanB5JywgICdzeW1ib2wnOiAnRVRIL0pQWScsICAnYmFzZSc6ICdFVEgnLCAgJ3F1b3RlJzogJ0pQWScgfSxcbiAgICAgICAgJ0VUQy9KUFknOiAgeyAnaWQnOiAnZXRjX2pweScsICAnc3ltYm9sJzogJ0VUQy9KUFknLCAgJ2Jhc2UnOiAnRVRDJywgICdxdW90ZSc6ICdKUFknIH0sXG4gICAgICAgICdEQU8vSlBZJzogIHsgJ2lkJzogJ2Rhb19qcHknLCAgJ3N5bWJvbCc6ICdEQU8vSlBZJywgICdiYXNlJzogJ0RBTycsICAncXVvdGUnOiAnSlBZJyB9LFxuICAgICAgICAnTFNLL0pQWSc6ICB7ICdpZCc6ICdsc2tfanB5JywgICdzeW1ib2wnOiAnTFNLL0pQWScsICAnYmFzZSc6ICdMU0snLCAgJ3F1b3RlJzogJ0pQWScgfSxcbiAgICAgICAgJ0ZDVC9KUFknOiAgeyAnaWQnOiAnZmN0X2pweScsICAnc3ltYm9sJzogJ0ZDVC9KUFknLCAgJ2Jhc2UnOiAnRkNUJywgICdxdW90ZSc6ICdKUFknIH0sXG4gICAgICAgICdYTVIvSlBZJzogIHsgJ2lkJzogJ3htcl9qcHknLCAgJ3N5bWJvbCc6ICdYTVIvSlBZJywgICdiYXNlJzogJ1hNUicsICAncXVvdGUnOiAnSlBZJyB9LFxuICAgICAgICAnUkVQL0pQWSc6ICB7ICdpZCc6ICdyZXBfanB5JywgICdzeW1ib2wnOiAnUkVQL0pQWScsICAnYmFzZSc6ICdSRVAnLCAgJ3F1b3RlJzogJ0pQWScgfSxcbiAgICAgICAgJ1hSUC9KUFknOiAgeyAnaWQnOiAneHJwX2pweScsICAnc3ltYm9sJzogJ1hSUC9KUFknLCAgJ2Jhc2UnOiAnWFJQJywgICdxdW90ZSc6ICdKUFknIH0sXG4gICAgICAgICdaRUMvSlBZJzogIHsgJ2lkJzogJ3plY19qcHknLCAgJ3N5bWJvbCc6ICdaRUMvSlBZJywgICdiYXNlJzogJ1pFQycsICAncXVvdGUnOiAnSlBZJyB9LFxuICAgICAgICAnWEVNL0pQWSc6ICB7ICdpZCc6ICd4ZW1fanB5JywgICdzeW1ib2wnOiAnWEVNL0pQWScsICAnYmFzZSc6ICdYRU0nLCAgJ3F1b3RlJzogJ0pQWScgfSxcbiAgICAgICAgJ0xUQy9KUFknOiAgeyAnaWQnOiAnbHRjX2pweScsICAnc3ltYm9sJzogJ0xUQy9KUFknLCAgJ2Jhc2UnOiAnTFRDJywgICdxdW90ZSc6ICdKUFknIH0sXG4gICAgICAgICdEQVNIL0pQWSc6IHsgJ2lkJzogJ2Rhc2hfanB5JywgJ3N5bWJvbCc6ICdEQVNIL0pQWScsICdiYXNlJzogJ0RBU0gnLCAncXVvdGUnOiAnSlBZJyB9LFxuICAgICAgICAnRVRIL0JUQyc6ICB7ICdpZCc6ICdldGhfYnRjJywgICdzeW1ib2wnOiAnRVRIL0JUQycsICAnYmFzZSc6ICdFVEgnLCAgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ0VUQy9CVEMnOiAgeyAnaWQnOiAnZXRjX2J0YycsICAnc3ltYm9sJzogJ0VUQy9CVEMnLCAgJ2Jhc2UnOiAnRVRDJywgICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdMU0svQlRDJzogIHsgJ2lkJzogJ2xza19idGMnLCAgJ3N5bWJvbCc6ICdMU0svQlRDJywgICdiYXNlJzogJ0xTSycsICAncXVvdGUnOiAnQlRDJyB9LFxuICAgICAgICAnRkNUL0JUQyc6ICB7ICdpZCc6ICdmY3RfYnRjJywgICdzeW1ib2wnOiAnRkNUL0JUQycsICAnYmFzZSc6ICdGQ1QnLCAgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ1hNUi9CVEMnOiAgeyAnaWQnOiAneG1yX2J0YycsICAnc3ltYm9sJzogJ1hNUi9CVEMnLCAgJ2Jhc2UnOiAnWE1SJywgICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdSRVAvQlRDJzogIHsgJ2lkJzogJ3JlcF9idGMnLCAgJ3N5bWJvbCc6ICdSRVAvQlRDJywgICdiYXNlJzogJ1JFUCcsICAncXVvdGUnOiAnQlRDJyB9LFxuICAgICAgICAnWFJQL0JUQyc6ICB7ICdpZCc6ICd4cnBfYnRjJywgICdzeW1ib2wnOiAnWFJQL0JUQycsICAnYmFzZSc6ICdYUlAnLCAgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ1pFQy9CVEMnOiAgeyAnaWQnOiAnemVjX2J0YycsICAnc3ltYm9sJzogJ1pFQy9CVEMnLCAgJ2Jhc2UnOiAnWkVDJywgICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdYRU0vQlRDJzogIHsgJ2lkJzogJ3hlbV9idGMnLCAgJ3N5bWJvbCc6ICdYRU0vQlRDJywgICdiYXNlJzogJ1hFTScsICAncXVvdGUnOiAnQlRDJyB9LFxuICAgICAgICAnTFRDL0JUQyc6ICB7ICdpZCc6ICdsdGNfYnRjJywgICdzeW1ib2wnOiAnTFRDL0JUQycsICAnYmFzZSc6ICdMVEMnLCAgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ0RBU0gvQlRDJzogeyAnaWQnOiAnZGFzaF9idGMnLCAnc3ltYm9sJzogJ0RBU0gvQlRDJywgJ2Jhc2UnOiAnREFTSCcsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGxldCBiYWxhbmNlcyA9IGF3YWl0IHRoaXMucHJpdmF0ZUdldEFjY291bnRzQmFsYW5jZSAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiBiYWxhbmNlcyB9O1xuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IHRoaXMuY3VycmVuY2llcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gdGhpcy5jdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IGxvd2VyY2FzZSA9IGN1cnJlbmN5LnRvTG93ZXJDYXNlICgpO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChsb3dlcmNhc2UgaW4gYmFsYW5jZXMpXG4gICAgICAgICAgICAgICAgYWNjb3VudFsnZnJlZSddID0gcGFyc2VGbG9hdCAoYmFsYW5jZXNbbG93ZXJjYXNlXSk7XG4gICAgICAgICAgICBsZXQgcmVzZXJ2ZWQgPSBsb3dlcmNhc2UgKyAnX3Jlc2VydmVkJztcbiAgICAgICAgICAgIGlmIChyZXNlcnZlZCBpbiBiYWxhbmNlcylcbiAgICAgICAgICAgICAgICBhY2NvdW50Wyd1c2VkJ10gPSBwYXJzZUZsb2F0IChiYWxhbmNlc1tyZXNlcnZlZF0pO1xuICAgICAgICAgICAgYWNjb3VudFsndG90YWwnXSA9IHRoaXMuc3VtIChhY2NvdW50WydmcmVlJ10sIGFjY291bnRbJ3VzZWQnXSk7XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgIHRoaXMucHVibGljR2V0T3JkZXJCb29rcyAocGFyYW1zKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAob3JkZXJbMF0pO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBwYXJzZUZsb2F0IChvcmRlclsxXSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3NpZGVdLnB1c2ggKFsgcHJpY2UsIGFtb3VudCBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGxldCB0aWNrZXIgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFRpY2tlciAoKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRpY2tlclsndGltZXN0YW1wJ10gKiAxMDAwO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydoaWdoJ10pLFxuICAgICAgICAgICAgJ2xvdyc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbG93J10pLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYmlkJ10pLFxuICAgICAgICAgICAgJ2Fzayc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYXNrJ10pLFxuICAgICAgICAgICAgJ3Z3YXAnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnb3Blbic6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjbG9zZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdmaXJzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsYXN0JzogcGFyc2VGbG9hdCAodGlja2VyWydsYXN0J10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndm9sdW1lJ10pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldFRyYWRlcyAocGFyYW1zKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IHByZWZpeCA9ICcnO1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAncGFpcic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlID09ICdtYXJrZXQnKSB7XG4gICAgICAgICAgICBsZXQgb3JkZXJfdHlwZSA9IHR5cGUgKyAnXycgKyBzaWRlO1xuICAgICAgICAgICAgb3JkZXJbJ29yZGVyX3R5cGUnXSA9IG9yZGVyX3R5cGU7XG4gICAgICAgICAgICBsZXQgcHJlZml4ID0gKHNpZGUgPT0gJ2J1eScpID8gKG9yZGVyX3R5cGUgKyAnXycpIDogJyc7XG4gICAgICAgICAgICBvcmRlcltwcmVmaXggKyAnYW1vdW50J10gPSBhbW91bnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvcmRlclsnb3JkZXJfdHlwZSddID0gc2lkZTtcbiAgICAgICAgICAgIG9yZGVyWydyYXRlJ10gPSBwcmljZTtcbiAgICAgICAgICAgIG9yZGVyWydhbW91bnQnXSA9IGFtb3VudDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0RXhjaGFuZ2VPcmRlcnMgKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ2lkJzogcmVzcG9uc2VbJ2lkJ10udG9TdHJpbmcgKCksXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlRGVsZXRlRXhjaGFuZ2VPcmRlcnNJZCAoeyAnaWQnOiBpZCB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArICcvJyArIHRoaXMuaW1wbG9kZVBhcmFtcyAocGF0aCwgcGFyYW1zKTtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5vbWl0IChwYXJhbXMsIHRoaXMuZXh0cmFjdFBhcmFtcyAocGF0aCkpO1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHF1ZXJ5KS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChxdWVyeSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpLnRvU3RyaW5nICgpO1xuICAgICAgICAgICAgbGV0IGxlbmd0aCA9IDA7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHF1ZXJ5KS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBib2R5ID0gdGhpcy51cmxlbmNvZGUgKHRoaXMua2V5c29ydCAocXVlcnkpKTtcbiAgICAgICAgICAgICAgICBsZW5ndGggPSBib2R5Lmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBhdXRoID0gbm9uY2UgKyB1cmwgKyAoYm9keSB8fCAnJyk7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICAgICAgICAnQ29udGVudC1MZW5ndGgnOiBsZW5ndGgsXG4gICAgICAgICAgICAgICAgJ0FDQ0VTUy1LRVknOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgICAgICAnQUNDRVNTLU5PTkNFJzogbm9uY2UsXG4gICAgICAgICAgICAgICAgJ0FDQ0VTUy1TSUdOQVRVUkUnOiB0aGlzLmhtYWMgKHRoaXMuZW5jb2RlIChhdXRoKSwgdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJylcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgaWYgKCdzdWNjZXNzJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIGlmIChyZXNwb25zZVsnc3VjY2VzcyddKVxuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgY29pbmZsb29yID0ge1xuXG4gICAgJ2lkJzogJ2NvaW5mbG9vcicsXG4gICAgJ25hbWUnOiAnY29pbmZsb29yJyxcbiAgICAncmF0ZUxpbWl0JzogMTAwMCxcbiAgICAnY291bnRyaWVzJzogJ1VLJyxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yODI0NjA4MS02MjNmYzE2NC02YTFjLTExZTctOTEzZi1iYWMwZDU1NzZjOTAuanBnJyxcbiAgICAgICAgJ2FwaSc6ICdodHRwczovL3dlYmFwaS5jb2luZmxvb3IuY28udWs6ODA5MC9iaXN0JyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy5jb2luZmxvb3IuY28udWsnLFxuICAgICAgICAnZG9jJzogW1xuICAgICAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS9jb2luZmxvb3IvYXBpJyxcbiAgICAgICAgICAgICdodHRwczovL3d3dy5jb2luZmxvb3IuY28udWsvYXBpJyxcbiAgICAgICAgXSxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICd7aWR9L3RpY2tlci8nLFxuICAgICAgICAgICAgICAgICd7aWR9L29yZGVyX2Jvb2svJyxcbiAgICAgICAgICAgICAgICAne2lkfS90cmFuc2FjdGlvbnMvJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ3tpZH0vYmFsYW5jZS8nLFxuICAgICAgICAgICAgICAgICd7aWR9L3VzZXJfdHJhbnNhY3Rpb25zLycsXG4gICAgICAgICAgICAgICAgJ3tpZH0vb3Blbl9vcmRlcnMvJyxcbiAgICAgICAgICAgICAgICAne2lkfS9jYW5jZWxfb3JkZXIvJyxcbiAgICAgICAgICAgICAgICAne2lkfS9idXkvJyxcbiAgICAgICAgICAgICAgICAne2lkfS9zZWxsLycsXG4gICAgICAgICAgICAgICAgJ3tpZH0vYnV5X21hcmtldC8nLFxuICAgICAgICAgICAgICAgICd7aWR9L3NlbGxfbWFya2V0LycsXG4gICAgICAgICAgICAgICAgJ3tpZH0vZXN0aW1hdGVfc2VsbF9tYXJrZXQvJyxcbiAgICAgICAgICAgICAgICAne2lkfS9lc3RpbWF0ZV9idXlfbWFya2V0LycsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgJ21hcmtldHMnOiB7XG4gICAgICAgICdCVEMvR0JQJzogeyAnaWQnOiAnWEJUL0dCUCcsICdzeW1ib2wnOiAnQlRDL0dCUCcsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdHQlAnIH0sXG4gICAgICAgICdCVEMvRVVSJzogeyAnaWQnOiAnWEJUL0VVUicsICdzeW1ib2wnOiAnQlRDL0VVUicsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdFVVInIH0sXG4gICAgICAgICdCVEMvVVNEJzogeyAnaWQnOiAnWEJUL1VTRCcsICdzeW1ib2wnOiAnQlRDL1VTRCcsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdVU0QnIH0sXG4gICAgICAgICdCVEMvUExOJzogeyAnaWQnOiAnWEJUL1BMTicsICdzeW1ib2wnOiAnQlRDL1BMTicsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdQTE4nIH0sXG4gICAgICAgICdCQ0gvR0JQJzogeyAnaWQnOiAnQkNIL0dCUCcsICdzeW1ib2wnOiAnQkNIL0dCUCcsICdiYXNlJzogJ0JDSCcsICdxdW90ZSc6ICdHQlAnIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAobWFya2V0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0SWRCYWxhbmNlICh7XG4gICAgICAgICAgICAnaWQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCkge1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRJZE9yZGVyQm9vayAoe1xuICAgICAgICAgICAgJ2lkJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdiaWRzJzogW10sXG4gICAgICAgICAgICAnYXNrcyc6IFtdLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHNpZGVzID0gWyAnYmlkcycsICdhc2tzJyBdO1xuICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IHNpZGVzLmxlbmd0aDsgcysrKSB7XG4gICAgICAgICAgICBsZXQgc2lkZSA9IHNpZGVzW3NdO1xuICAgICAgICAgICAgbGV0IG9yZGVycyA9IG9yZGVyYm9va1tzaWRlXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9yZGVyID0gb3JkZXJzW2ldO1xuICAgICAgICAgICAgICAgIGxldCBwcmljZSA9IHBhcnNlRmxvYXQgKG9yZGVyWzBdKTtcbiAgICAgICAgICAgICAgICBsZXQgYW1vdW50ID0gcGFyc2VGbG9hdCAob3JkZXJbMV0pO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtzaWRlXS5wdXNoIChbIHByaWNlLCBhbW91bnQgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgcGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KSB7XG4gICAgICAgIC8vIHJld3JpdGUgdG8gZ2V0IHRoZSB0aW1lc3RhbXAgZnJvbSBIVFRQIGhlYWRlcnNcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydoaWdoJ10pLFxuICAgICAgICAgICAgJ2xvdyc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbG93J10pLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYmlkJ10pLFxuICAgICAgICAgICAgJ2Fzayc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYXNrJ10pLFxuICAgICAgICAgICAgJ3Z3YXAnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3Z3YXAnXSksXG4gICAgICAgICAgICAnb3Blbic6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjbG9zZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdmaXJzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsYXN0JzogcGFyc2VGbG9hdCAodGlja2VyWydsYXN0J10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndm9sdW1lJ10pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgbGV0IG0gPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHRpY2tlciA9IGF3YWl0IHRoaXMucHVibGljR2V0SWRUaWNrZXIgKHtcbiAgICAgICAgICAgICdpZCc6IG1bJ2lkJ10sXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVRpY2tlciAodGlja2VyLCBtKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0SWRUcmFuc2FjdGlvbnMgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnaWQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IG9yZGVyID0geyAnaWQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpIH07XG4gICAgICAgIGxldCBtZXRob2QgPSAncHJpdmF0ZVBvc3RJZCcgKyB0aGlzLmNhcGl0YWxpemUgKHNpZGUpO1xuICAgICAgICBpZiAodHlwZSA9PSAnbWFya2V0Jykge1xuICAgICAgICAgICAgb3JkZXJbJ3F1YW50aXR5J10gPSBhbW91bnQ7XG4gICAgICAgICAgICBtZXRob2QgKz0gJ01hcmtldCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvcmRlclsncHJpY2UnXSA9IHByaWNlO1xuICAgICAgICAgICAgb3JkZXJbJ2Ftb3VudCddID0gYW1vdW50O1xuICAgICAgICB9ICAgICAgICBcbiAgICAgICAgcmV0dXJuIHRoaXNbbWV0aG9kXSAodGhpcy5leHRlbmQgKG9yZGVyLCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0SWRDYW5jZWxPcmRlciAoeyAnaWQnOiBpZCB9KTtcbiAgICB9LFxuXG4gICAgcmVxdWVzdCAocGF0aCwgdHlwZSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gY3VybCAtayAtdSAnW1VzZXIgSURdL1tBUEkga2V5XTpbUGFzc3BocmFzZV0nIGh0dHBzOi8vd2ViYXBpLmNvaW5mbG9vci5jby51azo4MDkwL2Jpc3QvWEJUL0dCUC9iYWxhbmNlL1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArICcvJyArIHRoaXMuaW1wbG9kZVBhcmFtcyAocGF0aCwgcGFyYW1zKTtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5vbWl0IChwYXJhbXMsIHRoaXMuZXh0cmFjdFBhcmFtcyAocGF0aCkpO1xuICAgICAgICBpZiAodHlwZSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChxdWVyeSkubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG5vbmNlID0gdGhpcy5ub25jZSAoKTtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLnVybGVuY29kZSAodGhpcy5leHRlbmQgKHsgJ25vbmNlJzogbm9uY2UgfSwgcXVlcnkpKTtcbiAgICAgICAgICAgIGxldCBhdXRoID0gdGhpcy51aWQgKyAnLycgKyB0aGlzLmFwaUtleSArICc6JyArIHRoaXMucGFzc3dvcmQ7XG4gICAgICAgICAgICBsZXQgc2lnbmF0dXJlID0gdGhpcy5zdHJpbmdUb0Jhc2U2NCAoYXV0aCk7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICAgICAgICAnQ29udGVudC1MZW5ndGgnOiBib2R5Lmxlbmd0aCxcbiAgICAgICAgICAgICAgICAnQXV0aG9yaXphdGlvbic6ICdCYXNpYyAnICsgc2lnbmF0dXJlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGNvaW5naSA9IHtcblxuICAgICdpZCc6ICdjb2luZ2knLFxuICAgICduYW1lJzogJ0NvaW5naScsXG4gICAgJ3JhdGVMaW1pdCc6IDEwMDAsXG4gICAgJ2NvdW50cmllcyc6IFsgJ1BBJywgJ0JHJywgJ0NOJywgJ1VTJyBdLCAvLyBQYW5hbWEsIEJ1bGdhcmlhLCBDaGluYSwgVVNcbiAgICAnaGFzRmV0Y2hUaWNrZXJzJzogdHJ1ZSxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yODYxOTcwNy01YzkyMzJhOC03MjEyLTExZTctODZkNi05OGZlNWQxNWNjNmUuanBnJyxcbiAgICAgICAgJ2FwaSc6ICdodHRwczovL2FwaS5jb2luZ2kuY29tJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL2NvaW5naS5jb20nLFxuICAgICAgICAnZG9jJzogJ2h0dHA6Ly9kb2NzLmNvaW5naS5hcGlhcnkuaW8vJyxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdjdXJyZW50Jzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnb3JkZXItYm9vay97cGFpcn0ve2Fza0NvdW50fS97YmlkQ291bnR9L3tkZXB0aH0nLFxuICAgICAgICAgICAgICAgICd0cmFuc2FjdGlvbnMve3BhaXJ9L3ttYXhDb3VudH0nLFxuICAgICAgICAgICAgICAgICcyNGhvdXItcm9sbGluZy1hZ2dyZWdhdGlvbicsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAndXNlcic6IHtcbiAgICAgICAgICAgICdwb3N0JzogW1xuICAgICAgICAgICAgICAgICdiYWxhbmNlJyxcbiAgICAgICAgICAgICAgICAnYWRkLW9yZGVyJyxcbiAgICAgICAgICAgICAgICAnY2FuY2VsLW9yZGVyJyxcbiAgICAgICAgICAgICAgICAnb3JkZXJzJyxcbiAgICAgICAgICAgICAgICAndHJhbnNhY3Rpb25zJyxcbiAgICAgICAgICAgICAgICAnY3JlYXRlLWNyeXB0by13aXRoZHJhd2FsJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0xUQy9CVEMnOiB7ICdpZCc6ICdsdGMtYnRjJywgJ3N5bWJvbCc6ICdMVEMvQlRDJywgJ2Jhc2UnOiAnTFRDJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ1BQQy9CVEMnOiB7ICdpZCc6ICdwcGMtYnRjJywgJ3N5bWJvbCc6ICdQUEMvQlRDJywgJ2Jhc2UnOiAnUFBDJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ0RPR0UvQlRDJzogeyAnaWQnOiAnZG9nZS1idGMnLCAnc3ltYm9sJzogJ0RPR0UvQlRDJywgJ2Jhc2UnOiAnRE9HRScsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdWVEMvQlRDJzogeyAnaWQnOiAndnRjLWJ0YycsICdzeW1ib2wnOiAnVlRDL0JUQycsICdiYXNlJzogJ1ZUQycsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdGVEMvQlRDJzogeyAnaWQnOiAnZnRjLWJ0YycsICdzeW1ib2wnOiAnRlRDL0JUQycsICdiYXNlJzogJ0ZUQycsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdOTUMvQlRDJzogeyAnaWQnOiAnbm1jLWJ0YycsICdzeW1ib2wnOiAnTk1DL0JUQycsICdiYXNlJzogJ05NQycsICdxdW90ZSc6ICdCVEMnIH0sXG4gICAgICAgICdEQVNIL0JUQyc6IHsgJ2lkJzogJ2Rhc2gtYnRjJywgJ3N5bWJvbCc6ICdEQVNIL0JUQycsICdiYXNlJzogJ0RBU0gnLCAncXVvdGUnOiAnQlRDJyB9LFxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBsZXQgY3VycmVuY2llcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IHRoaXMuY3VycmVuY2llcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gdGhpcy5jdXJyZW5jaWVzW2NdLnRvTG93ZXJDYXNlICgpO1xuICAgICAgICAgICAgY3VycmVuY2llcy5wdXNoIChjdXJyZW5jeSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGJhbGFuY2VzID0gYXdhaXQgdGhpcy51c2VyUG9zdEJhbGFuY2UgKHtcbiAgICAgICAgICAgICdjdXJyZW5jaWVzJzogY3VycmVuY2llcy5qb2luICgnLCcpXG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGJhbGFuY2VzIH07XG4gICAgICAgIGZvciAobGV0IGIgPSAwOyBiIDwgYmFsYW5jZXMubGVuZ3RoOyBiKyspIHtcbiAgICAgICAgICAgIGxldCBiYWxhbmNlID0gYmFsYW5jZXNbYl07XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBiYWxhbmNlWydjdXJyZW5jeSddWyduYW1lJ107XG4gICAgICAgICAgICBjdXJyZW5jeSA9IGN1cnJlbmN5LnRvVXBwZXJDYXNlICgpO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiBiYWxhbmNlWydhdmFpbGFibGUnXSxcbiAgICAgICAgICAgICAgICAndXNlZCc6IGJhbGFuY2VbJ2Jsb2NrZWQnXSArIGJhbGFuY2VbJ2luT3JkZXJzJ10gKyBiYWxhbmNlWyd3aXRoZHJhd2luZyddLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhY2NvdW50Wyd0b3RhbCddID0gdGhpcy5zdW0gKGFjY291bnRbJ2ZyZWUnXSwgYWNjb3VudFsndXNlZCddKTtcbiAgICAgICAgICAgIHJlc3VsdFtjdXJyZW5jeV0gPSBhY2NvdW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSBhd2FpdCB0aGlzLmN1cnJlbnRHZXRPcmRlckJvb2tQYWlyQXNrQ291bnRCaWRDb3VudERlcHRoICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ3BhaXInOiBwWydpZCddLFxuICAgICAgICAgICAgJ2Fza0NvdW50JzogNTEyLCAvLyBtYXhpbXVtIHJldHVybmVkIG51bWJlciBvZiBhc2tzIDEtNTEyXG4gICAgICAgICAgICAnYmlkQ291bnQnOiA1MTIsIC8vIG1heGltdW0gcmV0dXJuZWQgbnVtYmVyIG9mIGJpZHMgMS01MTJcbiAgICAgICAgICAgICdkZXB0aCc6IDMyLCAvLyBtYXhpbXVtIG51bWJlciBvZiBkZXB0aCByYW5nZSBzdGVwcyAxLTMyXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IFtdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaWRlcyA9IFsgJ2JpZHMnLCAnYXNrcycgXTtcbiAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBzaWRlcy5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1tzXTtcbiAgICAgICAgICAgIGxldCBvcmRlcnMgPSBvcmRlcmJvb2tbc2lkZV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBvcmRlciA9IG9yZGVyc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgcHJpY2UgPSBvcmRlclsncHJpY2UnXTtcbiAgICAgICAgICAgICAgICBsZXQgYW1vdW50ID0gb3JkZXJbJ2Jhc2VBbW91bnQnXTtcbiAgICAgICAgICAgICAgICByZXN1bHRbc2lkZV0ucHVzaCAoWyBwcmljZSwgYW1vdW50IF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIHBhcnNlVGlja2VyICh0aWNrZXIsIG1hcmtldCkge1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiB0aWNrZXJbJ2hpZ2gnXSxcbiAgICAgICAgICAgICdsb3cnOiB0aWNrZXJbJ2xvdyddLFxuICAgICAgICAgICAgJ2JpZCc6IHRpY2tlclsnaGlnaGVzdEJpZCddLFxuICAgICAgICAgICAgJ2Fzayc6IHRpY2tlclsnbG93ZXN0QXNrJ10sXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogdGlja2VyWydiYXNlVm9sdW1lJ10sXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiB0aWNrZXJbJ2NvdW50ZXJWb2x1bWUnXSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGlja2VyO1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlcnMgKCkge1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmN1cnJlbnRHZXQyNGhvdXJSb2xsaW5nQWdncmVnYXRpb24gKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7fTtcbiAgICAgICAgZm9yIChsZXQgdCA9IDA7IHQgPCByZXNwb25zZS5sZW5ndGg7IHQrKykge1xuICAgICAgICAgICAgbGV0IHRpY2tlciA9IHJlc3BvbnNlW3RdO1xuICAgICAgICAgICAgbGV0IGJhc2UgPSB0aWNrZXJbJ2N1cnJlbmN5UGFpciddWydiYXNlJ10udG9VcHBlckNhc2UgKCk7XG4gICAgICAgICAgICBsZXQgcXVvdGUgPSB0aWNrZXJbJ2N1cnJlbmN5UGFpciddWydjb3VudGVyJ10udG9VcHBlckNhc2UgKCk7XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gYmFzZSArICcvJyArIHF1b3RlO1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IHRoaXMubWFya2V0c1tzeW1ib2xdO1xuICAgICAgICAgICAgcmVzdWx0W3N5bWJvbF0gPSB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIG1hcmtldCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmN1cnJlbnRHZXQyNGhvdXJSb2xsaW5nQWdncmVnYXRpb24gKCk7XG4gICAgICAgIGxldCB0aWNrZXJzID0ge307XG4gICAgICAgIGZvciAobGV0IHQgPSAwOyB0IDwgcmVzcG9uc2UubGVuZ3RoOyB0KyspIHtcbiAgICAgICAgICAgIGxldCB0aWNrZXIgPSByZXNwb25zZVt0XTtcbiAgICAgICAgICAgIGxldCBiYXNlID0gdGlja2VyWydjdXJyZW5jeVBhaXInXVsnYmFzZSddLnRvVXBwZXJDYXNlICgpO1xuICAgICAgICAgICAgbGV0IHF1b3RlID0gdGlja2VyWydjdXJyZW5jeVBhaXInXVsnY291bnRlciddLnRvVXBwZXJDYXNlICgpO1xuICAgICAgICAgICAgbGV0IHN5bWJvbCA9IGJhc2UgKyAnLycgKyBxdW90ZTtcbiAgICAgICAgICAgIHRpY2tlcnNbc3ltYm9sXSA9IHRpY2tlcjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgc3ltYm9sID0gcFsnc3ltYm9sJ107XG4gICAgICAgIGlmIChzeW1ib2wgaW4gdGlja2Vycykge1xuICAgICAgICAgICAgbGV0IHRpY2tlciA9IHRpY2tlcnNbc3ltYm9sXTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIHApO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgc3ltYm9sICsgJyB0aWNrZXIgbm90IGZvdW5kJyk7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRHZXRUcmFuc2FjdGlvbnNQYWlyTWF4Q291bnQgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAncGFpcic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgICAgICAnbWF4Q291bnQnOiAxMjgsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAnY3VycmVuY3lQYWlyJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICd2b2x1bWUnOiBhbW91bnQsXG4gICAgICAgICAgICAncHJpY2UnOiBwcmljZSxcbiAgICAgICAgICAgICdvcmRlclR5cGUnOiAoc2lkZSA9PSAnYnV5JykgPyAwIDogMSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy51c2VyUG9zdEFkZE9yZGVyICh0aGlzLmV4dGVuZCAob3JkZXIsIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXNwb25zZSxcbiAgICAgICAgICAgICdpZCc6IHJlc3BvbnNlWydyZXN1bHQnXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnVzZXJQb3N0Q2FuY2VsT3JkZXIgKHsgJ29yZGVySWQnOiBpZCB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArICcvJyArIGFwaSArICcvJyArIHRoaXMuaW1wbG9kZVBhcmFtcyAocGF0aCwgcGFyYW1zKTtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5vbWl0IChwYXJhbXMsIHRoaXMuZXh0cmFjdFBhcmFtcyAocGF0aCkpO1xuICAgICAgICBpZiAoYXBpID09ICdjdXJyZW50Jykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChxdWVyeSkubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG5vbmNlID0gdGhpcy5ub25jZSAoKTtcbiAgICAgICAgICAgIGxldCByZXF1ZXN0ID0gdGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICAgICAndG9rZW4nOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgICAgICAnbm9uY2UnOiBub25jZSxcbiAgICAgICAgICAgIH0sIHF1ZXJ5KTtcbiAgICAgICAgICAgIGxldCBhdXRoID0gbm9uY2UudG9TdHJpbmcgKCkgKyAnJCcgKyB0aGlzLmFwaUtleTtcbiAgICAgICAgICAgIHJlcXVlc3RbJ3NpZ25hdHVyZSddID0gdGhpcy5obWFjICh0aGlzLmVuY29kZSAoYXV0aCksIHRoaXMuZW5jb2RlICh0aGlzLnNlY3JldCkpO1xuICAgICAgICAgICAgYm9keSA9IHRoaXMuanNvbiAocmVxdWVzdCk7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtTGVuZ3RoJzogYm9keS5sZW5ndGgsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdlcnJvcnMnIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBjb2lubWFya2V0Y2FwID0ge1xuXG4gICAgJ2lkJzogJ2NvaW5tYXJrZXRjYXAnLFxuICAgICduYW1lJzogJ0NvaW5NYXJrZXRDYXAnLFxuICAgICdyYXRlTGltaXQnOiAxMDAwMCxcbiAgICAndmVyc2lvbic6ICd2MScsXG4gICAgJ2NvdW50cmllcyc6ICdVUycsXG4gICAgJ2hhc0ZldGNoVGlja2Vycyc6IHRydWUsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjgyNDQyNDQtOWJlNjMxMmEtNjllZC0xMWU3LTk5YzEtN2MxNzk3Mjc1MjY1LmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly9hcGkuY29pbm1hcmtldGNhcC5jb20nLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vY29pbm1hcmtldGNhcC5jb20nLFxuICAgICAgICAnZG9jJzogJ2h0dHBzOi8vY29pbm1hcmtldGNhcC5jb20vYXBpJyxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICd0aWNrZXIvJyxcbiAgICAgICAgICAgICAgICAndGlja2VyL3tpZH0vJyxcbiAgICAgICAgICAgICAgICAnZ2xvYmFsLycsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgJ2N1cnJlbmNpZXMnOiBbXG4gICAgICAgICdBVUQnLFxuICAgICAgICAnQlJMJyxcbiAgICAgICAgJ0NBRCcsXG4gICAgICAgICdDSEYnLFxuICAgICAgICAnQ05ZJyxcbiAgICAgICAgJ0VVUicsXG4gICAgICAgICdHQlAnLFxuICAgICAgICAnSEtEJyxcbiAgICAgICAgJ0lEUicsXG4gICAgICAgICdJTlInLFxuICAgICAgICAnSlBZJyxcbiAgICAgICAgJ0tSVycsXG4gICAgICAgICdNWE4nLFxuICAgICAgICAnUlVCJyxcbiAgICAgICAgJ1VTRCcsXG4gICAgXSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICgnRmV0Y2hpbmcgb3JkZXIgYm9va3MgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgQVBJIG9mICcgKyB0aGlzLmlkKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hNYXJrZXRzICgpIHtcbiAgICAgICAgbGV0IG1hcmtldHMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFRpY2tlciAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGxldCBwID0gMDsgcCA8IG1hcmtldHMubGVuZ3RoOyBwKyspIHtcbiAgICAgICAgICAgIGxldCBtYXJrZXQgPSBtYXJrZXRzW3BdO1xuICAgICAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCB0aGlzLmN1cnJlbmNpZXMubGVuZ3RoOyBjKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgYmFzZSA9IG1hcmtldFsnc3ltYm9sJ107XG4gICAgICAgICAgICAgICAgbGV0IGJhc2VJZCA9IG1hcmtldFsnaWQnXTtcbiAgICAgICAgICAgICAgICBsZXQgcXVvdGUgPSB0aGlzLmN1cnJlbmNpZXNbY107XG4gICAgICAgICAgICAgICAgbGV0IHF1b3RlSWQgPSBxdW90ZS50b0xvd2VyQ2FzZSAoKTtcbiAgICAgICAgICAgICAgICBsZXQgc3ltYm9sID0gYmFzZSArICcvJyArIHF1b3RlO1xuICAgICAgICAgICAgICAgIGxldCBpZCA9IGJhc2VJZCArICcvJyArIHF1b3RlO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoICh7XG4gICAgICAgICAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICAgICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgICAgICAgICAnYmFzZSc6IGJhc2UsXG4gICAgICAgICAgICAgICAgICAgICdxdW90ZSc6IHF1b3RlLFxuICAgICAgICAgICAgICAgICAgICAnYmFzZUlkJzogYmFzZUlkLFxuICAgICAgICAgICAgICAgICAgICAncXVvdGVJZCc6IHF1b3RlSWQsXG4gICAgICAgICAgICAgICAgICAgICdpbmZvJzogbWFya2V0LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoR2xvYmFsIChjdXJyZW5jeSA9ICdVU0QnKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXF1ZXN0ID0ge307XG4gICAgICAgIGlmIChjdXJyZW5jeSlcbiAgICAgICAgICAgIHJlcXVlc3RbJ2NvbnZlcnQnXSA9IGN1cnJlbmN5O1xuICAgICAgICByZXR1cm4gdGhpcy5wdWJsaWNHZXRHbG9iYWwgKHJlcXVlc3QpO1xuICAgIH0sXG5cbiAgICBwYXJzZVRpY2tlciAodGlja2VyLCBtYXJrZXQpIHtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBpZiAoJ2xhc3RfdXBkYXRlZCcgaW4gdGlja2VyKVxuICAgICAgICAgICAgaWYgKHRpY2tlclsnbGFzdF91cGRhdGVkJ10pXG4gICAgICAgICAgICAgICAgdGltZXN0YW1wID0gcGFyc2VJbnQgKHRpY2tlclsnbGFzdF91cGRhdGVkJ10pICogMTAwMDtcbiAgICAgICAgbGV0IHZvbHVtZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IHZvbHVtZUtleSA9ICcyNGhfdm9sdW1lXycgKyBtYXJrZXRbJ3F1b3RlSWQnXTtcbiAgICAgICAgaWYgKHRpY2tlclt2b2x1bWVLZXldKVxuICAgICAgICAgICAgdm9sdW1lID0gcGFyc2VGbG9hdCAodGlja2VyW3ZvbHVtZUtleV0pO1xuICAgICAgICBsZXQgcHJpY2UgPSAncHJpY2VfJyArIG1hcmtldFsncXVvdGVJZCddO1xuICAgICAgICBsZXQgY2hhbmdlID0gdW5kZWZpbmVkO1xuICAgICAgICBsZXQgY2hhbmdlS2V5ID0gJ3BlcmNlbnRfY2hhbmdlXzI0aCc7XG4gICAgICAgIGlmICh0aWNrZXJbY2hhbmdlS2V5XSlcbiAgICAgICAgICAgIGNoYW5nZSA9IHBhcnNlRmxvYXQgKHRpY2tlcltjaGFuZ2VLZXldKTtcbiAgICAgICAgbGV0IGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChwcmljZSBpbiB0aWNrZXIpXG4gICAgICAgICAgICBpZiAodGlja2VyW3ByaWNlXSlcbiAgICAgICAgICAgICAgICBsYXN0ID0gcGFyc2VGbG9hdCAodGlja2VyW3ByaWNlXSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbG93JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2JpZCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhc2snOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBsYXN0LFxuICAgICAgICAgICAgJ2NoYW5nZSc6IGNoYW5nZSxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHZvbHVtZSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlcnMgKGN1cnJlbmN5ID0gJ1VTRCcpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlcXVlc3QgPSB7fTtcbiAgICAgICAgaWYgKGN1cnJlbmN5KVxuICAgICAgICAgICAgcmVxdWVzdFsnY29udmVydCddID0gY3VycmVuY3k7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0VGlja2VyIChyZXF1ZXN0KTtcbiAgICAgICAgbGV0IHRpY2tlcnMgPSB7fTtcbiAgICAgICAgZm9yIChsZXQgdCA9IDA7IHQgPCByZXNwb25zZS5sZW5ndGg7IHQrKykge1xuICAgICAgICAgICAgbGV0IHRpY2tlciA9IHJlc3BvbnNlW3RdO1xuICAgICAgICAgICAgbGV0IGlkID0gdGlja2VyWydpZCddICsgJy8nICsgY3VycmVuY3k7XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gdGhpcy5tYXJrZXRzX2J5X2lkW2lkXTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBtYXJrZXRbJ3N5bWJvbCddO1xuICAgICAgICAgICAgdGlja2Vyc1tzeW1ib2xdID0gdGhpcy5wYXJzZVRpY2tlciAodGlja2VyLCBtYXJrZXQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aWNrZXJzO1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCByZXF1ZXN0ID0ge1xuICAgICAgICAgICAgJ2NvbnZlcnQnOiBwWydxdW90ZSddLFxuICAgICAgICAgICAgJ2lkJzogcFsnYmFzZUlkJ10sXG4gICAgICAgIH07XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0VGlja2VySWQgKHJlcXVlc3QpO1xuICAgICAgICBsZXQgdGlja2VyID0gcmVzcG9uc2VbMF07XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIHApO1xuICAgIH0sXG5cbiAgICByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgJy8nICsgdGhpcy52ZXJzaW9uICsgJy8nICsgdGhpcy5pbXBsb2RlUGFyYW1zIChwYXRoLCBwYXJhbXMpO1xuICAgICAgICBsZXQgcXVlcnkgPSB0aGlzLm9taXQgKHBhcmFtcywgdGhpcy5leHRyYWN0UGFyYW1zIChwYXRoKSk7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyAocXVlcnkpLmxlbmd0aClcbiAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICByZXR1cm4gdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGNvaW5tYXRlID0ge1xuXG4gICAgJ2lkJzogJ2NvaW5tYXRlJyxcbiAgICAnbmFtZSc6ICdDb2luTWF0ZScsXG4gICAgJ2NvdW50cmllcyc6IFsgJ0dCJywgJ0NaJyBdLCAvLyBVSywgQ3plY2ggUmVwdWJsaWNcbiAgICAncmF0ZUxpbWl0JzogMTAwMCxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yNzgxMTIyOS1jMWVmYjUxMC02MDZjLTExZTctOWEzNi04NGJhMmNlNDEyZDguanBnJyxcbiAgICAgICAgJ2FwaSc6ICdodHRwczovL2NvaW5tYXRlLmlvL2FwaScsXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly9jb2lubWF0ZS5pbycsXG4gICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAnaHR0cDovL2RvY3MuY29pbm1hdGUuYXBpYXJ5LmlvJyxcbiAgICAgICAgICAgICdodHRwczovL2NvaW5tYXRlLmlvL2RldmVsb3BlcnMnLFxuICAgICAgICBdLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ29yZGVyQm9vaycsXG4gICAgICAgICAgICAgICAgJ3RpY2tlcicsXG4gICAgICAgICAgICAgICAgJ3RyYW5zYWN0aW9ucycsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAncHJpdmF0ZSc6IHtcbiAgICAgICAgICAgICdwb3N0JzogW1xuICAgICAgICAgICAgICAgICdiYWxhbmNlcycsXG4gICAgICAgICAgICAgICAgJ2JpdGNvaW5XaXRoZHJhd2FsJyxcbiAgICAgICAgICAgICAgICAnYml0Y29pbkRlcG9zaXRBZGRyZXNzZXMnLFxuICAgICAgICAgICAgICAgICdidXlJbnN0YW50JyxcbiAgICAgICAgICAgICAgICAnYnV5TGltaXQnLFxuICAgICAgICAgICAgICAgICdjYW5jZWxPcmRlcicsXG4gICAgICAgICAgICAgICAgJ2NhbmNlbE9yZGVyV2l0aEluZm8nLFxuICAgICAgICAgICAgICAgICdjcmVhdGVWb3VjaGVyJyxcbiAgICAgICAgICAgICAgICAnb3Blbk9yZGVycycsXG4gICAgICAgICAgICAgICAgJ3JlZGVlbVZvdWNoZXInLFxuICAgICAgICAgICAgICAgICdzZWxsSW5zdGFudCcsXG4gICAgICAgICAgICAgICAgJ3NlbGxMaW1pdCcsXG4gICAgICAgICAgICAgICAgJ3RyYW5zYWN0aW9uSGlzdG9yeScsXG4gICAgICAgICAgICAgICAgJ3VuY29uZmlybWVkQml0Y29pbkRlcG9zaXRzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9FVVInOiB7ICdpZCc6ICdCVENfRVVSJywgJ3N5bWJvbCc6ICdCVEMvRVVSJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ0VVUicgfSxcbiAgICAgICAgJ0JUQy9DWksnOiB7ICdpZCc6ICdCVENfQ1pLJywgJ3N5bWJvbCc6ICdCVEMvQ1pLJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ0NaSycgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdEJhbGFuY2VzICgpO1xuICAgICAgICBsZXQgYmFsYW5jZXMgPSByZXNwb25zZVsnZGF0YSddO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGJhbGFuY2VzIH07XG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgdGhpcy5jdXJyZW5jaWVzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSB0aGlzLmN1cnJlbmNpZXNbY107XG4gICAgICAgICAgICBsZXQgYWNjb3VudCA9IHtcbiAgICAgICAgICAgICAgICAnZnJlZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAndXNlZCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAndG90YWwnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGN1cnJlbmN5IGluIGJhbGFuY2VzKSB7XG4gICAgICAgICAgICAgICAgYWNjb3VudFsnZnJlZSddID0gYmFsYW5jZXNbY3VycmVuY3ldWydhdmFpbGFibGUnXTtcbiAgICAgICAgICAgICAgICBhY2NvdW50Wyd1c2VkJ10gPSBiYWxhbmNlc1tjdXJyZW5jeV1bJ3Jlc2VydmVkJ107XG4gICAgICAgICAgICAgICAgYWNjb3VudFsndG90YWwnXSA9IGJhbGFuY2VzW2N1cnJlbmN5XVsnYmFsYW5jZSddO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRPcmRlckJvb2sgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnY3VycmVuY3lQYWlyJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICdncm91cEJ5UHJpY2VMaW1pdCc6ICdGYWxzZScsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgb3JkZXJib29rID0gcmVzcG9uc2VbJ2RhdGEnXTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IG9yZGVyYm9va1sndGltZXN0YW1wJ10gKiAxMDAwO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gb3JkZXJbJ3ByaWNlJ107XG4gICAgICAgICAgICAgICAgbGV0IGFtb3VudCA9IG9yZGVyWydhbW91bnQnXTtcbiAgICAgICAgICAgICAgICByZXN1bHRbc2lkZV0ucHVzaCAoWyBwcmljZSwgYW1vdW50IF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRUaWNrZXIgKHtcbiAgICAgICAgICAgICdjdXJyZW5jeVBhaXInOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IHRpY2tlciA9IHJlc3BvbnNlWydkYXRhJ107XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aWNrZXJbJ3RpbWVzdGFtcCddICogMTAwMDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2JpZCddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2FzayddKSxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdCddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2Ftb3VudCddKSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdGhpcy5wdWJsaWNHZXRUcmFuc2FjdGlvbnMgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnY3VycmVuY3lQYWlyJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICdtaW51dGVzSW50b0hpc3RvcnknOiAxMCxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBtZXRob2QgPSAncHJpdmF0ZVBvc3QnICsgdGhpcy5jYXBpdGFsaXplIChzaWRlKTtcbiAgICAgICAgbGV0IG9yZGVyID0ge1xuICAgICAgICAgICAgJ2N1cnJlbmN5UGFpcic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlID09ICdtYXJrZXQnKSB7XG4gICAgICAgICAgICBpZiAoc2lkZSA9PSAnYnV5JylcbiAgICAgICAgICAgICAgICBvcmRlclsndG90YWwnXSA9IGFtb3VudDsgLy8gYW1vdW50IGluIGZpYXRcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBvcmRlclsnYW1vdW50J10gPSBhbW91bnQ7IC8vIGFtb3VudCBpbiBmaWF0XG4gICAgICAgICAgICBtZXRob2QgKz0gJ0luc3RhbnQnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3JkZXJbJ2Ftb3VudCddID0gYW1vdW50OyAvLyBhbW91bnQgaW4gY3J5cHRvXG4gICAgICAgICAgICBvcmRlclsncHJpY2UnXSA9IHByaWNlO1xuICAgICAgICAgICAgbWV0aG9kICs9IHRoaXMuY2FwaXRhbGl6ZSAodHlwZSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpc1ttZXRob2RdIChzZWxmLmV4dGVuZCAob3JkZXIsIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXNwb25zZSxcbiAgICAgICAgICAgICdpZCc6IHJlc3BvbnNlWydkYXRhJ10udG9TdHJpbmcgKCksXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdENhbmNlbE9yZGVyICh7ICdvcmRlcklkJzogaWQgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ10gKyAnLycgKyBwYXRoO1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHBhcmFtcykubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocGFyYW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghdGhpcy51aWQpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEF1dGhlbnRpY2F0aW9uRXJyb3IgKHRoaXMuaWQgKyAnIHJlcXVpcmVzIGAnICsgdGhpcy5pZCArICcudWlkYCBwcm9wZXJ0eSBmb3IgYXV0aGVudGljYXRpb24nKTtcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCkudG9TdHJpbmcgKCk7XG4gICAgICAgICAgICBsZXQgYXV0aCA9IG5vbmNlICsgdGhpcy51aWQgKyB0aGlzLmFwaUtleTtcbiAgICAgICAgICAgIGxldCBzaWduYXR1cmUgPSB0aGlzLmhtYWMgKHRoaXMuZW5jb2RlIChhdXRoKSwgdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSk7XG4gICAgICAgICAgICBib2R5ID0gdGhpcy51cmxlbmNvZGUgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAgICAgJ2NsaWVudElkJzogdGhpcy51aWQsXG4gICAgICAgICAgICAgICAgJ25vbmNlJzogbm9uY2UsXG4gICAgICAgICAgICAgICAgJ3B1YmxpY0tleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgICAgICdzaWduYXR1cmUnOiBzaWduYXR1cmUudG9VcHBlckNhc2UgKCksXG4gICAgICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgICAgICBpZiAoJ2Vycm9yJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIGlmIChyZXNwb25zZVsnZXJyb3InXSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgJyArIHRoaXMuanNvbiAocmVzcG9uc2UpKTtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGNvaW5zZWN1cmUgPSB7XG5cbiAgICAnaWQnOiAnY29pbnNlY3VyZScsXG4gICAgJ25hbWUnOiAnQ29pbnNlY3VyZScsXG4gICAgJ2NvdW50cmllcyc6ICdJTicsIC8vIEluZGlhXG4gICAgJ3JhdGVMaW1pdCc6IDEwMDAsXG4gICAgJ3ZlcnNpb24nOiAndjEnLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2NDcyLTljYmQyMDBhLTVlZDktMTFlNy05NTUxLTIyNjdhZDdiYWMwOC5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vYXBpLmNvaW5zZWN1cmUuaW4nLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vY29pbnNlY3VyZS5pbicsXG4gICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAnaHR0cHM6Ly9hcGkuY29pbnNlY3VyZS5pbicsXG4gICAgICAgICAgICAnaHR0cHM6Ly9naXRodWIuY29tL2NvaW5zZWN1cmUvcGx1Z2lucycsXG4gICAgICAgIF0sXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnYml0Y29pbi9zZWFyY2gvY29uZmlybWF0aW9uL3t0eGlkfScsXG4gICAgICAgICAgICAgICAgJ2V4Y2hhbmdlL2Fzay9sb3cnLFxuICAgICAgICAgICAgICAgICdleGNoYW5nZS9hc2svb3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnZXhjaGFuZ2UvYmlkL2hpZ2gnLFxuICAgICAgICAgICAgICAgICdleGNoYW5nZS9iaWQvb3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnZXhjaGFuZ2UvbGFzdFRyYWRlJyxcbiAgICAgICAgICAgICAgICAnZXhjaGFuZ2UvbWF4MjRIcicsXG4gICAgICAgICAgICAgICAgJ2V4Y2hhbmdlL21pbjI0SHInLFxuICAgICAgICAgICAgICAgICdleGNoYW5nZS90aWNrZXInLFxuICAgICAgICAgICAgICAgICdleGNoYW5nZS90cmFkZXMnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdtZmEvYXV0aHkvY2FsbCcsXG4gICAgICAgICAgICAgICAgJ21mYS9hdXRoeS9zbXMnLFxuICAgICAgICAgICAgICAgICduZXRraS9zZWFyY2gve25ldGtpTmFtZX0nLFxuICAgICAgICAgICAgICAgICd1c2VyL2Jhbmsvb3RwL3tudW1iZXJ9JyxcbiAgICAgICAgICAgICAgICAndXNlci9reWMvb3RwL3tudW1iZXJ9JyxcbiAgICAgICAgICAgICAgICAndXNlci9wcm9maWxlL3Bob25lL290cC97bnVtYmVyfScsXG4gICAgICAgICAgICAgICAgJ3VzZXIvd2FsbGV0L2NvaW4vYWRkcmVzcy97aWR9JyxcbiAgICAgICAgICAgICAgICAndXNlci93YWxsZXQvY29pbi9kZXBvc2l0L2NvbmZpcm1lZC9hbGwnLFxuICAgICAgICAgICAgICAgICd1c2VyL3dhbGxldC9jb2luL2RlcG9zaXQvY29uZmlybWVkL3tpZH0nLFxuICAgICAgICAgICAgICAgICd1c2VyL3dhbGxldC9jb2luL2RlcG9zaXQvdW5jb25maXJtZWQvYWxsJyxcbiAgICAgICAgICAgICAgICAndXNlci93YWxsZXQvY29pbi9kZXBvc2l0L3VuY29uZmlybWVkL3tpZH0nLFxuICAgICAgICAgICAgICAgICd1c2VyL3dhbGxldC9jb2luL3dhbGxldHMnLFxuICAgICAgICAgICAgICAgICd1c2VyL2V4Y2hhbmdlL2JhbmsvZmlhdC9hY2NvdW50cycsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYmFuay9maWF0L2JhbGFuY2UvYXZhaWxhYmxlJyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS9iYW5rL2ZpYXQvYmFsYW5jZS9wZW5kaW5nJyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS9iYW5rL2ZpYXQvYmFsYW5jZS90b3RhbCcsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYmFuay9maWF0L2RlcG9zaXQvY2FuY2VsbGVkJyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS9iYW5rL2ZpYXQvZGVwb3NpdC91bnZlcmlmaWVkJyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS9iYW5rL2ZpYXQvZGVwb3NpdC92ZXJpZmllZCcsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYmFuay9maWF0L3dpdGhkcmF3L2NhbmNlbGxlZCcsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYmFuay9maWF0L3dpdGhkcmF3L2NvbXBsZXRlZCcsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYmFuay9maWF0L3dpdGhkcmF3L3VudmVyaWZpZWQnLFxuICAgICAgICAgICAgICAgICd1c2VyL2V4Y2hhbmdlL2JhbmsvZmlhdC93aXRoZHJhdy92ZXJpZmllZCcsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYXNrL2NhbmNlbGxlZCcsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYXNrL2NvbXBsZXRlZCcsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYXNrL3BlbmRpbmcnLFxuICAgICAgICAgICAgICAgICd1c2VyL2V4Y2hhbmdlL2JpZC9jYW5jZWxsZWQnLFxuICAgICAgICAgICAgICAgICd1c2VyL2V4Y2hhbmdlL2JpZC9jb21wbGV0ZWQnLFxuICAgICAgICAgICAgICAgICd1c2VyL2V4Y2hhbmdlL2JpZC9wZW5kaW5nJyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS9iYW5rL2NvaW4vYWRkcmVzc2VzJyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS9iYW5rL2NvaW4vYmFsYW5jZS9hdmFpbGFibGUnLFxuICAgICAgICAgICAgICAgICd1c2VyL2V4Y2hhbmdlL2JhbmsvY29pbi9iYWxhbmNlL3BlbmRpbmcnLFxuICAgICAgICAgICAgICAgICd1c2VyL2V4Y2hhbmdlL2JhbmsvY29pbi9iYWxhbmNlL3RvdGFsJyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS9iYW5rL2NvaW4vZGVwb3NpdC9jYW5jZWxsZWQnLFxuICAgICAgICAgICAgICAgICd1c2VyL2V4Y2hhbmdlL2JhbmsvY29pbi9kZXBvc2l0L3VudmVyaWZpZWQnLFxuICAgICAgICAgICAgICAgICd1c2VyL2V4Y2hhbmdlL2JhbmsvY29pbi9kZXBvc2l0L3ZlcmlmaWVkJyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS9iYW5rL2NvaW4vd2l0aGRyYXcvY2FuY2VsbGVkJyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS9iYW5rL2NvaW4vd2l0aGRyYXcvY29tcGxldGVkJyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS9iYW5rL2NvaW4vd2l0aGRyYXcvdW52ZXJpZmllZCcsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYmFuay9jb2luL3dpdGhkcmF3L3ZlcmlmaWVkJyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS9iYW5rL3N1bW1hcnknLFxuICAgICAgICAgICAgICAgICd1c2VyL2V4Y2hhbmdlL2NvaW4vZmVlJyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS9maWF0L2ZlZScsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2Uva3ljcycsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvcmVmZXJyYWwvY29pbi9wYWlkJyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS9yZWZlcnJhbC9jb2luL3N1Y2Nlc3NmdWwnLFxuICAgICAgICAgICAgICAgICd1c2VyL2V4Y2hhbmdlL3JlZmVycmFsL2ZpYXQvcGFpZCcsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvcmVmZXJyYWxzJyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS90cmFkZS9zdW1tYXJ5JyxcbiAgICAgICAgICAgICAgICAndXNlci9sb2dpbi90b2tlbi97dG9rZW59JyxcbiAgICAgICAgICAgICAgICAndXNlci9zdW1tYXJ5JyxcbiAgICAgICAgICAgICAgICAndXNlci93YWxsZXQvc3VtbWFyeScsXG4gICAgICAgICAgICAgICAgJ3dhbGxldC9jb2luL3dpdGhkcmF3L2NhbmNlbGxlZCcsXG4gICAgICAgICAgICAgICAgJ3dhbGxldC9jb2luL3dpdGhkcmF3L2NvbXBsZXRlZCcsXG4gICAgICAgICAgICAgICAgJ3dhbGxldC9jb2luL3dpdGhkcmF3L3VudmVyaWZpZWQnLFxuICAgICAgICAgICAgICAgICd3YWxsZXQvY29pbi93aXRoZHJhdy92ZXJpZmllZCcsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2xvZ2luJyxcbiAgICAgICAgICAgICAgICAnbG9naW4vaW5pdGlhdGUnLFxuICAgICAgICAgICAgICAgICdsb2dpbi9wYXNzd29yZC9mb3Jnb3QnLFxuICAgICAgICAgICAgICAgICdtZmEvYXV0aHkvaW5pdGlhdGUnLFxuICAgICAgICAgICAgICAgICdtZmEvZ2EvaW5pdGlhdGUnLFxuICAgICAgICAgICAgICAgICdzaWdudXAnLFxuICAgICAgICAgICAgICAgICd1c2VyL25ldGtpL3VwZGF0ZScsXG4gICAgICAgICAgICAgICAgJ3VzZXIvcHJvZmlsZS9pbWFnZS91cGRhdGUnLFxuICAgICAgICAgICAgICAgICd1c2VyL2V4Y2hhbmdlL2JhbmsvY29pbi93aXRoZHJhdy9pbml0aWF0ZScsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYmFuay9jb2luL3dpdGhkcmF3L25ld1ZlcmlmeWNvZGUnLFxuICAgICAgICAgICAgICAgICd1c2VyL2V4Y2hhbmdlL2JhbmsvZmlhdC93aXRoZHJhdy9pbml0aWF0ZScsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYmFuay9maWF0L3dpdGhkcmF3L25ld1ZlcmlmeWNvZGUnLFxuICAgICAgICAgICAgICAgICd1c2VyL3Bhc3N3b3JkL2NoYW5nZScsXG4gICAgICAgICAgICAgICAgJ3VzZXIvcGFzc3dvcmQvcmVzZXQnLFxuICAgICAgICAgICAgICAgICd1c2VyL3dhbGxldC9jb2luL3dpdGhkcmF3L2luaXRpYXRlJyxcbiAgICAgICAgICAgICAgICAnd2FsbGV0L2NvaW4vd2l0aGRyYXcvbmV3VmVyaWZ5Y29kZScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ3B1dCc6IFtcbiAgICAgICAgICAgICAgICAnc2lnbnVwL3ZlcmlmeS97dG9rZW59JyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS9reWMnLFxuICAgICAgICAgICAgICAgICd1c2VyL2V4Y2hhbmdlL2JhbmsvZmlhdC9kZXBvc2l0L25ldycsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYXNrL25ldycsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYmlkL25ldycsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvaW5zdGFudC9idXknLFxuICAgICAgICAgICAgICAgICd1c2VyL2V4Y2hhbmdlL2luc3RhbnQvc2VsbCcsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYmFuay9jb2luL3dpdGhkcmF3L3ZlcmlmeScsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYmFuay9maWF0L2FjY291bnQvbmV3JyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS9iYW5rL2ZpYXQvd2l0aGRyYXcvdmVyaWZ5JyxcbiAgICAgICAgICAgICAgICAndXNlci9tZmEvYXV0aHkvaW5pdGlhdGUvZW5hYmxlJyxcbiAgICAgICAgICAgICAgICAndXNlci9tZmEvZ2EvaW5pdGlhdGUvZW5hYmxlJyxcbiAgICAgICAgICAgICAgICAndXNlci9uZXRraS9jcmVhdGUnLFxuICAgICAgICAgICAgICAgICd1c2VyL3Byb2ZpbGUvcGhvbmUvbmV3JyxcbiAgICAgICAgICAgICAgICAndXNlci93YWxsZXQvY29pbi9hZGRyZXNzL25ldycsXG4gICAgICAgICAgICAgICAgJ3VzZXIvd2FsbGV0L2NvaW4vbmV3JyxcbiAgICAgICAgICAgICAgICAndXNlci93YWxsZXQvY29pbi93aXRoZHJhdy9zZW5kVG9FeGNoYW5nZScsXG4gICAgICAgICAgICAgICAgJ3VzZXIvd2FsbGV0L2NvaW4vd2l0aGRyYXcvdmVyaWZ5JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAnZGVsZXRlJzogW1xuICAgICAgICAgICAgICAgICd1c2VyL2djbS97Y29kZX0nLFxuICAgICAgICAgICAgICAgICd1c2VyL2xvZ291dCcsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYmFuay9jb2luL3dpdGhkcmF3L3VudmVyaWZpZWQvY2FuY2VsL3t3aXRoZHJhd0lEfScsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYmFuay9maWF0L2RlcG9zaXQvY2FuY2VsL3tkZXBvc2l0SUR9JyxcbiAgICAgICAgICAgICAgICAndXNlci9leGNoYW5nZS9hc2svY2FuY2VsL3tvcmRlcklEfScsXG4gICAgICAgICAgICAgICAgJ3VzZXIvZXhjaGFuZ2UvYmlkL2NhbmNlbC97b3JkZXJJRH0nLFxuICAgICAgICAgICAgICAgICd1c2VyL2V4Y2hhbmdlL2JhbmsvZmlhdC93aXRoZHJhdy91bnZlcmlmaWVkL2NhbmNlbC97d2l0aGRyYXdJRH0nLFxuICAgICAgICAgICAgICAgICd1c2VyL21mYS9hdXRoeS9kaXNhYmxlL3tjb2RlfScsXG4gICAgICAgICAgICAgICAgJ3VzZXIvbWZhL2dhL2Rpc2FibGUve2NvZGV9JyxcbiAgICAgICAgICAgICAgICAndXNlci9wcm9maWxlL3Bob25lL2RlbGV0ZScsXG4gICAgICAgICAgICAgICAgJ3VzZXIvcHJvZmlsZS9pbWFnZS9kZWxldGUve25ldGtpTmFtZX0nLFxuICAgICAgICAgICAgICAgICd1c2VyL3dhbGxldC9jb2luL3dpdGhkcmF3L3VudmVyaWZpZWQvY2FuY2VsL3t3aXRoZHJhd0lEfScsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgJ21hcmtldHMnOiB7XG4gICAgICAgICdCVEMvSU5SJzogeyAnaWQnOiAnQlRDL0lOUicsICdzeW1ib2wnOiAnQlRDL0lOUicsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdJTlInIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZUdldFVzZXJFeGNoYW5nZUJhbmtTdW1tYXJ5ICgpO1xuICAgICAgICBsZXQgYmFsYW5jZSA9IHJlc3BvbnNlWydtZXNzYWdlJ107XG4gICAgICAgIGxldCBjb2luID0ge1xuICAgICAgICAgICAgJ2ZyZWUnOiBiYWxhbmNlWydhdmFpbGFibGVDb2luQmFsYW5jZSddLFxuICAgICAgICAgICAgJ3VzZWQnOiBiYWxhbmNlWydwZW5kaW5nQ29pbkJhbGFuY2UnXSxcbiAgICAgICAgICAgICd0b3RhbCc6IGJhbGFuY2VbJ3RvdGFsQ29pbkJhbGFuY2UnXSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IGZpYXQgPSB7XG4gICAgICAgICAgICAnZnJlZSc6IGJhbGFuY2VbJ2F2YWlsYWJsZUZpYXRCYWxhbmNlJ10sXG4gICAgICAgICAgICAndXNlZCc6IGJhbGFuY2VbJ3BlbmRpbmdGaWF0QmFsYW5jZSddLFxuICAgICAgICAgICAgJ3RvdGFsJzogYmFsYW5jZVsndG90YWxGaWF0QmFsYW5jZSddLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2luZm8nOiBiYWxhbmNlLFxuICAgICAgICAgICAgJ0JUQyc6IGNvaW4sXG4gICAgICAgICAgICAnSU5SJzogZmlhdCxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IGJpZHMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldEV4Y2hhbmdlQmlkT3JkZXJzIChwYXJhbXMpO1xuICAgICAgICBsZXQgYXNrcyA9IGF3YWl0IHRoaXMucHVibGljR2V0RXhjaGFuZ2VBc2tPcmRlcnMgKHBhcmFtcyk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IGJpZHNbJ21lc3NhZ2UnXSxcbiAgICAgICAgICAgICdhc2tzJzogYXNrc1snbWVzc2FnZSddLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IFtdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaWRlcyA9IFsgJ2JpZHMnLCAnYXNrcycgXTtcbiAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBzaWRlcy5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1tzXTtcbiAgICAgICAgICAgIGxldCBvcmRlcnMgPSBvcmRlcmJvb2tbc2lkZV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBvcmRlciA9IG9yZGVyc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgcHJpY2UgPSBvcmRlclsncmF0ZSddO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBvcmRlclsndm9sJ107XG4gICAgICAgICAgICAgICAgcmVzdWx0W3NpZGVdLnB1c2ggKFsgcHJpY2UsIGFtb3VudCBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0RXhjaGFuZ2VUaWNrZXIgKCk7XG4gICAgICAgIGxldCB0aWNrZXIgPSByZXNwb25zZVsnbWVzc2FnZSddO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGlja2VyWyd0aW1lc3RhbXAnXTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2JpZCddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2FzayddKSxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ29wZW4nXSksXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdFByaWNlJ10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsnY29pbnZvbHVtZSddKSxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsnZmlhdHZvbHVtZSddKSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdGhpcy5wdWJsaWNHZXRFeGNoYW5nZVRyYWRlcyAocGFyYW1zKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IG1ldGhvZCA9ICdwcml2YXRlUHV0VXNlckV4Y2hhbmdlJztcbiAgICAgICAgbGV0IG9yZGVyID0ge307XG4gICAgICAgIGlmICh0eXBlID09ICdtYXJrZXQnKSB7XG4gICAgICAgICAgICBtZXRob2QgKz0gJ0luc3RhbnQnICsgdGhpcy5jYXBpdGFsaXplIChzaWRlKTtcbiAgICAgICAgICAgIGlmIChzaWRlID09ICdidXknKVxuICAgICAgICAgICAgICAgIG9yZGVyWydtYXhGaWF0J10gPSBhbW91bnQ7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgb3JkZXJbJ21heFZvbCddID0gYW1vdW50O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IGRpcmVjdGlvbiA9IChzaWRlID09ICdidXknKSA/ICdCaWQnIDogJ0Fzayc7XG4gICAgICAgICAgICBtZXRob2QgKz0gZGlyZWN0aW9uICsgJ05ldyc7XG4gICAgICAgICAgICBvcmRlclsncmF0ZSddID0gcHJpY2U7XG4gICAgICAgICAgICBvcmRlclsndm9sJ10gPSBhbW91bnQ7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpc1ttZXRob2RdIChzZWxmLmV4dGVuZCAob3JkZXIsIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXNwb25zZSxcbiAgICAgICAgICAgICdpZCc6IHJlc3BvbnNlWydtZXNzYWdlJ11bJ29yZGVySUQnXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyBjYW5jZWxPcmRlciAoKSBpcyBub3QgZnVsbHkgaW1wbGVtZW50ZWQgeWV0Jyk7XG4gICAgICAgIGxldCBtZXRob2QgPSAncHJpdmF0ZURlbGV0ZVVzZXJFeGNoYW5nZUFza0NhbmNlbE9yZGVySWQnOyAvLyBUT0RPIGZpeG1lLCBoYXZlIHRvIHNwZWNpZnkgb3JkZXIgc2lkZSBoZXJlXG4gICAgICAgIHJldHVybiB0aGlzW21ldGhvZF0gKHsgJ29yZGVySUQnOiBpZCB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArICcvJyArIHRoaXMudmVyc2lvbiArICcvJyArIHRoaXMuaW1wbG9kZVBhcmFtcyAocGF0aCwgcGFyYW1zKTtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5vbWl0IChwYXJhbXMsIHRoaXMuZXh0cmFjdFBhcmFtcyAocGF0aCkpO1xuICAgICAgICBpZiAoYXBpID09ICdwcml2YXRlJykge1xuICAgICAgICAgICAgaGVhZGVycyA9IHsgJ0F1dGhvcml6YXRpb24nOiB0aGlzLmFwaUtleSB9O1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChxdWVyeSkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgYm9keSA9IHRoaXMuanNvbiAocXVlcnkpO1xuICAgICAgICAgICAgICAgIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gJ2FwcGxpY2F0aW9uL2pzb24nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdzdWNjZXNzJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIGlmIChyZXNwb25zZVsnc3VjY2VzcyddKVxuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgY29pbnNwb3QgPSB7XG5cbiAgICAnaWQnOiAnY29pbnNwb3QnLFxuICAgICduYW1lJzogJ0NvaW5TcG90JyxcbiAgICAnY291bnRyaWVzJzogJ0FVJywgLy8gQXVzdHJhbGlhXG4gICAgJ3JhdGVMaW1pdCc6IDEwMDAsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjgyMDg0MjktM2NhY2RmOWEtNjg5Ni0xMWU3LTg1NGUtNGM3OWE3NzJhMzBmLmpwZycsXG4gICAgICAgICdhcGknOiB7XG4gICAgICAgICAgICAncHVibGljJzogJ2h0dHBzOi8vd3d3LmNvaW5zcG90LmNvbS5hdS9wdWJhcGknLFxuICAgICAgICAgICAgJ3ByaXZhdGUnOiAnaHR0cHM6Ly93d3cuY29pbnNwb3QuY29tLmF1L2FwaScsXG4gICAgICAgIH0sXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly93d3cuY29pbnNwb3QuY29tLmF1JyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL3d3dy5jb2luc3BvdC5jb20uYXUvYXBpJyxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdsYXRlc3QnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnb3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnb3JkZXJzL2hpc3RvcnknLFxuICAgICAgICAgICAgICAgICdteS9jb2luL2RlcG9zaXQnLFxuICAgICAgICAgICAgICAgICdteS9jb2luL3NlbmQnLFxuICAgICAgICAgICAgICAgICdxdW90ZS9idXknLFxuICAgICAgICAgICAgICAgICdxdW90ZS9zZWxsJyxcbiAgICAgICAgICAgICAgICAnbXkvYmFsYW5jZXMnLFxuICAgICAgICAgICAgICAgICdteS9vcmRlcnMnLFxuICAgICAgICAgICAgICAgICdteS9idXknLFxuICAgICAgICAgICAgICAgICdteS9zZWxsJyxcbiAgICAgICAgICAgICAgICAnbXkvYnV5L2NhbmNlbCcsXG4gICAgICAgICAgICAgICAgJ215L3NlbGwvY2FuY2VsJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9BVUQnOiB7ICdpZCc6ICdCVEMnLCAnc3ltYm9sJzogJ0JUQy9BVUQnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnQVVEJyB9LFxuICAgICAgICAnTFRDL0FVRCc6IHsgJ2lkJzogJ0xUQycsICdzeW1ib2wnOiAnTFRDL0FVRCcsICdiYXNlJzogJ0xUQycsICdxdW90ZSc6ICdBVUQnIH0sXG4gICAgICAgICdET0dFL0FVRCc6IHsgJ2lkJzogJ0RPR0UnLCAnc3ltYm9sJzogJ0RPR0UvQVVEJywgJ2Jhc2UnOiAnRE9HRScsICdxdW90ZSc6ICdBVUQnIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RNeUJhbGFuY2VzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IHJlc3BvbnNlIH07XG4gICAgICAgIGlmICgnYmFsYW5jZScgaW4gcmVzcG9uc2UpIHtcbiAgICAgICAgICAgIGxldCBiYWxhbmNlcyA9IHJlc3BvbnNlWydiYWxhbmNlJ107XG4gICAgICAgICAgICBsZXQgY3VycmVuY2llcyA9IE9iamVjdC5rZXlzIChiYWxhbmNlcyk7XG4gICAgICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IGN1cnJlbmNpZXMubGVuZ3RoOyBjKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBjdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgICAgIGxldCB1cHBlcmNhc2UgPSBjdXJyZW5jeS50b1VwcGVyQ2FzZSAoKTtcbiAgICAgICAgICAgICAgICBsZXQgYWNjb3VudCA9IHtcbiAgICAgICAgICAgICAgICAgICAgJ2ZyZWUnOiBiYWxhbmNlc1tjdXJyZW5jeV0sXG4gICAgICAgICAgICAgICAgICAgICd1c2VkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAndG90YWwnOiBiYWxhbmNlc1tjdXJyZW5jeV0sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBpZiAodXBwZXJjYXNlID09ICdEUksnKVxuICAgICAgICAgICAgICAgICAgICB1cHBlcmNhc2UgPSAnREFTSCc7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3VwcGVyY2FzZV0gPSBhY2NvdW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0T3JkZXJzICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2NvaW50eXBlJzogcFsnaWQnXSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdiaWRzJzogW10sXG4gICAgICAgICAgICAnYXNrcyc6IFtdLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHNpZGVzID0geyAnYmlkcyc6ICdidXlvcmRlcnMnLCAnYXNrcyc6ICdzZWxsb3JkZXJzJyB9O1xuICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzIChzaWRlcyk7XG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwga2V5cy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgbGV0IGtleSA9IGtleXNba107XG4gICAgICAgICAgICBsZXQgc2lkZSA9IHNpZGVzW2tleV07XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAob3JkZXJbJ3JhdGUnXSk7XG4gICAgICAgICAgICAgICAgbGV0IGFtb3VudCA9IHBhcnNlRmxvYXQgKG9yZGVyWydhbW91bnQnXSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W2tleV0ucHVzaCAoWyBwcmljZSwgYW1vdW50IF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlc3VsdFsnYmlkcyddID0gdGhpcy5zb3J0QnkgKHJlc3VsdFsnYmlkcyddLCAwLCB0cnVlKTtcbiAgICAgICAgcmVzdWx0Wydhc2tzJ10gPSB0aGlzLnNvcnRCeSAocmVzdWx0Wydhc2tzJ10sIDApO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0TGF0ZXN0ICgpO1xuICAgICAgICBsZXQgaWQgPSB0aGlzLm1hcmtldElkIChtYXJrZXQpO1xuICAgICAgICBpZCA9IGlkLnRvTG93ZXJDYXNlICgpO1xuICAgICAgICBsZXQgdGlja2VyID0gcmVzcG9uc2VbJ3ByaWNlcyddW2lkXTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xvdyc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2JpZCddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2FzayddKSxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdCddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJpdmF0ZVBvc3RPcmRlcnNIaXN0b3J5ICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2NvaW50eXBlJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBtZXRob2QgPSAncHJpdmF0ZVBvc3RNeScgKyB0aGlzLmNhcGl0YWxpemUgKHNpZGUpO1xuICAgICAgICBpZiAodHlwZSA9PSAnbWFya2V0JylcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyBhbGxvd3MgbGltaXQgb3JkZXJzIG9ubHknKTtcbiAgICAgICAgbGV0IG9yZGVyID0ge1xuICAgICAgICAgICAgJ2NvaW50eXBlJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICdhbW91bnQnOiBhbW91bnQsXG4gICAgICAgICAgICAncmF0ZSc6IHByaWNlLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGhpc1ttZXRob2RdICh0aGlzLmV4dGVuZCAob3JkZXIsIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyBjYW5jZWxPcmRlciAoKSBpcyBub3QgZnVsbHkgaW1wbGVtZW50ZWQgeWV0Jyk7XG4gICAgICAgIGxldCBtZXRob2QgPSAncHJpdmF0ZVBvc3RNeUJ1eSc7XG4gICAgICAgIHJldHVybiB0aGlzW21ldGhvZF0gKHsgJ2lkJzogaWQgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmFwaUtleSlcbiAgICAgICAgICAgIHRocm93IG5ldyBBdXRoZW50aWNhdGlvbkVycm9yICh0aGlzLmlkICsgJyByZXF1aXJlcyBhcGlLZXkgZm9yIGFsbCByZXF1ZXN0cycpO1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXVthcGldICsgJy8nICsgcGF0aDtcbiAgICAgICAgaWYgKGFwaSA9PSAncHJpdmF0ZScpIHtcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCk7XG4gICAgICAgICAgICBib2R5ID0gdGhpcy5qc29uICh0aGlzLmV4dGVuZCAoeyAnbm9uY2UnOiBub25jZSB9LCBwYXJhbXMpKTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAnQ29udGVudC1MZW5ndGgnOiBib2R5Lmxlbmd0aCxcbiAgICAgICAgICAgICAgICAna2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ3NpZ24nOiB0aGlzLmhtYWMgKHRoaXMuZW5jb2RlIChib2R5KSwgdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSwgJ3NoYTUxMicpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGNyeXB0b3BpYSA9IHtcblxuICAgICdpZCc6ICdjcnlwdG9waWEnLFxuICAgICduYW1lJzogJ0NyeXB0b3BpYScsXG4gICAgJ3JhdGVMaW1pdCc6IDE1MDAsXG4gICAgJ2NvdW50cmllcyc6ICdOWicsIC8vIE5ldyBaZWFsYW5kXG4gICAgJ2hhc0ZldGNoVGlja2Vycyc6IHRydWUsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjk0ODQzOTQtN2I0ZWE2ZTItODRjNi0xMWU3LTgzZTUtMWZjY2Y0YjJkYzgxLmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly93d3cuY3J5cHRvcGlhLmNvLm56L2FwaScsXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly93d3cuY3J5cHRvcGlhLmNvLm56JyxcbiAgICAgICAgJ2RvYyc6IFtcbiAgICAgICAgICAgICdodHRwczovL3d3dy5jcnlwdG9waWEuY28ubnovRm9ydW0vVGhyZWFkLzI1NScsXG4gICAgICAgICAgICAnaHR0cHM6Ly93d3cuY3J5cHRvcGlhLmNvLm56L0ZvcnVtL1RocmVhZC8yNTYnLFxuICAgICAgICBdLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ0dldEN1cnJlbmNpZXMnLFxuICAgICAgICAgICAgICAgICdHZXRUcmFkZVBhaXJzJyxcbiAgICAgICAgICAgICAgICAnR2V0TWFya2V0cycsXG4gICAgICAgICAgICAgICAgJ0dldE1hcmtldHMve2lkfScsXG4gICAgICAgICAgICAgICAgJ0dldE1hcmtldHMve2hvdXJzfScsXG4gICAgICAgICAgICAgICAgJ0dldE1hcmtldHMve2lkfS97aG91cnN9JyxcbiAgICAgICAgICAgICAgICAnR2V0TWFya2V0L3tpZH0nLFxuICAgICAgICAgICAgICAgICdHZXRNYXJrZXQve2lkfS97aG91cnN9JyxcbiAgICAgICAgICAgICAgICAnR2V0TWFya2V0SGlzdG9yeS97aWR9JyxcbiAgICAgICAgICAgICAgICAnR2V0TWFya2V0SGlzdG9yeS97aWR9L3tob3Vyc30nLFxuICAgICAgICAgICAgICAgICdHZXRNYXJrZXRPcmRlcnMve2lkfScsXG4gICAgICAgICAgICAgICAgJ0dldE1hcmtldE9yZGVycy97aWR9L3tjb3VudH0nLFxuICAgICAgICAgICAgICAgICdHZXRNYXJrZXRPcmRlckdyb3Vwcy97aWRzfS97Y291bnR9JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ0NhbmNlbFRyYWRlJyxcbiAgICAgICAgICAgICAgICAnR2V0QmFsYW5jZScsXG4gICAgICAgICAgICAgICAgJ0dldERlcG9zaXRBZGRyZXNzJyxcbiAgICAgICAgICAgICAgICAnR2V0T3Blbk9yZGVycycsXG4gICAgICAgICAgICAgICAgJ0dldFRyYWRlSGlzdG9yeScsXG4gICAgICAgICAgICAgICAgJ0dldFRyYW5zYWN0aW9ucycsXG4gICAgICAgICAgICAgICAgJ1N1Ym1pdFRpcCcsXG4gICAgICAgICAgICAgICAgJ1N1Ym1pdFRyYWRlJyxcbiAgICAgICAgICAgICAgICAnU3VibWl0VHJhbnNmZXInLFxuICAgICAgICAgICAgICAgICdTdWJtaXRXaXRoZHJhdycsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE1hcmtldHMgKCkge1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgbGV0IG1hcmtldHMgPSByZXNwb25zZVsnRGF0YSddO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1hcmtldHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCBtYXJrZXQgPSBtYXJrZXRzW2ldO1xuICAgICAgICAgICAgbGV0IGlkID0gbWFya2V0WydUcmFkZVBhaXJJZCddO1xuICAgICAgICAgICAgbGV0IHN5bWJvbCA9IG1hcmtldFsnTGFiZWwnXTtcbiAgICAgICAgICAgIGxldCBbIGJhc2UsIHF1b3RlIF0gPSBzeW1ib2wuc3BsaXQgKCcvJyk7XG4gICAgICAgICAgICByZXN1bHQucHVzaCAoe1xuICAgICAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICAgICAgICAgICdzeW1ib2wnOiBzeW1ib2wsXG4gICAgICAgICAgICAgICAgJ2Jhc2UnOiBiYXNlLFxuICAgICAgICAgICAgICAgICdxdW90ZSc6IHF1b3RlLFxuICAgICAgICAgICAgICAgICdpbmZvJzogbWFya2V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRNYXJrZXRPcmRlcnNJZCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdpZCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgb3JkZXJib29rID0gcmVzcG9uc2VbJ0RhdGEnXTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSB7ICdiaWRzJzogJ0J1eScsICdhc2tzJzogJ1NlbGwnIH07XG4gICAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMgKHNpZGVzKTtcbiAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBrZXlzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICBsZXQga2V5ID0ga2V5c1trXTtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNba2V5XTtcbiAgICAgICAgICAgIGxldCBvcmRlcnMgPSBvcmRlcmJvb2tbc2lkZV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBvcmRlciA9IG9yZGVyc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgcHJpY2UgPSBwYXJzZUZsb2F0IChvcmRlclsnUHJpY2UnXSk7XG4gICAgICAgICAgICAgICAgbGV0IGFtb3VudCA9IHBhcnNlRmxvYXQgKG9yZGVyWydUb3RhbCddKTtcbiAgICAgICAgICAgICAgICByZXN1bHRba2V5XS5wdXNoIChbIHByaWNlLCBhbW91bnQgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgcGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KSB7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydIaWdoJ10pLFxuICAgICAgICAgICAgJ2xvdyc6IHBhcnNlRmxvYXQgKHRpY2tlclsnTG93J10pLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnQmlkUHJpY2UnXSksXG4gICAgICAgICAgICAnYXNrJzogcGFyc2VGbG9hdCAodGlja2VyWydBc2tQcmljZSddKSxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ09wZW4nXSksXG4gICAgICAgICAgICAnY2xvc2UnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ0Nsb3NlJ10pLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ0xhc3RQcmljZSddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ0NoYW5nZSddKSxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsnQmFzZVZvbHVtZSddKSxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsnVm9sdW1lJ10pLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBtID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0TWFya2V0SWQgKHtcbiAgICAgICAgICAgICdpZCc6IG1bJ2lkJ10sXG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgdGlja2VyID0gcmVzcG9uc2VbJ0RhdGEnXTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VUaWNrZXIgKHRpY2tlciwgbSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VycyAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0TWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHt9O1xuICAgICAgICBsZXQgdGlja2VycyA9IHJlc3BvbnNlWydEYXRhJ107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGlja2Vycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IHRpY2tlciA9IHRpY2tlcnNbaV07XG4gICAgICAgICAgICBsZXQgaWQgPSB0aWNrZXJbJ1RyYWRlUGFpcklkJ107XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gdGhpcy5tYXJrZXRzX2J5X2lkW2lkXTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBtYXJrZXRbJ3N5bWJvbCddO1xuICAgICAgICAgICAgcmVzdWx0W3N5bWJvbF0gPSB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIG1hcmtldCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgcGFyc2VUcmFkZSAodHJhZGUsIG1hcmtldCkge1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdHJhZGVbJ1RpbWVzdGFtcCddICogMTAwMDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpZCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdpbmZvJzogdHJhZGUsXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ3N5bWJvbCc6IG1hcmtldFsnc3ltYm9sJ10sXG4gICAgICAgICAgICAndHlwZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdzaWRlJzogdHJhZGVbJ1R5cGUnXS50b0xvd2VyQ2FzZSAoKSxcbiAgICAgICAgICAgICdwcmljZSc6IHRyYWRlWydQcmljZSddLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IHRyYWRlWydBbW91bnQnXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG0gPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRNYXJrZXRIaXN0b3J5SWRIb3VycyAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdpZCc6IG1bJ2lkJ10sXG4gICAgICAgICAgICAnaG91cnMnOiAyNCwgLy8gZGVmYXVsdFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IHRyYWRlcyA9IHJlc3BvbnNlWydEYXRhJ107XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlVHJhZGVzICh0cmFkZXMsIG0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0R2V0QmFsYW5jZSAoKTtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gcmVzcG9uc2VbJ0RhdGEnXTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiByZXNwb25zZSB9O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJhbGFuY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgYmFsYW5jZSA9IGJhbGFuY2VzW2ldO1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gYmFsYW5jZVsnU3ltYm9sJ107XG4gICAgICAgICAgICBsZXQgYWNjb3VudCA9IHtcbiAgICAgICAgICAgICAgICAnZnJlZSc6IGJhbGFuY2VbJ0F2YWlsYWJsZSddLFxuICAgICAgICAgICAgICAgICd1c2VkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IGJhbGFuY2VbJ1RvdGFsJ10sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYWNjb3VudFsndXNlZCddID0gYWNjb3VudFsndG90YWwnXSAtIGFjY291bnRbJ2ZyZWUnXTtcbiAgICAgICAgICAgIHJlc3VsdFtjdXJyZW5jeV0gPSBhY2NvdW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdNYXJrZXQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICAgICAgJ1R5cGUnOiB0aGlzLmNhcGl0YWxpemUgKHNpZGUpLFxuICAgICAgICAgICAgJ1JhdGUnOiBwcmljZSxcbiAgICAgICAgICAgICdBbW91bnQnOiBhbW91bnQsXG4gICAgICAgIH07XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RTdWJtaXRUcmFkZSAodGhpcy5leHRlbmQgKG9yZGVyLCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnRGF0YSddWydPcmRlcklkJ10udG9TdHJpbmcgKCksXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdENhbmNlbFRyYWRlICh7XG4gICAgICAgICAgICAnVHlwZSc6ICdUcmFkZScsXG4gICAgICAgICAgICAnT3JkZXJJZCc6IGlkLFxuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArICcvJyArIHRoaXMuaW1wbG9kZVBhcmFtcyAocGF0aCwgcGFyYW1zKTtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5vbWl0IChwYXJhbXMsIHRoaXMuZXh0cmFjdFBhcmFtcyAocGF0aCkpO1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHF1ZXJ5KS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChxdWVyeSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpLnRvU3RyaW5nICgpO1xuICAgICAgICAgICAgYm9keSA9IHRoaXMuanNvbiAocXVlcnkpO1xuICAgICAgICAgICAgbGV0IGhhc2ggPSB0aGlzLmhhc2ggKHRoaXMuZW5jb2RlIChib2R5KSwgJ21kNScsICdiYXNlNjQnKTtcbiAgICAgICAgICAgIGxldCBzZWNyZXQgPSB0aGlzLmJhc2U2NFRvQmluYXJ5ICh0aGlzLnNlY3JldCk7XG4gICAgICAgICAgICBsZXQgdXJpID0gdGhpcy5lbmNvZGVVUklDb21wb25lbnQgKHVybCk7XG4gICAgICAgICAgICBsZXQgbG93ZXJjYXNlID0gdXJpLnRvTG93ZXJDYXNlICgpO1xuICAgICAgICAgICAgbGV0IHBheWxvYWQgPSB0aGlzLmFwaUtleSArIG1ldGhvZCArIGxvd2VyY2FzZSArIG5vbmNlICsgdGhpcy5iaW5hcnlUb1N0cmluZyAoaGFzaCk7XG4gICAgICAgICAgICBsZXQgc2lnbmF0dXJlID0gdGhpcy5obWFjICh0aGlzLmVuY29kZSAocGF5bG9hZCksIHNlY3JldCwgJ3NoYTI1NicsICdiYXNlNjQnKTtcbiAgICAgICAgICAgIGxldCBhdXRoID0gJ2FteCAnICsgdGhpcy5hcGlLZXkgKyAnOicgKyB0aGlzLmJpbmFyeVRvU3RyaW5nIChzaWduYXR1cmUpICsgJzonICsgbm9uY2U7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtTGVuZ3RoJzogYm9keS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgJ0F1dGhvcml6YXRpb24nOiBhdXRoLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgICAgIGlmICgnU3VjY2VzcycgaW4gcmVzcG9uc2UpXG4gICAgICAgICAgICBpZiAocmVzcG9uc2VbJ1N1Y2Nlc3MnXSlcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGRzeCA9IHtcblxuICAgICdpZCc6ICdkc3gnLFxuICAgICduYW1lJzogJ0RTWCcsXG4gICAgJ2NvdW50cmllcyc6ICdVSycsXG4gICAgJ3JhdGVMaW1pdCc6IDE1MDAsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc5OTAyNzUtMTQxMzE1OGEtNjQ1YS0xMWU3LTkzMWMtOTQ3MTdmNzUxMGUzLmpwZycsXG4gICAgICAgICdhcGknOiB7XG4gICAgICAgICAgICAnbWFwaSc6ICdodHRwczovL2RzeC51ay9tYXBpJywgIC8vIG1hcmtldCBkYXRhXG4gICAgICAgICAgICAndGFwaSc6ICdodHRwczovL2RzeC51ay90YXBpJywgIC8vIHRyYWRpbmdcbiAgICAgICAgICAgICdkd2FwaSc6ICdodHRwczovL2RzeC51ay9kd2FwaScsIC8vIGRlcG9zaXQvd2l0aGRyYXdcbiAgICAgICAgfSxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL2RzeC51aycsXG4gICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAnaHR0cHM6Ly9hcGkuZHN4LnVrJyxcbiAgICAgICAgICAgICdodHRwczovL2RzeC51ay9hcGlfZG9jcy9wdWJsaWMnLFxuICAgICAgICAgICAgJ2h0dHBzOi8vZHN4LnVrL2FwaV9kb2NzL3ByaXZhdGUnLFxuICAgICAgICAgICAgJycsXG4gICAgICAgIF0sXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAnbWFwaSc6IHsgLy8gbWFya2V0IGRhdGEgKHB1YmxpYylcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ2JhcnNGcm9tTW9tZW50L3tpZH0ve3BlcmlvZH0ve3N0YXJ0fScsIC8vIGVtcHR5IHJlcGx5IDpcXFxuICAgICAgICAgICAgICAgICdkZXB0aC97aWR9JyxcbiAgICAgICAgICAgICAgICAnaW5mbycsXG4gICAgICAgICAgICAgICAgJ2xhc3RCYXJzL3tpZH0ve3BlcmlvZH0ve2Ftb3VudH0nLCAvLyBwZXJpb2QgaXMgKG0sIGggb3IgZClcbiAgICAgICAgICAgICAgICAncGVyaW9kQmFycy97aWR9L3twZXJpb2R9L3tzdGFydH0ve2VuZH0nLFxuICAgICAgICAgICAgICAgICd0aWNrZXIve2lkfScsXG4gICAgICAgICAgICAgICAgJ3RyYWRlcy97aWR9JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICd0YXBpJzogeyAvLyB0cmFkaW5nIChwcml2YXRlKVxuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2dldEluZm8nLFxuICAgICAgICAgICAgICAgICdUcmFuc0hpc3RvcnknLFxuICAgICAgICAgICAgICAgICdUcmFkZUhpc3RvcnknLFxuICAgICAgICAgICAgICAgICdPcmRlckhpc3RvcnknLFxuICAgICAgICAgICAgICAgICdBY3RpdmVPcmRlcnMnLFxuICAgICAgICAgICAgICAgICdUcmFkZScsXG4gICAgICAgICAgICAgICAgJ0NhbmNlbE9yZGVyJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdkd2FwaSc6IHsgLy8gZGVwb3NpdCAvIHdpdGhkcmF3IChwcml2YXRlKVxuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2dldENyeXB0b0RlcG9zaXRBZGRyZXNzJyxcbiAgICAgICAgICAgICAgICAnY3J5cHRvV2l0aGRyYXcnLFxuICAgICAgICAgICAgICAgICdmaWF0V2l0aGRyYXcnLFxuICAgICAgICAgICAgICAgICdnZXRUcmFuc2FjdGlvblN0YXR1cycsXG4gICAgICAgICAgICAgICAgJ2dldFRyYW5zYWN0aW9ucycsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE1hcmtldHMgKCkge1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLm1hcGlHZXRJbmZvICgpO1xuICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzIChyZXNwb25zZVsncGFpcnMnXSk7XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgcCA9IDA7IHAgPCBrZXlzLmxlbmd0aDsgcCsrKSB7XG4gICAgICAgICAgICBsZXQgaWQgPSBrZXlzW3BdO1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IHJlc3BvbnNlWydwYWlycyddW2lkXTtcbiAgICAgICAgICAgIGxldCBiYXNlID0gaWQuc2xpY2UgKDAsIDMpO1xuICAgICAgICAgICAgbGV0IHF1b3RlID0gaWQuc2xpY2UgKDMsIDYpO1xuICAgICAgICAgICAgYmFzZSA9IGJhc2UudG9VcHBlckNhc2UgKCk7XG4gICAgICAgICAgICBxdW90ZSA9IHF1b3RlLnRvVXBwZXJDYXNlICgpO1xuICAgICAgICAgICAgbGV0IHN5bWJvbCA9IGJhc2UgKyAnLycgKyBxdW90ZTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoICh7XG4gICAgICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgICAgICAgICAgJ3N5bWJvbCc6IHN5bWJvbCxcbiAgICAgICAgICAgICAgICAnYmFzZSc6IGJhc2UsXG4gICAgICAgICAgICAgICAgJ3F1b3RlJzogcXVvdGUsXG4gICAgICAgICAgICAgICAgJ2luZm8nOiBtYXJrZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnRhcGlQb3N0R2V0SW5mbyAoKTtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gcmVzcG9uc2VbJ3JldHVybiddO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGJhbGFuY2VzIH07XG4gICAgICAgIGxldCBjdXJyZW5jaWVzID0gT2JqZWN0LmtleXMgKGJhbGFuY2VzWyd0b3RhbCddKTtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBjdXJyZW5jaWVzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBjdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiBiYWxhbmNlc1snZnVuZHMnXVtjdXJyZW5jeV0sXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogYmFsYW5jZXNbJ3RvdGFsJ11bY3VycmVuY3ldLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGFjY291bnRbJ3VzZWQnXSA9IGFjY291bnRbJ3RvdGFsJ10gLSBhY2NvdW50WydmcmVlJ107XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLm1hcGlHZXREZXB0aElkICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2lkJzogcFsnaWQnXSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSByZXNwb25zZVtwWydpZCddXTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gb3JkZXJbMF07XG4gICAgICAgICAgICAgICAgbGV0IGFtb3VudCA9IG9yZGVyWzFdO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtzaWRlXS5wdXNoIChbIHByaWNlLCBhbW91bnQgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLm1hcGlHZXRUaWNrZXJJZCAoe1xuICAgICAgICAgICAgJ2lkJzogcFsnaWQnXSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aWNrZXIgPSByZXNwb25zZVtwWydpZCddXTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRpY2tlclsndXBkYXRlZCddICogMTAwMDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2J1eSddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3NlbGwnXSksXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xhc3QnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYXZnJ10pLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbCddKSxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndm9sX2N1ciddKSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBpR2V0VHJhZGVzSWQgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnaWQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgaWYgKHR5cGUgPT0gJ21hcmtldCcpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgYWxsb3dzIGxpbWl0IG9yZGVycyBvbmx5Jyk7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdwYWlyJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICd0eXBlJzogc2lkZSxcbiAgICAgICAgICAgICdyYXRlJzogcHJpY2UsXG4gICAgICAgICAgICAnYW1vdW50JzogYW1vdW50LFxuICAgICAgICB9O1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnRhcGlQb3N0VHJhZGUgKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ2lkJzogcmVzcG9uc2VbJ3JldHVybiddWydvcmRlcklkJ10udG9TdHJpbmcgKCksXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy50YXBpUG9zdENhbmNlbE9yZGVyICh7ICdvcmRlcklkJzogaWQgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdtYXBpJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddW2FwaV07XG4gICAgICAgIGlmICgoYXBpID09ICdtYXBpJykgfHwgKGFwaSA9PSAnZHdhcGknKSlcbiAgICAgICAgICAgIHVybCArPSAnLycgKyB0aGlzLmltcGxvZGVQYXJhbXMgKHBhdGgsIHBhcmFtcyk7XG4gICAgICAgIGxldCBxdWVyeSA9IHRoaXMub21pdCAocGFyYW1zLCB0aGlzLmV4dHJhY3RQYXJhbXMgKHBhdGgpKTtcbiAgICAgICAgaWYgKGFwaSA9PSAnbWFwaScpIHtcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyAocXVlcnkpLmxlbmd0aClcbiAgICAgICAgICAgICAgICB1cmwgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHF1ZXJ5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCk7XG4gICAgICAgICAgICBsZXQgbWV0aG9kID0gcGF0aDtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLnVybGVuY29kZSAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICAgICAnbWV0aG9kJzogcGF0aCxcbiAgICAgICAgICAgICAgICAnbm9uY2UnOiBub25jZSxcbiAgICAgICAgICAgIH0sIHF1ZXJ5KSk7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICAgICAgICAnQ29udGVudC1MZW5ndGgnOiBib2R5Lmxlbmd0aCxcbiAgICAgICAgICAgICAgICAnS2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ1NpZ24nOiB0aGlzLmhtYWMgKHRoaXMuZW5jb2RlIChib2R5KSwgdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSwgJ3NoYTUxMicsICdiYXNlNjQnKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgICAgICBpZiAoYXBpID09ICdtYXBpJylcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgaWYgKCdzdWNjZXNzJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIGlmIChyZXNwb25zZVsnc3VjY2VzcyddKVxuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgZXhtbyA9IHtcblxuICAgICdpZCc6ICdleG1vJyxcbiAgICAnbmFtZSc6ICdFWE1PJyxcbiAgICAnY291bnRyaWVzJzogWyAnRVMnLCAnUlUnIF0sIC8vIFNwYWluLCBSdXNzaWFcbiAgICAncmF0ZUxpbWl0JzogMTAwMCwgLy8gb25jZSBldmVyeSAzNTAgbXMg4omIIDE4MCByZXF1ZXN0cyBwZXIgbWludXRlIOKJiCAzIHJlcXVlc3RzIHBlciBzZWNvbmRcbiAgICAndmVyc2lvbic6ICd2MScsXG4gICAgJ2hhc0ZldGNoVGlja2Vycyc6IHRydWUsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc3NjY0OTEtMWIwZWE5NTYtNWVkYS0xMWU3LTkyMjUtNDBkNjdiNDgxYjhkLmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly9hcGkuZXhtby5jb20nLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vZXhtby5tZScsXG4gICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAnaHR0cHM6Ly9leG1vLm1lL3J1L2FwaV9kb2MnLFxuICAgICAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS9leG1vLWRldi9leG1vX2FwaV9saWIvdHJlZS9tYXN0ZXIvbm9kZWpzJyxcbiAgICAgICAgXSxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdjdXJyZW5jeScsXG4gICAgICAgICAgICAgICAgJ29yZGVyX2Jvb2snLFxuICAgICAgICAgICAgICAgICdwYWlyX3NldHRpbmdzJyxcbiAgICAgICAgICAgICAgICAndGlja2VyJyxcbiAgICAgICAgICAgICAgICAndHJhZGVzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ3VzZXJfaW5mbycsXG4gICAgICAgICAgICAgICAgJ29yZGVyX2NyZWF0ZScsXG4gICAgICAgICAgICAgICAgJ29yZGVyX2NhbmNlbCcsXG4gICAgICAgICAgICAgICAgJ3VzZXJfb3Blbl9vcmRlcnMnLFxuICAgICAgICAgICAgICAgICd1c2VyX3RyYWRlcycsXG4gICAgICAgICAgICAgICAgJ3VzZXJfY2FuY2VsbGVkX29yZGVycycsXG4gICAgICAgICAgICAgICAgJ29yZGVyX3RyYWRlcycsXG4gICAgICAgICAgICAgICAgJ3JlcXVpcmVkX2Ftb3VudCcsXG4gICAgICAgICAgICAgICAgJ2RlcG9zaXRfYWRkcmVzcycsXG4gICAgICAgICAgICAgICAgJ3dpdGhkcmF3X2NyeXB0JyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXdfZ2V0X3R4aWQnLFxuICAgICAgICAgICAgICAgICdleGNvZGVfY3JlYXRlJyxcbiAgICAgICAgICAgICAgICAnZXhjb2RlX2xvYWQnLFxuICAgICAgICAgICAgICAgICd3YWxsZXRfaGlzdG9yeScsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE1hcmtldHMgKCkge1xuICAgICAgICBsZXQgbWFya2V0cyA9IGF3YWl0IHRoaXMucHVibGljR2V0UGFpclNldHRpbmdzICgpO1xuICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzIChtYXJrZXRzKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGxldCBwID0gMDsgcCA8IGtleXMubGVuZ3RoOyBwKyspIHtcbiAgICAgICAgICAgIGxldCBpZCA9IGtleXNbcF07XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gbWFya2V0c1tpZF07XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gaWQucmVwbGFjZSAoJ18nLCAnLycpO1xuICAgICAgICAgICAgbGV0IFsgYmFzZSwgcXVvdGUgXSA9IHN5bWJvbC5zcGxpdCAoJy8nKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoICh7XG4gICAgICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgICAgICAgICAgJ3N5bWJvbCc6IHN5bWJvbCxcbiAgICAgICAgICAgICAgICAnYmFzZSc6IGJhc2UsXG4gICAgICAgICAgICAgICAgJ3F1b3RlJzogcXVvdGUsXG4gICAgICAgICAgICAgICAgJ2luZm8nOiBtYXJrZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0VXNlckluZm8gKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogcmVzcG9uc2UgfTtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCB0aGlzLmN1cnJlbmNpZXMubGVuZ3RoOyBjKyspIHtcbiAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IHRoaXMuY3VycmVuY2llc1tjXTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd1c2VkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoY3VycmVuY3kgaW4gcmVzcG9uc2VbJ2JhbGFuY2VzJ10pXG4gICAgICAgICAgICAgICAgYWNjb3VudFsnZnJlZSddID0gcGFyc2VGbG9hdCAocmVzcG9uc2VbJ2JhbGFuY2VzJ11bY3VycmVuY3ldKTtcbiAgICAgICAgICAgIGlmIChjdXJyZW5jeSBpbiByZXNwb25zZVsncmVzZXJ2ZWQnXSlcbiAgICAgICAgICAgICAgICBhY2NvdW50Wyd1c2VkJ10gPSBwYXJzZUZsb2F0IChyZXNwb25zZVsncmVzZXJ2ZWQnXVtjdXJyZW5jeV0pO1xuICAgICAgICAgICAgYWNjb3VudFsndG90YWwnXSA9IHRoaXMuc3VtIChhY2NvdW50WydmcmVlJ10sIGFjY291bnRbJ3VzZWQnXSk7XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldE9yZGVyQm9vayAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdwYWlyJzogcFsnaWQnXSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSByZXNwb25zZVtwWydpZCddXTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSB7ICdiaWRzJzogJ2JpZCcsICdhc2tzJzogJ2FzaycgfTtcbiAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyAoc2lkZXMpO1xuICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGtleXMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgIGxldCBrZXkgPSBrZXlzW2tdO1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1trZXldO1xuICAgICAgICAgICAgbGV0IG9yZGVycyA9IG9yZGVyYm9va1tzaWRlXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9yZGVyID0gb3JkZXJzW2ldO1xuICAgICAgICAgICAgICAgIGxldCBwcmljZSA9IHBhcnNlRmxvYXQgKG9yZGVyWzBdKTtcbiAgICAgICAgICAgICAgICBsZXQgYW1vdW50ID0gcGFyc2VGbG9hdCAob3JkZXJbMV0pO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldLnB1c2ggKFsgcHJpY2UsIGFtb3VudCBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBwYXJzZVRpY2tlciAodGlja2VyLCBtYXJrZXQpIHtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRpY2tlclsndXBkYXRlZCddICogMTAwMDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2J1eV9wcmljZSddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3NlbGxfcHJpY2UnXSksXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xhc3RfdHJhZGUnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYXZnJ10pLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbCddKSxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndm9sX2N1cnInXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXJzIChjdXJyZW5jeSA9ICdVU0QnKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0VGlja2VyICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge307XG4gICAgICAgIGxldCBpZHMgPSBPYmplY3Qua2V5cyAocmVzcG9uc2UpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IGlkID0gaWRzW2ldO1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IHRoaXMubWFya2V0c19ieV9pZFtpZF07XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gbWFya2V0WydzeW1ib2wnXTtcbiAgICAgICAgICAgIGxldCB0aWNrZXIgPSByZXNwb25zZVtpZF07XG4gICAgICAgICAgICByZXN1bHRbc3ltYm9sXSA9IHRoaXMucGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0VGlja2VyICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVRpY2tlciAocmVzcG9uc2VbcFsnaWQnXV0sIHApO1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wdWJsaWNHZXRUcmFkZXMgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAncGFpcic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcHJlZml4ID0gJyc7XG4gICAgICAgIGlmICh0eXBlID09ICdtYXJrZXQnKVxuICAgICAgICAgICAgcHJlZml4ID0gJ21hcmtldF8nO1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAncGFpcic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgICAgICAncXVhbnRpdHknOiBhbW91bnQsXG4gICAgICAgICAgICAncHJpY2UnOiBwcmljZSB8fCAwLFxuICAgICAgICAgICAgJ3R5cGUnOiBwcmVmaXggKyBzaWRlLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0T3JkZXJDcmVhdGUgKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ2lkJzogcmVzcG9uc2VbJ29yZGVyX2lkJ10udG9TdHJpbmcgKCksXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdE9yZGVyQ2FuY2VsICh7ICdvcmRlcl9pZCc6IGlkIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgJy8nICsgdGhpcy52ZXJzaW9uICsgJy8nICsgcGF0aDtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChwYXJhbXMpLmxlbmd0aClcbiAgICAgICAgICAgICAgICB1cmwgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHBhcmFtcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpO1xuICAgICAgICAgICAgYm9keSA9IHRoaXMudXJsZW5jb2RlICh0aGlzLmV4dGVuZCAoeyAnbm9uY2UnOiBub25jZSB9LCBwYXJhbXMpKTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgICAgICAgICdDb250ZW50LUxlbmd0aCc6IGJvZHkubGVuZ3RoLFxuICAgICAgICAgICAgICAgICdLZXknOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgICAgICAnU2lnbic6IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKGJvZHkpLCB0aGlzLmVuY29kZSAodGhpcy5zZWNyZXQpLCAnc2hhNTEyJyksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdyZXN1bHQnIGluIHJlc3BvbnNlKSB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2VbJ3Jlc3VsdCddKVxuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBmbG93YnRjID0ge1xuXG4gICAgJ2lkJzogJ2Zsb3didGMnLFxuICAgICduYW1lJzogJ2Zsb3dCVEMnLFxuICAgICdjb3VudHJpZXMnOiAnQlInLCAvLyBCcmF6aWxcbiAgICAndmVyc2lvbic6ICd2MScsXG4gICAgJ3JhdGVMaW1pdCc6IDEwMDAsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjgxNjI0NjUtY2Q4MTVkNGMtNjdjZi0xMWU3LThlNTctNDM4YmVhMDUyM2EyLmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly9hcGkuZmxvd2J0Yy5jb206ODQwMC9hamF4JyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3RyYWRlci5mbG93YnRjLmNvbScsXG4gICAgICAgICdkb2MnOiAnaHR0cDovL3d3dy5mbG93YnRjLmNvbS5ici9hcGkvJyxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnR2V0VGlja2VyJyxcbiAgICAgICAgICAgICAgICAnR2V0VHJhZGVzJyxcbiAgICAgICAgICAgICAgICAnR2V0VHJhZGVzQnlEYXRlJyxcbiAgICAgICAgICAgICAgICAnR2V0T3JkZXJCb29rJyxcbiAgICAgICAgICAgICAgICAnR2V0UHJvZHVjdFBhaXJzJyxcbiAgICAgICAgICAgICAgICAnR2V0UHJvZHVjdHMnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnQ3JlYXRlQWNjb3VudCcsXG4gICAgICAgICAgICAgICAgJ0dldFVzZXJJbmZvJyxcbiAgICAgICAgICAgICAgICAnU2V0VXNlckluZm8nLFxuICAgICAgICAgICAgICAgICdHZXRBY2NvdW50SW5mbycsXG4gICAgICAgICAgICAgICAgJ0dldEFjY291bnRUcmFkZXMnLFxuICAgICAgICAgICAgICAgICdHZXREZXBvc2l0QWRkcmVzc2VzJyxcbiAgICAgICAgICAgICAgICAnV2l0aGRyYXcnLFxuICAgICAgICAgICAgICAgICdDcmVhdGVPcmRlcicsXG4gICAgICAgICAgICAgICAgJ01vZGlmeU9yZGVyJyxcbiAgICAgICAgICAgICAgICAnQ2FuY2VsT3JkZXInLFxuICAgICAgICAgICAgICAgICdDYW5jZWxBbGxPcmRlcnMnLFxuICAgICAgICAgICAgICAgICdHZXRBY2NvdW50T3Blbk9yZGVycycsXG4gICAgICAgICAgICAgICAgJ0dldE9yZGVyRmVlJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoTWFya2V0cyAoKSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljUG9zdEdldFByb2R1Y3RQYWlycyAoKTtcbiAgICAgICAgbGV0IG1hcmtldHMgPSByZXNwb25zZVsncHJvZHVjdFBhaXJzJ107XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgcCA9IDA7IHAgPCBtYXJrZXRzLmxlbmd0aDsgcCsrKSB7XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gbWFya2V0c1twXTtcbiAgICAgICAgICAgIGxldCBpZCA9IG1hcmtldFsnbmFtZSddO1xuICAgICAgICAgICAgbGV0IGJhc2UgPSBtYXJrZXRbJ3Byb2R1Y3QxTGFiZWwnXTtcbiAgICAgICAgICAgIGxldCBxdW90ZSA9IG1hcmtldFsncHJvZHVjdDJMYWJlbCddO1xuICAgICAgICAgICAgbGV0IHN5bWJvbCA9IGJhc2UgKyAnLycgKyBxdW90ZTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoICh7XG4gICAgICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgICAgICAgICAgJ3N5bWJvbCc6IHN5bWJvbCxcbiAgICAgICAgICAgICAgICAnYmFzZSc6IGJhc2UsXG4gICAgICAgICAgICAgICAgJ3F1b3RlJzogcXVvdGUsXG4gICAgICAgICAgICAgICAgJ2luZm8nOiBtYXJrZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0R2V0QWNjb3VudEluZm8gKCk7XG4gICAgICAgIGxldCBiYWxhbmNlcyA9IHJlc3BvbnNlWydjdXJyZW5jaWVzJ107XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogcmVzcG9uc2UgfTtcbiAgICAgICAgZm9yIChsZXQgYiA9IDA7IGIgPCBiYWxhbmNlcy5sZW5ndGg7IGIrKykge1xuICAgICAgICAgICAgbGV0IGJhbGFuY2UgPSBiYWxhbmNlc1tiXTtcbiAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IGJhbGFuY2VbJ25hbWUnXTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogYmFsYW5jZVsnYmFsYW5jZSddLFxuICAgICAgICAgICAgICAgICd1c2VkJzogYmFsYW5jZVsnaG9sZCddLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhY2NvdW50Wyd0b3RhbCddID0gdGhpcy5zdW0gKGFjY291bnRbJ2ZyZWUnXSwgYWNjb3VudFsndXNlZCddKTtcbiAgICAgICAgICAgIHJlc3VsdFtjdXJyZW5jeV0gPSBhY2NvdW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSBhd2FpdCB0aGlzLnB1YmxpY1Bvc3RHZXRPcmRlckJvb2sgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAncHJvZHVjdFBhaXInOiBwWydpZCddLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAob3JkZXJbJ3B4J10pO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBwYXJzZUZsb2F0IChvcmRlclsncXR5J10pO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtzaWRlXS5wdXNoIChbIHByaWNlLCBhbW91bnQgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgdGlja2VyID0gYXdhaXQgdGhpcy5wdWJsaWNQb3N0R2V0VGlja2VyICh7XG4gICAgICAgICAgICAncHJvZHVjdFBhaXInOiBwWydpZCddLFxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydoaWdoJ10pLFxuICAgICAgICAgICAgJ2xvdyc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbG93J10pLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYmlkJ10pLFxuICAgICAgICAgICAgJ2Fzayc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYXNrJ10pLFxuICAgICAgICAgICAgJ3Z3YXAnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnb3Blbic6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjbG9zZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdmaXJzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsYXN0JzogcGFyc2VGbG9hdCAodGlja2VyWydsYXN0J10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndm9sdW1lMjRociddKSxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndm9sdW1lMjRoclByb2R1Y3QyJ10pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY1Bvc3RHZXRUcmFkZXMgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnaW5zJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBvcmRlclR5cGUgPSAodHlwZSA9PSAnbWFya2V0JykgPyAxIDogMDtcbiAgICAgICAgbGV0IG9yZGVyID0ge1xuICAgICAgICAgICAgJ2lucyc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgICAgICAnc2lkZSc6IHNpZGUsXG4gICAgICAgICAgICAnb3JkZXJUeXBlJzogb3JkZXJUeXBlLFxuICAgICAgICAgICAgJ3F0eSc6IGFtb3VudCxcbiAgICAgICAgICAgICdweCc6IHByaWNlLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0Q3JlYXRlT3JkZXIgKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ2lkJzogcmVzcG9uc2VbJ3NlcnZlck9yZGVySWQnXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBpZiAoJ2lucycgaW4gcGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdENhbmNlbE9yZGVyICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgICAgICdzZXJ2ZXJPcmRlcklkJzogaWQsXG4gICAgICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgcmVxdWlyZXMgYGluc2Agc3ltYm9sIHBhcmFtZXRlciBmb3IgY2FuY2VsbGluZyBhbiBvcmRlcicpO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgJy8nICsgdGhpcy52ZXJzaW9uICsgJy8nICsgcGF0aDtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChwYXJhbXMpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGJvZHkgPSB0aGlzLmpzb24gKHBhcmFtcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMudWlkKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBBdXRoZW50aWNhdGlvbkVycm9yICh0aGlzLmlkICsgJyByZXF1aXJlcyBgJyArIHRoaXMuaWQgKyAnLnVpZGAgcHJvcGVydHkgZm9yIGF1dGhlbnRpY2F0aW9uJyk7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpO1xuICAgICAgICAgICAgbGV0IGF1dGggPSBub25jZS50b1N0cmluZyAoKSArIHRoaXMudWlkICsgdGhpcy5hcGlLZXk7XG4gICAgICAgICAgICBsZXQgc2lnbmF0dXJlID0gdGhpcy5obWFjICh0aGlzLmVuY29kZSAoYXV0aCksIHRoaXMuZW5jb2RlICh0aGlzLnNlY3JldCkpO1xuICAgICAgICAgICAgYm9keSA9IHRoaXMuanNvbiAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICAgICAnYXBpS2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ2FwaU5vbmNlJzogbm9uY2UsXG4gICAgICAgICAgICAgICAgJ2FwaVNpZyc6IHNpZ25hdHVyZS50b1VwcGVyQ2FzZSAoKSxcbiAgICAgICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICdDb250ZW50LUxlbmd0aCc6IGJvZHkubGVuZ3RoLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgICAgIGlmICgnaXNBY2NlcHRlZCcgaW4gcmVzcG9uc2UpXG4gICAgICAgICAgICBpZiAocmVzcG9uc2VbJ2lzQWNjZXB0ZWQnXSlcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGZveGJpdCA9IGV4dGVuZCAoYmxpbmt0cmFkZSwge1xuICAgICdpZCc6ICdmb3hiaXQnLFxuICAgICduYW1lJzogJ0ZveEJpdCcsXG4gICAgJ2NvdW50cmllcyc6ICdCUicsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc5OTE0MTMtMTFiNDBkNDItNjQ3Zi0xMWU3LTkxZWUtNzhjZWQ4NzRkZDA5LmpwZycsXG4gICAgICAgICdhcGknOiB7XG4gICAgICAgICAgICAncHVibGljJzogJ2h0dHBzOi8vYXBpLmJsaW5rdHJhZGUuY29tL2FwaScsXG4gICAgICAgICAgICAncHJpdmF0ZSc6ICdodHRwczovL2FwaS5ibGlua3RyYWRlLmNvbS90YXBpJyxcbiAgICAgICAgfSxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL2ZveGJpdC5leGNoYW5nZScsXG4gICAgICAgICdkb2MnOiAnaHR0cHM6Ly9ibGlua3RyYWRlLmNvbS9kb2NzJyxcbiAgICB9LFxuICAgICdjb21tZW50JzogJ0JsaW5rdHJhZGUgQVBJJyxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9CUkwnOiB7ICdpZCc6ICdCVENCUkwnLCAnc3ltYm9sJzogJ0JUQy9CUkwnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnQlJMJywgJ2Jyb2tlcklkJzogNCwgJ2Jyb2tlcic6ICdGb3hCaXQnIH0sXG4gICAgfSxcbn0pXG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGZ5YiA9IHtcblxuICAgICdyYXRlTGltaXQnOiAxNTAwLFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICd0aWNrZXInLFxuICAgICAgICAgICAgICAgICd0aWNrZXJkZXRhaWxlZCcsXG4gICAgICAgICAgICAgICAgJ29yZGVyYm9vaycsXG4gICAgICAgICAgICAgICAgJ3RyYWRlcycsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAncHJpdmF0ZSc6IHtcbiAgICAgICAgICAgICdwb3N0JzogW1xuICAgICAgICAgICAgICAgICd0ZXN0JyxcbiAgICAgICAgICAgICAgICAnZ2V0YWNjaW5mbycsXG4gICAgICAgICAgICAgICAgJ2dldHBlbmRpbmdvcmRlcnMnLFxuICAgICAgICAgICAgICAgICdnZXRvcmRlcmhpc3RvcnknLFxuICAgICAgICAgICAgICAgICdjYW5jZWxwZW5kaW5nb3JkZXInLFxuICAgICAgICAgICAgICAgICdwbGFjZW9yZGVyJyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXcnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgbGV0IGJhbGFuY2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0R2V0YWNjaW5mbyAoKTtcbiAgICAgICAgbGV0IGJ0YyA9IHBhcnNlRmxvYXQgKGJhbGFuY2VbJ2J0Y0JhbCddKTtcbiAgICAgICAgbGV0IHN5bWJvbCA9IHRoaXMuc3ltYm9sc1swXTtcbiAgICAgICAgbGV0IHF1b3RlID0gdGhpcy5tYXJrZXRzW3N5bWJvbF1bJ3F1b3RlJ107XG4gICAgICAgIGxldCBsb3dlcmNhc2UgPSBxdW90ZS50b0xvd2VyQ2FzZSAoKSArICdCYWwnO1xuICAgICAgICBsZXQgZmlhdCA9IHBhcnNlRmxvYXQgKGJhbGFuY2VbbG93ZXJjYXNlXSk7XG4gICAgICAgIGxldCBjcnlwdG8gPSB7XG4gICAgICAgICAgICAnZnJlZSc6IGJ0YyxcbiAgICAgICAgICAgICd1c2VkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3RvdGFsJzogYnRjLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgYWNjb3VudHMgPSB7ICdCVEMnOiBjcnlwdG8gfTtcbiAgICAgICAgYWNjb3VudHNbcXVvdGVdID0ge1xuICAgICAgICAgICAgJ2ZyZWUnOiBmaWF0LFxuICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAndG90YWwnOiBmaWF0LFxuICAgICAgICB9O1xuICAgICAgICBhY2NvdW50c1snaW5mbyddID0gYmFsYW5jZTtcbiAgICAgICAgcmV0dXJuIGFjY291bnRzO1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRPcmRlcmJvb2sgKHBhcmFtcyk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdiaWRzJzogW10sXG4gICAgICAgICAgICAnYXNrcyc6IFtdLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHNpZGVzID0gWyAnYmlkcycsICdhc2tzJyBdO1xuICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IHNpZGVzLmxlbmd0aDsgcysrKSB7XG4gICAgICAgICAgICBsZXQgc2lkZSA9IHNpZGVzW3NdO1xuICAgICAgICAgICAgbGV0IG9yZGVycyA9IG9yZGVyYm9va1tzaWRlXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9yZGVyID0gb3JkZXJzW2ldO1xuICAgICAgICAgICAgICAgIGxldCBwcmljZSA9IHBhcnNlRmxvYXQgKG9yZGVyWzBdKTtcbiAgICAgICAgICAgICAgICBsZXQgYW1vdW50ID0gcGFyc2VGbG9hdCAob3JkZXJbMV0pO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtzaWRlXS5wdXNoIChbIHByaWNlLCBhbW91bnQgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBsZXQgdGlja2VyID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRUaWNrZXJkZXRhaWxlZCAoKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgbGFzdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IHZvbHVtZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKCdsYXN0JyBpbiB0aWNrZXIpXG4gICAgICAgICAgICBsYXN0ID0gcGFyc2VGbG9hdCAodGlja2VyWydsYXN0J10pO1xuICAgICAgICBpZiAoJ3ZvbCcgaW4gdGlja2VyKVxuICAgICAgICAgICAgdm9sdW1lID0gcGFyc2VGbG9hdCAodGlja2VyWyd2b2wnXSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbG93JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYmlkJ10pLFxuICAgICAgICAgICAgJ2Fzayc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYXNrJ10pLFxuICAgICAgICAgICAgJ3Z3YXAnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnb3Blbic6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjbG9zZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdmaXJzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsYXN0JzogbGFzdCxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiB2b2x1bWUsXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0VHJhZGVzIChwYXJhbXMpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0UGxhY2VvcmRlciAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdxdHknOiBhbW91bnQsXG4gICAgICAgICAgICAncHJpY2UnOiBwcmljZSxcbiAgICAgICAgICAgICd0eXBlJzogc2lkZVswXS50b1VwcGVyQ2FzZSAoKVxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsncGVuZGluZ19vaWQnXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0Q2FuY2VscGVuZGluZ29yZGVyICh7ICdvcmRlck5vJzogaWQgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ10gKyAnLycgKyBwYXRoO1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICB1cmwgKz0gJy5qc29uJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCk7XG4gICAgICAgICAgICBib2R5ID0gdGhpcy51cmxlbmNvZGUgKHRoaXMuZXh0ZW5kICh7ICd0aW1lc3RhbXAnOiBub25jZSB9LCBwYXJhbXMpKTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgICAgICAgICdrZXknOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgICAgICAnc2lnJzogdGhpcy5obWFjICh0aGlzLmVuY29kZSAoYm9keSksIHRoaXMuZW5jb2RlICh0aGlzLnNlY3JldCksICdzaGExJylcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgICAgICBpZiAoYXBpID09ICdwcml2YXRlJylcbiAgICAgICAgICAgIGlmICgnZXJyb3InIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZVsnZXJyb3InXSlcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBmeWJzZSA9IGV4dGVuZCAoZnliLCB7XG4gICAgJ2lkJzogJ2Z5YnNlJyxcbiAgICAnbmFtZSc6ICdGWUItU0UnLFxuICAgICdjb3VudHJpZXMnOiAnU0UnLCAvLyBTd2VkZW5cbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yNzc2NjUxMi0zMTAxOTc3Mi01ZWRiLTExZTctODI0MS0yZTY3NWU2Nzk3ZjEuanBnJyxcbiAgICAgICAgJ2FwaSc6ICdodHRwczovL3d3dy5meWJzZS5zZS9hcGkvU0VLJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy5meWJzZS5zZScsXG4gICAgICAgICdkb2MnOiAnaHR0cDovL2RvY3MuZnliLmFwaWFyeS5pbycsXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9TRUsnOiB7ICdpZCc6ICdTRUsnLCAnc3ltYm9sJzogJ0JUQy9TRUsnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnU0VLJyB9LFxuICAgIH0sXG59KVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBmeWJzZyA9IGV4dGVuZCAoZnliLCB7XG4gICAgJ2lkJzogJ2Z5YnNnJyxcbiAgICAnbmFtZSc6ICdGWUItU0cnLFxuICAgICdjb3VudHJpZXMnOiAnU0cnLCAvLyBTaW5nYXBvcmVcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yNzc2NjUxMy0zMzY0ZDU2YS01ZWRiLTExZTctOWU2Yi1kNTg5OGJiODljODEuanBnJyxcbiAgICAgICAgJ2FwaSc6ICdodHRwczovL3d3dy5meWJzZy5jb20vYXBpL1NHRCcsXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly93d3cuZnlic2cuY29tJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwOi8vZG9jcy5meWIuYXBpYXJ5LmlvJyxcbiAgICB9LFxuICAgICdtYXJrZXRzJzoge1xuICAgICAgICAnQlRDL1NHRCc6IHsgJ2lkJzogJ1NHRCcsICdzeW1ib2wnOiAnQlRDL1NHRCcsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdTR0QnIH0sXG4gICAgfSxcbn0pXG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGdhdGVjb2luID0ge1xuXG4gICAgJ2lkJzogJ2dhdGVjb2luJyxcbiAgICAnbmFtZSc6ICdHYXRlY29pbicsXG4gICAgJ3JhdGVMaW1pdCc6IDIwMDAsXG4gICAgJ2NvdW50cmllcyc6ICdISycsIC8vIEhvbmcgS29uZ1xuICAgICdjb21tZW50JzogJ2EgcmVndWxhdGVkL2xpY2Vuc2VkIGV4Y2hhbmdlJyxcbiAgICAnaGFzRmV0Y2hUaWNrZXJzJzogdHJ1ZSxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yODY0NjgxNy01MDg0NTdmMi03MjZjLTExZTctOWVlYi0zNTI4ZDI0MTNhNTguanBnJyxcbiAgICAgICAgJ2FwaSc6ICdodHRwczovL2FwaS5nYXRlY29pbi5jb20nLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vZ2F0ZWNvaW4uY29tJyxcbiAgICAgICAgJ2RvYyc6IFtcbiAgICAgICAgICAgICdodHRwczovL2dhdGVjb2luLmNvbS9hcGknLFxuICAgICAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS9HYXRlY29pbi9SRVNUZnVsLUFQSS1JbXBsZW1lbnRhdGlvbicsXG4gICAgICAgICAgICAnaHR0cHM6Ly9hcGkuZ2F0ZWNvaW4uY29tL3N3YWdnZXItdWkvaW5kZXguaHRtbCcsXG4gICAgICAgIF0sXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnUHVibGljL0V4Y2hhbmdlUmF0ZScsIC8vIEdldCB0aGUgZXhjaGFuZ2UgcmF0ZXNcbiAgICAgICAgICAgICAgICAnUHVibGljL0xpdmVUaWNrZXInLCAvLyBHZXQgbGl2ZSB0aWNrZXIgZm9yIGFsbCBjdXJyZW5jeVxuICAgICAgICAgICAgICAgICdQdWJsaWMvTGl2ZVRpY2tlci97Q3VycmVuY3lQYWlyfScsIC8vIEdldCBsaXZlIHRpY2tlciBieSBjdXJyZW5jeVxuICAgICAgICAgICAgICAgICdQdWJsaWMvTGl2ZVRpY2tlcnMnLCAvLyBHZXQgbGl2ZSB0aWNrZXIgZm9yIGFsbCBjdXJyZW5jeVxuICAgICAgICAgICAgICAgICdQdWJsaWMvTWFya2V0RGVwdGgve0N1cnJlbmN5UGFpcn0nLCAvLyBHZXRzIHByaWNlcyBhbmQgbWFya2V0IGRlcHRoIGZvciB0aGUgY3VycmVuY3kgcGFpci5cbiAgICAgICAgICAgICAgICAnUHVibGljL05ldHdvcmtTdGF0aXN0aWNzL3tEaWdpQ3VycmVuY3l9JywgLy8gR2V0IHRoZSBuZXR3b3JrIHN0YXR1cyBvZiBhIHNwZWNpZmljIGRpZ2l0YWwgY3VycmVuY3lcbiAgICAgICAgICAgICAgICAnUHVibGljL1N0YXRpc3RpY0hpc3Rvcnkve0RpZ2lDdXJyZW5jeX0ve1R5cGVvZmRhdGF9JywgLy8gR2V0IHRoZSBoaXN0b3JpY2FsIGRhdGEgb2YgYSBzcGVjaWZpYyBkaWdpdGFsIGN1cnJlbmN5XG4gICAgICAgICAgICAgICAgJ1B1YmxpYy9UaWNrZXJIaXN0b3J5L3tDdXJyZW5jeVBhaXJ9L3tUaW1lZnJhbWV9JywgLy8gR2V0IHRpY2tlciBoaXN0b3J5XG4gICAgICAgICAgICAgICAgJ1B1YmxpYy9UcmFuc2FjdGlvbnMve0N1cnJlbmN5UGFpcn0nLCAvLyBHZXRzIHJlY2VudCB0cmFuc2FjdGlvbnNcbiAgICAgICAgICAgICAgICAnUHVibGljL1RyYW5zYWN0aW9uc0hpc3Rvcnkve0N1cnJlbmN5UGFpcn0nLCAvLyBHZXRzIGFsbCB0cmFuc2FjdGlvbnNcbiAgICAgICAgICAgICAgICAnUmVmZXJlbmNlL0J1c2luZXNzTmF0dXJlTGlzdCcsIC8vIEdldCB0aGUgYnVzaW5lc3MgbmF0dXJlIGxpc3QuXG4gICAgICAgICAgICAgICAgJ1JlZmVyZW5jZS9Db3VudHJpZXMnLCAvLyBHZXQgdGhlIGNvdW50cnkgbGlzdC5cbiAgICAgICAgICAgICAgICAnUmVmZXJlbmNlL0N1cnJlbmNpZXMnLCAvLyBHZXQgdGhlIGN1cnJlbmN5IGxpc3QuXG4gICAgICAgICAgICAgICAgJ1JlZmVyZW5jZS9DdXJyZW5jeVBhaXJzJywgLy8gR2V0IHRoZSBjdXJyZW5jeSBwYWlyIGxpc3QuXG4gICAgICAgICAgICAgICAgJ1JlZmVyZW5jZS9DdXJyZW50U3RhdHVzTGlzdCcsIC8vIEdldCB0aGUgY3VycmVudCBzdGF0dXMgbGlzdC5cbiAgICAgICAgICAgICAgICAnUmVmZXJlbmNlL0lkZW50eWRvY3VtZW50VHlwZXMnLCAvLyBHZXQgdGhlIGRpZmZlcmVudCB0eXBlcyBvZiBpZGVudGl0eSBkb2N1bWVudHMgcG9zc2libGUuXG4gICAgICAgICAgICAgICAgJ1JlZmVyZW5jZS9JbmNvbWVSYW5nZUxpc3QnLCAvLyBHZXQgdGhlIGluY29tZSByYW5nZSBsaXN0LlxuICAgICAgICAgICAgICAgICdSZWZlcmVuY2UvSW5jb21lU291cmNlTGlzdCcsIC8vIEdldCB0aGUgaW5jb21lIHNvdXJjZSBsaXN0LlxuICAgICAgICAgICAgICAgICdSZWZlcmVuY2UvVmVyaWZpY2F0aW9uTGV2ZWxMaXN0JywgLy8gR2V0IHRoZSB2ZXJpZiBsZXZlbCBsaXN0LlxuICAgICAgICAgICAgICAgICdTdHJlYW0vUHVibGljQ2hhbm5lbCcsIC8vIEdldCB0aGUgcHVibGljIHB1Ym51YiBjaGFubmVsIGxpc3RcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnRXhwb3J0L1RyYW5zYWN0aW9ucycsIC8vIFJlcXVlc3QgYSBleHBvcnQgb2YgYWxsIHRyYWRlcyBmcm9tIGJhc2VkIG9uIGN1cnJlbmN5cGFpciwgc3RhcnQgZGF0ZSBhbmQgZW5kIGRhdGVcbiAgICAgICAgICAgICAgICAnUGluZycsIC8vIFBvc3QgYSBzdHJpbmcsIHRoZW4gZ2V0IGl0IGJhY2suXG4gICAgICAgICAgICAgICAgJ1B1YmxpYy9VbnN1YnNjcmliZS97RW1haWxDb2RlfScsIC8vIExldHMgdGhlIHVzZXIgdW5zdWJzY3JpYmUgZnJvbSBlbWFpbHNcbiAgICAgICAgICAgICAgICAnUmVnaXN0ZXJVc2VyJywgLy8gSW5pdGlhbCB0cmFkZXIgcmVnaXN0cmF0aW9uLlxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdBY2NvdW50L0NvcnBvcmF0ZURhdGEnLCAvLyBHZXQgY29ycG9yYXRlIGFjY291bnQgZGF0YVxuICAgICAgICAgICAgICAgICdBY2NvdW50L0RvY3VtZW50QWRkcmVzcycsIC8vIENoZWNrIGlmIHJlc2lkZW5jZSBwcm9vZiB1cGxvYWRlZFxuICAgICAgICAgICAgICAgICdBY2NvdW50L0RvY3VtZW50Q29ycG9yYXRpb24nLCAvLyBDaGVjayBpZiByZWdpc3RlcmVkIGRvY3VtZW50IHVwbG9hZGVkXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvRG9jdW1lbnRJRCcsIC8vIENoZWNrIGlmIElEIGRvY3VtZW50IGNvcHkgdXBsb2FkZWRcbiAgICAgICAgICAgICAgICAnQWNjb3VudC9Eb2N1bWVudEluZm9ybWF0aW9uJywgLy8gR2V0IFN0ZXAzIERhdGFcbiAgICAgICAgICAgICAgICAnQWNjb3VudC9FbWFpbCcsIC8vIEdldCB1c2VyIGVtYWlsXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvRmVlUmF0ZScsIC8vIEdldCBmZWUgcmF0ZSBvZiBsb2dnZWQgaW4gdXNlclxuICAgICAgICAgICAgICAgICdBY2NvdW50L0xldmVsJywgLy8gR2V0IHZlcmlmIGxldmVsIG9mIGxvZ2dlZCBpbiB1c2VyXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvUGVyc29uYWxJbmZvcm1hdGlvbicsIC8vIEdldCBTdGVwMSBEYXRhXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvUGhvbmUnLCAvLyBHZXQgdXNlciBwaG9uZSBudW1iZXJcbiAgICAgICAgICAgICAgICAnQWNjb3VudC9Qcm9maWxlJywgLy8gR2V0IHRyYWRlciBwcm9maWxlXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvUXVlc3Rpb25uYWlyZScsIC8vIEZpbGwgdGhlIHF1ZXN0aW9ubmFpcmVcbiAgICAgICAgICAgICAgICAnQWNjb3VudC9SZWZlcnJhbCcsIC8vIEdldCByZWZlcnJhbCBpbmZvcm1hdGlvblxuICAgICAgICAgICAgICAgICdBY2NvdW50L1JlZmVycmFsQ29kZScsIC8vIEdldCB0aGUgcmVmZXJyYWwgY29kZSBvZiB0aGUgbG9nZ2VkIGluIHVzZXJcbiAgICAgICAgICAgICAgICAnQWNjb3VudC9SZWZlcnJhbE5hbWVzJywgLy8gR2V0IG5hbWVzIG9mIHJlZmVycmVkIHRyYWRlcnNcbiAgICAgICAgICAgICAgICAnQWNjb3VudC9SZWZlcnJhbFJld2FyZCcsIC8vIEdldCByZWZlcnJhbCByZXdhcmQgaW5mb3JtYXRpb25cbiAgICAgICAgICAgICAgICAnQWNjb3VudC9SZWZlcnJlZENvZGUnLCAvLyBHZXQgcmVmZXJyYWwgY29kZVxuICAgICAgICAgICAgICAgICdBY2NvdW50L1Jlc2lkZW50SW5mb3JtYXRpb24nLCAvLyBHZXQgU3RlcDIgRGF0YVxuICAgICAgICAgICAgICAgICdBY2NvdW50L1NlY3VyaXR5U2V0dGluZ3MnLCAvLyBHZXQgdmVyaWYgZGV0YWlscyBvZiBsb2dnZWQgaW4gdXNlclxuICAgICAgICAgICAgICAgICdBY2NvdW50L1VzZXInLCAvLyBHZXQgYWxsIHVzZXIgaW5mb1xuICAgICAgICAgICAgICAgICdBUElLZXkvQVBJS2V5JywgLy8gR2V0IEFQSSBLZXkgZm9yIGxvZ2dlZCBpbiB1c2VyXG4gICAgICAgICAgICAgICAgJ0F1dGgvQ29ubmVjdGlvbkhpc3RvcnknLCAvLyBHZXRzIGNvbm5lY3Rpb24gaGlzdG9yeSBvZiBsb2dnZWQgaW4gdXNlclxuICAgICAgICAgICAgICAgICdCYWxhbmNlL0JhbGFuY2VzJywgLy8gR2V0cyB0aGUgYXZhaWxhYmxlIGJhbGFuY2UgZm9yIGVhY2ggY3VycmVuY3kgZm9yIHRoZSBsb2dnZWQgaW4gYWNjb3VudC5cbiAgICAgICAgICAgICAgICAnQmFsYW5jZS9CYWxhbmNlcy97Q3VycmVuY3l9JywgLy8gR2V0cyB0aGUgYXZhaWxhYmxlIGJhbGFuY2UgZm9yIHMgY3VycmVuY3kgZm9yIHRoZSBsb2dnZWQgaW4gYWNjb3VudC5cbiAgICAgICAgICAgICAgICAnQmFsYW5jZS9EZXBvc2l0cycsIC8vIEdldCBhbGwgYWNjb3VudCBkZXBvc2l0cywgaW5jbHVkaW5nIHdpcmUgYW5kIGRpZ2l0YWwgY3VycmVuY3ksIG9mIHRoZSBsb2dnZWQgaW4gdXNlclxuICAgICAgICAgICAgICAgICdCYWxhbmNlL1dpdGhkcmF3YWxzJywgLy8gR2V0IGFsbCBhY2NvdW50IHdpdGhkcmF3YWxzLCBpbmNsdWRpbmcgd2lyZSBhbmQgZGlnaXRhbCBjdXJyZW5jeSwgb2YgdGhlIGxvZ2dlZCBpbiB1c2VyXG4gICAgICAgICAgICAgICAgJ0JhbmsvQWNjb3VudHMve0N1cnJlbmN5fS97TG9jYXRpb259JywgLy8gR2V0IGludGVybmFsIGJhbmsgYWNjb3VudCBmb3IgZGVwb3NpdFxuICAgICAgICAgICAgICAgICdCYW5rL1RyYW5zYWN0aW9ucycsIC8vIEdldCBhbGwgYWNjb3VudCB0cmFuc2FjdGlvbnMgb2YgdGhlIGxvZ2dlZCBpbiB1c2VyXG4gICAgICAgICAgICAgICAgJ0JhbmsvVXNlckFjY291bnRzJywgLy8gR2V0cyBhbGwgdGhlIGJhbmsgYWNjb3VudHMgcmVsYXRlZCB0byB0aGUgbG9nZ2VkIGluIHVzZXIuXG4gICAgICAgICAgICAgICAgJ0JhbmsvVXNlckFjY291bnRzL3tDdXJyZW5jeX0nLCAvLyBHZXRzIGFsbCB0aGUgYmFuayBhY2NvdW50cyByZWxhdGVkIHRvIHRoZSBsb2dnZWQgaW4gdXNlci5cbiAgICAgICAgICAgICAgICAnRWxlY3Ryb25pY1dhbGxldC9EZXBvc2l0V2FsbGV0cycsIC8vIEdldHMgYWxsIGNyeXB0byBjdXJyZW5jeSBhZGRyZXNzZXMgcmVsYXRlZCBkZXBvc2l0cyB0byB0aGUgbG9nZ2VkIGluIHVzZXIuXG4gICAgICAgICAgICAgICAgJ0VsZWN0cm9uaWNXYWxsZXQvRGVwb3NpdFdhbGxldHMve0RpZ2lDdXJyZW5jeX0nLCAvLyBHZXRzIGFsbCBjcnlwdG8gY3VycmVuY3kgYWRkcmVzc2VzIHJlbGF0ZWQgZGVwb3NpdHMgdG8gdGhlIGxvZ2dlZCBpbiB1c2VyIGJ5IGN1cnJlbmN5LlxuICAgICAgICAgICAgICAgICdFbGVjdHJvbmljV2FsbGV0L1RyYW5zYWN0aW9ucycsIC8vIEdldCBhbGwgZGlnaXRhbCBjdXJyZW5jeSB0cmFuc2FjdGlvbnMgb2YgdGhlIGxvZ2dlZCBpbiB1c2VyXG4gICAgICAgICAgICAgICAgJ0VsZWN0cm9uaWNXYWxsZXQvVHJhbnNhY3Rpb25zL3tEaWdpQ3VycmVuY3l9JywgLy8gR2V0IGFsbCBkaWdpdGFsIGN1cnJlbmN5IHRyYW5zYWN0aW9ucyBvZiB0aGUgbG9nZ2VkIGluIHVzZXJcbiAgICAgICAgICAgICAgICAnRWxlY3Ryb25pY1dhbGxldC9Vc2VyV2FsbGV0cycsIC8vIEdldHMgYWxsIGV4dGVybmFsIGRpZ2l0YWwgY3VycmVuY3kgYWRkcmVzc2VzIHJlbGF0ZWQgdG8gdGhlIGxvZ2dlZCBpbiB1c2VyLlxuICAgICAgICAgICAgICAgICdFbGVjdHJvbmljV2FsbGV0L1VzZXJXYWxsZXRzL3tEaWdpQ3VycmVuY3l9JywgLy8gR2V0cyBhbGwgZXh0ZXJuYWwgZGlnaXRhbCBjdXJyZW5jeSBhZGRyZXNzZXMgcmVsYXRlZCB0byB0aGUgbG9nZ2VkIGluIHVzZXIgYnkgY3VycmVuY3kuXG4gICAgICAgICAgICAgICAgJ0luZm8vUmVmZXJlbmNlQ3VycmVuY3knLCAvLyBHZXQgdXNlcidzIHJlZmVyZW5jZSBjdXJyZW5jeVxuICAgICAgICAgICAgICAgICdJbmZvL1JlZmVyZW5jZUxhbmd1YWdlJywgLy8gR2V0IHVzZXIncyByZWZlcmVuY2UgbGFuZ3VhZ2VcbiAgICAgICAgICAgICAgICAnTm90aWZpY2F0aW9uL01lc3NhZ2VzJywgLy8gR2V0IGZyb20gb2xkZXN0IHVucmVhZCArIDMgcmVhZCBtZXNzYWdlIHRvIG5ld2VzdCBtZXNzYWdlc1xuICAgICAgICAgICAgICAgICdUcmFkZS9PcmRlcnMnLCAvLyBHZXRzIG9wZW4gb3JkZXJzIGZvciB0aGUgbG9nZ2VkIGluIHRyYWRlci5cbiAgICAgICAgICAgICAgICAnVHJhZGUvT3JkZXJzL3tPcmRlcklEfScsIC8vIEdldHMgYW4gb3JkZXIgZm9yIHRoZSBsb2dnZWQgaW4gdHJhZGVyLlxuICAgICAgICAgICAgICAgICdUcmFkZS9TdG9wT3JkZXJzJywgLy8gR2V0cyBhbGwgc3RvcCBvcmRlcnMgZm9yIHRoZSBsb2dnZWQgaW4gdHJhZGVyLiBNYXggMTAwMCByZWNvcmQuXG4gICAgICAgICAgICAgICAgJ1RyYWRlL1N0b3BPcmRlcnNIaXN0b3J5JywgLy8gR2V0cyBhbGwgc3RvcCBvcmRlcnMgZm9yIHRoZSBsb2dnZWQgaW4gdHJhZGVyLiBNYXggMTAwMCByZWNvcmQuXG4gICAgICAgICAgICAgICAgJ1RyYWRlL1RyYWRlcycsIC8vIEdldHMgYWxsIHRyYW5zYWN0aW9ucyBvZiBsb2dnZWQgaW4gdXNlclxuICAgICAgICAgICAgICAgICdUcmFkZS9Vc2VyVHJhZGVzJywgLy8gR2V0cyBhbGwgdHJhbnNhY3Rpb25zIG9mIGxvZ2dlZCBpbiB1c2VyXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvRG9jdW1lbnRBZGRyZXNzJywgLy8gVXBsb2FkIGFkZHJlc3MgcHJvb2YgZG9jdW1lbnRcbiAgICAgICAgICAgICAgICAnQWNjb3VudC9Eb2N1bWVudENvcnBvcmF0aW9uJywgLy8gVXBsb2FkIHJlZ2lzdGVyZWQgZG9jdW1lbnQgZG9jdW1lbnRcbiAgICAgICAgICAgICAgICAnQWNjb3VudC9Eb2N1bWVudElEJywgLy8gVXBsb2FkIElEIGRvY3VtZW50IGNvcHlcbiAgICAgICAgICAgICAgICAnQWNjb3VudC9FbWFpbC9SZXF1ZXN0VmVyaWZ5JywgLy8gUmVxdWVzdCBmb3IgdmVyaWZpY2F0aW9uIGVtYWlsXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvRW1haWwvVmVyaWZ5JywgLy8gVmVyaWZpY2F0aW9uIGVtYWlsXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvR29vZ2xlQXV0aCcsIC8vIEVuYWJsZSBnb29nbGUgYXV0aFxuICAgICAgICAgICAgICAgICdBY2NvdW50L0xldmVsJywgLy8gUmVxdWVzdCB2ZXJpZiBsZXZlbCBvZiBsb2dnZWQgaW4gdXNlclxuICAgICAgICAgICAgICAgICdBY2NvdW50L1F1ZXN0aW9ubmFpcmUnLCAvLyBGaWxsIHRoZSBxdWVzdGlvbm5haXJlXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvUmVmZXJyYWwnLCAvLyBQb3N0IGEgcmVmZXJyYWwgZW1haWxcbiAgICAgICAgICAgICAgICAnQVBJS2V5L0FQSUtleScsIC8vIENyZWF0ZSBhIG5ldyBBUEkga2V5IGZvciBsb2dnZWQgaW4gdXNlclxuICAgICAgICAgICAgICAgICdBdXRoL0NoYW5nZVBhc3N3b3JkJywgLy8gQ2hhbmdlIHBhc3N3b3JkLlxuICAgICAgICAgICAgICAgICdBdXRoL0ZvcmdvdFBhc3N3b3JkJywgLy8gUmVxdWVzdCByZXNldCBwYXNzd29yZFxuICAgICAgICAgICAgICAgICdBdXRoL0ZvcmdvdFVzZXJJRCcsIC8vIFJlcXVlc3QgdXNlciBpZFxuICAgICAgICAgICAgICAgICdBdXRoL0xvZ2luJywgLy8gVHJhZGVyIHNlc3Npb24gbG9nIGluLlxuICAgICAgICAgICAgICAgICdBdXRoL0xvZ291dCcsIC8vIExvZ291dCBmcm9tIHRoZSBjdXJyZW50IHNlc3Npb24uXG4gICAgICAgICAgICAgICAgJ0F1dGgvTG9nb3V0T3RoZXJTZXNzaW9ucycsIC8vIExvZ291dCBvdGhlciBzZXNzaW9ucy5cbiAgICAgICAgICAgICAgICAnQXV0aC9SZXNldFBhc3N3b3JkJywgLy8gUmVzZXQgcGFzc3dvcmRcbiAgICAgICAgICAgICAgICAnQmFuay9UcmFuc2FjdGlvbnMnLCAvLyBSZXF1ZXN0IGEgdHJhbnNmZXIgZnJvbSB0aGUgdHJhZGVycyBhY2NvdW50IG9mIHRoZSBsb2dnZWQgaW4gdXNlci4gVGhpcyBpcyBvbmx5IGF2YWlsYWJsZSBmb3IgYmFuayBhY2NvdW50XG4gICAgICAgICAgICAgICAgJ0JhbmsvVXNlckFjY291bnRzJywgLy8gQWRkIGFuIGFjY291bnQgdGhlIGxvZ2dlZCBpbiB1c2VyXG4gICAgICAgICAgICAgICAgJ0VsZWN0cm9uaWNXYWxsZXQvRGVwb3NpdFdhbGxldHMve0RpZ2lDdXJyZW5jeX0nLCAvLyBBZGQgYW4gZGlnaXRhbCBjdXJyZW5jeSBhZGRyZXNzZXMgdG8gdGhlIGxvZ2dlZCBpbiB1c2VyLlxuICAgICAgICAgICAgICAgICdFbGVjdHJvbmljV2FsbGV0L1RyYW5zYWN0aW9ucy9EZXBvc2l0cy97RGlnaUN1cnJlbmN5fScsIC8vIEdldCBhbGwgaW50ZXJuYWwgZGlnaXRhbCBjdXJyZW5jeSB0cmFuc2FjdGlvbnMgb2YgdGhlIGxvZ2dlZCBpbiB1c2VyXG4gICAgICAgICAgICAgICAgJ0VsZWN0cm9uaWNXYWxsZXQvVHJhbnNhY3Rpb25zL1dpdGhkcmF3YWxzL3tEaWdpQ3VycmVuY3l9JywgLy8gR2V0IGFsbCBleHRlcm5hbCBkaWdpdGFsIGN1cnJlbmN5IHRyYW5zYWN0aW9ucyBvZiB0aGUgbG9nZ2VkIGluIHVzZXJcbiAgICAgICAgICAgICAgICAnRWxlY3Ryb25pY1dhbGxldC9Vc2VyV2FsbGV0cy97RGlnaUN1cnJlbmN5fScsIC8vIEFkZCBhbiBleHRlcm5hbCBkaWdpdGFsIGN1cnJlbmN5IGFkZHJlc3NlcyB0byB0aGUgbG9nZ2VkIGluIHVzZXIuXG4gICAgICAgICAgICAgICAgJ0VsZWN0cm9uaWNXYWxsZXQvV2l0aGRyYXdhbHMve0RpZ2lDdXJyZW5jeX0nLCAvLyBSZXF1ZXN0IGEgdHJhbnNmZXIgZnJvbSB0aGUgdHJhZGVycyBhY2NvdW50IHRvIGFuIGV4dGVybmFsIGFkZHJlc3MuIFRoaXMgaXMgb25seSBhdmFpbGFibGUgZm9yIGNyeXB0byBjdXJyZW5jaWVzLlxuICAgICAgICAgICAgICAgICdOb3RpZmljYXRpb24vTWVzc2FnZXMnLCAvLyBNYXJrIGFsbCBhcyByZWFkXG4gICAgICAgICAgICAgICAgJ05vdGlmaWNhdGlvbi9NZXNzYWdlcy97SUR9JywgLy8gTWFyayBhcyByZWFkXG4gICAgICAgICAgICAgICAgJ1RyYWRlL09yZGVycycsIC8vIFBsYWNlIGFuIG9yZGVyIGF0IHRoZSBleGNoYW5nZS5cbiAgICAgICAgICAgICAgICAnVHJhZGUvU3RvcE9yZGVycycsIC8vIFBsYWNlIGEgc3RvcCBvcmRlciBhdCB0aGUgZXhjaGFuZ2UuXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ3B1dCc6IFtcbiAgICAgICAgICAgICAgICAnQWNjb3VudC9Db3Jwb3JhdGVEYXRhJywgLy8gVXBkYXRlIHVzZXIgY29tcGFueSBkYXRhIGZvciBjb3Jwb3JhdGUgYWNjb3VudFxuICAgICAgICAgICAgICAgICdBY2NvdW50L0RvY3VtZW50SUQnLCAvLyBVcGRhdGUgSUQgZG9jdW1lbnQgbWV0YSBkYXRhXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvRG9jdW1lbnRJbmZvcm1hdGlvbicsIC8vIFVwZGF0ZSBTdGVwMyBEYXRhXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvRW1haWwnLCAvLyBVcGRhdGUgdXNlciBlbWFpbFxuICAgICAgICAgICAgICAgICdBY2NvdW50L1BlcnNvbmFsSW5mb3JtYXRpb24nLCAvLyBVcGRhdGUgU3RlcDEgRGF0YVxuICAgICAgICAgICAgICAgICdBY2NvdW50L1Bob25lJywgLy8gVXBkYXRlIHVzZXIgcGhvbmUgbnVtYmVyXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvUXVlc3Rpb25uYWlyZScsIC8vIHVwZGF0ZSB0aGUgcXVlc3Rpb25uYWlyZVxuICAgICAgICAgICAgICAgICdBY2NvdW50L1JlZmVycmVkQ29kZScsIC8vIFVwZGF0ZSByZWZlcnJhbCBjb2RlXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvUmVzaWRlbnRJbmZvcm1hdGlvbicsIC8vIFVwZGF0ZSBTdGVwMiBEYXRhXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvU2VjdXJpdHlTZXR0aW5ncycsIC8vIFVwZGF0ZSB2ZXJpZiBkZXRhaWxzIG9mIGxvZ2dlZCBpbiB1c2VyXG4gICAgICAgICAgICAgICAgJ0FjY291bnQvVXNlcicsIC8vIFVwZGF0ZSBhbGwgdXNlciBpbmZvXG4gICAgICAgICAgICAgICAgJ0JhbmsvVXNlckFjY291bnRzJywgLy8gVXBkYXRlIHRoZSBsYWJlbCBvZiBleGlzdGluZyB1c2VyIGJhbmsgYWNjb3VubnRcbiAgICAgICAgICAgICAgICAnRWxlY3Ryb25pY1dhbGxldC9EZXBvc2l0V2FsbGV0cy97RGlnaUN1cnJlbmN5fS97QWRkcmVzc05hbWV9JywgLy8gVXBkYXRlIHRoZSBuYW1lIG9mIGFuIGFkZHJlc3NcbiAgICAgICAgICAgICAgICAnRWxlY3Ryb25pY1dhbGxldC9Vc2VyV2FsbGV0cy97RGlnaUN1cnJlbmN5fScsIC8vIFVwZGF0ZSB0aGUgbmFtZSBvZiBhbiBleHRlcm5hbCBhZGRyZXNzXG4gICAgICAgICAgICAgICAgJ0luZm8vUmVmZXJlbmNlQ3VycmVuY3knLCAvLyBVc2VyJ3MgcmVmZXJlbmNlIGN1cnJlbmN5XG4gICAgICAgICAgICAgICAgJ0luZm8vUmVmZXJlbmNlTGFuZ3VhZ2UnLCAvLyBVcGRhdGUgdXNlcidzIHJlZmVyZW5jZSBsYW5ndWFnZVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICdkZWxldGUnOiBbXG4gICAgICAgICAgICAgICAgJ0FQSUtleS9BUElLZXkve1B1YmxpY0tleX0nLCAvLyBSZW1vdmUgYW4gQVBJIGtleVxuICAgICAgICAgICAgICAgICdCYW5rL1RyYW5zYWN0aW9ucy97UmVxdWVzdElEfScsIC8vIERlbGV0ZSBwZW5kaW5nIGFjY291bnQgd2l0aGRyYXcgb2YgdGhlIGxvZ2dlZCBpbiB1c2VyXG4gICAgICAgICAgICAgICAgJ0JhbmsvVXNlckFjY291bnRzL3tDdXJyZW5jeX0ve0xhYmVsfScsIC8vIERlbGV0ZSBhbiBhY2NvdW50IG9mIHRoZSBsb2dnZWQgaW4gdXNlclxuICAgICAgICAgICAgICAgICdFbGVjdHJvbmljV2FsbGV0L0RlcG9zaXRXYWxsZXRzL3tEaWdpQ3VycmVuY3l9L3tBZGRyZXNzTmFtZX0nLCAvLyBEZWxldGUgYW4gZGlnaXRhbCBjdXJyZW5jeSBhZGRyZXNzZXMgcmVsYXRlZCB0byB0aGUgbG9nZ2VkIGluIHVzZXIuXG4gICAgICAgICAgICAgICAgJ0VsZWN0cm9uaWNXYWxsZXQvVXNlcldhbGxldHMve0RpZ2lDdXJyZW5jeX0ve0FkZHJlc3NOYW1lfScsIC8vIERlbGV0ZSBhbiBleHRlcm5hbCBkaWdpdGFsIGN1cnJlbmN5IGFkZHJlc3NlcyByZWxhdGVkIHRvIHRoZSBsb2dnZWQgaW4gdXNlci5cbiAgICAgICAgICAgICAgICAnVHJhZGUvT3JkZXJzJywgLy8gQ2FuY2VscyBhbGwgZXhpc3Rpbmcgb3JkZXJcbiAgICAgICAgICAgICAgICAnVHJhZGUvT3JkZXJzL3tPcmRlcklEfScsIC8vIENhbmNlbHMgYW4gZXhpc3Rpbmcgb3JkZXJcbiAgICAgICAgICAgICAgICAnVHJhZGUvU3RvcE9yZGVycycsIC8vIENhbmNlbHMgYWxsIGV4aXN0aW5nIHN0b3Agb3JkZXJzXG4gICAgICAgICAgICAgICAgJ1RyYWRlL1N0b3BPcmRlcnMve0lEfScsIC8vIENhbmNlbHMgYW4gZXhpc3Rpbmcgc3RvcCBvcmRlclxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hNYXJrZXRzICgpIHtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRQdWJsaWNMaXZlVGlja2VycyAoKTtcbiAgICAgICAgbGV0IG1hcmtldHMgPSByZXNwb25zZVsndGlja2VycyddO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgbWFya2V0cy5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IG1hcmtldHNbcF07XG4gICAgICAgICAgICBsZXQgaWQgPSBtYXJrZXRbJ2N1cnJlbmN5UGFpciddO1xuICAgICAgICAgICAgbGV0IGJhc2UgPSBpZC5zbGljZSAoMCwgMyk7XG4gICAgICAgICAgICBsZXQgcXVvdGUgPSBpZC5zbGljZSAoMywgNik7XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gYmFzZSArICcvJyArIHF1b3RlO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2ggKHtcbiAgICAgICAgICAgICAgICAnaWQnOiBpZCxcbiAgICAgICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgICAgICdiYXNlJzogYmFzZSxcbiAgICAgICAgICAgICAgICAncXVvdGUnOiBxdW90ZSxcbiAgICAgICAgICAgICAgICAnaW5mbyc6IG1hcmtldCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZUdldEJhbGFuY2VCYWxhbmNlcyAoKTtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gcmVzcG9uc2VbJ2JhbGFuY2VzJ107XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogYmFsYW5jZXMgfTtcbiAgICAgICAgZm9yIChsZXQgYiA9IDA7IGIgPCBiYWxhbmNlcy5sZW5ndGg7IGIrKykge1xuICAgICAgICAgICAgbGV0IGJhbGFuY2UgPSBiYWxhbmNlc1tiXTtcbiAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IGJhbGFuY2VbJ2N1cnJlbmN5J107XG4gICAgICAgICAgICBsZXQgYWNjb3VudCA9IHtcbiAgICAgICAgICAgICAgICAnZnJlZSc6IGJhbGFuY2VbJ2F2YWlsYWJsZUJhbGFuY2UnXSxcbiAgICAgICAgICAgICAgICAndXNlZCc6IHRoaXMuc3VtIChcbiAgICAgICAgICAgICAgICAgICAgYmFsYW5jZVsncGVuZGluZ0luY29taW5nJ10sXG4gICAgICAgICAgICAgICAgICAgIGJhbGFuY2VbJ3BlbmRpbmdPdXRnb2luZyddLFxuICAgICAgICAgICAgICAgICAgICBiYWxhbmNlWydvcGVuT3JkZXInXSksXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogYmFsYW5jZVsnYmFsYW5jZSddLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlc3VsdFtjdXJyZW5jeV0gPSBhY2NvdW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFB1YmxpY01hcmtldERlcHRoQ3VycmVuY3lQYWlyICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ0N1cnJlbmN5UGFpcic6IHBbJ2lkJ10sXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IFtdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaWRlcyA9IFsgJ2JpZHMnLCAnYXNrcycgXTtcbiAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBzaWRlcy5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1tzXTtcbiAgICAgICAgICAgIGxldCBvcmRlcnMgPSBvcmRlcmJvb2tbc2lkZV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBvcmRlciA9IG9yZGVyc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgcHJpY2UgPSBwYXJzZUZsb2F0IChvcmRlclsncHJpY2UnXSk7XG4gICAgICAgICAgICAgICAgbGV0IGFtb3VudCA9IHBhcnNlRmxvYXQgKG9yZGVyWyd2b2x1bWUnXSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3NpZGVdLnB1c2ggKFsgcHJpY2UsIGFtb3VudCBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBwYXJzZVRpY2tlciAodGlja2VyLCBtYXJrZXQpIHtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHBhcnNlSW50ICh0aWNrZXJbJ2NyZWF0ZURhdGVUaW1lJ10pICogMTAwMDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2JpZCddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2FzayddKSxcbiAgICAgICAgICAgICd2d2FwJzogcGFyc2VGbG9hdCAodGlja2VyWyd2d2FwJ10pLFxuICAgICAgICAgICAgJ29wZW4nOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ29wZW4nXSksXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdCddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbHVtZSddKSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlcnMgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFB1YmxpY0xpdmVUaWNrZXJzICgpO1xuICAgICAgICBsZXQgdGlja2VycyA9IHJlc3BvbnNlWyd0aWNrZXJzJ107XG4gICAgICAgIGxldCByZXN1bHQgPSB7fTtcbiAgICAgICAgZm9yIChsZXQgdCA9IDA7IHQgPCB0aWNrZXJzLmxlbmd0aDsgdCsrKSB7XG4gICAgICAgICAgICBsZXQgdGlja2VyID0gdGlja2Vyc1t0XTtcbiAgICAgICAgICAgIGxldCBpZCA9IHRpY2tlclsnY3VycmVuY3lQYWlyJ107XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gdGhpcy5tYXJrZXRzX2J5X2lkW2lkXTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBtYXJrZXRbJ3N5bWJvbCddO1xuICAgICAgICAgICAgcmVzdWx0W3N5bWJvbF0gPSB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIG1hcmtldCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFB1YmxpY0xpdmVUaWNrZXJDdXJyZW5jeVBhaXIgKHtcbiAgICAgICAgICAgICdDdXJyZW5jeVBhaXInOiBwWydpZCddLFxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IHRpY2tlciA9IHJlc3BvbnNlWyd0aWNrZXInXTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VUaWNrZXIgKHRpY2tlciwgcCk7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldFB1YmxpY1RyYW5zYWN0aW9uc0N1cnJlbmN5UGFpciAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdDdXJyZW5jeVBhaXInOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG9yZGVyID0ge1xuICAgICAgICAgICAgJ0NvZGUnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICAgICAgJ1dheSc6IChzaWRlID09ICdidXknKSA/ICdCaWQnIDogJ0FzaycsXG4gICAgICAgICAgICAnQW1vdW50JzogYW1vdW50LFxuICAgICAgICB9O1xuICAgICAgICBpZiAodHlwZSA9PSAnbGltaXQnKVxuICAgICAgICAgICAgb3JkZXJbJ1ByaWNlJ10gPSBwcmljZTtcbiAgICAgICAgaWYgKHRoaXMudHdvZmEpIHtcbiAgICAgICAgICAgIGlmICgnVmFsaWRhdGlvbkNvZGUnIGluIHBhcmFtcylcbiAgICAgICAgICAgICAgICBvcmRlclsnVmFsaWRhdGlvbkNvZGUnXSA9IHBhcmFtc1snVmFsaWRhdGlvbkNvZGUnXTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXV0aGVudGljYXRpb25FcnJvciAodGhpcy5pZCArICcgdHdvLWZhY3RvciBhdXRoZW50aWNhdGlvbiByZXF1aXJlcyBhIG1pc3NpbmcgVmFsaWRhdGlvbkNvZGUgcGFyYW1ldGVyJyk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdFRyYWRlT3JkZXJzICh0aGlzLmV4dGVuZCAob3JkZXIsIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXNwb25zZSxcbiAgICAgICAgICAgICdpZCc6IHJlc3BvbnNlWydjbE9yZGVySWQnXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVEZWxldGVUcmFkZU9yZGVyc09yZGVySUQgKHsgJ09yZGVySUQnOiBpZCB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArICcvJyArIHRoaXMuaW1wbG9kZVBhcmFtcyAocGF0aCwgcGFyYW1zKTtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5vbWl0IChwYXJhbXMsIHRoaXMuZXh0cmFjdFBhcmFtcyAocGF0aCkpO1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHF1ZXJ5KS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChxdWVyeSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpO1xuICAgICAgICAgICAgbGV0IGNvbnRlbnRUeXBlID0gKG1ldGhvZCA9PSAnR0VUJykgPyAnJyA6ICdhcHBsaWNhdGlvbi9qc29uJztcbiAgICAgICAgICAgIGxldCBhdXRoID0gbWV0aG9kICsgdXJsICsgY29udGVudFR5cGUgKyBub25jZS50b1N0cmluZyAoKTtcbiAgICAgICAgICAgIGF1dGggPSBhdXRoLnRvTG93ZXJDYXNlICgpO1xuICAgICAgICAgICAgbGV0IHNpZ25hdHVyZSA9IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKGF1dGgpLCB0aGlzLmVuY29kZSAodGhpcy5zZWNyZXQpLCAnc2hhMjU2JywgJ2Jhc2U2NCcpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQVBJX1BVQkxJQ19LRVknOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgICAgICAnQVBJX1JFUVVFU1RfU0lHTkFUVVJFJzogc2lnbmF0dXJlLFxuICAgICAgICAgICAgICAgICdBUElfUkVRVUVTVF9EQVRFJzogbm9uY2UsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKG1ldGhvZCAhPSAnR0VUJykge1xuICAgICAgICAgICAgICAgIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gY29udGVudFR5cGU7XG4gICAgICAgICAgICAgICAgYm9keSA9IHRoaXMuanNvbiAodGhpcy5leHRlbmQgKHsgJ25vbmNlJzogbm9uY2UgfSwgcGFyYW1zKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgICAgICBpZiAoJ3Jlc3BvbnNlU3RhdHVzJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIGlmICgnbWVzc2FnZScgaW4gcmVzcG9uc2VbJ3Jlc3BvbnNlU3RhdHVzJ10pXG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlWydyZXNwb25zZVN0YXR1cyddWydtZXNzYWdlJ10gPT0gJ09LJylcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgJyArIHRoaXMuanNvbiAocmVzcG9uc2UpKTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBnZGF4ID0ge1xuICAgICdpZCc6ICdnZGF4JyxcbiAgICAnbmFtZSc6ICdHREFYJyxcbiAgICAnY291bnRyaWVzJzogJ1VTJyxcbiAgICAncmF0ZUxpbWl0JzogMTAwMCxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ3Rlc3QnOiAnaHR0cHM6Ly9hcGktcHVibGljLnNhbmRib3guZ2RheC5jb20nLFxuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2NTI3LWIxYmU0MWM2LTVlZGItMTFlNy05NWY2LTViNDk2YzQ2OWUyYy5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vYXBpLmdkYXguY29tJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy5nZGF4LmNvbScsXG4gICAgICAgICdkb2MnOiAnaHR0cHM6Ly9kb2NzLmdkYXguY29tJyxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdjdXJyZW5jaWVzJyxcbiAgICAgICAgICAgICAgICAncHJvZHVjdHMnLFxuICAgICAgICAgICAgICAgICdwcm9kdWN0cy97aWR9L2Jvb2snLFxuICAgICAgICAgICAgICAgICdwcm9kdWN0cy97aWR9L2NhbmRsZXMnLFxuICAgICAgICAgICAgICAgICdwcm9kdWN0cy97aWR9L3N0YXRzJyxcbiAgICAgICAgICAgICAgICAncHJvZHVjdHMve2lkfS90aWNrZXInLFxuICAgICAgICAgICAgICAgICdwcm9kdWN0cy97aWR9L3RyYWRlcycsXG4gICAgICAgICAgICAgICAgJ3RpbWUnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdhY2NvdW50cycsXG4gICAgICAgICAgICAgICAgJ2FjY291bnRzL3tpZH0nLFxuICAgICAgICAgICAgICAgICdhY2NvdW50cy97aWR9L2hvbGRzJyxcbiAgICAgICAgICAgICAgICAnYWNjb3VudHMve2lkfS9sZWRnZXInLFxuICAgICAgICAgICAgICAgICdjb2luYmFzZS1hY2NvdW50cycsXG4gICAgICAgICAgICAgICAgJ2ZpbGxzJyxcbiAgICAgICAgICAgICAgICAnZnVuZGluZycsXG4gICAgICAgICAgICAgICAgJ29yZGVycycsXG4gICAgICAgICAgICAgICAgJ29yZGVycy97aWR9JyxcbiAgICAgICAgICAgICAgICAncGF5bWVudC1tZXRob2RzJyxcbiAgICAgICAgICAgICAgICAncG9zaXRpb24nLFxuICAgICAgICAgICAgICAgICdyZXBvcnRzL3tpZH0nLFxuICAgICAgICAgICAgICAgICd1c2Vycy9zZWxmL3RyYWlsaW5nLXZvbHVtZScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2RlcG9zaXRzL2NvaW5iYXNlLWFjY291bnQnLFxuICAgICAgICAgICAgICAgICdkZXBvc2l0cy9wYXltZW50LW1ldGhvZCcsXG4gICAgICAgICAgICAgICAgJ2Z1bmRpbmcvcmVwYXknLFxuICAgICAgICAgICAgICAgICdvcmRlcnMnLFxuICAgICAgICAgICAgICAgICdwb3NpdGlvbi9jbG9zZScsXG4gICAgICAgICAgICAgICAgJ3Byb2ZpbGVzL21hcmdpbi10cmFuc2ZlcicsXG4gICAgICAgICAgICAgICAgJ3JlcG9ydHMnLFxuICAgICAgICAgICAgICAgICd3aXRoZHJhd2Fscy9jb2luYmFzZScsXG4gICAgICAgICAgICAgICAgJ3dpdGhkcmF3YWxzL2NyeXB0bycsXG4gICAgICAgICAgICAgICAgJ3dpdGhkcmF3YWxzL3BheW1lbnQtbWV0aG9kJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAnZGVsZXRlJzogW1xuICAgICAgICAgICAgICAgICdvcmRlcnMnLFxuICAgICAgICAgICAgICAgICdvcmRlcnMve2lkfScsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE1hcmtldHMgKCkge1xuICAgICAgICBsZXQgbWFya2V0cyA9IGF3YWl0IHRoaXMucHVibGljR2V0UHJvZHVjdHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgcCA9IDA7IHAgPCBtYXJrZXRzLmxlbmd0aDsgcCsrKSB7XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gbWFya2V0c1twXTtcbiAgICAgICAgICAgIGxldCBpZCA9IG1hcmtldFsnaWQnXTtcbiAgICAgICAgICAgIGxldCBiYXNlID0gbWFya2V0WydiYXNlX2N1cnJlbmN5J107XG4gICAgICAgICAgICBsZXQgcXVvdGUgPSBtYXJrZXRbJ3F1b3RlX2N1cnJlbmN5J107XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gYmFzZSArICcvJyArIHF1b3RlO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2ggKHtcbiAgICAgICAgICAgICAgICAnaWQnOiBpZCxcbiAgICAgICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgICAgICdiYXNlJzogYmFzZSxcbiAgICAgICAgICAgICAgICAncXVvdGUnOiBxdW90ZSxcbiAgICAgICAgICAgICAgICAnaW5mbyc6IG1hcmtldCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBiYWxhbmNlcyA9IGF3YWl0IHRoaXMucHJpdmF0ZUdldEFjY291bnRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGJhbGFuY2VzIH07XG4gICAgICAgIGZvciAobGV0IGIgPSAwOyBiIDwgYmFsYW5jZXMubGVuZ3RoOyBiKyspIHtcbiAgICAgICAgICAgIGxldCBiYWxhbmNlID0gYmFsYW5jZXNbYl07XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBiYWxhbmNlWydjdXJyZW5jeSddO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiBwYXJzZUZsb2F0IChiYWxhbmNlWydhdmFpbGFibGUnXSksXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiBwYXJzZUZsb2F0IChiYWxhbmNlWydob2xkJ10pLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHBhcnNlRmxvYXQgKGJhbGFuY2VbJ2JhbGFuY2UnXSksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IGF3YWl0IHRoaXMucHVibGljR2V0UHJvZHVjdHNJZEJvb2sgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnaWQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICAgICAgJ2xldmVsJzogMiwgLy8gMSBiZXN0IGJpZGFzaywgMiBhZ2dyZWdhdGVkLCAzIGZ1bGxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdiaWRzJzogW10sXG4gICAgICAgICAgICAnYXNrcyc6IFtdLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHNpZGVzID0gWyAnYmlkcycsICdhc2tzJyBdO1xuICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IHNpZGVzLmxlbmd0aDsgcysrKSB7XG4gICAgICAgICAgICBsZXQgc2lkZSA9IHNpZGVzW3NdO1xuICAgICAgICAgICAgbGV0IG9yZGVycyA9IG9yZGVyYm9va1tzaWRlXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9yZGVyID0gb3JkZXJzW2ldO1xuICAgICAgICAgICAgICAgIGxldCBwcmljZSA9IHBhcnNlRmxvYXQgKG9yZGVyWzBdKTtcbiAgICAgICAgICAgICAgICBsZXQgYW1vdW50ID0gcGFyc2VGbG9hdCAob3JkZXJbMV0pO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtzaWRlXS5wdXNoIChbIHByaWNlLCBhbW91bnQgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgdGlja2VyID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRQcm9kdWN0c0lkVGlja2VyICh7XG4gICAgICAgICAgICAnaWQnOiBwWydpZCddLFxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IHF1b3RlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRQcm9kdWN0c0lkU3RhdHMgKHtcbiAgICAgICAgICAgICdpZCc6IHBbJ2lkJ10sXG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5wYXJzZTg2MDEgKHRpY2tlclsndGltZSddKTtcbiAgICAgICAgbGV0IGJpZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IGFzayA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKCdiaWQnIGluIHRpY2tlcilcbiAgICAgICAgICAgIGJpZCA9IHBhcnNlRmxvYXQgKHRpY2tlclsnYmlkJ10pO1xuICAgICAgICBpZiAoJ2FzaycgaW4gdGlja2VyKVxuICAgICAgICAgICAgYXNrID0gcGFyc2VGbG9hdCAodGlja2VyWydhc2snXSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiBwYXJzZUZsb2F0IChxdW90ZVsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0IChxdW90ZVsnbG93J10pLFxuICAgICAgICAgICAgJ2JpZCc6IGJpZCxcbiAgICAgICAgICAgICdhc2snOiBhc2ssXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogcGFyc2VGbG9hdCAocXVvdGVbJ29wZW4nXSksXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHF1b3RlWydsYXN0J10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndm9sdW1lJ10pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIHBhcnNlVHJhZGUgKHRyYWRlLCBtYXJrZXQpIHtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMucGFyc2U4NjAxIChbJ3RpbWUnXSk7XG4gICAgICAgIGxldCB0eXBlID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2lkJzogdHJhZGVbJ3RyYWRlX2lkJ10udG9TdHJpbmcgKCksXG4gICAgICAgICAgICAnaW5mbyc6IHRyYWRlLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdzeW1ib2wnOiBtYXJrZXRbJ3N5bWJvbCddLFxuICAgICAgICAgICAgJ3R5cGUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnc2lkZSc6IHRyYWRlWydzaWRlJ10sXG4gICAgICAgICAgICAncHJpY2UnOiBwYXJzZUZsb2F0ICh0cmFkZVsncHJpY2UnXSksXG4gICAgICAgICAgICAnYW1vdW50JzogcGFyc2VGbG9hdCAodHJhZGVbJ3NpemUnXSksXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldFByb2R1Y3RzSWRUcmFkZXMgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnaWQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLCAvLyBmaXhlcyBpc3N1ZSAjMlxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgcGFyc2VPSExDViAob2hsY3YsIG1hcmtldCA9IHVuZGVmaW5lZCwgdGltZWZyYW1lID0gNjAsIHNpbmNlID0gdW5kZWZpbmVkLCBsaW1pdCA9IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgb2hsY3ZbMF0gKiAxMDAwLFxuICAgICAgICAgICAgb2hsY3ZbM10sXG4gICAgICAgICAgICBvaGxjdlsyXSxcbiAgICAgICAgICAgIG9obGN2WzFdLFxuICAgICAgICAgICAgb2hsY3ZbNF0sXG4gICAgICAgICAgICBvaGxjdls1XSxcbiAgICAgICAgXTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPSExDViAobWFya2V0LCB0aW1lZnJhbWUgPSA2MCwgc2luY2UgPSB1bmRlZmluZWQsIGxpbWl0ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCBtID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0UHJvZHVjdHNJZENhbmRsZXMgKHtcbiAgICAgICAgICAgICdpZCc6IG1bJ2lkJ10sXG4gICAgICAgICAgICAnZ3JhbnVsYXJpdHknOiB0aW1lZnJhbWUsXG4gICAgICAgICAgICAnc3RhcnQnOiBzaW5jZSxcbiAgICAgICAgICAgICdlbmQnOiBsaW1pdCxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlT0hMQ1ZzIChtLCByZXNwb25zZSwgdGltZWZyYW1lLCBzaW5jZSwgbGltaXQpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgb2lkID0gdGhpcy5ub25jZSAoKS50b1N0cmluZyAoKTtcbiAgICAgICAgbGV0IG9yZGVyID0ge1xuICAgICAgICAgICAgJ3Byb2R1Y3RfaWQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICAgICAgJ3NpZGUnOiBzaWRlLFxuICAgICAgICAgICAgJ3NpemUnOiBhbW91bnQsXG4gICAgICAgICAgICAndHlwZSc6IHR5cGUsXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlID09ICdsaW1pdCcpXG4gICAgICAgICAgICBvcmRlclsncHJpY2UnXSA9IHByaWNlO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0T3JkZXJzICh0aGlzLmV4dGVuZCAob3JkZXIsIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXNwb25zZSxcbiAgICAgICAgICAgICdpZCc6IHJlc3BvbnNlWydpZCddLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJpdmF0ZURlbGV0ZU9yZGVyc0lkICh7ICdpZCc6IGlkIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCByZXF1ZXN0ID0gJy8nICsgdGhpcy5pbXBsb2RlUGFyYW1zIChwYXRoLCBwYXJhbXMpO1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArIHJlcXVlc3Q7XG4gICAgICAgIGxldCBxdWVyeSA9IHRoaXMub21pdCAocGFyYW1zLCB0aGlzLmV4dHJhY3RQYXJhbXMgKHBhdGgpKTtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChxdWVyeSkubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmFwaUtleSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXV0aGVudGljYXRpb25FcnJvciAodGhpcy5pZCArICcgcmVxdWlyZXMgYXBpS2V5IHByb3BlcnR5IGZvciBhdXRoZW50aWNhdGlvbiBhbmQgdHJhZGluZycpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLnNlY3JldClcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXV0aGVudGljYXRpb25FcnJvciAodGhpcy5pZCArICcgcmVxdWlyZXMgc2VjcmV0IHByb3BlcnR5IGZvciBhdXRoZW50aWNhdGlvbiBhbmQgdHJhZGluZycpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLnBhc3N3b3JkKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBBdXRoZW50aWNhdGlvbkVycm9yICh0aGlzLmlkICsgJyByZXF1aXJlcyBwYXNzd29yZCBwcm9wZXJ0eSBmb3IgYXV0aGVudGljYXRpb24gYW5kIHRyYWRpbmcnKTtcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCkudG9TdHJpbmcgKCk7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHF1ZXJ5KS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgYm9keSA9IHRoaXMuanNvbiAocXVlcnkpO1xuICAgICAgICAgICAgbGV0IHdoYXQgPSBub25jZSArIG1ldGhvZCArIHJlcXVlc3QgKyAoYm9keSB8fCAnJyk7XG4gICAgICAgICAgICBsZXQgc2VjcmV0ID0gdGhpcy5iYXNlNjRUb0JpbmFyeSAodGhpcy5zZWNyZXQpO1xuICAgICAgICAgICAgbGV0IHNpZ25hdHVyZSA9IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKHdoYXQpLCBzZWNyZXQsICdzaGEyNTYnLCAnYmFzZTY0Jyk7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdDQi1BQ0NFU1MtS0VZJzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ0NCLUFDQ0VTUy1TSUdOJzogdGhpcy5kZWNvZGUgKHNpZ25hdHVyZSksXG4gICAgICAgICAgICAgICAgJ0NCLUFDQ0VTUy1USU1FU1RBTVAnOiBub25jZSxcbiAgICAgICAgICAgICAgICAnQ0ItQUNDRVNTLVBBU1NQSFJBU0UnOiB0aGlzLnBhc3N3b3JkLFxuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdtZXNzYWdlJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgZ2VtaW5pID0ge1xuICAgICdpZCc6ICdnZW1pbmknLFxuICAgICduYW1lJzogJ0dlbWluaScsXG4gICAgJ2NvdW50cmllcyc6ICdVUycsXG4gICAgJ3JhdGVMaW1pdCc6IDE1MDAsIC8vIDIwMCBmb3IgcHJpdmF0ZSBBUElcbiAgICAndmVyc2lvbic6ICd2MScsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc4MTY4NTctY2U3YmU2NDQtNjA5Ni0xMWU3LTgyZDYtM2MyNTcyNjMyMjljLmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly9hcGkuZ2VtaW5pLmNvbScsXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly9nZW1pbmkuY29tJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL2RvY3MuZ2VtaW5pLmNvbS9yZXN0LWFwaScsXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnc3ltYm9scycsXG4gICAgICAgICAgICAgICAgJ3B1YnRpY2tlci97c3ltYm9sfScsXG4gICAgICAgICAgICAgICAgJ2Jvb2sve3N5bWJvbH0nLFxuICAgICAgICAgICAgICAgICd0cmFkZXMve3N5bWJvbH0nLFxuICAgICAgICAgICAgICAgICdhdWN0aW9uL3tzeW1ib2x9JyxcbiAgICAgICAgICAgICAgICAnYXVjdGlvbi97c3ltYm9sfS9oaXN0b3J5JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ29yZGVyL25ldycsXG4gICAgICAgICAgICAgICAgJ29yZGVyL2NhbmNlbCcsXG4gICAgICAgICAgICAgICAgJ29yZGVyL2NhbmNlbC9zZXNzaW9uJyxcbiAgICAgICAgICAgICAgICAnb3JkZXIvY2FuY2VsL2FsbCcsXG4gICAgICAgICAgICAgICAgJ29yZGVyL3N0YXR1cycsXG4gICAgICAgICAgICAgICAgJ29yZGVycycsXG4gICAgICAgICAgICAgICAgJ215dHJhZGVzJyxcbiAgICAgICAgICAgICAgICAndHJhZGV2b2x1bWUnLFxuICAgICAgICAgICAgICAgICdiYWxhbmNlcycsXG4gICAgICAgICAgICAgICAgJ2RlcG9zaXQve2N1cnJlbmN5fS9uZXdBZGRyZXNzJyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXcve2N1cnJlbmN5fScsXG4gICAgICAgICAgICAgICAgJ2hlYXJ0YmVhdCcsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE1hcmtldHMgKCkge1xuICAgICAgICBsZXQgbWFya2V0cyA9IGF3YWl0IHRoaXMucHVibGljR2V0U3ltYm9scyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGxldCBwID0gMDsgcCA8IG1hcmtldHMubGVuZ3RoOyBwKyspIHtcbiAgICAgICAgICAgIGxldCBpZCA9IG1hcmtldHNbcF07XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gaWQ7XG4gICAgICAgICAgICBsZXQgdXBwZXJjYXNlID0gbWFya2V0LnRvVXBwZXJDYXNlICgpO1xuICAgICAgICAgICAgbGV0IGJhc2UgPSB1cHBlcmNhc2Uuc2xpY2UgKDAsIDMpO1xuICAgICAgICAgICAgbGV0IHF1b3RlID0gdXBwZXJjYXNlLnNsaWNlICgzLCA2KTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBiYXNlICsgJy8nICsgcXVvdGU7XG4gICAgICAgICAgICByZXN1bHQucHVzaCAoe1xuICAgICAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICAgICAgICAgICdzeW1ib2wnOiBzeW1ib2wsXG4gICAgICAgICAgICAgICAgJ2Jhc2UnOiBiYXNlLFxuICAgICAgICAgICAgICAgICdxdW90ZSc6IHF1b3RlLFxuICAgICAgICAgICAgICAgICdpbmZvJzogbWFya2V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IGF3YWl0IHRoaXMucHVibGljR2V0Qm9va1N5bWJvbCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAob3JkZXJbJ3ByaWNlJ10pO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBwYXJzZUZsb2F0IChvcmRlclsnYW1vdW50J10pO1xuICAgICAgICAgICAgICAgIGxldCB0aW1lc3RhbXAgPSBwYXJzZUludCAob3JkZXJbJ3RpbWVzdGFtcCddKSAqIDEwMDA7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3NpZGVdLnB1c2ggKFsgcHJpY2UsIGFtb3VudCwgdGltZXN0YW1wIF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHRpY2tlciA9IGF3YWl0IHRoaXMucHVibGljR2V0UHVidGlja2VyU3ltYm9sICh7XG4gICAgICAgICAgICAnc3ltYm9sJzogcFsnaWQnXSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aWNrZXJbJ3ZvbHVtZSddWyd0aW1lc3RhbXAnXTtcbiAgICAgICAgbGV0IGJhc2VWb2x1bWUgPSBwWydiYXNlJ107XG4gICAgICAgIGxldCBxdW90ZVZvbHVtZSA9IHBbJ3F1b3RlJ107XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbG93JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYmlkJ10pLFxuICAgICAgICAgICAgJ2Fzayc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYXNrJ10pLFxuICAgICAgICAgICAgJ3Z3YXAnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnb3Blbic6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjbG9zZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdmaXJzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsYXN0JzogcGFyc2VGbG9hdCAodGlja2VyWydsYXN0J10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndm9sdW1lJ11bYmFzZVZvbHVtZV0pLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWyd2b2x1bWUnXVtxdW90ZVZvbHVtZV0pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldFRyYWRlc1N5bWJvbCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdEJhbGFuY2VzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGJhbGFuY2VzIH07XG4gICAgICAgIGZvciAobGV0IGIgPSAwOyBiIDwgYmFsYW5jZXMubGVuZ3RoOyBiKyspIHtcbiAgICAgICAgICAgIGxldCBiYWxhbmNlID0gYmFsYW5jZXNbYl07XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBiYWxhbmNlWydjdXJyZW5jeSddO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiBwYXJzZUZsb2F0IChiYWxhbmNlWydhdmFpbGFibGUnXSksXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogcGFyc2VGbG9hdCAoYmFsYW5jZVsnYW1vdW50J10pLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGFjY291bnRbJ3VzZWQnXSA9IGFjY291bnRbJ3RvdGFsJ10gLSBhY2NvdW50WydmcmVlJ107XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBpZiAodHlwZSA9PSAnbWFya2V0JylcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyBhbGxvd3MgbGltaXQgb3JkZXJzIG9ubHknKTtcbiAgICAgICAgbGV0IG9yZGVyID0ge1xuICAgICAgICAgICAgJ2NsaWVudF9vcmRlcl9pZCc6IHRoaXMubm9uY2UgKCksXG4gICAgICAgICAgICAnc3ltYm9sJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICdhbW91bnQnOiBhbW91bnQudG9TdHJpbmcgKCksXG4gICAgICAgICAgICAncHJpY2UnOiBwcmljZS50b1N0cmluZyAoKSxcbiAgICAgICAgICAgICdzaWRlJzogc2lkZSxcbiAgICAgICAgICAgICd0eXBlJzogJ2V4Y2hhbmdlIGxpbWl0JywgLy8gZ2VtaW5pIGFsbG93cyBsaW1pdCBvcmRlcnMgb25seVxuICAgICAgICB9O1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0T3JkZXJOZXcgKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ2lkJzogcmVzcG9uc2VbJ29yZGVyX2lkJ10sXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdENhbmNlbE9yZGVyICh7ICdvcmRlcl9pZCc6IGlkIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSAnLycgKyB0aGlzLnZlcnNpb24gKyAnLycgKyB0aGlzLmltcGxvZGVQYXJhbXMgKHBhdGgsIHBhcmFtcyk7XG4gICAgICAgIGxldCBxdWVyeSA9IHRoaXMub21pdCAocGFyYW1zLCB0aGlzLmV4dHJhY3RQYXJhbXMgKHBhdGgpKTtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChxdWVyeSkubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG5vbmNlID0gdGhpcy5ub25jZSAoKTtcbiAgICAgICAgICAgIGxldCByZXF1ZXN0ID0gdGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICAgICAncmVxdWVzdCc6IHVybCxcbiAgICAgICAgICAgICAgICAnbm9uY2UnOiBub25jZSxcbiAgICAgICAgICAgIH0sIHF1ZXJ5KTtcbiAgICAgICAgICAgIGxldCBwYXlsb2FkID0gdGhpcy5qc29uIChyZXF1ZXN0KTtcbiAgICAgICAgICAgIHBheWxvYWQgPSB0aGlzLnN0cmluZ1RvQmFzZTY0ICh0aGlzLmVuY29kZSAocGF5bG9hZCkpO1xuICAgICAgICAgICAgbGV0IHNpZ25hdHVyZSA9IHRoaXMuaG1hYyAocGF5bG9hZCwgdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSwgJ3NoYTM4NCcpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ3RleHQvcGxhaW4nLFxuICAgICAgICAgICAgICAgICdDb250ZW50LUxlbmd0aCc6IDAsXG4gICAgICAgICAgICAgICAgJ1gtR0VNSU5JLUFQSUtFWSc6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgICAgICdYLUdFTUlOSS1QQVlMT0FEJzogcGF5bG9hZCxcbiAgICAgICAgICAgICAgICAnWC1HRU1JTkktU0lHTkFUVVJFJzogc2lnbmF0dXJlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgdXJsO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgICAgIGlmICgncmVzdWx0JyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIGlmIChyZXNwb25zZVsncmVzdWx0J10gPT0gJ2Vycm9yJylcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgJyArIHRoaXMuanNvbiAocmVzcG9uc2UpKTtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGhpdGJ0YyA9IHtcblxuICAgICdpZCc6ICdoaXRidGMnLFxuICAgICduYW1lJzogJ0hpdEJUQycsXG4gICAgJ2NvdW50cmllcyc6ICdISycsIC8vIEhvbmcgS29uZ1xuICAgICdyYXRlTGltaXQnOiAxNTAwLFxuICAgICd2ZXJzaW9uJzogJzEnLFxuICAgICdoYXNGZXRjaFRpY2tlcnMnOiB0cnVlLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2NTU1LThlYWVjMjBlLTVlZGMtMTFlNy05YzViLTZkYzY5ZmM0MmY1ZS5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHA6Ly9hcGkuaGl0YnRjLmNvbScsXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly9oaXRidGMuY29tJyxcbiAgICAgICAgJ2RvYyc6IFtcbiAgICAgICAgICAgICdodHRwczovL2hpdGJ0Yy5jb20vYXBpJyxcbiAgICAgICAgICAgICdodHRwOi8vaGl0YnRjLWNvbS5naXRodWIuaW8vaGl0YnRjLWFwaScsXG4gICAgICAgICAgICAnaHR0cDovL2pzZmlkZGxlLm5ldC9ibWtuaWdodC9ScWJZQicsXG4gICAgICAgIF0sXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAne3N5bWJvbH0vb3JkZXJib29rJyxcbiAgICAgICAgICAgICAgICAne3N5bWJvbH0vdGlja2VyJyxcbiAgICAgICAgICAgICAgICAne3N5bWJvbH0vdHJhZGVzJyxcbiAgICAgICAgICAgICAgICAne3N5bWJvbH0vdHJhZGVzL3JlY2VudCcsXG4gICAgICAgICAgICAgICAgJ3N5bWJvbHMnLFxuICAgICAgICAgICAgICAgICd0aWNrZXInLFxuICAgICAgICAgICAgICAgICd0aW1lLCdcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICd0cmFkaW5nJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnYmFsYW5jZScsXG4gICAgICAgICAgICAgICAgJ29yZGVycy9hY3RpdmUnLFxuICAgICAgICAgICAgICAgICdvcmRlcnMvcmVjZW50JyxcbiAgICAgICAgICAgICAgICAnb3JkZXInLFxuICAgICAgICAgICAgICAgICd0cmFkZXMvYnkvb3JkZXInLFxuICAgICAgICAgICAgICAgICd0cmFkZXMnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICdwb3N0JzogW1xuICAgICAgICAgICAgICAgICduZXdfb3JkZXInLFxuICAgICAgICAgICAgICAgICdjYW5jZWxfb3JkZXInLFxuICAgICAgICAgICAgICAgICdjYW5jZWxfb3JkZXJzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwYXltZW50Jzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnYmFsYW5jZScsXG4gICAgICAgICAgICAgICAgJ2FkZHJlc3Mve2N1cnJlbmN5fScsXG4gICAgICAgICAgICAgICAgJ3RyYW5zYWN0aW9ucycsXG4gICAgICAgICAgICAgICAgJ3RyYW5zYWN0aW9ucy97dHJhbnNhY3Rpb259JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAndHJhbnNmZXJfdG9fdHJhZGluZycsXG4gICAgICAgICAgICAgICAgJ3RyYW5zZmVyX3RvX21haW4nLFxuICAgICAgICAgICAgICAgICdhZGRyZXNzL3tjdXJyZW5jeX0nLFxuICAgICAgICAgICAgICAgICdwYXlvdXQnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE1hcmtldHMgKCkge1xuICAgICAgICBsZXQgbWFya2V0cyA9IGF3YWl0IHRoaXMucHVibGljR2V0U3ltYm9scyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGxldCBwID0gMDsgcCA8IG1hcmtldHNbJ3N5bWJvbHMnXS5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IG1hcmtldHNbJ3N5bWJvbHMnXVtwXTtcbiAgICAgICAgICAgIGxldCBpZCA9IG1hcmtldFsnc3ltYm9sJ107XG4gICAgICAgICAgICBsZXQgYmFzZSA9IG1hcmtldFsnY29tbW9kaXR5J107XG4gICAgICAgICAgICBsZXQgcXVvdGUgPSBtYXJrZXRbJ2N1cnJlbmN5J107XG4gICAgICAgICAgICBsZXQgbG90ID0gcGFyc2VGbG9hdCAobWFya2V0Wydsb3QnXSk7XG4gICAgICAgICAgICBsZXQgc3RlcCA9IHBhcnNlRmxvYXQgKG1hcmtldFsnc3RlcCddKTtcbiAgICAgICAgICAgIGJhc2UgPSB0aGlzLmNvbW1vbkN1cnJlbmN5Q29kZSAoYmFzZSk7XG4gICAgICAgICAgICBxdW90ZSA9IHRoaXMuY29tbW9uQ3VycmVuY3lDb2RlIChxdW90ZSk7XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gYmFzZSArICcvJyArIHF1b3RlO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2ggKHtcbiAgICAgICAgICAgICAgICAnaWQnOiBpZCxcbiAgICAgICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgICAgICdiYXNlJzogYmFzZSxcbiAgICAgICAgICAgICAgICAncXVvdGUnOiBxdW90ZSxcbiAgICAgICAgICAgICAgICAnbG90JzogbG90LFxuICAgICAgICAgICAgICAgICdzdGVwJzogc3RlcCxcbiAgICAgICAgICAgICAgICAnaW5mbyc6IG1hcmtldCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMudHJhZGluZ0dldEJhbGFuY2UgKCk7XG4gICAgICAgIGxldCBiYWxhbmNlcyA9IHJlc3BvbnNlWydiYWxhbmNlJ107XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogYmFsYW5jZXMgfTtcbiAgICAgICAgZm9yIChsZXQgYiA9IDA7IGIgPCBiYWxhbmNlcy5sZW5ndGg7IGIrKykge1xuICAgICAgICAgICAgbGV0IGJhbGFuY2UgPSBiYWxhbmNlc1tiXTtcbiAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IGJhbGFuY2VbJ2N1cnJlbmN5X2NvZGUnXTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogcGFyc2VGbG9hdCAoYmFsYW5jZVsnY2FzaCddKSxcbiAgICAgICAgICAgICAgICAndXNlZCc6IHBhcnNlRmxvYXQgKGJhbGFuY2VbJ3Jlc2VydmVkJ10pLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhY2NvdW50Wyd0b3RhbCddID0gdGhpcy5zdW0gKGFjY291bnRbJ2ZyZWUnXSwgYWNjb3VudFsndXNlZCddKTtcbiAgICAgICAgICAgIHJlc3VsdFtjdXJyZW5jeV0gPSBhY2NvdW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFN5bWJvbE9yZGVyYm9vayAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAob3JkZXJbMF0pO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBwYXJzZUZsb2F0IChvcmRlclsxXSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3NpZGVdLnB1c2ggKFsgcHJpY2UsIGFtb3VudCBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBwYXJzZVRpY2tlciAodGlja2VyLCBtYXJrZXQpIHtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRpY2tlclsndGltZXN0YW1wJ107XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2hpZ2gnXSksXG4gICAgICAgICAgICAnbG93JzogcGFyc2VGbG9hdCAodGlja2VyWydsb3cnXSksXG4gICAgICAgICAgICAnYmlkJzogcGFyc2VGbG9hdCAodGlja2VyWydiaWQnXSksXG4gICAgICAgICAgICAnYXNrJzogcGFyc2VGbG9hdCAodGlja2VyWydhc2snXSksXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogcGFyc2VGbG9hdCAodGlja2VyWydvcGVuJ10pLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xhc3QnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWyd2b2x1bWUnXSksXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbHVtZV9xdW90ZSddKSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlcnMgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgdGlja2VycyA9IGF3YWl0IHRoaXMucHVibGljR2V0VGlja2VyICgpO1xuICAgICAgICBsZXQgaWRzID0gT2JqZWN0LmtleXMgKHRpY2tlcnMpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge307XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgaWQgPSBpZHNbaV07XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gdGhpcy5tYXJrZXRzX2J5X2lkW2lkXTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBtYXJrZXRbJ3N5bWJvbCddO1xuICAgICAgICAgICAgbGV0IHRpY2tlciA9IHRpY2tlcnNbaWRdO1xuICAgICAgICAgICAgcmVzdWx0W3N5bWJvbF0gPSB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIG1hcmtldCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgdGlja2VyID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRTeW1ib2xUaWNrZXIgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiBwWydpZCddLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCdtZXNzYWdlJyBpbiB0aWNrZXIpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgJyArIHRpY2tlclsnbWVzc2FnZSddKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VUaWNrZXIgKHRpY2tlciwgcCk7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldFN5bWJvbFRyYWRlcyAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgLy8gY2hlY2sgaWYgYW1vdW50IGNhbiBiZSBldmVubHkgZGl2aWRlZCBpbnRvIGxvdHNcbiAgICAgICAgLy8gdGhleSB3YW50IGludGVnZXIgcXVhbnRpdHkgaW4gbG90IHVuaXRzXG4gICAgICAgIGxldCBxdWFudGl0eSA9IHBhcnNlRmxvYXQgKGFtb3VudCkgLyBwWydsb3QnXTtcbiAgICAgICAgbGV0IHdob2xlTG90cyA9IE1hdGgucm91bmQgKHF1YW50aXR5KTtcbiAgICAgICAgbGV0IGRpZmZlcmVuY2UgPSBxdWFudGl0eSAtIHdob2xlTG90cztcbiAgICAgICAgaWYgKE1hdGguYWJzIChkaWZmZXJlbmNlKSA+IHBbJ3N0ZXAnXSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyBvcmRlciBhbW91bnQgc2hvdWxkIGJlIGV2ZW5seSBkaXZpc2libGUgYnkgbG90IHVuaXQgc2l6ZSBvZiAnICsgcFsnbG90J10udG9TdHJpbmcgKCkpO1xuICAgICAgICBsZXQgY2xpZW50T3JkZXJJZCA9IHRoaXMubm9uY2UgKCk7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdjbGllbnRPcmRlcklkJzogY2xpZW50T3JkZXJJZC50b1N0cmluZyAoKSxcbiAgICAgICAgICAgICdzeW1ib2wnOiBwWydpZCddLFxuICAgICAgICAgICAgJ3NpZGUnOiBzaWRlLFxuICAgICAgICAgICAgJ3F1YW50aXR5Jzogd2hvbGVMb3RzLnRvU3RyaW5nICgpLCAvLyBxdWFudGl0eSBpbiBpbnRlZ2VyIGxvdCB1bml0c1xuICAgICAgICAgICAgJ3R5cGUnOiB0eXBlLFxuICAgICAgICB9O1xuICAgICAgICBpZiAodHlwZSA9PSAnbGltaXQnKVxuICAgICAgICAgICAgb3JkZXJbJ3ByaWNlJ10gPSAnJS4xMGYnLnNwcmludGYgKHByaWNlKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy50cmFkaW5nUG9zdE5ld09yZGVyICh0aGlzLmV4dGVuZCAob3JkZXIsIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXNwb25zZSxcbiAgICAgICAgICAgICdpZCc6IHJlc3BvbnNlWydFeGVjdXRpb25SZXBvcnQnXVsnY2xpZW50T3JkZXJJZCddLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnRyYWRpbmdQb3N0Q2FuY2VsT3JkZXIgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnY2xpZW50T3JkZXJJZCc6IGlkLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gJy8nICsgJ2FwaScgKyAnLycgKyB0aGlzLnZlcnNpb24gKyAnLycgKyBhcGkgKyAnLycgKyB0aGlzLmltcGxvZGVQYXJhbXMgKHBhdGgsIHBhcmFtcyk7XG4gICAgICAgIGxldCBxdWVyeSA9IHRoaXMub21pdCAocGFyYW1zLCB0aGlzLmV4dHJhY3RQYXJhbXMgKHBhdGgpKTtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChxdWVyeSkubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG5vbmNlID0gdGhpcy5ub25jZSAoKTtcbiAgICAgICAgICAgIHF1ZXJ5ID0gdGhpcy5leHRlbmQgKHsgJ25vbmNlJzogbm9uY2UsICdhcGlrZXknOiB0aGlzLmFwaUtleSB9LCBxdWVyeSk7XG4gICAgICAgICAgICBpZiAobWV0aG9kID09ICdQT1NUJylcbiAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHF1ZXJ5KS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgIGJvZHkgPSB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChxdWVyeSk7XG4gICAgICAgICAgICBsZXQgYXV0aCA9IHVybCArIChib2R5IHx8ICcnKTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgICAgICAgICdYLVNpZ25hdHVyZSc6IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKGF1dGgpLCB0aGlzLmVuY29kZSAodGhpcy5zZWNyZXQpLCAnc2hhNTEyJykudG9Mb3dlckNhc2UgKCksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHVybCA9IHRoaXMudXJsc1snYXBpJ10gKyB1cmw7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdjb2RlJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgaHVvYmkgPSB7XG5cbiAgICAnaWQnOiAnaHVvYmknLFxuICAgICduYW1lJzogJ0h1b2JpJyxcbiAgICAnY291bnRyaWVzJzogJ0NOJyxcbiAgICAncmF0ZUxpbWl0JzogMjAwMCxcbiAgICAndmVyc2lvbic6ICd2MycsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc3NjY1NjktMTVhYTdiOWEtNWVkZC0xMWU3LTllN2YtNDQ3OTFmNGVlNDljLmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cDovL2FwaS5odW9iaS5jb20nLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vd3d3Lmh1b2JpLmNvbScsXG4gICAgICAgICdkb2MnOiAnaHR0cHM6Ly9naXRodWIuY29tL2h1b2JpYXBpL0FQSV9Eb2NzX2VuL3dpa2knLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ3N0YXRpY21hcmtldCc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ3tpZH1fa2xpbmVfe3BlcmlvZH0nLFxuICAgICAgICAgICAgICAgICd0aWNrZXJfe2lkfScsXG4gICAgICAgICAgICAgICAgJ2RlcHRoX3tpZH0nLFxuICAgICAgICAgICAgICAgICdkZXB0aF97aWR9X3tsZW5ndGh9JyxcbiAgICAgICAgICAgICAgICAnZGV0YWlsX3tpZH0nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3VzZG1hcmtldCc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ3tpZH1fa2xpbmVfe3BlcmlvZH0nLFxuICAgICAgICAgICAgICAgICd0aWNrZXJfe2lkfScsXG4gICAgICAgICAgICAgICAgJ2RlcHRoX3tpZH0nLFxuICAgICAgICAgICAgICAgICdkZXB0aF97aWR9X3tsZW5ndGh9JyxcbiAgICAgICAgICAgICAgICAnZGV0YWlsX3tpZH0nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3RyYWRlJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2dldF9hY2NvdW50X2luZm8nLFxuICAgICAgICAgICAgICAgICdnZXRfb3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnb3JkZXJfaW5mbycsXG4gICAgICAgICAgICAgICAgJ2J1eScsXG4gICAgICAgICAgICAgICAgJ3NlbGwnLFxuICAgICAgICAgICAgICAgICdidXlfbWFya2V0JyxcbiAgICAgICAgICAgICAgICAnc2VsbF9tYXJrZXQnLFxuICAgICAgICAgICAgICAgICdjYW5jZWxfb3JkZXInLFxuICAgICAgICAgICAgICAgICdnZXRfbmV3X2RlYWxfb3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnZ2V0X29yZGVyX2lkX2J5X3RyYWRlX2lkJyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXdfY29pbicsXG4gICAgICAgICAgICAgICAgJ2NhbmNlbF93aXRoZHJhd19jb2luJyxcbiAgICAgICAgICAgICAgICAnZ2V0X3dpdGhkcmF3X2NvaW5fcmVzdWx0JyxcbiAgICAgICAgICAgICAgICAndHJhbnNmZXInLFxuICAgICAgICAgICAgICAgICdsb2FuJyxcbiAgICAgICAgICAgICAgICAncmVwYXltZW50JyxcbiAgICAgICAgICAgICAgICAnZ2V0X2xvYW5fYXZhaWxhYmxlJyxcbiAgICAgICAgICAgICAgICAnZ2V0X2xvYW5zJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9DTlknOiB7ICdpZCc6ICdidGMnLCAnc3ltYm9sJzogJ0JUQy9DTlknLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnQ05ZJywgJ3R5cGUnOiAnc3RhdGljbWFya2V0JywgJ2NvaW5UeXBlJzogMSB9LFxuICAgICAgICAnTFRDL0NOWSc6IHsgJ2lkJzogJ2x0YycsICdzeW1ib2wnOiAnTFRDL0NOWScsICdiYXNlJzogJ0xUQycsICdxdW90ZSc6ICdDTlknLCAndHlwZSc6ICdzdGF0aWNtYXJrZXQnLCAnY29pblR5cGUnOiAyIH0sXG4gICAgICAgICdCVEMvVVNEJzogeyAnaWQnOiAnYnRjJywgJ3N5bWJvbCc6ICdCVEMvVVNEJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ1VTRCcsICd0eXBlJzogJ3VzZG1hcmtldCcsICAgICdjb2luVHlwZSc6IDEgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gYXdhaXQgdGhpcy50cmFkZVBvc3RHZXRBY2NvdW50SW5mbyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiBiYWxhbmNlcyB9O1xuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IHRoaXMuY3VycmVuY2llcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gdGhpcy5jdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IGxvd2VyY2FzZSA9IGN1cnJlbmN5LnRvTG93ZXJDYXNlICgpO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGxldCBhdmFpbGFibGUgPSAnYXZhaWxhYmxlXycgKyBsb3dlcmNhc2UgKyAnX2Rpc3BsYXknO1xuICAgICAgICAgICAgbGV0IGZyb3plbiA9ICdmcm96ZW5fJyArIGxvd2VyY2FzZSArICdfZGlzcGxheSc7XG4gICAgICAgICAgICBsZXQgbG9hbiA9ICdsb2FuXycgKyBsb3dlcmNhc2UgKyAnX2Rpc3BsYXknO1xuICAgICAgICAgICAgaWYgKGF2YWlsYWJsZSBpbiBiYWxhbmNlcylcbiAgICAgICAgICAgICAgICBhY2NvdW50WydmcmVlJ10gPSBwYXJzZUZsb2F0IChiYWxhbmNlc1thdmFpbGFibGVdKTtcbiAgICAgICAgICAgIGlmIChmcm96ZW4gaW4gYmFsYW5jZXMpXG4gICAgICAgICAgICAgICAgYWNjb3VudFsndXNlZCddID0gcGFyc2VGbG9hdCAoYmFsYW5jZXNbZnJvemVuXSk7XG4gICAgICAgICAgICBpZiAobG9hbiBpbiBiYWxhbmNlcylcbiAgICAgICAgICAgICAgICBhY2NvdW50Wyd1c2VkJ10gPSB0aGlzLnN1bSAoYWNjb3VudFsndXNlZCddLCBwYXJzZUZsb2F0IChiYWxhbmNlc1tsb2FuXSkpO1xuICAgICAgICAgICAgYWNjb3VudFsndG90YWwnXSA9IHRoaXMuc3VtIChhY2NvdW50WydmcmVlJ10sIGFjY291bnRbJ3VzZWQnXSk7XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgbWV0aG9kID0gcFsndHlwZSddICsgJ0dldERlcHRoSWQnO1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgdGhpc1ttZXRob2RdICh0aGlzLmV4dGVuZCAoeyAnaWQnOiBwWydpZCddIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IG9yZGVyYm9va1snYmlkcyddLFxuICAgICAgICAgICAgJ2Fza3MnOiBvcmRlcmJvb2tbJ2Fza3MnXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IG1ldGhvZCA9IHBbJ3R5cGUnXSArICdHZXRUaWNrZXJJZCc7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXNbbWV0aG9kXSAoeyAnaWQnOiBwWydpZCddIH0pO1xuICAgICAgICBsZXQgdGlja2VyID0gcmVzcG9uc2VbJ3RpY2tlciddO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gcGFyc2VJbnQgKHJlc3BvbnNlWyd0aW1lJ10pICogMTAwMDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2J1eSddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3NlbGwnXSksXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogcGFyc2VGbG9hdCAodGlja2VyWydvcGVuJ10pLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xhc3QnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWyd2b2wnXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IG1ldGhvZCA9IHBbJ3R5cGUnXSArICdHZXREZXRhaWxJZCc7XG4gICAgICAgIHJldHVybiB0aGlzW21ldGhvZF0gKHRoaXMuZXh0ZW5kICh7ICdpZCc6IHBbJ2lkJ10gfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCBtZXRob2QgPSAndHJhZGVQb3N0JyArIHRoaXMuY2FwaXRhbGl6ZSAoc2lkZSk7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdjb2luX3R5cGUnOiBwWydjb2luVHlwZSddLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IGFtb3VudCxcbiAgICAgICAgICAgICdtYXJrZXQnOiBwWydxdW90ZSddLnRvTG93ZXJDYXNlICgpLFxuICAgICAgICB9O1xuICAgICAgICBpZiAodHlwZSA9PSAnbGltaXQnKVxuICAgICAgICAgICAgb3JkZXJbJ3ByaWNlJ10gPSBwcmljZTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgbWV0aG9kICs9IHRoaXMuY2FwaXRhbGl6ZSAodHlwZSk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IHRoaXNbbWV0aG9kXSAodGhpcy5leHRlbmQgKG9yZGVyLCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnaWQnXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyYWRlUG9zdENhbmNlbE9yZGVyICh7ICdpZCc6IGlkIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAndHJhZGUnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ107XG4gICAgICAgIGlmIChhcGkgPT0gJ3RyYWRlJykge1xuICAgICAgICAgICAgdXJsICs9ICcvYXBpJyArIHRoaXMudmVyc2lvbjtcbiAgICAgICAgICAgIGxldCBxdWVyeSA9IHRoaXMua2V5c29ydCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICAgICAnbWV0aG9kJzogcGF0aCxcbiAgICAgICAgICAgICAgICAnYWNjZXNzX2tleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgICAgICdjcmVhdGVkJzogdGhpcy5ub25jZSAoKSxcbiAgICAgICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICAgICAgbGV0IHF1ZXJ5U3RyaW5nID0gdGhpcy51cmxlbmNvZGUgKHRoaXMub21pdCAocXVlcnksICdtYXJrZXQnKSk7XG4gICAgICAgICAgICAvLyBzZWNyZXQga2V5IG11c3QgYmUgYXQgdGhlIGVuZCBvZiBxdWVyeSB0byBiZSBzaWduZWRcbiAgICAgICAgICAgIHF1ZXJ5U3RyaW5nICs9ICcmc2VjcmV0X2tleT0nICsgdGhpcy5zZWNyZXQ7XG4gICAgICAgICAgICBxdWVyeVsnc2lnbiddID0gdGhpcy5oYXNoICh0aGlzLmVuY29kZSAocXVlcnlTdHJpbmcpKTtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtTGVuZ3RoJzogYm9keS5sZW5ndGgsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdXJsICs9ICcvJyArIGFwaSArICcvJyArIHRoaXMuaW1wbG9kZVBhcmFtcyAocGF0aCwgcGFyYW1zKSArICdfanNvbi5qcyc7XG4gICAgICAgICAgICBsZXQgcXVlcnkgPSB0aGlzLm9taXQgKHBhcmFtcywgdGhpcy5leHRyYWN0UGFyYW1zIChwYXRoKSk7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHF1ZXJ5KS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChxdWVyeSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgICAgICBpZiAoJ3N0YXR1cycgaW4gcmVzcG9uc2UpXG4gICAgICAgICAgICBpZiAocmVzcG9uc2VbJ3N0YXR1cyddID09ICdlcnJvcicpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgICAgIGlmICgnY29kZScgaW4gcmVzcG9uc2UpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgJyArIHRoaXMuanNvbiAocmVzcG9uc2UpKTtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGl0Yml0ID0ge1xuXG4gICAgJ2lkJzogJ2l0Yml0JyxcbiAgICAnbmFtZSc6ICdpdEJpdCcsXG4gICAgJ2NvdW50cmllcyc6ICdVUycsXG4gICAgJ3JhdGVMaW1pdCc6IDIwMDAsXG4gICAgJ3ZlcnNpb24nOiAndjEnLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3ODIyMTU5LTY2MTUzNjIwLTYwYWQtMTFlNy04OWU3LTAwNWY2ZDdmM2RlMC5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vYXBpLml0Yml0LmNvbScsXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly93d3cuaXRiaXQuY29tJyxcbiAgICAgICAgJ2RvYyc6IFtcbiAgICAgICAgICAgICdodHRwczovL2FwaS5pdGJpdC5jb20vZG9jcycsXG4gICAgICAgICAgICAnaHR0cHM6Ly93d3cuaXRiaXQuY29tL2FwaScsXG4gICAgICAgIF0sXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnbWFya2V0cy97c3ltYm9sfS90aWNrZXInLFxuICAgICAgICAgICAgICAgICdtYXJrZXRzL3tzeW1ib2x9L29yZGVyX2Jvb2snLFxuICAgICAgICAgICAgICAgICdtYXJrZXRzL3tzeW1ib2x9L3RyYWRlcycsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAncHJpdmF0ZSc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ3dhbGxldHMnLFxuICAgICAgICAgICAgICAgICd3YWxsZXRzL3t3YWxsZXRJZH0nLFxuICAgICAgICAgICAgICAgICd3YWxsZXRzL3t3YWxsZXRJZH0vYmFsYW5jZXMve2N1cnJlbmN5Q29kZX0nLFxuICAgICAgICAgICAgICAgICd3YWxsZXRzL3t3YWxsZXRJZH0vZnVuZGluZ19oaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAnd2FsbGV0cy97d2FsbGV0SWR9L3RyYWRlcycsXG4gICAgICAgICAgICAgICAgJ3dhbGxldHMve3dhbGxldElkfS9vcmRlcnMve2lkfScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ3dhbGxldF90cmFuc2ZlcnMnLFxuICAgICAgICAgICAgICAgICd3YWxsZXRzJyxcbiAgICAgICAgICAgICAgICAnd2FsbGV0cy97d2FsbGV0SWR9L2NyeXB0b2N1cnJlbmN5X2RlcG9zaXRzJyxcbiAgICAgICAgICAgICAgICAnd2FsbGV0cy97d2FsbGV0SWR9L2NyeXB0b2N1cnJlbmN5X3dpdGhkcmF3YWxzJyxcbiAgICAgICAgICAgICAgICAnd2FsbGV0cy97d2FsbGV0SWR9L29yZGVycycsXG4gICAgICAgICAgICAgICAgJ3dpcmVfd2l0aGRyYXdhbCcsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ2RlbGV0ZSc6IFtcbiAgICAgICAgICAgICAgICAnd2FsbGV0cy97d2FsbGV0SWR9L29yZGVycy97aWR9JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9VU0QnOiB7ICdpZCc6ICdYQlRVU0QnLCAnc3ltYm9sJzogJ0JUQy9VU0QnLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnVVNEJyB9LFxuICAgICAgICAnQlRDL1NHRCc6IHsgJ2lkJzogJ1hCVFNHRCcsICdzeW1ib2wnOiAnQlRDL1NHRCcsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdTR0QnIH0sXG4gICAgICAgICdCVEMvRVVSJzogeyAnaWQnOiAnWEJURVVSJywgJ3N5bWJvbCc6ICdCVEMvRVVSJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ0VVUicgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IGF3YWl0IHRoaXMucHVibGljR2V0TWFya2V0c1N5bWJvbE9yZGVyQm9vayAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAob3JkZXJbMF0pO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBwYXJzZUZsb2F0IChvcmRlclsxXSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3NpZGVdLnB1c2ggKFsgcHJpY2UsIGFtb3VudCBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGxldCB0aWNrZXIgPSBhd2FpdCB0aGlzLnB1YmxpY0dldE1hcmtldHNTeW1ib2xUaWNrZXIgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMucGFyc2U4NjAxICh0aWNrZXJbJ3NlcnZlclRpbWVVVEMnXSk7XG4gICAgICAgIGxldCBiaWQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGxldCBhc2sgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmICgnYmlkJyBpbiB0aWNrZXIpXG4gICAgICAgICAgICBpZiAodGlja2VyWydiaWQnXSlcbiAgICAgICAgICAgICAgICBiaWQgPSBwYXJzZUZsb2F0ICh0aWNrZXJbJ2JpZCddKTtcbiAgICAgICAgaWYgKCdhc2snIGluIHRpY2tlcilcbiAgICAgICAgICAgIGlmICh0aWNrZXJbJ2FzayddKVxuICAgICAgICAgICAgICAgIGFzayA9IHBhcnNlRmxvYXQgKHRpY2tlclsnYXNrJ10pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydoaWdoMjRoJ10pLFxuICAgICAgICAgICAgJ2xvdyc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbG93MjRoJ10pLFxuICAgICAgICAgICAgJ2JpZCc6IGJpZCxcbiAgICAgICAgICAgICdhc2snOiBhc2ssXG4gICAgICAgICAgICAndndhcCc6IHBhcnNlRmxvYXQgKHRpY2tlclsndndhcDI0aCddKSxcbiAgICAgICAgICAgICdvcGVuJzogcGFyc2VGbG9hdCAodGlja2VyWydvcGVuVG9kYXknXSksXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdFByaWNlJ10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndm9sdW1lMjRoJ10pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldE1hcmtldHNTeW1ib2xUcmFkZXMgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnc3ltYm9sJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZUdldEJhbGFuY2VzICgpO1xuICAgICAgICBsZXQgYmFsYW5jZXMgPSByZXNwb25zZVsnYmFsYW5jZXMnXTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiByZXNwb25zZSB9O1xuICAgICAgICBmb3IgKGxldCBiID0gMDsgYiA8IGJhbGFuY2VzLmxlbmd0aDsgYisrKSB7XG4gICAgICAgICAgICBsZXQgYmFsYW5jZSA9IGJhbGFuY2VzW2JdO1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gYmFsYW5jZVsnY3VycmVuY3knXTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogcGFyc2VGbG9hdCAoYmFsYW5jZVsnYXZhaWxhYmxlQmFsYW5jZSddKSxcbiAgICAgICAgICAgICAgICAndXNlZCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAndG90YWwnOiBwYXJzZUZsb2F0IChiYWxhbmNlWyd0b3RhbEJhbGFuY2UnXSksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYWNjb3VudFsndXNlZCddID0gYWNjb3VudFsndG90YWwnXSAtIGFjY291bnRbJ2ZyZWUnXTtcbiAgICAgICAgICAgIHJlc3VsdFtjdXJyZW5jeV0gPSBhY2NvdW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGZldGNoV2FsbGV0cyAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVHZXRXYWxsZXRzICgpO1xuICAgIH0sXG5cbiAgICBub25jZSAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgaWYgKHR5cGUgPT0gJ21hcmtldCcpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgYWxsb3dzIGxpbWl0IG9yZGVycyBvbmx5Jyk7XG4gICAgICAgIGFtb3VudCA9IGFtb3VudC50b1N0cmluZyAoKTtcbiAgICAgICAgcHJpY2UgPSBwcmljZS50b1N0cmluZyAoKTtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IG9yZGVyID0ge1xuICAgICAgICAgICAgJ3NpZGUnOiBzaWRlLFxuICAgICAgICAgICAgJ3R5cGUnOiB0eXBlLFxuICAgICAgICAgICAgJ2N1cnJlbmN5JzogcFsnYmFzZSddLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IGFtb3VudCxcbiAgICAgICAgICAgICdkaXNwbGF5JzogYW1vdW50LFxuICAgICAgICAgICAgJ3ByaWNlJzogcHJpY2UsXG4gICAgICAgICAgICAnaW5zdHJ1bWVudCc6IHBbJ2lkJ10sXG4gICAgICAgIH07XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RUcmFkZUFkZCAodGhpcy5leHRlbmQgKG9yZGVyLCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnaWQnXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlRGVsZXRlV2FsbGV0c1dhbGxldElkT3JkZXJzSWQgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnaWQnOiBpZCxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ10gKyAnLycgKyB0aGlzLnZlcnNpb24gKyAnLycgKyB0aGlzLmltcGxvZGVQYXJhbXMgKHBhdGgsIHBhcmFtcyk7XG4gICAgICAgIGxldCBxdWVyeSA9IHRoaXMub21pdCAocGFyYW1zLCB0aGlzLmV4dHJhY3RQYXJhbXMgKHBhdGgpKTtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChxdWVyeSkubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChxdWVyeSkubGVuZ3RoKVxuICAgICAgICAgICAgICAgIGJvZHkgPSB0aGlzLmpzb24gKHF1ZXJ5KTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBib2R5ID0gJyc7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpLnRvU3RyaW5nICgpO1xuICAgICAgICAgICAgbGV0IHRpbWVzdGFtcCA9IG5vbmNlO1xuICAgICAgICAgICAgbGV0IGF1dGggPSBbIG1ldGhvZCwgdXJsLCBib2R5LCBub25jZSwgdGltZXN0YW1wIF07XG4gICAgICAgICAgICBsZXQgbWVzc2FnZSA9IG5vbmNlICsgdGhpcy5qc29uIChhdXRoKTtcbiAgICAgICAgICAgIGxldCBoYXNoID0gdGhpcy5oYXNoICh0aGlzLmVuY29kZSAobWVzc2FnZSksICdzaGEyNTYnLCAnYmluYXJ5Jyk7XG4gICAgICAgICAgICBsZXQgYmluaGFzaCA9IHRoaXMuYmluYXJ5Q29uY2F0ICh1cmwsIGhhc2gpO1xuICAgICAgICAgICAgbGV0IHNpZ25hdHVyZSA9IHRoaXMuaG1hYyAoYmluaGFzaCwgdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSwgJ3NoYTUxMicsICdiYXNlNjQnKTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0F1dGhvcml6YXRpb24nOiBzZWxmLmFwaUtleSArICc6JyArIHNpZ25hdHVyZSxcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICdYLUF1dGgtVGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgICAgICdYLUF1dGgtTm9uY2UnOiBub25jZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgICAgICBpZiAoJ2NvZGUnIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBqdWJpID0ge1xuXG4gICAgJ2lkJzogJ2p1YmknLFxuICAgICduYW1lJzogJ2p1YmkuY29tJyxcbiAgICAnY291bnRyaWVzJzogJ0NOJyxcbiAgICAncmF0ZUxpbWl0JzogMTUwMCxcbiAgICAndmVyc2lvbic6ICd2MScsXG4gICAgJ2hhc0ZldGNoVGlja2Vycyc6IHRydWUsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc3NjY1ODEtOWQzOTdkOWEtNWVkZC0xMWU3LThmYjktNWQ4MjM2YzBlNjkyLmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly93d3cuanViaS5jb20vYXBpJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy5qdWJpLmNvbScsXG4gICAgICAgICdkb2MnOiAnaHR0cHM6Ly93d3cuanViaS5jb20vaGVscC9hcGkuaHRtbCcsXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnZGVwdGgnLFxuICAgICAgICAgICAgICAgICdvcmRlcnMnLFxuICAgICAgICAgICAgICAgICd0aWNrZXInLFxuICAgICAgICAgICAgICAgICdhbGx0aWNrZXInLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnYmFsYW5jZScsXG4gICAgICAgICAgICAgICAgJ3RyYWRlX2FkZCcsXG4gICAgICAgICAgICAgICAgJ3RyYWRlX2NhbmNlbCcsXG4gICAgICAgICAgICAgICAgJ3RyYWRlX2xpc3QnLFxuICAgICAgICAgICAgICAgICd0cmFkZV92aWV3JyxcbiAgICAgICAgICAgICAgICAnd2FsbGV0JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoTWFya2V0cyAoKSB7XG4gICAgICAgIGxldCBtYXJrZXRzID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRBbGx0aWNrZXIgKCk7XG4gICAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMgKG1hcmtldHMpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwga2V5cy5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgbGV0IGlkID0ga2V5c1twXTtcbiAgICAgICAgICAgIGxldCBiYXNlID0gaWQudG9VcHBlckNhc2UgKCk7XG4gICAgICAgICAgICBsZXQgcXVvdGUgPSAnQ05ZJztcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBiYXNlICsgJy8nICsgcXVvdGU7XG4gICAgICAgICAgICBiYXNlID0gdGhpcy5jb21tb25DdXJyZW5jeUNvZGUgKGJhc2UpO1xuICAgICAgICAgICAgcXVvdGUgPSB0aGlzLmNvbW1vbkN1cnJlbmN5Q29kZSAocXVvdGUpO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2ggKHtcbiAgICAgICAgICAgICAgICAnaWQnOiBpZCxcbiAgICAgICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgICAgICdiYXNlJzogYmFzZSxcbiAgICAgICAgICAgICAgICAncXVvdGUnOiBxdW90ZSxcbiAgICAgICAgICAgICAgICAnaW5mbyc6IGlkLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdEJhbGFuY2UgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogYmFsYW5jZXMgfTtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCB0aGlzLmN1cnJlbmNpZXMubGVuZ3RoOyBjKyspIHtcbiAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IHRoaXMuY3VycmVuY2llc1tjXTtcbiAgICAgICAgICAgIGxldCBsb3dlcmNhc2UgPSBjdXJyZW5jeS50b0xvd2VyQ2FzZSAoKTtcbiAgICAgICAgICAgIGlmIChsb3dlcmNhc2UgPT0gJ2Rhc2gnKVxuICAgICAgICAgICAgICAgIGxvd2VyY2FzZSA9ICdkcmsnO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGxldCBmcmVlID0gbG93ZXJjYXNlICsgJ19iYWxhbmNlJztcbiAgICAgICAgICAgIGxldCB1c2VkID0gbG93ZXJjYXNlICsgJ19sb2NrJztcbiAgICAgICAgICAgIGlmIChmcmVlIGluIGJhbGFuY2VzKVxuICAgICAgICAgICAgICAgIGFjY291bnRbJ2ZyZWUnXSA9IHBhcnNlRmxvYXQgKGJhbGFuY2VzW2ZyZWVdKTtcbiAgICAgICAgICAgIGlmICh1c2VkIGluIGJhbGFuY2VzKVxuICAgICAgICAgICAgICAgIGFjY291bnRbJ3VzZWQnXSA9IHBhcnNlRmxvYXQgKGJhbGFuY2VzW3VzZWRdKTtcbiAgICAgICAgICAgIGFjY291bnRbJ3RvdGFsJ10gPSB0aGlzLnN1bSAoYWNjb3VudFsnZnJlZSddLCBhY2NvdW50Wyd1c2VkJ10pO1xuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IGF3YWl0IHRoaXMucHVibGljR2V0RGVwdGggKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnY29pbic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IG9yZGVyYm9va1snYmlkcyddLFxuICAgICAgICAgICAgJ2Fza3MnOiBvcmRlcmJvb2tbJ2Fza3MnXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIHJlc3VsdFsnYXNrcyddID0gdGhpcy5zb3J0QnkgKHJlc3VsdFsnYXNrcyddLCAwKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgcGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KSB7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2J1eSddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3NlbGwnXSksXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xhc3QnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWyd2b2wnXSksXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbHVtZSddKSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlcnMgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgdGlja2VycyA9IGF3YWl0IHRoaXMucHVibGljR2V0QWxsdGlja2VyICgpO1xuICAgICAgICBsZXQgaWRzID0gT2JqZWN0LmtleXMgKHRpY2tlcnMpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge307XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgaWQgPSBpZHNbaV07XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gdGhpcy5tYXJrZXRzX2J5X2lkW2lkXTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBtYXJrZXRbJ3N5bWJvbCddO1xuICAgICAgICAgICAgbGV0IHRpY2tlciA9IHRpY2tlcnNbaWRdO1xuICAgICAgICAgICAgcmVzdWx0W3N5bWJvbF0gPSB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIG1hcmtldCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgdGlja2VyID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRUaWNrZXIgKHtcbiAgICAgICAgICAgICdjb2luJzogcFsnaWQnXSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIHApO1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wdWJsaWNHZXRPcmRlcnMgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnY29pbic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0VHJhZGVBZGQgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnYW1vdW50JzogYW1vdW50LFxuICAgICAgICAgICAgJ3ByaWNlJzogcHJpY2UsXG4gICAgICAgICAgICAndHlwZSc6IHNpZGUsXG4gICAgICAgICAgICAnY29pbic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXNwb25zZSxcbiAgICAgICAgICAgICdpZCc6IHJlc3BvbnNlWydpZCddLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVEZWxldGVXYWxsZXRzV2FsbGV0SWRPcmRlcnNJZCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArICcvJyArIHRoaXMudmVyc2lvbiArICcvJyArIHBhdGg7XG4gICAgICAgIGlmIChhcGkgPT0gJ3B1YmxpYycpIHtcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyAocGFyYW1zKS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChwYXJhbXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG5vbmNlID0gdGhpcy5ub25jZSAoKS50b1N0cmluZyAoKTtcbiAgICAgICAgICAgIGxldCBxdWVyeSA9IHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAgICAgJ2tleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgICAgICdub25jZSc6IG5vbmNlLFxuICAgICAgICAgICAgfSwgcGFyYW1zKTtcbiAgICAgICAgICAgIGxldCByZXF1ZXN0ID0gdGhpcy51cmxlbmNvZGUgKHF1ZXJ5KTtcbiAgICAgICAgICAgIGxldCBzZWNyZXQgPSB0aGlzLmhhc2ggKHRoaXMuZW5jb2RlICh0aGlzLnNlY3JldCkpO1xuICAgICAgICAgICAgcXVlcnlbJ3NpZ25hdHVyZSddID0gdGhpcy5obWFjICh0aGlzLmVuY29kZSAocmVxdWVzdCksIHRoaXMuZW5jb2RlIChzZWNyZXQpKTtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtTGVuZ3RoJzogYm9keS5sZW5ndGgsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdyZXN1bHQnIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgaWYgKCFyZXNwb25zZVsncmVzdWx0J10pXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBrcmFrZW4gaXMgYWxzbyBvd25lciBvZiBleC4gQ29pbnNldHRlciAvIENhVmlydEV4IC8gQ2xldmVyY29pblxuXG52YXIga3Jha2VuID0ge1xuXG4gICAgJ2lkJzogJ2tyYWtlbicsXG4gICAgJ25hbWUnOiAnS3Jha2VuJyxcbiAgICAnY291bnRyaWVzJzogJ1VTJyxcbiAgICAndmVyc2lvbic6ICcwJyxcbiAgICAncmF0ZUxpbWl0JzogMTUwMCxcbiAgICAnaGFzRmV0Y2hUaWNrZXJzJzogdHJ1ZSxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yNzc2NjU5OS0yMjcwOTMwNC01ZWRlLTExZTctOWRlMS05ZjMzNzMyZTE1MDkuanBnJyxcbiAgICAgICAgJ2FwaSc6ICdodHRwczovL2FwaS5rcmFrZW4uY29tJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy5rcmFrZW4uY29tJyxcbiAgICAgICAgJ2RvYyc6IFtcbiAgICAgICAgICAgICdodHRwczovL3d3dy5rcmFrZW4uY29tL2VuLXVzL2hlbHAvYXBpJyxcbiAgICAgICAgICAgICdodHRwczovL2dpdGh1Yi5jb20vbm90aGluZ2lzZGVhZC9ucG0ta3Jha2VuLWFwaScsXG4gICAgICAgIF0sXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnQXNzZXRzJyxcbiAgICAgICAgICAgICAgICAnQXNzZXRQYWlycycsXG4gICAgICAgICAgICAgICAgJ0RlcHRoJyxcbiAgICAgICAgICAgICAgICAnT0hMQycsXG4gICAgICAgICAgICAgICAgJ1NwcmVhZCcsXG4gICAgICAgICAgICAgICAgJ1RpY2tlcicsXG4gICAgICAgICAgICAgICAgJ1RpbWUnLFxuICAgICAgICAgICAgICAgICdUcmFkZXMnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnQWRkT3JkZXInLFxuICAgICAgICAgICAgICAgICdCYWxhbmNlJyxcbiAgICAgICAgICAgICAgICAnQ2FuY2VsT3JkZXInLFxuICAgICAgICAgICAgICAgICdDbG9zZWRPcmRlcnMnLFxuICAgICAgICAgICAgICAgICdEZXBvc2l0QWRkcmVzc2VzJyxcbiAgICAgICAgICAgICAgICAnRGVwb3NpdE1ldGhvZHMnLFxuICAgICAgICAgICAgICAgICdEZXBvc2l0U3RhdHVzJyxcbiAgICAgICAgICAgICAgICAnTGVkZ2VycycsXG4gICAgICAgICAgICAgICAgJ09wZW5PcmRlcnMnLFxuICAgICAgICAgICAgICAgICdPcGVuUG9zaXRpb25zJyxcbiAgICAgICAgICAgICAgICAnUXVlcnlMZWRnZXJzJyxcbiAgICAgICAgICAgICAgICAnUXVlcnlPcmRlcnMnLFxuICAgICAgICAgICAgICAgICdRdWVyeVRyYWRlcycsXG4gICAgICAgICAgICAgICAgJ1RyYWRlQmFsYW5jZScsXG4gICAgICAgICAgICAgICAgJ1RyYWRlc0hpc3RvcnknLFxuICAgICAgICAgICAgICAgICdUcmFkZVZvbHVtZScsXG4gICAgICAgICAgICAgICAgJ1dpdGhkcmF3JyxcbiAgICAgICAgICAgICAgICAnV2l0aGRyYXdDYW5jZWwnLFxuICAgICAgICAgICAgICAgICdXaXRoZHJhd0luZm8nLFxuICAgICAgICAgICAgICAgICdXaXRoZHJhd1N0YXR1cycsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE1hcmtldHMgKCkge1xuICAgICAgICBsZXQgbWFya2V0cyA9IGF3YWl0IHRoaXMucHVibGljR2V0QXNzZXRQYWlycyAoKTtcbiAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyAobWFya2V0c1sncmVzdWx0J10pO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwga2V5cy5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgbGV0IGlkID0ga2V5c1twXTtcbiAgICAgICAgICAgIGxldCBtYXJrZXQgPSBtYXJrZXRzWydyZXN1bHQnXVtpZF07XG4gICAgICAgICAgICBsZXQgYmFzZSA9IG1hcmtldFsnYmFzZSddO1xuICAgICAgICAgICAgbGV0IHF1b3RlID0gbWFya2V0WydxdW90ZSddO1xuICAgICAgICAgICAgaWYgKChiYXNlWzBdID09ICdYJykgfHwgKGJhc2VbMF0gPT0gJ1onKSlcbiAgICAgICAgICAgICAgICBiYXNlID0gYmFzZS5zbGljZSAoMSk7XG4gICAgICAgICAgICBpZiAoKHF1b3RlWzBdID09ICdYJykgfHwgKHF1b3RlWzBdID09ICdaJykpXG4gICAgICAgICAgICAgICAgcXVvdGUgPSBxdW90ZS5zbGljZSAoMSk7XG4gICAgICAgICAgICBiYXNlID0gdGhpcy5jb21tb25DdXJyZW5jeUNvZGUgKGJhc2UpO1xuICAgICAgICAgICAgcXVvdGUgPSB0aGlzLmNvbW1vbkN1cnJlbmN5Q29kZSAocXVvdGUpO1xuICAgICAgICAgICAgbGV0IGRhcmtwb29sID0gaWQuaW5kZXhPZiAoJy5kJykgPj0gMDtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBkYXJrcG9vbCA/IG1hcmtldFsnYWx0bmFtZSddIDogKGJhc2UgKyAnLycgKyBxdW90ZSk7XG4gICAgICAgICAgICByZXN1bHQucHVzaCAoe1xuICAgICAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICAgICAgICAgICdzeW1ib2wnOiBzeW1ib2wsXG4gICAgICAgICAgICAgICAgJ2Jhc2UnOiBiYXNlLFxuICAgICAgICAgICAgICAgICdxdW90ZSc6IHF1b3RlLFxuICAgICAgICAgICAgICAgICdkYXJrcG9vbCc6IGRhcmtwb29sLFxuICAgICAgICAgICAgICAgICdpbmZvJzogbWFya2V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IGRhcmtwb29sID0gbWFya2V0LmluZGV4T2YgKCcuZCcpID49IDA7XG4gICAgICAgIGlmIChkYXJrcG9vbClcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyBkb2VzIG5vdCBwcm92aWRlIGFuIG9yZGVyIGJvb2sgZm9yIGRhcmtwb29sIHN5bWJvbCAnICsgbWFya2V0KTtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXREZXB0aCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdwYWlyJzogcFsnaWQnXSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSByZXNwb25zZVsncmVzdWx0J11bcFsnaWQnXV07XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdiaWRzJzogW10sXG4gICAgICAgICAgICAnYXNrcyc6IFtdLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHNpZGVzID0gWyAnYmlkcycsICdhc2tzJyBdO1xuICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IHNpZGVzLmxlbmd0aDsgcysrKSB7XG4gICAgICAgICAgICBsZXQgc2lkZSA9IHNpZGVzW3NdO1xuICAgICAgICAgICAgbGV0IG9yZGVycyA9IG9yZGVyYm9va1tzaWRlXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9yZGVyID0gb3JkZXJzW2ldO1xuICAgICAgICAgICAgICAgIGxldCBwcmljZSA9IHBhcnNlRmxvYXQgKG9yZGVyWzBdKTtcbiAgICAgICAgICAgICAgICBsZXQgYW1vdW50ID0gcGFyc2VGbG9hdCAob3JkZXJbMV0pO1xuICAgICAgICAgICAgICAgIGxldCB0aW1lc3RhbXAgPSBvcmRlclsyXSAqIDEwMDA7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3NpZGVdLnB1c2ggKFsgcHJpY2UsIGFtb3VudCwgdGltZXN0YW1wIF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIHBhcnNlVGlja2VyICh0aWNrZXIsIG1hcmtldCkge1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2gnXVsxXSksXG4gICAgICAgICAgICAnbG93JzogcGFyc2VGbG9hdCAodGlja2VyWydsJ11bMV0pLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYiddWzBdKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2EnXVswXSksXG4gICAgICAgICAgICAndndhcCc6IHBhcnNlRmxvYXQgKHRpY2tlclsncCddWzFdKSxcbiAgICAgICAgICAgICdvcGVuJzogcGFyc2VGbG9hdCAodGlja2VyWydvJ10pLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2MnXVswXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWyd2J11bMV0pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VycyAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBwYWlycyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IHRoaXMuc3ltYm9scy5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgbGV0IHN5bWJvbCA9IHRoaXMuc3ltYm9sc1tzXTtcbiAgICAgICAgICAgIGxldCBtYXJrZXQgPSB0aGlzLm1hcmtldHNbc3ltYm9sXTtcbiAgICAgICAgICAgIGlmICghbWFya2V0WydkYXJrcG9vbCddKVxuICAgICAgICAgICAgICAgIHBhaXJzLnB1c2ggKG1hcmtldFsnaWQnXSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGZpbHRlciA9IHBhaXJzLmpvaW4gKCcsJyk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0VGlja2VyICh7XG4gICAgICAgICAgICAncGFpcic6IGZpbHRlcixcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aWNrZXJzID0gcmVzcG9uc2VbJ3Jlc3VsdCddO1xuICAgICAgICBsZXQgaWRzID0gT2JqZWN0LmtleXMgKHRpY2tlcnMpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge307XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgaWQgPSBpZHNbaV07XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gdGhpcy5tYXJrZXRzX2J5X2lkW2lkXTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBtYXJrZXRbJ3N5bWJvbCddO1xuICAgICAgICAgICAgbGV0IHRpY2tlciA9IHRpY2tlcnNbaWRdO1xuICAgICAgICAgICAgcmVzdWx0W3N5bWJvbF0gPSB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIG1hcmtldCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgZGFya3Bvb2wgPSBtYXJrZXQuaW5kZXhPZiAoJy5kJykgPj0gMDtcbiAgICAgICAgaWYgKGRhcmtwb29sKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnIGRvZXMgbm90IHByb3ZpZGUgYSB0aWNrZXIgZm9yIGRhcmtwb29sIHN5bWJvbCAnICsgbWFya2V0KTtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRUaWNrZXIgKHtcbiAgICAgICAgICAgICdwYWlyJzogcFsnaWQnXSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aWNrZXIgPSByZXNwb25zZVsncmVzdWx0J11bcFsnaWQnXV07XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIHApO1xuICAgIH0sXG5cbiAgICBwYXJzZVRyYWRlICh0cmFkZSwgbWFya2V0KSB7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSBwYXJzZUludCAodHJhZGVbMl0gKiAxMDAwKTtcbiAgICAgICAgbGV0IHNpZGUgPSAodHJhZGVbM10gPT0gJ3MnKSA/ICdzZWxsJyA6ICdidXknO1xuICAgICAgICBsZXQgdHlwZSA9ICh0cmFkZVs0XSA9PSAnbCcpID8gJ2xpbWl0JyA6ICdtYXJrZXQnO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiB0cmFkZSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnc3ltYm9sJzogbWFya2V0WydzeW1ib2wnXSxcbiAgICAgICAgICAgICd0eXBlJzogdHlwZSxcbiAgICAgICAgICAgICdzaWRlJzogc2lkZSxcbiAgICAgICAgICAgICdwcmljZSc6IHBhcnNlRmxvYXQgKHRyYWRlWzBdKSxcbiAgICAgICAgICAgICdhbW91bnQnOiBwYXJzZUZsb2F0ICh0cmFkZVsxXSksXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIHBhcnNlT0hMQ1YgKG9obGN2LCBtYXJrZXQgPSB1bmRlZmluZWQsIHRpbWVmcmFtZSA9IDYwLCBzaW5jZSA9IHVuZGVmaW5lZCwgbGltaXQgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG9obGN2WzBdLFxuICAgICAgICAgICAgb2hsY3ZbMV0sXG4gICAgICAgICAgICBvaGxjdlsyXSxcbiAgICAgICAgICAgIG9obGN2WzNdLFxuICAgICAgICAgICAgb2hsY3ZbNF0sXG4gICAgICAgICAgICBvaGxjdls2XSxcbiAgICAgICAgXTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPSExDViAobWFya2V0LCB0aW1lZnJhbWUgPSA2MCwgc2luY2UgPSB1bmRlZmluZWQsIGxpbWl0ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCBtID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0T0hMQyAoe1xuICAgICAgICAgICAgJ3BhaXInOiBtWydpZCddLFxuICAgICAgICAgICAgJ2ludGVydmFsJzogcGFyc2VJbnQgKHRpbWVmcmFtZSAvIDYwKSxcbiAgICAgICAgICAgICdzaW5jZSc6IHNpbmNlLFxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IG9obGN2cyA9IHJlc3BvbnNlW21bJ2lkJ11dO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZU9ITENWcyAobSwgb2hsY3ZzLCB0aW1lZnJhbWUsIHNpbmNlLCBsaW1pdCk7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBtID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCBpZCA9IG1bJ2lkJ107XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0VHJhZGVzICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ3BhaXInOiBpZCxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCB0cmFkZXMgPSByZXNwb25zZVsncmVzdWx0J11baWRdO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVRyYWRlcyAodHJhZGVzLCBtKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdEJhbGFuY2UgKCk7XG4gICAgICAgIGxldCBiYWxhbmNlcyA9IHJlc3BvbnNlWydyZXN1bHQnXTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiBiYWxhbmNlcyB9O1xuICAgICAgICBsZXQgY3VycmVuY2llcyA9IE9iamVjdC5rZXlzIChiYWxhbmNlcyk7XG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgY3VycmVuY2llcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gY3VycmVuY2llc1tjXTtcbiAgICAgICAgICAgIGxldCBjb2RlID0gY3VycmVuY3k7XG4gICAgICAgICAgICAvLyBYLUlTTzQyMTctQTMgc3RhbmRhcmQgY3VycmVuY3kgY29kZXNcbiAgICAgICAgICAgIGlmIChjb2RlWzBdID09ICdYJykge1xuICAgICAgICAgICAgICAgIGNvZGUgPSBjb2RlLnNsaWNlICgxKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29kZVswXSA9PSAnWicpIHtcbiAgICAgICAgICAgICAgICBjb2RlID0gY29kZS5zbGljZSAoMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb2RlID0gdGhpcy5jb21tb25DdXJyZW5jeUNvZGUgKGNvZGUpO1xuICAgICAgICAgICAgbGV0IGJhbGFuY2UgPSBwYXJzZUZsb2F0IChiYWxhbmNlc1tjdXJyZW5jeV0pO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiBiYWxhbmNlLFxuICAgICAgICAgICAgICAgICd1c2VkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IGJhbGFuY2UsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVzdWx0W2NvZGVdID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAncGFpcic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgICAgICAndHlwZSc6IHNpZGUsXG4gICAgICAgICAgICAnb3JkZXJ0eXBlJzogdHlwZSxcbiAgICAgICAgICAgICd2b2x1bWUnOiBhbW91bnQsXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlID09ICdsaW1pdCcpXG4gICAgICAgICAgICBvcmRlclsncHJpY2UnXSA9IHByaWNlO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0QWRkT3JkZXIgKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIGxldCBsZW5ndGggPSByZXNwb25zZVsncmVzdWx0J11bJ3R4aWQnXS5sZW5ndGg7XG4gICAgICAgIGxldCBpZCA9IChsZW5ndGggPiAxKSA/IHJlc3BvbnNlWydyZXN1bHQnXVsndHhpZCddIDogcmVzcG9uc2VbJ3Jlc3VsdCddWyd0eGlkJ11bMF07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdENhbmNlbE9yZGVyICh7ICd0eGlkJzogaWQgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9ICcvJyArIHRoaXMudmVyc2lvbiArICcvJyArIGFwaSArICcvJyArIHBhdGg7XG4gICAgICAgIGlmIChhcGkgPT0gJ3B1YmxpYycpIHtcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyAocGFyYW1zKS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChwYXJhbXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG5vbmNlID0gdGhpcy5ub25jZSAoKS50b1N0cmluZyAoKTtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLnVybGVuY29kZSAodGhpcy5leHRlbmQgKHsgJ25vbmNlJzogbm9uY2UgfSwgcGFyYW1zKSk7XG4gICAgICAgICAgICBsZXQgYXV0aCA9IHRoaXMuZW5jb2RlIChub25jZSArIGJvZHkpO1xuICAgICAgICAgICAgbGV0IGhhc2ggPSB0aGlzLmhhc2ggKGF1dGgsICdzaGEyNTYnLCAnYmluYXJ5Jyk7XG4gICAgICAgICAgICBsZXQgYmluYXJ5ID0gdGhpcy5zdHJpbmdUb0JpbmFyeSAodGhpcy5lbmNvZGUgKHVybCkpO1xuICAgICAgICAgICAgbGV0IGJpbmhhc2ggPSB0aGlzLmJpbmFyeUNvbmNhdCAoYmluYXJ5LCBoYXNoKTtcbiAgICAgICAgICAgIGxldCBzZWNyZXQgPSB0aGlzLmJhc2U2NFRvQmluYXJ5ICh0aGlzLnNlY3JldCk7XG4gICAgICAgICAgICBsZXQgc2lnbmF0dXJlID0gdGhpcy5obWFjIChiaW5oYXNoLCBzZWNyZXQsICdzaGE1MTInLCAnYmFzZTY0Jyk7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdBUEktS2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ0FQSS1TaWduJzogdGhpcy5kZWNvZGUgKHNpZ25hdHVyZSksXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgdXJsO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgICAgIGlmICgnZXJyb3InIGluIHJlc3BvbnNlKSB7XG4gICAgICAgICAgICBsZXQgbnVtRXJyb3JzID0gcmVzcG9uc2VbJ2Vycm9yJ10ubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKG51bUVycm9ycylcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgJyArIHRoaXMuanNvbiAocmVzcG9uc2UpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgbGFrZWJ0YyA9IHtcblxuICAgICdpZCc6ICdsYWtlYnRjJyxcbiAgICAnbmFtZSc6ICdMYWtlQlRDJyxcbiAgICAnY291bnRyaWVzJzogJ1VTJyxcbiAgICAndmVyc2lvbic6ICdhcGlfdjInLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI4MDc0MTIwLTcyYjdjMzhhLTY2NjAtMTFlNy05MmQ5LWQ5MDI3NTAyMjgxZC5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vYXBpLmxha2VidGMuY29tJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy5sYWtlYnRjLmNvbScsXG4gICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAnaHR0cHM6Ly93d3cubGFrZWJ0Yy5jb20vcy9hcGknLFxuICAgICAgICAgICAgJ2h0dHBzOi8vd3d3Lmxha2VidGMuY29tL3MvYXBpX3YyJyxcbiAgICAgICAgXSxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdiY29yZGVyYm9vaycsXG4gICAgICAgICAgICAgICAgJ2JjdHJhZGVzJyxcbiAgICAgICAgICAgICAgICAndGlja2VyJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2J1eU9yZGVyJyxcbiAgICAgICAgICAgICAgICAnY2FuY2VsT3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnZ2V0QWNjb3VudEluZm8nLFxuICAgICAgICAgICAgICAgICdnZXRFeHRlcm5hbEFjY291bnRzJyxcbiAgICAgICAgICAgICAgICAnZ2V0T3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnZ2V0VHJhZGVzJyxcbiAgICAgICAgICAgICAgICAnb3Blbk9yZGVycycsXG4gICAgICAgICAgICAgICAgJ3NlbGxPcmRlcicsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE1hcmtldHMgKCkge1xuICAgICAgICBsZXQgbWFya2V0cyA9IGF3YWl0IHRoaXMucHVibGljR2V0VGlja2VyICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMgKG1hcmtldHMpO1xuICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGtleXMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgIGxldCBpZCA9IGtleXNba107XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gbWFya2V0c1tpZF07XG4gICAgICAgICAgICBsZXQgYmFzZSA9IGlkLnNsaWNlICgwLCAzKTtcbiAgICAgICAgICAgIGxldCBxdW90ZSA9IGlkLnNsaWNlICgzLCA2KTtcbiAgICAgICAgICAgIGJhc2UgPSBiYXNlLnRvVXBwZXJDYXNlICgpO1xuICAgICAgICAgICAgcXVvdGUgPSBxdW90ZS50b1VwcGVyQ2FzZSAoKTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBiYXNlICsgJy8nICsgcXVvdGU7XG4gICAgICAgICAgICByZXN1bHQucHVzaCAoe1xuICAgICAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICAgICAgICAgICdzeW1ib2wnOiBzeW1ib2wsXG4gICAgICAgICAgICAgICAgJ2Jhc2UnOiBiYXNlLFxuICAgICAgICAgICAgICAgICdxdW90ZSc6IHF1b3RlLFxuICAgICAgICAgICAgICAgICdpbmZvJzogbWFya2V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdEdldEFjY291bnRJbmZvICgpO1xuICAgICAgICBsZXQgYmFsYW5jZXMgPSByZXNwb25zZVsnYmFsYW5jZSddO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IHJlc3BvbnNlIH07XG4gICAgICAgIGxldCBjdXJyZW5jaWVzID0gT2JqZWN0LmtleXMgKGJhbGFuY2VzKTtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBjdXJyZW5jaWVzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBjdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IGJhbGFuY2UgPSBwYXJzZUZsb2F0IChiYWxhbmNlc1tjdXJyZW5jeV0pO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiBiYWxhbmNlLFxuICAgICAgICAgICAgICAgICd1c2VkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IGJhbGFuY2UsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IGF3YWl0IHRoaXMucHVibGljR2V0QmNvcmRlcmJvb2sgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnc3ltYm9sJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdiaWRzJzogW10sXG4gICAgICAgICAgICAnYXNrcyc6IFtdLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHNpZGVzID0gWyAnYmlkcycsICdhc2tzJyBdO1xuICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IHNpZGVzLmxlbmd0aDsgcysrKSB7XG4gICAgICAgICAgICBsZXQgc2lkZSA9IHNpZGVzW3NdO1xuICAgICAgICAgICAgbGV0IG9yZGVycyA9IG9yZGVyYm9va1tzaWRlXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9yZGVyID0gb3JkZXJzW2ldO1xuICAgICAgICAgICAgICAgIGxldCBwcmljZSA9IHBhcnNlRmxvYXQgKG9yZGVyWzBdKTtcbiAgICAgICAgICAgICAgICBsZXQgYW1vdW50ID0gcGFyc2VGbG9hdCAob3JkZXJbMV0pO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtzaWRlXS5wdXNoIChbIHByaWNlLCBhbW91bnQgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgdGlja2VycyA9IGF3YWl0IHRoaXMucHVibGljR2V0VGlja2VyICh7XG4gICAgICAgICAgICAnc3ltYm9sJzogcFsnaWQnXSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aWNrZXIgPSB0aWNrZXJzW3BbJ2lkJ11dO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2hpZ2gnXSksXG4gICAgICAgICAgICAnbG93JzogcGFyc2VGbG9hdCAodGlja2VyWydsb3cnXSksXG4gICAgICAgICAgICAnYmlkJzogcGFyc2VGbG9hdCAodGlja2VyWydiaWQnXSksXG4gICAgICAgICAgICAnYXNrJzogcGFyc2VGbG9hdCAodGlja2VyWydhc2snXSksXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xhc3QnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWyd2b2x1bWUnXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0QmN0cmFkZXMgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnc3ltYm9sJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGlmICh0eXBlID09ICdtYXJrZXQnKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnIGFsbG93cyBsaW1pdCBvcmRlcnMgb25seScpO1xuICAgICAgICBsZXQgbWV0aG9kID0gJ3ByaXZhdGVQb3N0JyArIHRoaXMuY2FwaXRhbGl6ZSAoc2lkZSkgKyAnT3JkZXInO1xuICAgICAgICBsZXQgbWFya2V0SWQgPSB0aGlzLm1hcmtldElkIChtYXJrZXQpO1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAncGFyYW1zJzogWyBwcmljZSwgYW1vdW50LCBtYXJrZXRJZCBdLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzW21ldGhvZF0gKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ2lkJzogcmVzcG9uc2VbJ2lkJ10udG9TdHJpbmcgKCksXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdENhbmNlbE9yZGVyICh7ICdwYXJhbXMnOiBpZCB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArICcvJyArIHRoaXMudmVyc2lvbjtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgdXJsICs9ICcvJyArIHBhdGg7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHBhcmFtcykubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocGFyYW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCk7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHBhcmFtcykubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHBhcmFtcyA9IHBhcmFtcy5qb2luICgnLCcpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHBhcmFtcyA9ICcnO1xuICAgICAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy51cmxlbmNvZGUgKHtcbiAgICAgICAgICAgICAgICAndG9uY2UnOiBub25jZSxcbiAgICAgICAgICAgICAgICAnYWNjZXNza2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ3JlcXVlc3RtZXRob2QnOiBtZXRob2QudG9Mb3dlckNhc2UgKCksXG4gICAgICAgICAgICAgICAgJ2lkJzogbm9uY2UsXG4gICAgICAgICAgICAgICAgJ21ldGhvZCc6IHBhdGgsXG4gICAgICAgICAgICAgICAgJ3BhcmFtcyc6IHBhcmFtcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYm9keSA9IHRoaXMuanNvbiAoe1xuICAgICAgICAgICAgICAgICdtZXRob2QnOiBwYXRoLFxuICAgICAgICAgICAgICAgICdwYXJhbXMnOiBwYXJhbXMsXG4gICAgICAgICAgICAgICAgJ2lkJzogbm9uY2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxldCBzaWduYXR1cmUgPSB0aGlzLmhtYWMgKHRoaXMuZW5jb2RlIChxdWVyeSksIHRoaXMuc2VjcmV0LCAnc2hhMScsICdiYXNlNjQnKTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0pzb24tUnBjLVRvbmNlJzogbm9uY2UsXG4gICAgICAgICAgICAgICAgJ0F1dGhvcml6YXRpb24nOiBcIkJhc2ljIFwiICsgdGhpcy5hcGlLZXkgKyAnOicgKyBzaWduYXR1cmUsXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtTGVuZ3RoJzogYm9keS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgICAgICBpZiAoJ2Vycm9yJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgbGl2ZWNvaW4gPSB7XG5cbiAgICAnaWQnOiAnbGl2ZWNvaW4nLFxuICAgICduYW1lJzogJ0xpdmVDb2luJyxcbiAgICAnY291bnRyaWVzJzogWyAnVVMnLCAnVUsnLCAnUlUnIF0sXG4gICAgJ3JhdGVMaW1pdCc6IDEwMDAsXG4gICAgJ2hhc0ZldGNoVGlja2Vycyc6IHRydWUsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc5ODA3NjgtZjIyZmM0MjQtNjM4YS0xMWU3LTg5YzktNjAxMGE1NGZmOWJlLmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly9hcGkubGl2ZWNvaW4ubmV0JyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy5saXZlY29pbi5uZXQnLFxuICAgICAgICAnZG9jJzogJ2h0dHBzOi8vd3d3LmxpdmVjb2luLm5ldC9hcGk/bGFuZz1lbicsXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnZXhjaGFuZ2UvYWxsL29yZGVyX2Jvb2snLFxuICAgICAgICAgICAgICAgICdleGNoYW5nZS9sYXN0X3RyYWRlcycsXG4gICAgICAgICAgICAgICAgJ2V4Y2hhbmdlL21heGJpZF9taW5hc2snLFxuICAgICAgICAgICAgICAgICdleGNoYW5nZS9vcmRlcl9ib29rJyxcbiAgICAgICAgICAgICAgICAnZXhjaGFuZ2UvcmVzdHJpY3Rpb25zJyxcbiAgICAgICAgICAgICAgICAnZXhjaGFuZ2UvdGlja2VyJywgLy8gb21pdCBwYXJhbXMgdG8gZ2V0IGFsbCB0aWNrZXJzIGF0IG9uY2VcbiAgICAgICAgICAgICAgICAnaW5mby9jb2luSW5mbycsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAncHJpdmF0ZSc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ2V4Y2hhbmdlL2NsaWVudF9vcmRlcnMnLFxuICAgICAgICAgICAgICAgICdleGNoYW5nZS9vcmRlcicsXG4gICAgICAgICAgICAgICAgJ2V4Y2hhbmdlL3RyYWRlcycsXG4gICAgICAgICAgICAgICAgJ2V4Y2hhbmdlL2NvbW1pc3Npb24nLFxuICAgICAgICAgICAgICAgICdleGNoYW5nZS9jb21taXNzaW9uQ29tbW9uSW5mbycsXG4gICAgICAgICAgICAgICAgJ3BheW1lbnQvYmFsYW5jZXMnLFxuICAgICAgICAgICAgICAgICdwYXltZW50L2JhbGFuY2UnLFxuICAgICAgICAgICAgICAgICdwYXltZW50L2dldC9hZGRyZXNzJyxcbiAgICAgICAgICAgICAgICAncGF5bWVudC9oaXN0b3J5L3NpemUnLFxuICAgICAgICAgICAgICAgICdwYXltZW50L2hpc3RvcnkvdHJhbnNhY3Rpb25zJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnZXhjaGFuZ2UvYnV5bGltaXQnLFxuICAgICAgICAgICAgICAgICdleGNoYW5nZS9idXltYXJrZXQnLFxuICAgICAgICAgICAgICAgICdleGNoYW5nZS9jYW5jZWxsaW1pdCcsXG4gICAgICAgICAgICAgICAgJ2V4Y2hhbmdlL3NlbGxsaW1pdCcsXG4gICAgICAgICAgICAgICAgJ2V4Y2hhbmdlL3NlbGxtYXJrZXQnLFxuICAgICAgICAgICAgICAgICdwYXltZW50L291dC9jYXBpdGFsaXN0JyxcbiAgICAgICAgICAgICAgICAncGF5bWVudC9vdXQvY2FyZCcsXG4gICAgICAgICAgICAgICAgJ3BheW1lbnQvb3V0L2NvaW4nLFxuICAgICAgICAgICAgICAgICdwYXltZW50L291dC9va3BheScsXG4gICAgICAgICAgICAgICAgJ3BheW1lbnQvb3V0L3BheWVlcicsXG4gICAgICAgICAgICAgICAgJ3BheW1lbnQvb3V0L3BlcmZlY3Rtb25leScsXG4gICAgICAgICAgICAgICAgJ3BheW1lbnQvdm91Y2hlci9hbW91bnQnLFxuICAgICAgICAgICAgICAgICdwYXltZW50L3ZvdWNoZXIvbWFrZScsXG4gICAgICAgICAgICAgICAgJ3BheW1lbnQvdm91Y2hlci9yZWRlZW0nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hNYXJrZXRzICgpIHtcbiAgICAgICAgbGV0IG1hcmtldHMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldEV4Y2hhbmdlVGlja2VyICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgbWFya2V0cy5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IG1hcmtldHNbcF07XG4gICAgICAgICAgICBsZXQgaWQgPSBtYXJrZXRbJ3N5bWJvbCddO1xuICAgICAgICAgICAgbGV0IHN5bWJvbCA9IGlkO1xuICAgICAgICAgICAgbGV0IFsgYmFzZSwgcXVvdGUgXSA9IHN5bWJvbC5zcGxpdCAoJy8nKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoICh7XG4gICAgICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgICAgICAgICAgJ3N5bWJvbCc6IHN5bWJvbCxcbiAgICAgICAgICAgICAgICAnYmFzZSc6IGJhc2UsXG4gICAgICAgICAgICAgICAgJ3F1b3RlJzogcXVvdGUsXG4gICAgICAgICAgICAgICAgJ2luZm8nOiBtYXJrZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgYmFsYW5jZXMgPSBhd2FpdCB0aGlzLnByaXZhdGVHZXRQYXltZW50QmFsYW5jZXMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogYmFsYW5jZXMgfTtcbiAgICAgICAgZm9yIChsZXQgYiA9IDA7IGIgPCB0aGlzLmN1cnJlbmNpZXMubGVuZ3RoOyBiKyspIHtcbiAgICAgICAgICAgIGxldCBiYWxhbmNlID0gYmFsYW5jZXNbYl07XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBiYWxhbmNlWydjdXJyZW5jeSddO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAoY3VycmVuY3kgaW4gcmVzdWx0KVxuICAgICAgICAgICAgICAgIGFjY291bnQgPSByZXN1bHRbY3VycmVuY3ldO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgICAgICdmcmVlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAndXNlZCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgJ3RvdGFsJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoYmFsYW5jZVsndHlwZSddID09ICd0b3RhbCcpXG4gICAgICAgICAgICAgICAgYWNjb3VudFsndG90YWwnXSA9IHBhcnNlRmxvYXQgKGJhbGFuY2VbJ3ZhbHVlJ10pO1xuICAgICAgICAgICAgaWYgKGJhbGFuY2VbJ3R5cGUnXSA9PSAnYXZhaWxhYmxlJylcbiAgICAgICAgICAgICAgICBhY2NvdW50WydmcmVlJ10gPSBwYXJzZUZsb2F0IChiYWxhbmNlWyd2YWx1ZSddKTtcbiAgICAgICAgICAgIGlmIChiYWxhbmNlWyd0eXBlJ10gPT0gJ3RyYWRlJylcbiAgICAgICAgICAgICAgICBhY2NvdW50Wyd1c2VkJ10gPSBwYXJzZUZsb2F0IChiYWxhbmNlWyd2YWx1ZSddKTtcbiAgICAgICAgICAgIHJlc3VsdFtjdXJyZW5jeV0gPSBhY2NvdW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSBhd2FpdCB0aGlzLnB1YmxpY0dldEV4Y2hhbmdlT3JkZXJCb29rICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2N1cnJlbmN5UGFpcic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgICAgICAnZ3JvdXBCeVByaWNlJzogJ2ZhbHNlJyxcbiAgICAgICAgICAgICdkZXB0aCc6IDEwMCxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSBvcmRlcmJvb2tbJ3RpbWVzdGFtcCddO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAob3JkZXJbMF0pO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBwYXJzZUZsb2F0IChvcmRlclsxXSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3NpZGVdLnB1c2ggKFsgcHJpY2UsIGFtb3VudCBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBwYXJzZVRpY2tlciAodGlja2VyLCBtYXJrZXQpIHtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydoaWdoJ10pLFxuICAgICAgICAgICAgJ2xvdyc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbG93J10pLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYmVzdF9iaWQnXSksXG4gICAgICAgICAgICAnYXNrJzogcGFyc2VGbG9hdCAodGlja2VyWydiZXN0X2FzayddKSxcbiAgICAgICAgICAgICd2d2FwJzogcGFyc2VGbG9hdCAodGlja2VyWyd2d2FwJ10pLFxuICAgICAgICAgICAgJ29wZW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdCddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbHVtZSddKSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlcnMgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldEV4Y2hhbmdlVGlja2VyICgpO1xuICAgICAgICBsZXQgdGlja2VycyA9IHRoaXMuaW5kZXhCeSAocmVzcG9uc2UsICdzeW1ib2wnKTtcbiAgICAgICAgbGV0IGlkcyA9IE9iamVjdC5rZXlzICh0aWNrZXJzKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHt9O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IGlkID0gaWRzW2ldO1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IHRoaXMubWFya2V0c19ieV9pZFtpZF07XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gbWFya2V0WydzeW1ib2wnXTtcbiAgICAgICAgICAgIGxldCB0aWNrZXIgPSB0aWNrZXJzW2lkXTtcbiAgICAgICAgICAgIHJlc3VsdFtzeW1ib2xdID0gdGhpcy5wYXJzZVRpY2tlciAodGlja2VyLCBtYXJrZXQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHRpY2tlciA9IGF3YWl0IHRoaXMucHVibGljR2V0RXhjaGFuZ2VUaWNrZXIgKHtcbiAgICAgICAgICAgICdjdXJyZW5jeVBhaXInOiBwWydpZCddLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VUaWNrZXIgKHRpY2tlciwgcCk7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldEV4Y2hhbmdlTGFzdFRyYWRlcyAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdjdXJyZW5jeVBhaXInOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG1ldGhvZCA9ICdwcml2YXRlUG9zdEV4Y2hhbmdlJyArIHRoaXMuY2FwaXRhbGl6ZSAoc2lkZSkgKyB0eXBlO1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAnY3VycmVuY3lQYWlyJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICdxdWFudGl0eSc6IGFtb3VudCxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHR5cGUgPT0gJ2xpbWl0JylcbiAgICAgICAgICAgIG9yZGVyWydwcmljZSddID0gcHJpY2U7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXNbbWV0aG9kXSAodGhpcy5leHRlbmQgKG9yZGVyLCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnaWQnXS50b1N0cmluZyAoKSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdEV4Y2hhbmdlQ2FuY2VsbGltaXQgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnb3JkZXJJZCc6IGlkLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArICcvJyArIHBhdGg7XG4gICAgICAgIGlmIChhcGkgPT0gJ3B1YmxpYycpIHtcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyAocGFyYW1zKS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChwYXJhbXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy51cmxlbmNvZGUgKHRoaXMua2V5c29ydCAocGFyYW1zKSk7XG4gICAgICAgICAgICBpZiAobWV0aG9kID09ICdHRVQnKVxuICAgICAgICAgICAgICAgIGlmIChxdWVyeSlcbiAgICAgICAgICAgICAgICAgICAgdXJsICs9ICc/JyArIHF1ZXJ5O1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGlmIChxdWVyeSlcbiAgICAgICAgICAgICAgICAgICAgYm9keSA9IHF1ZXJ5O1xuICAgICAgICAgICAgbGV0IHNpZ25hdHVyZSA9IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKHF1ZXJ5KSwgdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSwgJ3NoYTI1NicpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQXBpLUtleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgICAgICdTaWduJzogc2lnbmF0dXJlLnRvVXBwZXJDYXNlICgpLFxuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgICAgICBpZiAoJ3N1Y2Nlc3MnIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgaWYgKCFyZXNwb25zZVsnc3VjY2VzcyddKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgbGlxdWkgPSBleHRlbmQgKGJ0Y2UsIHtcbiAgICAnaWQnOiAnbGlxdWknLFxuICAgICduYW1lJzogJ0xpcXVpJyxcbiAgICAnY291bnRyaWVzJzogJ1VBJyxcbiAgICAncmF0ZUxpbWl0JzogMTAwMCxcbiAgICAndmVyc2lvbic6ICczJyxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yNzk4MjAyMi03NWFlYTgyOC02M2EwLTExZTctOTUxMS1jYTU4NGE4ZWRkNzQuanBnJyxcbiAgICAgICAgJ2FwaSc6IHtcbiAgICAgICAgICAgICdwdWJsaWMnOiAnaHR0cHM6Ly9hcGkubGlxdWkuaW8vYXBpJyxcbiAgICAgICAgICAgICdwcml2YXRlJzogJ2h0dHBzOi8vYXBpLmxpcXVpLmlvL3RhcGknLFxuICAgICAgICB9LFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vbGlxdWkuaW8nLFxuICAgICAgICAnZG9jJzogJ2h0dHBzOi8vbGlxdWkuaW8vYXBpJyxcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXVthcGldO1xuICAgICAgICBsZXQgcXVlcnkgPSB0aGlzLm9taXQgKHBhcmFtcywgdGhpcy5leHRyYWN0UGFyYW1zIChwYXRoKSk7XG4gICAgICAgIGlmIChhcGkgPT0gJ3B1YmxpYycpIHtcbiAgICAgICAgICAgIHVybCArPSAgJy8nICsgdGhpcy52ZXJzaW9uICsgJy8nICsgdGhpcy5pbXBsb2RlUGFyYW1zIChwYXRoLCBwYXJhbXMpO1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChxdWVyeSkubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG5vbmNlID0gdGhpcy5ub25jZSAoKTtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLnVybGVuY29kZSAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICAgICAnbm9uY2UnOiBub25jZSxcbiAgICAgICAgICAgICAgICAnbWV0aG9kJzogcGF0aCxcbiAgICAgICAgICAgIH0sIHF1ZXJ5KSk7XG4gICAgICAgICAgICBsZXQgc2lnbmF0dXJlID0gdGhpcy5obWFjICh0aGlzLmVuY29kZSAoYm9keSksIHRoaXMuZW5jb2RlICh0aGlzLnNlY3JldCksICdzaGE1MTInKTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgICAgICAgICdDb250ZW50LUxlbmd0aCc6IGJvZHkubGVuZ3RoLnRvU3RyaW5nICgpLFxuICAgICAgICAgICAgICAgICdLZXknOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgICAgICAnU2lnbic6IHNpZ25hdHVyZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgICAgICBpZiAoJ3N1Y2Nlc3MnIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgaWYgKCFyZXNwb25zZVsnc3VjY2VzcyddKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSxcbn0pXG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGx1bm8gPSB7XG5cbiAgICAnaWQnOiAnbHVubycsXG4gICAgJ25hbWUnOiAnbHVubycsXG4gICAgJ2NvdW50cmllcyc6IFsgJ0dCJywgJ1NHJywgJ1pBJyBdLFxuICAgICdyYXRlTGltaXQnOiAzMDAwLFxuICAgICd2ZXJzaW9uJzogJzEnLFxuICAgICdoYXNGZXRjaFRpY2tlcnMnOiB0cnVlLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2NjA3LThjMWE2OWQ4LTVlZGUtMTFlNy05MzBjLTU0MGI1ZWI5YmUyNC5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vYXBpLm15Yml0eC5jb20vYXBpJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy5sdW5vLmNvbScsXG4gICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAnaHR0cHM6Ly93d3cubHVuby5jb20vZW4vYXBpJyxcbiAgICAgICAgICAgICdodHRwczovL25wbWpzLm9yZy9wYWNrYWdlL2JpdHgnLFxuICAgICAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS9iYXVzbWVpZXIvbm9kZS1iaXR4JyxcbiAgICAgICAgXSxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdvcmRlcmJvb2snLFxuICAgICAgICAgICAgICAgICd0aWNrZXInLFxuICAgICAgICAgICAgICAgICd0aWNrZXJzJyxcbiAgICAgICAgICAgICAgICAndHJhZGVzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnYWNjb3VudHMve2lkfS9wZW5kaW5nJyxcbiAgICAgICAgICAgICAgICAnYWNjb3VudHMve2lkfS90cmFuc2FjdGlvbnMnLFxuICAgICAgICAgICAgICAgICdiYWxhbmNlJyxcbiAgICAgICAgICAgICAgICAnZmVlX2luZm8nLFxuICAgICAgICAgICAgICAgICdmdW5kaW5nX2FkZHJlc3MnLFxuICAgICAgICAgICAgICAgICdsaXN0b3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnbGlzdHRyYWRlcycsXG4gICAgICAgICAgICAgICAgJ29yZGVycy97aWR9JyxcbiAgICAgICAgICAgICAgICAncXVvdGVzL3tpZH0nLFxuICAgICAgICAgICAgICAgICd3aXRoZHJhd2FscycsXG4gICAgICAgICAgICAgICAgJ3dpdGhkcmF3YWxzL3tpZH0nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICdwb3N0JzogW1xuICAgICAgICAgICAgICAgICdhY2NvdW50cycsXG4gICAgICAgICAgICAgICAgJ3Bvc3RvcmRlcicsXG4gICAgICAgICAgICAgICAgJ21hcmtldG9yZGVyJyxcbiAgICAgICAgICAgICAgICAnc3RvcG9yZGVyJyxcbiAgICAgICAgICAgICAgICAnZnVuZGluZ19hZGRyZXNzJyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXdhbHMnLFxuICAgICAgICAgICAgICAgICdzZW5kJyxcbiAgICAgICAgICAgICAgICAncXVvdGVzJyxcbiAgICAgICAgICAgICAgICAnb2F1dGgyL2dyYW50JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAncHV0JzogW1xuICAgICAgICAgICAgICAgICdxdW90ZXMve2lkfScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ2RlbGV0ZSc6IFtcbiAgICAgICAgICAgICAgICAncXVvdGVzL3tpZH0nLFxuICAgICAgICAgICAgICAgICd3aXRoZHJhd2Fscy97aWR9JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoTWFya2V0cyAoKSB7XG4gICAgICAgIGxldCBtYXJrZXRzID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRUaWNrZXJzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgbWFya2V0c1sndGlja2VycyddLmxlbmd0aDsgcCsrKSB7XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gbWFya2V0c1sndGlja2VycyddW3BdO1xuICAgICAgICAgICAgbGV0IGlkID0gbWFya2V0WydwYWlyJ107XG4gICAgICAgICAgICBsZXQgYmFzZSA9IGlkLnNsaWNlICgwLCAzKTtcbiAgICAgICAgICAgIGxldCBxdW90ZSA9IGlkLnNsaWNlICgzLCA2KTtcbiAgICAgICAgICAgIGJhc2UgPSB0aGlzLmNvbW1vbkN1cnJlbmN5Q29kZSAoYmFzZSk7XG4gICAgICAgICAgICBxdW90ZSA9IHRoaXMuY29tbW9uQ3VycmVuY3lDb2RlIChxdW90ZSk7XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gYmFzZSArICcvJyArIHF1b3RlO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2ggKHtcbiAgICAgICAgICAgICAgICAnaWQnOiBpZCxcbiAgICAgICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgICAgICdiYXNlJzogYmFzZSxcbiAgICAgICAgICAgICAgICAncXVvdGUnOiBxdW90ZSxcbiAgICAgICAgICAgICAgICAnaW5mbyc6IG1hcmtldCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZUdldEJhbGFuY2UgKCk7XG4gICAgICAgIGxldCBiYWxhbmNlcyA9IHJlc3BvbnNlWydiYWxhbmNlJ107XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogcmVzcG9uc2UgfTtcbiAgICAgICAgZm9yIChsZXQgYiA9IDA7IGIgPCBiYWxhbmNlcy5sZW5ndGg7IGIrKykge1xuICAgICAgICAgICAgbGV0IGJhbGFuY2UgPSBiYWxhbmNlc1tiXTtcbiAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IHRoaXMuY29tbW9uQ3VycmVuY3lDb2RlIChiYWxhbmNlWydhc3NldCddKTtcbiAgICAgICAgICAgIGxldCByZXNlcnZlZCA9IHBhcnNlRmxvYXQgKGJhbGFuY2VbJ3Jlc2VydmVkJ10pO1xuICAgICAgICAgICAgbGV0IHVuY29uZmlybWVkID0gcGFyc2VGbG9hdCAoYmFsYW5jZVsndW5jb25maXJtZWQnXSk7XG4gICAgICAgICAgICBsZXQgYWNjb3VudCA9IHtcbiAgICAgICAgICAgICAgICAnZnJlZSc6IHBhcnNlRmxvYXQgKGJhbGFuY2VbJ2JhbGFuY2UnXSksXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB0aGlzLnN1bSAocmVzZXJ2ZWQsIHVuY29uZmlybWVkKSxcbiAgICAgICAgICAgICAgICAndG90YWwnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYWNjb3VudFsndG90YWwnXSA9IHRoaXMuc3VtIChhY2NvdW50WydmcmVlJ10sIGFjY291bnRbJ3VzZWQnXSk7XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRPcmRlcmJvb2sgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAncGFpcic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gb3JkZXJib29rWyd0aW1lc3RhbXAnXTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdiaWRzJzogW10sXG4gICAgICAgICAgICAnYXNrcyc6IFtdLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHNpZGVzID0gWyAnYmlkcycsICdhc2tzJyBdO1xuICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IHNpZGVzLmxlbmd0aDsgcysrKSB7XG4gICAgICAgICAgICBsZXQgc2lkZSA9IHNpZGVzW3NdO1xuICAgICAgICAgICAgbGV0IG9yZGVycyA9IG9yZGVyYm9va1tzaWRlXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9yZGVyID0gb3JkZXJzW2ldO1xuICAgICAgICAgICAgICAgIGxldCBwcmljZSA9IHBhcnNlRmxvYXQgKG9yZGVyWydwcmljZSddKTtcbiAgICAgICAgICAgICAgICBsZXQgYW1vdW50ID0gcGFyc2VGbG9hdCAob3JkZXJbJ3ZvbHVtZSddKTtcbiAgICAgICAgICAgICAgICAvLyBsZXQgdGltZXN0YW1wID0gb3JkZXJbMl0gKiAxMDAwO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtzaWRlXS5wdXNoIChbIHByaWNlLCBhbW91bnQgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgcGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KSB7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aWNrZXJbJ3RpbWVzdGFtcCddO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xvdyc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2JpZCddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2FzayddKSxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdF90cmFkZSddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3JvbGxpbmdfMjRfaG91cl92b2x1bWUnXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXJzICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRUaWNrZXJzICgpO1xuICAgICAgICBsZXQgdGlja2VycyA9IHRoaXMuaW5kZXhCeSAocmVzcG9uc2VbJ3RpY2tlcnMnXSwgJ3BhaXInKTtcbiAgICAgICAgbGV0IGlkcyA9IE9iamVjdC5rZXlzICh0aWNrZXJzKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHt9O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IGlkID0gaWRzW2ldO1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IHRoaXMubWFya2V0c19ieV9pZFtpZF07XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gbWFya2V0WydzeW1ib2wnXTtcbiAgICAgICAgICAgIGxldCB0aWNrZXIgPSB0aWNrZXJzW2lkXTtcbiAgICAgICAgICAgIHJlc3VsdFtzeW1ib2xdID0gdGhpcy5wYXJzZVRpY2tlciAodGlja2VyLCBtYXJrZXQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHRpY2tlciA9IGF3YWl0IHRoaXMucHVibGljR2V0VGlja2VyICh7XG4gICAgICAgICAgICAncGFpcic6IHBbJ2lkJ10sXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVRpY2tlciAodGlja2VyLCBwKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0VHJhZGVzICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ3BhaXInOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlT3JkZXIgKG1hcmtldCwgdHlwZSwgc2lkZSwgYW1vdW50LCBwcmljZSA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG1ldGhvZCA9ICdwcml2YXRlUG9zdCc7XG4gICAgICAgIGxldCBvcmRlciA9IHsgJ3BhaXInOiB0aGlzLm1hcmtldElkIChtYXJrZXQpIH07XG4gICAgICAgIGlmICh0eXBlID09ICdtYXJrZXQnKSB7XG4gICAgICAgICAgICBtZXRob2QgKz0gJ01hcmtldG9yZGVyJztcbiAgICAgICAgICAgIG9yZGVyWyd0eXBlJ10gPSBzaWRlLnRvVXBwZXJDYXNlICgpO1xuICAgICAgICAgICAgaWYgKHNpZGUgPT0gJ2J1eScpXG4gICAgICAgICAgICAgICAgb3JkZXJbJ2NvdW50ZXJfdm9sdW1lJ10gPSBhbW91bnQ7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgb3JkZXJbJ2Jhc2Vfdm9sdW1lJ10gPSBhbW91bnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtZXRob2QgKz0gJ09yZGVyJztcbiAgICAgICAgICAgIG9yZGVyWyd2b2x1bWUnXSA9IGFtb3VudDtcbiAgICAgICAgICAgIG9yZGVyWydwcmljZSddID0gcHJpY2U7XG4gICAgICAgICAgICBpZiAoc2lkZSA9PSAnYnV5JylcbiAgICAgICAgICAgICAgICBvcmRlclsndHlwZSddID0gJ0JJRCc7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgb3JkZXJbJ3R5cGUnXSA9ICdBU0snO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXNbbWV0aG9kXSAodGhpcy5leHRlbmQgKG9yZGVyLCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnb3JkZXJfaWQnXSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0U3RvcG9yZGVyICh7ICdvcmRlcl9pZCc6IGlkIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgJy8nICsgdGhpcy52ZXJzaW9uICsgJy8nICsgdGhpcy5pbXBsb2RlUGFyYW1zIChwYXRoLCBwYXJhbXMpO1xuICAgICAgICBsZXQgcXVlcnkgPSB0aGlzLm9taXQgKHBhcmFtcywgdGhpcy5leHRyYWN0UGFyYW1zIChwYXRoKSk7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyAocXVlcnkpLmxlbmd0aClcbiAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICBpZiAoYXBpID09ICdwcml2YXRlJykge1xuICAgICAgICAgICAgbGV0IGF1dGggPSB0aGlzLmVuY29kZSAodGhpcy5hcGlLZXkgKyAnOicgKyB0aGlzLnNlY3JldCk7XG4gICAgICAgICAgICBhdXRoID0gdGhpcy5zdHJpbmdUb0Jhc2U2NCAoYXV0aCk7XG4gICAgICAgICAgICBoZWFkZXJzID0geyAnQXV0aG9yaXphdGlvbic6ICdCYXNpYyAnICsgdGhpcy5kZWNvZGUgKGF1dGgpIH07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgICAgICBpZiAoJ2Vycm9yJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgbWVyY2FkbyA9IHtcblxuICAgICdpZCc6ICdtZXJjYWRvJyxcbiAgICAnbmFtZSc6ICdNZXJjYWRvIEJpdGNvaW4nLFxuICAgICdjb3VudHJpZXMnOiAnQlInLCAvLyBCcmF6aWxcbiAgICAncmF0ZUxpbWl0JzogMTAwMCxcbiAgICAndmVyc2lvbic6ICd2MycsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc4MzcwNjAtZTdjNTg3MTQtNjBlYS0xMWU3LTkxOTItZjA1ZTg2YWRiODNmLmpwZycsXG4gICAgICAgICdhcGknOiB7XG4gICAgICAgICAgICAncHVibGljJzogJ2h0dHBzOi8vd3d3Lm1lcmNhZG9iaXRjb2luLm5ldC9hcGknLFxuICAgICAgICAgICAgJ3ByaXZhdGUnOiAnaHR0cHM6Ly93d3cubWVyY2Fkb2JpdGNvaW4ubmV0L3RhcGknLFxuICAgICAgICB9LFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vd3d3Lm1lcmNhZG9iaXRjb2luLmNvbS5icicsXG4gICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAnaHR0cHM6Ly93d3cubWVyY2Fkb2JpdGNvaW4uY29tLmJyL2FwaS1kb2MnLFxuICAgICAgICAgICAgJ2h0dHBzOi8vd3d3Lm1lcmNhZG9iaXRjb2luLmNvbS5ici90cmFkZS1hcGknLFxuICAgICAgICBdLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbIC8vIGxhc3Qgc2xhc2ggY3JpdGljYWxcbiAgICAgICAgICAgICAgICAnb3JkZXJib29rLycsXG4gICAgICAgICAgICAgICAgJ29yZGVyYm9va19saXRlY29pbi8nLFxuICAgICAgICAgICAgICAgICd0aWNrZXIvJyxcbiAgICAgICAgICAgICAgICAndGlja2VyX2xpdGVjb2luLycsXG4gICAgICAgICAgICAgICAgJ3RyYWRlcy8nLFxuICAgICAgICAgICAgICAgICd0cmFkZXNfbGl0ZWNvaW4vJyxcbiAgICAgICAgICAgICAgICAndjIvdGlja2VyLycsXG4gICAgICAgICAgICAgICAgJ3YyL3RpY2tlcl9saXRlY29pbi8nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnY2FuY2VsX29yZGVyJyxcbiAgICAgICAgICAgICAgICAnZ2V0X2FjY291bnRfaW5mbycsXG4gICAgICAgICAgICAgICAgJ2dldF9vcmRlcicsXG4gICAgICAgICAgICAgICAgJ2dldF93aXRoZHJhd2FsJyxcbiAgICAgICAgICAgICAgICAnbGlzdF9zeXN0ZW1fbWVzc2FnZXMnLFxuICAgICAgICAgICAgICAgICdsaXN0X29yZGVycycsXG4gICAgICAgICAgICAgICAgJ2xpc3Rfb3JkZXJib29rJyxcbiAgICAgICAgICAgICAgICAncGxhY2VfYnV5X29yZGVyJyxcbiAgICAgICAgICAgICAgICAncGxhY2Vfc2VsbF9vcmRlcicsXG4gICAgICAgICAgICAgICAgJ3dpdGhkcmF3X2NvaW4nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgICdtYXJrZXRzJzoge1xuICAgICAgICAnQlRDL0JSTCc6IHsgJ2lkJzogJ0JSTEJUQycsICdzeW1ib2wnOiAnQlRDL0JSTCcsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdCUkwnLCAnc3VmZml4JzogJycgfSxcbiAgICAgICAgJ0xUQy9CUkwnOiB7ICdpZCc6ICdCUkxMVEMnLCAnc3ltYm9sJzogJ0xUQy9CUkwnLCAnYmFzZSc6ICdMVEMnLCAncXVvdGUnOiAnQlJMJywgJ3N1ZmZpeCc6ICdMaXRlY29pbicgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IG1ldGhvZCA9ICdwdWJsaWNHZXRPcmRlcmJvb2snICsgdGhpcy5jYXBpdGFsaXplIChwWydzdWZmaXgnXSk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSBhd2FpdCB0aGlzW21ldGhvZF0gKHBhcmFtcyk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdiaWRzJzogb3JkZXJib29rWydiaWRzJ10sXG4gICAgICAgICAgICAnYXNrcyc6IG9yZGVyYm9va1snYXNrcyddLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgbWV0aG9kID0gJ3B1YmxpY0dldFYyVGlja2VyJyArIHRoaXMuY2FwaXRhbGl6ZSAocFsnc3VmZml4J10pO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzW21ldGhvZF0gKCk7XG4gICAgICAgIGxldCB0aWNrZXIgPSByZXNwb25zZVsndGlja2VyJ107XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSBwYXJzZUludCAodGlja2VyWydkYXRlJ10pICogMTAwMDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2J1eSddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3NlbGwnXSksXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xhc3QnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogcGFyc2VGbG9hdCAodGlja2VyWyd2b2wnXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IG1ldGhvZCA9ICdwdWJsaWNHZXRUcmFkZXMnICsgdGhpcy5jYXBpdGFsaXplIChwWydzdWZmaXgnXSk7XG4gICAgICAgIHJldHVybiB0aGlzW21ldGhvZF0gKHBhcmFtcyk7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAoKSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RHZXRBY2NvdW50SW5mbyAoKTtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gcmVzcG9uc2VbJ2JhbGFuY2UnXTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiByZXNwb25zZSB9O1xuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IHRoaXMuY3VycmVuY2llcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gdGhpcy5jdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IGxvd2VyY2FzZSA9IGN1cnJlbmN5LnRvTG93ZXJDYXNlICgpO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChsb3dlcmNhc2UgaW4gYmFsYW5jZXMpIHtcbiAgICAgICAgICAgICAgICBhY2NvdW50WydmcmVlJ10gPSBwYXJzZUZsb2F0IChiYWxhbmNlc1tsb3dlcmNhc2VdWydhdmFpbGFibGUnXSk7XG4gICAgICAgICAgICAgICAgYWNjb3VudFsndG90YWwnXSA9IHBhcnNlRmxvYXQgKGJhbGFuY2VzW2xvd2VyY2FzZV1bJ3RvdGFsJ10pO1xuICAgICAgICAgICAgICAgIGFjY291bnRbJ3VzZWQnXSA9IGFjY291bnRbJ3RvdGFsJ10gLSBhY2NvdW50WydmcmVlJ107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBpZiAodHlwZSA9PSAnbWFya2V0JylcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyBhbGxvd3MgbGltaXQgb3JkZXJzIG9ubHknKTtcbiAgICAgICAgbGV0IG1ldGhvZCA9ICdwcml2YXRlUG9zdFBsYWNlJyArIHRoaXMuY2FwaXRhbGl6ZSAoc2lkZSkgKyAnT3JkZXInO1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAnY29pbl9wYWlyJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICdxdWFudGl0eSc6IGFtb3VudCxcbiAgICAgICAgICAgICdsaW1pdF9wcmljZSc6IHByaWNlLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzW21ldGhvZF0gKHRoaXMuZXh0ZW5kIChvcmRlciwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ2lkJzogcmVzcG9uc2VbJ3Jlc3BvbnNlX2RhdGEnXVsnb3JkZXInXVsnb3JkZXJfaWQnXS50b1N0cmluZyAoKSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdENhbmNlbE9yZGVyICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ29yZGVyX2lkJzogaWQsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddW2FwaV0gKyAnLyc7XG4gICAgICAgIGlmIChhcGkgPT0gJ3B1YmxpYycpIHtcbiAgICAgICAgICAgIHVybCArPSBwYXRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdXJsICs9IHRoaXMudmVyc2lvbiArICcvJztcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCk7XG4gICAgICAgICAgICBib2R5ID0gdGhpcy51cmxlbmNvZGUgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAgICAgJ3RhcGlfbWV0aG9kJzogcGF0aCxcbiAgICAgICAgICAgICAgICAndGFwaV9ub25jZSc6IG5vbmNlLFxuICAgICAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgICAgICBsZXQgYXV0aCA9ICcvdGFwaS8nICsgdGhpcy52ZXJzaW9uICsgJy8nICsgJz8nICsgYm9keTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgICAgICAgICdUQVBJLUlEJzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ1RBUEktTUFDJzogdGhpcy5obWFjICh0aGlzLmVuY29kZSAoYXV0aCksIHRoaXMuc2VjcmV0LCAnc2hhNTEyJyksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdlcnJvcl9tZXNzYWdlJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gT0tDb2luXG4vLyBDaGluYVxuLy8gaHR0cHM6Ly93d3cub2tjb2luLmNvbS9cbi8vIGh0dHBzOi8vd3d3Lm9rY29pbi5jb20vcmVzdF9nZXRTdGFydGVkLmh0bWxcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9PS0NvaW4vd2Vic29ja2V0XG4vLyBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9va2NvaW4uY29tXG4vLyBodHRwczovL3d3dy5va2NvaW4uY25cbi8vIGh0dHBzOi8vd3d3Lm9rY29pbi5jbi9yZXN0X2dldFN0YXJ0ZWQuaHRtbFxuXG52YXIgb2tjb2luID0ge1xuXG4gICAgJ3ZlcnNpb24nOiAndjEnLFxuICAgICdyYXRlTGltaXQnOiAxMDAwLCAvLyB1cCB0byAzMDAwIHJlcXVlc3RzIHBlciA1IG1pbnV0ZXMg4omIIDYwMCByZXF1ZXN0cyBwZXIgbWludXRlIOKJiCAxMCByZXF1ZXN0cyBwZXIgc2Vjb25kIOKJiCAxMDAgbXNcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnZGVwdGgnLFxuICAgICAgICAgICAgICAgICdleGNoYW5nZV9yYXRlJyxcbiAgICAgICAgICAgICAgICAnZnV0dXJlX2RlcHRoJyxcbiAgICAgICAgICAgICAgICAnZnV0dXJlX2VzdGltYXRlZF9wcmljZScsXG4gICAgICAgICAgICAgICAgJ2Z1dHVyZV9ob2xkX2Ftb3VudCcsXG4gICAgICAgICAgICAgICAgJ2Z1dHVyZV9pbmRleCcsXG4gICAgICAgICAgICAgICAgJ2Z1dHVyZV9rbGluZScsXG4gICAgICAgICAgICAgICAgJ2Z1dHVyZV9wcmljZV9saW1pdCcsXG4gICAgICAgICAgICAgICAgJ2Z1dHVyZV90aWNrZXInLFxuICAgICAgICAgICAgICAgICdmdXR1cmVfdHJhZGVzJyxcbiAgICAgICAgICAgICAgICAna2xpbmUnLFxuICAgICAgICAgICAgICAgICdvdGNzJyxcbiAgICAgICAgICAgICAgICAndGlja2VyJyxcbiAgICAgICAgICAgICAgICAndHJhZGVzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2FjY291bnRfcmVjb3JkcycsXG4gICAgICAgICAgICAgICAgJ2JhdGNoX3RyYWRlJyxcbiAgICAgICAgICAgICAgICAnYm9ycm93X21vbmV5JyxcbiAgICAgICAgICAgICAgICAnYm9ycm93X29yZGVyX2luZm8nLFxuICAgICAgICAgICAgICAgICdib3Jyb3dzX2luZm8nLFxuICAgICAgICAgICAgICAgICdjYW5jZWxfYm9ycm93JyxcbiAgICAgICAgICAgICAgICAnY2FuY2VsX29yZGVyJyxcbiAgICAgICAgICAgICAgICAnY2FuY2VsX290Y19vcmRlcicsXG4gICAgICAgICAgICAgICAgJ2NhbmNlbF93aXRoZHJhdycsXG4gICAgICAgICAgICAgICAgJ2Z1dHVyZV9iYXRjaF90cmFkZScsXG4gICAgICAgICAgICAgICAgJ2Z1dHVyZV9jYW5jZWwnLFxuICAgICAgICAgICAgICAgICdmdXR1cmVfZGV2b2x2ZScsXG4gICAgICAgICAgICAgICAgJ2Z1dHVyZV9leHBsb3NpdmUnLFxuICAgICAgICAgICAgICAgICdmdXR1cmVfb3JkZXJfaW5mbycsXG4gICAgICAgICAgICAgICAgJ2Z1dHVyZV9vcmRlcnNfaW5mbycsXG4gICAgICAgICAgICAgICAgJ2Z1dHVyZV9wb3NpdGlvbicsXG4gICAgICAgICAgICAgICAgJ2Z1dHVyZV9wb3NpdGlvbl80Zml4JyxcbiAgICAgICAgICAgICAgICAnZnV0dXJlX3RyYWRlJyxcbiAgICAgICAgICAgICAgICAnZnV0dXJlX3RyYWRlc19oaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAnZnV0dXJlX3VzZXJpbmZvJyxcbiAgICAgICAgICAgICAgICAnZnV0dXJlX3VzZXJpbmZvXzRmaXgnLFxuICAgICAgICAgICAgICAgICdsZW5kX2RlcHRoJyxcbiAgICAgICAgICAgICAgICAnb3JkZXJfZmVlJyxcbiAgICAgICAgICAgICAgICAnb3JkZXJfaGlzdG9yeScsXG4gICAgICAgICAgICAgICAgJ29yZGVyX2luZm8nLFxuICAgICAgICAgICAgICAgICdvcmRlcnNfaW5mbycsXG4gICAgICAgICAgICAgICAgJ290Y19vcmRlcl9oaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAnb3RjX29yZGVyX2luZm8nLFxuICAgICAgICAgICAgICAgICdyZXBheW1lbnQnLFxuICAgICAgICAgICAgICAgICdzdWJtaXRfb3RjX29yZGVyJyxcbiAgICAgICAgICAgICAgICAndHJhZGUnLFxuICAgICAgICAgICAgICAgICd0cmFkZV9oaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAndHJhZGVfb3RjX29yZGVyJyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXcnLFxuICAgICAgICAgICAgICAgICd3aXRoZHJhd19pbmZvJyxcbiAgICAgICAgICAgICAgICAndW5yZXBheW1lbnRzX2luZm8nLFxuICAgICAgICAgICAgICAgICd1c2VyaW5mbycsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgdGhpcy5wdWJsaWNHZXREZXB0aCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBvcmRlcmJvb2tbJ2JpZHMnXSxcbiAgICAgICAgICAgICdhc2tzJzogdGhpcy5zb3J0QnkgKG9yZGVyYm9va1snYXNrcyddLCAwKSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRUaWNrZXIgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IHRpY2tlciA9IHJlc3BvbnNlWyd0aWNrZXInXTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHBhcnNlSW50IChyZXNwb25zZVsnZGF0ZSddKSAqIDEwMDA7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2hpZ2gnXSksXG4gICAgICAgICAgICAnbG93JzogcGFyc2VGbG9hdCAodGlja2VyWydsb3cnXSksXG4gICAgICAgICAgICAnYmlkJzogcGFyc2VGbG9hdCAodGlja2VyWydidXknXSksXG4gICAgICAgICAgICAnYXNrJzogcGFyc2VGbG9hdCAodGlja2VyWydzZWxsJ10pLFxuICAgICAgICAgICAgJ3Z3YXAnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnb3Blbic6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjbG9zZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdmaXJzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsYXN0JzogcGFyc2VGbG9hdCAodGlja2VyWydsYXN0J10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndm9sJ10pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldFRyYWRlcyAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPSExDViAobWFya2V0LCB0aW1lZnJhbWUgPSA2MCwgc2luY2UgPSB1bmRlZmluZWQsIGxpbWl0ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCBtID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0S2xpbmUgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiBtWydpZCddLFxuICAgICAgICAgICAgJ3R5cGUnOiAnMW1pbicsXG4gICAgICAgICAgICAnc2luY2UnOiBzaW5jZSxcbiAgICAgICAgICAgICdzaXplJzogcGFyc2VJbnQgKGxpbWl0KSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlT0hMQ1ZzIChtLCByZXNwb25zZSwgdGltZWZyYW1lLCBzaW5jZSwgbGltaXQpO1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0VXNlcmluZm8gKCk7XG4gICAgICAgIGxldCBiYWxhbmNlcyA9IHJlc3BvbnNlWydpbmZvJ11bJ2Z1bmRzJ107XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogcmVzcG9uc2UgfTtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCB0aGlzLmN1cnJlbmNpZXMubGVuZ3RoOyBjKyspIHtcbiAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IHRoaXMuY3VycmVuY2llc1tjXTtcbiAgICAgICAgICAgIGxldCBsb3dlcmNhc2UgPSBjdXJyZW5jeS50b0xvd2VyQ2FzZSAoKTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd1c2VkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAobG93ZXJjYXNlIGluIGJhbGFuY2VzWydmcmVlJ10pXG4gICAgICAgICAgICAgICAgYWNjb3VudFsnZnJlZSddID0gcGFyc2VGbG9hdCAoYmFsYW5jZXNbJ2ZyZWUnXVtsb3dlcmNhc2VdKTtcbiAgICAgICAgICAgIGlmIChsb3dlcmNhc2UgaW4gYmFsYW5jZXNbJ2ZyZWV6ZWQnXSlcbiAgICAgICAgICAgICAgICBhY2NvdW50Wyd1c2VkJ10gPSBwYXJzZUZsb2F0IChiYWxhbmNlc1snZnJlZXplZCddW2xvd2VyY2FzZV0pO1xuICAgICAgICAgICAgYWNjb3VudFsndG90YWwnXSA9IHRoaXMuc3VtIChhY2NvdW50WydmcmVlJ10sIGFjY291bnRbJ3VzZWQnXSk7XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAnc3ltYm9sJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICd0eXBlJzogc2lkZSxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHR5cGUgPT0gJ2xpbWl0Jykge1xuICAgICAgICAgICAgb3JkZXJbJ3ByaWNlJ10gPSBwcmljZTtcbiAgICAgICAgICAgIG9yZGVyWydhbW91bnQnXSA9IGFtb3VudDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChzaWRlID09ICdidXknKSB7XG4gICAgICAgICAgICAgICAgb3JkZXJbJ3ByaWNlJ10gPSBwYXJhbXM7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG9yZGVyWydhbW91bnQnXSA9IGFtb3VudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9yZGVyWyd0eXBlJ10gKz0gJ19tYXJrZXQnO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RUcmFkZSAodGhpcy5leHRlbmQgKG9yZGVyLCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnb3JkZXJfaWQnXS50b1N0cmluZyAoKSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdENhbmNlbE9yZGVyICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ29yZGVyX2lkJzogaWQsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSAnLycgKyAnYXBpJyArICcvJyArIHRoaXMudmVyc2lvbiArICcvJyArIHBhdGggKyAnLmRvJztcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChwYXJhbXMpLmxlbmd0aClcbiAgICAgICAgICAgICAgICB1cmwgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHBhcmFtcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgcXVlcnkgPSB0aGlzLmtleXNvcnQgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAgICAgJ2FwaV9rZXknOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICAgICAgLy8gc2VjcmV0IGtleSBtdXN0IGJlIGF0IHRoZSBlbmQgb2YgcXVlcnlcbiAgICAgICAgICAgIGxldCBxdWVyeVN0cmluZyA9IHRoaXMudXJsZW5jb2RlIChxdWVyeSkgKyAnJnNlY3JldF9rZXk9JyArIHRoaXMuc2VjcmV0O1xuICAgICAgICAgICAgcXVlcnlbJ3NpZ24nXSA9IHRoaXMuaGFzaCAodGhpcy5lbmNvZGUgKHF1ZXJ5U3RyaW5nKSkudG9VcHBlckNhc2UgKCk7XG4gICAgICAgICAgICBib2R5ID0gdGhpcy51cmxlbmNvZGUgKHF1ZXJ5KTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyB9O1xuICAgICAgICB9XG4gICAgICAgIHVybCA9IHRoaXMudXJsc1snYXBpJ10gKyB1cmw7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdyZXN1bHQnIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgaWYgKCFyZXNwb25zZVsncmVzdWx0J10pXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBva2NvaW5jbnkgPSBleHRlbmQgKG9rY29pbiwge1xuICAgICdpZCc6ICdva2NvaW5jbnknLFxuICAgICduYW1lJzogJ09LQ29pbiBDTlknLFxuICAgICdjb3VudHJpZXMnOiAnQ04nLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2NzkyLThiZTkxNTdhLTVlZTUtMTFlNy05MjZjLTZkNjliOGQzMzc4ZC5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vd3d3Lm9rY29pbi5jbicsXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly93d3cub2tjb2luLmNuJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL3d3dy5va2NvaW4uY24vcmVzdF9nZXRTdGFydGVkLmh0bWwnLFxuICAgIH0sXG4gICAgJ21hcmtldHMnOiB7XG4gICAgICAgICdCVEMvQ05ZJzogeyAnaWQnOiAnYnRjX2NueScsICdzeW1ib2wnOiAnQlRDL0NOWScsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdDTlknIH0sXG4gICAgICAgICdMVEMvQ05ZJzogeyAnaWQnOiAnbHRjX2NueScsICdzeW1ib2wnOiAnTFRDL0NOWScsICdiYXNlJzogJ0xUQycsICdxdW90ZSc6ICdDTlknIH0sXG4gICAgfSxcbn0pXG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIG9rY29pbnVzZCA9IGV4dGVuZCAob2tjb2luLCB7XG4gICAgJ2lkJzogJ29rY29pbnVzZCcsXG4gICAgJ25hbWUnOiAnT0tDb2luIFVTRCcsXG4gICAgJ2NvdW50cmllcyc6IFsgJ0NOJywgJ1VTJyBdLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2NzkxLTg5ZmZiNTAyLTVlZTUtMTFlNy04YTViLWM1OTUwYjY4YWM2NS5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vd3d3Lm9rY29pbi5jb20nLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vd3d3Lm9rY29pbi5jb20nLFxuICAgICAgICAnZG9jJzogW1xuICAgICAgICAgICAgJ2h0dHBzOi8vd3d3Lm9rY29pbi5jb20vcmVzdF9nZXRTdGFydGVkLmh0bWwnLFxuICAgICAgICAgICAgJ2h0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL29rY29pbi5jb20nLFxuICAgICAgICBdLFxuICAgIH0sXG4gICAgJ21hcmtldHMnOiB7XG4gICAgICAgICdCVEMvVVNEJzogeyAnaWQnOiAnYnRjX3VzZCcsICdzeW1ib2wnOiAnQlRDL1VTRCcsICdiYXNlJzogJ0JUQycsICdxdW90ZSc6ICdVU0QnIH0sXG4gICAgICAgICdMVEMvVVNEJzogeyAnaWQnOiAnbHRjX3VzZCcsICdzeW1ib2wnOiAnTFRDL1VTRCcsICdiYXNlJzogJ0xUQycsICdxdW90ZSc6ICdVU0QnIH0sXG4gICAgICAgICdFVEgvVVNEJzogeyAnaWQnOiAnZXRoX3VzZCcsICdzeW1ib2wnOiAnRVRIL1VTRCcsICdiYXNlJzogJ0VUSCcsICdxdW90ZSc6ICdVU0QnIH0sXG4gICAgICAgICdFVEMvVVNEJzogeyAnaWQnOiAnZXRjX3VzZCcsICdzeW1ib2wnOiAnRVRDL1VTRCcsICdiYXNlJzogJ0VUQycsICdxdW90ZSc6ICdVU0QnIH0sXG4gICAgfSxcbn0pXG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIG9rZXggPSBleHRlbmQgKG9rY29pbiwge1xuICAgICdpZCc6ICdva2V4JyxcbiAgICAnbmFtZSc6ICdPS0VYJyxcbiAgICAnY291bnRyaWVzJzogWyAnQ04nLCAnVVMnIF0sXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjk1NjI1OTMtOTAzOGE5YmMtODc0Mi0xMWU3LTkxY2MtODIwMWY4NDViZmMxLmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly93d3cub2tleC5jb20nLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vd3d3Lm9rZXguY29tJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL3d3dy5va2V4LmNvbS9yZXN0X2dldFN0YXJ0ZWQuaHRtbCcsXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0xUQy9CVEMnOiB7ICdpZCc6ICdsdGNfYnRjJywgJ3N5bWJvbCc6ICdMVEMvQlRDJywgJ2Jhc2UnOiAnTFRDJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ0VUSC9CVEMnOiB7ICdpZCc6ICdldGhfYnRjJywgJ3N5bWJvbCc6ICdFVEgvQlRDJywgJ2Jhc2UnOiAnRVRIJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ0VUQy9CVEMnOiB7ICdpZCc6ICdldGNfYnRjJywgJ3N5bWJvbCc6ICdFVEMvQlRDJywgJ2Jhc2UnOiAnRVRDJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ0JDSC9CVEMnOiB7ICdpZCc6ICdiY2NfYnRjJywgJ3N5bWJvbCc6ICdCQ0gvQlRDJywgJ2Jhc2UnOiAnQkNIJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICB9LFxufSlcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgcGF5bWl1bSA9IHtcblxuICAgICdpZCc6ICdwYXltaXVtJyxcbiAgICAnbmFtZSc6ICdQYXltaXVtJyxcbiAgICAnY291bnRyaWVzJzogWyAnRlInLCAnRVUnIF0sXG4gICAgJ3JhdGVMaW1pdCc6IDIwMDAsXG4gICAgJ3ZlcnNpb24nOiAndjEnLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzkwNTY0LWE5NDVhOWQ0LTVmZjktMTFlNy05ZDJkLWI2MzU3NjNmMmYyNC5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vcGF5bWl1bS5jb20vYXBpJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy5wYXltaXVtLmNvbScsXG4gICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAnaHR0cHM6Ly9naXRodWIuY29tL1BheW1pdW0vYXBpLWRvY3VtZW50YXRpb24nLFxuICAgICAgICAgICAgJ2h0dHBzOi8vd3d3LnBheW1pdW0uY29tL3BhZ2UvZGV2ZWxvcGVycycsXG4gICAgICAgIF0sXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnY291bnRyaWVzJyxcbiAgICAgICAgICAgICAgICAnZGF0YS97aWR9L3RpY2tlcicsXG4gICAgICAgICAgICAgICAgJ2RhdGEve2lkfS90cmFkZXMnLFxuICAgICAgICAgICAgICAgICdkYXRhL3tpZH0vZGVwdGgnLFxuICAgICAgICAgICAgICAgICdiaXRjb2luX2NoYXJ0cy97aWR9L3RyYWRlcycsXG4gICAgICAgICAgICAgICAgJ2JpdGNvaW5fY2hhcnRzL3tpZH0vZGVwdGgnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdtZXJjaGFudC9nZXRfcGF5bWVudC97VVVJRH0nLFxuICAgICAgICAgICAgICAgICd1c2VyJyxcbiAgICAgICAgICAgICAgICAndXNlci9hZGRyZXNzZXMnLFxuICAgICAgICAgICAgICAgICd1c2VyL2FkZHJlc3Nlcy97YnRjX2FkZHJlc3N9JyxcbiAgICAgICAgICAgICAgICAndXNlci9vcmRlcnMnLFxuICAgICAgICAgICAgICAgICd1c2VyL29yZGVycy97VVVJRH0nLFxuICAgICAgICAgICAgICAgICd1c2VyL3ByaWNlX2FsZXJ0cycsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ3VzZXIvb3JkZXJzJyxcbiAgICAgICAgICAgICAgICAndXNlci9hZGRyZXNzZXMnLFxuICAgICAgICAgICAgICAgICd1c2VyL3BheW1lbnRfcmVxdWVzdHMnLFxuICAgICAgICAgICAgICAgICd1c2VyL3ByaWNlX2FsZXJ0cycsXG4gICAgICAgICAgICAgICAgJ21lcmNoYW50L2NyZWF0ZV9wYXltZW50JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAnZGVsZXRlJzogW1xuICAgICAgICAgICAgICAgICd1c2VyL29yZGVycy97VVVJRH0vY2FuY2VsJyxcbiAgICAgICAgICAgICAgICAndXNlci9wcmljZV9hbGVydHMve2lkfScsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgJ21hcmtldHMnOiB7XG4gICAgICAgICdCVEMvRVVSJzogeyAnaWQnOiAnZXVyJywgJ3N5bWJvbCc6ICdCVEMvRVVSJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ0VVUicgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gYXdhaXQgdGhpcy5wcml2YXRlR2V0VXNlciAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiBiYWxhbmNlcyB9O1xuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IHRoaXMuY3VycmVuY2llcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gdGhpcy5jdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IGxvd2VyY2FzZSA9IGN1cnJlbmN5LnRvTG93ZXJDYXNlICgpO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGxldCBiYWxhbmNlID0gJ2JhbGFuY2VfJyArIGxvd2VyY2FzZTtcbiAgICAgICAgICAgIGxldCBsb2NrZWQgPSAnbG9ja2VkXycgKyBsb3dlcmNhc2U7XG4gICAgICAgICAgICBpZiAoYmFsYW5jZSBpbiBiYWxhbmNlcylcbiAgICAgICAgICAgICAgICBhY2NvdW50WydmcmVlJ10gPSBiYWxhbmNlc1tiYWxhbmNlXTtcbiAgICAgICAgICAgIGlmIChsb2NrZWQgaW4gYmFsYW5jZXMpXG4gICAgICAgICAgICAgICAgYWNjb3VudFsndXNlZCddID0gYmFsYW5jZXNbbG9ja2VkXTtcbiAgICAgICAgICAgIGFjY291bnRbJ3RvdGFsJ10gPSB0aGlzLnN1bSAoYWNjb3VudFsnZnJlZSddLCBhY2NvdW50Wyd1c2VkJ10pO1xuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IGF3YWl0IHRoaXMucHVibGljR2V0RGF0YUlkRGVwdGggKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnaWQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gb3JkZXJbJ3ByaWNlJ107XG4gICAgICAgICAgICAgICAgbGV0IGFtb3VudCA9IG9yZGVyWydhbW91bnQnXTtcbiAgICAgICAgICAgICAgICBsZXQgdGltZXN0YW1wID0gb3JkZXJbJ3RpbWVzdGFtcCddICogMTAwMDtcbiAgICAgICAgICAgICAgICByZXN1bHRbc2lkZV0ucHVzaCAoWyBwcmljZSwgYW1vdW50LCB0aW1lc3RhbXAgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0WydiaWRzJ10gPSB0aGlzLnNvcnRCeSAocmVzdWx0WydiaWRzJ10sIDAsIHRydWUpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGxldCB0aWNrZXIgPSBhd2FpdCB0aGlzLnB1YmxpY0dldERhdGFJZFRpY2tlciAoe1xuICAgICAgICAgICAgJ2lkJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aWNrZXJbJ2F0J10gKiAxMDAwO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydoaWdoJ10pLFxuICAgICAgICAgICAgJ2xvdyc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbG93J10pLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYmlkJ10pLFxuICAgICAgICAgICAgJ2Fzayc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYXNrJ10pLFxuICAgICAgICAgICAgJ3Z3YXAnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3Z3YXAnXSksXG4gICAgICAgICAgICAnb3Blbic6IHBhcnNlRmxvYXQgKHRpY2tlclsnb3BlbiddKSxcbiAgICAgICAgICAgICdjbG9zZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdmaXJzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsYXN0JzogcGFyc2VGbG9hdCAodGlja2VyWydwcmljZSddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndmFyaWF0aW9uJ10pLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndm9sdW1lJ10pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldERhdGFJZFRyYWRlcyAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdpZCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAndHlwZSc6IHRoaXMuY2FwaXRhbGl6ZSAodHlwZSkgKyAnT3JkZXInLFxuICAgICAgICAgICAgJ2N1cnJlbmN5JzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICdkaXJlY3Rpb24nOiBzaWRlLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IGFtb3VudCxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHR5cGUgPT0gJ21hcmtldCcpXG4gICAgICAgICAgICBvcmRlclsncHJpY2UnXSA9IHByaWNlO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0VXNlck9yZGVycyAodGhpcy5leHRlbmQgKG9yZGVyLCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsndXVpZCddLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0Q2FuY2VsT3JkZXIgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnb3JkZXJOdW1iZXInOiBpZCxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ10gKyAnLycgKyB0aGlzLnZlcnNpb24gKyAnLycgKyB0aGlzLmltcGxvZGVQYXJhbXMgKHBhdGgsIHBhcmFtcyk7XG4gICAgICAgIGxldCBxdWVyeSA9IHRoaXMub21pdCAocGFyYW1zLCB0aGlzLmV4dHJhY3RQYXJhbXMgKHBhdGgpKTtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChxdWVyeSkubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYm9keSA9IHRoaXMuanNvbiAocGFyYW1zKTtcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCkudG9TdHJpbmcgKCk7XG4gICAgICAgICAgICBsZXQgYXV0aCA9IG5vbmNlICsgdXJsICsgYm9keTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0FwaS1LZXknOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgICAgICAnQXBpLVNpZ25hdHVyZSc6IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKGF1dGgpLCB0aGlzLnNlY3JldCksXG4gICAgICAgICAgICAgICAgJ0FwaS1Ob25jZSc6IG5vbmNlLFxuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdlcnJvcnMnIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBwb2xvbmlleCA9IHtcblxuICAgICdpZCc6ICdwb2xvbmlleCcsXG4gICAgJ25hbWUnOiAnUG9sb25pZXgnLFxuICAgICdjb3VudHJpZXMnOiAnVVMnLFxuICAgICdyYXRlTGltaXQnOiA1MDAsIC8vIDYgY2FsbHMgcGVyIHNlY29uZFxuICAgICdoYXNGZXRjaFRpY2tlcnMnOiB0cnVlLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2ODE3LWU5NDU2MzEyLTVlZTYtMTFlNy05YjNjLWI2MjhjYTU2MjZhNS5qcGcnLFxuICAgICAgICAnYXBpJzoge1xuICAgICAgICAgICAgJ3B1YmxpYyc6ICdodHRwczovL3BvbG9uaWV4LmNvbS9wdWJsaWMnLFxuICAgICAgICAgICAgJ3ByaXZhdGUnOiAnaHR0cHM6Ly9wb2xvbmlleC5jb20vdHJhZGluZ0FwaScsXG4gICAgICAgIH0sXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly9wb2xvbmlleC5jb20nLFxuICAgICAgICAnZG9jJzogW1xuICAgICAgICAgICAgJ2h0dHBzOi8vcG9sb25pZXguY29tL3N1cHBvcnQvYXBpLycsXG4gICAgICAgICAgICAnaHR0cDovL3Bhc3RlYmluLmNvbS9kTVg3bVpFMCcsXG4gICAgICAgIF0sXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAncmV0dXJuMjRoVm9sdW1lJyxcbiAgICAgICAgICAgICAgICAncmV0dXJuQ2hhcnREYXRhJyxcbiAgICAgICAgICAgICAgICAncmV0dXJuQ3VycmVuY2llcycsXG4gICAgICAgICAgICAgICAgJ3JldHVybkxvYW5PcmRlcnMnLFxuICAgICAgICAgICAgICAgICdyZXR1cm5PcmRlckJvb2snLFxuICAgICAgICAgICAgICAgICdyZXR1cm5UaWNrZXInLFxuICAgICAgICAgICAgICAgICdyZXR1cm5UcmFkZUhpc3RvcnknLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnYnV5JyxcbiAgICAgICAgICAgICAgICAnY2FuY2VsTG9hbk9mZmVyJyxcbiAgICAgICAgICAgICAgICAnY2FuY2VsT3JkZXInLFxuICAgICAgICAgICAgICAgICdjbG9zZU1hcmdpblBvc2l0aW9uJyxcbiAgICAgICAgICAgICAgICAnY3JlYXRlTG9hbk9mZmVyJyxcbiAgICAgICAgICAgICAgICAnZ2VuZXJhdGVOZXdBZGRyZXNzJyxcbiAgICAgICAgICAgICAgICAnZ2V0TWFyZ2luUG9zaXRpb24nLFxuICAgICAgICAgICAgICAgICdtYXJnaW5CdXknLFxuICAgICAgICAgICAgICAgICdtYXJnaW5TZWxsJyxcbiAgICAgICAgICAgICAgICAnbW92ZU9yZGVyJyxcbiAgICAgICAgICAgICAgICAncmV0dXJuQWN0aXZlTG9hbnMnLFxuICAgICAgICAgICAgICAgICdyZXR1cm5BdmFpbGFibGVBY2NvdW50QmFsYW5jZXMnLFxuICAgICAgICAgICAgICAgICdyZXR1cm5CYWxhbmNlcycsXG4gICAgICAgICAgICAgICAgJ3JldHVybkNvbXBsZXRlQmFsYW5jZXMnLFxuICAgICAgICAgICAgICAgICdyZXR1cm5EZXBvc2l0QWRkcmVzc2VzJyxcbiAgICAgICAgICAgICAgICAncmV0dXJuRGVwb3NpdHNXaXRoZHJhd2FscycsXG4gICAgICAgICAgICAgICAgJ3JldHVybkZlZUluZm8nLFxuICAgICAgICAgICAgICAgICdyZXR1cm5MZW5kaW5nSGlzdG9yeScsXG4gICAgICAgICAgICAgICAgJ3JldHVybk1hcmdpbkFjY291bnRTdW1tYXJ5JyxcbiAgICAgICAgICAgICAgICAncmV0dXJuT3BlbkxvYW5PZmZlcnMnLFxuICAgICAgICAgICAgICAgICdyZXR1cm5PcGVuT3JkZXJzJyxcbiAgICAgICAgICAgICAgICAncmV0dXJuT3JkZXJUcmFkZXMnLFxuICAgICAgICAgICAgICAgICdyZXR1cm5UcmFkYWJsZUJhbGFuY2VzJyxcbiAgICAgICAgICAgICAgICAncmV0dXJuVHJhZGVIaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAnc2VsbCcsXG4gICAgICAgICAgICAgICAgJ3RvZ2dsZUF1dG9SZW5ldycsXG4gICAgICAgICAgICAgICAgJ3RyYW5zZmVyQmFsYW5jZScsXG4gICAgICAgICAgICAgICAgJ3dpdGhkcmF3JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoTWFya2V0cyAoKSB7XG4gICAgICAgIGxldCBtYXJrZXRzID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRSZXR1cm5UaWNrZXIgKCk7XG4gICAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMgKG1hcmtldHMpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwga2V5cy5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgbGV0IGlkID0ga2V5c1twXTtcbiAgICAgICAgICAgIGxldCBtYXJrZXQgPSBtYXJrZXRzW2lkXTtcbiAgICAgICAgICAgIGxldCBbIHF1b3RlLCBiYXNlIF0gPSBpZC5zcGxpdCAoJ18nKTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBiYXNlICsgJy8nICsgcXVvdGU7XG4gICAgICAgICAgICByZXN1bHQucHVzaCAoe1xuICAgICAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICAgICAgICAgICdzeW1ib2wnOiBzeW1ib2wsXG4gICAgICAgICAgICAgICAgJ2Jhc2UnOiBiYXNlLFxuICAgICAgICAgICAgICAgICdxdW90ZSc6IHF1b3RlLFxuICAgICAgICAgICAgICAgICdpbmZvJzogbWFya2V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdFJldHVybkNvbXBsZXRlQmFsYW5jZXMgKHtcbiAgICAgICAgICAgICdhY2NvdW50JzogJ2FsbCcsXG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGJhbGFuY2VzIH07XG4gICAgICAgIGxldCBjdXJyZW5jaWVzID0gT2JqZWN0LmtleXMgKGJhbGFuY2VzKTtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBjdXJyZW5jaWVzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBjdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IGJhbGFuY2UgPSBiYWxhbmNlc1tjdXJyZW5jeV07XG4gICAgICAgICAgICBsZXQgYWNjb3VudCA9IHtcbiAgICAgICAgICAgICAgICAnZnJlZSc6IHBhcnNlRmxvYXQgKGJhbGFuY2VbJ2F2YWlsYWJsZSddKSxcbiAgICAgICAgICAgICAgICAndXNlZCc6IHBhcnNlRmxvYXQgKGJhbGFuY2VbJ29uT3JkZXJzJ10pLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhY2NvdW50Wyd0b3RhbCddID0gdGhpcy5zdW0gKGFjY291bnRbJ2ZyZWUnXSwgYWNjb3VudFsndXNlZCddKTtcbiAgICAgICAgICAgIHJlc3VsdFtjdXJyZW5jeV0gPSBhY2NvdW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIHBhcnNlQmlkQXNrIChiaWRhc2spIHtcbiAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAoYmlkYXNrWzBdKTtcbiAgICAgICAgbGV0IGFtb3VudCA9IHBhcnNlRmxvYXQgKGJpZGFza1sxXSk7XG4gICAgICAgIHJldHVybiBbIHByaWNlLCBhbW91bnQgXTtcbiAgICB9LFxuXG4gICAgcGFyc2VCaWRBc2tzIChiaWRhc2tzKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiaWRhc2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCAodGhpcy5wYXJzZUJpZEFzayAoYmlkYXNrc1tpXSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFJldHVybk9yZGVyQm9vayAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdjdXJyZW5jeVBhaXInOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICByZXN1bHRbc2lkZV0gPSB0aGlzLnBhcnNlQmlkQXNrcyAob3JkZXJib29rW3NpZGVdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBwYXJzZVRpY2tlciAodGlja2VyLCBtYXJrZXQpIHtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydoaWdoMjRociddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdzI0aHInXSksXG4gICAgICAgICAgICAnYmlkJzogcGFyc2VGbG9hdCAodGlja2VyWydoaWdoZXN0QmlkJ10pLFxuICAgICAgICAgICAgJ2Fzayc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbG93ZXN0QXNrJ10pLFxuICAgICAgICAgICAgJ3Z3YXAnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnb3Blbic6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjbG9zZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdmaXJzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsYXN0JzogcGFyc2VGbG9hdCAodGlja2VyWydsYXN0J10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsncGVyY2VudENoYW5nZSddKSxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYmFzZVZvbHVtZSddKSxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsncXVvdGVWb2x1bWUnXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXJzICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHRpY2tlcnMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFJldHVyblRpY2tlciAoKTtcbiAgICAgICAgbGV0IGlkcyA9IE9iamVjdC5rZXlzICh0aWNrZXJzKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHt9O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IGlkID0gaWRzW2ldO1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IHRoaXMubWFya2V0c19ieV9pZFtpZF07XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gbWFya2V0WydzeW1ib2wnXTtcbiAgICAgICAgICAgIGxldCB0aWNrZXIgPSB0aWNrZXJzW2lkXTtcbiAgICAgICAgICAgIHJlc3VsdFtzeW1ib2xdID0gdGhpcy5wYXJzZVRpY2tlciAodGlja2VyLCBtYXJrZXQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG0gPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHRpY2tlcnMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFJldHVyblRpY2tlciAoKTtcbiAgICAgICAgbGV0IHRpY2tlciA9IHRpY2tlcnNbbVsnaWQnXV07XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIG0pO1xuICAgIH0sXG5cbiAgICBwYXJzZVRyYWRlICh0cmFkZSwgbWFya2V0ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLnBhcnNlODYwMSAodHJhZGVbJ2RhdGUnXSk7XG4gICAgICAgIGxldCBpZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IG9yZGVyID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoJ3RyYWRlSUQnIGluIHRyYWRlKVxuICAgICAgICAgICAgaWQgPSB0cmFkZVsndHJhZGVJRCddO1xuICAgICAgICBpZiAoJ29yZGVyTnVtYmVyJyBpbiB0cmFkZSlcbiAgICAgICAgICAgIG9yZGVyID0gdHJhZGVbJ29yZGVyTnVtYmVyJ107XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHRyYWRlLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdzeW1ib2wnOiBtYXJrZXRbJ3N5bWJvbCddLFxuICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgICAgICAnb3JkZXInOiBvcmRlcixcbiAgICAgICAgICAgICd0eXBlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3NpZGUnOiB0cmFkZVsndHlwZSddLFxuICAgICAgICAgICAgJ3ByaWNlJzogcGFyc2VGbG9hdCAodHJhZGVbJ3JhdGUnXSksXG4gICAgICAgICAgICAnYW1vdW50JzogcGFyc2VGbG9hdCAodHJhZGVbJ2Ftb3VudCddKSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG0gPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHRyYWRlcyA9IGF3YWl0IHRoaXMucHVibGljR2V0UmV0dXJuVHJhZGVIaXN0b3J5ICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2N1cnJlbmN5UGFpcic6IG1bJ2lkJ10sXG4gICAgICAgICAgICAnZW5kJzogdGhpcy5zZWNvbmRzICgpLCAvLyBsYXN0IDUwMDAwIHRyYWRlcyBieSBkZWZhdWx0XG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVRyYWRlcyAodHJhZGVzLCBtKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hNeVRyYWRlcyAobWFya2V0ID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgbm93ID0gdGhpcy5zZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVxdWVzdCA9IHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnY3VycmVuY3lQYWlyJzogJ2FsbCcsXG4gICAgICAgICAgICAnZW5kJzogdGhpcy5zZWNvbmRzICgpLCAvLyBsYXN0IDUwMDAwIHRyYWRlcyBieSBkZWZhdWx0XG4gICAgICAgIH0sIHBhcmFtcyk7XG4gICAgICAgIGlmIChtYXJrZXQpIHtcbiAgICAgICAgICAgIGxldCBtID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgICAgICByZXF1ZXN0WydjdXJyZW5jeVBhaXInXSA9IG1bJ2lkJ107XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHRyYWRlcyA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RSZXR1cm5UcmFkZUhpc3RvcnkgKHJlcXVlc3QpO1xuICAgICAgICBpZiAobWFya2V0KVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VUcmFkZXMgKHRyYWRlcywgbSk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogdHJhZGVzIH07XG4gICAgICAgIGxldCBpZHMgPSBPYmplY3Qua2V5cyAodHJhZGVzKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCBpZCA9IGlkc1tpXTtcbiAgICAgICAgICAgIGxldCB0cmFkZXMgPSB0cmFkZXNbaWRdO1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IHRoaXMubWFya2V0c19ieV9pZFtpZF07XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gbWFya2V0WydzeW1ib2wnXTtcbiAgICAgICAgICAgIHJlc3VsdFtzeW1ib2xdID0gdGhpcy5wYXJzZVRyYWRlcyAodHJhZGVzLCBtYXJrZXQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIHBhcnNlT3JkZXIgKG9yZGVyLCBtYXJrZXQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpZCc6IG9yZGVyWydvcmRlck51bWJlciddLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IG9yZGVyWyd0aW1lc3RhbXAnXSxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAob3JkZXJbJ3RpbWVzdGFtcCddKSxcbiAgICAgICAgICAgICdzdGF0dXMnOiBvcmRlclsnc3RhdHVzJ10sXG4gICAgICAgICAgICAnc3ltYm9sJzogbWFya2V0WydzeW1ib2wnXSxcbiAgICAgICAgICAgICd0eXBlJzogb3JkZXJbJ3R5cGUnXSxcbiAgICAgICAgICAgICdzaWRlJzogb3JkZXJbJ3NpZGUnXSxcbiAgICAgICAgICAgICdwcmljZSc6IG9yZGVyWydwcmljZSddLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IG9yZGVyWydhbW91bnQnXSxcbiAgICAgICAgICAgICd0cmFkZXMnOiB0aGlzLnBhcnNlVHJhZGVzIChvcmRlclsncmVzdWx0aW5nVHJhZGVzJ10sIG1hcmtldCksXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoTXlPcGVuT3JkZXJzIChtYXJrZXQgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBtID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAobWFya2V0KVxuICAgICAgICAgICAgbSA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgcGFpciA9IG0gPyBtWydpZCddIDogJ2FsbCc7XG4gICAgICAgIGxldCBvcmRlcnMgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0UmV0dXJuT3Blbk9yZGVycyAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdjdXJyZW5jeVBhaXInOiBwYWlyLFxuICAgICAgICB9KSk7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlT3JkZXJzIChvcmRlcnMsIG0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBpZiAodHlwZSA9PSAnbWFya2V0JylcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyBhbGxvd3MgbGltaXQgb3JkZXJzIG9ubHknKTtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG1ldGhvZCA9ICdwcml2YXRlUG9zdCcgKyB0aGlzLmNhcGl0YWxpemUgKHNpZGUpO1xuICAgICAgICBsZXQgbSA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzW21ldGhvZF0gKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnY3VycmVuY3lQYWlyJzogbVsnaWQnXSxcbiAgICAgICAgICAgICdyYXRlJzogcHJpY2UsXG4gICAgICAgICAgICAnYW1vdW50JzogYW1vdW50LFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgb3JkZXIgPSB0aGlzLnBhcnNlT3JkZXIgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ3N0YXR1cyc6ICdvcGVuJyxcbiAgICAgICAgICAgICd0eXBlJzogdHlwZSxcbiAgICAgICAgICAgICdzaWRlJzogc2lkZSxcbiAgICAgICAgICAgICdwcmljZSc6IHByaWNlLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IGFtb3VudCxcbiAgICAgICAgfSwgcmVzcG9uc2UpLCBtKTtcbiAgICAgICAgbGV0IGlkID0gb3JkZXJbJ2lkJ107XG4gICAgICAgIHRoaXMub3JkZXJzW2lkXSA9IG9yZGVyO1xuICAgICAgICByZXR1cm4gdGhpcy5leHRlbmQgKHsgJ2luZm8nOiByZXNwb25zZSB9LCBvcmRlcik7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXIgKGlkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBvcmRlcnMgPSBhd2FpdCB0aGlzLmZldGNoTXlPcGVuT3JkZXJzICgpO1xuICAgICAgICBsZXQgaW5kZXggPSB0aGlzLmluZGV4QnkgKG9yZGVycywgJ2lkJyk7XG4gICAgICAgIGlmIChpZCBpbiBpbmRleCkge1xuICAgICAgICAgICAgdGhpcy5vcmRlcnNbaWRdID0gaW5kZXhbaWRdO1xuICAgICAgICAgICAgcmV0dXJuIGluZGV4W2lkXTtcbiAgICAgICAgfSBlbHNlIGlmIChpZCBpbiB0aGlzLm9yZGVycykge1xuICAgICAgICAgICAgdGhpcy5vcmRlcnNbaWRdWydzdGF0dXMnXSA9ICdjbG9zZWQnO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMub3JkZXJzW2lkXTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgb3JkZXIgJyArIGlkICsgJyBub3QgZm91bmQnKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlclRyYWRlcyAoaWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCB0cmFkZXMgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0UmV0dXJuT3JkZXJUcmFkZXMgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnb3JkZXJOdW1iZXInOiBpZCxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlVHJhZGVzICh0cmFkZXMpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0Q2FuY2VsT3JkZXIgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnb3JkZXJOdW1iZXInOiBpZCxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ11bYXBpXTtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5leHRlbmQgKHsgJ2NvbW1hbmQnOiBwYXRoIH0sIHBhcmFtcyk7XG4gICAgICAgIGlmIChhcGkgPT0gJ3B1YmxpYycpIHtcbiAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAocXVlcnkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcXVlcnlbJ25vbmNlJ10gPSB0aGlzLm5vbmNlICgpO1xuICAgICAgICAgICAgYm9keSA9IHRoaXMudXJsZW5jb2RlIChxdWVyeSk7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICAgICAgICAnS2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ1NpZ24nOiB0aGlzLmhtYWMgKHRoaXMuZW5jb2RlIChib2R5KSwgdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSwgJ3NoYTUxMicpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgICAgIGlmICgnZXJyb3InIGluIHJlc3BvbnNlKSB7XG4gICAgICAgICAgICBsZXQgZXJyb3IgPSB0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSk7XG4gICAgICAgICAgICBsZXQgZmFpbGVkID0gcmVzcG9uc2VbJ2Vycm9yJ10uaW5kZXhPZiAoJ05vdCBlbm91Z2gnKSA+PSAwO1xuICAgICAgICAgICAgaWYgKGZhaWxlZClcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW5zdWZmaWNpZW50RnVuZHMgKGVycm9yKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yIChlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIHF1YWRyaWdhY3ggPSB7XG5cbiAgICAnaWQnOiAncXVhZHJpZ2FjeCcsXG4gICAgJ25hbWUnOiAnUXVhZHJpZ2FDWCcsXG4gICAgJ2NvdW50cmllcyc6ICdDQScsXG4gICAgJ3JhdGVMaW1pdCc6IDEwMDAsXG4gICAgJ3ZlcnNpb24nOiAndjInLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2ODI1LTk4YTZkMGRlLTVlZTctMTFlNy05ZmE0LTM4ZTExYTJjNmY1Mi5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vYXBpLnF1YWRyaWdhY3guY29tJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy5xdWFkcmlnYWN4LmNvbScsXG4gICAgICAgICdkb2MnOiAnaHR0cHM6Ly93d3cucXVhZHJpZ2FjeC5jb20vYXBpX2luZm8nLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ29yZGVyX2Jvb2snLFxuICAgICAgICAgICAgICAgICd0aWNrZXInLFxuICAgICAgICAgICAgICAgICd0cmFuc2FjdGlvbnMnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnYmFsYW5jZScsXG4gICAgICAgICAgICAgICAgJ2JpdGNvaW5fZGVwb3NpdF9hZGRyZXNzJyxcbiAgICAgICAgICAgICAgICAnYml0Y29pbl93aXRoZHJhd2FsJyxcbiAgICAgICAgICAgICAgICAnYnV5JyxcbiAgICAgICAgICAgICAgICAnY2FuY2VsX29yZGVyJyxcbiAgICAgICAgICAgICAgICAnZXRoZXJfZGVwb3NpdF9hZGRyZXNzJyxcbiAgICAgICAgICAgICAgICAnZXRoZXJfd2l0aGRyYXdhbCcsXG4gICAgICAgICAgICAgICAgJ2xvb2t1cF9vcmRlcicsXG4gICAgICAgICAgICAgICAgJ29wZW5fb3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnc2VsbCcsXG4gICAgICAgICAgICAgICAgJ3VzZXJfdHJhbnNhY3Rpb25zJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9DQUQnOiB7ICdpZCc6ICdidGNfY2FkJywgJ3N5bWJvbCc6ICdCVEMvQ0FEJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ0NBRCcgfSxcbiAgICAgICAgJ0JUQy9VU0QnOiB7ICdpZCc6ICdidGNfdXNkJywgJ3N5bWJvbCc6ICdCVEMvVVNEJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ1VTRCcgfSxcbiAgICAgICAgJ0VUSC9CVEMnOiB7ICdpZCc6ICdldGhfYnRjJywgJ3N5bWJvbCc6ICdFVEgvQlRDJywgJ2Jhc2UnOiAnRVRIJywgJ3F1b3RlJzogJ0JUQycgfSxcbiAgICAgICAgJ0VUSC9DQUQnOiB7ICdpZCc6ICdldGhfY2FkJywgJ3N5bWJvbCc6ICdFVEgvQ0FEJywgJ2Jhc2UnOiAnRVRIJywgJ3F1b3RlJzogJ0NBRCcgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdEJhbGFuY2UgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogYmFsYW5jZXMgfTtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCB0aGlzLmN1cnJlbmNpZXMubGVuZ3RoOyBjKyspIHtcbiAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IHRoaXMuY3VycmVuY2llc1tjXTtcbiAgICAgICAgICAgIGxldCBsb3dlcmNhc2UgPSBjdXJyZW5jeS50b0xvd2VyQ2FzZSAoKTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogcGFyc2VGbG9hdCAoYmFsYW5jZXNbbG93ZXJjYXNlICsgJ19hdmFpbGFibGUnXSksXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiBwYXJzZUZsb2F0IChiYWxhbmNlc1tsb3dlcmNhc2UgKyAnX3Jlc2VydmVkJ10pLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHBhcnNlRmxvYXQgKGJhbGFuY2VzW2xvd2VyY2FzZSArICdfYmFsYW5jZSddKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRPcmRlckJvb2sgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnYm9vayc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gcGFyc2VJbnQgKG9yZGVyYm9va1sndGltZXN0YW1wJ10pICogMTAwMDtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdiaWRzJzogW10sXG4gICAgICAgICAgICAnYXNrcyc6IFtdLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHNpZGVzID0gWyAnYmlkcycsICdhc2tzJyBdO1xuICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IHNpZGVzLmxlbmd0aDsgcysrKSB7XG4gICAgICAgICAgICBsZXQgc2lkZSA9IHNpZGVzW3NdO1xuICAgICAgICAgICAgbGV0IG9yZGVycyA9IG9yZGVyYm9va1tzaWRlXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9yZGVyID0gb3JkZXJzW2ldO1xuICAgICAgICAgICAgICAgIGxldCBwcmljZSA9IHBhcnNlRmxvYXQgKG9yZGVyWzBdKTtcbiAgICAgICAgICAgICAgICBsZXQgYW1vdW50ID0gcGFyc2VGbG9hdCAob3JkZXJbMV0pO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtzaWRlXS5wdXNoIChbIHByaWNlLCBhbW91bnQgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBsZXQgdGlja2VyID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRUaWNrZXIgKHtcbiAgICAgICAgICAgICdib29rJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSBwYXJzZUludCAodGlja2VyWyd0aW1lc3RhbXAnXSkgKiAxMDAwO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydoaWdoJ10pLFxuICAgICAgICAgICAgJ2xvdyc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbG93J10pLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYmlkJ10pLFxuICAgICAgICAgICAgJ2Fzayc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYXNrJ10pLFxuICAgICAgICAgICAgJ3Z3YXAnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3Z3YXAnXSksXG4gICAgICAgICAgICAnb3Blbic6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjbG9zZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdmaXJzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsYXN0JzogcGFyc2VGbG9hdCAodGlja2VyWydsYXN0J10pLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsndm9sdW1lJ10pLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YmxpY0dldFRyYW5zYWN0aW9ucyAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdib29rJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGxldCBtZXRob2QgPSAncHJpdmF0ZVBvc3QnICsgdGhpcy5jYXBpdGFsaXplIChzaWRlKTtcbiAgICAgICAgbGV0IG9yZGVyID0ge1xuICAgICAgICAgICAgJ2Ftb3VudCc6IGFtb3VudCxcbiAgICAgICAgICAgICdib29rJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHR5cGUgPT0gJ2xpbWl0JylcbiAgICAgICAgICAgIG9yZGVyWydwcmljZSddID0gcHJpY2U7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXNbbWV0aG9kXSAodGhpcy5leHRlbmQgKG9yZGVyLCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnaWQnXS50b1N0cmluZyAoKSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlUG9zdENhbmNlbE9yZGVyICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgJy8nICsgdGhpcy52ZXJzaW9uICsgJy8nICsgcGF0aDtcbiAgICAgICAgaWYgKGFwaSA9PSAncHVibGljJykge1xuICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChwYXJhbXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnVpZClcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXV0aGVudGljYXRpb25FcnJvciAodGhpcy5pZCArICcgcmVxdWlyZXMgYCcgKyB0aGlzLmlkICsgJy51aWRgIHByb3BlcnR5IGZvciBhdXRoZW50aWNhdGlvbicpO1xuICAgICAgICAgICAgbGV0IG5vbmNlID0gdGhpcy5ub25jZSAoKTtcbiAgICAgICAgICAgIGxldCByZXF1ZXN0ID0gWyBub25jZS50b1N0cmluZyAoKSwgdGhpcy51aWQsIHRoaXMuYXBpS2V5IF0uam9pbiAoJycpO1xuICAgICAgICAgICAgbGV0IHNpZ25hdHVyZSA9IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKHJlcXVlc3QpLCB0aGlzLmVuY29kZSAodGhpcy5zZWNyZXQpKTtcbiAgICAgICAgICAgIGxldCBxdWVyeSA9IHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAgICAgJ2tleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgICAgICdub25jZSc6IG5vbmNlLFxuICAgICAgICAgICAgICAgICdzaWduYXR1cmUnOiBzaWduYXR1cmUsXG4gICAgICAgICAgICB9LCBwYXJhbXMpO1xuICAgICAgICAgICAgYm9keSA9IHRoaXMuanNvbiAocXVlcnkpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICdDb250ZW50LUxlbmd0aCc6IGJvZHkubGVuZ3RoLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoICh1cmwsIG1ldGhvZCwgaGVhZGVycywgYm9keSk7XG4gICAgICAgIGlmICgnZXJyb3InIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBxdW9pbmUgPSB7XG5cbiAgICAnaWQnOiAncXVvaW5lJyxcbiAgICAnbmFtZSc6ICdRVU9JTkUnLFxuICAgICdjb3VudHJpZXMnOiBbICdKUCcsICdTRycsICdWTicgXSxcbiAgICAndmVyc2lvbic6ICcyJyxcbiAgICAncmF0ZUxpbWl0JzogMTAwMCxcbiAgICAnaGFzRmV0Y2hUaWNrZXJzJzogdHJ1ZSxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yNzc2Njg0NC05NjE1YTRlOC01ZWU4LTExZTctODgxNC1mY2QwMDRkYjhjZGQuanBnJyxcbiAgICAgICAgJ2FwaSc6ICdodHRwczovL2FwaS5xdW9pbmUuY29tJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy5xdW9pbmUuY29tJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL2RldmVsb3BlcnMucXVvaW5lLmNvbScsXG4gICAgfSxcbiAgICAnYXBpJzoge1xuICAgICAgICAncHVibGljJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAncHJvZHVjdHMnLFxuICAgICAgICAgICAgICAgICdwcm9kdWN0cy97aWR9JyxcbiAgICAgICAgICAgICAgICAncHJvZHVjdHMve2lkfS9wcmljZV9sZXZlbHMnLFxuICAgICAgICAgICAgICAgICdleGVjdXRpb25zJyxcbiAgICAgICAgICAgICAgICAnaXJfbGFkZGVycy97Y3VycmVuY3l9JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnYWNjb3VudHMvYmFsYW5jZScsXG4gICAgICAgICAgICAgICAgJ2NyeXB0b19hY2NvdW50cycsXG4gICAgICAgICAgICAgICAgJ2V4ZWN1dGlvbnMvbWUnLFxuICAgICAgICAgICAgICAgICdmaWF0X2FjY291bnRzJyxcbiAgICAgICAgICAgICAgICAnbG9hbl9iaWRzJyxcbiAgICAgICAgICAgICAgICAnbG9hbnMnLFxuICAgICAgICAgICAgICAgICdvcmRlcnMnLFxuICAgICAgICAgICAgICAgICdvcmRlcnMve2lkfScsXG4gICAgICAgICAgICAgICAgJ29yZGVycy97aWR9L3RyYWRlcycsXG4gICAgICAgICAgICAgICAgJ3RyYWRlcycsXG4gICAgICAgICAgICAgICAgJ3RyYWRlcy97aWR9L2xvYW5zJyxcbiAgICAgICAgICAgICAgICAndHJhZGluZ19hY2NvdW50cycsXG4gICAgICAgICAgICAgICAgJ3RyYWRpbmdfYWNjb3VudHMve2lkfScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2ZpYXRfYWNjb3VudHMnLFxuICAgICAgICAgICAgICAgICdsb2FuX2JpZHMnLFxuICAgICAgICAgICAgICAgICdvcmRlcnMnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICdwdXQnOiBbXG4gICAgICAgICAgICAgICAgJ2xvYW5fYmlkcy97aWR9L2Nsb3NlJyxcbiAgICAgICAgICAgICAgICAnbG9hbnMve2lkfScsXG4gICAgICAgICAgICAgICAgJ29yZGVycy97aWR9JyxcbiAgICAgICAgICAgICAgICAnb3JkZXJzL3tpZH0vY2FuY2VsJyxcbiAgICAgICAgICAgICAgICAndHJhZGVzL3tpZH0nLFxuICAgICAgICAgICAgICAgICd0cmFkZXMve2lkfS9jbG9zZScsXG4gICAgICAgICAgICAgICAgJ3RyYWRlcy9jbG9zZV9hbGwnLFxuICAgICAgICAgICAgICAgICd0cmFkaW5nX2FjY291bnRzL3tpZH0nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hNYXJrZXRzICgpIHtcbiAgICAgICAgbGV0IG1hcmtldHMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFByb2R1Y3RzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgbWFya2V0cy5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IG1hcmtldHNbcF07XG4gICAgICAgICAgICBsZXQgaWQgPSBtYXJrZXRbJ2lkJ107XG4gICAgICAgICAgICBsZXQgYmFzZSA9IG1hcmtldFsnYmFzZV9jdXJyZW5jeSddO1xuICAgICAgICAgICAgbGV0IHF1b3RlID0gbWFya2V0WydxdW90ZWRfY3VycmVuY3knXTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBiYXNlICsgJy8nICsgcXVvdGU7XG4gICAgICAgICAgICByZXN1bHQucHVzaCAoe1xuICAgICAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICAgICAgICAgICdzeW1ib2wnOiBzeW1ib2wsXG4gICAgICAgICAgICAgICAgJ2Jhc2UnOiBiYXNlLFxuICAgICAgICAgICAgICAgICdxdW90ZSc6IHF1b3RlLFxuICAgICAgICAgICAgICAgICdpbmZvJzogbWFya2V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gYXdhaXQgdGhpcy5wcml2YXRlR2V0QWNjb3VudHNCYWxhbmNlICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGJhbGFuY2VzIH07XG4gICAgICAgIGZvciAobGV0IGIgPSAwOyBiIDwgYmFsYW5jZXMubGVuZ3RoOyBiKyspIHtcbiAgICAgICAgICAgIGxldCBiYWxhbmNlID0gYmFsYW5jZXNbYl07XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBiYWxhbmNlWydjdXJyZW5jeSddO1xuICAgICAgICAgICAgbGV0IHRvdGFsID0gcGFyc2VGbG9hdCAoYmFsYW5jZVsnYmFsYW5jZSddKTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogdG90YWwsXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogdG90YWwsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IGF3YWl0IHRoaXMucHVibGljR2V0UHJvZHVjdHNJZFByaWNlTGV2ZWxzICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2lkJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdiaWRzJzogW10sXG4gICAgICAgICAgICAnYXNrcyc6IFtdLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHNpZGVzID0geyAnYmlkcyc6ICdidXlfcHJpY2VfbGV2ZWxzJywgJ2Fza3MnOiAnc2VsbF9wcmljZV9sZXZlbHMnIH07XG4gICAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMgKHNpZGVzKTtcbiAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBrZXlzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICBsZXQga2V5ID0ga2V5c1trXTtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNba2V5XTtcbiAgICAgICAgICAgIGxldCBvcmRlcnMgPSBvcmRlcmJvb2tbc2lkZV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBvcmRlciA9IG9yZGVyc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgcHJpY2UgPSBwYXJzZUZsb2F0IChvcmRlclswXSk7XG4gICAgICAgICAgICAgICAgbGV0IGFtb3VudCA9IHBhcnNlRmxvYXQgKG9yZGVyWzFdKTtcbiAgICAgICAgICAgICAgICByZXN1bHRba2V5XS5wdXNoIChbIHByaWNlLCBhbW91bnQgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgcGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KSB7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgbGV0IGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmICgnbGFzdF90cmFkZWRfcHJpY2UnIGluIHRpY2tlcikge1xuICAgICAgICAgICAgaWYgKHRpY2tlclsnbGFzdF90cmFkZWRfcHJpY2UnXSkge1xuICAgICAgICAgICAgICAgIGxldCBsZW5ndGggPSB0aWNrZXJbJ2xhc3RfdHJhZGVkX3ByaWNlJ10ubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGlmIChsZW5ndGggPiAwKVxuICAgICAgICAgICAgICAgICAgICBsYXN0ID0gcGFyc2VGbG9hdCAodGlja2VyWydsYXN0X3RyYWRlZF9wcmljZSddKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydoaWdoX21hcmtldF9hc2snXSksXG4gICAgICAgICAgICAnbG93JzogcGFyc2VGbG9hdCAodGlja2VyWydsb3dfbWFya2V0X2JpZCddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ21hcmtldF9iaWQnXSksXG4gICAgICAgICAgICAnYXNrJzogcGFyc2VGbG9hdCAodGlja2VyWydtYXJrZXRfYXNrJ10pLFxuICAgICAgICAgICAgJ3Z3YXAnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnb3Blbic6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjbG9zZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdmaXJzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsYXN0JzogbGFzdCxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbHVtZV8yNGgnXSksXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXJzICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHRpY2tlcnMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFByb2R1Y3RzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge307XG4gICAgICAgIGZvciAobGV0IHQgPSAwOyB0IDwgdGlja2Vycy5sZW5ndGg7IHQrKykge1xuICAgICAgICAgICAgbGV0IHRpY2tlciA9IHRpY2tlcnNbdF07XG4gICAgICAgICAgICBsZXQgYmFzZSA9IHRpY2tlclsnYmFzZV9jdXJyZW5jeSddO1xuICAgICAgICAgICAgbGV0IHF1b3RlID0gdGlja2VyWydxdW90ZWRfY3VycmVuY3knXTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBiYXNlICsgJy8nICsgcXVvdGU7XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gdGhpcy5tYXJrZXRzW3N5bWJvbF07XG4gICAgICAgICAgICByZXN1bHRbc3ltYm9sXSA9IHRoaXMucGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCB0aWNrZXIgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFByb2R1Y3RzSWQgKHtcbiAgICAgICAgICAgICdpZCc6IHBbJ2lkJ10sXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVRpY2tlciAodGlja2VyLCBwKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0RXhlY3V0aW9ucyAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdwcm9kdWN0X2lkJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdvcmRlcl90eXBlJzogdHlwZSxcbiAgICAgICAgICAgICdwcm9kdWN0X2lkJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgICAgICdzaWRlJzogc2lkZSxcbiAgICAgICAgICAgICdxdWFudGl0eSc6IGFtb3VudCxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHR5cGUgPT0gJ2xpbWl0JylcbiAgICAgICAgICAgIG9yZGVyWydwcmljZSddID0gcHJpY2U7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RPcmRlcnMgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnb3JkZXInOiBvcmRlcixcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ2lkJzogcmVzcG9uc2VbJ2lkJ10udG9TdHJpbmcgKCksXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJpdmF0ZVB1dE9yZGVyc0lkQ2FuY2VsICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSAnLycgKyB0aGlzLmltcGxvZGVQYXJhbXMgKHBhdGgsIHBhcmFtcyk7XG4gICAgICAgIGxldCBxdWVyeSA9IHRoaXMub21pdCAocGFyYW1zLCB0aGlzLmV4dHJhY3RQYXJhbXMgKHBhdGgpKTtcbiAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICdYLVF1b2luZS1BUEktVmVyc2lvbic6IHRoaXMudmVyc2lvbixcbiAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgIH07XG4gICAgICAgIGlmIChhcGkgPT0gJ3B1YmxpYycpIHtcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyAocXVlcnkpLmxlbmd0aClcbiAgICAgICAgICAgICAgICB1cmwgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHF1ZXJ5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCk7XG4gICAgICAgICAgICBsZXQgcmVxdWVzdCA9IHtcbiAgICAgICAgICAgICAgICAncGF0aCc6IHVybCxcbiAgICAgICAgICAgICAgICAnbm9uY2UnOiBub25jZSxcbiAgICAgICAgICAgICAgICAndG9rZW5faWQnOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgICAgICAnaWF0JzogTWF0aC5mbG9vciAobm9uY2UgLyAxMDAwKSwgLy8gaXNzdWVkIGF0XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChxdWVyeSkubGVuZ3RoKVxuICAgICAgICAgICAgICAgIGJvZHkgPSB0aGlzLmpzb24gKHF1ZXJ5KTtcbiAgICAgICAgICAgIGhlYWRlcnNbJ1gtUXVvaW5lLUF1dGgnXSA9IHRoaXMuand0IChyZXF1ZXN0LCB0aGlzLnNlY3JldCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCAodGhpcy51cmxzWydhcGknXSArIHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdtZXNzYWdlJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgc291dGh4Y2hhbmdlID0ge1xuXG4gICAgJ2lkJzogJ3NvdXRoeGNoYW5nZScsXG4gICAgJ25hbWUnOiAnU291dGhYY2hhbmdlJyxcbiAgICAnY291bnRyaWVzJzogJ0FSJywgLy8gQXJnZW50aW5hXG4gICAgJ3JhdGVMaW1pdCc6IDEwMDAsXG4gICAgJ2hhc0ZldGNoVGlja2Vycyc6IHRydWUsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc4Mzg5MTItNGY5NGVjOGEtNjBmNi0xMWU3LTllNWQtYmJmOWJkNTBhNTU5LmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly93d3cuc291dGh4Y2hhbmdlLmNvbS9hcGknLFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vd3d3LnNvdXRoeGNoYW5nZS5jb20nLFxuICAgICAgICAnZG9jJzogJ2h0dHBzOi8vd3d3LnNvdXRoeGNoYW5nZS5jb20vSG9tZS9BcGknLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ21hcmtldHMnLFxuICAgICAgICAgICAgICAgICdwcmljZS97c3ltYm9sfScsXG4gICAgICAgICAgICAgICAgJ3ByaWNlcycsXG4gICAgICAgICAgICAgICAgJ2Jvb2sve3N5bWJvbH0nLFxuICAgICAgICAgICAgICAgICd0cmFkZXMve3N5bWJvbH0nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnY2FuY2VsTWFya2V0T3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnY2FuY2VsT3JkZXInLFxuICAgICAgICAgICAgICAgICdnZW5lcmF0ZW5ld2FkZHJlc3MnLFxuICAgICAgICAgICAgICAgICdsaXN0T3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnbGlzdEJhbGFuY2VzJyxcbiAgICAgICAgICAgICAgICAncGxhY2VPcmRlcicsXG4gICAgICAgICAgICAgICAgJ3dpdGhkcmF3JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoTWFya2V0cyAoKSB7XG4gICAgICAgIGxldCBtYXJrZXRzID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgbWFya2V0cy5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IG1hcmtldHNbcF07XG4gICAgICAgICAgICBsZXQgYmFzZSA9IG1hcmtldFswXTtcbiAgICAgICAgICAgIGxldCBxdW90ZSA9IG1hcmtldFsxXTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBiYXNlICsgJy8nICsgcXVvdGU7XG4gICAgICAgICAgICBsZXQgaWQgPSBzeW1ib2w7XG4gICAgICAgICAgICByZXN1bHQucHVzaCAoe1xuICAgICAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICAgICAgICAgICdzeW1ib2wnOiBzeW1ib2wsXG4gICAgICAgICAgICAgICAgJ2Jhc2UnOiBiYXNlLFxuICAgICAgICAgICAgICAgICdxdW90ZSc6IHF1b3RlLFxuICAgICAgICAgICAgICAgICdpbmZvJzogbWFya2V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdExpc3RCYWxhbmNlcyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiBiYWxhbmNlcyB9O1xuICAgICAgICBmb3IgKGxldCBiID0gMDsgYiA8IGJhbGFuY2VzLmxlbmd0aDsgYisrKSB7XG4gICAgICAgICAgICBsZXQgYmFsYW5jZSA9IGJhbGFuY2VzW2JdO1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gYmFsYW5jZVsnQ3VycmVuY3knXTtcbiAgICAgICAgICAgIGxldCB1cHBlcmNhc2UgPSBjdXJyZW5jeS51cHBlcmNhc2U7XG4gICAgICAgICAgICBsZXQgZnJlZSA9IHBhcnNlRmxvYXQgKGJhbGFuY2VbJ0F2YWlsYWJsZSddKTtcbiAgICAgICAgICAgIGxldCB1c2VkID0gcGFyc2VGbG9hdCAoYmFsYW5jZVsnVW5jb25maXJtZWQnXSk7XG4gICAgICAgICAgICBsZXQgdG90YWwgPSB0aGlzLnN1bSAoZnJlZSwgdXNlZCk7XG4gICAgICAgICAgICBsZXQgYWNjb3VudCA9IHtcbiAgICAgICAgICAgICAgICAnZnJlZSc6IGZyZWUsXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1c2VkLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHRvdGFsLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlc3VsdFtjdXJyZW5jeV0gPSBhY2NvdW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoT3JkZXJCb29rIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSBhd2FpdCB0aGlzLnB1YmxpY0dldEJvb2tTeW1ib2wgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnc3ltYm9sJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgICdiaWRzJzogW10sXG4gICAgICAgICAgICAnYXNrcyc6IFtdLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHNpZGVzID0geyAnYmlkcyc6ICdCdXlPcmRlcnMnLCAnYXNrcyc6ICdTZWxsT3JkZXJzJyB9O1xuICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzIChzaWRlcyk7XG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwga2V5cy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgbGV0IGtleSA9IGtleXNba107XG4gICAgICAgICAgICBsZXQgc2lkZSA9IHNpZGVzW2tleV07XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAob3JkZXJbJ1ByaWNlJ10pO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBwYXJzZUZsb2F0IChvcmRlclsnQW1vdW50J10pO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldLnB1c2ggKFsgcHJpY2UsIGFtb3VudCBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBwYXJzZVRpY2tlciAodGlja2VyLCBtYXJrZXQpIHtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgYmlkID0gdW5kZWZpbmVkO1xuICAgICAgICBsZXQgYXNrID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoJ0JpZCcgaW4gdGlja2VyKVxuICAgICAgICAgICAgaWYgKHRpY2tlclsnQmlkJ10pXG4gICAgICAgICAgICAgICAgYmlkID0gcGFyc2VGbG9hdCAodGlja2VyWydCaWQnXSk7XG4gICAgICAgIGlmICgnQXNrJyBpbiB0aWNrZXIpXG4gICAgICAgICAgICBpZiAodGlja2VyWydBc2snXSlcbiAgICAgICAgICAgICAgICBhc2sgPSBwYXJzZUZsb2F0ICh0aWNrZXJbJ0FzayddKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsb3cnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmlkJzogYmlkLFxuICAgICAgICAgICAgJ2Fzayc6IGFzayxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnTGFzdCddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ1ZhcmlhdGlvbjI0SHInXSksXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ1ZvbHVtZTI0SHInXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXJzICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRQcmljZXMgKCk7XG4gICAgICAgIGxldCB0aWNrZXJzID0gdGhpcy5pbmRleEJ5IChyZXNwb25zZSwgJ01hcmtldCcpO1xuICAgICAgICBsZXQgaWRzID0gT2JqZWN0LmtleXMgKHRpY2tlcnMpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge307XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgaWQgPSBpZHNbaV07XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gdGhpcy5tYXJrZXRzX2J5X2lkW2lkXTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBtYXJrZXRbJ3N5bWJvbCddO1xuICAgICAgICAgICAgbGV0IHRpY2tlciA9IHRpY2tlcnNbaWRdO1xuICAgICAgICAgICAgcmVzdWx0W3N5bWJvbF0gPSB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIG1hcmtldCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgdGlja2VyID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRQcmljZVN5bWJvbCAoe1xuICAgICAgICAgICAgJ3N5bWJvbCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVRpY2tlciAodGlja2VyLCBwKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0VHJhZGVzU3ltYm9sICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ3N5bWJvbCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgb3JkZXIgPSB7XG4gICAgICAgICAgICAnbGlzdGluZ0N1cnJlbmN5JzogcFsnYmFzZSddLFxuICAgICAgICAgICAgJ3JlZmVyZW5jZUN1cnJlbmN5JzogcFsncXVvdGUnXSxcbiAgICAgICAgICAgICd0eXBlJzogc2lkZSxcbiAgICAgICAgICAgICdhbW91bnQnOiBhbW91bnQsXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlID09ICdsaW1pdCcpXG4gICAgICAgICAgICBvcmRlclsnbGltaXRQcmljZSddID0gcHJpY2U7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RQbGFjZU9yZGVyICh0aGlzLmV4dGVuZCAob3JkZXIsIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXNwb25zZSxcbiAgICAgICAgICAgICdpZCc6IHJlc3BvbnNlLnRvU3RyaW5nICgpLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0Q2FuY2VsT3JkZXIgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnb3JkZXJDb2RlJzogaWQsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAncHVibGljJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgJy8nICsgdGhpcy5pbXBsb2RlUGFyYW1zIChwYXRoLCBwYXJhbXMpO1xuICAgICAgICBsZXQgcXVlcnkgPSB0aGlzLm9taXQgKHBhcmFtcywgdGhpcy5leHRyYWN0UGFyYW1zIChwYXRoKSk7XG4gICAgICAgIGlmIChhcGkgPT0gJ3ByaXZhdGUnKSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpO1xuICAgICAgICAgICAgcXVlcnkgPSB0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgICAgICdrZXknOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgICAgICAnbm9uY2UnOiBub25jZSxcbiAgICAgICAgICAgIH0sIHF1ZXJ5KTtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLmpzb24gKHF1ZXJ5KTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAnSGFzaCc6IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKGJvZHkpLCB0aGlzLmVuY29kZSAodGhpcy5zZWNyZXQpLCAnc2hhNTEyJyksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgLy8gaWYgKCFyZXNwb25zZSlcbiAgICAgICAgLy8gICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSxcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgc3VyYml0Y29pbiA9IGV4dGVuZCAoYmxpbmt0cmFkZSwge1xuICAgICdpZCc6ICdzdXJiaXRjb2luJyxcbiAgICAnbmFtZSc6ICdTdXJCaXRjb2luJyxcbiAgICAnY291bnRyaWVzJzogJ1ZFJyxcbiAgICAndXJscyc6IHtcbiAgICAgICAgJ2xvZ28nOiAnaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTI5NDQ1NC8yNzk5MTUxMS1mMGE1MDE5NC02NDgxLTExZTctOTliNS04ZjAyOTMyNDI0Y2MuanBnJyxcbiAgICAgICAgJ2FwaSc6IHtcbiAgICAgICAgICAgICdwdWJsaWMnOiAnaHR0cHM6Ly9hcGkuYmxpbmt0cmFkZS5jb20vYXBpJyxcbiAgICAgICAgICAgICdwcml2YXRlJzogJ2h0dHBzOi8vYXBpLmJsaW5rdHJhZGUuY29tL3RhcGknLFxuICAgICAgICB9LFxuICAgICAgICAnd3d3JzogJ2h0dHBzOi8vc3VyYml0Y29pbi5jb20nLFxuICAgICAgICAnZG9jJzogJ2h0dHBzOi8vYmxpbmt0cmFkZS5jb20vZG9jcycsXG4gICAgfSxcbiAgICAnY29tbWVudCc6ICdCbGlua3RyYWRlIEFQSScsXG4gICAgJ21hcmtldHMnOiB7XG4gICAgICAgICdCVEMvVkVGJzogeyAnaWQnOiAnQlRDVkVGJywgJ3N5bWJvbCc6ICdCVEMvVkVGJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ1ZFRicsICdicm9rZXJJZCc6IDEsICdicm9rZXInOiAnU3VyQml0Y29pbicgfSxcbiAgICB9LFxufSlcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgdGhlcm9jayA9IHtcblxuICAgICdpZCc6ICd0aGVyb2NrJyxcbiAgICAnbmFtZSc6ICdUaGVSb2NrVHJhZGluZycsXG4gICAgJ2NvdW50cmllcyc6ICdNVCcsXG4gICAgJ3JhdGVMaW1pdCc6IDEwMDAsXG4gICAgJ3ZlcnNpb24nOiAndjEnLFxuICAgICdoYXNGZXRjaFRpY2tlcnMnOiB0cnVlLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2ODY5LTc1MDU3ZmEyLTVlZTktMTFlNy05YTZmLTEzZTY0MWZhNDcwNy5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vYXBpLnRoZXJvY2t0cmFkaW5nLmNvbScsXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly90aGVyb2NrdHJhZGluZy5jb20nLFxuICAgICAgICAnZG9jJzogW1xuICAgICAgICAgICAgJ2h0dHBzOi8vYXBpLnRoZXJvY2t0cmFkaW5nLmNvbS9kb2MvdjEvaW5kZXguaHRtbCcsXG4gICAgICAgICAgICAnaHR0cHM6Ly9hcGkudGhlcm9ja3RyYWRpbmcuY29tL2RvYy8nLFxuICAgICAgICBdLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ2Z1bmRzL3tpZH0vb3JkZXJib29rJyxcbiAgICAgICAgICAgICAgICAnZnVuZHMve2lkfS90aWNrZXInLFxuICAgICAgICAgICAgICAgICdmdW5kcy97aWR9L3RyYWRlcycsXG4gICAgICAgICAgICAgICAgJ2Z1bmRzL3RpY2tlcnMnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByaXZhdGUnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdiYWxhbmNlcycsXG4gICAgICAgICAgICAgICAgJ2JhbGFuY2VzL3tpZH0nLFxuICAgICAgICAgICAgICAgICdkaXNjb3VudHMnLFxuICAgICAgICAgICAgICAgICdkaXNjb3VudHMve2lkfScsXG4gICAgICAgICAgICAgICAgJ2Z1bmRzJyxcbiAgICAgICAgICAgICAgICAnZnVuZHMve2lkfScsXG4gICAgICAgICAgICAgICAgJ2Z1bmRzL3tpZH0vdHJhZGVzJyxcbiAgICAgICAgICAgICAgICAnZnVuZHMve2Z1bmRfaWR9L29yZGVycycsXG4gICAgICAgICAgICAgICAgJ2Z1bmRzL3tmdW5kX2lkfS9vcmRlcnMve2lkfScsXG4gICAgICAgICAgICAgICAgJ2Z1bmRzL3tmdW5kX2lkfS9wb3NpdGlvbl9iYWxhbmNlcycsXG4gICAgICAgICAgICAgICAgJ2Z1bmRzL3tmdW5kX2lkfS9wb3NpdGlvbnMnLFxuICAgICAgICAgICAgICAgICdmdW5kcy97ZnVuZF9pZH0vcG9zaXRpb25zL3tpZH0nLFxuICAgICAgICAgICAgICAgICd0cmFuc2FjdGlvbnMnLFxuICAgICAgICAgICAgICAgICd0cmFuc2FjdGlvbnMve2lkfScsXG4gICAgICAgICAgICAgICAgJ3dpdGhkcmF3X2xpbWl0cy97aWR9JyxcbiAgICAgICAgICAgICAgICAnd2l0aGRyYXdfbGltaXRzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnYXRtcy93aXRoZHJhdycsXG4gICAgICAgICAgICAgICAgJ2Z1bmRzL3tmdW5kX2lkfS9vcmRlcnMnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICdkZWxldGUnOiBbXG4gICAgICAgICAgICAgICAgJ2Z1bmRzL3tmdW5kX2lkfS9vcmRlcnMve2lkfScsXG4gICAgICAgICAgICAgICAgJ2Z1bmRzL3tmdW5kX2lkfS9vcmRlcnMvcmVtb3ZlX2FsbCcsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE1hcmtldHMgKCkge1xuICAgICAgICBsZXQgbWFya2V0cyA9IGF3YWl0IHRoaXMucHVibGljR2V0RnVuZHNUaWNrZXJzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgbWFya2V0c1sndGlja2VycyddLmxlbmd0aDsgcCsrKSB7XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gbWFya2V0c1sndGlja2VycyddW3BdO1xuICAgICAgICAgICAgbGV0IGlkID0gbWFya2V0WydmdW5kX2lkJ107XG4gICAgICAgICAgICBsZXQgYmFzZSA9IGlkLnNsaWNlICgwLCAzKTtcbiAgICAgICAgICAgIGxldCBxdW90ZSA9IGlkLnNsaWNlICgzLCA2KTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBiYXNlICsgJy8nICsgcXVvdGU7XG4gICAgICAgICAgICByZXN1bHQucHVzaCAoe1xuICAgICAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICAgICAgICAgICdzeW1ib2wnOiBzeW1ib2wsXG4gICAgICAgICAgICAgICAgJ2Jhc2UnOiBiYXNlLFxuICAgICAgICAgICAgICAgICdxdW90ZSc6IHF1b3RlLFxuICAgICAgICAgICAgICAgICdpbmZvJzogbWFya2V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlR2V0QmFsYW5jZXMgKCk7XG4gICAgICAgIGxldCBiYWxhbmNlcyA9IHJlc3BvbnNlWydiYWxhbmNlcyddO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IHJlc3BvbnNlIH07XG4gICAgICAgIGZvciAobGV0IGIgPSAwOyBiIDwgYmFsYW5jZXMubGVuZ3RoOyBiKyspIHtcbiAgICAgICAgICAgIGxldCBiYWxhbmNlID0gYmFsYW5jZXNbYl07XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBiYWxhbmNlWydjdXJyZW5jeSddO1xuICAgICAgICAgICAgbGV0IGZyZWUgPSBiYWxhbmNlWyd0cmFkaW5nX2JhbGFuY2UnXTtcbiAgICAgICAgICAgIGxldCB0b3RhbCA9IGJhbGFuY2VbJ2JhbGFuY2UnXTtcbiAgICAgICAgICAgIGxldCB1c2VkID0gdG90YWwgLSBmcmVlO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiBmcmVlLFxuICAgICAgICAgICAgICAgICd1c2VkJzogdXNlZCxcbiAgICAgICAgICAgICAgICAndG90YWwnOiB0b3RhbCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRGdW5kc0lkT3JkZXJib29rICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2lkJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLnBhcnNlODYwMSAob3JkZXJib29rWydkYXRlJ10pO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAob3JkZXJbJ3ByaWNlJ10pO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBwYXJzZUZsb2F0IChvcmRlclsnYW1vdW50J10pO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtzaWRlXS5wdXNoIChbIHByaWNlLCBhbW91bnQgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgcGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KSB7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLnBhcnNlODYwMSAodGlja2VyWydkYXRlJ10pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydoaWdoJ10pLFxuICAgICAgICAgICAgJ2xvdyc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbG93J10pLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYmlkJ10pLFxuICAgICAgICAgICAgJ2Fzayc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYXNrJ10pLFxuICAgICAgICAgICAgJ3Z3YXAnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnb3Blbic6IHBhcnNlRmxvYXQgKHRpY2tlclsnb3BlbiddKSxcbiAgICAgICAgICAgICdjbG9zZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsnY2xvc2UnXSksXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdCddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbHVtZV90cmFkZWQnXSksXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbHVtZSddKSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlcnMgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldEZ1bmRzVGlja2VycyAoKTtcbiAgICAgICAgbGV0IHRpY2tlcnMgPSB0aGlzLmluZGV4QnkgKHJlc3BvbnNlWyd0aWNrZXJzJ10sICdmdW5kX2lkJyk7XG4gICAgICAgIGxldCBpZHMgPSBPYmplY3Qua2V5cyAodGlja2Vycyk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7fTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCBpZCA9IGlkc1tpXTtcbiAgICAgICAgICAgIGxldCBtYXJrZXQgPSB0aGlzLm1hcmtldHNfYnlfaWRbaWRdO1xuICAgICAgICAgICAgbGV0IHN5bWJvbCA9IG1hcmtldFsnc3ltYm9sJ107XG4gICAgICAgICAgICBsZXQgdGlja2VyID0gdGlja2Vyc1tpZF07XG4gICAgICAgICAgICByZXN1bHRbc3ltYm9sXSA9IHRoaXMucGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCB0aWNrZXIgPSBhd2FpdCB0aGlzLnB1YmxpY0dldEZ1bmRzSWRUaWNrZXIgKHtcbiAgICAgICAgICAgICdpZCc6IHBbJ2lkJ10sXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVRpY2tlciAodGlja2VyLCBwKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0RnVuZHNJZFRyYWRlcyAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdpZCc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBpZiAodHlwZSA9PSAnbWFya2V0JylcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyBhbGxvd3MgbGltaXQgb3JkZXJzIG9ubHknKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdEZ1bmRzRnVuZElkT3JkZXJzICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2Z1bmRfaWQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICAgICAgJ3NpZGUnOiBzaWRlLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IGFtb3VudCxcbiAgICAgICAgICAgICdwcmljZSc6IHByaWNlLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnaWQnXS50b1N0cmluZyAoKSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wcml2YXRlRGVsZXRlRnVuZHNGdW5kSWRPcmRlcnNJZCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArICcvJyArIHRoaXMudmVyc2lvbiArICcvJyArIHRoaXMuaW1wbG9kZVBhcmFtcyAocGF0aCwgcGFyYW1zKTtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5vbWl0IChwYXJhbXMsIHRoaXMuZXh0cmFjdFBhcmFtcyAocGF0aCkpO1xuICAgICAgICBpZiAoYXBpID09ICdwcml2YXRlJykge1xuICAgICAgICAgICAgbGV0IG5vbmNlID0gdGhpcy5ub25jZSAoKS50b1N0cmluZyAoKTtcbiAgICAgICAgICAgIGxldCBhdXRoID0gbm9uY2UgKyB1cmw7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdYLVRSVC1LRVknOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgICAgICAnWC1UUlQtTk9OQ0UnOiBub25jZSxcbiAgICAgICAgICAgICAgICAnWC1UUlQtU0lHTic6IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKGF1dGgpLCB0aGlzLmVuY29kZSAodGhpcy5zZWNyZXQpLCAnc2hhNTEyJyksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzIChxdWVyeSkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgYm9keSA9IHRoaXMuanNvbiAocXVlcnkpO1xuICAgICAgICAgICAgICAgIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gJ2FwcGxpY2F0aW9uL2pzb24nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdlcnJvcnMnIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciB1cmR1Yml0ID0gZXh0ZW5kIChibGlua3RyYWRlLCB7XG4gICAgJ2lkJzogJ3VyZHViaXQnLFxuICAgICduYW1lJzogJ1VyZHVCaXQnLFxuICAgICdjb3VudHJpZXMnOiAnUEsnLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3OTkxNDUzLTE1NmJmM2FlLTY0ODAtMTFlNy04MmViLTcyOTVmZTFiNWJiNC5qcGcnLFxuICAgICAgICAnYXBpJzoge1xuICAgICAgICAgICAgJ3B1YmxpYyc6ICdodHRwczovL2FwaS5ibGlua3RyYWRlLmNvbS9hcGknLFxuICAgICAgICAgICAgJ3ByaXZhdGUnOiAnaHR0cHM6Ly9hcGkuYmxpbmt0cmFkZS5jb20vdGFwaScsXG4gICAgICAgIH0sXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly91cmR1Yml0LmNvbScsXG4gICAgICAgICdkb2MnOiAnaHR0cHM6Ly9ibGlua3RyYWRlLmNvbS9kb2NzJyxcbiAgICB9LFxuICAgICdjb21tZW50JzogJ0JsaW5rdHJhZGUgQVBJJyxcbiAgICAnbWFya2V0cyc6IHtcbiAgICAgICAgJ0JUQy9QS1InOiB7ICdpZCc6ICdCVENQS1InLCAnc3ltYm9sJzogJ0JUQy9QS1InLCAnYmFzZSc6ICdCVEMnLCAncXVvdGUnOiAnUEtSJywgJ2Jyb2tlcklkJzogOCwgJ2Jyb2tlcic6ICdVcmR1Qml0JyB9LFxuICAgIH0sXG59KVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciB2YXVsdG9ybyA9IHtcblxuICAgICdpZCc6ICd2YXVsdG9ybycsXG4gICAgJ25hbWUnOiAnVmF1bHRvcm8nLFxuICAgICdjb3VudHJpZXMnOiAnQ0gnLFxuICAgICdyYXRlTGltaXQnOiAxMDAwLFxuICAgICd2ZXJzaW9uJzogJzEnLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2ODgwLWYyMDVlODcwLTVlZTktMTFlNy04ZmUyLTBkNWIxNTg4MDc1Mi5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8vYXBpLnZhdWx0b3JvLmNvbScsXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly93d3cudmF1bHRvcm8uY29tJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL2FwaS52YXVsdG9yby5jb20nLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ2JpZGFuZGFzaycsXG4gICAgICAgICAgICAgICAgJ2J1eW9yZGVycycsXG4gICAgICAgICAgICAgICAgJ2xhdGVzdCcsXG4gICAgICAgICAgICAgICAgJ2xhdGVzdHRyYWRlcycsXG4gICAgICAgICAgICAgICAgJ21hcmtldHMnLFxuICAgICAgICAgICAgICAgICdvcmRlcmJvb2snLFxuICAgICAgICAgICAgICAgICdzZWxsb3JkZXJzJyxcbiAgICAgICAgICAgICAgICAndHJhbnNhY3Rpb25zL2RheScsXG4gICAgICAgICAgICAgICAgJ3RyYW5zYWN0aW9ucy9ob3VyJyxcbiAgICAgICAgICAgICAgICAndHJhbnNhY3Rpb25zL21vbnRoJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnYmFsYW5jZScsXG4gICAgICAgICAgICAgICAgJ215dHJhZGVzJyxcbiAgICAgICAgICAgICAgICAnb3JkZXJzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnYnV5L3tzeW1ib2x9L3t0eXBlfScsXG4gICAgICAgICAgICAgICAgJ2NhbmNlbC97aWR9JyxcbiAgICAgICAgICAgICAgICAnc2VsbC97c3ltYm9sfS97dHlwZX0nLFxuICAgICAgICAgICAgICAgICd3aXRoZHJhdycsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE1hcmtldHMgKCkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGxldCBtYXJrZXRzID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgbWFya2V0ID0gbWFya2V0c1snZGF0YSddO1xuICAgICAgICBsZXQgYmFzZSA9IG1hcmtldFsnQmFzZUN1cnJlbmN5J107XG4gICAgICAgIGxldCBxdW90ZSA9IG1hcmtldFsnTWFya2V0Q3VycmVuY3knXTtcbiAgICAgICAgbGV0IHN5bWJvbCA9IGJhc2UgKyAnLycgKyBxdW90ZTtcbiAgICAgICAgbGV0IGJhc2VJZCA9IGJhc2U7XG4gICAgICAgIGxldCBxdW90ZUlkID0gcXVvdGU7XG4gICAgICAgIGxldCBpZCA9IG1hcmtldFsnTWFya2V0TmFtZSddO1xuICAgICAgICByZXN1bHQucHVzaCAoe1xuICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgJ2Jhc2UnOiBiYXNlLFxuICAgICAgICAgICAgJ3F1b3RlJzogcXVvdGUsXG4gICAgICAgICAgICAnYmFzZUlkJzogYmFzZUlkLFxuICAgICAgICAgICAgJ3F1b3RlSWQnOiBxdW90ZUlkLFxuICAgICAgICAgICAgJ2luZm8nOiBtYXJrZXQsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVHZXRCYWxhbmNlICgpO1xuICAgICAgICBsZXQgYmFsYW5jZXMgPSByZXNwb25zZVsnZGF0YSddO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGJhbGFuY2VzIH07XG4gICAgICAgIGZvciAobGV0IGIgPSAwOyBiIDwgYmFsYW5jZXMubGVuZ3RoOyBiKyspIHtcbiAgICAgICAgICAgIGxldCBiYWxhbmNlID0gYmFsYW5jZXNbYl07XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBiYWxhbmNlWydjdXJyZW5jeV9jb2RlJ107XG4gICAgICAgICAgICBsZXQgdXBwZXJjYXNlID0gY3VycmVuY3kudG9VcHBlckNhc2UgKCk7XG4gICAgICAgICAgICBsZXQgZnJlZSA9IGJhbGFuY2VbJ2Nhc2gnXTtcbiAgICAgICAgICAgIGxldCB1c2VkID0gYmFsYW5jZVsncmVzZXJ2ZWQnXTtcbiAgICAgICAgICAgIGxldCB0b3RhbCA9IHRoaXMuc3VtIChmcmVlLCB1c2VkKTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogZnJlZSxcbiAgICAgICAgICAgICAgICAndXNlZCc6IHVzZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogdG90YWwsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRPcmRlcmJvb2sgKHBhcmFtcyk7XG4gICAgICAgIGxldCBvcmRlcmJvb2sgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IHJlc3BvbnNlWydkYXRhJ11bMF1bJ2InXSxcbiAgICAgICAgICAgICdhc2tzJzogcmVzcG9uc2VbJ2RhdGEnXVsxXVsncyddLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IFtdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaWRlcyA9IFsgJ2JpZHMnLCAnYXNrcycgXTtcbiAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBzaWRlcy5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1tzXTtcbiAgICAgICAgICAgIGxldCBvcmRlcnMgPSBvcmRlcmJvb2tbc2lkZV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBvcmRlciA9IG9yZGVyc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgcHJpY2UgPSBvcmRlclsnR29sZF9QcmljZSddO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBvcmRlclsnR29sZF9BbW91bnQnXTtcbiAgICAgICAgICAgICAgICByZXN1bHRbc2lkZV0ucHVzaCAoWyBwcmljZSwgYW1vdW50IF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlc3VsdFsnYmlkcyddID0gdGhpcy5zb3J0QnkgKHJlc3VsdFsnYmlkcyddLCAwLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcXVvdGUgPSBhd2FpdCB0aGlzLnB1YmxpY0dldEJpZGFuZGFzayAoKTtcbiAgICAgICAgbGV0IGJpZHNMZW5ndGggPSBxdW90ZVsnYmlkcyddLmxlbmd0aDtcbiAgICAgICAgbGV0IGJpZCA9IHF1b3RlWydiaWRzJ11bYmlkc0xlbmd0aCAtIDFdO1xuICAgICAgICBsZXQgYXNrID0gcXVvdGVbJ2Fza3MnXVswXTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgdGlja2VyID0gcmVzcG9uc2VbJ2RhdGEnXTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWycyNGhIaWdoJ10pLFxuICAgICAgICAgICAgJ2xvdyc6IHBhcnNlRmxvYXQgKHRpY2tlclsnMjRoTG93J10pLFxuICAgICAgICAgICAgJ2JpZCc6IGJpZFswXSxcbiAgICAgICAgICAgICdhc2snOiBhc2tbMF0sXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ0xhc3RQcmljZSddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJzI0aFZvbHVtZSddKSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wdWJsaWNHZXRUcmFuc2FjdGlvbnNEYXkgKHBhcmFtcyk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCBtZXRob2QgPSAncHJpdmF0ZVBvc3QnICsgdGhpcy5jYXBpdGFsaXplIChzaWRlKSArICdTeW1ib2xUeXBlJztcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpc1ttZXRob2RdICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ3N5bWJvbCc6IHBbJ3F1b3RlSWQnXS50b0xvd2VyQ2FzZSAoKSxcbiAgICAgICAgICAgICd0eXBlJzogdHlwZSxcbiAgICAgICAgICAgICdnbGQnOiBhbW91bnQsXG4gICAgICAgICAgICAncHJpY2UnOiBwcmljZSB8fCAxLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnZGF0YSddWydPcmRlcl9JRCddLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0Q2FuY2VsSWQgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnaWQnOiBpZCxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ10gKyAnLyc7XG4gICAgICAgIGlmIChhcGkgPT0gJ3B1YmxpYycpIHtcbiAgICAgICAgICAgIHVybCArPSBwYXRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG5vbmNlID0gdGhpcy5ub25jZSAoKTtcbiAgICAgICAgICAgIHVybCArPSB0aGlzLnZlcnNpb24gKyAnLycgKyB0aGlzLmltcGxvZGVQYXJhbXMgKHBhdGgsIHBhcmFtcyk7XG4gICAgICAgICAgICBsZXQgcXVlcnkgPSB0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgICAgICdub25jZSc6IG5vbmNlLFxuICAgICAgICAgICAgICAgICdhcGlrZXknOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgIH0sIHRoaXMub21pdCAocGFyYW1zLCB0aGlzLmV4dHJhY3RQYXJhbXMgKHBhdGgpKSk7XG4gICAgICAgICAgICB1cmwgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHF1ZXJ5KTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAnWC1TaWduYXR1cmUnOiB0aGlzLmhtYWMgKHRoaXMuZW5jb2RlICh1cmwpLCB0aGlzLmVuY29kZSAodGhpcy5zZWNyZXQpKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIHZidGMgPSBleHRlbmQgKGJsaW5rdHJhZGUsIHtcbiAgICAnaWQnOiAndmJ0YycsXG4gICAgJ25hbWUnOiAnVkJUQycsXG4gICAgJ2NvdW50cmllcyc6ICdWTicsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc5OTE0ODEtMWY1M2QxZDgtNjQ4MS0xMWU3LTg4NGUtMjFkMTdlNzkzOWRiLmpwZycsXG4gICAgICAgICdhcGknOiB7XG4gICAgICAgICAgICAncHVibGljJzogJ2h0dHBzOi8vYXBpLmJsaW5rdHJhZGUuY29tL2FwaScsXG4gICAgICAgICAgICAncHJpdmF0ZSc6ICdodHRwczovL2FwaS5ibGlua3RyYWRlLmNvbS90YXBpJyxcbiAgICAgICAgfSxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3ZidGMuZXhjaGFuZ2UnLFxuICAgICAgICAnZG9jJzogJ2h0dHBzOi8vYmxpbmt0cmFkZS5jb20vZG9jcycsXG4gICAgfSxcbiAgICAnY29tbWVudCc6ICdCbGlua3RyYWRlIEFQSScsXG4gICAgJ21hcmtldHMnOiB7XG4gICAgICAgICdCVEMvVk5EJzogeyAnaWQnOiAnQlRDVk5EJywgJ3N5bWJvbCc6ICdCVEMvVk5EJywgJ2Jhc2UnOiAnQlRDJywgJ3F1b3RlJzogJ1ZORCcsICdicm9rZXJJZCc6IDMsICdicm9rZXInOiAnVkJUQycgfSxcbiAgICB9LFxufSlcblxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciB2aXJ3b3ggPSB7XG5cbiAgICAnaWQnOiAndmlyd294JyxcbiAgICAnbmFtZSc6ICdWaXJXb1gnLFxuICAgICdjb3VudHJpZXMnOiAnQVQnLFxuICAgICdyYXRlTGltaXQnOiAxMDAwLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2ODk0LTZkYTlkMzYwLTVlZWEtMTFlNy05MGFhLTQxZjI3MTFiNzQwNS5qcGcnLFxuICAgICAgICAnYXBpJzoge1xuICAgICAgICAgICAgJ3B1YmxpYyc6ICdodHRwOi8vYXBpLnZpcndveC5jb20vYXBpL2pzb24ucGhwJyxcbiAgICAgICAgICAgICdwcml2YXRlJzogJ2h0dHBzOi8vd3d3LnZpcndveC5jb20vYXBpL3RyYWRpbmcucGhwJyxcbiAgICAgICAgfSxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy52aXJ3b3guY29tJyxcbiAgICAgICAgJ2RvYyc6ICdodHRwczovL3d3dy52aXJ3b3guY29tL2RldmVsb3BlcnMucGhwJyxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdnZXRJbnN0cnVtZW50cycsXG4gICAgICAgICAgICAgICAgJ2dldEJlc3RQcmljZXMnLFxuICAgICAgICAgICAgICAgICdnZXRNYXJrZXREZXB0aCcsXG4gICAgICAgICAgICAgICAgJ2VzdGltYXRlTWFya2V0T3JkZXInLFxuICAgICAgICAgICAgICAgICdnZXRUcmFkZWRQcmljZVZvbHVtZScsXG4gICAgICAgICAgICAgICAgJ2dldFJhd1RyYWRlRGF0YScsXG4gICAgICAgICAgICAgICAgJ2dldFN0YXRpc3RpY3MnLFxuICAgICAgICAgICAgICAgICdnZXRUZXJtaW5hbExpc3QnLFxuICAgICAgICAgICAgICAgICdnZXRHcmlkTGlzdCcsXG4gICAgICAgICAgICAgICAgJ2dldEdyaWRTdGF0aXN0aWNzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnZ2V0SW5zdHJ1bWVudHMnLFxuICAgICAgICAgICAgICAgICdnZXRCZXN0UHJpY2VzJyxcbiAgICAgICAgICAgICAgICAnZ2V0TWFya2V0RGVwdGgnLFxuICAgICAgICAgICAgICAgICdlc3RpbWF0ZU1hcmtldE9yZGVyJyxcbiAgICAgICAgICAgICAgICAnZ2V0VHJhZGVkUHJpY2VWb2x1bWUnLFxuICAgICAgICAgICAgICAgICdnZXRSYXdUcmFkZURhdGEnLFxuICAgICAgICAgICAgICAgICdnZXRTdGF0aXN0aWNzJyxcbiAgICAgICAgICAgICAgICAnZ2V0VGVybWluYWxMaXN0JyxcbiAgICAgICAgICAgICAgICAnZ2V0R3JpZExpc3QnLFxuICAgICAgICAgICAgICAgICdnZXRHcmlkU3RhdGlzdGljcycsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAncHJpdmF0ZSc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ2NhbmNlbE9yZGVyJyxcbiAgICAgICAgICAgICAgICAnZ2V0QmFsYW5jZXMnLFxuICAgICAgICAgICAgICAgICdnZXRDb21taXNzaW9uRGlzY291bnQnLFxuICAgICAgICAgICAgICAgICdnZXRPcmRlcnMnLFxuICAgICAgICAgICAgICAgICdnZXRUcmFuc2FjdGlvbnMnLFxuICAgICAgICAgICAgICAgICdwbGFjZU9yZGVyJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnY2FuY2VsT3JkZXInLFxuICAgICAgICAgICAgICAgICdnZXRCYWxhbmNlcycsXG4gICAgICAgICAgICAgICAgJ2dldENvbW1pc3Npb25EaXNjb3VudCcsXG4gICAgICAgICAgICAgICAgJ2dldE9yZGVycycsXG4gICAgICAgICAgICAgICAgJ2dldFRyYW5zYWN0aW9ucycsXG4gICAgICAgICAgICAgICAgJ3BsYWNlT3JkZXInLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hNYXJrZXRzICgpIHtcbiAgICAgICAgbGV0IG1hcmtldHMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldEluc3RydW1lbnRzICgpO1xuICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzIChtYXJrZXRzWydyZXN1bHQnXSk7XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgcCA9IDA7IHAgPCBrZXlzLmxlbmd0aDsgcCsrKSB7XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gbWFya2V0c1sncmVzdWx0J11ba2V5c1twXV07XG4gICAgICAgICAgICBsZXQgaWQgPSBtYXJrZXRbJ2luc3RydW1lbnRJRCddO1xuICAgICAgICAgICAgbGV0IHN5bWJvbCA9IG1hcmtldFsnc3ltYm9sJ107XG4gICAgICAgICAgICBsZXQgYmFzZSA9IG1hcmtldFsnbG9uZ0N1cnJlbmN5J107XG4gICAgICAgICAgICBsZXQgcXVvdGUgPSBtYXJrZXRbJ3Nob3J0Q3VycmVuY3knXTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoICh7XG4gICAgICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgICAgICAgICAgJ3N5bWJvbCc6IHN5bWJvbCxcbiAgICAgICAgICAgICAgICAnYmFzZSc6IGJhc2UsXG4gICAgICAgICAgICAgICAgJ3F1b3RlJzogcXVvdGUsXG4gICAgICAgICAgICAgICAgJ2luZm8nOiBtYXJrZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0R2V0QmFsYW5jZXMgKCk7XG4gICAgICAgIGxldCBiYWxhbmNlcyA9IHJlc3BvbnNlWydyZXN1bHQnXVsnYWNjb3VudExpc3QnXTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiBiYWxhbmNlcyB9O1xuICAgICAgICBmb3IgKGxldCBiID0gMDsgYiA8IGJhbGFuY2VzLmxlbmd0aDsgYisrKSB7XG4gICAgICAgICAgICBsZXQgYmFsYW5jZSA9IGJhbGFuY2VzW2JdO1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gYmFsYW5jZVsnY3VycmVuY3knXTtcbiAgICAgICAgICAgIGxldCB0b3RhbCA9IGJhbGFuY2VbJ2JhbGFuY2UnXTtcbiAgICAgICAgICAgIGxldCBhY2NvdW50ID0ge1xuICAgICAgICAgICAgICAgICdmcmVlJzogdG90YWwsXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogdG90YWwsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCZXN0UHJpY2VzIChtYXJrZXQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljUG9zdEdldEJlc3RQcmljZXMgKHtcbiAgICAgICAgICAgICdzeW1ib2xzJzogWyB0aGlzLnN5bWJvbCAobWFya2V0KSBdLFxuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wdWJsaWNQb3N0R2V0TWFya2V0RGVwdGggKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnc3ltYm9scyc6IFsgdGhpcy5zeW1ib2wgKG1hcmtldCkgXSxcbiAgICAgICAgICAgICdidXlEZXB0aCc6IDEwMCxcbiAgICAgICAgICAgICdzZWxsRGVwdGgnOiAxMDAsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBsZXQgb3JkZXJib29rID0gcmVzcG9uc2VbJ3Jlc3VsdCddWzBdO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnYmlkcyc6IFtdLFxuICAgICAgICAgICAgJ2Fza3MnOiBbXSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBzaWRlcyA9IHsgJ2JpZHMnOiAnYnV5JywgJ2Fza3MnOiAnc2VsbCcgfTtcbiAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyAoc2lkZXMpO1xuICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGtleXMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgIGxldCBrZXkgPSBrZXlzW2tdO1xuICAgICAgICAgICAgbGV0IHNpZGUgPSBzaWRlc1trZXldO1xuICAgICAgICAgICAgbGV0IG9yZGVycyA9IG9yZGVyYm9va1tzaWRlXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9yZGVyID0gb3JkZXJzW2ldO1xuICAgICAgICAgICAgICAgIGxldCBwcmljZSA9IHBhcnNlRmxvYXQgKG9yZGVyWydwcmljZSddKTtcbiAgICAgICAgICAgICAgICBsZXQgYW1vdW50ID0gcGFyc2VGbG9hdCAob3JkZXJbJ3ZvbHVtZSddKTtcbiAgICAgICAgICAgICAgICByZXN1bHRba2V5XS5wdXNoIChbIHByaWNlLCBhbW91bnQgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgZW5kID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCBzdGFydCA9IGVuZCAtIDg2NDAwMDAwO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFRyYWRlZFByaWNlVm9sdW1lICh7XG4gICAgICAgICAgICAnaW5zdHJ1bWVudCc6IHRoaXMuc3ltYm9sIChtYXJrZXQpLFxuICAgICAgICAgICAgJ2VuZERhdGUnOiB0aGlzLnl5eXltbWRkaGhtbXNzIChlbmQpLFxuICAgICAgICAgICAgJ3N0YXJ0RGF0ZSc6IHRoaXMueXl5eW1tZGRoaG1tc3MgKHN0YXJ0KSxcbiAgICAgICAgICAgICdITE9DJzogMSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aWNrZXJzID0gcmVzcG9uc2VbJ3Jlc3VsdCddWydwcmljZVZvbHVtZUxpc3QnXTtcbiAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyAodGlja2Vycyk7XG4gICAgICAgIGxldCBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgbGV0IGxhc3RLZXkgPSBrZXlzW2xlbmd0aCAtIDFdO1xuICAgICAgICBsZXQgdGlja2VyID0gdGlja2Vyc1tsYXN0S2V5XTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydoaWdoJ10pLFxuICAgICAgICAgICAgJ2xvdyc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbG93J10pLFxuICAgICAgICAgICAgJ2JpZCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhc2snOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogcGFyc2VGbG9hdCAodGlja2VyWydvcGVuJ10pLFxuICAgICAgICAgICAgJ2Nsb3NlJzogcGFyc2VGbG9hdCAodGlja2VyWydjbG9zZSddKSxcbiAgICAgICAgICAgICdmaXJzdCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdsYXN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2NoYW5nZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdwZXJjZW50YWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbG9uZ1ZvbHVtZSddKSxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsnc2hvcnRWb2x1bWUnXSksXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUcmFkZXMgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVibGljR2V0UmF3VHJhZGVEYXRhKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnaW5zdHJ1bWVudCc6IHRoaXMuc3ltYm9sIChtYXJrZXQpLFxuICAgICAgICAgICAgJ3RpbWVzcGFuJzogMzYwMCxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdpbnN0cnVtZW50JzogdGhpcy5zeW1ib2wgKG1hcmtldCksXG4gICAgICAgICAgICAnb3JkZXJUeXBlJzogc2lkZS50b1VwcGVyQ2FzZSAoKSxcbiAgICAgICAgICAgICdhbW91bnQnOiBhbW91bnQsXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlID09ICdsaW1pdCcpXG4gICAgICAgICAgICBvcmRlclsncHJpY2UnXSA9IHByaWNlO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0UGxhY2VPcmRlciAodGhpcy5leHRlbmQgKG9yZGVyLCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnb3JkZXJJRCddLnRvU3RyaW5nICgpLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0Q2FuY2VsT3JkZXIgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnb3JkZXJJRCc6IGlkLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdCAocGF0aCwgYXBpID0gJ3B1YmxpYycsIG1ldGhvZCA9ICdHRVQnLCBwYXJhbXMgPSB7fSwgaGVhZGVycyA9IHVuZGVmaW5lZCwgYm9keSA9IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXVthcGldO1xuICAgICAgICBsZXQgYXV0aCA9IHt9O1xuICAgICAgICBpZiAoYXBpID09ICdwcml2YXRlJykge1xuICAgICAgICAgICAgYXV0aFsna2V5J10gPSB0aGlzLmFwaUtleTtcbiAgICAgICAgICAgIGF1dGhbJ3VzZXInXSA9IHRoaXMubG9naW47XG4gICAgICAgICAgICBhdXRoWydwYXNzJ10gPSB0aGlzLnBhc3N3b3JkO1xuICAgICAgICB9XG4gICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCk7XG4gICAgICAgIGlmIChtZXRob2QgPT0gJ0dFVCcpIHtcbiAgICAgICAgICAgIHVybCArPSAnPycgKyB0aGlzLnVybGVuY29kZSAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICAgICAnbWV0aG9kJzogcGF0aCxcbiAgICAgICAgICAgICAgICAnaWQnOiBub25jZSxcbiAgICAgICAgICAgIH0sIGF1dGgsIHBhcmFtcykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaGVhZGVycyA9IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9O1xuICAgICAgICAgICAgYm9keSA9IHRoaXMuanNvbiAoe1xuICAgICAgICAgICAgICAgICdtZXRob2QnOiBwYXRoLFxuICAgICAgICAgICAgICAgICdwYXJhbXMnOiB0aGlzLmV4dGVuZCAoYXV0aCwgcGFyYW1zKSxcbiAgICAgICAgICAgICAgICAnaWQnOiBub25jZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdlcnJvcicgaW4gcmVzcG9uc2UpXG4gICAgICAgICAgICBpZiAocmVzcG9uc2VbJ2Vycm9yJ10pXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnICcgKyB0aGlzLmpzb24gKHJlc3BvbnNlKSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9LFxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciB4YnRjZSA9IHtcblxuICAgICdpZCc6ICd4YnRjZScsXG4gICAgJ25hbWUnOiAneEJUQ2UnLFxuICAgICdjb3VudHJpZXMnOiAnUlUnLFxuICAgICdyYXRlTGltaXQnOiAyMDAwLCAvLyByZXNwb25zZXMgYXJlIGNhY2hlZCBldmVyeSAyIHNlY29uZHNcbiAgICAndmVyc2lvbic6ICd2MScsXG4gICAgJ2hhc0ZldGNoVGlja2Vycyc6IHRydWUsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjgwNTk0MTQtZTIzNTk3MGMtNjYyYy0xMWU3LThjM2EtMDhlMzFmNzg2ODRiLmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly9jcnlwdG90dGxpdmV3ZWJhcGkueGJ0Y2UubmV0Ojg0NDMvYXBpJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy54YnRjZS5jb20nLFxuICAgICAgICAnZG9jJzogW1xuICAgICAgICAgICAgJ2h0dHBzOi8vd3d3LnhidGNlLmNvbS90cmFkZWFwaScsXG4gICAgICAgICAgICAnaHR0cHM6Ly9zdXBwb3J0LnhidGNlLmluZm8vS25vd2xlZGdlYmFzZS9BcnRpY2xlL1ZpZXcvNTIvMjUveGJ0Y2UtZXhjaGFuZ2UtYXBpJyxcbiAgICAgICAgXSxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdwdWJsaWMnOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdjdXJyZW5jeScsXG4gICAgICAgICAgICAgICAgJ2N1cnJlbmN5L3tmaWx0ZXJ9JyxcbiAgICAgICAgICAgICAgICAnbGV2ZWwyJyxcbiAgICAgICAgICAgICAgICAnbGV2ZWwyL3tmaWx0ZXJ9JyxcbiAgICAgICAgICAgICAgICAncXVvdGVoaXN0b3J5L3tzeW1ib2x9L3twZXJpb2RpY2l0eX0vYmFycy9hc2snLFxuICAgICAgICAgICAgICAgICdxdW90ZWhpc3Rvcnkve3N5bWJvbH0ve3BlcmlvZGljaXR5fS9iYXJzL2JpZCcsXG4gICAgICAgICAgICAgICAgJ3F1b3RlaGlzdG9yeS97c3ltYm9sfS9sZXZlbDInLFxuICAgICAgICAgICAgICAgICdxdW90ZWhpc3Rvcnkve3N5bWJvbH0vdGlja3MnLFxuICAgICAgICAgICAgICAgICdzeW1ib2wnLFxuICAgICAgICAgICAgICAgICdzeW1ib2wve2ZpbHRlcn0nLFxuICAgICAgICAgICAgICAgICd0aWNrJyxcbiAgICAgICAgICAgICAgICAndGljay97ZmlsdGVyfScsXG4gICAgICAgICAgICAgICAgJ3RpY2tlcicsXG4gICAgICAgICAgICAgICAgJ3RpY2tlci97ZmlsdGVyfScsXG4gICAgICAgICAgICAgICAgJ3RyYWRlc2Vzc2lvbicsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAncHJpdmF0ZSc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ3RyYWRlc2VydmVyaW5mbycsXG4gICAgICAgICAgICAgICAgJ3RyYWRlc2Vzc2lvbicsXG4gICAgICAgICAgICAgICAgJ2N1cnJlbmN5JyxcbiAgICAgICAgICAgICAgICAnY3VycmVuY3kve2ZpbHRlcn0nLFxuICAgICAgICAgICAgICAgICdsZXZlbDInLFxuICAgICAgICAgICAgICAgICdsZXZlbDIve2ZpbHRlcn0nLFxuICAgICAgICAgICAgICAgICdzeW1ib2wnLFxuICAgICAgICAgICAgICAgICdzeW1ib2wve2ZpbHRlcn0nLFxuICAgICAgICAgICAgICAgICd0aWNrJyxcbiAgICAgICAgICAgICAgICAndGljay97ZmlsdGVyfScsXG4gICAgICAgICAgICAgICAgJ2FjY291bnQnLFxuICAgICAgICAgICAgICAgICdhc3NldCcsXG4gICAgICAgICAgICAgICAgJ2Fzc2V0L3tpZH0nLFxuICAgICAgICAgICAgICAgICdwb3NpdGlvbicsXG4gICAgICAgICAgICAgICAgJ3Bvc2l0aW9uL3tpZH0nLFxuICAgICAgICAgICAgICAgICd0cmFkZScsXG4gICAgICAgICAgICAgICAgJ3RyYWRlL3tpZH0nLFxuICAgICAgICAgICAgICAgICdxdW90ZWhpc3Rvcnkve3N5bWJvbH0ve3BlcmlvZGljaXR5fS9iYXJzL2FzaycsXG4gICAgICAgICAgICAgICAgJ3F1b3RlaGlzdG9yeS97c3ltYm9sfS97cGVyaW9kaWNpdHl9L2JhcnMvYXNrL2luZm8nLFxuICAgICAgICAgICAgICAgICdxdW90ZWhpc3Rvcnkve3N5bWJvbH0ve3BlcmlvZGljaXR5fS9iYXJzL2JpZCcsXG4gICAgICAgICAgICAgICAgJ3F1b3RlaGlzdG9yeS97c3ltYm9sfS97cGVyaW9kaWNpdHl9L2JhcnMvYmlkL2luZm8nLFxuICAgICAgICAgICAgICAgICdxdW90ZWhpc3Rvcnkve3N5bWJvbH0vbGV2ZWwyJyxcbiAgICAgICAgICAgICAgICAncXVvdGVoaXN0b3J5L3tzeW1ib2x9L2xldmVsMi9pbmZvJyxcbiAgICAgICAgICAgICAgICAncXVvdGVoaXN0b3J5L3tzeW1ib2x9L3BlcmlvZGljaXRpZXMnLFxuICAgICAgICAgICAgICAgICdxdW90ZWhpc3Rvcnkve3N5bWJvbH0vdGlja3MnLFxuICAgICAgICAgICAgICAgICdxdW90ZWhpc3Rvcnkve3N5bWJvbH0vdGlja3MvaW5mbycsXG4gICAgICAgICAgICAgICAgJ3F1b3RlaGlzdG9yeS9jYWNoZS97c3ltYm9sfS97cGVyaW9kaWNpdHl9L2JhcnMvYXNrJyxcbiAgICAgICAgICAgICAgICAncXVvdGVoaXN0b3J5L2NhY2hlL3tzeW1ib2x9L3twZXJpb2RpY2l0eX0vYmFycy9iaWQnLFxuICAgICAgICAgICAgICAgICdxdW90ZWhpc3RvcnkvY2FjaGUve3N5bWJvbH0vbGV2ZWwyJyxcbiAgICAgICAgICAgICAgICAncXVvdGVoaXN0b3J5L2NhY2hlL3tzeW1ib2x9L3RpY2tzJyxcbiAgICAgICAgICAgICAgICAncXVvdGVoaXN0b3J5L3N5bWJvbHMnLFxuICAgICAgICAgICAgICAgICdxdW90ZWhpc3RvcnkvdmVyc2lvbicsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ3RyYWRlJyxcbiAgICAgICAgICAgICAgICAndHJhZGVoaXN0b3J5JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAncHV0JzogW1xuICAgICAgICAgICAgICAgICd0cmFkZScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgJ2RlbGV0ZSc6IFtcbiAgICAgICAgICAgICAgICAndHJhZGUnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hNYXJrZXRzICgpIHtcbiAgICAgICAgbGV0IG1hcmtldHMgPSBhd2FpdCB0aGlzLnByaXZhdGVHZXRTeW1ib2wgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgcCA9IDA7IHAgPCBtYXJrZXRzLmxlbmd0aDsgcCsrKSB7XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gbWFya2V0c1twXTtcbiAgICAgICAgICAgIGxldCBpZCA9IG1hcmtldFsnU3ltYm9sJ107XG4gICAgICAgICAgICBsZXQgYmFzZSA9IG1hcmtldFsnTWFyZ2luQ3VycmVuY3knXTtcbiAgICAgICAgICAgIGxldCBxdW90ZSA9IG1hcmtldFsnUHJvZml0Q3VycmVuY3knXTtcbiAgICAgICAgICAgIGlmIChiYXNlID09ICdEU0gnKVxuICAgICAgICAgICAgICAgIGJhc2UgPSAnREFTSCc7XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gYmFzZSArICcvJyArIHF1b3RlO1xuICAgICAgICAgICAgc3ltYm9sID0gbWFya2V0WydJc1RyYWRlQWxsb3dlZCddID8gc3ltYm9sIDogaWQ7XG4gICAgICAgICAgICByZXN1bHQucHVzaCAoe1xuICAgICAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICAgICAgICAgICdzeW1ib2wnOiBzeW1ib2wsXG4gICAgICAgICAgICAgICAgJ2Jhc2UnOiBiYXNlLFxuICAgICAgICAgICAgICAgICdxdW90ZSc6IHF1b3RlLFxuICAgICAgICAgICAgICAgICdpbmZvJzogbWFya2V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gYXdhaXQgdGhpcy5wcml2YXRlR2V0QXNzZXQgKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSB7ICdpbmZvJzogYmFsYW5jZXMgfTtcbiAgICAgICAgZm9yIChsZXQgYiA9IDA7IGIgPCBiYWxhbmNlcy5sZW5ndGg7IGIrKykge1xuICAgICAgICAgICAgbGV0IGJhbGFuY2UgPSBiYWxhbmNlc1tiXTtcbiAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IGJhbGFuY2VbJ0N1cnJlbmN5J107XG4gICAgICAgICAgICBsZXQgdXBwZXJjYXNlID0gY3VycmVuY3kudG9VcHBlckNhc2UgKCk7XG4gICAgICAgICAgICAvLyB4YnRjZSBuYW1lcyBEQVNIIGluY29ycmVjdGx5IGFzIERTSFxuICAgICAgICAgICAgaWYgKHVwcGVyY2FzZSA9PSAnRFNIJylcbiAgICAgICAgICAgICAgICB1cHBlcmNhc2UgPSAnREFTSCc7XG4gICAgICAgICAgICBsZXQgdG90YWwgPSBiYWxhbmNlWydiYWxhbmNlJ107XG4gICAgICAgICAgICBsZXQgYWNjb3VudCA9IHtcbiAgICAgICAgICAgICAgICAnZnJlZSc6IGJhbGFuY2VbJ0ZyZWVBbW91bnQnXSxcbiAgICAgICAgICAgICAgICAndXNlZCc6IGJhbGFuY2VbJ0xvY2tlZEFtb3VudCddLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IGJhbGFuY2VbJ0Ftb3VudCddLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlc3VsdFt1cHBlcmNhc2VdID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgdGhpcy5wcml2YXRlR2V0TGV2ZWwyRmlsdGVyICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2ZpbHRlcic6IHBbJ2lkJ10sXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICBvcmRlcmJvb2sgPSBvcmRlcmJvb2tbMF07XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSBvcmRlcmJvb2tbJ1RpbWVzdGFtcCddO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICBsZXQgU2lkZSA9IHRoaXMuY2FwaXRhbGl6ZSAoc2lkZSk7XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW1NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAob3JkZXJbJ1ByaWNlJ10pO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBwYXJzZUZsb2F0IChvcmRlclsnVm9sdW1lJ10pO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtzaWRlXS5wdXNoIChbIHByaWNlLCBhbW91bnQgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgcGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KSB7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSAwO1xuICAgICAgICBsZXQgbGFzdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKCdMYXN0QnV5VGltZXN0YW1wJyBpbiB0aWNrZXIpXG4gICAgICAgICAgICBpZiAodGltZXN0YW1wIDwgdGlja2VyWydMYXN0QnV5VGltZXN0YW1wJ10pIHtcbiAgICAgICAgICAgICAgICB0aW1lc3RhbXAgPSB0aWNrZXJbJ0xhc3RCdXlUaW1lc3RhbXAnXTtcbiAgICAgICAgICAgICAgICBsYXN0ID0gdGlja2VyWydMYXN0QnV5UHJpY2UnXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgaWYgKCdMYXN0U2VsbFRpbWVzdGFtcCcgaW4gdGlja2VyKVxuICAgICAgICAgICAgaWYgKHRpbWVzdGFtcCA8IHRpY2tlclsnTGFzdFNlbGxUaW1lc3RhbXAnXSkge1xuICAgICAgICAgICAgICAgIHRpbWVzdGFtcCA9IHRpY2tlclsnTGFzdFNlbGxUaW1lc3RhbXAnXTtcbiAgICAgICAgICAgICAgICBsYXN0ID0gdGlja2VyWydMYXN0U2VsbFByaWNlJ107XG4gICAgICAgICAgICB9XG4gICAgICAgIGlmICghdGltZXN0YW1wKVxuICAgICAgICAgICAgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiB0aWNrZXJbJ0RhaWx5QmVzdEJ1eVByaWNlJ10sXG4gICAgICAgICAgICAnbG93JzogdGlja2VyWydEYWlseUJlc3RTZWxsUHJpY2UnXSxcbiAgICAgICAgICAgICdiaWQnOiB0aWNrZXJbJ0Jlc3RCaWQnXSxcbiAgICAgICAgICAgICdhc2snOiB0aWNrZXJbJ0Jlc3RBc2snXSxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IGxhc3QsXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3F1b3RlVm9sdW1lJzogdGlja2VyWydEYWlseVRyYWRlZFRvdGFsVm9sdW1lJ10sXG4gICAgICAgICAgICAnaW5mbyc6IHRpY2tlcixcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXJzICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHRpY2tlcnMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFRpY2tlciAoKTtcbiAgICAgICAgdGlja2VycyA9IHRoaXMuaW5kZXhCeSAodGlja2VycywgJ1N5bWJvbCcpO1xuICAgICAgICBsZXQgaWRzID0gT2JqZWN0LmtleXMgKHRpY2tlcnMpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge307XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgaWQgPSBpZHNbaV07XG4gICAgICAgICAgICBsZXQgbWFya2V0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgbGV0IHN5bWJvbCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmIChpZCBpbiB0aGlzLm1hcmtldHNfYnlfaWQpIHtcbiAgICAgICAgICAgICAgICBtYXJrZXQgPSB0aGlzLm1hcmtldHNfYnlfaWRbaWRdO1xuICAgICAgICAgICAgICAgIHN5bWJvbCA9IG1hcmtldFsnc3ltYm9sJ107XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCBiYXNlID0gaWQuc2xpY2UgKDAsIDMpO1xuICAgICAgICAgICAgICAgIGxldCBxdW90ZSA9IGlkLnNsaWNlICgzLCA2KTtcbiAgICAgICAgICAgICAgICBpZiAoYmFzZSA9PSAnRFNIJylcbiAgICAgICAgICAgICAgICAgICAgYmFzZSA9ICdEQVNIJztcbiAgICAgICAgICAgICAgICBpZiAocXVvdGUgPT0gJ0RTSCcpXG4gICAgICAgICAgICAgICAgICAgIHF1b3RlID0gJ0RBU0gnO1xuICAgICAgICAgICAgICAgIHN5bWJvbCA9IGJhc2UgKyAnLycgKyBxdW90ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCB0aWNrZXIgPSB0aWNrZXJzW2lkXTtcbiAgICAgICAgICAgIHJlc3VsdFtzeW1ib2xdID0gdGhpcy5wYXJzZVRpY2tlciAodGlja2VyLCBtYXJrZXQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVGlja2VyIChtYXJrZXQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHAgPSB0aGlzLm1hcmtldCAobWFya2V0KTtcbiAgICAgICAgbGV0IHRpY2tlcnMgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFRpY2tlckZpbHRlciAoe1xuICAgICAgICAgICAgJ2ZpbHRlcic6IHBbJ2lkJ10sXG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgbGVuZ3RoID0gdGlja2Vycy5sZW5ndGg7XG4gICAgICAgIGlmIChsZW5ndGggPCAxKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnIGZldGNoVGlja2VyIHJldHVybmVkIGVtcHR5IHJlc3BvbnNlLCB4QlRDZSBwdWJsaWMgQVBJIGVycm9yJyk7XG4gICAgICAgIHRpY2tlcnMgPSB0aGlzLmluZGV4QnkgKHRpY2tlcnMsICdTeW1ib2wnKTtcbiAgICAgICAgbGV0IHRpY2tlciA9IHRpY2tlcnNbcFsnaWQnXV07XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlVGlja2VyICh0aWNrZXIsIHApO1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICAvLyBubyBtZXRob2QgZm9yIHRyYWRlcz9cbiAgICAgICAgcmV0dXJuIHRoaXMucHJpdmF0ZUdldFRyYWRlIChwYXJhbXMpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBpZiAodHlwZSA9PSAnbWFya2V0JylcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyBhbGxvd3MgbGltaXQgb3JkZXJzIG9ubHknKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy50YXBpUG9zdFRyYWRlICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ3BhaXInOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICAgICAgJ3R5cGUnOiBzaWRlLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IGFtb3VudCxcbiAgICAgICAgICAgICdyYXRlJzogcHJpY2UsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXNwb25zZSxcbiAgICAgICAgICAgICdpZCc6IHJlc3BvbnNlWydJZCddLnRvU3RyaW5nICgpLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVEZWxldGVUcmFkZSAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdUeXBlJzogJ0NhbmNlbCcsXG4gICAgICAgICAgICAnSWQnOiBpZCxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIG5vbmNlICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgIH0sXG5cbiAgICByZXF1ZXN0IChwYXRoLCBhcGkgPSAnYXBpJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICghdGhpcy5hcGlLZXkpXG4gICAgICAgICAgICB0aHJvdyBuZXcgQXV0aGVudGljYXRpb25FcnJvciAodGhpcy5pZCArICcgcmVxdWlyZXMgYXBpS2V5IGZvciBhbGwgcmVxdWVzdHMsIHRoZWlyIHB1YmxpYyBBUEkgaXMgYWx3YXlzIGJ1c3knKTtcbiAgICAgICAgaWYgKCF0aGlzLnVpZClcbiAgICAgICAgICAgIHRocm93IG5ldyBBdXRoZW50aWNhdGlvbkVycm9yICh0aGlzLmlkICsgJyByZXF1aXJlcyB1aWQgcHJvcGVydHkgZm9yIGF1dGhlbnRpY2F0aW9uIGFuZCB0cmFkaW5nJyk7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgJy8nICsgdGhpcy52ZXJzaW9uO1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKVxuICAgICAgICAgICAgdXJsICs9ICcvJyArIGFwaTtcbiAgICAgICAgdXJsICs9ICcvJyArIHRoaXMuaW1wbG9kZVBhcmFtcyAocGF0aCwgcGFyYW1zKTtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5vbWl0IChwYXJhbXMsIHRoaXMuZXh0cmFjdFBhcmFtcyAocGF0aCkpO1xuICAgICAgICBpZiAoYXBpID09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHF1ZXJ5KS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChxdWVyeSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBoZWFkZXJzID0geyAnQWNjZXB0LUVuY29kaW5nJzogJ2d6aXAsIGRlZmxhdGUnIH07XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpLnRvU3RyaW5nICgpO1xuICAgICAgICAgICAgaWYgKG1ldGhvZCA9PSAnUE9TVCcpIHtcbiAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHF1ZXJ5KS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSAnYXBwbGljYXRpb24vanNvbic7XG4gICAgICAgICAgICAgICAgICAgIGJvZHkgPSB0aGlzLmpzb24gKHF1ZXJ5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB1cmwgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHF1ZXJ5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBhdXRoID0gbm9uY2UgKyB0aGlzLnVpZCArIHRoaXMuYXBpS2V5ICsgbWV0aG9kICsgdXJsO1xuICAgICAgICAgICAgaWYgKGJvZHkpXG4gICAgICAgICAgICAgICAgYXV0aCArPSBib2R5O1xuICAgICAgICAgICAgbGV0IHNpZ25hdHVyZSA9IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKGF1dGgpLCB0aGlzLmVuY29kZSAodGhpcy5zZWNyZXQpLCAnc2hhMjU2JywgJ2Jhc2U2NCcpO1xuICAgICAgICAgICAgbGV0IGNyZWRlbnRpYWxzID0gdGhpcy51aWQgKyAnOicgKyB0aGlzLmFwaUtleSArICc6JyArIG5vbmNlICsgJzonICsgdGhpcy5iaW5hcnlUb1N0cmluZyAoc2lnbmF0dXJlKTtcbiAgICAgICAgICAgIGhlYWRlcnNbJ0F1dGhvcml6YXRpb24nXSA9ICdITUFDICcgKyBjcmVkZW50aWFscztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIHlvYml0ID0ge1xuXG4gICAgJ2lkJzogJ3lvYml0JyxcbiAgICAnbmFtZSc6ICdZb0JpdCcsXG4gICAgJ2NvdW50cmllcyc6ICdSVScsXG4gICAgJ3JhdGVMaW1pdCc6IDIwMDAsIC8vIHJlc3BvbnNlcyBhcmUgY2FjaGVkIGV2ZXJ5IDIgc2Vjb25kc1xuICAgICd2ZXJzaW9uJzogJzMnLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2OTEwLWNkY2JmZGFlLTVlZWEtMTFlNy05ODU5LTAzZmVhODczMjcyZC5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8veW9iaXQubmV0JyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3d3dy55b2JpdC5uZXQnLFxuICAgICAgICAnZG9jJzogJ2h0dHBzOi8vd3d3LnlvYml0Lm5ldC9lbi9hcGkvJyxcbiAgICB9LFxuICAgICdhcGknOiB7XG4gICAgICAgICdhcGknOiB7XG4gICAgICAgICAgICAnZ2V0JzogW1xuICAgICAgICAgICAgICAgICdkZXB0aC97cGFpcnN9JyxcbiAgICAgICAgICAgICAgICAnaW5mbycsXG4gICAgICAgICAgICAgICAgJ3RpY2tlci97cGFpcnN9JyxcbiAgICAgICAgICAgICAgICAndHJhZGVzL3twYWlyc30nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ3RhcGknOiB7XG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnQWN0aXZlT3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnQ2FuY2VsT3JkZXInLFxuICAgICAgICAgICAgICAgICdHZXREZXBvc2l0QWRkcmVzcycsXG4gICAgICAgICAgICAgICAgJ2dldEluZm8nLFxuICAgICAgICAgICAgICAgICdPcmRlckluZm8nLFxuICAgICAgICAgICAgICAgICdUcmFkZScsXG4gICAgICAgICAgICAgICAgJ1RyYWRlSGlzdG9yeScsXG4gICAgICAgICAgICAgICAgJ1dpdGhkcmF3Q29pbnNUb0FkZHJlc3MnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hNYXJrZXRzICgpIHtcbiAgICAgICAgbGV0IG1hcmtldHMgPSBhd2FpdCB0aGlzLmFwaUdldEluZm8gKCk7XG4gICAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMgKG1hcmtldHNbJ3BhaXJzJ10pO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwga2V5cy5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgbGV0IGlkID0ga2V5c1twXTtcbiAgICAgICAgICAgIGxldCBtYXJrZXQgPSBtYXJrZXRzWydwYWlycyddW2lkXTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBpZC50b1VwcGVyQ2FzZSAoKS5yZXBsYWNlICgnXycsICcvJyk7XG4gICAgICAgICAgICBsZXQgWyBiYXNlLCBxdW90ZSBdID0gc3ltYm9sLnNwbGl0ICgnLycpO1xuICAgICAgICAgICAgYmFzZSA9IHRoaXMuY29tbW9uQ3VycmVuY3lDb2RlIChiYXNlKTtcbiAgICAgICAgICAgIHF1b3RlID0gdGhpcy5jb21tb25DdXJyZW5jeUNvZGUgKHF1b3RlKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoICh7XG4gICAgICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgICAgICAgICAgJ3N5bWJvbCc6IHN5bWJvbCxcbiAgICAgICAgICAgICAgICAnYmFzZSc6IGJhc2UsXG4gICAgICAgICAgICAgICAgJ3F1b3RlJzogcXVvdGUsXG4gICAgICAgICAgICAgICAgJ2luZm8nOiBtYXJrZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnRhcGlQb3N0R2V0SW5mbyAoKTtcbiAgICAgICAgbGV0IGJhbGFuY2VzID0gcmVzcG9uc2VbJ3JldHVybiddO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGJhbGFuY2VzIH07XG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgdGhpcy5jdXJyZW5jaWVzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSB0aGlzLmN1cnJlbmNpZXNbY107XG4gICAgICAgICAgICBsZXQgbG93ZXJjYXNlID0gY3VycmVuY3kudG9Mb3dlckNhc2UgKCk7XG4gICAgICAgICAgICBsZXQgYWNjb3VudCA9IHtcbiAgICAgICAgICAgICAgICAnZnJlZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAndXNlZCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAndG90YWwnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKCdmdW5kcycgaW4gYmFsYW5jZXMpXG4gICAgICAgICAgICAgICAgaWYgKGxvd2VyY2FzZSBpbiBiYWxhbmNlc1snZnVuZHMnXSlcbiAgICAgICAgICAgICAgICAgICAgYWNjb3VudFsnZnJlZSddID0gYmFsYW5jZXNbJ2Z1bmRzJ11bbG93ZXJjYXNlXTtcbiAgICAgICAgICAgIGlmICgnZnVuZHNfaW5jbF9vcmRlcnMnIGluIGJhbGFuY2VzKVxuICAgICAgICAgICAgICAgIGlmIChsb3dlcmNhc2UgaW4gYmFsYW5jZXNbJ2Z1bmRzX2luY2xfb3JkZXJzJ10pXG4gICAgICAgICAgICAgICAgICAgIGFjY291bnRbJ3RvdGFsJ10gPSBiYWxhbmNlc1snZnVuZHNfaW5jbF9vcmRlcnMnXVtsb3dlcmNhc2VdO1xuICAgICAgICAgICAgaWYgKGFjY291bnRbJ3RvdGFsJ10gJiYgYWNjb3VudFsnZnJlZSddKVxuICAgICAgICAgICAgICAgIGFjY291bnRbJ3VzZWQnXSA9IGFjY291bnRbJ3RvdGFsJ10gLSBhY2NvdW50WydmcmVlJ107XG4gICAgICAgICAgICByZXN1bHRbY3VycmVuY3ldID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmFwaUdldERlcHRoUGFpcnMgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAncGFpcnMnOiBwWydpZCddLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IHJlc3BvbnNlW3BbJ2lkJ11dO1xuICAgICAgICBsZXQgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGxldCBiaWRzID0gKCdiaWRzJyBpbiBvcmRlcmJvb2spID8gb3JkZXJib29rWydiaWRzJ10gOiBbXTtcbiAgICAgICAgbGV0IGFza3MgPSAoJ2Fza3MnIGluIG9yZGVyYm9vaykgPyBvcmRlcmJvb2tbJ2Fza3MnXSA6IFtdO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBiaWRzLFxuICAgICAgICAgICAgJ2Fza3MnOiBhc2tzLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKG1hcmtldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgdGlja2VycyA9IGF3YWl0IHRoaXMuYXBpR2V0VGlja2VyUGFpcnMgKHtcbiAgICAgICAgICAgICdwYWlycyc6IHBbJ2lkJ10sXG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgdGlja2VyID0gdGlja2Vyc1twWydpZCddXTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRpY2tlclsndXBkYXRlZCddICogMTAwMDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnaGlnaCddKSxcbiAgICAgICAgICAgICdsb3cnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xvdyddKSxcbiAgICAgICAgICAgICdiaWQnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2J1eSddKSxcbiAgICAgICAgICAgICdhc2snOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3NlbGwnXSksXG4gICAgICAgICAgICAndndhcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ2xhc3QnXSksXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYXZnJ10pLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbF9jdXInXSksXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbCddKSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy5hcGlHZXRUcmFkZXNQYWlycyAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdwYWlycyc6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBpZiAodHlwZSA9PSAnbWFya2V0JylcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyBhbGxvd3MgbGltaXQgb3JkZXJzIG9ubHknKTtcbiAgICAgICAgbGV0IHJhdGUgPSBwcmljZS50b1N0cmluZyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy50YXBpUG9zdFRyYWRlICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ3BhaXInOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICAgICAgJ3R5cGUnOiBzaWRlLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IGFtb3VudCxcbiAgICAgICAgICAgICdyYXRlJzogJyUuOGYnLnNwcmludGYgKHByaWNlKSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ2lkJzogcmVzcG9uc2VbJ3JldHVybiddWydvcmRlcl9pZCddLnRvU3RyaW5nICgpLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWxPcmRlciAoaWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnRhcGlQb3N0Q2FuY2VsT3JkZXIgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnb3JkZXJfaWQnOiBpZCxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdhcGknLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ10gKyAnLycgKyBhcGk7XG4gICAgICAgIGlmIChhcGkgPT0gJ2FwaScpIHtcbiAgICAgICAgICAgIHVybCArPSAnLycgKyB0aGlzLnZlcnNpb24gKyAnLycgKyB0aGlzLmltcGxvZGVQYXJhbXMgKHBhdGgsIHBhcmFtcyk7XG4gICAgICAgICAgICBsZXQgcXVlcnkgPSB0aGlzLm9taXQgKHBhcmFtcywgdGhpcy5leHRyYWN0UGFyYW1zIChwYXRoKSk7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMgKHF1ZXJ5KS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JyArIHRoaXMudXJsZW5jb2RlIChxdWVyeSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbm9uY2UgPSB0aGlzLm5vbmNlICgpO1xuICAgICAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5leHRlbmQgKHsgJ21ldGhvZCc6IHBhdGgsICdub25jZSc6IG5vbmNlIH0sIHBhcmFtcyk7XG4gICAgICAgICAgICBib2R5ID0gdGhpcy51cmxlbmNvZGUgKHF1ZXJ5KTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgICAgICAgICdrZXknOiB0aGlzLmFwaUtleSxcbiAgICAgICAgICAgICAgICAnc2lnbic6IHRoaXMuaG1hYyAodGhpcy5lbmNvZGUgKGJvZHkpLCB0aGlzLmVuY29kZSAodGhpcy5zZWNyZXQpLCAnc2hhNTEyJyksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdlcnJvcicgaW4gcmVzcG9uc2UpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgJyArIHRoaXMuanNvbiAocmVzcG9uc2UpKTtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIHl1bmJpID0ge1xuXG4gICAgJ2lkJzogJ3l1bmJpJyxcbiAgICAnbmFtZSc6ICdZVU5CSScsXG4gICAgJ2NvdW50cmllcyc6ICdDTicsXG4gICAgJ3JhdGVMaW1pdCc6IDEwMDAsXG4gICAgJ3ZlcnNpb24nOiAndjInLFxuICAgICdoYXNGZXRjaFRpY2tlcnMnOiB0cnVlLFxuICAgICd1cmxzJzoge1xuICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI4NTcwNTQ4LTRkNjQ2YzQwLTcxNDctMTFlNy05Y2Y2LTgzOWI5M2U2ZDYyMi5qcGcnLFxuICAgICAgICAnYXBpJzogJ2h0dHBzOi8veXVuYmkuY29tJyxcbiAgICAgICAgJ3d3dyc6ICdodHRwczovL3l1bmJpLmNvbScsXG4gICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAnaHR0cHM6Ly95dW5iaS5jb20vZG9jdW1lbnRzL2FwaS9ndWlkZScsXG4gICAgICAgICAgICAnaHR0cHM6Ly95dW5iaS5jb20vc3dhZ2dlci8nLFxuICAgICAgICBdLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ3RpY2tlcnMnLFxuICAgICAgICAgICAgICAgICd0aWNrZXJzL3ttYXJrZXR9JyxcbiAgICAgICAgICAgICAgICAnbWFya2V0cycsXG4gICAgICAgICAgICAgICAgJ29yZGVyX2Jvb2snLFxuICAgICAgICAgICAgICAgICdrJyxcbiAgICAgICAgICAgICAgICAnZGVwdGgnLFxuICAgICAgICAgICAgICAgICd0cmFkZXMnLFxuICAgICAgICAgICAgICAgICdrX3dpdGhfcGVuZGluZ190cmFkZXMnLFxuICAgICAgICAgICAgICAgICd0aW1lc3RhbXAnLFxuICAgICAgICAgICAgICAgICdhZGRyZXNzZXMve2FkZHJlc3N9JyxcbiAgICAgICAgICAgICAgICAncGFydG5lcnMvb3JkZXJzL3tpZH0vdHJhZGVzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgJ2dldCc6IFtcbiAgICAgICAgICAgICAgICAnZGVwb3NpdHMnLFxuICAgICAgICAgICAgICAgICdtZW1iZXJzL21lJyxcbiAgICAgICAgICAgICAgICAnZGVwb3NpdCcsXG4gICAgICAgICAgICAgICAgJ2RlcG9zaXRfYWRkcmVzcycsXG4gICAgICAgICAgICAgICAgJ29yZGVyJyxcbiAgICAgICAgICAgICAgICAnb3JkZXJzJyxcbiAgICAgICAgICAgICAgICAndHJhZGVzL215JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAncG9zdCc6IFtcbiAgICAgICAgICAgICAgICAnb3JkZXIvZGVsZXRlJyxcbiAgICAgICAgICAgICAgICAnb3JkZXJzJyxcbiAgICAgICAgICAgICAgICAnb3JkZXJzL211bHRpJyxcbiAgICAgICAgICAgICAgICAnb3JkZXJzL2NsZWFyJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoTWFya2V0cyAoKSB7XG4gICAgICAgIGxldCBtYXJrZXRzID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgbWFya2V0cy5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IG1hcmtldHNbcF07XG4gICAgICAgICAgICBsZXQgaWQgPSBtYXJrZXRbJ2lkJ107XG4gICAgICAgICAgICBsZXQgc3ltYm9sID0gbWFya2V0WyduYW1lJ107XG4gICAgICAgICAgICBsZXQgWyBiYXNlLCBxdW90ZSBdID0gc3ltYm9sLnNwbGl0ICgnLycpO1xuICAgICAgICAgICAgYmFzZSA9IHRoaXMuY29tbW9uQ3VycmVuY3lDb2RlIChiYXNlKTtcbiAgICAgICAgICAgIHF1b3RlID0gdGhpcy5jb21tb25DdXJyZW5jeUNvZGUgKHF1b3RlKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoICh7XG4gICAgICAgICAgICAgICAgJ2lkJzogaWQsXG4gICAgICAgICAgICAgICAgJ3N5bWJvbCc6IHN5bWJvbCxcbiAgICAgICAgICAgICAgICAnYmFzZSc6IGJhc2UsXG4gICAgICAgICAgICAgICAgJ3F1b3RlJzogcXVvdGUsXG4gICAgICAgICAgICAgICAgJ2luZm8nOiBtYXJrZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaEJhbGFuY2UgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVHZXRNZW1iZXJzTWUgKCk7XG4gICAgICAgIGxldCBiYWxhbmNlcyA9IHJlc3BvbnNlWydhY2NvdW50cyddO1xuICAgICAgICBsZXQgcmVzdWx0ID0geyAnaW5mbyc6IGJhbGFuY2VzIH07XG4gICAgICAgIGZvciAobGV0IGIgPSAwOyBiIDwgYmFsYW5jZXMubGVuZ3RoOyBiKyspIHtcbiAgICAgICAgICAgIGxldCBiYWxhbmNlID0gYmFsYW5jZXNbYl07XG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBiYWxhbmNlWydjdXJyZW5jeSddO1xuICAgICAgICAgICAgbGV0IHVwcGVyY2FzZSA9IGN1cnJlbmN5LnRvVXBwZXJDYXNlICgpO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiBwYXJzZUZsb2F0IChiYWxhbmNlWydiYWxhbmNlJ10pLFxuICAgICAgICAgICAgICAgICd1c2VkJzogcGFyc2VGbG9hdCAoYmFsYW5jZVsnbG9ja2VkJ10pLFxuICAgICAgICAgICAgICAgICd0b3RhbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhY2NvdW50Wyd0b3RhbCddID0gdGhpcy5zdW0gKGFjY291bnRbJ2ZyZWUnXSwgYWNjb3VudFsndXNlZCddKTtcbiAgICAgICAgICAgIHJlc3VsdFt1cHBlcmNhc2VdID0gYWNjb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgcCA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICBsZXQgb3JkZXJib29rID0gYXdhaXQgdGhpcy5wdWJsaWNHZXREZXB0aCAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICdtYXJrZXQnOiBwWydpZCddLFxuICAgICAgICAgICAgJ2xpbWl0JzogMzAwLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IG9yZGVyYm9va1sndGltZXN0YW1wJ10gKiAxMDAwO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBbXSxcbiAgICAgICAgICAgICdhc2tzJzogW10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgc2lkZXMgPSBbICdiaWRzJywgJ2Fza3MnIF07XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc2lkZXMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgIGxldCBzaWRlID0gc2lkZXNbc107XG4gICAgICAgICAgICBsZXQgb3JkZXJzID0gb3JkZXJib29rW3NpZGVdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgb3JkZXIgPSBvcmRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHByaWNlID0gcGFyc2VGbG9hdCAob3JkZXJbMF0pO1xuICAgICAgICAgICAgICAgIGxldCBhbW91bnQgPSBwYXJzZUZsb2F0IChvcmRlclsxXSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3NpZGVdLnB1c2ggKFsgcHJpY2UsIGFtb3VudCBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXN1bHRbJ2JpZHMnXSA9IHRoaXMuc29ydEJ5IChyZXN1bHRbJ2JpZHMnXSwgMCwgdHJ1ZSk7XG4gICAgICAgIHJlc3VsdFsnYXNrcyddID0gdGhpcy5zb3J0QnkgKHJlc3VsdFsnYXNrcyddLCAwKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgcGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KSB7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aWNrZXJbJ2F0J10gKiAxMDAwO1xuICAgICAgICB0aWNrZXIgPSB0aWNrZXJbJ3RpY2tlciddO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHRpbWVzdGFtcCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHRoaXMuaXNvODYwMSAodGltZXN0YW1wKSxcbiAgICAgICAgICAgICdoaWdoJzogcGFyc2VGbG9hdCAodGlja2VyWydoaWdoJ10pLFxuICAgICAgICAgICAgJ2xvdyc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbG93J10pLFxuICAgICAgICAgICAgJ2JpZCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnYnV5J10pLFxuICAgICAgICAgICAgJ2Fzayc6IHBhcnNlRmxvYXQgKHRpY2tlclsnc2VsbCddKSxcbiAgICAgICAgICAgICd2d2FwJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wZW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmlyc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbGFzdCc6IHBhcnNlRmxvYXQgKHRpY2tlclsnbGFzdCddKSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiBwYXJzZUZsb2F0ICh0aWNrZXJbJ3ZvbCddKSxcbiAgICAgICAgICAgICdpbmZvJzogdGlja2VyLFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlcnMgKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgdGlja2VycyA9IGF3YWl0IHRoaXMucHVibGljR2V0VGlja2VycyAoKTtcbiAgICAgICAgbGV0IGlkcyA9IE9iamVjdC5rZXlzICh0aWNrZXJzKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHt9O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IGlkID0gaWRzW2ldO1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBpZDtcbiAgICAgICAgICAgIGlmIChpZCBpbiB0aGlzLm1hcmtldHNfYnlfaWQpIHtcbiAgICAgICAgICAgICAgICBtYXJrZXQgPSB0aGlzLm1hcmtldHNfYnlfaWRbaWRdO1xuICAgICAgICAgICAgICAgIHN5bWJvbCA9IG1hcmtldFsnc3ltYm9sJ107XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCBiYXNlID0gaWQuc2xpY2UgKDAsIDMpO1xuICAgICAgICAgICAgICAgIGxldCBxdW90ZSA9IGlkLnNsaWNlICgzLCA2KTtcbiAgICAgICAgICAgICAgICBiYXNlID0gYmFzZS50b1VwcGVyQ2FzZSAoKTtcbiAgICAgICAgICAgICAgICBxdW90ZSA9IHF1b3RlLnRvVXBwZXJDYXNlICgpO1xuICAgICAgICAgICAgICAgIGJhc2UgPSB0aGlzLmNvbW1vbkN1cnJlbmN5Q29kZSAoYmFzZSk7XG4gICAgICAgICAgICAgICAgcXVvdGUgPSB0aGlzLmNvbW1vbkN1cnJlbmN5Q29kZSAocXVvdGUpO1xuICAgICAgICAgICAgICAgIGxldCBzeW1ib2wgPSBiYXNlICsgJy8nICsgcXVvdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgdGlja2VyID0gdGlja2Vyc1tpZF07XG4gICAgICAgICAgICByZXN1bHRbc3ltYm9sXSA9IHRoaXMucGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBwID0gdGhpcy5tYXJrZXQgKG1hcmtldCk7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0VGlja2Vyc01hcmtldCAoe1xuICAgICAgICAgICAgJ21hcmtldCc6IHBbJ2lkJ10sXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVRpY2tlciAocmVzcG9uc2UsIHApO1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRyYWRlcyAobWFya2V0LCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgbSA9IHRoaXMubWFya2V0IChtYXJrZXQpO1xuICAgICAgICByZXR1cm4gdGhpcy5wdWJsaWNHZXRUcmFkZXMgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAnbWFya2V0JzogbVsnaWQnXSxcbiAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChtYXJrZXQsIHR5cGUsIHNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBvcmRlciA9IHtcbiAgICAgICAgICAgICdtYXJrZXQnOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICAgICAgJ3NpZGUnOiBzaWRlLFxuICAgICAgICAgICAgJ3ZvbHVtZSc6IGFtb3VudC50b1N0cmluZyAoKSxcbiAgICAgICAgICAgICdvcmRfdHlwZSc6IHR5cGUsXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlID09ICdsaW1pdCcpIHtcbiAgICAgICAgICAgIG9yZGVyWydwcmljZSddID0gcHJpY2UudG9TdHJpbmcgKCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcml2YXRlUG9zdE9yZGVycyAodGhpcy5leHRlbmQgKG9yZGVyLCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdpbmZvJzogcmVzcG9uc2UsXG4gICAgICAgICAgICAnaWQnOiByZXNwb25zZVsnaWQnXS50b1N0cmluZyAoKSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnByaXZhdGVQb3N0T3JkZXJEZWxldGUgKHsgJ2lkJzogaWQgfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3QgKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHJlcXVlc3QgPSAnL2FwaS8nICsgdGhpcy52ZXJzaW9uICsgJy8nICsgdGhpcy5pbXBsb2RlUGFyYW1zIChwYXRoLCBwYXJhbXMpICsgJy5qc29uJztcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5vbWl0IChwYXJhbXMsIHRoaXMuZXh0cmFjdFBhcmFtcyAocGF0aCkpO1xuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmxzWydhcGknXSArIHJlcXVlc3Q7XG4gICAgICAgIGlmIChhcGkgPT0gJ3B1YmxpYycpIHtcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyAocXVlcnkpLmxlbmd0aClcbiAgICAgICAgICAgICAgICB1cmwgKz0gJz8nICsgdGhpcy51cmxlbmNvZGUgKHF1ZXJ5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBub25jZSA9IHRoaXMubm9uY2UgKCkudG9TdHJpbmcgKCk7XG4gICAgICAgICAgICBsZXQgcXVlcnkgPSB0aGlzLnVybGVuY29kZSAodGhpcy5rZXlzb3J0ICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgICAgICdhY2Nlc3Nfa2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ3RvbmNlJzogbm9uY2UsXG4gICAgICAgICAgICB9LCBwYXJhbXMpKSk7XG4gICAgICAgICAgICBsZXQgYXV0aCA9IG1ldGhvZCArICd8JyArIHJlcXVlc3QgKyAnfCcgKyBxdWVyeTtcbiAgICAgICAgICAgIGxldCBzaWduYXR1cmUgPSB0aGlzLmhtYWMgKHRoaXMuZW5jb2RlIChhdXRoKSwgdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSk7XG4gICAgICAgICAgICBsZXQgc3VmZml4ID0gcXVlcnkgKyAnJnNpZ25hdHVyZT0nICsgc2lnbmF0dXJlO1xuICAgICAgICAgICAgaWYgKG1ldGhvZCA9PSAnR0VUJykge1xuICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyBzdWZmaXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGJvZHkgPSBzdWZmaXg7XG4gICAgICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1MZW5ndGgnOiBib2R5Lmxlbmd0aCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2ggKHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5KTtcbiAgICAgICAgaWYgKCdlcnJvcicgaW4gcmVzcG9uc2UpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAodGhpcy5pZCArICcgJyArIHRoaXMuanNvbiAocmVzcG9uc2UpKTtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH0sXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIHphaWYgPSB7XG5cbiAgICAnaWQnOiAnemFpZicsXG4gICAgJ25hbWUnOiAnWmFpZicsXG4gICAgJ2NvdW50cmllcyc6ICdKUCcsXG4gICAgJ3JhdGVMaW1pdCc6IDIwMDAsXG4gICAgJ3ZlcnNpb24nOiAnMScsXG4gICAgJ3VybHMnOiB7XG4gICAgICAgICdsb2dvJzogJ2h0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEyOTQ0NTQvMjc3NjY5MjctMzljYTJhZGEtNWVlYi0xMWU3LTk3MmYtMWI0MTk5NTE4Y2E2LmpwZycsXG4gICAgICAgICdhcGknOiAnaHR0cHM6Ly9hcGkuemFpZi5qcCcsXG4gICAgICAgICd3d3cnOiAnaHR0cHM6Ly96YWlmLmpwJyxcbiAgICAgICAgJ2RvYyc6IFtcbiAgICAgICAgICAgICdodHRwOi8vdGVjaGJ1cmVhdS1hcGktZG9jdW1lbnQucmVhZHRoZWRvY3MuaW8vamEvbGF0ZXN0L2luZGV4Lmh0bWwnLFxuICAgICAgICAgICAgJ2h0dHBzOi8vY29ycC56YWlmLmpwL2FwaS1kb2NzJyxcbiAgICAgICAgICAgICdodHRwczovL2NvcnAuemFpZi5qcC9hcGktZG9jcy9hcGlfbGlua3MnLFxuICAgICAgICAgICAgJ2h0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL3phaWYuanAnLFxuICAgICAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS95b3UyMTk3OS9ub2RlLXphaWYnLFxuICAgICAgICBdLFxuICAgIH0sXG4gICAgJ2FwaSc6IHtcbiAgICAgICAgJ2FwaSc6IHtcbiAgICAgICAgICAgICdnZXQnOiBbXG4gICAgICAgICAgICAgICAgJ2RlcHRoL3twYWlyfScsXG4gICAgICAgICAgICAgICAgJ2N1cnJlbmNpZXMve3BhaXJ9JyxcbiAgICAgICAgICAgICAgICAnY3VycmVuY2llcy9hbGwnLFxuICAgICAgICAgICAgICAgICdjdXJyZW5jeV9wYWlycy97cGFpcn0nLFxuICAgICAgICAgICAgICAgICdjdXJyZW5jeV9wYWlycy9hbGwnLFxuICAgICAgICAgICAgICAgICdsYXN0X3ByaWNlL3twYWlyfScsXG4gICAgICAgICAgICAgICAgJ3RpY2tlci97cGFpcn0nLFxuICAgICAgICAgICAgICAgICd0cmFkZXMve3BhaXJ9JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgICd0YXBpJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2FjdGl2ZV9vcmRlcnMnLFxuICAgICAgICAgICAgICAgICdjYW5jZWxfb3JkZXInLFxuICAgICAgICAgICAgICAgICdkZXBvc2l0X2hpc3RvcnknLFxuICAgICAgICAgICAgICAgICdnZXRfaWRfaW5mbycsXG4gICAgICAgICAgICAgICAgJ2dldF9pbmZvJyxcbiAgICAgICAgICAgICAgICAnZ2V0X2luZm8yJyxcbiAgICAgICAgICAgICAgICAnZ2V0X3BlcnNvbmFsX2luZm8nLFxuICAgICAgICAgICAgICAgICd0cmFkZScsXG4gICAgICAgICAgICAgICAgJ3RyYWRlX2hpc3RvcnknLFxuICAgICAgICAgICAgICAgICd3aXRoZHJhdycsXG4gICAgICAgICAgICAgICAgJ3dpdGhkcmF3X2hpc3RvcnknLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgJ2VjYXBpJzoge1xuICAgICAgICAgICAgJ3Bvc3QnOiBbXG4gICAgICAgICAgICAgICAgJ2NyZWF0ZUludm9pY2UnLFxuICAgICAgICAgICAgICAgICdnZXRJbnZvaWNlJyxcbiAgICAgICAgICAgICAgICAnZ2V0SW52b2ljZUlkc0J5T3JkZXJOdW1iZXInLFxuICAgICAgICAgICAgICAgICdjYW5jZWxJbnZvaWNlJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoTWFya2V0cyAoKSB7XG4gICAgICAgIGxldCBtYXJrZXRzID0gYXdhaXQgdGhpcy5hcGlHZXRDdXJyZW5jeVBhaXJzQWxsICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgbWFya2V0cy5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgbGV0IG1hcmtldCA9IG1hcmtldHNbcF07XG4gICAgICAgICAgICBsZXQgaWQgPSBtYXJrZXRbJ2N1cnJlbmN5X3BhaXInXTtcbiAgICAgICAgICAgIGxldCBzeW1ib2wgPSBtYXJrZXRbJ25hbWUnXTtcbiAgICAgICAgICAgIGxldCBbIGJhc2UsIHF1b3RlIF0gPSBzeW1ib2wuc3BsaXQgKCcvJyk7XG4gICAgICAgICAgICByZXN1bHQucHVzaCAoe1xuICAgICAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICAgICAgICAgICdzeW1ib2wnOiBzeW1ib2wsXG4gICAgICAgICAgICAgICAgJ2Jhc2UnOiBiYXNlLFxuICAgICAgICAgICAgICAgICdxdW90ZSc6IHF1b3RlLFxuICAgICAgICAgICAgICAgICdpbmZvJzogbWFya2V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hCYWxhbmNlICgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy50YXBpUG9zdEdldEluZm8gKCk7XG4gICAgICAgIGxldCBiYWxhbmNlcyA9IHJlc3BvbnNlWydyZXR1cm4nXTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgJ2luZm8nOiBiYWxhbmNlcyB9O1xuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IHRoaXMuY3VycmVuY2llcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgbGV0IGN1cnJlbmN5ID0gdGhpcy5jdXJyZW5jaWVzW2NdO1xuICAgICAgICAgICAgbGV0IGxvd2VyY2FzZSA9IGN1cnJlbmN5LnRvTG93ZXJDYXNlICgpO1xuICAgICAgICAgICAgbGV0IGFjY291bnQgPSB7XG4gICAgICAgICAgICAgICAgJ2ZyZWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3VzZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ3RvdGFsJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmICgnZnVuZHMnIGluIGJhbGFuY2VzKVxuICAgICAgICAgICAgICAgIGlmIChsb3dlcmNhc2UgaW4gYmFsYW5jZXNbJ2Z1bmRzJ10pXG4gICAgICAgICAgICAgICAgICAgIGFjY291bnRbJ2ZyZWUnXSA9IGJhbGFuY2VzWydmdW5kcyddW2xvd2VyY2FzZV07XG4gICAgICAgICAgICBpZiAoJ2Z1bmRzX2luY2xfb3JkZXJzJyBpbiBiYWxhbmNlcylcbiAgICAgICAgICAgICAgICBpZiAobG93ZXJjYXNlIGluIGJhbGFuY2VzWydmdW5kc19pbmNsX29yZGVycyddKVxuICAgICAgICAgICAgICAgICAgICBhY2NvdW50Wyd0b3RhbCddID0gYmFsYW5jZXNbJ2Z1bmRzX2luY2xfb3JkZXJzJ11bbG93ZXJjYXNlXTtcbiAgICAgICAgICAgIGlmIChhY2NvdW50Wyd0b3RhbCddICYmIGFjY291bnRbJ2ZyZWUnXSlcbiAgICAgICAgICAgICAgICBhY2NvdW50Wyd1c2VkJ10gPSBhY2NvdW50Wyd0b3RhbCddIC0gYWNjb3VudFsnZnJlZSddO1xuICAgICAgICAgICAgcmVzdWx0W2N1cnJlbmN5XSA9IGFjY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hPcmRlckJvb2sgKG1hcmtldCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFya2V0cyAoKTtcbiAgICAgICAgbGV0IG9yZGVyYm9vayA9IGF3YWl0IHRoaXMuYXBpR2V0RGVwdGhQYWlyICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ3BhaXInOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICB9LCBwYXJhbXMpKTtcbiAgICAgICAgbGV0IHRpbWVzdGFtcCA9IHRoaXMubWlsbGlzZWNvbmRzICgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgJ2JpZHMnOiBvcmRlcmJvb2tbJ2JpZHMnXSxcbiAgICAgICAgICAgICdhc2tzJzogb3JkZXJib29rWydhc2tzJ10sXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFRpY2tlciAobWFya2V0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCB0aWNrZXIgPSBhd2FpdCB0aGlzLmFwaUdldFRpY2tlclBhaXIgKHtcbiAgICAgICAgICAgICdwYWlyJzogdGhpcy5tYXJrZXRJZCAobWFya2V0KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXAgPSB0aGlzLm1pbGxpc2Vjb25kcyAoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnaGlnaCc6IHRpY2tlclsnaGlnaCddLFxuICAgICAgICAgICAgJ2xvdyc6IHRpY2tlclsnbG93J10sXG4gICAgICAgICAgICAnYmlkJzogdGlja2VyWydiaWQnXSxcbiAgICAgICAgICAgICdhc2snOiB0aWNrZXJbJ2FzayddLFxuICAgICAgICAgICAgJ3Z3YXAnOiB0aWNrZXJbJ3Z3YXAnXSxcbiAgICAgICAgICAgICdvcGVuJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Nsb3NlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2ZpcnN0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2xhc3QnOiB0aWNrZXJbJ2xhc3QnXSxcbiAgICAgICAgICAgICdjaGFuZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncGVyY2VudGFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhdmVyYWdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Jhc2VWb2x1bWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncXVvdGVWb2x1bWUnOiB0aWNrZXJbJ3ZvbHVtZSddLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChtYXJrZXQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaUdldFRyYWRlc1BhaXIgKHRoaXMuZXh0ZW5kICh7XG4gICAgICAgICAgICAncGFpcic6IHRoaXMubWFya2V0SWQgKG1hcmtldCksXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVPcmRlciAobWFya2V0LCB0eXBlLCBzaWRlLCBhbW91bnQsIHByaWNlID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBpZiAodHlwZSA9PSAnbWFya2V0JylcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyBhbGxvd3MgbGltaXQgb3JkZXJzIG9ubHknKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy50YXBpUG9zdFRyYWRlICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ2N1cnJlbmN5X3BhaXInOiB0aGlzLm1hcmtldElkIChtYXJrZXQpLFxuICAgICAgICAgICAgJ2FjdGlvbic6IChzaWRlID09ICdidXknKSA/ICdiaWQnIDogJ2FzaycsXG4gICAgICAgICAgICAnYW1vdW50JzogYW1vdW50LFxuICAgICAgICAgICAgJ3ByaWNlJzogcHJpY2UsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2luZm8nOiByZXNwb25zZSxcbiAgICAgICAgICAgICdpZCc6IHJlc3BvbnNlWydyZXR1cm4nXVsnb3JkZXJfaWQnXS50b1N0cmluZyAoKSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsT3JkZXIgKGlkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICByZXR1cm4gdGhpcy50YXBpUG9zdENhbmNlbE9yZGVyICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgJ29yZGVyX2lkJzogaWQsXG4gICAgICAgIH0sIHBhcmFtcykpO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0IChwYXRoLCBhcGkgPSAnYXBpJywgbWV0aG9kID0gJ0dFVCcsIHBhcmFtcyA9IHt9LCBoZWFkZXJzID0gdW5kZWZpbmVkLCBib2R5ID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLnVybHNbJ2FwaSddICsgJy8nICsgYXBpO1xuICAgICAgICBpZiAoYXBpID09ICdhcGknKSB7XG4gICAgICAgICAgICB1cmwgKz0gJy8nICsgdGhpcy52ZXJzaW9uICsgJy8nICsgdGhpcy5pbXBsb2RlUGFyYW1zIChwYXRoLCBwYXJhbXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG5vbmNlID0gdGhpcy5ub25jZSAoKTtcbiAgICAgICAgICAgIGJvZHkgPSB0aGlzLnVybGVuY29kZSAodGhpcy5leHRlbmQgKHtcbiAgICAgICAgICAgICAgICAnbWV0aG9kJzogcGF0aCxcbiAgICAgICAgICAgICAgICAnbm9uY2UnOiBub25jZSxcbiAgICAgICAgICAgIH0sIHBhcmFtcykpO1xuICAgICAgICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtTGVuZ3RoJzogYm9keS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgJ0tleSc6IHRoaXMuYXBpS2V5LFxuICAgICAgICAgICAgICAgICdTaWduJzogdGhpcy5obWFjICh0aGlzLmVuY29kZSAoYm9keSksIHRoaXMuZW5jb2RlICh0aGlzLnNlY3JldCksICdzaGE1MTInKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCAodXJsLCBtZXRob2QsIGhlYWRlcnMsIGJvZHkpO1xuICAgICAgICBpZiAoJ2Vycm9yJyBpbiByZXNwb25zZSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgcmVzcG9uc2VbJ2Vycm9yJ10pO1xuICAgICAgICBpZiAoJ3N1Y2Nlc3MnIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgaWYgKCFyZXNwb25zZVsnc3VjY2VzcyddKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yICh0aGlzLmlkICsgJyAnICsgdGhpcy5qc29uIChyZXNwb25zZSkpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSxcbn1cblxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG52YXIgZXhjaGFuZ2VzID0ge1xuXG4gICAgJ18xYnJva2VyJzogICAgICBfMWJyb2tlcixcbiAgICAnXzFidGN4ZSc6ICAgICAgIF8xYnRjeGUsXG4gICAgJ2FueHBybyc6ICAgICAgICBhbnhwcm8sXG4gICAgJ2JpbmFuY2UnOiAgICAgICBiaW5hbmNlLFxuICAgICdiaXQyYyc6ICAgICAgICAgYml0MmMsXG4gICAgJ2JpdGJheSc6ICAgICAgICBiaXRiYXksXG4gICAgJ2JpdGJheXMnOiAgICAgICBiaXRiYXlzLFxuICAgICdiaXRjb2luY29pZCc6ICAgYml0Y29pbmNvaWQsXG4gICAgJ2JpdGZpbmV4JzogICAgICBiaXRmaW5leCxcbiAgICAnYml0Zmx5ZXInOiAgICAgIGJpdGZseWVyLFxuICAgICdiaXRsaXNoJzogICAgICAgYml0bGlzaCxcbiAgICAnYml0bWFya2V0JzogICAgIGJpdG1hcmtldCxcbiAgICAnYml0bWV4JzogICAgICAgIGJpdG1leCxcbiAgICAnYml0c28nOiAgICAgICAgIGJpdHNvLFxuICAgICdiaXRzdGFtcCc6ICAgICAgYml0c3RhbXAsXG4gICAgJ2JpdHRyZXgnOiAgICAgICBiaXR0cmV4LFxuICAgICdibDNwJzogICAgICAgICAgYmwzcCxcbiAgICAnYnRjY2hpbmEnOiAgICAgIGJ0Y2NoaW5hLFxuICAgICdidGNlJzogICAgICAgICAgYnRjZSxcbiAgICAnYnRjZXhjaGFuZ2UnOiAgIGJ0Y2V4Y2hhbmdlLFxuICAgICdidGNtYXJrZXRzJzogICAgYnRjbWFya2V0cyxcbiAgICAnYnRjdHJhZGV1YSc6ICAgIGJ0Y3RyYWRldWEsXG4gICAgJ2J0Y3R1cmsnOiAgICAgICBidGN0dXJrLFxuICAgICdidGN4JzogICAgICAgICAgYnRjeCxcbiAgICAnYnRlcic6ICAgICAgICAgIGJ0ZXIsXG4gICAgJ2J4aW50aCc6ICAgICAgICBieGludGgsXG4gICAgJ2NjZXgnOiAgICAgICAgICBjY2V4LFxuICAgICdjZXgnOiAgICAgICAgICAgY2V4LFxuICAgICdjaGJ0Yyc6ICAgICAgICAgY2hidGMsXG4gICAgJ2NoaWxlYml0JzogICAgICBjaGlsZWJpdCxcbiAgICAnY29pbmNoZWNrJzogICAgIGNvaW5jaGVjayxcbiAgICAnY29pbmZsb29yJzogICAgIGNvaW5mbG9vcixcbiAgICAnY29pbmdpJzogICAgICAgIGNvaW5naSxcbiAgICAnY29pbm1hcmtldGNhcCc6IGNvaW5tYXJrZXRjYXAsXG4gICAgJ2NvaW5tYXRlJzogICAgICBjb2lubWF0ZSxcbiAgICAnY29pbnNlY3VyZSc6ICAgIGNvaW5zZWN1cmUsXG4gICAgJ2NvaW5zcG90JzogICAgICBjb2luc3BvdCxcbiAgICAnY3J5cHRvcGlhJzogICAgIGNyeXB0b3BpYSxcbiAgICAnZHN4JzogICAgICAgICAgIGRzeCxcbiAgICAnZXhtbyc6ICAgICAgICAgIGV4bW8sXG4gICAgJ2Zsb3didGMnOiAgICAgICBmbG93YnRjLFxuICAgICdmb3hiaXQnOiAgICAgICAgZm94Yml0LFxuICAgICdmeWJzZSc6ICAgICAgICAgZnlic2UsXG4gICAgJ2Z5YnNnJzogICAgICAgICBmeWJzZyxcbiAgICAnZ2F0ZWNvaW4nOiAgICAgIGdhdGVjb2luLFxuICAgICdnZGF4JzogICAgICAgICAgZ2RheCxcbiAgICAnZ2VtaW5pJzogICAgICAgIGdlbWluaSxcbiAgICAnaGl0YnRjJzogICAgICAgIGhpdGJ0YyxcbiAgICAnaHVvYmknOiAgICAgICAgIGh1b2JpLFxuICAgICdpdGJpdCc6ICAgICAgICAgaXRiaXQsXG4gICAgJ2p1YmknOiAgICAgICAgICBqdWJpLFxuICAgICdrcmFrZW4nOiAgICAgICAga3Jha2VuLFxuICAgICdsYWtlYnRjJzogICAgICAgbGFrZWJ0YyxcbiAgICAnbGl2ZWNvaW4nOiAgICAgIGxpdmVjb2luLFxuICAgICdsaXF1aSc6ICAgICAgICAgbGlxdWksXG4gICAgJ2x1bm8nOiAgICAgICAgICBsdW5vLFxuICAgICdtZXJjYWRvJzogICAgICAgbWVyY2FkbyxcbiAgICAnb2tjb2luY255JzogICAgIG9rY29pbmNueSxcbiAgICAnb2tjb2ludXNkJzogICAgIG9rY29pbnVzZCxcbiAgICAnb2tleCc6ICAgICAgICAgIG9rZXgsXG4gICAgJ3BheW1pdW0nOiAgICAgICBwYXltaXVtLFxuICAgICdwb2xvbmlleCc6ICAgICAgcG9sb25pZXgsXG4gICAgJ3F1YWRyaWdhY3gnOiAgICBxdWFkcmlnYWN4LFxuICAgICdxdW9pbmUnOiAgICAgICAgcXVvaW5lLFxuICAgICdzb3V0aHhjaGFuZ2UnOiAgc291dGh4Y2hhbmdlLFxuICAgICdzdXJiaXRjb2luJzogICAgc3VyYml0Y29pbixcbiAgICAndGhlcm9jayc6ICAgICAgIHRoZXJvY2ssXG4gICAgJ3VyZHViaXQnOiAgICAgICB1cmR1Yml0LFxuICAgICd2YXVsdG9ybyc6ICAgICAgdmF1bHRvcm8sXG4gICAgJ3ZidGMnOiAgICAgICAgICB2YnRjLFxuICAgICd2aXJ3b3gnOiAgICAgICAgdmlyd294LFxuICAgICd4YnRjZSc6ICAgICAgICAgeGJ0Y2UsXG4gICAgJ3lvYml0JzogICAgICAgICB5b2JpdCxcbiAgICAneXVuYmknOiAgICAgICAgIHl1bmJpLFxuICAgICd6YWlmJzogICAgICAgICAgemFpZixcbn1cblxubGV0IGRlZmluZUFsbEV4Y2hhbmdlcyA9IGZ1bmN0aW9uIChleGNoYW5nZXMpIHtcbiAgICBsZXQgcmVzdWx0ID0ge31cbiAgICBmb3IgKGxldCBpZCBpbiBleGNoYW5nZXMpXG4gICAgICAgIHJlc3VsdFtpZF0gPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEV4Y2hhbmdlIChleHRlbmQgKGV4Y2hhbmdlc1tpZF0sIHBhcmFtcykpXG4gICAgICAgIH1cbiAgICByZXN1bHQuZXhjaGFuZ2VzID0gT2JqZWN0LmtleXMgKGV4Y2hhbmdlcylcbiAgICByZXR1cm4gcmVzdWx0XG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuY29uc3QgY2N4dCA9IE9iamVjdC5hc3NpZ24gKGRlZmluZUFsbEV4Y2hhbmdlcyAoZXhjaGFuZ2VzKSwge1xuXG4gICAgdmVyc2lvbixcblxuICAgIC8vIGV4Y2VwdGlvbnNcblxuICAgIENDWFRFcnJvcixcbiAgICBFeGNoYW5nZUVycm9yLFxuICAgIE5vdFN1cHBvcnRlZCxcbiAgICBBdXRoZW50aWNhdGlvbkVycm9yLFxuICAgIEluc3VmZmljaWVudEZ1bmRzLFxuICAgIE5ldHdvcmtFcnJvcixcbiAgICBERG9TUHJvdGVjdGlvbixcbiAgICBSZXF1ZXN0VGltZW91dCxcbiAgICBFeGNoYW5nZU5vdEF2YWlsYWJsZSxcblxuICAgIC8vIGNvbW1vbiB1dGlsaXR5IGZ1bmN0aW9uc1xuXG4gICAgc2xlZXAsXG4gICAgdGltZW91dCxcbiAgICBjYXBpdGFsaXplLFxuICAgIGtleXNvcnQsXG4gICAgZXh0ZW5kLFxuICAgIG9taXQsXG4gICAgaW5kZXhCeSxcbiAgICBzb3J0QnksXG4gICAgZmxhdHRlbixcbiAgICB1bmlxdWUsXG4gICAgcGx1Y2ssXG4gICAgdXJsZW5jb2RlLFxuICAgIHN1bSxcbiAgICBkZWNpbWFsLFxuXG4gICAgLy8gdW5kZXJzY29yZSBhbGlhc2VzXG5cbiAgICBpbmRleF9ieTogaW5kZXhCeSxcbiAgICBzb3J0X2J5OiBzb3J0QnksXG5cbiAgICAvLyBjcnlwdG8gZnVuY3Rpb25zXG5cbiAgICBiaW5hcnlDb25jYXQsXG4gICAgc3RyaW5nVG9CaW5hcnksXG4gICAgYmluYXJ5VG9TdHJpbmcsXG4gICAgc3RyaW5nVG9CYXNlNjQsXG4gICAgdXRmMTZUb0Jhc2U2NCxcbiAgICBiYXNlNjRUb0JpbmFyeSxcbiAgICBiYXNlNjRUb1N0cmluZyxcbiAgICB1cmxlbmNvZGVCYXNlNjQsXG4gICAgaGFzaCxcbiAgICBobWFjLFxuICAgIGp3dCxcblxufSlcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5pZiAoaXNDb21tb25KUykge1xuXG4gICAgbW9kdWxlLmV4cG9ydHMgPSBjY3h0XG5cbn0gZWxzZSB7XG5cbiAgICB3aW5kb3cuY2N4dCA9IGNjeHRcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG59KSAoKSAvLyBlbmQgb2YgbmFtZXNwYWNlXG4iXX0= \ No newline at end of file diff --git a/build/ccxt.php b/build/ccxt.php index b027afd20bb0..231468c43cff 100644 --- a/build/ccxt.php +++ b/build/ccxt.php @@ -44,7 +44,7 @@ class DDoSProtection extends NetworkError {} class RequestTimeout extends NetworkError {} class ExchangeNotAvailable extends NetworkError {} -$version = '1.4.96'; +$version = '1.4.97'; $curl_errors = array ( 0 => 'CURLE_OK', diff --git a/ccxt.js b/ccxt.js index ed8bced12ddf..15c6bb7ca243 100644 --- a/ccxt.js +++ b/ccxt.js @@ -38,7 +38,7 @@ const CryptoJS = require ('crypto-js') //----------------------------------------------------------------------------- // this is updated by vss.js when building -const version = '1.4.96' +const version = '1.4.97' //----------------------------------------------------------------------------- // platform detection diff --git a/ccxt.php b/ccxt.php index f4c3fe95fe0b..238c019e0f81 100644 --- a/ccxt.php +++ b/ccxt.php @@ -44,7 +44,7 @@ class DDoSProtection extends NetworkError {} class RequestTimeout extends NetworkError {} class ExchangeNotAvailable extends NetworkError {} -$version = '1.4.96'; +$version = '1.4.97'; $curl_errors = array ( 0 => 'CURLE_OK', diff --git a/ccxt/version.py b/ccxt/version.py index bc2b7c1784b3..4db5878e9809 100644 --- a/ccxt/version.py +++ b/ccxt/version.py @@ -26,6 +26,6 @@ #------------------------------------------------------------------------------ -__version__ = '1.4.96' +__version__ = '1.4.97' #============================================================================== diff --git a/package.json b/package.json index 54f4a2b115bc..765aa7befbc8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ccxt", - "version": "1.4.96", + "version": "1.4.97", "description": "A library for cryptocurrency trading and e-commerce with support for many bitcoin/ether/altcoin exchange markets and merchant APIs", "main": "build/ccxt.es5.js", "unpkg": "build/ccxt.browser.js",