Comparing version 1.0.17 to 1.0.18
@@ -0,1 +1,8 @@ | ||
## [1.0.18](https://github.com/GMOD/bbi-js/compare/v1.0.17...v1.0.18) (2019-05-02) | ||
- Improve error handling of the observables (issue #20, pull #21) | ||
- Bump generic-filehandle to 1.0.9 to fix compatibility with native browser fetch | ||
## [1.0.17](https://github.com/GMOD/bbi-js/compare/v1.0.16...v1.0.17) (2019-04-30) | ||
@@ -2,0 +9,0 @@ |
@@ -37,2 +37,3 @@ "use strict"; | ||
/* A class that provides memoization for abortable calls */ | ||
var AbortAwareCache = | ||
@@ -48,2 +49,9 @@ /*#__PURE__*/ | ||
key: "abortableMemoize", | ||
/* | ||
* Takes a function that has one argument, abortSignal, that returns a promise | ||
* and it works by retrying the function if a previous attempt to initialize the parse cache was aborted | ||
* @param fn - an AbortableCallback | ||
* @return a memoized version of the AbortableCallback using the AbortAwareCache | ||
*/ | ||
value: function abortableMemoize(fn) { | ||
@@ -77,3 +85,9 @@ var cache = this.cache; | ||
}(); | ||
/* get the compiled parsers for different sections of the bigwig file | ||
* | ||
* @param isBE - is big endian, typically false | ||
* @return an object with compiled parsers | ||
*/ | ||
function getParsers(isBE) { | ||
@@ -635,2 +649,2 @@ var le = isBE ? 'big' : 'little'; | ||
exports.BBI = BBI; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9iYmkudHMiXSwibmFtZXMiOlsiQklHX1dJR19NQUdJQyIsIkJJR19CRURfTUFHSUMiLCJBYm9ydEF3YXJlQ2FjaGUiLCJNYXAiLCJmbiIsImNhY2hlIiwiYWJvcnRhYmxlTWVtb2l6ZUZuIiwic2lnbmFsIiwiaGFzIiwiZm5SZXR1cm4iLCJzZXQiLCJjYXRjaCIsImFib3J0ZWQiLCJkZWxldGUiLCJnZXQiLCJlIiwiY29kZSIsIm5hbWUiLCJnZXRQYXJzZXJzIiwiaXNCRSIsImxlIiwiaGVhZGVyUGFyc2VyIiwiUGFyc2VyIiwiZW5kaWFuZXNzIiwiaW50MzIiLCJ1aW50MTYiLCJ1aW50NjQiLCJ1aW50MzIiLCJhcnJheSIsImxlbmd0aCIsInR5cGUiLCJ0b3RhbFN1bW1hcnlQYXJzZXIiLCJkb3VibGUiLCJjaHJvbVRyZWVQYXJzZXIiLCJpc0xlYWZOb2RlIiwidWludDgiLCJza2lwIiwiQkJJIiwib3B0aW9ucyIsImZpbGVoYW5kbGUiLCJyZW5hbWVSZWZTZXFzIiwicGF0aCIsInVybCIsInMiLCJoZWFkZXJDYWNoZSIsImJiaSIsIlJlbW90ZUZpbGUiLCJMb2NhbEZpbGUiLCJFcnJvciIsImdldEhlYWRlciIsImFib3J0YWJsZU1lbW9pemUiLCJfZ2V0SGVhZGVyIiwiYmluZCIsImFib3J0U2lnbmFsIiwiX2lzQmlnRW5kaWFuIiwiaXNCaWdFbmRpYW4iLCJfZ2V0TWFpbkhlYWRlciIsImhlYWRlciIsIl9yZWFkQ2hyb21UcmVlIiwiY2hyb21zIiwicmV0IiwiYnVmIiwiQnVmZmVyIiwiYWxsb2MiLCJyZWFkIiwicGFyc2UiLCJyZXN1bHQiLCJmaWxlVHlwZSIsIm1hZ2ljIiwiYXNPZmZzZXQiLCJhdXRvU3FsIiwic2xpY2UiLCJpbmRleE9mIiwidG9TdHJpbmciLCJ0b3RhbFN1bW1hcnlPZmZzZXQiLCJ0YWlsIiwidG90YWxTdW1tYXJ5IiwiYWxsb2NVbnNhZmUiLCJyZWFkSW50MzJMRSIsInJlYWRJbnQzMkJFIiwicmVmc0J5TnVtYmVyIiwicmVmc0J5TmFtZSIsImNocm9tVHJlZU9mZnNldCIsInVuem9vbWVkRGF0YU9mZnNldCIsImRhdGEiLCJwIiwia2V5U2l6ZSIsImxlYWZOb2RlUGFyc2VyIiwic3RyaW5nIiwic3RyaXBOdWxsIiwibm9ubGVhZk5vZGVQYXJzZXIiLCJyb290Tm9kZU9mZnNldCIsImJwdFJlYWROb2RlIiwiY3VycmVudE9mZnNldCIsIm9mZnNldCIsImNudCIsIm4iLCJsZWFmUmV0Iiwia2V5IiwicmVmSWQiLCJyZWZTaXplIiwicmVmUmVjIiwiaWQiLCJub25sZWFmUmV0IiwiY2hpbGRPZmZzZXQiLCJ1bnpvb21lZEluZGV4T2Zmc2V0Iiwiem9vbUxldmVscyIsInVuY29tcHJlc3NCdWZTaXplIiwibnpsIiwiY2lyTGVuIiwiZGF0YU9mZnNldCIsIkJsb2NrVmlldyIsInJlZk5hbWUiLCJzdGFydCIsImVuZCIsIm9wdHMiLCJzY2FsZSIsImNock5hbWUiLCJiYXNlc1BlclNwYW4iLCJnZXRWaWV3IiwidmlldyIsIk9ic2VydmFibGUiLCJvYnNlcnZlciIsInJlYWRXaWdEYXRhIiwiZ2V0RmVhdHVyZVN0cmVhbSIsIm9iIiwicGlwZSIsImFjYyIsImN1cnIiLCJjb25jYXQiLCJ0b1Byb21pc2UiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUVBOztBQUNBOztBQUVBLElBQU1BLGFBQWEsR0FBRyxDQUFDLFVBQXZCO0FBQ0EsSUFBTUMsYUFBYSxHQUFHLENBQUMsVUFBdkI7O0lBaURNQyxlOzs7OztpREFDeUMsSUFBSUMsR0FBSixFOzs7OztxQ0FFckJDLEUsRUFBb0Y7QUFBQSxVQUNsR0MsS0FEa0csR0FDeEYsSUFEd0YsQ0FDbEdBLEtBRGtHO0FBRTFHLGFBQU8sU0FBU0Msa0JBQVQsQ0FBNEJDLE1BQTVCLEVBQWdFO0FBQ3JFLFlBQUksQ0FBQ0YsS0FBSyxDQUFDRyxHQUFOLENBQVVKLEVBQVYsQ0FBTCxFQUFvQjtBQUNsQixjQUFNSyxRQUFRLEdBQUdMLEVBQUUsQ0FBQ0csTUFBRCxDQUFuQjtBQUNBRixVQUFBQSxLQUFLLENBQUNLLEdBQU4sQ0FBVU4sRUFBVixFQUFjSyxRQUFkOztBQUNBLGNBQUlGLE1BQUosRUFBWTtBQUNWRSxZQUFBQSxRQUFRLENBQUNFLEtBQVQsQ0FDRSxZQUFZO0FBQ1Ysa0JBQUlKLE1BQU0sQ0FBQ0ssT0FBWCxFQUFvQlAsS0FBSyxDQUFDUSxNQUFOLENBQWFULEVBQWI7QUFDckIsYUFISDtBQUtEOztBQUNELGlCQUFPQyxLQUFLLENBQUNTLEdBQU4sQ0FBVVYsRUFBVixDQUFQO0FBQ0Q7O0FBQ0QsZUFBT0MsS0FBSyxDQUFDUyxHQUFOLENBQVVWLEVBQVYsRUFBY08sS0FBZCxDQUNMLFVBQUNJLENBQUQsRUFBZ0Q7QUFDOUMsY0FBSUEsQ0FBQyxDQUFDQyxJQUFGLEtBQVcsYUFBWCxJQUE0QkQsQ0FBQyxDQUFDRSxJQUFGLEtBQVcsWUFBM0MsRUFBeUQ7QUFDdkQsbUJBQU9iLEVBQUUsQ0FBQ0csTUFBRCxDQUFUO0FBQ0Q7O0FBQ0QsZ0JBQU1RLENBQU47QUFDRCxTQU5JLENBQVA7QUFRRCxPQXJCRDtBQXNCRDs7Ozs7QUFHSCxTQUFTRyxVQUFULENBQW9CQyxJQUFwQixFQUF3QztBQUN0QyxNQUFNQyxFQUFFLEdBQUdELElBQUksR0FBRyxLQUFILEdBQVcsUUFBMUI7QUFDQSxNQUFNRSxZQUFZLEdBQUcsSUFBSUMsb0JBQUosR0FDbEJDLFNBRGtCLENBQ1JILEVBRFEsRUFFbEJJLEtBRmtCLENBRVosT0FGWSxFQUdsQkMsTUFIa0IsQ0FHWCxTQUhXLEVBSWxCQSxNQUprQixDQUlYLGVBSlcsRUFLbEJDLE1BTGtCLENBS1gsaUJBTFcsRUFNbEJBLE1BTmtCLENBTVgsb0JBTlcsRUFPbEJBLE1BUGtCLENBT1gscUJBUFcsRUFRbEJELE1BUmtCLENBUVgsWUFSVyxFQVNsQkEsTUFUa0IsQ0FTWCxtQkFUVyxFQVVsQkMsTUFWa0IsQ0FVWCxVQVZXLEVBVUM7QUFWRCxHQVdsQkEsTUFYa0IsQ0FXWCxvQkFYVyxFQVlsQkMsTUFaa0IsQ0FZWCxtQkFaVyxFQWFsQkQsTUFia0IsQ0FhWCxpQkFiVyxFQWFRO0FBYlIsR0FjbEJFLEtBZGtCLENBY1osWUFkWSxFQWNFO0FBQ25CQyxJQUFBQSxNQUFNLEVBQUUsZUFEVztBQUVuQkMsSUFBQUEsSUFBSSxFQUFFLElBQUlSLG9CQUFKLEdBQ0hLLE1BREcsQ0FDSSxnQkFESixFQUVIQSxNQUZHLENBRUksVUFGSixFQUdIRCxNQUhHLENBR0ksWUFISixFQUlIQSxNQUpHLENBSUksYUFKSjtBQUZhLEdBZEYsQ0FBckI7QUF1QkEsTUFBTUssa0JBQWtCLEdBQUcsSUFBSVQsb0JBQUosR0FDeEJDLFNBRHdCLENBQ2RILEVBRGMsRUFFeEJNLE1BRndCLENBRWpCLGNBRmlCLEVBR3hCTSxNQUh3QixDQUdqQixVQUhpQixFQUl4QkEsTUFKd0IsQ0FJakIsVUFKaUIsRUFLeEJBLE1BTHdCLENBS2pCLFVBTGlCLEVBTXhCQSxNQU53QixDQU1qQixpQkFOaUIsQ0FBM0I7QUFRQSxNQUFNQyxlQUFlLEdBQUcsSUFBSVgsb0JBQUosR0FDckJDLFNBRHFCLENBQ1hILEVBRFcsRUFFckJPLE1BRnFCLENBRWQsT0FGYyxFQUdyQkEsTUFIcUIsQ0FHZCxXQUhjLEVBSXJCQSxNQUpxQixDQUlkLFNBSmMsRUFLckJBLE1BTHFCLENBS2QsU0FMYyxFQU1yQkQsTUFOcUIsQ0FNZCxXQU5jLENBQXhCO0FBUUEsTUFBTVEsVUFBVSxHQUFHLElBQUlaLG9CQUFKLEdBQ2hCQyxTQURnQixDQUNOSCxFQURNLEVBRWhCZSxLQUZnQixDQUVWLFlBRlUsRUFHaEJDLElBSGdCLENBR1gsQ0FIVyxFQUloQlgsTUFKZ0IsQ0FJVCxLQUpTLENBQW5CO0FBTUEsU0FBTztBQUNMUSxJQUFBQSxlQUFlLEVBQWZBLGVBREs7QUFFTEYsSUFBQUEsa0JBQWtCLEVBQWxCQSxrQkFGSztBQUdMVixJQUFBQSxZQUFZLEVBQVpBLFlBSEs7QUFJTGEsSUFBQUEsVUFBVSxFQUFWQTtBQUpLLEdBQVA7QUFNRDs7SUFFcUJHLEc7OztBQU9wQjs7Ozs7QUFNQTs7Ozs7O0FBTUEsaUJBT0U7QUFBQSxRQU5BQyxPQU1BLHVFQURJLEVBQ0o7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFDUUMsVUFEUixHQUNpREQsT0FEakQsQ0FDUUMsVUFEUjtBQUFBLFFBQ29CQyxhQURwQixHQUNpREYsT0FEakQsQ0FDb0JFLGFBRHBCO0FBQUEsUUFDbUNDLElBRG5DLEdBQ2lESCxPQURqRCxDQUNtQ0csSUFEbkM7QUFBQSxRQUN5Q0MsR0FEekMsR0FDaURKLE9BRGpELENBQ3lDSSxHQUR6Qzs7QUFFQSxTQUFLRixhQUFMLEdBQXFCQSxhQUFhLElBQUssVUFBQ0csQ0FBRDtBQUFBLGFBQXVCQSxDQUF2QjtBQUFBLEtBQXZDOztBQUNBLFNBQUtDLFdBQUwsR0FBbUIsSUFBSTFDLGVBQUosRUFBbkI7O0FBQ0EsUUFBSXFDLFVBQUosRUFBZ0I7QUFDZCxXQUFLTSxHQUFMLEdBQVdOLFVBQVg7QUFDRCxLQUZELE1BRU8sSUFBSUcsR0FBSixFQUFTO0FBQ2QsV0FBS0csR0FBTCxHQUFXLElBQUlDLDZCQUFKLENBQWVKLEdBQWYsQ0FBWDtBQUNELEtBRk0sTUFFQSxJQUFJRCxJQUFKLEVBQVU7QUFDZixXQUFLSSxHQUFMLEdBQVcsSUFBSUUsNEJBQUosQ0FBY04sSUFBZCxDQUFYO0FBQ0QsS0FGTSxNQUVBO0FBQ0wsWUFBTSxJQUFJTyxLQUFKLENBQVUsZUFBVixDQUFOO0FBQ0Q7O0FBQ0QsU0FBS0MsU0FBTCxHQUFpQixLQUFLTCxXQUFMLENBQWlCTSxnQkFBakIsQ0FBa0MsS0FBS0MsVUFBTCxDQUFnQkMsSUFBaEIsQ0FBcUIsSUFBckIsQ0FBbEMsQ0FBakI7QUFDRDs7Ozs7OztpREFFd0JDLFc7Ozs7Ozs7dUJBQ0csS0FBS0MsWUFBTCxDQUFrQkQsV0FBbEIsQzs7O0FBQXBCRSxnQkFBQUEsVzs7dUJBQ2UsS0FBS0MsY0FBTCxDQUFvQkgsV0FBcEIsQzs7O0FBQWZJLGdCQUFBQSxNOzt1QkFDZSxLQUFLQyxjQUFMLENBQW9CTCxXQUFwQixDOzs7QUFBZk0sZ0JBQUFBLE07aUZBQ01GLE0sRUFBV0UsTTtBQUFRSixrQkFBQUEsV0FBVyxFQUFYQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztrREFHSkYsVzs7Ozs7OytCQUNmbkMsVTs7dUJBQWlCLEtBQUtvQyxZQUFMLEU7Ozs7QUFBdkJNLGdCQUFBQSxHO0FBQ0FDLGdCQUFBQSxHLEdBQU1DLE1BQU0sQ0FBQ0MsS0FBUCxDQUFhLElBQWIsQzs7dUJBQ04sS0FBS2xCLEdBQUwsQ0FBU21CLElBQVQsQ0FBY0gsR0FBZCxFQUFtQixDQUFuQixFQUFzQixJQUF0QixFQUE0QixDQUE1QixFQUErQjtBQUFFdEQsa0JBQUFBLE1BQU0sRUFBRThDO0FBQVYsaUJBQS9CLEM7OztBQUNBSSxnQkFBQUEsTSxHQUFTRyxHQUFHLENBQUN2QyxZQUFKLENBQWlCNEMsS0FBakIsQ0FBdUJKLEdBQXZCLEVBQTRCSyxNO0FBQzNDVCxnQkFBQUEsTUFBTSxDQUFDVSxRQUFQLEdBQWtCVixNQUFNLENBQUNXLEtBQVAsS0FBaUJuRSxhQUFqQixHQUFpQyxRQUFqQyxHQUE0QyxRQUE5RDs7QUFFQSxvQkFBSXdELE1BQU0sQ0FBQ1ksUUFBWCxFQUFxQjtBQUNuQlosa0JBQUFBLE1BQU0sQ0FBQ2EsT0FBUCxHQUFpQlQsR0FBRyxDQUFDVSxLQUFKLENBQVVkLE1BQU0sQ0FBQ1ksUUFBakIsRUFBMkJSLEdBQUcsQ0FBQ1csT0FBSixDQUFZLENBQVosRUFBZWYsTUFBTSxDQUFDWSxRQUF0QixDQUEzQixFQUE0REksUUFBNUQsQ0FBcUUsTUFBckUsQ0FBakI7QUFDRDs7QUFDRCxvQkFBSWhCLE1BQU0sQ0FBQ2lCLGtCQUFYLEVBQStCO0FBQ3ZCQyxrQkFBQUEsSUFEdUIsR0FDaEJkLEdBQUcsQ0FBQ1UsS0FBSixDQUFVZCxNQUFNLENBQUNpQixrQkFBakIsQ0FEZ0I7QUFFN0JqQixrQkFBQUEsTUFBTSxDQUFDbUIsWUFBUCxHQUFzQmhCLEdBQUcsQ0FBQzdCLGtCQUFKLENBQXVCa0MsS0FBdkIsQ0FBNkJVLElBQTdCLEVBQW1DVCxNQUF6RDtBQUNEOztrREFDTVQsTTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2tEQUdrQkosVzs7Ozs7O0FBQ25CUSxnQkFBQUEsRyxHQUFNQyxNQUFNLENBQUNlLFdBQVAsQ0FBbUIsQ0FBbkIsQzs7dUJBQ04sS0FBS2hDLEdBQUwsQ0FBU21CLElBQVQsQ0FBY0gsR0FBZCxFQUFtQixDQUFuQixFQUFzQixDQUF0QixFQUF5QixDQUF6QixFQUE0QjtBQUFFdEQsa0JBQUFBLE1BQU0sRUFBRThDO0FBQVYsaUJBQTVCLEM7OztBQUNGTyxnQkFBQUEsRyxHQUFNQyxHQUFHLENBQUNpQixXQUFKLENBQWdCLENBQWhCLEM7O3NCQUNObEIsR0FBRyxLQUFLNUQsYUFBUixJQUF5QjRELEdBQUcsS0FBSzNELGE7Ozs7O2tEQUM1QixLOzs7QUFFVDJELGdCQUFBQSxHQUFHLEdBQUdDLEdBQUcsQ0FBQ2tCLFdBQUosQ0FBZ0IsQ0FBaEIsQ0FBTjs7c0JBQ0luQixHQUFHLEtBQUs1RCxhQUFSLElBQXlCNEQsR0FBRyxLQUFLM0QsYTs7Ozs7a0RBQzVCLEk7OztzQkFFSCxJQUFJK0MsS0FBSixDQUFVLDBCQUFWLEM7Ozs7Ozs7Ozs7Ozs7OztRQUdSOzs7Ozs7O2tEQUM2QkssVzs7Ozs7Ozs7O3VCQUNOLEtBQUtHLGNBQUwsQ0FBb0JILFdBQXBCLEM7OztBQUFmSSxnQkFBQUEsTTs7dUJBQ2EsS0FBS0gsWUFBTCxDQUFrQkQsV0FBbEIsQzs7O0FBQWJsQyxnQkFBQUEsSTtBQUNBQyxnQkFBQUEsRSxHQUFLRCxJQUFJLEdBQUcsS0FBSCxHQUFXLFE7QUFDcEI2RCxnQkFBQUEsWSxHQUFvQixFO0FBQ3BCQyxnQkFBQUEsVSxHQUFrQixFO0FBQ2hCQyxnQkFBQUEsZSxHQUFvQnpCLE0sQ0FBcEJ5QixlO0FBQ0ZDLGdCQUFBQSxrQixHQUF1QjFCLE0sQ0FBdkIwQixrQjs7QUFFTix1QkFBT0Esa0JBQWtCLEdBQUcsQ0FBckIsS0FBMkIsQ0FBbEMsRUFBcUM7QUFDbkNBLGtCQUFBQSxrQkFBa0IsSUFBSSxDQUF0QjtBQUNEOztBQUVLQyxnQkFBQUEsSSxHQUFPdEIsTUFBTSxDQUFDQyxLQUFQLENBQWFvQixrQkFBa0IsR0FBR0QsZUFBbEMsQzs7dUJBQ1AsS0FBS3JDLEdBQUwsQ0FBU21CLElBQVQsQ0FBY29CLElBQWQsRUFBb0IsQ0FBcEIsRUFBdUJELGtCQUFrQixHQUFHRCxlQUE1QyxFQUE2REEsZUFBN0QsRUFBOEU7QUFBRTNFLGtCQUFBQSxNQUFNLEVBQUU4QztBQUFWLGlCQUE5RSxDOzs7QUFFQWdDLGdCQUFBQSxDLEdBQUluRSxVQUFVLENBQUNDLElBQUQsQztBQUNabUUsZ0JBQUFBLE8sR0FBWUQsQ0FBQyxDQUFDcEQsZUFBRixDQUFrQmdDLEtBQWxCLENBQXdCbUIsSUFBeEIsRUFBOEJsQixNLENBQTFDb0IsTztBQUNGQyxnQkFBQUEsYyxHQUFpQixJQUFJakUsb0JBQUosR0FDcEJDLFNBRG9CLENBQ1ZILEVBRFUsRUFFcEJvRSxNQUZvQixDQUViLEtBRmEsRUFFTjtBQUFFQyxrQkFBQUEsU0FBUyxFQUFFLElBQWI7QUFBbUI1RCxrQkFBQUEsTUFBTSxFQUFFeUQ7QUFBM0IsaUJBRk0sRUFHcEIzRCxNQUhvQixDQUdiLE9BSGEsRUFJcEJBLE1BSm9CLENBSWIsU0FKYSxDO0FBS2pCK0QsZ0JBQUFBLGlCLEdBQW9CLElBQUlwRSxvQkFBSixHQUN2QkMsU0FEdUIsQ0FDYkgsRUFEYSxFQUV2QmdCLElBRnVCLENBRWxCa0QsT0FGa0IsRUFHdkI1RCxNQUh1QixDQUdoQixhQUhnQixDO0FBSXBCaUUsZ0JBQUFBLGMsR0FBaUIsRTs7QUFDakJDLGdCQUFBQSxXOzs7Ozs0Q0FBYyxrQkFBT0MsYUFBUDtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ2RDLDRCQUFBQSxNQURjLEdBQ0xELGFBREs7O0FBQUEsa0NBRWRDLE1BQU0sSUFBSVYsSUFBSSxDQUFDdkQsTUFGRDtBQUFBO0FBQUE7QUFBQTs7QUFBQSxrQ0FFZSxJQUFJbUIsS0FBSixDQUFVLDhCQUFWLENBRmY7O0FBQUE7QUFHWlksNEJBQUFBLEdBSFksR0FHTnlCLENBQUMsQ0FBQ25ELFVBQUYsQ0FBYStCLEtBQWIsQ0FBbUJtQixJQUFJLENBQUNiLEtBQUwsQ0FBV3VCLE1BQVgsQ0FBbkIsQ0FITTtBQUFBLDBDQUlVbEMsR0FBRyxDQUFDTSxNQUpkLEVBSVZoQyxVQUpVLGVBSVZBLFVBSlUsRUFJRTZELEdBSkYsZUFJRUEsR0FKRjtBQUtsQkQsNEJBQUFBLE1BQU0sSUFBSWxDLEdBQUcsQ0FBQ2tDLE1BQWQ7QUFDU0UsNEJBQUFBLENBTlMsR0FNTCxDQU5LOztBQUFBO0FBQUEsa0NBTUZBLENBQUMsR0FBR0QsR0FORjtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLG1DQVFWLDJCQUFnQjFDLFdBQWhCLENBUlU7O0FBQUE7QUFTaEIsZ0NBQUluQixVQUFKLEVBQWdCO0FBQ1IrRCw4QkFBQUEsT0FEUSxHQUNFVixjQUFjLENBQUN0QixLQUFmLENBQXFCbUIsSUFBSSxDQUFDYixLQUFMLENBQVd1QixNQUFYLENBQXJCLENBREY7QUFFZEEsOEJBQUFBLE1BQU0sSUFBSUcsT0FBTyxDQUFDSCxNQUFsQjtBQUZjLGdEQUdrQkcsT0FBTyxDQUFDL0IsTUFIMUIsRUFHTmdDLEdBSE0sbUJBR05BLEdBSE0sRUFHREMsS0FIQyxtQkFHREEsS0FIQyxFQUdNQyxPQUhOLG1CQUdNQSxPQUhOO0FBSVJDLDhCQUFBQSxNQUpRLEdBSUM7QUFBRXBGLGdDQUFBQSxJQUFJLEVBQUVpRixHQUFSO0FBQWFJLGdDQUFBQSxFQUFFLEVBQUVILEtBQWpCO0FBQXdCdEUsZ0NBQUFBLE1BQU0sRUFBRXVFO0FBQWhDLCtCQUpEO0FBS2RuQiw4QkFBQUEsVUFBVSxDQUFDLEtBQUksQ0FBQ3pDLGFBQUwsQ0FBbUIwRCxHQUFuQixDQUFELENBQVYsR0FBc0NDLEtBQXRDO0FBQ0FuQiw4QkFBQUEsWUFBWSxDQUFDbUIsS0FBRCxDQUFaLEdBQXNCRSxNQUF0QjtBQUNELDZCQVBELE1BT087QUFDTDtBQUNNRSw4QkFBQUEsVUFGRCxHQUVjYixpQkFBaUIsQ0FBQ3pCLEtBQWxCLENBQXdCbUIsSUFBSSxDQUFDYixLQUFMLENBQVd1QixNQUFYLENBQXhCLENBRmQ7QUFHQ1UsOEJBQUFBLFdBSEQsR0FHaUJELFVBQVUsQ0FBQ3JDLE1BSDVCLENBR0NzQyxXQUhEO0FBSUxWLDhCQUFBQSxNQUFNLElBQUlTLFVBQVUsQ0FBQ1QsTUFBckI7QUFDQVUsOEJBQUFBLFdBQVcsSUFBSXRCLGVBQWY7QUFDQVUsOEJBQUFBLFdBQVcsQ0FBQ1ksV0FBRCxDQUFYO0FBQ0Q7O0FBdkJlO0FBTU9SLDRCQUFBQSxDQUFDLElBQUksQ0FOWjtBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsbUI7O2tDQUFkSixXOzs7Ozs7dUJBMEJBQSxXQUFXLENBQUNELGNBQUQsQzs7O2tEQUNWO0FBQ0xWLGtCQUFBQSxVQUFVLEVBQVZBLFVBREs7QUFFTEQsa0JBQUFBLFlBQVksRUFBWkE7QUFGSyxpQjs7Ozs7Ozs7Ozs7Ozs7OztBQU1UOzs7Ozs7Ozs7O2tEQUlnQzNCLFc7Ozs7Ozs7O3VCQVFwQixLQUFLSixTQUFMLENBQWVJLFdBQWYsQzs7OztBQU5Sb0QsZ0JBQUFBLG1CLFNBQUFBLG1CO0FBQ0FDLGdCQUFBQSxVLFNBQUFBLFU7QUFDQXpCLGdCQUFBQSxVLFNBQUFBLFU7QUFDQTBCLGdCQUFBQSxpQixTQUFBQSxpQjtBQUNBcEQsZ0JBQUFBLFcsU0FBQUEsVztBQUNBWSxnQkFBQUEsUSxTQUFBQSxRO0FBRUl5QyxnQkFBQUEsRyxHQUFNRixVQUFVLENBQUMsQ0FBRCxDO0FBQ2hCRyxnQkFBQUEsTSxHQUFTRCxHQUFHLEdBQUdBLEdBQUcsQ0FBQ0UsVUFBSixHQUFpQkwsbUJBQXBCLEdBQTBDLEk7a0RBQ3JELElBQUlNLG9CQUFKLENBQ0wsS0FBS2xFLEdBREEsRUFFTG9DLFVBRkssRUFHTHdCLG1CQUhLLEVBSUxJLE1BSkssRUFLTHRELFdBTEssRUFNTG9ELGlCQUFpQixHQUFHLENBTmYsRUFPTHhDLFFBUEssQzs7Ozs7Ozs7Ozs7Ozs7OztBQVdUOzs7Ozs7O0FBS0E7Ozs7Ozs7Ozs7O2tEQVNFNkMsTyxFQUNBQyxLLEVBQ0FDLEc7Ozs7Ozs7OztBQUNBQyxnQkFBQUEsSSw4REFBd0U7QUFBRUMsa0JBQUFBLEtBQUssRUFBRTtBQUFULGlCOzt1QkFFbEUsS0FBS25FLFNBQUwsQ0FBZWtFLElBQUksQ0FBQzVHLE1BQXBCLEM7OztBQUNBOEcsZ0JBQUFBLE8sR0FBVSxLQUFLN0UsYUFBTCxDQUFtQndFLE9BQW5CLEM7O3FCQUdaRyxJQUFJLENBQUNHLFk7Ozs7Ozt1QkFDTSxLQUFLQyxPQUFMLENBQWEsSUFBSUosSUFBSSxDQUFDRyxZQUF0QixFQUFvQ0gsSUFBSSxDQUFDNUcsTUFBekMsQzs7O0FBQWJpSCxnQkFBQUEsSTs7Ozs7cUJBQ1NMLElBQUksQ0FBQ0MsSzs7Ozs7O3VCQUNELEtBQUtHLE9BQUwsQ0FBYUosSUFBSSxDQUFDQyxLQUFsQixFQUF5QkQsSUFBSSxDQUFDNUcsTUFBOUIsQzs7O0FBQWJpSCxnQkFBQUEsSTs7Ozs7O3VCQUVhLEtBQUtELE9BQUwsQ0FBYSxDQUFiLEVBQWdCSixJQUFJLENBQUM1RyxNQUFyQixDOzs7QUFBYmlILGdCQUFBQSxJOzs7b0JBR0dBLEk7Ozs7O3NCQUNHLElBQUl4RSxLQUFKLENBQVUsbUNBQVYsQzs7O2tEQUVELElBQUl5RSxnQkFBSixDQUNMLFVBQUNDLFFBQUQsRUFBeUM7QUFDdkNGLGtCQUFBQSxJQUFJLENBQUNHLFdBQUwsQ0FBaUJOLE9BQWpCLEVBQTBCSixLQUExQixFQUFpQ0MsR0FBakMsRUFBc0NRLFFBQXRDLEVBQWdEUCxJQUFoRDtBQUNELGlCQUhJLEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztrREFRUEgsTyxFQUNBQyxLLEVBQ0FDLEc7Ozs7Ozs7OztBQUNBQyxnQkFBQUEsSSw4REFBd0U7QUFBRUMsa0JBQUFBLEtBQUssRUFBRTtBQUFULGlCOzt1QkFFdkQsS0FBS1EsZ0JBQUwsQ0FBc0JaLE9BQXRCLEVBQStCQyxLQUEvQixFQUFzQ0MsR0FBdEMsRUFBMkNDLElBQTNDLEM7OztBQUFYVSxnQkFBQUEsRTs7dUJBQ1lBLEVBQUUsQ0FBQ0MsSUFBSCxDQUFRLHVCQUFPLFVBQUNDLEdBQUQsRUFBaUJDLElBQWpCO0FBQUEseUJBQWdERCxHQUFHLENBQUNFLE1BQUosQ0FBV0QsSUFBWCxDQUFoRDtBQUFBLGlCQUFQLENBQVIsRUFBa0ZFLFNBQWxGLEU7OztBQUFadEUsZ0JBQUFBLEc7a0RBQ0NBLEdBQUcsSUFBSSxFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGFyc2VyIH0gZnJvbSAnQGdtb2QvYmluYXJ5LXBhcnNlcidcbmltcG9ydCB7IExvY2FsRmlsZSwgUmVtb3RlRmlsZSwgR2VuZXJpY0ZpbGVoYW5kbGUgfSBmcm9tICdnZW5lcmljLWZpbGVoYW5kbGUnXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBPYnNlcnZlciB9IGZyb20gJ3J4anMnXG5pbXBvcnQgeyByZWR1Y2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcblxuaW1wb3J0IHsgQmxvY2tWaWV3IH0gZnJvbSAnLi9ibG9ja1ZpZXcnXG5pbXBvcnQgeyBhYm9ydEJyZWFrUG9pbnQsIEFib3J0RXJyb3IgfSBmcm9tICcuL3V0aWwnXG5cbmNvbnN0IEJJR19XSUdfTUFHSUMgPSAtMjAwMzgyOTcyMlxuY29uc3QgQklHX0JFRF9NQUdJQyA9IC0yMDIxMDAyNTE3XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmVhdHVyZSB7XG4gIHN0YXJ0OiBudW1iZXJcbiAgZW5kOiBudW1iZXJcbiAgc2NvcmU6IG51bWJlclxuICByZXN0Pzogc3RyaW5nIC8vIGZvciBiaWdiZWQgbGluZVxuICBtaW5TY29yZT86IG51bWJlciAvLyBmb3Igc3VtbWFyeSBsaW5lXG4gIG1heFNjb3JlPzogbnVtYmVyIC8vIGZvciBzdW1tYXJ5IGxpbmVcbiAgc3VtbWFyeT86IGJvb2xlYW4gLy8gaXMgc3VtbWFyeSBsaW5lXG4gIHVuaXF1ZUlkPzogc3RyaW5nIC8vIGZvciBiaWdiZWQgY29udGFpbnMgdW5pcXVlSWQgY2FsY3VsYXRlZCBmcm9tIGZpbGUgb2Zmc2V0XG4gIGZpZWxkPzogbnVtYmVyIC8vIHVzZWQgaW4gYmlnYmVkIHNlYXJjaGluZ1xufVxuaW50ZXJmYWNlIFN0YXRpc3RpY3Mge1xuICBzY29yZVN1bTogbnVtYmVyXG4gIGJhc2VzQ292ZXJlZDogbnVtYmVyXG4gIHNjb3JlU3VtU3F1YXJlczogbnVtYmVyXG59XG5cbmludGVyZmFjZSBSZWZJbmZvIHtcbiAgbmFtZTogc3RyaW5nXG4gIGlkOiBudW1iZXJcbiAgbGVuZ3RoOiBudW1iZXJcbn1cbmV4cG9ydCBpbnRlcmZhY2UgSGVhZGVyIHtcbiAgYXV0b1NxbDogc3RyaW5nXG4gIHRvdGFsU3VtbWFyeTogU3RhdGlzdGljc1xuICB6b29tTGV2ZWxzOiBhbnlcbiAgdW56b29tZWRJbmRleE9mZnNldDogbnVtYmVyXG4gIHVuem9vbWVkRGF0YU9mZnNldDogbnVtYmVyXG4gIHVuY29tcHJlc3NCdWZTaXplOiBudW1iZXJcbiAgY2hyb21UcmVlT2Zmc2V0OiBudW1iZXJcbiAgZmlsZVNpemU6IG51bWJlclxuICBleHRIZWFkZXJPZmZzZXQ6IG51bWJlclxuICBpc0JpZ0VuZGlhbjogYm9vbGVhblxuICBmaWxlVHlwZTogc3RyaW5nXG4gIHJlZnNCeU5hbWU6IE1hcDxzdHJpbmcsIG51bWJlcj5cbiAgcmVmc0J5TnVtYmVyOiBNYXA8bnVtYmVyLCBSZWZJbmZvPlxufVxuXG5pbnRlcmZhY2UgQ2hyb21UcmVlIHtcbiAgcmVmc0J5TmFtZTogTWFwPHN0cmluZywgbnVtYmVyPlxuICByZWZzQnlOdW1iZXI6IE1hcDxudW1iZXIsIFJlZkluZm8+XG59XG4vKlxuICogVGFrZXMgYSBmdW5jdGlvbiB0aGF0IGhhcyBvbmUgYXJndW1lbnQsIGFib3J0U2lnbmFsLCB0aGF0IHJldHVybnMgYSBwcm9taXNlXG4gKiBhbmQgaXQgd29ya3MgYnkgcmV0cnlpbmcgdGhlIGZ1bmN0aW9uIGlmIGEgcHJldmlvdXMgYXR0ZW1wdCB0byBpbml0aWFsaXplIHRoZSBwYXJzZSBjYWNoZSB3YXMgYWJvcnRlZFxuICovXG50eXBlIEFib3J0YWJsZUNhbGxiYWNrID0gKHNpZ25hbDogQWJvcnRTaWduYWwpID0+IFByb21pc2U8YW55PlxuY2xhc3MgQWJvcnRBd2FyZUNhY2hlIHtcbiAgcHJpdmF0ZSBjYWNoZTogTWFwPEFib3J0YWJsZUNhbGxiYWNrLCBhbnk+ID0gbmV3IE1hcCgpXG5cbiAgcHVibGljIGFib3J0YWJsZU1lbW9pemUoZm46IChzaWduYWw/OiBBYm9ydFNpZ25hbCkgPT4gUHJvbWlzZTxhbnk+KTogKHNpZ25hbD86IEFib3J0U2lnbmFsKSA9PiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHsgY2FjaGUgfSA9IHRoaXNcbiAgICByZXR1cm4gZnVuY3Rpb24gYWJvcnRhYmxlTWVtb2l6ZUZuKHNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgIGlmICghY2FjaGUuaGFzKGZuKSkge1xuICAgICAgICBjb25zdCBmblJldHVybiA9IGZuKHNpZ25hbClcbiAgICAgICAgY2FjaGUuc2V0KGZuLCBmblJldHVybilcbiAgICAgICAgaWYgKHNpZ25hbCkge1xuICAgICAgICAgIGZuUmV0dXJuLmNhdGNoKFxuICAgICAgICAgICAgKCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIGNhY2hlLmRlbGV0ZShmbilcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYWNoZS5nZXQoZm4pXG4gICAgICB9XG4gICAgICByZXR1cm4gY2FjaGUuZ2V0KGZuKS5jYXRjaChcbiAgICAgICAgKGU6IEFib3J0RXJyb3IgfCBET01FeGNlcHRpb24pOiBQcm9taXNlPGFueT4gPT4ge1xuICAgICAgICAgIGlmIChlLmNvZGUgPT09ICdFUlJfQUJPUlRFRCcgfHwgZS5uYW1lID09PSAnQWJvcnRFcnJvcicpIHtcbiAgICAgICAgICAgIHJldHVybiBmbihzaWduYWwpXG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IGVcbiAgICAgICAgfSxcbiAgICAgIClcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0UGFyc2Vycyhpc0JFOiBib29sZWFuKTogYW55IHtcbiAgY29uc3QgbGUgPSBpc0JFID8gJ2JpZycgOiAnbGl0dGxlJ1xuICBjb25zdCBoZWFkZXJQYXJzZXIgPSBuZXcgUGFyc2VyKClcbiAgICAuZW5kaWFuZXNzKGxlKVxuICAgIC5pbnQzMignbWFnaWMnKVxuICAgIC51aW50MTYoJ3ZlcnNpb24nKVxuICAgIC51aW50MTYoJ251bVpvb21MZXZlbHMnKVxuICAgIC51aW50NjQoJ2Nocm9tVHJlZU9mZnNldCcpXG4gICAgLnVpbnQ2NCgndW56b29tZWREYXRhT2Zmc2V0JylcbiAgICAudWludDY0KCd1bnpvb21lZEluZGV4T2Zmc2V0JylcbiAgICAudWludDE2KCdmaWVsZENvdW50JylcbiAgICAudWludDE2KCdkZWZpbmVkRmllbGRDb3VudCcpXG4gICAgLnVpbnQ2NCgnYXNPZmZzZXQnKSAvLyBhdXRvU3FsIG9mZnNldCwgdXNlZCBpbiBiaWdiZWRcbiAgICAudWludDY0KCd0b3RhbFN1bW1hcnlPZmZzZXQnKVxuICAgIC51aW50MzIoJ3VuY29tcHJlc3NCdWZTaXplJylcbiAgICAudWludDY0KCdleHRIZWFkZXJPZmZzZXQnKSAvLyBuYW1lIGluZGV4IG9mZnNldCwgdXNlZCBpbiBiaWdiZWRcbiAgICAuYXJyYXkoJ3pvb21MZXZlbHMnLCB7XG4gICAgICBsZW5ndGg6ICdudW1ab29tTGV2ZWxzJyxcbiAgICAgIHR5cGU6IG5ldyBQYXJzZXIoKVxuICAgICAgICAudWludDMyKCdyZWR1Y3Rpb25MZXZlbCcpXG4gICAgICAgIC51aW50MzIoJ3Jlc2VydmVkJylcbiAgICAgICAgLnVpbnQ2NCgnZGF0YU9mZnNldCcpXG4gICAgICAgIC51aW50NjQoJ2luZGV4T2Zmc2V0JyksXG4gICAgfSlcblxuICBjb25zdCB0b3RhbFN1bW1hcnlQYXJzZXIgPSBuZXcgUGFyc2VyKClcbiAgICAuZW5kaWFuZXNzKGxlKVxuICAgIC51aW50NjQoJ2Jhc2VzQ292ZXJlZCcpXG4gICAgLmRvdWJsZSgnc2NvcmVNaW4nKVxuICAgIC5kb3VibGUoJ3Njb3JlTWF4JylcbiAgICAuZG91YmxlKCdzY29yZVN1bScpXG4gICAgLmRvdWJsZSgnc2NvcmVTdW1TcXVhcmVzJylcblxuICBjb25zdCBjaHJvbVRyZWVQYXJzZXIgPSBuZXcgUGFyc2VyKClcbiAgICAuZW5kaWFuZXNzKGxlKVxuICAgIC51aW50MzIoJ21hZ2ljJylcbiAgICAudWludDMyKCdibG9ja1NpemUnKVxuICAgIC51aW50MzIoJ2tleVNpemUnKVxuICAgIC51aW50MzIoJ3ZhbFNpemUnKVxuICAgIC51aW50NjQoJ2l0ZW1Db3VudCcpXG5cbiAgY29uc3QgaXNMZWFmTm9kZSA9IG5ldyBQYXJzZXIoKVxuICAgIC5lbmRpYW5lc3MobGUpXG4gICAgLnVpbnQ4KCdpc0xlYWZOb2RlJylcbiAgICAuc2tpcCgxKVxuICAgIC51aW50MTYoJ2NudCcpXG5cbiAgcmV0dXJuIHtcbiAgICBjaHJvbVRyZWVQYXJzZXIsXG4gICAgdG90YWxTdW1tYXJ5UGFyc2VyLFxuICAgIGhlYWRlclBhcnNlcixcbiAgICBpc0xlYWZOb2RlLFxuICB9XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCQkkge1xuICBwcm90ZWN0ZWQgYmJpOiBHZW5lcmljRmlsZWhhbmRsZVxuXG4gIHByb3RlY3RlZCBoZWFkZXJDYWNoZTogQWJvcnRBd2FyZUNhY2hlXG5cbiAgcHJvdGVjdGVkIHJlbmFtZVJlZlNlcXM6IChhOiBzdHJpbmcpID0+IHN0cmluZ1xuXG4gIC8qIGZldGNoIGFuZCBwYXJzZSBoZWFkZXIgaW5mb3JtYXRpb24gZnJvbSBhIGJpZ3dpZyBvciBiaWdiZWQgZmlsZVxuICAgKiBAcGFyYW0gYWJvcnRTaWduYWwgLSBhYm9ydCB0aGUgb3BlcmF0aW9uLCBjYW4gYmUgbnVsbFxuICAgKiBAcmV0dXJuIGEgSGVhZGVyIG9iamVjdFxuICAgKi9cbiAgcHVibGljIGdldEhlYWRlcjogKGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWwpID0+IFByb21pc2U8SGVhZGVyPlxuXG4gIC8qXG4gICAqIEBwYXJhbSBmaWxlaGFuZGxlIC0gYSBmaWxlaGFuZGxlIGZyb20gZ2VuZXJpYy1maWxlaGFuZGxlIG9yIGltcGxlbWVudGluZyBzb21ldGhpbmcgc2ltaWxhciB0byB0aGUgbm9kZTEwIGZzLnByb21pc2VzIEFQSVxuICAgKiBAcGFyYW0gcGF0aCAtIGEgTG9jYWwgZmlsZSBwYXRoIGFzIGEgc3RyaW5nXG4gICAqIEBwYXJhbSB1cmwgLSBhIFVSTCBzdHJpbmdcbiAgICogQHBhcmFtIHJlbmFtZVJlZlNlcXMgLSBhbiBvcHRpb25hbCBtZXRob2QgdG8gcmVuYW1lIHRoZSBpbnRlcm5hbCByZWZlcmVuY2Ugc2VxdWVuY2VzIHVzaW5nIGEgbWFwcGluZyBmdW5jdGlvblxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIGZpbGVoYW5kbGU/OiBHZW5lcmljRmlsZWhhbmRsZVxuICAgICAgcGF0aD86IHN0cmluZ1xuICAgICAgdXJsPzogc3RyaW5nXG4gICAgICByZW5hbWVSZWZTZXFzPzogKGE6IHN0cmluZykgPT4gc3RyaW5nXG4gICAgfSA9IHt9LFxuICApIHtcbiAgICBjb25zdCB7IGZpbGVoYW5kbGUsIHJlbmFtZVJlZlNlcXMsIHBhdGgsIHVybCB9ID0gb3B0aW9uc1xuICAgIHRoaXMucmVuYW1lUmVmU2VxcyA9IHJlbmFtZVJlZlNlcXMgfHwgKChzOiBzdHJpbmcpOiBzdHJpbmcgPT4gcylcbiAgICB0aGlzLmhlYWRlckNhY2hlID0gbmV3IEFib3J0QXdhcmVDYWNoZSgpXG4gICAgaWYgKGZpbGVoYW5kbGUpIHtcbiAgICAgIHRoaXMuYmJpID0gZmlsZWhhbmRsZVxuICAgIH0gZWxzZSBpZiAodXJsKSB7XG4gICAgICB0aGlzLmJiaSA9IG5ldyBSZW1vdGVGaWxlKHVybClcbiAgICB9IGVsc2UgaWYgKHBhdGgpIHtcbiAgICAgIHRoaXMuYmJpID0gbmV3IExvY2FsRmlsZShwYXRoKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vIGZpbGUgZ2l2ZW4nKVxuICAgIH1cbiAgICB0aGlzLmdldEhlYWRlciA9IHRoaXMuaGVhZGVyQ2FjaGUuYWJvcnRhYmxlTWVtb2l6ZSh0aGlzLl9nZXRIZWFkZXIuYmluZCh0aGlzKSlcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgX2dldEhlYWRlcihhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxIZWFkZXI+IHtcbiAgICBjb25zdCBpc0JpZ0VuZGlhbiA9IGF3YWl0IHRoaXMuX2lzQmlnRW5kaWFuKGFib3J0U2lnbmFsKVxuICAgIGNvbnN0IGhlYWRlciA9IGF3YWl0IHRoaXMuX2dldE1haW5IZWFkZXIoYWJvcnRTaWduYWwpXG4gICAgY29uc3QgY2hyb21zID0gYXdhaXQgdGhpcy5fcmVhZENocm9tVHJlZShhYm9ydFNpZ25hbClcbiAgICByZXR1cm4geyAuLi5oZWFkZXIsIC4uLmNocm9tcywgaXNCaWdFbmRpYW4gfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBfZ2V0TWFpbkhlYWRlcihhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxIZWFkZXI+IHtcbiAgICBjb25zdCByZXQgPSBnZXRQYXJzZXJzKGF3YWl0IHRoaXMuX2lzQmlnRW5kaWFuKCkpXG4gICAgY29uc3QgYnVmID0gQnVmZmVyLmFsbG9jKDIwMDApXG4gICAgYXdhaXQgdGhpcy5iYmkucmVhZChidWYsIDAsIDIwMDAsIDAsIHsgc2lnbmFsOiBhYm9ydFNpZ25hbCB9KVxuICAgIGNvbnN0IGhlYWRlciA9IHJldC5oZWFkZXJQYXJzZXIucGFyc2UoYnVmKS5yZXN1bHRcbiAgICBoZWFkZXIuZmlsZVR5cGUgPSBoZWFkZXIubWFnaWMgPT09IEJJR19CRURfTUFHSUMgPyAnYmlnYmVkJyA6ICdiaWd3aWcnXG5cbiAgICBpZiAoaGVhZGVyLmFzT2Zmc2V0KSB7XG4gICAgICBoZWFkZXIuYXV0b1NxbCA9IGJ1Zi5zbGljZShoZWFkZXIuYXNPZmZzZXQsIGJ1Zi5pbmRleE9mKDAsIGhlYWRlci5hc09mZnNldCkpLnRvU3RyaW5nKCd1dGY4JylcbiAgICB9XG4gICAgaWYgKGhlYWRlci50b3RhbFN1bW1hcnlPZmZzZXQpIHtcbiAgICAgIGNvbnN0IHRhaWwgPSBidWYuc2xpY2UoaGVhZGVyLnRvdGFsU3VtbWFyeU9mZnNldClcbiAgICAgIGhlYWRlci50b3RhbFN1bW1hcnkgPSByZXQudG90YWxTdW1tYXJ5UGFyc2VyLnBhcnNlKHRhaWwpLnJlc3VsdFxuICAgIH1cbiAgICByZXR1cm4gaGVhZGVyXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIF9pc0JpZ0VuZGlhbihhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgYnVmID0gQnVmZmVyLmFsbG9jVW5zYWZlKDQpXG4gICAgYXdhaXQgdGhpcy5iYmkucmVhZChidWYsIDAsIDQsIDAsIHsgc2lnbmFsOiBhYm9ydFNpZ25hbCB9KVxuICAgIGxldCByZXQgPSBidWYucmVhZEludDMyTEUoMClcbiAgICBpZiAocmV0ID09PSBCSUdfV0lHX01BR0lDIHx8IHJldCA9PT0gQklHX0JFRF9NQUdJQykge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIHJldCA9IGJ1Zi5yZWFkSW50MzJCRSgwKVxuICAgIGlmIChyZXQgPT09IEJJR19XSUdfTUFHSUMgfHwgcmV0ID09PSBCSUdfQkVEX01BR0lDKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBhIEJpZ1dpZy9CaWdCZWQgZmlsZScpXG4gIH1cblxuICAvLyB0b2RvOiBhZGQgcHJvZ3Jlc3MgaWYgbG9uZyBydW5uaW5nXG4gIHByaXZhdGUgYXN5bmMgX3JlYWRDaHJvbVRyZWUoYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8Q2hyb21UcmVlPiB7XG4gICAgY29uc3QgaGVhZGVyID0gYXdhaXQgdGhpcy5fZ2V0TWFpbkhlYWRlcihhYm9ydFNpZ25hbClcbiAgICBjb25zdCBpc0JFID0gYXdhaXQgdGhpcy5faXNCaWdFbmRpYW4oYWJvcnRTaWduYWwpXG4gICAgY29uc3QgbGUgPSBpc0JFID8gJ2JpZycgOiAnbGl0dGxlJ1xuICAgIGNvbnN0IHJlZnNCeU51bWJlcjogYW55ID0ge31cbiAgICBjb25zdCByZWZzQnlOYW1lOiBhbnkgPSB7fVxuICAgIGNvbnN0IHsgY2hyb21UcmVlT2Zmc2V0IH0gPSBoZWFkZXJcbiAgICBsZXQgeyB1bnpvb21lZERhdGFPZmZzZXQgfSA9IGhlYWRlclxuXG4gICAgd2hpbGUgKHVuem9vbWVkRGF0YU9mZnNldCAlIDQgIT09IDApIHtcbiAgICAgIHVuem9vbWVkRGF0YU9mZnNldCArPSAxXG4gICAgfVxuXG4gICAgY29uc3QgZGF0YSA9IEJ1ZmZlci5hbGxvYyh1bnpvb21lZERhdGFPZmZzZXQgLSBjaHJvbVRyZWVPZmZzZXQpXG4gICAgYXdhaXQgdGhpcy5iYmkucmVhZChkYXRhLCAwLCB1bnpvb21lZERhdGFPZmZzZXQgLSBjaHJvbVRyZWVPZmZzZXQsIGNocm9tVHJlZU9mZnNldCwgeyBzaWduYWw6IGFib3J0U2lnbmFsIH0pXG5cbiAgICBjb25zdCBwID0gZ2V0UGFyc2Vycyhpc0JFKVxuICAgIGNvbnN0IHsga2V5U2l6ZSB9ID0gcC5jaHJvbVRyZWVQYXJzZXIucGFyc2UoZGF0YSkucmVzdWx0XG4gICAgY29uc3QgbGVhZk5vZGVQYXJzZXIgPSBuZXcgUGFyc2VyKClcbiAgICAgIC5lbmRpYW5lc3MobGUpXG4gICAgICAuc3RyaW5nKCdrZXknLCB7IHN0cmlwTnVsbDogdHJ1ZSwgbGVuZ3RoOiBrZXlTaXplIH0pXG4gICAgICAudWludDMyKCdyZWZJZCcpXG4gICAgICAudWludDMyKCdyZWZTaXplJylcbiAgICBjb25zdCBub25sZWFmTm9kZVBhcnNlciA9IG5ldyBQYXJzZXIoKVxuICAgICAgLmVuZGlhbmVzcyhsZSlcbiAgICAgIC5za2lwKGtleVNpemUpXG4gICAgICAudWludDY0KCdjaGlsZE9mZnNldCcpXG4gICAgY29uc3Qgcm9vdE5vZGVPZmZzZXQgPSAzMlxuICAgIGNvbnN0IGJwdFJlYWROb2RlID0gYXN5bmMgKGN1cnJlbnRPZmZzZXQ6IG51bWJlcik6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgbGV0IG9mZnNldCA9IGN1cnJlbnRPZmZzZXRcbiAgICAgIGlmIChvZmZzZXQgPj0gZGF0YS5sZW5ndGgpIHRocm93IG5ldyBFcnJvcigncmVhZGluZyBiZXlvbmQgZW5kIG9mIGJ1ZmZlcicpXG4gICAgICBjb25zdCByZXQgPSBwLmlzTGVhZk5vZGUucGFyc2UoZGF0YS5zbGljZShvZmZzZXQpKVxuICAgICAgY29uc3QgeyBpc0xlYWZOb2RlLCBjbnQgfSA9IHJldC5yZXN1bHRcbiAgICAgIG9mZnNldCArPSByZXQub2Zmc2V0XG4gICAgICBmb3IgKGxldCBuID0gMDsgbiA8IGNudDsgbiArPSAxKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1hd2FpdC1pbi1sb29wXG4gICAgICAgIGF3YWl0IGFib3J0QnJlYWtQb2ludChhYm9ydFNpZ25hbClcbiAgICAgICAgaWYgKGlzTGVhZk5vZGUpIHtcbiAgICAgICAgICBjb25zdCBsZWFmUmV0ID0gbGVhZk5vZGVQYXJzZXIucGFyc2UoZGF0YS5zbGljZShvZmZzZXQpKVxuICAgICAgICAgIG9mZnNldCArPSBsZWFmUmV0Lm9mZnNldFxuICAgICAgICAgIGNvbnN0IHsga2V5LCByZWZJZCwgcmVmU2l6ZSB9ID0gbGVhZlJldC5yZXN1bHRcbiAgICAgICAgICBjb25zdCByZWZSZWMgPSB7IG5hbWU6IGtleSwgaWQ6IHJlZklkLCBsZW5ndGg6IHJlZlNpemUgfVxuICAgICAgICAgIHJlZnNCeU5hbWVbdGhpcy5yZW5hbWVSZWZTZXFzKGtleSldID0gcmVmSWRcbiAgICAgICAgICByZWZzQnlOdW1iZXJbcmVmSWRdID0gcmVmUmVjXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gcGFyc2UgaW5kZXggbm9kZVxuICAgICAgICAgIGNvbnN0IG5vbmxlYWZSZXQgPSBub25sZWFmTm9kZVBhcnNlci5wYXJzZShkYXRhLnNsaWNlKG9mZnNldCkpXG4gICAgICAgICAgbGV0IHsgY2hpbGRPZmZzZXQgfSA9IG5vbmxlYWZSZXQucmVzdWx0XG4gICAgICAgICAgb2Zmc2V0ICs9IG5vbmxlYWZSZXQub2Zmc2V0XG4gICAgICAgICAgY2hpbGRPZmZzZXQgLT0gY2hyb21UcmVlT2Zmc2V0XG4gICAgICAgICAgYnB0UmVhZE5vZGUoY2hpbGRPZmZzZXQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgYXdhaXQgYnB0UmVhZE5vZGUocm9vdE5vZGVPZmZzZXQpXG4gICAgcmV0dXJuIHtcbiAgICAgIHJlZnNCeU5hbWUsXG4gICAgICByZWZzQnlOdW1iZXIsXG4gICAgfVxuICB9XG5cbiAgLypcbiAgICogZmV0Y2hlcyB0aGUgXCJ1bnpvb21lZFwiIHZpZXcgb2YgdGhlIGJpZ3dpZyBkYXRhLiB0aGlzIGlzIHRoZSBkZWZhdWx0IGZvciBiaWdiZWRcbiAgICogQHBhcmFtIGFib3J0U2lnbmFsIC0gYSBzaWduYWwgdG8gb3B0aW9uYWxseSBhYm9ydCB0aGlzIG9wZXJhdGlvblxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGdldFVuem9vbWVkVmlldyhhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxCbG9ja1ZpZXc+IHtcbiAgICBjb25zdCB7XG4gICAgICB1bnpvb21lZEluZGV4T2Zmc2V0LFxuICAgICAgem9vbUxldmVscyxcbiAgICAgIHJlZnNCeU5hbWUsXG4gICAgICB1bmNvbXByZXNzQnVmU2l6ZSxcbiAgICAgIGlzQmlnRW5kaWFuLFxuICAgICAgZmlsZVR5cGUsXG4gICAgfSA9IGF3YWl0IHRoaXMuZ2V0SGVhZGVyKGFib3J0U2lnbmFsKVxuICAgIGNvbnN0IG56bCA9IHpvb21MZXZlbHNbMF1cbiAgICBjb25zdCBjaXJMZW4gPSBuemwgPyBuemwuZGF0YU9mZnNldCAtIHVuem9vbWVkSW5kZXhPZmZzZXQgOiA0MDAwXG4gICAgcmV0dXJuIG5ldyBCbG9ja1ZpZXcoXG4gICAgICB0aGlzLmJiaSxcbiAgICAgIHJlZnNCeU5hbWUsXG4gICAgICB1bnpvb21lZEluZGV4T2Zmc2V0LFxuICAgICAgY2lyTGVuLFxuICAgICAgaXNCaWdFbmRpYW4sXG4gICAgICB1bmNvbXByZXNzQnVmU2l6ZSA+IDAsXG4gICAgICBmaWxlVHlwZSxcbiAgICApXG4gIH1cblxuICAvKlxuICAgKiBhYnN0cmFjdCBtZXRob2QgLSBnZXQgdGhlIHZpZXcgZm9yIGEgZ2l2ZW4gc2NhbGVcbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBhc3luYyBnZXRWaWV3KHNjYWxlOiBudW1iZXIsIGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPEJsb2NrVmlldz5cblxuICAvKipcbiAgICogR2V0cyBmZWF0dXJlcyBmcm9tIGEgQmlnV2lnIGZpbGVcbiAgICpcbiAgICogQHBhcmFtIHJlZk5hbWUgLSBUaGUgY2hyb21vc29tZSBuYW1lXG4gICAqIEBwYXJhbSBzdGFydCAtIFRoZSBzdGFydCBvZiBhIHJlZ2lvblxuICAgKiBAcGFyYW0gZW5kIC0gVGhlIGVuZCBvZiBhIHJlZ2lvblxuICAgKiBAcGFyYW0gb3B0cyAtIEFuIG9iamVjdCBjb250YWluaW5nIGJhc2VzUGVyU3BhbiAoZS5nLiBwaXhlbHMgcGVyIGJhc2VwYWlyKSBvciBzY2FsZSB1c2VkIHRvIGluZmVyIHRoZSB6b29tTGV2ZWwgdG8gdXNlXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0RmVhdHVyZVN0cmVhbShcbiAgICByZWZOYW1lOiBzdHJpbmcsXG4gICAgc3RhcnQ6IG51bWJlcixcbiAgICBlbmQ6IG51bWJlcixcbiAgICBvcHRzOiB7IGJhc2VzUGVyU3Bhbj86IG51bWJlcjsgc2NhbGU/OiBudW1iZXI7IHNpZ25hbD86IEFib3J0U2lnbmFsIH0gPSB7IHNjYWxlOiAxIH0sXG4gICk6IFByb21pc2U8T2JzZXJ2YWJsZTxGZWF0dXJlW10+PiB7XG4gICAgYXdhaXQgdGhpcy5nZXRIZWFkZXIob3B0cy5zaWduYWwpXG4gICAgY29uc3QgY2hyTmFtZSA9IHRoaXMucmVuYW1lUmVmU2VxcyhyZWZOYW1lKVxuICAgIGxldCB2aWV3OiBCbG9ja1ZpZXdcblxuICAgIGlmIChvcHRzLmJhc2VzUGVyU3Bhbikge1xuICAgICAgdmlldyA9IGF3YWl0IHRoaXMuZ2V0VmlldygxIC8gb3B0cy5iYXNlc1BlclNwYW4sIG9wdHMuc2lnbmFsKVxuICAgIH0gZWxzZSBpZiAob3B0cy5zY2FsZSkge1xuICAgICAgdmlldyA9IGF3YWl0IHRoaXMuZ2V0VmlldyhvcHRzLnNjYWxlLCBvcHRzLnNpZ25hbClcbiAgICB9IGVsc2Uge1xuICAgICAgdmlldyA9IGF3YWl0IHRoaXMuZ2V0VmlldygxLCBvcHRzLnNpZ25hbClcbiAgICB9XG5cbiAgICBpZiAoIXZpZXcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndW5hYmxlIHRvIGdldCBibG9jayB2aWV3IGZvciBkYXRhJylcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKFxuICAgICAgKG9ic2VydmVyOiBPYnNlcnZlcjxGZWF0dXJlW10+KTogdm9pZCA9PiB7XG4gICAgICAgIHZpZXcucmVhZFdpZ0RhdGEoY2hyTmFtZSwgc3RhcnQsIGVuZCwgb2JzZXJ2ZXIsIG9wdHMpXG4gICAgICB9LFxuICAgIClcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRGZWF0dXJlcyhcbiAgICByZWZOYW1lOiBzdHJpbmcsXG4gICAgc3RhcnQ6IG51bWJlcixcbiAgICBlbmQ6IG51bWJlcixcbiAgICBvcHRzOiB7IGJhc2VzUGVyU3Bhbj86IG51bWJlcjsgc2NhbGU/OiBudW1iZXI7IHNpZ25hbD86IEFib3J0U2lnbmFsIH0gPSB7IHNjYWxlOiAxIH0sXG4gICk6IFByb21pc2U8RmVhdHVyZVtdPiB7XG4gICAgY29uc3Qgb2IgPSBhd2FpdCB0aGlzLmdldEZlYXR1cmVTdHJlYW0ocmVmTmFtZSwgc3RhcnQsIGVuZCwgb3B0cylcbiAgICBjb25zdCByZXQgPSBhd2FpdCBvYi5waXBlKHJlZHVjZSgoYWNjOiBGZWF0dXJlW10sIGN1cnI6IEZlYXR1cmVbXSk6IEZlYXR1cmVbXSA9PiBhY2MuY29uY2F0KGN1cnIpKSkudG9Qcm9taXNlKClcbiAgICByZXR1cm4gcmV0IHx8IFtdXG4gIH1cbn1cbiJdfQ== | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9iYmkudHMiXSwibmFtZXMiOlsiQklHX1dJR19NQUdJQyIsIkJJR19CRURfTUFHSUMiLCJBYm9ydEF3YXJlQ2FjaGUiLCJNYXAiLCJmbiIsImNhY2hlIiwiYWJvcnRhYmxlTWVtb2l6ZUZuIiwic2lnbmFsIiwiaGFzIiwiZm5SZXR1cm4iLCJzZXQiLCJjYXRjaCIsImFib3J0ZWQiLCJkZWxldGUiLCJnZXQiLCJlIiwiY29kZSIsIm5hbWUiLCJnZXRQYXJzZXJzIiwiaXNCRSIsImxlIiwiaGVhZGVyUGFyc2VyIiwiUGFyc2VyIiwiZW5kaWFuZXNzIiwiaW50MzIiLCJ1aW50MTYiLCJ1aW50NjQiLCJ1aW50MzIiLCJhcnJheSIsImxlbmd0aCIsInR5cGUiLCJ0b3RhbFN1bW1hcnlQYXJzZXIiLCJkb3VibGUiLCJjaHJvbVRyZWVQYXJzZXIiLCJpc0xlYWZOb2RlIiwidWludDgiLCJza2lwIiwiQkJJIiwib3B0aW9ucyIsImZpbGVoYW5kbGUiLCJyZW5hbWVSZWZTZXFzIiwicGF0aCIsInVybCIsInMiLCJoZWFkZXJDYWNoZSIsImJiaSIsIlJlbW90ZUZpbGUiLCJMb2NhbEZpbGUiLCJFcnJvciIsImdldEhlYWRlciIsImFib3J0YWJsZU1lbW9pemUiLCJfZ2V0SGVhZGVyIiwiYmluZCIsImFib3J0U2lnbmFsIiwiX2lzQmlnRW5kaWFuIiwiaXNCaWdFbmRpYW4iLCJfZ2V0TWFpbkhlYWRlciIsImhlYWRlciIsIl9yZWFkQ2hyb21UcmVlIiwiY2hyb21zIiwicmV0IiwiYnVmIiwiQnVmZmVyIiwiYWxsb2MiLCJyZWFkIiwicGFyc2UiLCJyZXN1bHQiLCJmaWxlVHlwZSIsIm1hZ2ljIiwiYXNPZmZzZXQiLCJhdXRvU3FsIiwic2xpY2UiLCJpbmRleE9mIiwidG9TdHJpbmciLCJ0b3RhbFN1bW1hcnlPZmZzZXQiLCJ0YWlsIiwidG90YWxTdW1tYXJ5IiwiYWxsb2NVbnNhZmUiLCJyZWFkSW50MzJMRSIsInJlYWRJbnQzMkJFIiwicmVmc0J5TnVtYmVyIiwicmVmc0J5TmFtZSIsImNocm9tVHJlZU9mZnNldCIsInVuem9vbWVkRGF0YU9mZnNldCIsImRhdGEiLCJwIiwia2V5U2l6ZSIsImxlYWZOb2RlUGFyc2VyIiwic3RyaW5nIiwic3RyaXBOdWxsIiwibm9ubGVhZk5vZGVQYXJzZXIiLCJyb290Tm9kZU9mZnNldCIsImJwdFJlYWROb2RlIiwiY3VycmVudE9mZnNldCIsIm9mZnNldCIsImNudCIsIm4iLCJsZWFmUmV0Iiwia2V5IiwicmVmSWQiLCJyZWZTaXplIiwicmVmUmVjIiwiaWQiLCJub25sZWFmUmV0IiwiY2hpbGRPZmZzZXQiLCJ1bnpvb21lZEluZGV4T2Zmc2V0Iiwiem9vbUxldmVscyIsInVuY29tcHJlc3NCdWZTaXplIiwibnpsIiwiY2lyTGVuIiwiZGF0YU9mZnNldCIsIkJsb2NrVmlldyIsInJlZk5hbWUiLCJzdGFydCIsImVuZCIsIm9wdHMiLCJzY2FsZSIsImNock5hbWUiLCJiYXNlc1BlclNwYW4iLCJnZXRWaWV3IiwidmlldyIsIk9ic2VydmFibGUiLCJvYnNlcnZlciIsInJlYWRXaWdEYXRhIiwiZ2V0RmVhdHVyZVN0cmVhbSIsIm9iIiwicGlwZSIsImFjYyIsImN1cnIiLCJjb25jYXQiLCJ0b1Byb21pc2UiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUVBOztBQUNBOztBQUVBLElBQU1BLGFBQWEsR0FBRyxDQUFDLFVBQXZCO0FBQ0EsSUFBTUMsYUFBYSxHQUFHLENBQUMsVUFBdkI7O0FBK0NBO0lBQ01DLGU7Ozs7O2lEQUN5QyxJQUFJQyxHQUFKLEU7Ozs7OztBQUU3Qzs7Ozs7O3FDQU13QkMsRSxFQUFvRjtBQUFBLFVBQ2xHQyxLQURrRyxHQUN4RixJQUR3RixDQUNsR0EsS0FEa0c7QUFFMUcsYUFBTyxTQUFTQyxrQkFBVCxDQUE0QkMsTUFBNUIsRUFBZ0U7QUFDckUsWUFBSSxDQUFDRixLQUFLLENBQUNHLEdBQU4sQ0FBVUosRUFBVixDQUFMLEVBQW9CO0FB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LEVBQUUsQ0FBQ0MsSUFBSCxDQUFRLHVCQUFPLFVBQUNDLEdBQUQsRUFBaUJDLElBQWpCO0FBQUEseUJBQWdERCxHQUFHLENBQUNFLE1BQUosQ0FBV0QsSUFBWCxDQUFoRDtBQUFBLGlCQUFQLENBQVIsRUFBa0ZFLFNBQWxGLEU7OztBQUFadEUsZ0JBQUFBLEc7a0RBQ0NBLEdBQUcsSUFBSSxFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGFyc2VyIH0gZnJvbSAnQGdtb2QvYmluYXJ5LXBhcnNlcidcbmltcG9ydCB7IExvY2FsRmlsZSwgUmVtb3RlRmlsZSwgR2VuZXJpY0ZpbGVoYW5kbGUgfSBmcm9tICdnZW5lcmljLWZpbGVoYW5kbGUnXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBPYnNlcnZlciB9IGZyb20gJ3J4anMnXG5pbXBvcnQgeyByZWR1Y2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcblxuaW1wb3J0IHsgQmxvY2tWaWV3IH0gZnJvbSAnLi9ibG9ja1ZpZXcnXG5pbXBvcnQgeyBhYm9ydEJyZWFrUG9pbnQsIEFib3J0RXJyb3IgfSBmcm9tICcuL3V0aWwnXG5cbmNvbnN0IEJJR19XSUdfTUFHSUMgPSAtMjAwMzgyOTcyMlxuY29uc3QgQklHX0JFRF9NQUdJQyA9IC0yMDIxMDAyNTE3XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmVhdHVyZSB7XG4gIHN0YXJ0OiBudW1iZXJcbiAgZW5kOiBudW1iZXJcbiAgc2NvcmU6IG51bWJlclxuICByZXN0Pzogc3RyaW5nIC8vIGZvciBiaWdiZWQgbGluZVxuICBtaW5TY29yZT86IG51bWJlciAvLyBmb3Igc3VtbWFyeSBsaW5lXG4gIG1heFNjb3JlPzogbnVtYmVyIC8vIGZvciBzdW1tYXJ5IGxpbmVcbiAgc3VtbWFyeT86IGJvb2xlYW4gLy8gaXMgc3VtbWFyeSBsaW5lXG4gIHVuaXF1ZUlkPzogc3RyaW5nIC8vIGZvciBiaWdiZWQgY29udGFpbnMgdW5pcXVlSWQgY2FsY3VsYXRlZCBmcm9tIGZpbGUgb2Zmc2V0XG4gIGZpZWxkPzogbnVtYmVyIC8vIHVzZWQgaW4gYmlnYmVkIHNlYXJjaGluZ1xufVxuaW50ZXJmYWNlIFN0YXRpc3RpY3Mge1xuICBzY29yZVN1bTogbnVtYmVyXG4gIGJhc2VzQ292ZXJlZDogbnVtYmVyXG4gIHNjb3JlU3VtU3F1YXJlczogbnVtYmVyXG59XG5cbmludGVyZmFjZSBSZWZJbmZvIHtcbiAgbmFtZTogc3RyaW5nXG4gIGlkOiBudW1iZXJcbiAgbGVuZ3RoOiBudW1iZXJcbn1cbmV4cG9ydCBpbnRlcmZhY2UgSGVhZGVyIHtcbiAgYXV0b1NxbDogc3RyaW5nXG4gIHRvdGFsU3VtbWFyeTogU3RhdGlzdGljc1xuICB6b29tTGV2ZWxzOiBhbnlcbiAgdW56b29tZWRJbmRleE9mZnNldDogbnVtYmVyXG4gIHVuem9vbWVkRGF0YU9mZnNldDogbnVtYmVyXG4gIHVuY29tcHJlc3NCdWZTaXplOiBudW1iZXJcbiAgY2hyb21UcmVlT2Zmc2V0OiBudW1iZXJcbiAgZmlsZVNpemU6IG51bWJlclxuICBleHRIZWFkZXJPZmZzZXQ6IG51bWJlclxuICBpc0JpZ0VuZGlhbjogYm9vbGVhblxuICBmaWxlVHlwZTogc3RyaW5nXG4gIHJlZnNCeU5hbWU6IE1hcDxzdHJpbmcsIG51bWJlcj5cbiAgcmVmc0J5TnVtYmVyOiBNYXA8bnVtYmVyLCBSZWZJbmZvPlxufVxuXG5pbnRlcmZhY2UgQ2hyb21UcmVlIHtcbiAgcmVmc0J5TmFtZTogTWFwPHN0cmluZywgbnVtYmVyPlxuICByZWZzQnlOdW1iZXI6IE1hcDxudW1iZXIsIFJlZkluZm8+XG59XG5cbnR5cGUgQWJvcnRhYmxlQ2FsbGJhY2sgPSAoc2lnbmFsOiBBYm9ydFNpZ25hbCkgPT4gUHJvbWlzZTxhbnk+XG5cbi8qIEEgY2xhc3MgdGhhdCBwcm92aWRlcyBtZW1vaXphdGlvbiBmb3IgYWJvcnRhYmxlIGNhbGxzICovXG5jbGFzcyBBYm9ydEF3YXJlQ2FjaGUge1xuICBwcml2YXRlIGNhY2hlOiBNYXA8QWJvcnRhYmxlQ2FsbGJhY2ssIGFueT4gPSBuZXcgTWFwKClcblxuICAvKlxuICAgKiBUYWtlcyBhIGZ1bmN0aW9uIHRoYXQgaGFzIG9uZSBhcmd1bWVudCwgYWJvcnRTaWduYWwsIHRoYXQgcmV0dXJucyBhIHByb21pc2VcbiAgICogYW5kIGl0IHdvcmtzIGJ5IHJldHJ5aW5nIHRoZSBmdW5jdGlvbiBpZiBhIHByZXZpb3VzIGF0dGVtcHQgdG8gaW5pdGlhbGl6ZSB0aGUgcGFyc2UgY2FjaGUgd2FzIGFib3J0ZWRcbiAgICogQHBhcmFtIGZuIC0gYW4gQWJvcnRhYmxlQ2FsbGJhY2tcbiAgICogQHJldHVybiBhIG1lbW9pemVkIHZlcnNpb24gb2YgdGhlIEFib3J0YWJsZUNhbGxiYWNrIHVzaW5nIHRoZSBBYm9ydEF3YXJlQ2FjaGVcbiAgICovXG4gIHB1YmxpYyBhYm9ydGFibGVNZW1vaXplKGZuOiAoc2lnbmFsPzogQWJvcnRTaWduYWwpID0+IFByb21pc2U8YW55Pik6IChzaWduYWw/OiBBYm9ydFNpZ25hbCkgPT4gUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCB7IGNhY2hlIH0gPSB0aGlzXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGFib3J0YWJsZU1lbW9pemVGbihzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8YW55PiB7XG4gICAgICBpZiAoIWNhY2hlLmhhcyhmbikpIHtcbiAgICAgICAgY29uc3QgZm5SZXR1cm4gPSBmbihzaWduYWwpXG4gICAgICAgIGNhY2hlLnNldChmbiwgZm5SZXR1cm4pXG4gICAgICAgIGlmIChzaWduYWwpIHtcbiAgICAgICAgICBmblJldHVybi5jYXRjaChcbiAgICAgICAgICAgICgpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKSBjYWNoZS5kZWxldGUoZm4pXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2FjaGUuZ2V0KGZuKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNhY2hlLmdldChmbikuY2F0Y2goXG4gICAgICAgIChlOiBBYm9ydEVycm9yIHwgRE9NRXhjZXB0aW9uKTogUHJvbWlzZTxhbnk+ID0+IHtcbiAgICAgICAgICBpZiAoZS5jb2RlID09PSAnRVJSX0FCT1JURUQnIHx8IGUubmFtZSA9PT0gJ0Fib3J0RXJyb3InKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4oc2lnbmFsKVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aHJvdyBlXG4gICAgICAgIH0sXG4gICAgICApXG4gICAgfVxuICB9XG59XG5cbi8qIGdldCB0aGUgY29tcGlsZWQgcGFyc2VycyBmb3IgZGlmZmVyZW50IHNlY3Rpb25zIG9mIHRoZSBiaWd3aWcgZmlsZVxuICpcbiAqIEBwYXJhbSBpc0JFIC0gaXMgYmlnIGVuZGlhbiwgdHlwaWNhbGx5IGZhbHNlXG4gKiBAcmV0dXJuIGFuIG9iamVjdCB3aXRoIGNvbXBpbGVkIHBhcnNlcnNcbiAqL1xuZnVuY3Rpb24gZ2V0UGFyc2Vycyhpc0JFOiBib29sZWFuKTogYW55IHtcbiAgY29uc3QgbGUgPSBpc0JFID8gJ2JpZycgOiAnbGl0dGxlJ1xuICBjb25zdCBoZWFkZXJQYXJzZXIgPSBuZXcgUGFyc2VyKClcbiAgICAuZW5kaWFuZXNzKGxlKVxuICAgIC5pbnQzMignbWFnaWMnKVxuICAgIC51aW50MTYoJ3ZlcnNpb24nKVxuICAgIC51aW50MTYoJ251bVpvb21MZXZlbHMnKVxuICAgIC51aW50NjQoJ2Nocm9tVHJlZU9mZnNldCcpXG4gICAgLnVpbnQ2NCgndW56b29tZWREYXRhT2Zmc2V0JylcbiAgICAudWludDY0KCd1bnpvb21lZEluZGV4T2Zmc2V0JylcbiAgICAudWludDE2KCdmaWVsZENvdW50JylcbiAgICAudWludDE2KCdkZWZpbmVkRmllbGRDb3VudCcpXG4gICAgLnVpbnQ2NCgnYXNPZmZzZXQnKSAvLyBhdXRvU3FsIG9mZnNldCwgdXNlZCBpbiBiaWdiZWRcbiAgICAudWludDY0KCd0b3RhbFN1bW1hcnlPZmZzZXQnKVxuICAgIC51aW50MzIoJ3VuY29tcHJlc3NCdWZTaXplJylcbiAgICAudWludDY0KCdleHRIZWFkZXJPZmZzZXQnKSAvLyBuYW1lIGluZGV4IG9mZnNldCwgdXNlZCBpbiBiaWdiZWRcbiAgICAuYXJyYXkoJ3pvb21MZXZlbHMnLCB7XG4gICAgICBsZW5ndGg6ICdudW1ab29tTGV2ZWxzJyxcbiAgICAgIHR5cGU6IG5ldyBQYXJzZXIoKVxuICAgICAgICAudWludDMyKCdyZWR1Y3Rpb25MZXZlbCcpXG4gICAgICAgIC51aW50MzIoJ3Jlc2VydmVkJylcbiAgICAgICAgLnVpbnQ2NCgnZGF0YU9mZnNldCcpXG4gICAgICAgIC51aW50NjQoJ2luZGV4T2Zmc2V0JyksXG4gICAgfSlcblxuICBjb25zdCB0b3RhbFN1bW1hcnlQYXJzZXIgPSBuZXcgUGFyc2VyKClcbiAgICAuZW5kaWFuZXNzKGxlKVxuICAgIC51aW50NjQoJ2Jhc2VzQ292ZXJlZCcpXG4gICAgLmRvdWJsZSgnc2NvcmVNaW4nKVxuICAgIC5kb3VibGUoJ3Njb3JlTWF4JylcbiAgICAuZG91YmxlKCdzY29yZVN1bScpXG4gICAgLmRvdWJsZSgnc2NvcmVTdW1TcXVhcmVzJylcblxuICBjb25zdCBjaHJvbVRyZWVQYXJzZXIgPSBuZXcgUGFyc2VyKClcbiAgICAuZW5kaWFuZXNzKGxlKVxuICAgIC51aW50MzIoJ21hZ2ljJylcbiAgICAudWludDMyKCdibG9ja1NpemUnKVxuICAgIC51aW50MzIoJ2tleVNpemUnKVxuICAgIC51aW50MzIoJ3ZhbFNpemUnKVxuICAgIC51aW50NjQoJ2l0ZW1Db3VudCcpXG5cbiAgY29uc3QgaXNMZWFmTm9kZSA9IG5ldyBQYXJzZXIoKVxuICAgIC5lbmRpYW5lc3MobGUpXG4gICAgLnVpbnQ4KCdpc0xlYWZOb2RlJylcbiAgICAuc2tpcCgxKVxuICAgIC51aW50MTYoJ2NudCcpXG5cbiAgcmV0dXJuIHtcbiAgICBjaHJvbVRyZWVQYXJzZXIsXG4gICAgdG90YWxTdW1tYXJ5UGFyc2VyLFxuICAgIGhlYWRlclBhcnNlcixcbiAgICBpc0xlYWZOb2RlLFxuICB9XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCQkkge1xuICBwcm90ZWN0ZWQgYmJpOiBHZW5lcmljRmlsZWhhbmRsZVxuXG4gIHByb3RlY3RlZCBoZWFkZXJDYWNoZTogQWJvcnRBd2FyZUNhY2hlXG5cbiAgcHJvdGVjdGVkIHJlbmFtZVJlZlNlcXM6IChhOiBzdHJpbmcpID0+IHN0cmluZ1xuXG4gIC8qIGZldGNoIGFuZCBwYXJzZSBoZWFkZXIgaW5mb3JtYXRpb24gZnJvbSBhIGJpZ3dpZyBvciBiaWdiZWQgZmlsZVxuICAgKiBAcGFyYW0gYWJvcnRTaWduYWwgLSBhYm9ydCB0aGUgb3BlcmF0aW9uLCBjYW4gYmUgbnVsbFxuICAgKiBAcmV0dXJuIGEgSGVhZGVyIG9iamVjdFxuICAgKi9cbiAgcHVibGljIGdldEhlYWRlcjogKGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWwpID0+IFByb21pc2U8SGVhZGVyPlxuXG4gIC8qXG4gICAqIEBwYXJhbSBmaWxlaGFuZGxlIC0gYSBmaWxlaGFuZGxlIGZyb20gZ2VuZXJpYy1maWxlaGFuZGxlIG9yIGltcGxlbWVudGluZyBzb21ldGhpbmcgc2ltaWxhciB0byB0aGUgbm9kZTEwIGZzLnByb21pc2VzIEFQSVxuICAgKiBAcGFyYW0gcGF0aCAtIGEgTG9jYWwgZmlsZSBwYXRoIGFzIGEgc3RyaW5nXG4gICAqIEBwYXJhbSB1cmwgLSBhIFVSTCBzdHJpbmdcbiAgICogQHBhcmFtIHJlbmFtZVJlZlNlcXMgLSBhbiBvcHRpb25hbCBtZXRob2QgdG8gcmVuYW1lIHRoZSBpbnRlcm5hbCByZWZlcmVuY2Ugc2VxdWVuY2VzIHVzaW5nIGEgbWFwcGluZyBmdW5jdGlvblxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIGZpbGVoYW5kbGU/OiBHZW5lcmljRmlsZWhhbmRsZVxuICAgICAgcGF0aD86IHN0cmluZ1xuICAgICAgdXJsPzogc3RyaW5nXG4gICAgICByZW5hbWVSZWZTZXFzPzogKGE6IHN0cmluZykgPT4gc3RyaW5nXG4gICAgfSA9IHt9LFxuICApIHtcbiAgICBjb25zdCB7IGZpbGVoYW5kbGUsIHJlbmFtZVJlZlNlcXMsIHBhdGgsIHVybCB9ID0gb3B0aW9uc1xuICAgIHRoaXMucmVuYW1lUmVmU2VxcyA9IHJlbmFtZVJlZlNlcXMgfHwgKChzOiBzdHJpbmcpOiBzdHJpbmcgPT4gcylcbiAgICB0aGlzLmhlYWRlckNhY2hlID0gbmV3IEFib3J0QXdhcmVDYWNoZSgpXG4gICAgaWYgKGZpbGVoYW5kbGUpIHtcbiAgICAgIHRoaXMuYmJpID0gZmlsZWhhbmRsZVxuICAgIH0gZWxzZSBpZiAodXJsKSB7XG4gICAgICB0aGlzLmJiaSA9IG5ldyBSZW1vdGVGaWxlKHVybClcbiAgICB9IGVsc2UgaWYgKHBhdGgpIHtcbiAgICAgIHRoaXMuYmJpID0gbmV3IExvY2FsRmlsZShwYXRoKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vIGZpbGUgZ2l2ZW4nKVxuICAgIH1cbiAgICB0aGlzLmdldEhlYWRlciA9IHRoaXMuaGVhZGVyQ2FjaGUuYWJvcnRhYmxlTWVtb2l6ZSh0aGlzLl9nZXRIZWFkZXIuYmluZCh0aGlzKSlcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgX2dldEhlYWRlcihhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxIZWFkZXI+IHtcbiAgICBjb25zdCBpc0JpZ0VuZGlhbiA9IGF3YWl0IHRoaXMuX2lzQmlnRW5kaWFuKGFib3J0U2lnbmFsKVxuICAgIGNvbnN0IGhlYWRlciA9IGF3YWl0IHRoaXMuX2dldE1haW5IZWFkZXIoYWJvcnRTaWduYWwpXG4gICAgY29uc3QgY2hyb21zID0gYXdhaXQgdGhpcy5fcmVhZENocm9tVHJlZShhYm9ydFNpZ25hbClcbiAgICByZXR1cm4geyAuLi5oZWFkZXIsIC4uLmNocm9tcywgaXNCaWdFbmRpYW4gfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBfZ2V0TWFpbkhlYWRlcihhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxIZWFkZXI+IHtcbiAgICBjb25zdCByZXQgPSBnZXRQYXJzZXJzKGF3YWl0IHRoaXMuX2lzQmlnRW5kaWFuKCkpXG4gICAgY29uc3QgYnVmID0gQnVmZmVyLmFsbG9jKDIwMDApXG4gICAgYXdhaXQgdGhpcy5iYmkucmVhZChidWYsIDAsIDIwMDAsIDAsIHsgc2lnbmFsOiBhYm9ydFNpZ25hbCB9KVxuICAgIGNvbnN0IGhlYWRlciA9IHJldC5oZWFkZXJQYXJzZXIucGFyc2UoYnVmKS5yZXN1bHRcbiAgICBoZWFkZXIuZmlsZVR5cGUgPSBoZWFkZXIubWFnaWMgPT09IEJJR19CRURfTUFHSUMgPyAnYmlnYmVkJyA6ICdiaWd3aWcnXG5cbiAgICBpZiAoaGVhZGVyLmFzT2Zmc2V0KSB7XG4gICAgICBoZWFkZXIuYXV0b1NxbCA9IGJ1Zi5zbGljZShoZWFkZXIuYXNPZmZzZXQsIGJ1Zi5pbmRleE9mKDAsIGhlYWRlci5hc09mZnNldCkpLnRvU3RyaW5nKCd1dGY4JylcbiAgICB9XG4gICAgaWYgKGhlYWRlci50b3RhbFN1bW1hcnlPZmZzZXQpIHtcbiAgICAgIGNvbnN0IHRhaWwgPSBidWYuc2xpY2UoaGVhZGVyLnRvdGFsU3VtbWFyeU9mZnNldClcbiAgICAgIGhlYWRlci50b3RhbFN1bW1hcnkgPSByZXQudG90YWxTdW1tYXJ5UGFyc2VyLnBhcnNlKHRhaWwpLnJlc3VsdFxuICAgIH1cbiAgICByZXR1cm4gaGVhZGVyXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIF9pc0JpZ0VuZGlhbihhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgYnVmID0gQnVmZmVyLmFsbG9jVW5zYWZlKDQpXG4gICAgYXdhaXQgdGhpcy5iYmkucmVhZChidWYsIDAsIDQsIDAsIHsgc2lnbmFsOiBhYm9ydFNpZ25hbCB9KVxuICAgIGxldCByZXQgPSBidWYucmVhZEludDMyTEUoMClcbiAgICBpZiAocmV0ID09PSBCSUdfV0lHX01BR0lDIHx8IHJldCA9PT0gQklHX0JFRF9NQUdJQykge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIHJldCA9IGJ1Zi5yZWFkSW50MzJCRSgwKVxuICAgIGlmIChyZXQgPT09IEJJR19XSUdfTUFHSUMgfHwgcmV0ID09PSBCSUdfQkVEX01BR0lDKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBhIEJpZ1dpZy9CaWdCZWQgZmlsZScpXG4gIH1cblxuICAvLyB0b2RvOiBhZGQgcHJvZ3Jlc3MgaWYgbG9uZyBydW5uaW5nXG4gIHByaXZhdGUgYXN5bmMgX3JlYWRDaHJvbVRyZWUoYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8Q2hyb21UcmVlPiB7XG4gICAgY29uc3QgaGVhZGVyID0gYXdhaXQgdGhpcy5fZ2V0TWFpbkhlYWRlcihhYm9ydFNpZ25hbClcbiAgICBjb25zdCBpc0JFID0gYXdhaXQgdGhpcy5faXNCaWdFbmRpYW4oYWJvcnRTaWduYWwpXG4gICAgY29uc3QgbGUgPSBpc0JFID8gJ2JpZycgOiAnbGl0dGxlJ1xuICAgIGNvbnN0IHJlZnNCeU51bWJlcjogYW55ID0ge31cbiAgICBjb25zdCByZWZzQnlOYW1lOiBhbnkgPSB7fVxuICAgIGNvbnN0IHsgY2hyb21UcmVlT2Zmc2V0IH0gPSBoZWFkZXJcbiAgICBsZXQgeyB1bnpvb21lZERhdGFPZmZzZXQgfSA9IGhlYWRlclxuXG4gICAgd2hpbGUgKHVuem9vbWVkRGF0YU9mZnNldCAlIDQgIT09IDApIHtcbiAgICAgIHVuem9vbWVkRGF0YU9mZnNldCArPSAxXG4gICAgfVxuXG4gICAgY29uc3QgZGF0YSA9IEJ1ZmZlci5hbGxvYyh1bnpvb21lZERhdGFPZmZzZXQgLSBjaHJvbVRyZWVPZmZzZXQpXG4gICAgYXdhaXQgdGhpcy5iYmkucmVhZChkYXRhLCAwLCB1bnpvb21lZERhdGFPZmZzZXQgLSBjaHJvbVRyZWVPZmZzZXQsIGNocm9tVHJlZU9mZnNldCwgeyBzaWduYWw6IGFib3J0U2lnbmFsIH0pXG5cbiAgICBjb25zdCBwID0gZ2V0UGFyc2Vycyhpc0JFKVxuICAgIGNvbnN0IHsga2V5U2l6ZSB9ID0gcC5jaHJvbVRyZWVQYXJzZXIucGFyc2UoZGF0YSkucmVzdWx0XG4gICAgY29uc3QgbGVhZk5vZGVQYXJzZXIgPSBuZXcgUGFyc2VyKClcbiAgICAgIC5lbmRpYW5lc3MobGUpXG4gICAgICAuc3RyaW5nKCdrZXknLCB7IHN0cmlwTnVsbDogdHJ1ZSwgbGVuZ3RoOiBrZXlTaXplIH0pXG4gICAgICAudWludDMyKCdyZWZJZCcpXG4gICAgICAudWludDMyKCdyZWZTaXplJylcbiAgICBjb25zdCBub25sZWFmTm9kZVBhcnNlciA9IG5ldyBQYXJzZXIoKVxuICAgICAgLmVuZGlhbmVzcyhsZSlcbiAgICAgIC5za2lwKGtleVNpemUpXG4gICAgICAudWludDY0KCdjaGlsZE9mZnNldCcpXG4gICAgY29uc3Qgcm9vdE5vZGVPZmZzZXQgPSAzMlxuICAgIGNvbnN0IGJwdFJlYWROb2RlID0gYXN5bmMgKGN1cnJlbnRPZmZzZXQ6IG51bWJlcik6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgbGV0IG9mZnNldCA9IGN1cnJlbnRPZmZzZXRcbiAgICAgIGlmIChvZmZzZXQgPj0gZGF0YS5sZW5ndGgpIHRocm93IG5ldyBFcnJvcigncmVhZGluZyBiZXlvbmQgZW5kIG9mIGJ1ZmZlcicpXG4gICAgICBjb25zdCByZXQgPSBwLmlzTGVhZk5vZGUucGFyc2UoZGF0YS5zbGljZShvZmZzZXQpKVxuICAgICAgY29uc3QgeyBpc0xlYWZOb2RlLCBjbnQgfSA9IHJldC5yZXN1bHRcbiAgICAgIG9mZnNldCArPSByZXQub2Zmc2V0XG4gICAgICBmb3IgKGxldCBuID0gMDsgbiA8IGNudDsgbiArPSAxKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1hd2FpdC1pbi1sb29wXG4gICAgICAgIGF3YWl0IGFib3J0QnJlYWtQb2ludChhYm9ydFNpZ25hbClcbiAgICAgICAgaWYgKGlzTGVhZk5vZGUpIHtcbiAgICAgICAgICBjb25zdCBsZWFmUmV0ID0gbGVhZk5vZGVQYXJzZXIucGFyc2UoZGF0YS5zbGljZShvZmZzZXQpKVxuICAgICAgICAgIG9mZnNldCArPSBsZWFmUmV0Lm9mZnNldFxuICAgICAgICAgIGNvbnN0IHsga2V5LCByZWZJZCwgcmVmU2l6ZSB9ID0gbGVhZlJldC5yZXN1bHRcbiAgICAgICAgICBjb25zdCByZWZSZWMgPSB7IG5hbWU6IGtleSwgaWQ6IHJlZklkLCBsZW5ndGg6IHJlZlNpemUgfVxuICAgICAgICAgIHJlZnNCeU5hbWVbdGhpcy5yZW5hbWVSZWZTZXFzKGtleSldID0gcmVmSWRcbiAgICAgICAgICByZWZzQnlOdW1iZXJbcmVmSWRdID0gcmVmUmVjXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gcGFyc2UgaW5kZXggbm9kZVxuICAgICAgICAgIGNvbnN0IG5vbmxlYWZSZXQgPSBub25sZWFmTm9kZVBhcnNlci5wYXJzZShkYXRhLnNsaWNlKG9mZnNldCkpXG4gICAgICAgICAgbGV0IHsgY2hpbGRPZmZzZXQgfSA9IG5vbmxlYWZSZXQucmVzdWx0XG4gICAgICAgICAgb2Zmc2V0ICs9IG5vbmxlYWZSZXQub2Zmc2V0XG4gICAgICAgICAgY2hpbGRPZmZzZXQgLT0gY2hyb21UcmVlT2Zmc2V0XG4gICAgICAgICAgYnB0UmVhZE5vZGUoY2hpbGRPZmZzZXQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgYXdhaXQgYnB0UmVhZE5vZGUocm9vdE5vZGVPZmZzZXQpXG4gICAgcmV0dXJuIHtcbiAgICAgIHJlZnNCeU5hbWUsXG4gICAgICByZWZzQnlOdW1iZXIsXG4gICAgfVxuICB9XG5cbiAgLypcbiAgICogZmV0Y2hlcyB0aGUgXCJ1bnpvb21lZFwiIHZpZXcgb2YgdGhlIGJpZ3dpZyBkYXRhLiB0aGlzIGlzIHRoZSBkZWZhdWx0IGZvciBiaWdiZWRcbiAgICogQHBhcmFtIGFib3J0U2lnbmFsIC0gYSBzaWduYWwgdG8gb3B0aW9uYWxseSBhYm9ydCB0aGlzIG9wZXJhdGlvblxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGdldFVuem9vbWVkVmlldyhhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxCbG9ja1ZpZXc+IHtcbiAgICBjb25zdCB7XG4gICAgICB1bnpvb21lZEluZGV4T2Zmc2V0LFxuICAgICAgem9vbUxldmVscyxcbiAgICAgIHJlZnNCeU5hbWUsXG4gICAgICB1bmNvbXByZXNzQnVmU2l6ZSxcbiAgICAgIGlzQmlnRW5kaWFuLFxuICAgICAgZmlsZVR5cGUsXG4gICAgfSA9IGF3YWl0IHRoaXMuZ2V0SGVhZGVyKGFib3J0U2lnbmFsKVxuICAgIGNvbnN0IG56bCA9IHpvb21MZXZlbHNbMF1cbiAgICBjb25zdCBjaXJMZW4gPSBuemwgPyBuemwuZGF0YU9mZnNldCAtIHVuem9vbWVkSW5kZXhPZmZzZXQgOiA0MDAwXG4gICAgcmV0dXJuIG5ldyBCbG9ja1ZpZXcoXG4gICAgICB0aGlzLmJiaSxcbiAgICAgIHJlZnNCeU5hbWUsXG4gICAgICB1bnpvb21lZEluZGV4T2Zmc2V0LFxuICAgICAgY2lyTGVuLFxuICAgICAgaXNCaWdFbmRpYW4sXG4gICAgICB1bmNvbXByZXNzQnVmU2l6ZSA+IDAsXG4gICAgICBmaWxlVHlwZSxcbiAgICApXG4gIH1cblxuICAvKlxuICAgKiBhYnN0cmFjdCBtZXRob2QgLSBnZXQgdGhlIHZpZXcgZm9yIGEgZ2l2ZW4gc2NhbGVcbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBhc3luYyBnZXRWaWV3KHNjYWxlOiBudW1iZXIsIGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPEJsb2NrVmlldz5cblxuICAvKipcbiAgICogR2V0cyBmZWF0dXJlcyBmcm9tIGEgQmlnV2lnIGZpbGVcbiAgICpcbiAgICogQHBhcmFtIHJlZk5hbWUgLSBUaGUgY2hyb21vc29tZSBuYW1lXG4gICAqIEBwYXJhbSBzdGFydCAtIFRoZSBzdGFydCBvZiBhIHJlZ2lvblxuICAgKiBAcGFyYW0gZW5kIC0gVGhlIGVuZCBvZiBhIHJlZ2lvblxuICAgKiBAcGFyYW0gb3B0cyAtIEFuIG9iamVjdCBjb250YWluaW5nIGJhc2VzUGVyU3BhbiAoZS5nLiBwaXhlbHMgcGVyIGJhc2VwYWlyKSBvciBzY2FsZSB1c2VkIHRvIGluZmVyIHRoZSB6b29tTGV2ZWwgdG8gdXNlXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0RmVhdHVyZVN0cmVhbShcbiAgICByZWZOYW1lOiBzdHJpbmcsXG4gICAgc3RhcnQ6IG51bWJlcixcbiAgICBlbmQ6IG51bWJlcixcbiAgICBvcHRzOiB7IGJhc2VzUGVyU3Bhbj86IG51bWJlcjsgc2NhbGU/OiBudW1iZXI7IHNpZ25hbD86IEFib3J0U2lnbmFsIH0gPSB7IHNjYWxlOiAxIH0sXG4gICk6IFByb21pc2U8T2JzZXJ2YWJsZTxGZWF0dXJlW10+PiB7XG4gICAgYXdhaXQgdGhpcy5nZXRIZWFkZXIob3B0cy5zaWduYWwpXG4gICAgY29uc3QgY2hyTmFtZSA9IHRoaXMucmVuYW1lUmVmU2VxcyhyZWZOYW1lKVxuICAgIGxldCB2aWV3OiBCbG9ja1ZpZXdcblxuICAgIGlmIChvcHRzLmJhc2VzUGVyU3Bhbikge1xuICAgICAgdmlldyA9IGF3YWl0IHRoaXMuZ2V0VmlldygxIC8gb3B0cy5iYXNlc1BlclNwYW4sIG9wdHMuc2lnbmFsKVxuICAgIH0gZWxzZSBpZiAob3B0cy5zY2FsZSkge1xuICAgICAgdmlldyA9IGF3YWl0IHRoaXMuZ2V0VmlldyhvcHRzLnNjYWxlLCBvcHRzLnNpZ25hbClcbiAgICB9IGVsc2Uge1xuICAgICAgdmlldyA9IGF3YWl0IHRoaXMuZ2V0VmlldygxLCBvcHRzLnNpZ25hbClcbiAgICB9XG5cbiAgICBpZiAoIXZpZXcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndW5hYmxlIHRvIGdldCBibG9jayB2aWV3IGZvciBkYXRhJylcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKFxuICAgICAgKG9ic2VydmVyOiBPYnNlcnZlcjxGZWF0dXJlW10+KTogdm9pZCA9PiB7XG4gICAgICAgIHZpZXcucmVhZFdpZ0RhdGEoY2hyTmFtZSwgc3RhcnQsIGVuZCwgb2JzZXJ2ZXIsIG9wdHMpXG4gICAgICB9LFxuICAgIClcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRGZWF0dXJlcyhcbiAgICByZWZOYW1lOiBzdHJpbmcsXG4gICAgc3RhcnQ6IG51bWJlcixcbiAgICBlbmQ6IG51bWJlcixcbiAgICBvcHRzOiB7IGJhc2VzUGVyU3Bhbj86IG51bWJlcjsgc2NhbGU/OiBudW1iZXI7IHNpZ25hbD86IEFib3J0U2lnbmFsIH0gPSB7IHNjYWxlOiAxIH0sXG4gICk6IFByb21pc2U8RmVhdHVyZVtdPiB7XG4gICAgY29uc3Qgb2IgPSBhd2FpdCB0aGlzLmdldEZlYXR1cmVTdHJlYW0ocmVmTmFtZSwgc3RhcnQsIGVuZCwgb3B0cylcbiAgICBjb25zdCByZXQgPSBhd2FpdCBvYi5waXBlKHJlZHVjZSgoYWNjOiBGZWF0dXJlW10sIGN1cnI6IEZlYXR1cmVbXSk6IEZlYXR1cmVbXSA9PiBhY2MuY29uY2F0KGN1cnIpKSkudG9Qcm9taXNlKClcbiAgICByZXR1cm4gcmV0IHx8IFtdXG4gIH1cbn1cbiJdfQ== |
@@ -174,2 +174,3 @@ "use strict"; | ||
case 0: | ||
_context3.prev = 0; | ||
refsByName = this.refsByName, bbi = this.bbi, cirTreeOffset = this.cirTreeOffset, isBigEndian = this.isBigEndian; | ||
@@ -190,15 +191,15 @@ signal = opts.signal; | ||
if (!this.cirTreePromise) { | ||
_context3.next = 10; | ||
_context3.next = 11; | ||
break; | ||
} | ||
_context3.next = 8; | ||
_context3.next = 9; | ||
return this.cirTreePromise; | ||
case 8: | ||
_context3.next = 13; | ||
case 9: | ||
_context3.next = 14; | ||
break; | ||
case 10: | ||
_context3.next = 12; | ||
case 11: | ||
_context3.next = 13; | ||
return bbi.read(this.cirTreeBuffer, 0, 48, cirTreeOffset, { | ||
@@ -208,6 +209,6 @@ signal: signal | ||
case 12: | ||
case 13: | ||
this.cirTreePromise = _context3.sent; | ||
case 13: | ||
case 14: | ||
buffer = this.cirTreeBuffer; | ||
@@ -233,5 +234,6 @@ cirBlockSize = isBigEndian ? buffer.readUInt32BE(4) : buffer.readUInt32LE(4); | ||
case 0: | ||
_context2.prev = 0; | ||
length = fr.max() - fr.min(); | ||
offset = fr.min(); | ||
_context2.next = 4; | ||
_context2.next = 5; | ||
return _this.featureCache.get("".concat(length, "_").concat(offset), { | ||
@@ -242,3 +244,3 @@ length: length, | ||
case 4: | ||
case 5: | ||
resultBuffer = _context2.sent; | ||
@@ -259,10 +261,11 @@ | ||
if (!(outstanding !== 0)) { | ||
_context2.next = 8; | ||
break; | ||
} | ||
_context2.next = 12; | ||
break; | ||
throw new Error('did not complete'); | ||
case 9: | ||
_context2.prev = 9; | ||
_context2.t0 = _context2["catch"](0); | ||
observer.error(_context2.t0); | ||
case 8: | ||
case 12: | ||
case "end": | ||
@@ -272,3 +275,3 @@ return _context2.stop(); | ||
} | ||
}, _callee2); | ||
}, _callee2, null, [[0, 9]]); | ||
})); | ||
@@ -282,45 +285,58 @@ | ||
cirFobRecur = function cirFobRecur(offset, level) { | ||
outstanding += offset.length; | ||
var maxCirBlockSpan = 4 + cirBlockSize * 32; // Upper bound on size, based on a completely full leaf node. | ||
try { | ||
outstanding += offset.length; | ||
var maxCirBlockSpan = 4 + cirBlockSize * 32; // Upper bound on size, based on a completely full leaf node. | ||
var spans = new _range.default(offset[0], offset[0] + maxCirBlockSpan); | ||
var spans = new _range.default(offset[0], offset[0] + maxCirBlockSpan); | ||
for (var i = 1; i < offset.length; i += 1) { | ||
var blockSpan = new _range.default(offset[i], offset[i] + maxCirBlockSpan); | ||
spans = spans.union(blockSpan); | ||
for (var i = 1; i < offset.length; i += 1) { | ||
var blockSpan = new _range.default(offset[i], offset[i] + maxCirBlockSpan); | ||
spans = spans.union(blockSpan); | ||
} | ||
spans.getRanges().map(function (fr) { | ||
return cirFobStartFetch(offset, fr, level); | ||
}); | ||
} catch (e) { | ||
observer.error(e); | ||
} | ||
spans.getRanges().map(function (fr) { | ||
return cirFobStartFetch(offset, fr, level); | ||
}); | ||
}; | ||
cirFobRecur2 = function cirFobRecur2(cirBlockData, offset, level) { | ||
var data = cirBlockData.slice(offset); | ||
try { | ||
var data = cirBlockData.slice(offset); | ||
var p = _this.leafParser.parse(data).result; | ||
var p = _this.leafParser.parse(data).result; | ||
if (p.blocksToFetch) { | ||
blocksToFetch = blocksToFetch.concat(p.blocksToFetch.filter(filterFeats).map(function (l) { | ||
return { | ||
offset: l.blockOffset, | ||
length: l.blockSize | ||
}; | ||
})); | ||
} | ||
if (p.blocksToFetch) { | ||
blocksToFetch = blocksToFetch.concat(p.blocksToFetch.filter(filterFeats).map(function (l) { | ||
return { | ||
offset: l.blockOffset, | ||
length: l.blockSize | ||
}; | ||
})); | ||
} | ||
if (p.recurOffsets) { | ||
var recurOffsets = p.recurOffsets.filter(filterFeats).map(function (l) { | ||
return l.blockOffset; | ||
}); | ||
if (p.recurOffsets) { | ||
var recurOffsets = p.recurOffsets.filter(filterFeats).map(function (l) { | ||
return l.blockOffset; | ||
}); | ||
if (recurOffsets.length > 0) { | ||
cirFobRecur(recurOffsets, level + 1); | ||
if (recurOffsets.length > 0) { | ||
cirFobRecur(recurOffsets, level + 1); | ||
} | ||
} | ||
} catch (e) { | ||
observer.error(e); | ||
} | ||
}; | ||
cirFobRecur([cirTreeOffset + 48], 1); | ||
return _context3.abrupt("return", cirFobRecur([cirTreeOffset + 48], 1)); | ||
case 22: | ||
case 25: | ||
_context3.prev = 25; | ||
_context3.t0 = _context3["catch"](0); | ||
observer.error(_context3.t0); | ||
case 28: | ||
case "end": | ||
@@ -330,3 +346,3 @@ return _context3.stop(); | ||
} | ||
}, _callee3, this); | ||
}, _callee3, this, [[0, 25]]); | ||
})); | ||
@@ -436,6 +452,7 @@ | ||
opts = _args5.length > 2 && _args5[2] !== undefined ? _args5[2] : {}; | ||
_context5.prev = 1; | ||
blockType = this.blockType, isCompressed = this.isCompressed; | ||
signal = opts.signal, request = opts.request; | ||
blockGroupsToFetch = (0, _util.groupBlocks)(blocks); | ||
_context5.next = 6; | ||
_context5.next = 7; | ||
return Promise.all(blockGroupsToFetch.map( | ||
@@ -494,6 +511,13 @@ /*#__PURE__*/ | ||
case 6: | ||
case 7: | ||
observer.complete(); | ||
_context5.next = 13; | ||
break; | ||
case 7: | ||
case 10: | ||
_context5.prev = 10; | ||
_context5.t0 = _context5["catch"](1); | ||
observer.error(_context5.t0); | ||
case 13: | ||
case "end": | ||
@@ -503,3 +527,3 @@ return _context5.stop(); | ||
} | ||
}, _callee5, this); | ||
}, _callee5, this, [[1, 10]]); | ||
})); | ||
@@ -523,2 +547,2 @@ | ||
exports.BlockView = BlockView; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9ibG9ja1ZpZXcudHMiXSwibmFtZXMiOlsiQklHX1dJR19UWVBFX0dSQVBIIiwiQklHX1dJR19UWVBFX1ZTVEVQIiwiQklHX1dJR19UWVBFX0ZTVEVQIiwiZ2V0UGFyc2VycyIsImlzQmlnRW5kaWFuIiwibGUiLCJzdW1tYXJ5UGFyc2VyIiwiUGFyc2VyIiwiZW5kaWFuZXNzIiwidWludDMyIiwiZmxvYXQiLCJsZWFmUGFyc2VyIiwidWludDgiLCJza2lwIiwidWludDE2IiwiY2hvaWNlIiwidGFnIiwiY2hvaWNlcyIsImFycmF5IiwibGVuZ3RoIiwidHlwZSIsInVpbnQ2NCIsImJpZ0JlZFBhcnNlciIsImludDMyIiwic3RyaW5nIiwiemVyb1Rlcm1pbmF0ZWQiLCJiaWdXaWdQYXJzZXIiLCJCbG9ja1ZpZXciLCJiYmkiLCJyZWZzQnlOYW1lIiwiY2lyVHJlZU9mZnNldCIsImNpclRyZWVMZW5ndGgiLCJpc0NvbXByZXNzZWQiLCJibG9ja1R5cGUiLCJFcnJvciIsImNpclRyZWVCdWZmZXIiLCJCdWZmZXIiLCJhbGxvYyIsIk9iamVjdCIsImFzc2lnbiIsImZlYXR1cmVDYWNoZSIsIkFib3J0YWJsZVByb21pc2VDYWNoZSIsImNhY2hlIiwiUXVpY2tMUlUiLCJtYXhTaXplIiwiZmlsbCIsInJlcXVlc3REYXRhIiwic2lnbmFsIiwib2Zmc2V0IiwicmVzdWx0QnVmZmVyIiwicmVhZCIsImNock5hbWUiLCJzdGFydCIsImVuZCIsIm9ic2VydmVyIiwib3B0cyIsImNocklkIiwidW5kZWZpbmVkIiwiY29tcGxldGUiLCJyZXF1ZXN0IiwiY2lyVHJlZVByb21pc2UiLCJidWZmZXIiLCJjaXJCbG9ja1NpemUiLCJyZWFkVUludDMyQkUiLCJyZWFkVUludDMyTEUiLCJibG9ja3NUb0ZldGNoIiwib3V0c3RhbmRpbmciLCJmaWx0ZXJGZWF0cyIsImIiLCJzdGFydENocm9tIiwic3RhcnRCYXNlIiwiZW5kQ2hyb20iLCJlbmRCYXNlIiwiY2lyRm9iU3RhcnRGZXRjaCIsIm9mZiIsImZyIiwibGV2ZWwiLCJtYXgiLCJtaW4iLCJnZXQiLCJpIiwiY29udGFpbnMiLCJjaXJGb2JSZWN1cjIiLCJyZWFkRmVhdHVyZXMiLCJjaXJGb2JSZWN1ciIsIm1heENpckJsb2NrU3BhbiIsInNwYW5zIiwiUmFuZ2UiLCJibG9ja1NwYW4iLCJ1bmlvbiIsImdldFJhbmdlcyIsIm1hcCIsImNpckJsb2NrRGF0YSIsImRhdGEiLCJzbGljZSIsInAiLCJwYXJzZSIsInJlc3VsdCIsImNvbmNhdCIsImZpbHRlciIsImwiLCJibG9ja09mZnNldCIsImJsb2NrU2l6ZSIsInJlY3VyT2Zmc2V0cyIsInN0YXJ0T2Zmc2V0IiwiZmVhdHVyZXMiLCJjdXJyT2Zmc2V0IiwiYnl0ZUxlbmd0aCIsInJlcyIsInB1c2giLCJpdGVtcyIsImVsdCIsImNocm9tSWQiLCJtYXhTY29yZSIsIm1pblNjb3JlIiwic2NvcmUiLCJzdW1EYXRhIiwidmFsaWRDbnQiLCJzdW1tYXJ5IiwiZiIsImNvb3JkRmlsdGVyIiwidW5pcXVlSWQiLCJieXRlcyIsInJlc3VsdHMiLCJzdGVwIiwiaXRlbVN0ZXAiLCJzcGFuIiwiaXRlbVNwYW4iLCJmZWF0dXJlIiwiaW5kZXgiLCJibG9ja3MiLCJibG9ja0dyb3Vwc1RvRmV0Y2giLCJQcm9taXNlIiwiYWxsIiwiYmxvY2tHcm91cCIsImZvckVhY2giLCJibG9jayIsInJlc3VsdERhdGEiLCJ6bGliIiwiaW5mbGF0ZVN5bmMiLCJuZXh0IiwicGFyc2VTdW1tYXJ5QmxvY2siLCJwYXJzZUJpZ1dpZ0Jsb2NrIiwicGFyc2VCaWdCZWRCbG9jayIsImNvbnNvbGUiLCJ3YXJuIiwicmFuZ2UiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBUkE7QUE4Q0EsSUFBTUEsa0JBQWtCLEdBQUcsQ0FBM0I7QUFDQSxJQUFNQyxrQkFBa0IsR0FBRyxDQUEzQjtBQUNBLElBQU1DLGtCQUFrQixHQUFH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Q0FBSyxRQUFMO0FBQ0VMLGtDQUFBQSxRQUFRLENBQUNzRixJQUFULENBQWMsTUFBSSxDQUFDRyxnQkFBTCxDQUFzQk4sVUFBdEIsRUFBa0NwQyxXQUFsQyxFQUErQzFDLE9BQS9DLENBQWQ7QUFDQTs7QUFDRjtBQUNFcUYsa0NBQUFBLE9BQU8sQ0FBQ0MsSUFBUixzQ0FBMkNoSCxTQUEzQztBQVhKO0FBYUQsNkJBbEJEOztBQUhxQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxtQkFBdkI7O0FBQUE7QUFBQTtBQUFBO0FBQUEsb0JBREksQzs7O0FBeUJOcUIsZ0JBQUFBLFFBQVEsQ0FBQ0ksUUFBVDs7Ozs7Ozs7Ozs7Ozs7Ozs7O2dDQWpDeUI2RCxDLEVBQVkyQixLLEVBQThCO0FBQ25FLGFBQU8zQixDQUFDLENBQUNuRSxLQUFGLEdBQVU4RixLQUFLLENBQUM3RixHQUFoQixJQUF1QmtFLENBQUMsQ0FBQ2xFLEdBQUYsSUFBUzZGLEtBQUssQ0FBQzlGLEtBQTdDO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQgbm8tYml0d2lzZTogW1wiZXJyb3JcIiwgeyBcImFsbG93XCI6IFtcInxcIl0gfV0gKi9cbmltcG9ydCB7IE9ic2VydmVyIH0gZnJvbSAncnhqcydcbmltcG9ydCB7IFBhcnNlciB9IGZyb20gJ0BnbW9kL2JpbmFyeS1wYXJzZXInXG5pbXBvcnQgQWJvcnRhYmxlUHJvbWlzZUNhY2hlIGZyb20gJ2Fib3J0YWJsZS1wcm9taXNlLWNhY2hlJ1xuaW1wb3J0ICogYXMgemxpYiBmcm9tICd6bGliJ1xuaW1wb3J0IFF1aWNrTFJVIGZyb20gJ3F1aWNrLWxydSdcbmltcG9ydCB7IEZlYXR1cmUgfSBmcm9tICcuL2JiaSdcbmltcG9ydCBSYW5nZSBmcm9tICcuL3JhbmdlJ1xuaW1wb3J0IHsgZ3JvdXBCbG9ja3MgfSBmcm9tICcuL3V0aWwnXG5cbmludGVyZmFjZSBDb29yZFJlcXVlc3Qge1xuICBjaHJJZDogbnVtYmVyXG4gIHN0YXJ0OiBudW1iZXJcbiAgZW5kOiBudW1iZXJcbn1cbmludGVyZmFjZSBEYXRhQmxvY2sge1xuICBzdGFydENocm9tOiBudW1iZXJcbiAgZW5kQ2hyb206IG51bWJlclxuICBzdGFydEJhc2U6IG51bWJlclxuICBlbmRCYXNlOiBudW1iZXJcbiAgdmFsaWRDbnQ6IG51bWJlclxuICBtaW5WYWw6IG51bWJlclxuICBtYXhWYWw6IG51bWJlclxuICBzdW1EYXRhOiBudW1iZXJcbiAgc3VtU3FEYXRhOiBudW1iZXJcbn1cbmludGVyZmFjZSBSZWFkRGF0YSB7XG4gIG9mZnNldDogbnVtYmVyXG4gIGxlbmd0aDogbnVtYmVyXG59XG5cbmludGVyZmFjZSBTdW1tYXJ5QmxvY2sge1xuICBjaHJvbUlkOiBudW1iZXJcbiAgc3RhcnQ6IG51bWJlclxuICBlbmQ6IG51bWJlclxuICB2YWxpZENudDogbnVtYmVyXG4gIG1pblNjb3JlOiBudW1iZXJcbiAgbWF4U2NvcmU6IG51bWJlclxuICBzdW1EYXRhOiBudW1iZXJcbiAgc3VtU3FEYXRhOiBudW1iZXJcbn1cbmludGVyZmFjZSBPcHRpb25zIHtcbiAgc2lnbmFsPzogQWJvcnRTaWduYWxcbiAgcmVxdWVzdD86IENvb3JkUmVxdWVzdFxufVxuXG5jb25zdCBCSUdfV0lHX1RZUEVfR1JBUEggPSAxXG5jb25zdCBCSUdfV0lHX1RZUEVfVlNURVAgPSAyXG5jb25zdCBCSUdfV0lHX1RZUEVfRlNURVAgPSAzXG5cbmZ1bmN0aW9uIGdldFBhcnNlcnMoaXNCaWdFbmRpYW46IGJvb2xlYW4pOiBhbnkge1xuICBjb25zdCBsZSA9IGlzQmlnRW5kaWFuID8gJ2JpZycgOiAnbGl0dGxlJ1xuICBjb25zdCBzdW1tYXJ5UGFyc2VyID0gbmV3IFBhcnNlcigpXG4gICAgLmVuZGlhbmVzcyhsZSlcbiAgICAudWludDMyKCdjaHJvbUlkJylcbiAgICAudWludDMyKCdzdGFydCcpXG4gICAgLnVpbnQzMignZW5kJylcbiAgICAudWludDMyKCd2YWxpZENudCcpXG4gICAgLmZsb2F0KCdtaW5TY29yZScpXG4gICAgLmZsb2F0KCdtYXhTY29yZScpXG4gICAgLmZsb2F0KCdzdW1EYXRhJylcbiAgICAuZmxvYXQoJ3N1bVNxRGF0YScpXG5cbiAgY29uc3QgbGVhZlBhcnNlciA9IG5ldyBQYXJzZXIoKVxuICAgIC5lbmRpYW5lc3MobGUpXG4gICAgLnVpbnQ4KCdpc0xlYWYnKVxuICAgIC5za2lwKDEpXG4gICAgLnVpbnQxNignY250JylcbiAgICAuY2hvaWNlKHtcbiAgICAgIHRhZzogJ2lzTGVhZicsXG4gICAgICBjaG9pY2VzOiB7XG4gICAgICAgIDE6IG5ldyBQYXJzZXIoKS5hcnJheSgnYmxvY2tzVG9GZXRjaCcsIHtcbiAgICAgICAgICBsZW5ndGg6ICdjbnQnLFxuICAgICAgICAgIHR5cGU6IG5ldyBQYXJzZXIoKVxuICAgICAgICAgICAgLnVpbnQzMignc3RhcnRDaHJvbScpXG4gICAgICAgICAgICAudWludDMyKCdzdGFydEJhc2UnKVxuICAgICAgICAgICAgLnVpbnQzMignZW5kQ2hyb20nKVxuICAgICAgICAgICAgLnVpbnQzMignZW5kQmFzZScpXG4gICAgICAgICAgICAudWludDY0KCdibG9ja09mZnNldCcpXG4gICAgICAgICAgICAudWludDY0KCdibG9ja1NpemUnKSxcbiAgICAgICAgfSksXG4gICAgICAgIDA6IG5ldyBQYXJzZXIoKS5hcnJheSgncmVjdXJPZmZzZXRzJywge1xuICAgICAgICAgIGxlbmd0aDogJ2NudCcsXG4gICAgICAgICAgdHlwZTogbmV3IFBhcnNlcigpXG4gICAgICAgICAgICAudWludDMyKCdzdGFydENocm9tJylcbiAgICAgICAgICAgIC51aW50MzIoJ3N0YXJ0QmFzZScpXG4gICAgICAgICAgICAudWludDMyKCdlbmRDaHJvbScpXG4gICAgICAgICAgICAudWludDMyKCdlbmRCYXNlJylcbiAgICAgICAgICAgIC51aW50NjQoJ2Jsb2NrT2Zmc2V0JyksXG4gICAgICAgIH0pLFxuICAgICAgfSxcbiAgICB9KVxuICBjb25zdCBiaWdCZWRQYXJzZXIgPSBuZXcgUGFyc2VyKClcbiAgICAuZW5kaWFuZXNzKGxlKVxuICAgIC51aW50MzIoJ2Nocm9tSWQnKVxuICAgIC5pbnQzMignc3RhcnQnKVxuICAgIC5pbnQzMignZW5kJylcbiAgICAuc3RyaW5nKCdyZXN0Jywge1xuICAgICAgemVyb1Rlcm1pbmF0ZWQ6IHRydWUsXG4gICAgfSlcblxuICBjb25zdCBiaWdXaWdQYXJzZXIgPSBuZXcgUGFyc2VyKClcbiAgICAuZW5kaWFuZXNzKGxlKVxuICAgIC5za2lwKDQpXG4gICAgLmludDMyKCdibG9ja1N0YXJ0JylcbiAgICAuc2tpcCg0KVxuICAgIC51aW50MzIoJ2l0ZW1TdGVwJylcbiAgICAudWludDMyKCdpdGVtU3BhbicpXG4gICAgLnVpbnQ4KCdibG9ja1R5cGUnKVxuICAgIC5za2lwKDEpXG4gICAgLnVpbnQxNignaXRlbUNvdW50JylcbiAgICAuY2hvaWNlKHtcbiAgICAgIHRhZzogJ2Jsb2NrVHlwZScsXG4gICAgICBjaG9pY2VzOiB7XG4gICAgICAgIFtCSUdfV0lHX1RZUEVfRlNURVBdOiBuZXcgUGFyc2VyKCkuYXJyYXkoJ2l0ZW1zJywge1xuICAgICAgICAgIGxlbmd0aDogJ2l0ZW1Db3VudCcsXG4gICAgICAgICAgdHlwZTogbmV3IFBhcnNlcigpLmZsb2F0KCdzY29yZScpLFxuICAgICAgICB9KSxcbiAgICAgICAgW0JJR19XSUdfVFlQRV9WU1RFUF06IG5ldyBQYXJzZXIoKS5hcnJheSgnaXRlbXMnLCB7XG4gICAgICAgICAgbGVuZ3RoOiAnaXRlbUNvdW50JyxcbiAgICAgICAgICB0eXBlOiBuZXcgUGFyc2VyKCkuaW50MzIoJ3N0YXJ0JykuZmxvYXQoJ3Njb3JlJyksXG4gICAgICAgIH0pLFxuICAgICAgICBbQklHX1dJR19UWVBFX0dSQVBIXTogbmV3IFBhcnNlcigpLmFycmF5KCdpdGVtcycsIHtcbiAgICAgICAgICBsZW5ndGg6ICdpdGVtQ291bnQnLFxuICAgICAgICAgIHR5cGU6IG5ldyBQYXJzZXIoKVxuICAgICAgICAgICAgLmludDMyKCdzdGFydCcpXG4gICAgICAgICAgICAuaW50MzIoJ2VuZCcpXG4gICAgICAgICAgICAuZmxvYXQoJ3Njb3JlJyksXG4gICAgICAgIH0pLFxuICAgICAgfSxcbiAgICB9KVxuICByZXR1cm4ge1xuICAgIGJpZ1dpZ1BhcnNlcixcbiAgICBiaWdCZWRQYXJzZXIsXG4gICAgc3VtbWFyeVBhcnNlcixcbiAgICBsZWFmUGFyc2VyLFxuICB9XG59XG5cbi8qKlxuICogVmlldyBpbnRvIGEgc3Vic2V0IG9mIHRoZSBkYXRhIGluIGEgQmlnV2lnIGZpbGUuXG4gKlxuICogQWRhcHRlZCBieSBSb2JlcnQgQnVlbHMgYW5kIENvbGluIERpZXNoIGZyb20gYmlnd2lnLmpzIGluIHRoZSBEYWxsaWFuY2UgR2Vub21lXG4gKiBFeHBsb3JlciBieSBUaG9tYXMgRG93bi5cbiAqIEBjb25zdHJ1Y3RzXG4gKi9cblxuZXhwb3J0IGNsYXNzIEJsb2NrVmlldyB7XG4gIHByaXZhdGUgY2lyVHJlZU9mZnNldDogbnVtYmVyXG5cbiAgcHJpdmF0ZSBjaXJUcmVlTGVuZ3RoOiBudW1iZXJcblxuICBwcml2YXRlIGJiaTogYW55XG5cbiAgcHJpdmF0ZSBpc0NvbXByZXNzZWQ6IGJvb2xlYW5cblxuICBwcml2YXRlIGlzQmlnRW5kaWFuOiBib29sZWFuXG5cbiAgcHJpdmF0ZSByZWZzQnlOYW1lOiBhbnlcblxuICBwcml2YXRlIGJsb2NrVHlwZTogc3RyaW5nXG5cbiAgcHJpdmF0ZSBjaXJUcmVlQnVmZmVyOiBCdWZmZXJcblxuICBwcml2YXRlIGNpclRyZWVQcm9taXNlPzogUHJvbWlzZTx2b2lkPlxuXG4gIHByaXZhdGUgZmVhdHVyZUNhY2hlOiBhbnlcblxuICBwcml2YXRlIGxlYWZQYXJzZXI6IGFueVxuXG4gIHByaXZhdGUgYmlnV2lnUGFyc2VyOiBhbnlcblxuICBwcml2YXRlIGJpZ0JlZFBhcnNlcjogYW55XG5cbiAgcHJpdmF0ZSBzdW1tYXJ5UGFyc2VyOiBhbnlcblxuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgYmJpOiBhbnksXG4gICAgcmVmc0J5TmFtZTogYW55LFxuICAgIGNpclRyZWVPZmZzZXQ6IG51bWJlcixcbiAgICBjaXJUcmVlTGVuZ3RoOiBudW1iZXIsXG4gICAgaXNCaWdFbmRpYW46IGJvb2xlYW4sXG4gICAgaXNDb21wcmVzc2VkOiBib29sZWFuLFxuICAgIGJsb2NrVHlwZTogc3RyaW5nLFxuICApIHtcbiAgICBpZiAoIShjaXJUcmVlT2Zmc2V0ID49IDApKSB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgY2lyVHJlZU9mZnNldCEnKVxuICAgIGlmICghKGNpclRyZWVMZW5ndGggPiAwKSkgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGNpclRyZWVMZW5ndGghJylcblxuICAgIHRoaXMuY2lyVHJlZU9mZnNldCA9IGNpclRyZWVPZmZzZXRcbiAgICB0aGlzLmNpclRyZWVMZW5ndGggPSBjaXJUcmVlTGVuZ3RoXG4gICAgdGhpcy5pc0NvbXByZXNzZWQgPSBpc0NvbXByZXNzZWRcbiAgICB0aGlzLnJlZnNCeU5hbWUgPSByZWZzQnlOYW1lXG4gICAgdGhpcy5pc0JpZ0VuZGlhbiA9IGlzQmlnRW5kaWFuXG4gICAgdGhpcy5iYmkgPSBiYmlcbiAgICB0aGlzLmJsb2NrVHlwZSA9IGJsb2NrVHlwZVxuICAgIHRoaXMuY2lyVHJlZUJ1ZmZlciA9IEJ1ZmZlci5hbGxvYyg0OClcbiAgICBPYmplY3QuYXNzaWduKHRoaXMsIGdldFBhcnNlcnMoaXNCaWdFbmRpYW4pKVxuXG4gICAgdGhpcy5mZWF0dXJlQ2FjaGUgPSBuZXcgQWJvcnRhYmxlUHJvbWlzZUNhY2hlKHtcbiAgICAgIGNhY2hlOiBuZXcgUXVpY2tMUlUoeyBtYXhTaXplOiAxMDAwIH0pLFxuXG4gICAgICBhc3luYyBmaWxsKHJlcXVlc3REYXRhOiBSZWFkRGF0YSwgc2lnbmFsOiBBYm9ydFNpZ25hbCkge1xuICAgICAgICBjb25zdCB7IGxlbmd0aCwgb2Zmc2V0IH0gPSByZXF1ZXN0RGF0YVxuICAgICAgICBjb25zdCByZXN1bHRCdWZmZXIgPSBCdWZmZXIuYWxsb2MobGVuZ3RoKVxuICAgICAgICBhd2FpdCBiYmkucmVhZChyZXN1bHRCdWZmZXIsIDAsIGxlbmd0aCwgb2Zmc2V0LCB7IHNpZ25hbCB9KVxuICAgICAgICByZXR1cm4gcmVzdWx0QnVmZmVyXG4gICAgICB9LFxuICAgIH0pXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcmVhZFdpZ0RhdGEoXG4gICAgY2hyTmFtZTogc3RyaW5nLFxuICAgIHN0YXJ0OiBudW1iZXIsXG4gICAgZW5kOiBudW1iZXIsXG4gICAgb2JzZXJ2ZXI6IE9ic2VydmVyPEZlYXR1cmVbXT4sXG4gICAgb3B0czogT3B0aW9ucyxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyByZWZzQnlOYW1lLCBiYmksIGNpclRyZWVPZmZzZXQsIGlzQmlnRW5kaWFuIH0gPSB0aGlzXG4gICAgY29uc3QgeyBzaWduYWwgfSA9IG9wdHNcbiAgICBjb25zdCBjaHJJZCA9IHJlZnNCeU5hbWVbY2hyTmFtZV1cbiAgICBpZiAoY2hySWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKVxuICAgIH1cbiAgICBjb25zdCByZXF1ZXN0ID0geyBjaHJJZCwgc3RhcnQsIGVuZCB9XG4gICAgaWYgKHRoaXMuY2lyVHJlZVByb21pc2UpIHtcbiAgICAgIGF3YWl0IHRoaXMuY2lyVHJlZVByb21pc2VcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jaXJUcmVlUHJvbWlzZSA9IGF3YWl0IGJiaS5yZWFkKHRoaXMuY2lyVHJlZUJ1ZmZlciwgMCwgNDgsIGNpclRyZWVPZmZzZXQsIHsgc2lnbmFsIH0pXG4gICAgfVxuICAgIGNvbnN0IGJ1ZmZlciA9IHRoaXMuY2lyVHJlZUJ1ZmZlclxuICAgIGNvbnN0IGNpckJsb2NrU2l6ZSA9IGlzQmlnRW5kaWFuID8gYnVmZmVyLnJlYWRVSW50MzJCRSg0KSA6IGJ1ZmZlci5yZWFkVUludDMyTEUoNClcbiAgICBsZXQgYmxvY2tzVG9GZXRjaDogYW55W10gPSBbXVxuICAgIGxldCBvdXRzdGFuZGluZyA9IDBcblxuICAgIGxldCBjaXJGb2JSZWN1cjI6IEZ1bmN0aW9uXG5cbiAgICBjb25zdCBmaWx0ZXJGZWF0cyA9IChiOiBEYXRhQmxvY2spOiBib29sZWFuID0+XG4gICAgICAoYi5zdGFydENocm9tIDwgY2hySWQgfHwgKGIuc3RhcnRDaHJvbSA9PT0gY2hySWQgJiYgYi5zdGFydEJhc2UgPD0gZW5kKSkgJiZcbiAgICAgIChiLmVuZENocm9tID4gY2hySWQgfHwgKGIuZW5kQ2hyb20gPT09IGNocklkICYmIGIuZW5kQmFzZSA+PSBzdGFydCkpXG5cbiAgICBjb25zdCBjaXJGb2JTdGFydEZldGNoID0gYXN5bmMgKG9mZjogYW55LCBmcjogYW55LCBsZXZlbDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICBjb25zdCBsZW5ndGggPSBmci5tYXgoKSAtIGZyLm1pbigpXG4gICAgICBjb25zdCBvZmZzZXQgPSBmci5taW4oKVxuICAgICAgY29uc3QgcmVzdWx0QnVmZmVyID0gYXdhaXQgdGhpcy5mZWF0dXJlQ2FjaGUuZ2V0KGAke2xlbmd0aH1fJHtvZmZzZXR9YCwgeyBsZW5ndGgsIG9mZnNldCB9LCBzaWduYWwpXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9mZi5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBpZiAoZnIuY29udGFpbnMob2ZmW2ldKSkge1xuICAgICAgICAgIGNpckZvYlJlY3VyMihyZXN1bHRCdWZmZXIsIG9mZltpXSAtIG9mZnNldCwgbGV2ZWwsIG9ic2VydmVyLCBvcHRzKVxuICAgICAgICAgIG91dHN0YW5kaW5nIC09IDFcbiAgICAgICAgICBpZiAob3V0c3RhbmRpbmcgPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMucmVhZEZlYXR1cmVzKG9ic2VydmVyLCBibG9ja3NUb0ZldGNoLCB7IC4uLm9wdHMsIHJlcXVlc3QgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChvdXRzdGFuZGluZyAhPT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2RpZCBub3QgY29tcGxldGUnKVxuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBjaXJGb2JSZWN1ciA9IChvZmZzZXQ6IGFueSwgbGV2ZWw6IG51bWJlcik6IHZvaWQgPT4ge1xuICAgICAgb3V0c3RhbmRpbmcgKz0gb2Zmc2V0Lmxlbmd0aFxuXG4gICAgICBjb25zdCBtYXhDaXJCbG9ja1NwYW4gPSA0ICsgY2lyQmxvY2tTaXplICogMzIgLy8gVXBwZXIgYm91bmQgb24gc2l6ZSwgYmFzZWQgb24gYSBjb21wbGV0ZWx5IGZ1bGwgbGVhZiBub2RlLlxuICAgICAgbGV0IHNwYW5zID0gbmV3IFJhbmdlKG9mZnNldFswXSwgb2Zmc2V0WzBdICsgbWF4Q2lyQmxvY2tTcGFuKVxuICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBvZmZzZXQubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgY29uc3QgYmxvY2tTcGFuID0gbmV3IFJhbmdlKG9mZnNldFtpXSwgb2Zmc2V0W2ldICsgbWF4Q2lyQmxvY2tTcGFuKVxuICAgICAgICBzcGFucyA9IHNwYW5zLnVuaW9uKGJsb2NrU3BhbilcbiAgICAgIH1cbiAgICAgIHNwYW5zLmdldFJhbmdlcygpLm1hcCgoZnI6IFJhbmdlKSA9PiBjaXJGb2JTdGFydEZldGNoKG9mZnNldCwgZnIsIGxldmVsKSlcbiAgICB9XG5cbiAgICBjaXJGb2JSZWN1cjIgPSAoY2lyQmxvY2tEYXRhOiBCdWZmZXIsIG9mZnNldDogbnVtYmVyLCBsZXZlbDogbnVtYmVyKTogdm9pZCA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gY2lyQmxvY2tEYXRhLnNsaWNlKG9mZnNldClcblxuICAgICAgY29uc3QgcCA9IHRoaXMubGVhZlBhcnNlci5wYXJzZShkYXRhKS5yZXN1bHRcbiAgICAgIGlmIChwLmJsb2Nrc1RvRmV0Y2gpIHtcbiAgICAgICAgYmxvY2tzVG9GZXRjaCA9IGJsb2Nrc1RvRmV0Y2guY29uY2F0KFxuICAgICAgICAgIHAuYmxvY2tzVG9GZXRjaC5maWx0ZXIoZmlsdGVyRmVhdHMpLm1hcCgobDogYW55KTogYW55ID0+ICh7IG9mZnNldDogbC5ibG9ja09mZnNldCwgbGVuZ3RoOiBsLmJsb2NrU2l6ZSB9KSksXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIGlmIChwLnJlY3VyT2Zmc2V0cykge1xuICAgICAgICBjb25zdCByZWN1ck9mZnNldHMgPSBwLnJlY3VyT2Zmc2V0cy5maWx0ZXIoZmlsdGVyRmVhdHMpLm1hcCgobDogYW55KTogYW55ID0+IGwuYmxvY2tPZmZzZXQpXG4gICAgICAgIGlmIChyZWN1ck9mZnNldHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNpckZvYlJlY3VyKHJlY3VyT2Zmc2V0cywgbGV2ZWwgKyAxKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2lyRm9iUmVjdXIoW2NpclRyZWVPZmZzZXQgKyA0OF0sIDEpXG4gIH1cblxuICBwcml2YXRlIHBhcnNlU3VtbWFyeUJsb2NrKGRhdGE6IEJ1ZmZlciwgc3RhcnRPZmZzZXQ6IG51bWJlciwgcmVxdWVzdD86IENvb3JkUmVxdWVzdCk6IEZlYXR1cmVbXSB7XG4gICAgY29uc3QgZmVhdHVyZXMgPSBbXVxuICAgIGxldCBjdXJyT2Zmc2V0ID0gc3RhcnRPZmZzZXRcbiAgICB3aGlsZSAoY3Vyck9mZnNldCA8IGRhdGEuYnl0ZUxlbmd0aCkge1xuICAgICAgY29uc3QgcmVzID0gdGhpcy5zdW1tYXJ5UGFyc2VyLnBhcnNlKGRhdGEuc2xpY2UoY3Vyck9mZnNldCkpXG4gICAgICBmZWF0dXJlcy5wdXNoKHJlcy5yZXN1bHQpXG4gICAgICBjdXJyT2Zmc2V0ICs9IHJlcy5vZmZzZXRcbiAgICB9XG4gICAgbGV0IGl0ZW1zID0gZmVhdHVyZXNcbiAgICBpZiAocmVxdWVzdCkgaXRlbXMgPSBpdGVtcy5maWx0ZXIoKGVsdDogU3VtbWFyeUJsb2NrKTogYm9vbGVhbiA9PiBlbHQuY2hyb21JZCA9PT0gcmVxdWVzdC5jaHJJZClcbiAgICBpdGVtcyA9IGl0ZW1zLm1hcChcbiAgICAgIChlbHQ6IFN1bW1hcnlCbG9jayk6IEZlYXR1cmUgPT4gKHtcbiAgICAgICAgc3RhcnQ6IGVsdC5zdGFydCxcbiAgICAgICAgZW5kOiBlbHQuZW5kLFxuICAgICAgICBtYXhTY29yZTogZWx0Lm1heFNjb3JlLFxuICAgICAgICBtaW5TY29yZTogZWx0Lm1pblNjb3JlLFxuICAgICAgICBzY29yZTogZWx0LnN1bURhdGEgLyAoZWx0LnZhbGlkQ250IHx8IDEpLFxuICAgICAgICBzdW1tYXJ5OiB0cnVlLFxuICAgICAgfSksXG4gICAgKVxuICAgIHJldHVybiByZXF1ZXN0ID8gaXRlbXMuZmlsdGVyKGYgPT4gQmxvY2tWaWV3LmNvb3JkRmlsdGVyKGYsIHJlcXVlc3QpKSA6IGl0ZW1zXG4gIH1cblxuICBwcml2YXRlIHBhcnNlQmlnQmVkQmxvY2soZGF0YTogQnVmZmVyLCBzdGFydE9mZnNldDogbnVtYmVyLCByZXF1ZXN0PzogQ29vcmRSZXF1ZXN0KTogRmVhdHVyZVtdIHtcbiAgICBjb25zdCBpdGVtcyA9IFtdXG4gICAgbGV0IGN1cnJPZmZzZXQgPSBzdGFydE9mZnNldFxuICAgIHdoaWxlIChjdXJyT2Zmc2V0IDwgZGF0YS5ieXRlTGVuZ3RoKSB7XG4gICAgICBjb25zdCByZXMgPSB0aGlzLmJpZ0JlZFBhcnNlci5wYXJzZShkYXRhLnNsaWNlKGN1cnJPZmZzZXQpKVxuICAgICAgcmVzLnJlc3VsdC51bmlxdWVJZCA9IGBiYi0ke3N0YXJ0T2Zmc2V0ICsgY3Vyck9mZnNldH1gXG4gICAgICBpdGVtcy5wdXNoKHJlcy5yZXN1bHQpXG4gICAgICBjdXJyT2Zmc2V0ICs9IHJlcy5vZmZzZXRcbiAgICB9XG5cbiAgICByZXR1cm4gcmVxdWVzdCA/IGl0ZW1zLmZpbHRlcigoZjogYW55KSA9PiBCbG9ja1ZpZXcuY29vcmRGaWx0ZXIoZiwgcmVxdWVzdCkpIDogaXRlbXNcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VCaWdXaWdCbG9jayhieXRlczogQnVmZmVyLCBzdGFydE9mZnNldDogbnVtYmVyLCByZXF1ZXN0PzogQ29vcmRSZXF1ZXN0KTogRmVhdHVyZVtdIHtcbiAgICBjb25zdCBkYXRhID0gYnl0ZXMuc2xpY2Uoc3RhcnRPZmZzZXQpXG4gICAgY29uc3QgcmVzdWx0cyA9IHRoaXMuYmlnV2lnUGFyc2VyLnBhcnNlKGRhdGEpLnJlc3VsdFxuICAgIGxldCB7IGl0ZW1zIH0gPSByZXN1bHRzXG4gICAgaWYgKHJlc3VsdHMuYmxvY2tUeXBlID09PSBCSUdfV0lHX1RZUEVfRlNURVApIHtcbiAgICAgIGNvbnN0IHsgaXRlbVN0ZXA6IHN0ZXAsIGl0ZW1TcGFuOiBzcGFuIH0gPSByZXN1bHRzXG4gICAgICBpdGVtcyA9IGl0ZW1zLm1hcCgoZmVhdHVyZTogYW55LCBpbmRleDogbnVtYmVyKSA9PiAoe1xuICAgICAgICAuLi5mZWF0dXJlLFxuICAgICAgICBzdGFydDogaW5kZXggKiBzdGVwLFxuICAgICAgICBlbmQ6IGluZGV4ICogc3RlcCArIHNwYW4sXG4gICAgICB9KSlcbiAgICB9IGVsc2UgaWYgKHJlc3VsdHMuYmxvY2tUeXBlID09PSBCSUdfV0lHX1RZUEVfVlNURVApIHtcbiAgICAgIGNvbnN0IHsgaXRlbVNwYW46IHNwYW4gfSA9IHJlc3VsdHNcbiAgICAgIGl0ZW1zID0gaXRlbXMubWFwKChmZWF0dXJlOiBhbnkpID0+ICh7XG4gICAgICAgIC4uLmZlYXR1cmUsXG4gICAgICAgIGVuZDogZmVhdHVyZS5zdGFydCArIHNwYW4sXG4gICAgICB9KSlcbiAgICB9XG4gICAgcmV0dXJuIHJlcXVlc3QgPyBpdGVtcy5maWx0ZXIoKGY6IGFueSkgPT4gQmxvY2tWaWV3LmNvb3JkRmlsdGVyKGYsIHJlcXVlc3QpKSA6IGl0ZW1zXG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBjb29yZEZpbHRlcihmOiBGZWF0dXJlLCByYW5nZTogQ29vcmRSZXF1ZXN0KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGYuc3RhcnQgPCByYW5nZS5lbmQgJiYgZi5lbmQgPj0gcmFuZ2Uuc3RhcnRcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyByZWFkRmVhdHVyZXMob2JzZXJ2ZXI6IE9ic2VydmVyPEZlYXR1cmVbXT4sIGJsb2NrczogYW55LCBvcHRzOiBPcHRpb25zID0ge30pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGJsb2NrVHlwZSwgaXNDb21wcmVzc2VkIH0gPSB0aGlzXG4gICAgY29uc3QgeyBzaWduYWwsIHJlcXVlc3QgfSA9IG9wdHNcbiAgICBjb25zdCBibG9ja0dyb3Vwc1RvRmV0Y2ggPSBncm91cEJsb2NrcyhibG9ja3MpXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBibG9ja0dyb3Vwc1RvRmV0Y2gubWFwKGFzeW5jIChibG9ja0dyb3VwOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgeyBsZW5ndGgsIG9mZnNldCB9ID0gYmxvY2tHcm91cFxuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5mZWF0dXJlQ2FjaGUuZ2V0KGAke2xlbmd0aH1fJHtvZmZzZXR9YCwgYmxvY2tHcm91cCwgc2lnbmFsKVxuICAgICAgICBibG9ja0dyb3VwLmJsb2Nrcy5mb3JFYWNoKChibG9jazogYW55KSA9PiB7XG4gICAgICAgICAgbGV0IGJsb2NrT2Zmc2V0ID0gYmxvY2sub2Zmc2V0IC0gYmxvY2tHcm91cC5vZmZzZXRcbiAgICAgICAgICBjb25zdCByZXN1bHREYXRhID0gaXNDb21wcmVzc2VkID8gemxpYi5pbmZsYXRlU3luYyhkYXRhLnNsaWNlKGJsb2NrT2Zmc2V0KSkgOiBkYXRhXG4gICAgICAgICAgYmxvY2tPZmZzZXQgPSBpc0NvbXByZXNzZWQgPyAwIDogb2Zmc2V0XG5cbiAgICAgICAgICBzd2l0Y2ggKGJsb2NrVHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnc3VtbWFyeSc6XG4gICAgICAgICAgICAgIG9ic2VydmVyLm5leHQodGhpcy5wYXJzZVN1bW1hcnlCbG9jayhyZXN1bHREYXRhLCBibG9ja09mZnNldCwgcmVxdWVzdCkpXG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICBjYXNlICdiaWd3aWcnOlxuICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHRoaXMucGFyc2VCaWdXaWdCbG9jayhyZXN1bHREYXRhLCBibG9ja09mZnNldCwgcmVxdWVzdCkpXG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICBjYXNlICdiaWdiZWQnOlxuICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHRoaXMucGFyc2VCaWdCZWRCbG9jayhyZXN1bHREYXRhLCBibG9ja09mZnNldCwgcmVxdWVzdCkpXG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYERvbid0IGtub3cgd2hhdCB0byBkbyB3aXRoICR7YmxvY2tUeXBlfWApXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfSksXG4gICAgKVxuICAgIG9ic2VydmVyLmNvbXBsZXRlKClcbiAgfVxufVxuIl19 | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9ibG9ja1ZpZXcudHMiXSwibmFtZXMiOlsiQklHX1dJR19UWVBFX0dSQVBIIiwiQklHX1dJR19UWVBFX1ZTVEVQIiwiQklHX1dJR19UWVBFX0ZTVEVQIiwiZ2V0UGFyc2VycyIsImlzQmlnRW5kaWFuIiwibGUiLCJzdW1tYXJ5UGFyc2VyIiwiUGFyc2VyIiwiZW5kaWFuZXNzIiwidWludDMyIiwiZmxvYXQiLCJsZWFmUGFyc2VyIiwidWludDgiLCJza2lwIiwidWludDE2IiwiY2hvaWNlIiwidGFnIiwiY2hvaWNlcyIsImFycmF5IiwibGVuZ3RoIiwidHlwZSIsInVpbnQ2NCIsImJpZ0JlZFBhcnNlciIsImludDMyIiwic3RyaW5nIiwiemVyb1Rlcm1pbmF0ZWQiLCJiaWdXaWdQYXJzZXIiLCJCbG9ja1ZpZXciLCJiYmkiLCJyZWZzQnlOYW1lIiwiY2lyVHJlZU9mZnNldCIsImNpclRyZWVMZW5ndGgiLCJpc0NvbXByZXNzZWQiLCJibG9ja1R5cGUiLCJFcnJvciIsImNpclRyZWVCdWZmZXIiLCJCdWZmZXIiLCJhbGxvYyIsIk9iamVjdCIsImFzc2lnbiIsImZlYXR1cmVDYWNoZSIsIkFib3J0YWJsZVByb21pc2VDYWNoZSIsImNhY2hlIiwiUXVpY2tMUlUiLCJtYXhTaXplIiwiZmlsbCIsInJlcXVlc3REYXRhIiwic2lnbmFsIiwib2Zmc2V0IiwicmVzdWx0QnVmZmVyIiwicmVhZCIsImNock5hbWUiLCJzdGFydCIsImVuZCIsIm9ic2VydmVyIiwib3B0cyIsImNocklkIiwidW5kZWZpbmVkIiwiY29tcGxldGUiLCJyZXF1ZXN0IiwiY2lyVHJlZVByb21pc2UiLCJidWZmZXIiLCJjaXJCbG9ja1NpemUiLCJyZWFkVUludDMyQkUiLCJyZWFkVUludDMyTEUiLCJibG9ja3NUb0ZldGNoIiwib3V0c3RhbmRpbmciLCJmaWx0ZXJGZWF0cyIsImIiLCJzdGFydENocm9tIiwic3RhcnRCYXNlIiwiZW5kQ2hyb20iLCJlbmRCYXNlIiwiY2lyRm9iU3RhcnRGZXRjaCIsIm9mZiIsImZyIiwibGV2ZWwiLCJtYXgiLCJtaW4iLCJnZXQiLCJpIiwiY29udGFpbnMiLCJjaXJGb2JSZWN1cjIiLCJyZWFkRmVhdHVyZXMiLCJlcnJvciIsImNpckZvYlJlY3VyIiwibWF4Q2lyQmxvY2tTcGFuIiwic3BhbnMiLCJSYW5nZSIsImJsb2NrU3BhbiIsInVuaW9uIiwiZ2V0UmFuZ2VzIiwibWFwIiwiZSIsImNpckJsb2NrRGF0YSIsImRhdGEiLCJzbGljZSIsInAiLCJwYXJzZSIsInJlc3VsdCIsImNvbmNhdCIsImZpbHRlciIsImwiLCJibG9ja09mZnNldCIsImJsb2NrU2l6ZSIsInJlY3VyT2Zmc2V0cyIsInN0YXJ0T2Zmc2V0IiwiZmVhdHVyZXMiLCJjdXJyT2Zmc2V0IiwiYnl0ZUxlbmd0aCIsInJlcyIsInB1c2giLCJpdGVtcyIsImVsdCIsImNocm9tSWQiLCJtYXhTY29yZSIsIm1pblNjb3JlIiwic2NvcmUiLCJzdW1EYXRhIiwidmFsaWRDbnQiLCJzdW1tYXJ5IiwiZiIsImNvb3JkRmlsdGVyIiwidW5pcXVlSWQiLCJieXRlcyIsInJlc3VsdHMiLCJzdGVwIiwiaXRlbVN0ZXAiLCJzcGFuIiwiaXRlbVNwYW4iLCJmZWF0dXJlIiwiaW5kZXgiLCJibG9ja3MiLCJibG9ja0dyb3Vwc1RvRmV0Y2giLCJQcm9taXNlIiwiYWxsIiwiYmxvY2tHcm91cCIsImZvckVhY2giLCJibG9jayIsInJlc3VsdERhdGEiLCJ6bGliIiwiaW5mbGF0ZVN5bmMiLCJuZXh0IiwicGFyc2VTdW1tYXJ5QmxvY2siLCJwYXJzZUJpZ1dpZ0Jsb2NrIiwicGFyc2VCaWdCZWRCbG9jayIsImNvbnNvbGUiLCJ3YXJuIiwicmFuZ2UiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBUkE7QUE4Q0EsSUFBTUEsa0JBQWtCLEdBQUcsQ0FBM0I7QUFDQSxJQUFNQyxrQkFBa0IsR0FBRyxDQUEzQjtBQUNBLElBQU1D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Q0FBQ0MsaUJBQUwsQ0FBdUJKLFVBQXZCLEVBQW1DcEMsV0FBbkMsRUFBZ0Q1QyxPQUFoRCxDQUFkO0FBQ0E7O0FBQ0YscUNBQUssUUFBTDtBQUNFTCxrQ0FBQUEsUUFBUSxDQUFDd0YsSUFBVCxDQUFjLE1BQUksQ0FBQ0UsZ0JBQUwsQ0FBc0JMLFVBQXRCLEVBQWtDcEMsV0FBbEMsRUFBK0M1QyxPQUEvQyxDQUFkO0FBQ0E7O0FBQ0YscUNBQUssUUFBTDtBQUNFTCxrQ0FBQUEsUUFBUSxDQUFDd0YsSUFBVCxDQUFjLE1BQUksQ0FBQ0csZ0JBQUwsQ0FBc0JOLFVBQXRCLEVBQWtDcEMsV0FBbEMsRUFBK0M1QyxPQUEvQyxDQUFkO0FBQ0E7O0FBQ0Y7QUFDRXVGLGtDQUFBQSxPQUFPLENBQUNDLElBQVIsc0NBQTJDbEgsU0FBM0M7QUFYSjtBQWFELDZCQWxCRDs7QUFIcUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsbUJBQXZCOztBQUFBO0FBQUE7QUFBQTtBQUFBLG9CQURJLEM7OztBQXlCTnFCLGdCQUFBQSxRQUFRLENBQUNJLFFBQVQ7Ozs7Ozs7QUFFQUosZ0JBQUFBLFFBQVEsQ0FBQzhCLEtBQVQ7Ozs7Ozs7Ozs7Ozs7Ozs7OztnQ0FwQ3VCcUMsQyxFQUFZMkIsSyxFQUE4QjtBQUNuRSxhQUFPM0IsQ0FBQyxDQUFDckUsS0FBRixHQUFVZ0csS0FBSyxDQUFDL0YsR0FBaEIsSUFBdUJvRSxDQUFDLENBQUNwRSxHQUFGLElBQVMrRixLQUFLLENBQUNoRyxLQUE3QztBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50IG5vLWJpdHdpc2U6IFtcImVycm9yXCIsIHsgXCJhbGxvd1wiOiBbXCJ8XCJdIH1dICovXG5pbXBvcnQgeyBPYnNlcnZlciB9IGZyb20gJ3J4anMnXG5pbXBvcnQgeyBQYXJzZXIgfSBmcm9tICdAZ21vZC9iaW5hcnktcGFyc2VyJ1xuaW1wb3J0IEFib3J0YWJsZVByb21pc2VDYWNoZSBmcm9tICdhYm9ydGFibGUtcHJvbWlzZS1jYWNoZSdcbmltcG9ydCAqIGFzIHpsaWIgZnJvbSAnemxpYidcbmltcG9ydCBRdWlja0xSVSBmcm9tICdxdWljay1scnUnXG5pbXBvcnQgeyBGZWF0dXJlIH0gZnJvbSAnLi9iYmknXG5pbXBvcnQgUmFuZ2UgZnJvbSAnLi9yYW5nZSdcbmltcG9ydCB7IGdyb3VwQmxvY2tzIH0gZnJvbSAnLi91dGlsJ1xuXG5pbnRlcmZhY2UgQ29vcmRSZXF1ZXN0IHtcbiAgY2hySWQ6IG51bWJlclxuICBzdGFydDogbnVtYmVyXG4gIGVuZDogbnVtYmVyXG59XG5pbnRlcmZhY2UgRGF0YUJsb2NrIHtcbiAgc3RhcnRDaHJvbTogbnVtYmVyXG4gIGVuZENocm9tOiBudW1iZXJcbiAgc3RhcnRCYXNlOiBudW1iZXJcbiAgZW5kQmFzZTogbnVtYmVyXG4gIHZhbGlkQ250OiBudW1iZXJcbiAgbWluVmFsOiBudW1iZXJcbiAgbWF4VmFsOiBudW1iZXJcbiAgc3VtRGF0YTogbnVtYmVyXG4gIHN1bVNxRGF0YTogbnVtYmVyXG59XG5pbnRlcmZhY2UgUmVhZERhdGEge1xuICBvZmZzZXQ6IG51bWJlclxuICBsZW5ndGg6IG51bWJlclxufVxuXG5pbnRlcmZhY2UgU3VtbWFyeUJsb2NrIHtcbiAgY2hyb21JZDogbnVtYmVyXG4gIHN0YXJ0OiBudW1iZXJcbiAgZW5kOiBudW1iZXJcbiAgdmFsaWRDbnQ6IG51bWJlclxuICBtaW5TY29yZTogbnVtYmVyXG4gIG1heFNjb3JlOiBudW1iZXJcbiAgc3VtRGF0YTogbnVtYmVyXG4gIHN1bVNxRGF0YTogbnVtYmVyXG59XG5pbnRlcmZhY2UgT3B0aW9ucyB7XG4gIHNpZ25hbD86IEFib3J0U2lnbmFsXG4gIHJlcXVlc3Q/OiBDb29yZFJlcXVlc3Rcbn1cblxuY29uc3QgQklHX1dJR19UWVBFX0dSQVBIID0gMVxuY29uc3QgQklHX1dJR19UWVBFX1ZTVEVQID0gMlxuY29uc3QgQklHX1dJR19UWVBFX0ZTVEVQID0gM1xuXG5mdW5jdGlvbiBnZXRQYXJzZXJzKGlzQmlnRW5kaWFuOiBib29sZWFuKTogYW55IHtcbiAgY29uc3QgbGUgPSBpc0JpZ0VuZGlhbiA/ICdiaWcnIDogJ2xpdHRsZSdcbiAgY29uc3Qgc3VtbWFyeVBhcnNlciA9IG5ldyBQYXJzZXIoKVxuICAgIC5lbmRpYW5lc3MobGUpXG4gICAgLnVpbnQzMignY2hyb21JZCcpXG4gICAgLnVpbnQzMignc3RhcnQnKVxuICAgIC51aW50MzIoJ2VuZCcpXG4gICAgLnVpbnQzMigndmFsaWRDbnQnKVxuICAgIC5mbG9hdCgnbWluU2NvcmUnKVxuICAgIC5mbG9hdCgnbWF4U2NvcmUnKVxuICAgIC5mbG9hdCgnc3VtRGF0YScpXG4gICAgLmZsb2F0KCdzdW1TcURhdGEnKVxuXG4gIGNvbnN0IGxlYWZQYXJzZXIgPSBuZXcgUGFyc2VyKClcbiAgICAuZW5kaWFuZXNzKGxlKVxuICAgIC51aW50OCgnaXNMZWFmJylcbiAgICAuc2tpcCgxKVxuICAgIC51aW50MTYoJ2NudCcpXG4gICAgLmNob2ljZSh7XG4gICAgICB0YWc6ICdpc0xlYWYnLFxuICAgICAgY2hvaWNlczoge1xuICAgICAgICAxOiBuZXcgUGFyc2VyKCkuYXJyYXkoJ2Jsb2Nrc1RvRmV0Y2gnLCB7XG4gICAgICAgICAgbGVuZ3RoOiAnY250JyxcbiAgICAgICAgICB0eXBlOiBuZXcgUGFyc2VyKClcbiAgICAgICAgICAgIC51aW50MzIoJ3N0YXJ0Q2hyb20nKVxuICAgICAgICAgICAgLnVpbnQzMignc3RhcnRCYXNlJylcbiAgICAgICAgICAgIC51aW50MzIoJ2VuZENocm9tJylcbiAgICAgICAgICAgIC51aW50MzIoJ2VuZEJhc2UnKVxuICAgICAgICAgICAgLnVpbnQ2NCgnYmxvY2tPZmZzZXQnKVxuICAgICAgICAgICAgLnVpbnQ2NCgnYmxvY2tTaXplJyksXG4gICAgICAgIH0pLFxuICAgICAgICAwOiBuZXcgUGFyc2VyKCkuYXJyYXkoJ3JlY3VyT2Zmc2V0cycsIHtcbiAgICAgICAgICBsZW5ndGg6ICdjbnQnLFxuICAgICAgICAgIHR5cGU6IG5ldyBQYXJzZXIoKVxuICAgICAgICAgICAgLnVpbnQzMignc3RhcnRDaHJvbScpXG4gICAgICAgICAgICAudWludDMyKCdzdGFydEJhc2UnKVxuICAgICAgICAgICAgLnVpbnQzMignZW5kQ2hyb20nKVxuICAgICAgICAgICAgLnVpbnQzMignZW5kQmFzZScpXG4gICAgICAgICAgICAudWludDY0KCdibG9ja09mZnNldCcpLFxuICAgICAgICB9KSxcbiAgICAgIH0sXG4gICAgfSlcbiAgY29uc3QgYmlnQmVkUGFyc2VyID0gbmV3IFBhcnNlcigpXG4gICAgLmVuZGlhbmVzcyhsZSlcbiAgICAudWludDMyKCdjaHJvbUlkJylcbiAgICAuaW50MzIoJ3N0YXJ0JylcbiAgICAuaW50MzIoJ2VuZCcpXG4gICAgLnN0cmluZygncmVzdCcsIHtcbiAgICAgIHplcm9UZXJtaW5hdGVkOiB0cnVlLFxuICAgIH0pXG5cbiAgY29uc3QgYmlnV2lnUGFyc2VyID0gbmV3IFBhcnNlcigpXG4gICAgLmVuZGlhbmVzcyhsZSlcbiAgICAuc2tpcCg0KVxuICAgIC5pbnQzMignYmxvY2tTdGFydCcpXG4gICAgLnNraXAoNClcbiAgICAudWludDMyKCdpdGVtU3RlcCcpXG4gICAgLnVpbnQzMignaXRlbVNwYW4nKVxuICAgIC51aW50OCgnYmxvY2tUeXBlJylcbiAgICAuc2tpcCgxKVxuICAgIC51aW50MTYoJ2l0ZW1Db3VudCcpXG4gICAgLmNob2ljZSh7XG4gICAgICB0YWc6ICdibG9ja1R5cGUnLFxuICAgICAgY2hvaWNlczoge1xuICAgICAgICBbQklHX1dJR19UWVBFX0ZTVEVQXTogbmV3IFBhcnNlcigpLmFycmF5KCdpdGVtcycsIHtcbiAgICAgICAgICBsZW5ndGg6ICdpdGVtQ291bnQnLFxuICAgICAgICAgIHR5cGU6IG5ldyBQYXJzZXIoKS5mbG9hdCgnc2NvcmUnKSxcbiAgICAgICAgfSksXG4gICAgICAgIFtCSUdfV0lHX1RZUEVfVlNURVBdOiBuZXcgUGFyc2VyKCkuYXJyYXkoJ2l0ZW1zJywge1xuICAgICAgICAgIGxlbmd0aDogJ2l0ZW1Db3VudCcsXG4gICAgICAgICAgdHlwZTogbmV3IFBhcnNlcigpLmludDMyKCdzdGFydCcpLmZsb2F0KCdzY29yZScpLFxuICAgICAgICB9KSxcbiAgICAgICAgW0JJR19XSUdfVFlQRV9HUkFQSF06IG5ldyBQYXJzZXIoKS5hcnJheSgnaXRlbXMnLCB7XG4gICAgICAgICAgbGVuZ3RoOiAnaXRlbUNvdW50JyxcbiAgICAgICAgICB0eXBlOiBuZXcgUGFyc2VyKClcbiAgICAgICAgICAgIC5pbnQzMignc3RhcnQnKVxuICAgICAgICAgICAgLmludDMyKCdlbmQnKVxuICAgICAgICAgICAgLmZsb2F0KCdzY29yZScpLFxuICAgICAgICB9KSxcbiAgICAgIH0sXG4gICAgfSlcbiAgcmV0dXJuIHtcbiAgICBiaWdXaWdQYXJzZXIsXG4gICAgYmlnQmVkUGFyc2VyLFxuICAgIHN1bW1hcnlQYXJzZXIsXG4gICAgbGVhZlBhcnNlcixcbiAgfVxufVxuXG4vKipcbiAqIFZpZXcgaW50byBhIHN1YnNldCBvZiB0aGUgZGF0YSBpbiBhIEJpZ1dpZyBmaWxlLlxuICpcbiAqIEFkYXB0ZWQgYnkgUm9iZXJ0IEJ1ZWxzIGFuZCBDb2xpbiBEaWVzaCBmcm9tIGJpZ3dpZy5qcyBpbiB0aGUgRGFsbGlhbmNlIEdlbm9tZVxuICogRXhwbG9yZXIgYnkgVGhvbWFzIERvd24uXG4gKiBAY29uc3RydWN0c1xuICovXG5cbmV4cG9ydCBjbGFzcyBCbG9ja1ZpZXcge1xuICBwcml2YXRlIGNpclRyZWVPZmZzZXQ6IG51bWJlclxuXG4gIHByaXZhdGUgY2lyVHJlZUxlbmd0aDogbnVtYmVyXG5cbiAgcHJpdmF0ZSBiYmk6IGFueVxuXG4gIHByaXZhdGUgaXNDb21wcmVzc2VkOiBib29sZWFuXG5cbiAgcHJpdmF0ZSBpc0JpZ0VuZGlhbjogYm9vbGVhblxuXG4gIHByaXZhdGUgcmVmc0J5TmFtZTogYW55XG5cbiAgcHJpdmF0ZSBibG9ja1R5cGU6IHN0cmluZ1xuXG4gIHByaXZhdGUgY2lyVHJlZUJ1ZmZlcjogQnVmZmVyXG5cbiAgcHJpdmF0ZSBjaXJUcmVlUHJvbWlzZT86IFByb21pc2U8dm9pZD5cblxuICBwcml2YXRlIGZlYXR1cmVDYWNoZTogYW55XG5cbiAgcHJpdmF0ZSBsZWFmUGFyc2VyOiBhbnlcblxuICBwcml2YXRlIGJpZ1dpZ1BhcnNlcjogYW55XG5cbiAgcHJpdmF0ZSBiaWdCZWRQYXJzZXI6IGFueVxuXG4gIHByaXZhdGUgc3VtbWFyeVBhcnNlcjogYW55XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIGJiaTogYW55LFxuICAgIHJlZnNCeU5hbWU6IGFueSxcbiAgICBjaXJUcmVlT2Zmc2V0OiBudW1iZXIsXG4gICAgY2lyVHJlZUxlbmd0aDogbnVtYmVyLFxuICAgIGlzQmlnRW5kaWFuOiBib29sZWFuLFxuICAgIGlzQ29tcHJlc3NlZDogYm9vbGVhbixcbiAgICBibG9ja1R5cGU6IHN0cmluZyxcbiAgKSB7XG4gICAgaWYgKCEoY2lyVHJlZU9mZnNldCA+PSAwKSkgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGNpclRyZWVPZmZzZXQhJylcbiAgICBpZiAoIShjaXJUcmVlTGVuZ3RoID4gMCkpIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBjaXJUcmVlTGVuZ3RoIScpXG5cbiAgICB0aGlzLmNpclRyZWVPZmZzZXQgPSBjaXJUcmVlT2Zmc2V0XG4gICAgdGhpcy5jaXJUcmVlTGVuZ3RoID0gY2lyVHJlZUxlbmd0aFxuICAgIHRoaXMuaXNDb21wcmVzc2VkID0gaXNDb21wcmVzc2VkXG4gICAgdGhpcy5yZWZzQnlOYW1lID0gcmVmc0J5TmFtZVxuICAgIHRoaXMuaXNCaWdFbmRpYW4gPSBpc0JpZ0VuZGlhblxuICAgIHRoaXMuYmJpID0gYmJpXG4gICAgdGhpcy5ibG9ja1R5cGUgPSBibG9ja1R5cGVcbiAgICB0aGlzLmNpclRyZWVCdWZmZXIgPSBCdWZmZXIuYWxsb2MoNDgpXG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLCBnZXRQYXJzZXJzKGlzQmlnRW5kaWFuKSlcblxuICAgIHRoaXMuZmVhdHVyZUNhY2hlID0gbmV3IEFib3J0YWJsZVByb21pc2VDYWNoZSh7XG4gICAgICBjYWNoZTogbmV3IFF1aWNrTFJVKHsgbWF4U2l6ZTogMTAwMCB9KSxcblxuICAgICAgYXN5bmMgZmlsbChyZXF1ZXN0RGF0YTogUmVhZERhdGEsIHNpZ25hbDogQWJvcnRTaWduYWwpIHtcbiAgICAgICAgY29uc3QgeyBsZW5ndGgsIG9mZnNldCB9ID0gcmVxdWVzdERhdGFcbiAgICAgICAgY29uc3QgcmVzdWx0QnVmZmVyID0gQnVmZmVyLmFsbG9jKGxlbmd0aClcbiAgICAgICAgYXdhaXQgYmJpLnJlYWQocmVzdWx0QnVmZmVyLCAwLCBsZW5ndGgsIG9mZnNldCwgeyBzaWduYWwgfSlcbiAgICAgICAgcmV0dXJuIHJlc3VsdEJ1ZmZlclxuICAgICAgfSxcbiAgICB9KVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHJlYWRXaWdEYXRhKFxuICAgIGNock5hbWU6IHN0cmluZyxcbiAgICBzdGFydDogbnVtYmVyLFxuICAgIGVuZDogbnVtYmVyLFxuICAgIG9ic2VydmVyOiBPYnNlcnZlcjxGZWF0dXJlW10+LFxuICAgIG9wdHM6IE9wdGlvbnMsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IHJlZnNCeU5hbWUsIGJiaSwgY2lyVHJlZU9mZnNldCwgaXNCaWdFbmRpYW4gfSA9IHRoaXNcbiAgICAgIGNvbnN0IHsgc2lnbmFsIH0gPSBvcHRzXG4gICAgICBjb25zdCBjaHJJZCA9IHJlZnNCeU5hbWVbY2hyTmFtZV1cbiAgICAgIGlmIChjaHJJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKClcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlcXVlc3QgPSB7IGNocklkLCBzdGFydCwgZW5kIH1cbiAgICAgIGlmICh0aGlzLmNpclRyZWVQcm9taXNlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuY2lyVHJlZVByb21pc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY2lyVHJlZVByb21pc2UgPSBhd2FpdCBiYmkucmVhZCh0aGlzLmNpclRyZWVCdWZmZXIsIDAsIDQ4LCBjaXJUcmVlT2Zmc2V0LCB7IHNpZ25hbCB9KVxuICAgICAgfVxuICAgICAgY29uc3QgYnVmZmVyID0gdGhpcy5jaXJUcmVlQnVmZmVyXG4gICAgICBjb25zdCBjaXJCbG9ja1NpemUgPSBpc0JpZ0VuZGlhbiA/IGJ1ZmZlci5yZWFkVUludDMyQkUoNCkgOiBidWZmZXIucmVhZFVJbnQzMkxFKDQpXG4gICAgICBsZXQgYmxvY2tzVG9GZXRjaDogYW55W10gPSBbXVxuICAgICAgbGV0IG91dHN0YW5kaW5nID0gMFxuXG4gICAgICBsZXQgY2lyRm9iUmVjdXIyOiBGdW5jdGlvblxuXG4gICAgICBjb25zdCBmaWx0ZXJGZWF0cyA9IChiOiBEYXRhQmxvY2spOiBib29sZWFuID0+XG4gICAgICAgIChiLnN0YXJ0Q2hyb20gPCBjaHJJZCB8fCAoYi5zdGFydENocm9tID09PSBjaHJJZCAmJiBiLnN0YXJ0QmFzZSA8PSBlbmQpKSAmJlxuICAgICAgICAoYi5lbmRDaHJvbSA+IGNocklkIHx8IChiLmVuZENocm9tID09PSBjaHJJZCAmJiBiLmVuZEJhc2UgPj0gc3RhcnQpKVxuXG4gICAgICBjb25zdCBjaXJGb2JTdGFydEZldGNoID0gYXN5bmMgKG9mZjogYW55LCBmcjogYW55LCBsZXZlbDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgbGVuZ3RoID0gZnIubWF4KCkgLSBmci5taW4oKVxuICAgICAgICAgIGNvbnN0IG9mZnNldCA9IGZyLm1pbigpXG4gICAgICAgICAgY29uc3QgcmVzdWx0QnVmZmVyID0gYXdhaXQgdGhpcy5mZWF0dXJlQ2FjaGUuZ2V0KGAke2xlbmd0aH1fJHtvZmZzZXR9YCwgeyBsZW5ndGgsIG9mZnNldCB9LCBzaWduYWwpXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvZmYubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgIGlmIChmci5jb250YWlucyhvZmZbaV0pKSB7XG4gICAgICAgICAgICAgIGNpckZvYlJlY3VyMihyZXN1bHRCdWZmZXIsIG9mZltpXSAtIG9mZnNldCwgbGV2ZWwsIG9ic2VydmVyLCBvcHRzKVxuICAgICAgICAgICAgICBvdXRzdGFuZGluZyAtPSAxXG4gICAgICAgICAgICAgIGlmIChvdXRzdGFuZGluZyA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVhZEZlYXR1cmVzKG9ic2VydmVyLCBibG9ja3NUb0ZldGNoLCB7IC4uLm9wdHMsIHJlcXVlc3QgfSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIG9ic2VydmVyLmVycm9yKGUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IGNpckZvYlJlY3VyID0gKG9mZnNldDogYW55LCBsZXZlbDogbnVtYmVyKTogdm9pZCA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgb3V0c3RhbmRpbmcgKz0gb2Zmc2V0Lmxlbmd0aFxuXG4gICAgICAgICAgY29uc3QgbWF4Q2lyQmxvY2tTcGFuID0gNCArIGNpckJsb2NrU2l6ZSAqIDMyIC8vIFVwcGVyIGJvdW5kIG9uIHNpemUsIGJhc2VkIG9uIGEgY29tcGxldGVseSBmdWxsIGxlYWYgbm9kZS5cbiAgICAgICAgICBsZXQgc3BhbnMgPSBuZXcgUmFuZ2Uob2Zmc2V0WzBdLCBvZmZzZXRbMF0gKyBtYXhDaXJCbG9ja1NwYW4pXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBvZmZzZXQubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IGJsb2NrU3BhbiA9IG5ldyBSYW5nZShvZmZzZXRbaV0sIG9mZnNldFtpXSArIG1heENpckJsb2NrU3BhbilcbiAgICAgICAgICAgIHNwYW5zID0gc3BhbnMudW5pb24oYmxvY2tTcGFuKVxuICAgICAgICAgIH1cbiAgICAgICAgICBzcGFucy5nZXRSYW5nZXMoKS5tYXAoKGZyOiBSYW5nZSkgPT4gY2lyRm9iU3RhcnRGZXRjaChvZmZzZXQsIGZyLCBsZXZlbCkpXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBvYnNlcnZlci5lcnJvcihlKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNpckZvYlJlY3VyMiA9IChjaXJCbG9ja0RhdGE6IEJ1ZmZlciwgb2Zmc2V0OiBudW1iZXIsIGxldmVsOiBudW1iZXIpOiB2b2lkID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBkYXRhID0gY2lyQmxvY2tEYXRhLnNsaWNlKG9mZnNldClcblxuICAgICAgICAgIGNvbnN0IHAgPSB0aGlzLmxlYWZQYXJzZXIucGFyc2UoZGF0YSkucmVzdWx0XG4gICAgICAgICAgaWYgKHAuYmxvY2tzVG9GZXRjaCkge1xuICAgICAgICAgICAgYmxvY2tzVG9GZXRjaCA9IGJsb2Nrc1RvRmV0Y2guY29uY2F0KFxuICAgICAgICAgICAgICBwLmJsb2Nrc1RvRmV0Y2hcbiAgICAgICAgICAgICAgICAuZmlsdGVyKGZpbHRlckZlYXRzKVxuICAgICAgICAgICAgICAgIC5tYXAoKGw6IGFueSk6IGFueSA9PiAoeyBvZmZzZXQ6IGwuYmxvY2tPZmZzZXQsIGxlbmd0aDogbC5ibG9ja1NpemUgfSkpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocC5yZWN1ck9mZnNldHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlY3VyT2Zmc2V0cyA9IHAucmVjdXJPZmZzZXRzLmZpbHRlcihmaWx0ZXJGZWF0cykubWFwKChsOiBhbnkpOiBhbnkgPT4gbC5ibG9ja09mZnNldClcbiAgICAgICAgICAgIGlmIChyZWN1ck9mZnNldHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBjaXJGb2JSZWN1cihyZWN1ck9mZnNldHMsIGxldmVsICsgMSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBvYnNlcnZlci5lcnJvcihlKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjaXJGb2JSZWN1cihbY2lyVHJlZU9mZnNldCArIDQ4XSwgMSlcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBvYnNlcnZlci5lcnJvcihlKVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VTdW1tYXJ5QmxvY2soZGF0YTogQnVmZmVyLCBzdGFydE9mZnNldDogbnVtYmVyLCByZXF1ZXN0PzogQ29vcmRSZXF1ZXN0KTogRmVhdHVyZVtdIHtcbiAgICBjb25zdCBmZWF0dXJlcyA9IFtdXG4gICAgbGV0IGN1cnJPZmZzZXQgPSBzdGFydE9mZnNldFxuICAgIHdoaWxlIChjdXJyT2Zmc2V0IDwgZGF0YS5ieXRlTGVuZ3RoKSB7XG4gICAgICBjb25zdCByZXMgPSB0aGlzLnN1bW1hcnlQYXJzZXIucGFyc2UoZGF0YS5zbGljZShjdXJyT2Zmc2V0KSlcbiAgICAgIGZlYXR1cmVzLnB1c2gocmVzLnJlc3VsdClcbiAgICAgIGN1cnJPZmZzZXQgKz0gcmVzLm9mZnNldFxuICAgIH1cbiAgICBsZXQgaXRlbXMgPSBmZWF0dXJlc1xuICAgIGlmIChyZXF1ZXN0KSBpdGVtcyA9IGl0ZW1zLmZpbHRlcigoZWx0OiBTdW1tYXJ5QmxvY2spOiBib29sZWFuID0+IGVsdC5jaHJvbUlkID09PSByZXF1ZXN0LmNocklkKVxuICAgIGl0ZW1zID0gaXRlbXMubWFwKFxuICAgICAgKGVsdDogU3VtbWFyeUJsb2NrKTogRmVhdHVyZSA9PiAoe1xuICAgICAgICBzdGFydDogZWx0LnN0YXJ0LFxuICAgICAgICBlbmQ6IGVsdC5lbmQsXG4gICAgICAgIG1heFNjb3JlOiBlbHQubWF4U2NvcmUsXG4gICAgICAgIG1pblNjb3JlOiBlbHQubWluU2NvcmUsXG4gICAgICAgIHNjb3JlOiBlbHQuc3VtRGF0YSAvIChlbHQudmFsaWRDbnQgfHwgMSksXG4gICAgICAgIHN1bW1hcnk6IHRydWUsXG4gICAgICB9KSxcbiAgICApXG4gICAgcmV0dXJuIHJlcXVlc3QgPyBpdGVtcy5maWx0ZXIoZiA9PiBCbG9ja1ZpZXcuY29vcmRGaWx0ZXIoZiwgcmVxdWVzdCkpIDogaXRlbXNcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VCaWdCZWRCbG9jayhkYXRhOiBCdWZmZXIsIHN0YXJ0T2Zmc2V0OiBudW1iZXIsIHJlcXVlc3Q/OiBDb29yZFJlcXVlc3QpOiBGZWF0dXJlW10ge1xuICAgIGNvbnN0IGl0ZW1zID0gW11cbiAgICBsZXQgY3Vyck9mZnNldCA9IHN0YXJ0T2Zmc2V0XG4gICAgd2hpbGUgKGN1cnJPZmZzZXQgPCBkYXRhLmJ5dGVMZW5ndGgpIHtcbiAgICAgIGNvbnN0IHJlcyA9IHRoaXMuYmlnQmVkUGFyc2VyLnBhcnNlKGRhdGEuc2xpY2UoY3Vyck9mZnNldCkpXG4gICAgICByZXMucmVzdWx0LnVuaXF1ZUlkID0gYGJiLSR7c3RhcnRPZmZzZXQgKyBjdXJyT2Zmc2V0fWBcbiAgICAgIGl0ZW1zLnB1c2gocmVzLnJlc3VsdClcbiAgICAgIGN1cnJPZmZzZXQgKz0gcmVzLm9mZnNldFxuICAgIH1cblxuICAgIHJldHVybiByZXF1ZXN0ID8gaXRlbXMuZmlsdGVyKChmOiBhbnkpID0+IEJsb2NrVmlldy5jb29yZEZpbHRlcihmLCByZXF1ZXN0KSkgOiBpdGVtc1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZUJpZ1dpZ0Jsb2NrKGJ5dGVzOiBCdWZmZXIsIHN0YXJ0T2Zmc2V0OiBudW1iZXIsIHJlcXVlc3Q/OiBDb29yZFJlcXVlc3QpOiBGZWF0dXJlW10ge1xuICAgIGNvbnN0IGRhdGEgPSBieXRlcy5zbGljZShzdGFydE9mZnNldClcbiAgICBjb25zdCByZXN1bHRzID0gdGhpcy5iaWdXaWdQYXJzZXIucGFyc2UoZGF0YSkucmVzdWx0XG4gICAgbGV0IHsgaXRlbXMgfSA9IHJlc3VsdHNcbiAgICBpZiAocmVzdWx0cy5ibG9ja1R5cGUgPT09IEJJR19XSUdfVFlQRV9GU1RFUCkge1xuICAgICAgY29uc3QgeyBpdGVtU3RlcDogc3RlcCwgaXRlbVNwYW46IHNwYW4gfSA9IHJlc3VsdHNcbiAgICAgIGl0ZW1zID0gaXRlbXMubWFwKChmZWF0dXJlOiBhbnksIGluZGV4OiBudW1iZXIpID0+ICh7XG4gICAgICAgIC4uLmZlYXR1cmUsXG4gICAgICAgIHN0YXJ0OiBpbmRleCAqIHN0ZXAsXG4gICAgICAgIGVuZDogaW5kZXggKiBzdGVwICsgc3BhbixcbiAgICAgIH0pKVxuICAgIH0gZWxzZSBpZiAocmVzdWx0cy5ibG9ja1R5cGUgPT09IEJJR19XSUdfVFlQRV9WU1RFUCkge1xuICAgICAgY29uc3QgeyBpdGVtU3Bhbjogc3BhbiB9ID0gcmVzdWx0c1xuICAgICAgaXRlbXMgPSBpdGVtcy5tYXAoKGZlYXR1cmU6IGFueSkgPT4gKHtcbiAgICAgICAgLi4uZmVhdHVyZSxcbiAgICAgICAgZW5kOiBmZWF0dXJlLnN0YXJ0ICsgc3BhbixcbiAgICAgIH0pKVxuICAgIH1cbiAgICByZXR1cm4gcmVxdWVzdCA/IGl0ZW1zLmZpbHRlcigoZjogYW55KSA9PiBCbG9ja1ZpZXcuY29vcmRGaWx0ZXIoZiwgcmVxdWVzdCkpIDogaXRlbXNcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGNvb3JkRmlsdGVyKGY6IEZlYXR1cmUsIHJhbmdlOiBDb29yZFJlcXVlc3QpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZi5zdGFydCA8IHJhbmdlLmVuZCAmJiBmLmVuZCA+PSByYW5nZS5zdGFydFxuICB9XG5cbiAgcHVibGljIGFzeW5jIHJlYWRGZWF0dXJlcyhvYnNlcnZlcjogT2JzZXJ2ZXI8RmVhdHVyZVtdPiwgYmxvY2tzOiBhbnksIG9wdHM6IE9wdGlvbnMgPSB7fSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IGJsb2NrVHlwZSwgaXNDb21wcmVzc2VkIH0gPSB0aGlzXG4gICAgICBjb25zdCB7IHNpZ25hbCwgcmVxdWVzdCB9ID0gb3B0c1xuICAgICAgY29uc3QgYmxvY2tHcm91cHNUb0ZldGNoID0gZ3JvdXBCbG9ja3MoYmxvY2tzKVxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIGJsb2NrR3JvdXBzVG9GZXRjaC5tYXAoYXN5bmMgKGJsb2NrR3JvdXA6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgbGVuZ3RoLCBvZmZzZXQgfSA9IGJsb2NrR3JvdXBcbiAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5mZWF0dXJlQ2FjaGUuZ2V0KGAke2xlbmd0aH1fJHtvZmZzZXR9YCwgYmxvY2tHcm91cCwgc2lnbmFsKVxuICAgICAgICAgIGJsb2NrR3JvdXAuYmxvY2tzLmZvckVhY2goKGJsb2NrOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGxldCBibG9ja09mZnNldCA9IGJsb2NrLm9mZnNldCAtIGJsb2NrR3JvdXAub2Zmc2V0XG4gICAgICAgICAgICBjb25zdCByZXN1bHREYXRhID0gaXNDb21wcmVzc2VkID8gemxpYi5pbmZsYXRlU3luYyhkYXRhLnNsaWNlKGJsb2NrT2Zmc2V0KSkgOiBkYXRhXG4gICAgICAgICAgICBibG9ja09mZnNldCA9IGlzQ29tcHJlc3NlZCA/IDAgOiBvZmZzZXRcblxuICAgICAgICAgICAgc3dpdGNoIChibG9ja1R5cGUpIHtcbiAgICAgICAgICAgICAgY2FzZSAnc3VtbWFyeSc6XG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCh0aGlzLnBhcnNlU3VtbWFyeUJsb2NrKHJlc3VsdERhdGEsIGJsb2NrT2Zmc2V0LCByZXF1ZXN0KSlcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBjYXNlICdiaWd3aWcnOlxuICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQodGhpcy5wYXJzZUJpZ1dpZ0Jsb2NrKHJlc3VsdERhdGEsIGJsb2NrT2Zmc2V0LCByZXF1ZXN0KSlcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBjYXNlICdiaWdiZWQnOlxuICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQodGhpcy5wYXJzZUJpZ0JlZEJsb2NrKHJlc3VsdERhdGEsIGJsb2NrT2Zmc2V0LCByZXF1ZXN0KSlcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgRG9uJ3Qga25vdyB3aGF0IHRvIGRvIHdpdGggJHtibG9ja1R5cGV9YClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9KSxcbiAgICAgIClcbiAgICAgIG9ic2VydmVyLmNvbXBsZXRlKClcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBvYnNlcnZlci5lcnJvcihlKVxuICAgIH1cbiAgfVxufVxuIl19 |
{ | ||
"name": "@gmod/bbi", | ||
"version": "1.0.17", | ||
"version": "1.0.18", | ||
"description": "Parser for BigWig/BigBed files", | ||
@@ -47,3 +47,3 @@ "license": "MIT", | ||
"es6-promisify": "^6.0.1", | ||
"generic-filehandle": "^1.0.8", | ||
"generic-filehandle": "^1.0.9", | ||
"quick-lru": "^4.0.0", | ||
@@ -50,0 +50,0 @@ "rxjs": "^6.5.1" |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
195007
1980
0
Updatedgeneric-filehandle@^1.0.9