Socket
Socket
Sign inDemoInstall

@verdaccio/local-storage

Package Overview
Dependencies
Maintainers
5
Versions
154
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@verdaccio/local-storage - npm Package Compare versions

Comparing version 2.0.0-beta.3 to 2.0.0

.DS_Store

4

CHANGELOG.md

@@ -5,2 +5,6 @@ # Change Log

# [2.0.0](https://github.com/verdaccio/local-storage/compare/v2.0.0-beta.3...v2.0.0) (2019-03-29)
<a name="2.0.0-beta.3"></a>

@@ -7,0 +11,0 @@ # [2.0.0-beta.3](https://github.com/verdaccio/local-storage/compare/v2.0.0-beta.2...v2.0.0-beta.3) (2019-02-24)

152

lib/local-database.js

@@ -26,6 +26,2 @@ "use strict";

function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }

@@ -101,96 +97,88 @@

_async.default.eachSeries(storageKeys,
/*#__PURE__*/
function () {
var _ref = _asyncToGenerator(function* (storage, cb) {
const position = storageKeys.indexOf(storage);
_async.default.eachSeries(storageKeys, async function (storage, cb) {
const position = storageKeys.indexOf(storage);
const base2 = _path.default.join(position !== 0 ? storageKeys[0] : '');
const base2 = _path.default.join(position !== 0 ? storageKeys[0] : '');
const storagePath = _path.default.resolve(base, base2, storage);
const storagePath = _path.default.resolve(base, base2, storage);
self.logger.trace({
storagePath,
storage
}, 'local-storage: [search] search path: @{storagePath} : @{storage}');
self.logger.trace({
storagePath,
storage
}, 'local-storage: [search] search path: @{storagePath} : @{storage}');
_fs.default.readdir(storagePath, (err, files) => {
if (err) {
return cb(err);
_fs.default.readdir(storagePath, (err, files) => {
if (err) {
return cb(err);
}
_async.default.eachSeries(files, function (file, cb) {
self.logger.trace({
file
}, 'local-storage: [search] search file path: @{file}');
if (storageKeys.includes(file)) {
return cb();
}
_async.default.eachSeries(files, function (file, cb) {
if (file.match(/^@/)) {
// scoped
const fileLocation = _path.default.resolve(base, storage, file);
self.logger.trace({
file
}, 'local-storage: [search] search file path: @{file}');
fileLocation
}, 'local-storage: [search] search scoped file location: @{fileLocation}');
if (storageKeys.includes(file)) {
return cb();
}
_fs.default.readdir(fileLocation, function (err, files) {
if (err) {
return cb(err);
}
if (file.match(/^@/)) {
// scoped
const fileLocation = _path.default.resolve(base, storage, file);
_async.default.eachSeries(files, (file2, cb) => {
if (validateName(file2)) {
const packagePath = _path.default.resolve(base, storage, file, file2);
self.logger.trace({
fileLocation
}, 'local-storage: [search] search scoped file location: @{fileLocation}');
_fs.default.stat(packagePath, (err, stats) => {
if (_lodash.default.isNil(err) === false) {
return cb(err);
}
_fs.default.readdir(fileLocation, function (err, files) {
if (err) {
return cb(err);
const item = {
name: `${file}/${file2}`,
path: packagePath,
time: stats.mtime.getTime()
};
onPackage(item, cb);
});
} else {
cb();
}
}, cb);
});
} else if (validateName(file)) {
const base2 = _path.default.join(position !== 0 ? storageKeys[0] : '');
_async.default.eachSeries(files, (file2, cb) => {
if (validateName(file2)) {
const packagePath = _path.default.resolve(base, storage, file, file2);
const packagePath = _path.default.resolve(base, base2, storage, file);
_fs.default.stat(packagePath, (err, stats) => {
if (_lodash.default.isNil(err) === false) {
return cb(err);
}
self.logger.trace({
packagePath
}, 'local-storage: [search] search file location: @{packagePath}');
const item = {
name: `${file}/${file2}`,
path: packagePath,
time: stats.mtime.getTime()
};
onPackage(item, cb);
});
} else {
cb();
}
}, cb);
});
} else if (validateName(file)) {
const base2 = _path.default.join(position !== 0 ? storageKeys[0] : '');
_fs.default.stat(packagePath, (err, stats) => {
if (_lodash.default.isNil(err) === false) {
return cb(err);
}
const packagePath = _path.default.resolve(base, base2, storage, file);
self.logger.trace({
packagePath
}, 'local-storage: [search] search file location: @{packagePath}');
_fs.default.stat(packagePath, (err, stats) => {
if (_lodash.default.isNil(err) === false) {
return cb(err);
}
onPackage({
name: file,
path: packagePath,
time: self._getTime(stats.mtime.getTime(), stats.mtime)
}, cb);
});
} else {
cb();
}
}, cb);
});
onPackage({
name: file,
path: packagePath,
time: self._getTime(stats.mtime.getTime(), stats.mtime)
}, cb);
});
} else {
cb();
}
}, cb);
});
return function (_x, _x2) {
return _ref.apply(this, arguments);
};
}(), onEnd);
}, onEnd);
}

@@ -377,2 +365,2 @@

exports.default = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9sb2NhbC1kYXRhYmFzZS50cyJdLCJuYW1lcyI6WyJERVBSRUNBVEVEX0RCX05BTUUiLCJEQl9OQU1FIiwiTG9jYWxEYXRhYmFzZSIsImNvbnN0cnVjdG9yIiwiY29uZmlnIiwibG9nZ2VyIiwicGF0aCIsIl9idWlsZFN0b3JhZ2VQYXRoIiwibG9ja2VkIiwiZGF0YSIsIl9mZXRjaExvY2FsUGFja2FnZXMiLCJfc3luYyIsImdldFNlY3JldCIsIlByb21pc2UiLCJyZXNvbHZlIiwic2VjcmV0Iiwic2V0U2VjcmV0IiwicmVqZWN0IiwiYWRkIiwibmFtZSIsImNiIiwibGlzdCIsImluZGV4T2YiLCJwdXNoIiwic2VhcmNoIiwib25QYWNrYWdlIiwib25FbmQiLCJ2YWxpZGF0ZU5hbWUiLCJzdG9yYWdlcyIsIl9nZXRDdXN0b21QYWNrYWdlTG9jYWxTdG9yYWdlcyIsInRyYWNlIiwiSlNPTiIsInN0cmluZ2lmeSIsImJhc2UiLCJQYXRoIiwiZGlybmFtZSIsInNlbGZfcGF0aCIsInNlbGYiLCJzdG9yYWdlS2V5cyIsIk9iamVjdCIsImtleXMiLCJhc3luYyIsImVhY2hTZXJpZXMiLCJzdG9yYWdlIiwicG9zaXRpb24iLCJiYXNlMiIsImpvaW4iLCJzdG9yYWdlUGF0aCIsImZzIiwicmVhZGRpciIsImVyciIsImZpbGVzIiwiZmlsZSIsImluY2x1ZGVzIiwibWF0Y2giLCJmaWxlTG9jYXRpb24iLCJmaWxlMiIsInBhY2thZ2VQYXRoIiwic3RhdCIsInN0YXRzIiwiXyIsImlzTmlsIiwiaXRlbSIsInRpbWUiLCJtdGltZSIsImdldFRpbWUiLCJfZ2V0VGltZSIsInBhY2thZ2VzIiwibGlzdFBhY2thZ2VzQ29uZiIsIm1hcCIsInBrZyIsInJlbW92ZSIsImdldCIsIkVycm9yIiwicGtnTmFtZSIsInNwbGljZSIsImVycm9yIiwibWtkaXJwIiwic3luYyIsIndyaXRlRmlsZVN5bmMiLCJnZXRQYWNrYWdlU3RvcmFnZSIsInBhY2thZ2VOYW1lIiwicGFja2FnZUFjY2VzcyIsImdldE1hdGNoZWRQYWNrYWdlc1NwZWMiLCJfZ2V0TG9jYWxTdG9yYWdlUGF0aCIsInVuZGVmaW5lZCIsImlzU3RyaW5nIiwiZGVidWciLCJwYWNrYWdlU3RvcmFnZVBhdGgiLCJMb2NhbERyaXZlciIsImdsb2JhbENvbmZpZ1N0b3JhZ2UiLCJkYkdlblBhdGgiLCJkYk5hbWUiLCJzaW5vcGlhZGJQYXRoIiwiZXhpc3RzU3luYyIsImVtcHR5RGF0YWJhc2UiLCJkYiIsImNvZGUiLCJub1N1Y2hGaWxlIiwibWVzc2FnZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUVBOztBQUNBOztBQUVBOztBQUNBOzs7Ozs7Ozs7Ozs7QUFJQSxNQUFNQSxrQkFBMEIsR0FBRyxrQkFBbkM7QUFDQSxNQUFNQyxPQUFlLEdBQUcsb0JBQXhCO0FBRUE7Ozs7QUFHQSxNQUFNQyxhQUFOLENBQWtEO0FBT2hEOzs7O0FBSUFDLEVBQUFBLFdBQVcsQ0FBQ0MsTUFBRCxFQUFpQkMsTUFBakIsRUFBaUM7QUFBQTs7QUFBQTs7QUFBQTs7QUFBQTs7QUFBQTs7QUFDMUMsU0FBS0QsTUFBTCxHQUFjQSxNQUFkO0FBQ0EsU0FBS0UsSUFBTCxHQUFZLEtBQUtDLGlCQUFMLENBQXVCSCxNQUF2QixDQUFaO0FBQ0EsU0FBS0MsTUFBTCxHQUFjQSxNQUFkO0FBQ0EsU0FBS0csTUFBTCxHQUFjLEtBQWQ7QUFDQSxTQUFLQyxJQUFMLEdBQVksS0FBS0MsbUJBQUwsRUFBWjs7QUFDQSxTQUFLQyxLQUFMO0FBQ0Q7O0FBRURDLEVBQUFBLFNBQVMsR0FBaUI7QUFDeEIsV0FBT0MsT0FBTyxDQUFDQyxPQUFSLENBQWdCLEtBQUtMLElBQUwsQ0FBVU0sTUFBMUIsQ0FBUDtBQUNEOztBQUVEQyxFQUFBQSxTQUFTLENBQUNELE1BQUQsRUFBK0I7QUFDdEMsV0FBTyxJQUFJRixPQUFKLENBQVksQ0FBQ0MsT0FBRCxFQUFVRyxNQUFWLEtBQXFCO0FBQ3RDLFdBQUtSLElBQUwsQ0FBVU0sTUFBVixHQUFt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LFFBQUlnRCxZQUFHOEMsVUFBSCxDQUFjRCxhQUFkLENBQUosRUFBa0M7QUFDaEMsYUFBT0EsYUFBUDtBQUNEOztBQUVELFdBQU9GLFNBQVMsQ0FBQzFGLE9BQUQsQ0FBaEI7QUFDRDtBQUVEOzs7Ozs7O0FBS0FTLEVBQUFBLG1CQUFtQixHQUFpQjtBQUNsQyxVQUFNVyxJQUFpQixHQUFHLEVBQTFCO0FBQ0EsVUFBTTBFLGFBQWEsR0FBRztBQUFFMUUsTUFBQUEsSUFBRjtBQUFRTixNQUFBQSxNQUFNLEVBQUU7QUFBaEIsS0FBdEI7O0FBRUEsUUFBSTtBQUNGLFlBQU1pRixFQUFFLEdBQUcsbUNBQW9CLEtBQUsxRixJQUF6QixFQUErQixLQUFLRCxNQUFwQyxDQUFYO0FBRUEsYUFBTzJGLEVBQVA7QUFDRCxLQUpELENBSUUsT0FBTzlDLEdBQVAsRUFBWTtBQUNaO0FBQ0E7QUFDQSxVQUFJQSxHQUFHLENBQUMrQyxJQUFKLEtBQWFDLG1CQUFqQixFQUE2QjtBQUMzQixhQUFLMUYsTUFBTCxHQUFjLElBQWQ7QUFDQSxhQUFLSCxNQUFMLENBQVl1RSxLQUFaLENBQWtCLCtFQUFsQixFQUFvRyxjQUFhLEtBQUt0RSxJQUFLLFFBQU80QyxHQUFHLENBQUNpRCxPQUFRLEVBQTlJO0FBQ0Q7O0FBRUQsYUFBT0osYUFBUDtBQUNEO0FBQ0Y7O0FBblMrQzs7ZUFzU25DN0YsYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmcyBmcm9tICdmcyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IFBhdGggZnJvbSAncGF0aCc7XG4vLyAkRmxvd0ZpeE1lXG5pbXBvcnQgYXN5bmMgZnJvbSAnYXN5bmMnO1xuaW1wb3J0IG1rZGlycCBmcm9tICdta2RpcnAnO1xuXG5pbXBvcnQgTG9jYWxEcml2ZXIsIHsgbm9TdWNoRmlsZSB9IGZyb20gJy4vbG9jYWwtZnMnO1xuaW1wb3J0IHsgbG9hZFByaXZhdGVQYWNrYWdlcyB9IGZyb20gJy4vcGtnLXV0aWxzJztcblxuaW1wb3J0IHsgSVBhY2thZ2VTdG9yYWdlLCBJUGx1Z2luU3RvcmFnZSwgU3RvcmFnZUxpc3QsIExvY2FsU3RvcmFnZSwgTG9nZ2VyLCBDb25maWcsIENhbGxiYWNrLCBQYWNrYWdlQWNjZXNzIH0gZnJvbSAnQHZlcmRhY2Npby90eXBlcyc7XG5cbmNvbnN0IERFUFJFQ0FURURfREJfTkFNRTogc3RyaW5nID0gJy5zaW5vcGlhLWRiLmpzb24nO1xuY29uc3QgREJfTkFNRTogc3RyaW5nID0gJy52ZXJkYWNjaW8tZGIuanNvbic7XG5cbi8qKlxuICogSGFuZGxlIGxvY2FsIGRhdGFiYXNlLlxuICovXG5jbGFzcyBMb2NhbERhdGFiYXNlIGltcGxlbWVudHMgSVBsdWdpblN0b3JhZ2U8e30+IHtcbiAgcGF0aDogc3RyaW5nO1xuICBsb2dnZXI6IExvZ2dlcjtcbiAgZGF0YTogTG9jYWxTdG9yYWdlO1xuICBjb25maWc6IENvbmZpZztcbiAgbG9ja2VkOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBMb2FkIGFuIHBhcnNlIHRoZSBsb2NhbCBqc29uIGRhdGFiYXNlLlxuICAgKiBAcGFyYW0geyp9IHBhdGggdGhlIGRhdGFiYXNlIHBhdGhcbiAgICovXG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogQ29uZmlnLCBsb2dnZXI6IExvZ2dlcikge1xuICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuICAgIHRoaXMucGF0aCA9IHRoaXMuX2J1aWxkU3RvcmFnZVBhdGgoY29uZmlnKTtcbiAgICB0aGlzLmxvZ2dlciA9IGxvZ2dlcjtcbiAgICB0aGlzLmxvY2tlZCA9IGZhbHNlO1xuICAgIHRoaXMuZGF0YSA9IHRoaXMuX2ZldGNoTG9jYWxQYWNrYWdlcygpO1xuICAgIHRoaXMuX3N5bmMoKTtcbiAgfVxuXG4gIGdldFNlY3JldCgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5kYXRhLnNlY3JldCk7XG4gIH1cblxuICBzZXRTZWNyZXQoc2VjcmV0OiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLmRhdGEuc2VjcmV0ID0gc2VjcmV0O1xuICAgICAgcmVzb2x2ZSh0aGlzLl9zeW5jKCkpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIG5ldyBlbGVtZW50LlxuICAgKiBAcGFyYW0geyp9IG5hbWVcbiAgICogQHJldHVybiB7RXJyb3J8Kn1cbiAgICovXG4gIGFkZChuYW1lOiBzdHJpbmcsIGNiOiBDYWxsYmFjaykge1xuICAgIGlmICh0aGlzLmRhdGEubGlzdC5pbmRleE9mKG5hbWUpID09PSAtMSkge1xuICAgICAgdGhpcy5kYXRhLmxpc3QucHVzaChuYW1lKTtcbiAgICAgIGNiKHRoaXMuX3N5bmMoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNiKG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIHNlYXJjaChvblBhY2thZ2U6IENhbGxiYWNrLCBvbkVuZDogQ2FsbGJhY2ssIHZhbGlkYXRlTmFtZTogYW55KTogdm9pZCB7XG4gICAgY29uc3Qgc3RvcmFnZXMgPSB0aGlzLl9nZXRDdXN0b21QYWNrYWdlTG9jYWxTdG9yYWdlcygpO1xuICAgIHRoaXMubG9nZ2VyLnRyYWNlKGBsb2NhbC1zdG9yYWdlOiBbc2VhcmNoXTogJHtKU09OLnN0cmluZ2lmeShzdG9yYWdlcyl9YCk7XG4gICAgY29uc3QgYmFzZSA9IFBhdGguZGlybmFtZSh0aGlzLmNvbmZpZy5zZWxmX3BhdGgpO1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGNvbnN0IHN0b3JhZ2VLZXlzID0gT2JqZWN0LmtleXMoc3RvcmFnZXMpO1xuICAgIHRoaXMubG9nZ2VyLnRyYWNlKGBsb2NhbC1zdG9yYWdlOiBbc2VhcmNoXSBiYXNlOiAke2Jhc2V9IGtleXMgJHtzdG9yYWdlS2V5c31gKTtcblxuICAgIGFzeW5jLmVhY2hTZXJpZXMoXG4gICAgICBzdG9yYWdlS2V5cyxcbiAgICAgIGFzeW5jIGZ1bmN0aW9uKHN0b3JhZ2UsIGNiKSB7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gc3RvcmFnZUtleXMuaW5kZXhPZihzdG9yYWdlKTtcbiAgICAgICAgY29uc3QgYmFzZTIgPSBQYXRoLmpvaW4ocG9zaXRpb24gIT09IDAgPyBzdG9yYWdlS2V5c1swXSA6ICcnKTtcbiAgICAgICAgY29uc3Qgc3RvcmFnZVBhdGg6IHN0cmluZyA9IFBhdGgucmVzb2x2ZShiYXNlLCBiYXNlMiwgc3RvcmFnZSk7XG4gICAgICAgIHNlbGYubG9nZ2VyLnRyYWNlKHsgc3RvcmFnZVBhdGgsIHN0b3JhZ2UgfSwgJ2xvY2FsLXN0b3JhZ2U6IFtzZWFyY2hdIHNlYXJjaCBwYXRoOiBAe3N0b3JhZ2VQYXRofSA6IEB7c3RvcmFnZX0nKTtcbiAgICAgICAgZnMucmVhZGRpcihzdG9yYWdlUGF0aCwgKGVyciwgZmlsZXMpID0+IHtcbiAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gY2IoZXJyKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhc3luYy5lYWNoU2VyaWVzKFxuICAgICAgICAgICAgZmlsZXMsXG4gICAgICAgICAgICBmdW5jdGlvbihmaWxlLCBjYikge1xuICAgICAgICAgICAgICBzZWxmLmxvZ2dlci50cmFjZSh7IGZpbGUgfSwgJ2xvY2FsLXN0b3JhZ2U6IFtzZWFyY2hdIHNlYXJjaCBmaWxlIHBhdGg6IEB7ZmlsZX0nKTtcbiAgICAgICAgICAgICAgaWYgKHN0b3JhZ2VLZXlzLmluY2x1ZGVzKGZpbGUgKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYigpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICBpZiAoZmlsZS5tYXRjaCgvXkAvKSkge1xuICAgICAgICAgICAgICAgIC8vIHNjb3BlZFxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVMb2NhdGlvbiA9IFBhdGgucmVzb2x2ZShiYXNlLCBzdG9yYWdlLCBmaWxlKTtcbiAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci50cmFjZSh7IGZpbGVMb2NhdGlvbiB9LCAnbG9jYWwtc3RvcmFnZTogW3NlYXJjaF0gc2VhcmNoIHNjb3BlZCBmaWxlIGxvY2F0aW9uOiBAe2ZpbGVMb2NhdGlvbn0nKTtcbiAgICAgICAgICAgICAgICBmcy5yZWFkZGlyKGZpbGVMb2NhdGlvbiwgZnVuY3Rpb24oZXJyLCBmaWxlcykge1xuICAgICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2IoZXJyKTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgYXN5bmMuZWFjaFNlcmllcyhcbiAgICAgICAgICAgICAgICAgICAgZmlsZXMsIChmaWxlMiwgY2IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVOYW1lKGZpbGUyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFja2FnZVBhdGggPSBQYXRoLnJlc29sdmUoYmFzZSwgc3RvcmFnZSwgZmlsZSwgZmlsZTIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmcy5zdGF0KHBhY2thZ2VQYXRoLCAoZXJyLCBzdGF0cykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXy5pc05pbChlcnIpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYihlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogYCR7ZmlsZX0vJHtmaWxlMn1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6IHBhY2thZ2VQYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IHN0YXRzLm10aW1lLmdldFRpbWUoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICBvblBhY2thZ2UoaXRlbSwgY2IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNiKCk7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBjYlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWxpZGF0ZU5hbWUoZmlsZSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBiYXNlMiA9IFBhdGguam9pbihwb3NpdGlvbiAhPT0gMCA/IHN0b3JhZ2VLZXlzWzBdIDogJycpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhY2thZ2VQYXRoID0gUGF0aC5yZXNvbHZlKGJhc2UsIGJhc2UyLCBzdG9yYWdlLCBmaWxlKTtcbiAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci50cmFjZSh7IHBhY2thZ2VQYXRoIH0sICdsb2NhbC1zdG9yYWdlOiBbc2VhcmNoXSBzZWFyY2ggZmlsZSBsb2NhdGlvbjogQHtwYWNrYWdlUGF0aH0nKTtcbiAgICAgICAgICAgICAgICBmcy5zdGF0KHBhY2thZ2VQYXRoLCAoZXJyLCBzdGF0cykgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKF8uaXNOaWwoZXJyKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNiKGVycik7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBvblBhY2thZ2UoXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBmaWxlLFxuICAgICAgICAgICAgICAgICAgICAgIHBhdGg6IHBhY2thZ2VQYXRoLFxuICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IHNlbGYuX2dldFRpbWUoc3RhdHMubXRpbWUuZ2V0VGltZSgpLCBzdGF0cy5tdGltZSlcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgY2JcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNiXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgb25FbmRcbiAgICApO1xuICB9XG5cbiAgX2dldFRpbWUodGltZTogbnVtYmVyLCBtdGltZTogRGF0ZSkge1xuICAgIHJldHVybiB0aW1lID8gdGltZSA6IG10aW1lO1xuICB9XG5cbiAgX2dldEN1c3RvbVBhY2thZ2VMb2NhbFN0b3JhZ2VzKCkge1xuICAgIGNvbnN0IHN0b3JhZ2VzID0ge307XG5cbiAgICAvLyBhZGQgY3VzdG9tIHN0b3JhZ2UgaWYgZXhpc3RcbiAgICBpZiAodGhpcy5jb25maWcuc3RvcmFnZSkge1xuICAgICAgc3RvcmFnZXNbdGhpcy5jb25maWcuc3RvcmFnZV0gPSB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHsgcGFja2FnZXMgfSA9IHRoaXMuY29uZmlnO1xuXG4gICAgaWYgKHBhY2thZ2VzKSB7XG4gICAgICBjb25zdCBsaXN0UGFja2FnZXNDb25mID0gT2JqZWN0LmtleXMocGFja2FnZXMgfHwge30pO1xuXG4gICAgICBsaXN0UGFja2FnZXNDb25mLm1hcChwa2cgPT4ge1xuICAgICAgICBjb25zdCBzdG9yYWdlID0gcGFja2FnZXNbcGtnXS5zdG9yYWdlO1xuICAgICAgICBpZiAoc3RvcmFnZSkge1xuICAgICAgICAgIHN0b3JhZ2VzW3N0b3JhZ2VdID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBzdG9yYWdlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYW4gZWxlbWVudCBmcm9tIHRoZSBkYXRhYmFzZS5cbiAgICogQHBhcmFtIHsqfSBuYW1lXG4gICAqIEByZXR1cm4ge0Vycm9yfCp9XG4gICAqL1xuICByZW1vdmUobmFtZTogc3RyaW5nLCBjYjogQ2FsbGJhY2spIHtcbiAgICB0aGlzLmdldCgoZXJyLCBkYXRhKSA9PiB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIGNiKG5ldyBFcnJvcignZXJyb3Igb24gZ2V0JykpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwa2dOYW1lID0gZGF0YS5pbmRleE9mKG5hbWUpO1xuICAgICAgaWYgKHBrZ05hbWUgIT09IC0xKSB7XG4gICAgICAgIHRoaXMuZGF0YS5saXN0LnNwbGljZShwa2dOYW1lLCAxKTtcbiAgICAgIH1cblxuICAgICAgY2IodGhpcy5fc3luYygpKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYWxsIGRhdGFiYXNlIGVsZW1lbnRzLlxuICAgKiBAcmV0dXJuIHtBcnJheX1cbiAgICovXG4gIGdldChjYjogQ2FsbGJhY2spIHtcbiAgICBjYihudWxsLCB0aGlzLmRhdGEubGlzdCk7XG4gIH1cblxuICAvKipcbiAgICogU3luY3Jvbml6ZSB7Y3JlYXRlfSBkYXRhYmFzZSB3aGV0aGVyIGRvZXMgbm90IGV4aXN0LlxuICAgKiBAcmV0dXJuIHtFcnJvcnwqfVxuICAgKi9cbiAgX3N5bmMoKSB7XG4gICAgaWYgKHRoaXMubG9ja2VkKSB7XG4gICAgICB0aGlzLmxvZ2dlci5lcnJvcignRGF0YWJhc2UgaXMgbG9ja2VkLCBwbGVhc2UgY2hlY2sgZXJyb3IgbWVzc2FnZSBwcmludGVkIGR1cmluZyBzdGFydHVwIHRvIHByZXZlbnQgZGF0YSBsb3NzLicpO1xuICAgICAgcmV0dXJuIG5ldyBFcnJvcignVmVyZGFjY2lvIGRhdGFiYXNlIGlzIGxvY2tlZCwgcGxlYXNlIGNvbnRhY3QgeW91ciBhZG1pbmlzdHJhdG9yIHRvIGNoZWNrb3V0IGxvZ3MgZHVyaW5nIHZlcmRhY2NpbyBzdGFydHVwLicpO1xuICAgIH1cbiAgICAvLyBVc2VzIHN5bmMgdG8gcHJldmVudCB1Z2x5IHJhY2UgY29uZGl0aW9uXG4gICAgdHJ5IHtcbiAgICAgIG1rZGlycC5zeW5jKFBhdGguZGlybmFtZSh0aGlzLnBhdGgpKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIHBlcmhhcHMgYSBsb2dnZXIgaW5zdGFuY2U/XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgZnMud3JpdGVGaWxlU3luYyh0aGlzLnBhdGgsIEpTT04uc3RyaW5naWZ5KHRoaXMuZGF0YSkpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXR1cm4gZXJyO1xuICAgIH1cbiAgfVxuXG4gIGdldFBhY2thZ2VTdG9yYWdlKHBhY2thZ2VOYW1lOiBzdHJpbmcpOiBJUGFja2FnZVN0b3JhZ2Uge1xuICAgIGNvbnN0IHBhY2thZ2VBY2Nlc3MgPSB0aGlzLmNvbmZpZy5nZXRNYXRjaGVkUGFja2FnZXNTcGVjKHBhY2thZ2VOYW1lKTtcblxuICAgIGNvbnN0IHBhY2thZ2VQYXRoOiBzdHJpbmcgPSB0aGlzLl9nZXRMb2NhbFN0b3JhZ2VQYXRoKHBhY2thZ2VBY2Nlc3MgPyBwYWNrYWdlQWNjZXNzLnN0b3JhZ2U6ICB1bmRlZmluZWQpO1xuXG4gICAgaWYgKF8uaXNTdHJpbmcocGFja2FnZVBhdGgpID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoeyBuYW1lOiBwYWNrYWdlTmFtZSB9LCAndGhpcyBwYWNrYWdlIGhhcyBubyBzdG9yYWdlIGRlZmluZWQ6IEB7bmFtZX0nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYWNrYWdlU3RvcmFnZVBhdGg6IHN0cmluZyA9IFBhdGguam9pbihQYXRoLnJlc29sdmUoUGF0aC5kaXJuYW1lKHRoaXMuY29uZmlnLnNlbGZfcGF0aCB8fCAnJyksIHBhY2thZ2VQYXRoKSwgcGFja2FnZU5hbWUpO1xuXG4gICAgcmV0dXJuIG5ldyBMb2NhbERyaXZlcihwYWNrYWdlU3RvcmFnZVBhdGgsIHRoaXMubG9nZ2VyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZnkgdGhlIHJpZ2h0IGxvY2FsIHN0b3JhZ2UgbG9jYXRpb24uXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwYXRoXG4gICAqIEByZXR1cm4ge1N0cmluZ31cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9nZXRMb2NhbFN0b3JhZ2VQYXRoKHN0b3JhZ2U6IHN0cmluZyB8IHZvaWQpOiBzdHJpbmcge1xuICAgIGNvbnN0IGdsb2JhbENvbmZpZ1N0b3JhZ2UgPSB0aGlzLmNvbmZpZyA/IHRoaXMuY29uZmlnLnN0b3JhZ2UgOiB1bmRlZmluZWQ7XG4gICAgaWYgKF8uaXNOaWwoZ2xvYmFsQ29uZmlnU3RvcmFnZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZ2xvYmFsIHN0b3JhZ2UgaXMgcmVxdWlyZWQgZm9yIHRoaXMgcGx1Z2luJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChfLmlzTmlsKHN0b3JhZ2UpID09PSBmYWxzZSAmJiBfLmlzU3RyaW5nKHN0b3JhZ2UpKSB7XG4gICAgICAgIHJldHVybiBQYXRoLmpvaW4oZ2xvYmFsQ29uZmlnU3RvcmFnZSBhcyBzdHJpbmcgLCBzdG9yYWdlIGFzIHN0cmluZyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBnbG9iYWxDb25maWdTdG9yYWdlIGFzIHN0cmluZztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgdGhlIGxvY2FsIGRhdGFiYXNlIHBhdGguXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWdcbiAgICogQHJldHVybiB7c3RyaW5nfFN0cmluZ3wqfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2J1aWxkU3RvcmFnZVBhdGgoY29uZmlnOiBDb25maWcpIHtcbiAgICBjb25zdCBkYkdlblBhdGggPSBmdW5jdGlvbihkYk5hbWU6IHN0cmluZykge1xuICAgICAgcmV0dXJuIFBhdGguam9pbihQYXRoLnJlc29sdmUoUGF0aC5kaXJuYW1lKGNvbmZpZy5zZWxmX3BhdGggfHwgJycpLCBjb25maWcuc3RvcmFnZSBhcyBzdHJpbmcsIGRiTmFtZSkpO1xuICAgIH07XG5cbiAgICBjb25zdCBzaW5vcGlhZGJQYXRoOiBzdHJpbmcgPSBkYkdlblBhdGgoREVQUkVDQVRFRF9EQl9OQU1FKTtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhzaW5vcGlhZGJQYXRoKSkge1xuICAgICAgcmV0dXJuIHNpbm9waWFkYlBhdGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRiR2VuUGF0aChEQl9OQU1FKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaCBsb2NhbCBwYWNrYWdlcy5cbiAgICogQHByaXZhdGVcbiAgICogQHJldHVybiB7T2JqZWN0fVxuICAgKi9cbiAgX2ZldGNoTG9jYWxQYWNrYWdlcygpOiBMb2NhbFN0b3JhZ2Uge1xuICAgIGNvbnN0IGxpc3Q6IFN0b3JhZ2VMaXN0ID0gW107XG4gICAgY29uc3QgZW1wdHlEYXRhYmFzZSA9IHsgbGlzdCwgc2VjcmV0OiAnJyB9O1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRiID0gbG9hZFByaXZhdGVQYWNrYWdlcyh0aGlzLnBhdGgsIHRoaXMubG9nZ2VyKTtcblxuICAgICAgcmV0dXJuIGRiO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gcmVhZEZpbGVTeW5jIGlzIHBsYXRmb3JtIHNwZWNpZmljLCBtYWNPUywgTGludXggYW5kIFdpbmRvd3MgdGhyb3duIGFuIGVycm9yXG4gICAgICAvLyBPbmx5IHJlY3JlYXRlIGlmIGZpbGUgbm90IGZvdW5kIHRvIHByZXZlbnQgZGF0YSBsb3NzXG4gICAgICBpZiAoZXJyLmNvZGUgIT09IG5vU3VjaEZpbGUpIHtcbiAgICAgICAgdGhpcy5sb2NrZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignRmFpbGVkIHRvIHJlYWQgcGFja2FnZSBkYXRhYmFzZSBmaWxlLCBwbGVhc2UgY2hlY2sgdGhlIGVycm9yIHByaW50ZWQgYmVsb3c6XFxuJywgYEZpbGUgUGF0aDogJHt0aGlzLnBhdGh9XFxuXFxuICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBlbXB0eURhdGFiYXNlO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBMb2NhbERhdGFiYXNlO1xuIl19
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9sb2NhbC1kYXRhYmFzZS50cyJdLCJuYW1lcyI6WyJERVBSRUNBVEVEX0RCX05BTUUiLCJEQl9OQU1FIiwiTG9jYWxEYXRhYmFzZSIsImNvbnN0cnVjdG9yIiwiY29uZmlnIiwibG9nZ2VyIiwicGF0aCIsIl9idWlsZFN0b3JhZ2VQYXRoIiwibG9ja2VkIiwiZGF0YSIsIl9mZXRjaExvY2FsUGFja2FnZXMiLCJfc3luYyIsImdldFNlY3JldCIsIlByb21pc2UiLCJyZXNvbHZlIiwic2VjcmV0Iiwic2V0U2VjcmV0IiwicmVqZWN0IiwiYWRkIiwibmFtZSIsImNiIiwibGlzdCIsImluZGV4T2YiLCJwdXNoIiwic2VhcmNoIiwib25QYWNrYWdlIiwib25FbmQiLCJ2YWxpZGF0ZU5hbWUiLCJzdG9yYWdlcyIsIl9nZXRDdXN0b21QYWNrYWdlTG9jYWxTdG9yYWdlcyIsInRyYWNlIiwiSlNPTiIsInN0cmluZ2lmeSIsImJhc2UiLCJQYXRoIiwiZGlybmFtZSIsInNlbGZfcGF0aCIsInNlbGYiLCJzdG9yYWdlS2V5cyIsIk9iamVjdCIsImtleXMiLCJhc3luYyIsImVhY2hTZXJpZXMiLCJzdG9yYWdlIiwicG9zaXRpb24iLCJiYXNlMiIsImpvaW4iLCJzdG9yYWdlUGF0aCIsImZzIiwicmVhZGRpciIsImVyciIsImZpbGVzIiwiZmlsZSIsImluY2x1ZGVzIiwibWF0Y2giLCJmaWxlTG9jYXRpb24iLCJmaWxlMiIsInBhY2thZ2VQYXRoIiwic3RhdCIsInN0YXRzIiwiXyIsImlzTmlsIiwiaXRlbSIsInRpbWUiLCJtdGltZSIsImdldFRpbWUiLCJfZ2V0VGltZSIsInBhY2thZ2VzIiwibGlzdFBhY2thZ2VzQ29uZiIsIm1hcCIsInBrZyIsInJlbW92ZSIsImdldCIsIkVycm9yIiwicGtnTmFtZSIsInNwbGljZSIsImVycm9yIiwibWtkaXJwIiwic3luYyIsIndyaXRlRmlsZVN5bmMiLCJnZXRQYWNrYWdlU3RvcmFnZSIsInBhY2thZ2VOYW1lIiwicGFja2FnZUFjY2VzcyIsImdldE1hdGNoZWRQYWNrYWdlc1NwZWMiLCJfZ2V0TG9jYWxTdG9yYWdlUGF0aCIsInVuZGVmaW5lZCIsImlzU3RyaW5nIiwiZGVidWciLCJwYWNrYWdlU3RvcmFnZVBhdGgiLCJMb2NhbERyaXZlciIsImdsb2JhbENvbmZpZ1N0b3JhZ2UiLCJkYkdlblBhdGgiLCJkYk5hbWUiLCJzaW5vcGlhZGJQYXRoIiwiZXhpc3RzU3luYyIsImVtcHR5RGF0YWJhc2UiLCJkYiIsImNvZGUiLCJub1N1Y2hGaWxlIiwibWVzc2FnZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUVBOztBQUNBOztBQUVBOztBQUNBOzs7Ozs7OztBQUlBLE1BQU1BLGtCQUEwQixHQUFHLGtCQUFuQztBQUNBLE1BQU1DLE9BQWUsR0FBRyxvQkFBeEI7QUFFQTs7OztBQUdBLE1BQU1DLGFBQU4sQ0FBa0Q7QUFPaEQ7Ozs7QUFJQUMsRUFBQUEsV0FBVyxDQUFDQyxNQUFELEVBQWlCQyxNQUFqQixFQUFpQztBQUFBOztBQUFBOztBQUFBOztBQUFBOztBQUFBOztBQUMxQyxTQUFLRCxNQUFMLEdBQWNBLE1BQWQ7QUFDQSxTQUFLRSxJQUFMLEdBQVksS0FBS0MsaUJBQUwsQ0FBdUJILE1BQXZCLENBQVo7QUFDQSxTQUFLQyxNQUFMLEdBQWNBLE1BQWQ7QUFDQSxTQUFLRyxNQUFMLEdBQWMsS0FBZDtBQUNBLFNBQUtDLElBQUwsR0FBWSxLQUFLQyxtQkFBTCxFQUFaOztBQUNBLFNBQUtDLEtBQUw7QUFDRDs7QUFFREMsRUFBQUEsU0FBUyxHQUFpQjtBQUN4QixXQUFPQyxPQUFPLENBQUNDLE9BQVIsQ0FBZ0IsS0FBS0wsSUFBTCxDQUFVTSxNQUExQixDQUFQO0FBQ0Q7O0FBRURDLEVBQUFBLFNBQVMsQ0FBQ0QsTUFBRCxFQUErQjtBQUN0QyxXQUFPLElBQUlGLE9BQUosQ0FBWSxDQUFDQyxPQUFELEVBQVVHLE1BQVYsS0FBcUI7QUFDdEMsV0FBS1IsSUFBTCxDQUFVTSxNQUFWLEdBQW1CQSxN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LGFBQU9BLGFBQVA7QUFDRDs7QUFFRCxXQUFPRixTQUFTLENBQUMxRixPQUFELENBQWhCO0FBQ0Q7QUFFRDs7Ozs7OztBQUtBUyxFQUFBQSxtQkFBbUIsR0FBaUI7QUFDbEMsVUFBTVcsSUFBaUIsR0FBRyxFQUExQjtBQUNBLFVBQU0wRSxhQUFhLEdBQUc7QUFBRTFFLE1BQUFBLElBQUY7QUFBUU4sTUFBQUEsTUFBTSxFQUFFO0FBQWhCLEtBQXRCOztBQUVBLFFBQUk7QUFDRixZQUFNaUYsRUFBRSxHQUFHLG1DQUFvQixLQUFLMUYsSUFBekIsRUFBK0IsS0FBS0QsTUFBcEMsQ0FBWDtBQUVBLGFBQU8yRixFQUFQO0FBQ0QsS0FKRCxDQUlFLE9BQU85QyxHQUFQLEVBQVk7QUFDWjtBQUNBO0FBQ0EsVUFBSUEsR0FBRyxDQUFDK0MsSUFBSixLQUFhQyxtQkFBakIsRUFBNkI7QUFDM0IsYUFBSzFGLE1BQUwsR0FBYyxJQUFkO0FBQ0EsYUFBS0gsTUFBTCxDQUFZdUUsS0FBWixDQUFrQiwrRUFBbEIsRUFBb0csY0FBYSxLQUFLdEUsSUFBSyxRQUFPNEMsR0FBRyxDQUFDaUQsT0FBUSxFQUE5STtBQUNEOztBQUVELGFBQU9KLGFBQVA7QUFDRDtBQUNGOztBQW5TK0M7O2VBc1NuQzdGLGEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZnMgZnJvbSAnZnMnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBQYXRoIGZyb20gJ3BhdGgnO1xuLy8gJEZsb3dGaXhNZVxuaW1wb3J0IGFzeW5jIGZyb20gJ2FzeW5jJztcbmltcG9ydCBta2RpcnAgZnJvbSAnbWtkaXJwJztcblxuaW1wb3J0IExvY2FsRHJpdmVyLCB7IG5vU3VjaEZpbGUgfSBmcm9tICcuL2xvY2FsLWZzJztcbmltcG9ydCB7IGxvYWRQcml2YXRlUGFja2FnZXMgfSBmcm9tICcuL3BrZy11dGlscyc7XG5cbmltcG9ydCB7IElQYWNrYWdlU3RvcmFnZSwgSVBsdWdpblN0b3JhZ2UsIFN0b3JhZ2VMaXN0LCBMb2NhbFN0b3JhZ2UsIExvZ2dlciwgQ29uZmlnLCBDYWxsYmFjaywgUGFja2FnZUFjY2VzcyB9IGZyb20gJ0B2ZXJkYWNjaW8vdHlwZXMnO1xuXG5jb25zdCBERVBSRUNBVEVEX0RCX05BTUU6IHN0cmluZyA9ICcuc2lub3BpYS1kYi5qc29uJztcbmNvbnN0IERCX05BTUU6IHN0cmluZyA9ICcudmVyZGFjY2lvLWRiLmpzb24nO1xuXG4vKipcbiAqIEhhbmRsZSBsb2NhbCBkYXRhYmFzZS5cbiAqL1xuY2xhc3MgTG9jYWxEYXRhYmFzZSBpbXBsZW1lbnRzIElQbHVnaW5TdG9yYWdlPHt9PiB7XG4gIHBhdGg6IHN0cmluZztcbiAgbG9nZ2VyOiBMb2dnZXI7XG4gIGRhdGE6IExvY2FsU3RvcmFnZTtcbiAgY29uZmlnOiBDb25maWc7XG4gIGxvY2tlZDogYm9vbGVhbjtcblxuICAvKipcbiAgICogTG9hZCBhbiBwYXJzZSB0aGUgbG9jYWwganNvbiBkYXRhYmFzZS5cbiAgICogQHBhcmFtIHsqfSBwYXRoIHRoZSBkYXRhYmFzZSBwYXRoXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihjb25maWc6IENvbmZpZywgbG9nZ2VyOiBMb2dnZXIpIHtcbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICB0aGlzLnBhdGggPSB0aGlzLl9idWlsZFN0b3JhZ2VQYXRoKGNvbmZpZyk7XG4gICAgdGhpcy5sb2dnZXIgPSBsb2dnZXI7XG4gICAgdGhpcy5sb2NrZWQgPSBmYWxzZTtcbiAgICB0aGlzLmRhdGEgPSB0aGlzLl9mZXRjaExvY2FsUGFja2FnZXMoKTtcbiAgICB0aGlzLl9zeW5jKCk7XG4gIH1cblxuICBnZXRTZWNyZXQoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuZGF0YS5zZWNyZXQpO1xuICB9XG5cbiAgc2V0U2VjcmV0KHNlY3JldDogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5kYXRhLnNlY3JldCA9IHNlY3JldDtcbiAgICAgIHJlc29sdmUodGhpcy5fc3luYygpKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBuZXcgZWxlbWVudC5cbiAgICogQHBhcmFtIHsqfSBuYW1lXG4gICAqIEByZXR1cm4ge0Vycm9yfCp9XG4gICAqL1xuICBhZGQobmFtZTogc3RyaW5nLCBjYjogQ2FsbGJhY2spIHtcbiAgICBpZiAodGhpcy5kYXRhLmxpc3QuaW5kZXhPZihuYW1lKSA9PT0gLTEpIHtcbiAgICAgIHRoaXMuZGF0YS5saXN0LnB1c2gobmFtZSk7XG4gICAgICBjYih0aGlzLl9zeW5jKCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYihudWxsKTtcbiAgICB9XG4gIH1cblxuICBzZWFyY2gob25QYWNrYWdlOiBDYWxsYmFjaywgb25FbmQ6IENhbGxiYWNrLCB2YWxpZGF0ZU5hbWU6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IHN0b3JhZ2VzID0gdGhpcy5fZ2V0Q3VzdG9tUGFja2FnZUxvY2FsU3RvcmFnZXMoKTtcbiAgICB0aGlzLmxvZ2dlci50cmFjZShgbG9jYWwtc3RvcmFnZTogW3NlYXJjaF06ICR7SlNPTi5zdHJpbmdpZnkoc3RvcmFnZXMpfWApO1xuICAgIGNvbnN0IGJhc2UgPSBQYXRoLmRpcm5hbWUodGhpcy5jb25maWcuc2VsZl9wYXRoKTtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBjb25zdCBzdG9yYWdlS2V5cyA9IE9iamVjdC5rZXlzKHN0b3JhZ2VzKTtcbiAgICB0aGlzLmxvZ2dlci50cmFjZShgbG9jYWwtc3RvcmFnZTogW3NlYXJjaF0gYmFzZTogJHtiYXNlfSBrZXlzICR7c3RvcmFnZUtleXN9YCk7XG5cbiAgICBhc3luYy5lYWNoU2VyaWVzKFxuICAgICAgc3RvcmFnZUtleXMsXG4gICAgICBhc3luYyBmdW5jdGlvbihzdG9yYWdlLCBjYikge1xuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHN0b3JhZ2VLZXlzLmluZGV4T2Yoc3RvcmFnZSk7XG4gICAgICAgIGNvbnN0IGJhc2UyID0gUGF0aC5qb2luKHBvc2l0aW9uICE9PSAwID8gc3RvcmFnZUtleXNbMF0gOiAnJyk7XG4gICAgICAgIGNvbnN0IHN0b3JhZ2VQYXRoOiBzdHJpbmcgPSBQYXRoLnJlc29sdmUoYmFzZSwgYmFzZTIsIHN0b3JhZ2UpO1xuICAgICAgICBzZWxmLmxvZ2dlci50cmFjZSh7IHN0b3JhZ2VQYXRoLCBzdG9yYWdlIH0sICdsb2NhbC1zdG9yYWdlOiBbc2VhcmNoXSBzZWFyY2ggcGF0aDogQHtzdG9yYWdlUGF0aH0gOiBAe3N0b3JhZ2V9Jyk7XG4gICAgICAgIGZzLnJlYWRkaXIoc3RvcmFnZVBhdGgsIChlcnIsIGZpbGVzKSA9PiB7XG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgcmV0dXJuIGNiKGVycik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYXN5bmMuZWFjaFNlcmllcyhcbiAgICAgICAgICAgIGZpbGVzLFxuICAgICAgICAgICAgZnVuY3Rpb24oZmlsZSwgY2IpIHtcbiAgICAgICAgICAgICAgc2VsZi5sb2dnZXIudHJhY2UoeyBmaWxlIH0sICdsb2NhbC1zdG9yYWdlOiBbc2VhcmNoXSBzZWFyY2ggZmlsZSBwYXRoOiBAe2ZpbGV9Jyk7XG4gICAgICAgICAgICAgIGlmIChzdG9yYWdlS2V5cy5pbmNsdWRlcyhmaWxlICkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2IoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgaWYgKGZpbGUubWF0Y2goL15ALykpIHtcbiAgICAgICAgICAgICAgICAvLyBzY29wZWRcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlTG9jYXRpb24gPSBQYXRoLnJlc29sdmUoYmFzZSwgc3RvcmFnZSwgZmlsZSk7XG4gICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIudHJhY2UoeyBmaWxlTG9jYXRpb24gfSwgJ2xvY2FsLXN0b3JhZ2U6IFtzZWFyY2hdIHNlYXJjaCBzY29wZWQgZmlsZSBsb2NhdGlvbjogQHtmaWxlTG9jYXRpb259Jyk7XG4gICAgICAgICAgICAgICAgZnMucmVhZGRpcihmaWxlTG9jYXRpb24sIGZ1bmN0aW9uKGVyciwgZmlsZXMpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNiKGVycik7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGFzeW5jLmVhY2hTZXJpZXMoXG4gICAgICAgICAgICAgICAgICAgIGZpbGVzLCAoZmlsZTIsIGNiKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlTmFtZShmaWxlMikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhY2thZ2VQYXRoID0gUGF0aC5yZXNvbHZlKGJhc2UsIHN0b3JhZ2UsIGZpbGUsIGZpbGUyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZnMuc3RhdChwYWNrYWdlUGF0aCwgKGVyciwgc3RhdHMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF8uaXNOaWwoZXJyKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGAke2ZpbGV9LyR7ZmlsZTJ9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBwYWNrYWdlUGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lOiBzdGF0cy5tdGltZS5nZXRUaW1lKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25QYWNrYWdlKGl0ZW0sIGNiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYigpO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgY2JcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsaWRhdGVOYW1lKGZpbGUpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmFzZTIgPSBQYXRoLmpvaW4ocG9zaXRpb24gIT09IDAgPyBzdG9yYWdlS2V5c1swXSA6ICcnKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYWNrYWdlUGF0aCA9IFBhdGgucmVzb2x2ZShiYXNlLCBiYXNlMiwgc3RvcmFnZSwgZmlsZSk7XG4gICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIudHJhY2UoeyBwYWNrYWdlUGF0aCB9LCAnbG9jYWwtc3RvcmFnZTogW3NlYXJjaF0gc2VhcmNoIGZpbGUgbG9jYXRpb246IEB7cGFja2FnZVBhdGh9Jyk7XG4gICAgICAgICAgICAgICAgZnMuc3RhdChwYWNrYWdlUGF0aCwgKGVyciwgc3RhdHMpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChfLmlzTmlsKGVycikgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYihlcnIpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgb25QYWNrYWdlKFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgbmFtZTogZmlsZSxcbiAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBwYWNrYWdlUGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICB0aW1lOiBzZWxmLl9nZXRUaW1lKHN0YXRzLm10aW1lLmdldFRpbWUoKSwgc3RhdHMubXRpbWUpXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGNiXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNiKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjYlxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIG9uRW5kXG4gICAgKTtcbiAgfVxuXG4gIF9nZXRUaW1lKHRpbWU6IG51bWJlciwgbXRpbWU6IERhdGUpIHtcbiAgICByZXR1cm4gdGltZSA/IHRpbWUgOiBtdGltZTtcbiAgfVxuXG4gIF9nZXRDdXN0b21QYWNrYWdlTG9jYWxTdG9yYWdlcygpIHtcbiAgICBjb25zdCBzdG9yYWdlcyA9IHt9O1xuXG4gICAgLy8gYWRkIGN1c3RvbSBzdG9yYWdlIGlmIGV4aXN0XG4gICAgaWYgKHRoaXMuY29uZmlnLnN0b3JhZ2UpIHtcbiAgICAgIHN0b3JhZ2VzW3RoaXMuY29uZmlnLnN0b3JhZ2VdID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCB7IHBhY2thZ2VzIH0gPSB0aGlzLmNvbmZpZztcblxuICAgIGlmIChwYWNrYWdlcykge1xuICAgICAgY29uc3QgbGlzdFBhY2thZ2VzQ29uZiA9IE9iamVjdC5rZXlzKHBhY2thZ2VzIHx8IHt9KTtcblxuICAgICAgbGlzdFBhY2thZ2VzQ29uZi5tYXAocGtnID0+IHtcbiAgICAgICAgY29uc3Qgc3RvcmFnZSA9IHBhY2thZ2VzW3BrZ10uc3RvcmFnZTtcbiAgICAgICAgaWYgKHN0b3JhZ2UpIHtcbiAgICAgICAgICBzdG9yYWdlc1tzdG9yYWdlXSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RvcmFnZXM7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFuIGVsZW1lbnQgZnJvbSB0aGUgZGF0YWJhc2UuXG4gICAqIEBwYXJhbSB7Kn0gbmFtZVxuICAgKiBAcmV0dXJuIHtFcnJvcnwqfVxuICAgKi9cbiAgcmVtb3ZlKG5hbWU6IHN0cmluZywgY2I6IENhbGxiYWNrKSB7XG4gICAgdGhpcy5nZXQoKGVyciwgZGF0YSkgPT4ge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICBjYihuZXcgRXJyb3IoJ2Vycm9yIG9uIGdldCcpKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGtnTmFtZSA9IGRhdGEuaW5kZXhPZihuYW1lKTtcbiAgICAgIGlmIChwa2dOYW1lICE9PSAtMSkge1xuICAgICAgICB0aGlzLmRhdGEubGlzdC5zcGxpY2UocGtnTmFtZSwgMSk7XG4gICAgICB9XG5cbiAgICAgIGNiKHRoaXMuX3N5bmMoKSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFsbCBkYXRhYmFzZSBlbGVtZW50cy5cbiAgICogQHJldHVybiB7QXJyYXl9XG4gICAqL1xuICBnZXQoY2I6IENhbGxiYWNrKSB7XG4gICAgY2IobnVsbCwgdGhpcy5kYXRhLmxpc3QpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN5bmNyb25pemUge2NyZWF0ZX0gZGF0YWJhc2Ugd2hldGhlciBkb2VzIG5vdCBleGlzdC5cbiAgICogQHJldHVybiB7RXJyb3J8Kn1cbiAgICovXG4gIF9zeW5jKCkge1xuICAgIGlmICh0aGlzLmxvY2tlZCkge1xuICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0RhdGFiYXNlIGlzIGxvY2tlZCwgcGxlYXNlIGNoZWNrIGVycm9yIG1lc3NhZ2UgcHJpbnRlZCBkdXJpbmcgc3RhcnR1cCB0byBwcmV2ZW50IGRhdGEgbG9zcy4nKTtcbiAgICAgIHJldHVybiBuZXcgRXJyb3IoJ1ZlcmRhY2NpbyBkYXRhYmFzZSBpcyBsb2NrZWQsIHBsZWFzZSBjb250YWN0IHlvdXIgYWRtaW5pc3RyYXRvciB0byBjaGVja291dCBsb2dzIGR1cmluZyB2ZXJkYWNjaW8gc3RhcnR1cC4nKTtcbiAgICB9XG4gICAgLy8gVXNlcyBzeW5jIHRvIHByZXZlbnQgdWdseSByYWNlIGNvbmRpdGlvblxuICAgIHRyeSB7XG4gICAgICBta2RpcnAuc3luYyhQYXRoLmRpcm5hbWUodGhpcy5wYXRoKSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBwZXJoYXBzIGEgbG9nZ2VyIGluc3RhbmNlP1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGZzLndyaXRlRmlsZVN5bmModGhpcy5wYXRoLCBKU09OLnN0cmluZ2lmeSh0aGlzLmRhdGEpKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIGVycjtcbiAgICB9XG4gIH1cblxuICBnZXRQYWNrYWdlU3RvcmFnZShwYWNrYWdlTmFtZTogc3RyaW5nKTogSVBhY2thZ2VTdG9yYWdlIHtcbiAgICBjb25zdCBwYWNrYWdlQWNjZXNzID0gdGhpcy5jb25maWcuZ2V0TWF0Y2hlZFBhY2thZ2VzU3BlYyhwYWNrYWdlTmFtZSk7XG5cbiAgICBjb25zdCBwYWNrYWdlUGF0aDogc3RyaW5nID0gdGhpcy5fZ2V0TG9jYWxTdG9yYWdlUGF0aChwYWNrYWdlQWNjZXNzID8gcGFja2FnZUFjY2Vzcy5zdG9yYWdlOiAgdW5kZWZpbmVkKTtcblxuICAgIGlmIChfLmlzU3RyaW5nKHBhY2thZ2VQYXRoKSA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKHsgbmFtZTogcGFja2FnZU5hbWUgfSwgJ3RoaXMgcGFja2FnZSBoYXMgbm8gc3RvcmFnZSBkZWZpbmVkOiBAe25hbWV9Jyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGFja2FnZVN0b3JhZ2VQYXRoOiBzdHJpbmcgPSBQYXRoLmpvaW4oUGF0aC5yZXNvbHZlKFBhdGguZGlybmFtZSh0aGlzLmNvbmZpZy5zZWxmX3BhdGggfHwgJycpLCBwYWNrYWdlUGF0aCksIHBhY2thZ2VOYW1lKTtcblxuICAgIHJldHVybiBuZXcgTG9jYWxEcml2ZXIocGFja2FnZVN0b3JhZ2VQYXRoLCB0aGlzLmxvZ2dlcik7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZ5IHRoZSByaWdodCBsb2NhbCBzdG9yYWdlIGxvY2F0aW9uLlxuICAgKiBAcGFyYW0ge1N0cmluZ30gcGF0aFxuICAgKiBAcmV0dXJuIHtTdHJpbmd9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2V0TG9jYWxTdG9yYWdlUGF0aChzdG9yYWdlOiBzdHJpbmcgfCB2b2lkKTogc3RyaW5nIHtcbiAgICBjb25zdCBnbG9iYWxDb25maWdTdG9yYWdlID0gdGhpcy5jb25maWcgPyB0aGlzLmNvbmZpZy5zdG9yYWdlIDogdW5kZWZpbmVkO1xuICAgIGlmIChfLmlzTmlsKGdsb2JhbENvbmZpZ1N0b3JhZ2UpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2dsb2JhbCBzdG9yYWdlIGlzIHJlcXVpcmVkIGZvciB0aGlzIHBsdWdpbicpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoXy5pc05pbChzdG9yYWdlKSA9PT0gZmFsc2UgJiYgXy5pc1N0cmluZyhzdG9yYWdlKSkge1xuICAgICAgICByZXR1cm4gUGF0aC5qb2luKGdsb2JhbENvbmZpZ1N0b3JhZ2UgYXMgc3RyaW5nICwgc3RvcmFnZSBhcyBzdHJpbmcpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZ2xvYmFsQ29uZmlnU3RvcmFnZSBhcyBzdHJpbmc7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIHRoZSBsb2NhbCBkYXRhYmFzZSBwYXRoLlxuICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnXG4gICAqIEByZXR1cm4ge3N0cmluZ3xTdHJpbmd8Kn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9idWlsZFN0b3JhZ2VQYXRoKGNvbmZpZzogQ29uZmlnKSB7XG4gICAgY29uc3QgZGJHZW5QYXRoID0gZnVuY3Rpb24oZGJOYW1lOiBzdHJpbmcpIHtcbiAgICAgIHJldHVybiBQYXRoLmpvaW4oUGF0aC5yZXNvbHZlKFBhdGguZGlybmFtZShjb25maWcuc2VsZl9wYXRoIHx8ICcnKSwgY29uZmlnLnN0b3JhZ2UgYXMgc3RyaW5nLCBkYk5hbWUpKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2lub3BpYWRiUGF0aDogc3RyaW5nID0gZGJHZW5QYXRoKERFUFJFQ0FURURfREJfTkFNRSk7XG4gICAgaWYgKGZzLmV4aXN0c1N5bmMoc2lub3BpYWRiUGF0aCkpIHtcbiAgICAgIHJldHVybiBzaW5vcGlhZGJQYXRoO1xuICAgIH1cblxuICAgIHJldHVybiBkYkdlblBhdGgoREJfTkFNRSk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggbG9jYWwgcGFja2FnZXMuXG4gICAqIEBwcml2YXRlXG4gICAqIEByZXR1cm4ge09iamVjdH1cbiAgICovXG4gIF9mZXRjaExvY2FsUGFja2FnZXMoKTogTG9jYWxTdG9yYWdlIHtcbiAgICBjb25zdCBsaXN0OiBTdG9yYWdlTGlzdCA9IFtdO1xuICAgIGNvbnN0IGVtcHR5RGF0YWJhc2UgPSB7IGxpc3QsIHNlY3JldDogJycgfTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBkYiA9IGxvYWRQcml2YXRlUGFja2FnZXModGhpcy5wYXRoLCB0aGlzLmxvZ2dlcik7XG5cbiAgICAgIHJldHVybiBkYjtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIHJlYWRGaWxlU3luYyBpcyBwbGF0Zm9ybSBzcGVjaWZpYywgbWFjT1MsIExpbnV4IGFuZCBXaW5kb3dzIHRocm93biBhbiBlcnJvclxuICAgICAgLy8gT25seSByZWNyZWF0ZSBpZiBmaWxlIG5vdCBmb3VuZCB0byBwcmV2ZW50IGRhdGEgbG9zc1xuICAgICAgaWYgKGVyci5jb2RlICE9PSBub1N1Y2hGaWxlKSB7XG4gICAgICAgIHRoaXMubG9ja2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byByZWFkIHBhY2thZ2UgZGF0YWJhc2UgZmlsZSwgcGxlYXNlIGNoZWNrIHRoZSBlcnJvciBwcmludGVkIGJlbG93OlxcbicsIGBGaWxlIFBhdGg6ICR7dGhpcy5wYXRofVxcblxcbiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZW1wdHlEYXRhYmFzZTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTG9jYWxEYXRhYmFzZTtcbiJdfQ==

@@ -13,4 +13,7 @@ import { HttpError } from 'http-errors';

};
export default class LocalFS implements ILocalPackageManager {
export declare type ILocalFSPackageManager = ILocalPackageManager & {
path: string;
};
export default class LocalFS implements ILocalFSPackageManager {
path: string;
logger: Logger;

@@ -17,0 +20,0 @@ constructor(path: string, logger: Logger);

@@ -362,2 +362,2 @@ "use strict";

exports.default = LocalFS;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9sb2NhbC1mcy50cyJdLCJuYW1lcyI6WyJmaWxlRXhpc3QiLCJub1N1Y2hGaWxlIiwicmVzb3VyY2VOb3RBdmFpbGFibGUiLCJwa2dGaWxlTmFtZSIsImZTRXJyb3IiLCJtZXNzYWdlIiwiY29kZSIsImVyciIsIkVycm9yQ29kZSIsImdldDUwMyIsImdldDQwNCIsInRlbXBGaWxlIiwic3RyIiwiU3RyaW5nIiwiTWF0aCIsInJhbmRvbSIsInN1YnN0ciIsInJlbmFtZVRtcCIsInNyYyIsImRzdCIsIl9jYiIsImNiIiwiZnMiLCJ1bmxpbmsiLCJwcm9jZXNzIiwicGxhdGZvcm0iLCJyZW5hbWUiLCJ0bXAiLCJMb2NhbEZTIiwiY29uc3RydWN0b3IiLCJwYXRoIiwibG9nZ2VyIiwidXBkYXRlUGFja2FnZSIsIm5hbWUiLCJ1cGRhdGVIYW5kbGVyIiwib25Xcml0ZSIsInRyYW5zZm9ybVBhY2thZ2UiLCJvbkVuZCIsIl9sb2NrQW5kUmVhZEpTT04iLCJqc29uIiwibG9ja2VkIiwic2VsZiIsInVuTG9ja0NhbGxiYWNrIiwibG9ja0Vycm9yIiwiX2FyZ3MiLCJhcmd1bWVudHMiLCJfdW5sb2NrSlNPTiIsImFwcGx5IiwiXyIsImlzTmlsIiwiZGVsZXRlUGFja2FnZSIsImZpbGVOYW1lIiwiY2FsbGJhY2siLCJfZ2V0U3RvcmFnZSIsInJlbW92ZVBhY2thZ2UiLCJybWRpciIsImNyZWF0ZVBhY2thZ2UiLCJ2YWx1ZSIsIl9jcmVhdGVGaWxlIiwiX2NvbnZlcnRUb1N0cmluZyIsInNhdmVQYWNrYWdlIiwiX3dyaXRlRmlsZSIsInJlYWRQYWNrYWdlIiwiX3JlYWRTdG9yYWdlRmlsZSIsInRoZW4iLCJyZXMiLCJkYXRhIiwiSlNPTiIsInBhcnNlIiwidG9TdHJpbmciLCJ3cml0ZVRhcmJhbGwiLCJ1cGxvYWRTdHJlYW0iLCJVcGxvYWRUYXJiYWxsIiwiX2VuZGVkIiwib24iLCJwYXRoTmFtZSIsImV4aXN0cyIsImVtaXQiLCJ0ZW1wb3JhbE5hbWUiLCJqb2luIiwicmVwbGFjZSIsImZpbGUiLCJjcmVhdGVXcml0ZVN0cmVhbSIsInJlbW92ZVRlbXBGaWxlIiwib3BlbmVkIiwicGlwZSIsImRvbmUiLCJvbmVuZCIsImVuZCIsImFib3J0IiwicmVhZFRhcmJhbGwiLCJyZWFkVGFyYmFsbFN0cmVhbSIsIlJlYWRUYXJiYWxsIiwicmVhZFN0cmVhbSIsImNyZWF0ZVJlYWRTdHJlYW0iLCJmZCIsImZzdGF0Iiwic3RhdHMiLCJzaXplIiwiY2xvc2UiLCJjb250ZW50cyIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwicmVhZEZpbGUiLCJzdHJpbmdpZnkiLCJzdG9yYWdlUGF0aCIsImRlc3QiLCJjcmVhdGVUZW1wRmlsZSIsInRlbXBGaWxlUGF0aCIsIndyaXRlRmlsZSIsImRpcm5hbWUiLCJsb2NrIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBRUE7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7Ozs7OztBQUdPLE1BQU1BLFNBQWlCLEdBQUcsU0FBMUI7O0FBQ0EsTUFBTUMsVUFBa0IsR0FBRyxRQUEzQjs7QUFDQSxNQUFNQyxvQkFBNEIsR0FBRyxRQUFyQzs7QUFDQSxNQUFNQyxXQUFXLEdBQUcsY0FBcEI7OztBQUVBLE1BQU1DLE9BQU8sR0FBRyxVQUFTQyxPQUFULEVBQTBCQyxJQUFZLEdBQUcsR0FBekMsRUFBeUQ7QUFDOUUsUUFBTUMsR0FBYyxHQUFHLHlCQUFZRCxJQUFaLEVBQWtCRCxPQUFsQixDQUF2QixDQUQ4RSxDQUU5RTs7QUFDQUUsRUFBQUEsR0FBRyxDQUFDRCxJQUFKLEdBQVdELE9BQVg7QUFFQSxTQUFPRSxHQUFQO0FBQ0QsQ0FOTTs7O0FBUUEsTUFBTUMsU0FBUyxHQUFHO0FBQ3ZCQyxFQUFBQSxNQUFNLEVBQUUsTUFBTTtBQUNaLFdBQU9MLE9BQU8sQ0FBQyxrQ0FBRCxFQUFxQyxHQUFyQyxDQUFkO0FBQ0QsR0FIc0I7QUFJdkJNLEVBQUFBLE1BQU0sRUFBRSxNQUFNO0FBQ1osV0FBT04sT0FBTyxDQUFDLDJCQUFE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Q0Q7O0FBQ0RxRyxVQUFBQSxjQUFjLENBQUN2RixFQUFELENBQWQ7QUFDRCxTQUxEO0FBTUQsT0FQRCxNQU9PO0FBQ0xBLFFBQUFBLEVBQUUsQ0FBQ2QsR0FBRCxDQUFGO0FBQ0Q7QUFDRixLQVhhLENBQWQ7QUFZRDs7QUFFRCtCLEVBQUFBLGdCQUFnQixDQUFDTCxJQUFELEVBQWVaLEVBQWYsRUFBNkI7QUFDM0MsVUFBTThCLFFBQWdCLEdBQUcsS0FBS0UsV0FBTCxDQUFpQnBCLElBQWpCLENBQXpCOztBQUVBLCtCQUNFa0IsUUFERixFQUVFO0FBQ0U2RCxNQUFBQSxJQUFJLEVBQUUsSUFEUjtBQUVFNUMsTUFBQUEsS0FBSyxFQUFFO0FBRlQsS0FGRixFQU1FLFVBQVM3RCxHQUFULEVBQWMwRCxHQUFkLEVBQW1CO0FBQ2pCLFVBQUkxRCxHQUFKLEVBQVM7QUFDUCxlQUFPYyxFQUFFLENBQUNkLEdBQUQsQ0FBVDtBQUNEOztBQUNELGFBQU9jLEVBQUUsQ0FBQyxJQUFELEVBQU80QyxHQUFQLENBQVQ7QUFDRCxLQVhIO0FBYUQ7O0FBRURuQixFQUFBQSxXQUFXLENBQUNiLElBQUQsRUFBZVosRUFBZixFQUE2QjtBQUN0QyxpQ0FBVyxLQUFLZ0MsV0FBTCxDQUFpQnBCLElBQWpCLENBQVgsRUFBbUNaLEVBQW5DO0FBQ0Q7O0FBaFIwRCIsInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5cbmltcG9ydCBmcyBmcm9tICdmcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcblxuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBta2RpcnAgZnJvbSAnbWtkaXJwJztcbmltcG9ydCBjcmVhdGVFcnJvciBmcm9tICdodHRwLWVycm9ycyc7XG5pbXBvcnQgeyBIdHRwRXJyb3IgfSBmcm9tICdodHRwLWVycm9ycyc7XG5pbXBvcnQgeyBVcGxvYWRUYXJiYWxsLCBSZWFkVGFyYmFsbCB9IGZyb20gJ0B2ZXJkYWNjaW8vc3RyZWFtcyc7XG5pbXBvcnQgeyB1bmxvY2tGaWxlLCByZWFkRmlsZSB9IGZyb20gJ0B2ZXJkYWNjaW8vZmlsZS1sb2NraW5nJztcbmltcG9ydCB7IENhbGxiYWNrLCBMb2dnZXIsIFBhY2thZ2UsIElMb2NhbFBhY2thZ2VNYW5hZ2VyLCBDYWxsYmFja0Vycm9yLCBJVXBsb2FkVGFyYmFsbCB9IGZyb20gJ0B2ZXJkYWNjaW8vdHlwZXMnO1xuXG5leHBvcnQgY29uc3QgZmlsZUV4aXN0OiBzdHJpbmcgPSAnRUVYSVNUUyc7XG5leHBvcnQgY29uc3Qgbm9TdWNoRmlsZTogc3RyaW5nID0gJ0VOT0VOVCc7XG5leHBvcnQgY29uc3QgcmVzb3VyY2VOb3RBdmFpbGFibGU6IHN0cmluZyA9ICdFQUdBSU4nO1xuZXhwb3J0IGNvbnN0IHBrZ0ZpbGVOYW1lID0gJ3BhY2thZ2UuanNvbic7XG5cbmV4cG9ydCBjb25zdCBmU0Vycm9yID0gZnVuY3Rpb24obWVzc2FnZTogc3RyaW5nLCBjb2RlOiBudW1iZXIgPSA0MDkpOiBIdHRwRXJyb3Ige1xuICBjb25zdCBlcnI6IEh0dHBFcnJvciA9IGNyZWF0ZUVycm9yKGNvZGUsIG1lc3NhZ2UpO1xuICAvLyAkRmxvd0ZpeE1lXG4gIGVyci5jb2RlID0gbWVzc2FnZTtcblxuICByZXR1cm4gZXJyO1xufTtcblxuZXhwb3J0IGNvbnN0IEVycm9yQ29kZSA9IHtcbiAgZ2V0NTAzOiAoKSA9PiB7XG4gICAgcmV0dXJuIGZTRXJyb3IoJ3Jlc291cmNlIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlJywgNTAwKTtcbiAgfSxcbiAgZ2V0NDA0OiAoKSA9PiB7XG4gICAgcmV0dXJuIGZTRXJyb3IoJ25vIHN1Y2ggcGFja2FnZSBhdmFpbGFibGUnLCA0MDQpO1xuICB9XG59O1xuXG5jb25zdCB0ZW1wRmlsZSA9IGZ1bmN0aW9uKHN0cikge1xuICByZXR1cm4gYCR7c3RyfS50bXAke1N0cmluZyhNYXRoLnJhbmRvbSgpKS5zdWJzdHIoMil9YDtcbn07XG5cbmNvbnN0IHJlbmFtZVRtcCA9IGZ1bmN0aW9uKHNyYywgZHN0LCBfY2IpIHtcbiAgY29uc3QgY2IgPSBlcnIgPT4ge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIGZzLnVubGluayhzcmMsIGZ1bmN0aW9uKCkge30pO1xuICAgIH1cbiAgICBfY2IoZXJyKTtcbiAgfTtcblxuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSAhPT0gJ3dpbjMyJykge1xuICAgIHJldHVybiBmcy5yZW5hbWUoc3JjLCBkc3QsIGNiKTtcbiAgfVxuXG4gIC8vIHdpbmRvd3MgY2FuJ3QgcmVtb3ZlIG9wZW5lZCBmaWxlLFxuICAvLyBidXQgaXQgc2VlbSB0byBiZSBhYmxlIHRvIHJlbmFtZSBpdFxuICBjb25zdCB0bXAgPSB0ZW1wRmlsZShkc3QpO1xuICBmcy5yZW5hbWUoZHN0LCB0bXAsIGZ1bmN0aW9uKGVycikge1xuICAgIGZzLnJlbmFtZShzcmMsIGRzdCwgY2IpO1xuICAgIGlmICghZXJyKSB7XG4gICAgICBmcy51bmxpbmsodG1wLCAoKSA9PiB7fSk7XG4gICAgfVxuICB9KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvY2FsRlMgaW1wbGVtZW50cyBJTG9jYWxQYWNrYWdlTWFuYWdlciB7XG4gIHBhdGg6IHN0cmluZztcbiAgbG9nZ2VyOiBMb2dnZXI7XG5cbiAgY29uc3RydWN0b3IocGF0aDogc3RyaW5nLCBsb2dnZXI6IExvZ2dlcikge1xuICAgIHRoaXMucGF0aCA9IHBhdGg7XG4gICAgdGhpcy5sb2dnZXIgPSBsb2dnZXI7XG4gIH1cblxuICAvKipcbiAgICAqICBUaGlzIGZ1bmN0aW9uIGFsbG93cyB0byB1cGRhdGUgdGhlIHBhY2thZ2UgdGhyZWFkLXNhZmVseVxuICAgICAgQWxnb3JpdGhtOlxuICAgICAgMS4gbG9jayBwYWNrYWdlLmpzb24gZm9yIHdyaXRpbmdcbiAgICAgIDIuIHJlYWQgcGFja2FnZS5qc29uXG4gICAgICAzLiB1cGRhdGVGbihwa2csIGNiKSwgYW5kIHdhaXQgZm9yIGNiXG4gICAgICA0LiB3cml0ZSBwYWNrYWdlLmpzb24udG1wXG4gICAgICA1LiBtb3ZlIHBhY2thZ2UuanNvbi50bXAgcGFja2FnZS5qc29uXG4gICAgICA2LiBjYWxsYmFjayhlcnI/KVxuICAgICogQHBhcmFtIHsqfSBuYW1lXG4gICAgKiBAcGFyYW0geyp9IHVwZGF0ZUhhbmRsZXJcbiAgICAqIEBwYXJhbSB7Kn0gb25Xcml0ZVxuICAgICogQHBhcmFtIHsqfSB0cmFuc2Zvcm1QYWNrYWdlXG4gICAgKiBAcGFyYW0geyp9IG9uRW5kXG4gICAgKi9cbiAgdXBkYXRlUGFja2FnZShuYW1lOiBzdHJpbmcsIHVwZGF0ZUhhbmRsZXI6IENhbGxiYWNrLCBvbldyaXRlOiBDYWxsYmFjaywgdHJhbnNmb3JtUGFja2FnZTogRnVuY3Rpb24sIG9uRW5kOiBDYWxsYmFjaykge1xuICAgIHRoaXMuX2xvY2tBbmRSZWFkSlNPTihwa2dGaWxlTmFtZSwgKGVyciwganNvbikgPT4ge1xuICAgICAgbGV0IGxvY2tlZCA9IGZhbHNlO1xuICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAvLyBjYWxsYmFjayB0aGF0IGNsZWFucyB1cCBsb2NrIGZpcnN0XG4gICAgICBjb25zdCB1bkxvY2tDYWxsYmFjayA9IGZ1bmN0aW9uKGxvY2tFcnJvcjogRXJyb3IpIHtcbiAgICAgICAgY29uc3QgX2FyZ3MgPSBhcmd1bWVudHM7XG5cbiAgICAgICAgaWYgKGxvY2tlZCkge1xuICAgICAgICAgIHNlbGYuX3VubG9ja0pTT04ocGtnRmlsZU5hbWUsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgLy8gaWdub3JlIGFueSBlcnJvciBmcm9tIHRoZSB1bmxvY2tcbiAgICAgICAgICAgIG9uRW5kLmFwcGx5KGxvY2tFcnJvciwgX2FyZ3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9uRW5kKC4uLl9hcmdzKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgaWYgKCFlcnIpIHtcbiAgICAgICAgbG9ja2VkID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKF8uaXNOaWwoZXJyKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgaWYgKGVyci5jb2RlID09PSByZXNvdXJjZU5vdEF2YWlsYWJsZSkge1xuICAgICAgICAgIHJldHVybiB1bkxvY2tDYWxsYmFjayhFcnJvckNvZGUuZ2V0NTAzKCkpO1xuICAgICAgICB9IGVsc2UgaWYgKGVyci5jb2RlID09PSBub1N1Y2hGaWxlKSB7XG4gICAgICAgICAgcmV0dXJuIHVuTG9ja0NhbGxiYWNrKEVycm9yQ29kZS5nZXQ0MDQoKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHVuTG9ja0NhbGxiYWNrKGVycik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdXBkYXRlSGFuZGxlcihqc29uLCBlcnIgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgcmV0dXJuIHVuTG9ja0NhbGxiYWNrKGVycik7XG4gICAgICAgIH1cbiAgICAgICAgb25Xcml0ZShuYW1lLCB0cmFuc2Zvcm1QYWNrYWdlKGpzb24pLCB1bkxvY2tDYWxsYmFjayk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGRlbGV0ZVBhY2thZ2UoZmlsZU5hbWU6IHN0cmluZywgY2FsbGJhY2s6IENhbGxiYWNrRXJyb3IpIHtcbiAgICByZXR1cm4gZnMudW5saW5rKHRoaXMuX2dldFN0b3JhZ2UoZmlsZU5hbWUpLCBjYWxsYmFjayk7XG4gIH1cblxuICByZW1vdmVQYWNrYWdlKGNhbGxiYWNrOiBDYWxsYmFja0Vycm9yKTogdm9pZCB7XG4gICAgZnMucm1kaXIodGhpcy5fZ2V0U3RvcmFnZSgnLicpLCBjYWxsYmFjayk7XG4gIH1cblxuICBjcmVhdGVQYWNrYWdlKG5hbWU6IHN0cmluZywgdmFsdWU6IFBhY2thZ2UsIGNiOiBGdW5jdGlvbikge1xuICAgIHRoaXMuX2NyZWF0ZUZpbGUodGhpcy5fZ2V0U3RvcmFnZShwa2dGaWxlTmFtZSksIHRoaXMuX2NvbnZlcnRUb1N0cmluZyh2YWx1ZSksIGNiKTtcbiAgfVxuXG4gIHNhdmVQYWNrYWdlKG5hbWU6IHN0cmluZywgdmFsdWU6IFBhY2thZ2UsIGNiOiBGdW5jdGlvbikge1xuICAgIHRoaXMuX3dyaXRlRmlsZSh0aGlzLl9nZXRTdG9yYWdlKHBrZ0ZpbGVOYW1lKSwgdGhpcy5fY29udmVydFRvU3RyaW5nKHZhbHVlKSwgY2IpO1xuICB9XG5cbiAgcmVhZFBhY2thZ2UobmFtZTogc3RyaW5nLCBjYjogRnVuY3Rpb24pIHtcbiAgICB0aGlzLl9yZWFkU3RvcmFnZUZpbGUodGhpcy5fZ2V0U3RvcmFnZShwa2dGaWxlTmFtZSkpLnRoZW4oXG4gICAgICBmdW5jdGlvbihyZXMpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBkYXRhOiBhbnkgPSBKU09OLnBhcnNlKHJlcy50b1N0cmluZygndXRmOCcpKTtcblxuICAgICAgICAgIGNiKG51bGwsIGRhdGEpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBjYihlcnIpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgIHJldHVybiBjYihlcnIpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICB3cml0ZVRhcmJhbGwobmFtZTogc3RyaW5nKTogSVVwbG9hZFRhcmJhbGwge1xuICAgIGNvbnN0IHVwbG9hZFN0cmVhbSA9IG5ldyBVcGxvYWRUYXJiYWxsKHt9KTtcblxuICAgIGxldCBfZW5kZWQgPSAwO1xuICAgIHVwbG9hZFN0cmVhbS5vbignZW5kJywgZnVuY3Rpb24oKSB7XG4gICAgICBfZW5kZWQgPSAxO1xuICAgIH0pO1xuXG4gICAgY29uc3QgcGF0aE5hbWU6IHN0cmluZyA9IHRoaXMuX2dldFN0b3JhZ2UobmFtZSk7XG5cbiAgICBmcy5leGlzdHMocGF0aE5hbWUsIGV4aXN0cyA9PiB7XG4gICAgICBpZiAoZXhpc3RzKSB7XG4gICAgICAgIHVwbG9hZFN0cmVhbS5lbWl0KCdlcnJvcicsIGZTRXJyb3IoZmlsZUV4aXN0KSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB0ZW1wb3JhbE5hbWUgPSBwYXRoLmpvaW4odGhpcy5wYXRoLCBgJHtuYW1lfS50bXAtJHtTdHJpbmcoTWF0aC5yYW5kb20oKSkucmVwbGFjZSgvXjBcXC4vLCAnJyl9YCk7XG4gICAgICAgIGNvbnN0IGZpbGUgPSBmcy5jcmVhdGVXcml0ZVN0cmVhbSh0ZW1wb3JhbE5hbWUpO1xuICAgICAgICBjb25zdCByZW1vdmVUZW1wRmlsZSA9ICgpID0+IGZzLnVubGluayh0ZW1wb3JhbE5hbWUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCBvcGVuZWQgPSBmYWxzZTtcbiAgICAgICAgdXBsb2FkU3RyZWFtLnBpcGUoZmlsZSk7XG5cbiAgICAgICAgdXBsb2FkU3RyZWFtLmRvbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCBvbmVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBmaWxlLm9uKCdjbG9zZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVuYW1lVG1wKHRlbXBvcmFsTmFtZSwgcGF0aE5hbWUsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGxvYWRTdHJlYW0uZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGxvYWRTdHJlYW0uZW1pdCgnc3VjY2VzcycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBmaWxlLmVuZCgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChfZW5kZWQpIHtcbiAgICAgICAgICAgICAgICBvbmVuZCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB1cGxvYWRTdHJlYW0ub24oJ2VuZCcsIG9uZW5kKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB1cGxvYWRTdHJlYW0uYWJvcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAob3BlbmVkKSB7XG4gICAgICAgICAgICAgICAgb3BlbmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgZmlsZS5vbignY2xvc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZVRlbXBGaWxlKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBmaWxlIGRvZXMgbm90IHJlY2lldmUgYW55IGJ5dGUgbmV2ZXIgaXMgb3BlbmVkIGFuZCBoYXMgdG8gYmUgcmVtb3ZlZCBhbnl3YXkuXG4gICAgICAgICAgICAgICAgcmVtb3ZlVGVtcEZpbGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbGUuZW5kKCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgZmlsZS5vbignb3BlbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIG9wZW5lZCA9IHRydWU7XG4gICAgICAgICAgICAvLyByZS1lbWl0dGluZyBvcGVuIGJlY2F1c2UgaXQncyBoYW5kbGVkIGluIHN0b3JhZ2UuanNcbiAgICAgICAgICAgIHVwbG9hZFN0cmVhbS5lbWl0KCdvcGVuJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZpbGUub24oJ2Vycm9yJywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgdXBsb2FkU3RyZWFtLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdXBsb2FkU3RyZWFtO1xuICB9XG5cbiAgcmVhZFRhcmJhbGwobmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgcGF0aE5hbWU6IHN0cmluZyA9IHRoaXMuX2dldFN0b3JhZ2UobmFtZSk7XG4gICAgY29uc3QgcmVhZFRhcmJhbGxTdHJlYW0gPSBuZXcgUmVhZFRhcmJhbGwoe30pO1xuXG4gICAgY29uc3QgcmVhZFN0cmVhbSA9IGZzLmNyZWF0ZVJlYWRTdHJlYW0ocGF0aE5hbWUpO1xuXG4gICAgcmVhZFN0cmVhbS5vbignZXJyb3InLCBmdW5jdGlvbihlcnIpIHtcbiAgICAgIHJlYWRUYXJiYWxsU3RyZWFtLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgICB9KTtcblxuICAgIHJlYWRTdHJlYW0ub24oJ29wZW4nLCBmdW5jdGlvbihmZCkge1xuICAgICAgZnMuZnN0YXQoZmQsIGZ1bmN0aW9uKGVyciwgc3RhdHMpIHtcbiAgICAgICAgaWYgKF8uaXNOaWwoZXJyKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICByZXR1cm4gcmVhZFRhcmJhbGxTdHJlYW0uZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgICAgICB9XG4gICAgICAgIHJlYWRUYXJiYWxsU3RyZWFtLmVtaXQoJ2NvbnRlbnQtbGVuZ3RoJywgc3RhdHMuc2l6ZSk7XG4gICAgICAgIHJlYWRUYXJiYWxsU3RyZWFtLmVtaXQoJ29wZW4nKTtcbiAgICAgICAgcmVhZFN0cmVhbS5waXBlKHJlYWRUYXJiYWxsU3RyZWFtKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcmVhZFRhcmJhbGxTdHJlYW0uYWJvcnQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJlYWRTdHJlYW0uY2xvc2UoKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHJlYWRUYXJiYWxsU3RyZWFtO1xuICB9XG5cbiAgX2NyZWF0ZUZpbGUobmFtZTogc3RyaW5nLCBjb250ZW50czogYW55LCBjYWxsYmFjazogRnVuY3Rpb24pIHtcbiAgICBmcy5leGlzdHMobmFtZSwgZXhpc3RzID0+IHtcbiAgICAgIGlmIChleGlzdHMpIHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGZTRXJyb3IoZmlsZUV4aXN0KSk7XG4gICAgICB9XG4gICAgICB0aGlzLl93cml0ZUZpbGUobmFtZSwgY29udGVudHMsIGNhbGxiYWNrKTtcbiAgICB9KTtcbiAgfVxuXG4gIF9yZWFkU3RvcmFnZUZpbGUobmFtZTogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgZnMucmVhZEZpbGUobmFtZSwgKGVyciwgZGF0YSkgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBfY29udmVydFRvU3RyaW5nKHZhbHVlOiBQYWNrYWdlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUsIG51bGwsICdcXHQnKTtcbiAgfVxuXG4gIF9nZXRTdG9yYWdlKGZpbGVOYW1lOiBzdHJpbmcgPSAnJykge1xuICAgIGNvbnN0IHN0b3JhZ2VQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4odGhpcy5wYXRoLCBmaWxlTmFtZSk7XG5cbiAgICByZXR1cm4gc3RvcmFnZVBhdGg7XG4gIH1cblxuICBfd3JpdGVGaWxlKGRlc3Q6IHN0cmluZywgZGF0YTogc3RyaW5nLCBjYjogRnVuY3Rpb24pIHtcbiAgICBjb25zdCBjcmVhdGVUZW1wRmlsZSA9IGNiID0+IHtcbiAgICAgIGNvbnN0IHRlbXBGaWxlUGF0aCA9IHRlbXBGaWxlKGRlc3QpO1xuXG4gICAgICBmcy53cml0ZUZpbGUodGVtcEZpbGVQYXRoLCBkYXRhLCBlcnIgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgcmV0dXJuIGNiKGVycik7XG4gICAgICAgIH1cbiAgICAgICAgcmVuYW1lVG1wKHRlbXBGaWxlUGF0aCwgZGVzdCwgY2IpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNyZWF0ZVRlbXBGaWxlKGVyciA9PiB7XG4gICAgICBpZiAoZXJyICYmIGVyci5jb2RlID09PSBub1N1Y2hGaWxlKSB7XG4gICAgICAgIG1rZGlycChwYXRoLmRpcm5hbWUoZGVzdCksIGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIHJldHVybiBjYihlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjcmVhdGVUZW1wRmlsZShjYik7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2IoZXJyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIF9sb2NrQW5kUmVhZEpTT04obmFtZTogc3RyaW5nLCBjYjogRnVuY3Rpb24pIHtcbiAgICBjb25zdCBmaWxlTmFtZTogc3RyaW5nID0gdGhpcy5fZ2V0U3RvcmFnZShuYW1lKTtcblxuICAgIHJlYWRGaWxlKFxuICAgICAgZmlsZU5hbWUsXG4gICAgICB7XG4gICAgICAgIGxvY2s6IHRydWUsXG4gICAgICAgIHBhcnNlOiB0cnVlXG4gICAgICB9LFxuICAgICAgZnVuY3Rpb24oZXJyLCByZXMpIHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJldHVybiBjYihlcnIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYihudWxsLCByZXMpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBfdW5sb2NrSlNPTihuYW1lOiBzdHJpbmcsIGNiOiBGdW5jdGlvbikge1xuICAgIHVubG9ja0ZpbGUodGhpcy5fZ2V0U3RvcmFnZShuYW1lKSwgY2IpO1xuICB9XG59XG4iXX0=
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9sb2NhbC1mcy50cyJdLCJuYW1lcyI6WyJmaWxlRXhpc3QiLCJub1N1Y2hGaWxlIiwicmVzb3VyY2VOb3RBdmFpbGFibGUiLCJwa2dGaWxlTmFtZSIsImZTRXJyb3IiLCJtZXNzYWdlIiwiY29kZSIsImVyciIsIkVycm9yQ29kZSIsImdldDUwMyIsImdldDQwNCIsInRlbXBGaWxlIiwic3RyIiwiU3RyaW5nIiwiTWF0aCIsInJhbmRvbSIsInN1YnN0ciIsInJlbmFtZVRtcCIsInNyYyIsImRzdCIsIl9jYiIsImNiIiwiZnMiLCJ1bmxpbmsiLCJwcm9jZXNzIiwicGxhdGZvcm0iLCJyZW5hbWUiLCJ0bXAiLCJMb2NhbEZTIiwiY29uc3RydWN0b3IiLCJwYXRoIiwibG9nZ2VyIiwidXBkYXRlUGFja2FnZSIsIm5hbWUiLCJ1cGRhdGVIYW5kbGVyIiwib25Xcml0ZSIsInRyYW5zZm9ybVBhY2thZ2UiLCJvbkVuZCIsIl9sb2NrQW5kUmVhZEpTT04iLCJqc29uIiwibG9ja2VkIiwic2VsZiIsInVuTG9ja0NhbGxiYWNrIiwibG9ja0Vycm9yIiwiX2FyZ3MiLCJhcmd1bWVudHMiLCJfdW5sb2NrSlNPTiIsImFwcGx5IiwiXyIsImlzTmlsIiwiZGVsZXRlUGFja2FnZSIsImZpbGVOYW1lIiwiY2FsbGJhY2siLCJfZ2V0U3RvcmFnZSIsInJlbW92ZVBhY2thZ2UiLCJybWRpciIsImNyZWF0ZVBhY2thZ2UiLCJ2YWx1ZSIsIl9jcmVhdGVGaWxlIiwiX2NvbnZlcnRUb1N0cmluZyIsInNhdmVQYWNrYWdlIiwiX3dyaXRlRmlsZSIsInJlYWRQYWNrYWdlIiwiX3JlYWRTdG9yYWdlRmlsZSIsInRoZW4iLCJyZXMiLCJkYXRhIiwiSlNPTiIsInBhcnNlIiwidG9TdHJpbmciLCJ3cml0ZVRhcmJhbGwiLCJ1cGxvYWRTdHJlYW0iLCJVcGxvYWRUYXJiYWxsIiwiX2VuZGVkIiwib24iLCJwYXRoTmFtZSIsImV4aXN0cyIsImVtaXQiLCJ0ZW1wb3JhbE5hbWUiLCJqb2luIiwicmVwbGFjZSIsImZpbGUiLCJjcmVhdGVXcml0ZVN0cmVhbSIsInJlbW92ZVRlbXBGaWxlIiwib3BlbmVkIiwicGlwZSIsImRvbmUiLCJvbmVuZCIsImVuZCIsImFib3J0IiwicmVhZFRhcmJhbGwiLCJyZWFkVGFyYmFsbFN0cmVhbSIsIlJlYWRUYXJiYWxsIiwicmVhZFN0cmVhbSIsImNyZWF0ZVJlYWRTdHJlYW0iLCJmZCIsImZzdGF0Iiwic3RhdHMiLCJzaXplIiwiY2xvc2UiLCJjb250ZW50cyIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwicmVhZEZpbGUiLCJzdHJpbmdpZnkiLCJzdG9yYWdlUGF0aCIsImRlc3QiLCJjcmVhdGVUZW1wRmlsZSIsInRlbXBGaWxlUGF0aCIsIndyaXRlRmlsZSIsImRpcm5hbWUiLCJsb2NrIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBRUE7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7Ozs7OztBQUdPLE1BQU1BLFNBQWlCLEdBQUcsU0FBMUI7O0FBQ0EsTUFBTUMsVUFBa0IsR0FBRyxRQUEzQjs7QUFDQSxNQUFNQyxvQkFBNEIsR0FBRyxRQUFyQzs7QUFDQSxNQUFNQyxXQUFXLEdBQUcsY0FBcEI7OztBQUVBLE1BQU1DLE9BQU8sR0FBRyxVQUFTQyxPQUFULEVBQTBCQyxJQUFZLEdBQUcsR0FBekMsRUFBeUQ7QUFDOUUsUUFBTUMsR0FBYyxHQUFHLHlCQUFZRCxJQUFaLEVBQWtCRCxPQUFsQixDQUF2QixDQUQ4RSxDQUU5RTs7QUFDQUUsRUFBQUEsR0FBRyxDQUFDRCxJQUFKLEdBQVdELE9BQVg7QUFFQSxTQUFPRSxHQUFQO0FBQ0QsQ0FOTTs7O0FBUUEsTUFBTUMsU0FBUyxHQUFHO0FBQ3ZCQyxFQUFBQSxNQUFNLEVBQUUsTUFBTTtBQUNaLFdBQU9MLE9BQU8sQ0FBQyxrQ0FBRCxFQUFxQyxHQUFyQyxDQUFkO0FBQ0QsR0FIc0I7QUFJdkJNLEVBQUFBLE1BQU0sRUFBRSxNQUFNO0FBQ1osV0FBT04sT0FBTyxDQUFDLDJCQUFE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Q0Q7O0FBQ0RxRyxVQUFBQSxjQUFjLENBQUN2RixFQUFELENBQWQ7QUFDRCxTQUxEO0FBTUQsT0FQRCxNQU9PO0FBQ0xBLFFBQUFBLEVBQUUsQ0FBQ2QsR0FBRCxDQUFGO0FBQ0Q7QUFDRixLQVhhLENBQWQ7QUFZRDs7QUFFRCtCLEVBQUFBLGdCQUFnQixDQUFDTCxJQUFELEVBQWVaLEVBQWYsRUFBNkI7QUFDM0MsVUFBTThCLFFBQWdCLEdBQUcsS0FBS0UsV0FBTCxDQUFpQnBCLElBQWpCLENBQXpCOztBQUVBLCtCQUNFa0IsUUFERixFQUVFO0FBQ0U2RCxNQUFBQSxJQUFJLEVBQUUsSUFEUjtBQUVFNUMsTUFBQUEsS0FBSyxFQUFFO0FBRlQsS0FGRixFQU1FLFVBQVM3RCxHQUFULEVBQWMwRCxHQUFkLEVBQW1CO0FBQ2pCLFVBQUkxRCxHQUFKLEVBQVM7QUFDUCxlQUFPYyxFQUFFLENBQUNkLEdBQUQsQ0FBVDtBQUNEOztBQUNELGFBQU9jLEVBQUUsQ0FBQyxJQUFELEVBQU80QyxHQUFQLENBQVQ7QUFDRCxLQVhIO0FBYUQ7O0FBRURuQixFQUFBQSxXQUFXLENBQUNiLElBQUQsRUFBZVosRUFBZixFQUE2QjtBQUN0QyxpQ0FBVyxLQUFLZ0MsV0FBTCxDQUFpQnBCLElBQWpCLENBQVgsRUFBbUNaLEVBQW5DO0FBQ0Q7O0FBaFI0RCIsInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5cbmltcG9ydCBmcyBmcm9tICdmcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcblxuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBta2RpcnAgZnJvbSAnbWtkaXJwJztcbmltcG9ydCBjcmVhdGVFcnJvciBmcm9tICdodHRwLWVycm9ycyc7XG5pbXBvcnQgeyBIdHRwRXJyb3IgfSBmcm9tICdodHRwLWVycm9ycyc7XG5pbXBvcnQgeyBVcGxvYWRUYXJiYWxsLCBSZWFkVGFyYmFsbCB9IGZyb20gJ0B2ZXJkYWNjaW8vc3RyZWFtcyc7XG5pbXBvcnQgeyB1bmxvY2tGaWxlLCByZWFkRmlsZSB9IGZyb20gJ0B2ZXJkYWNjaW8vZmlsZS1sb2NraW5nJztcbmltcG9ydCB7IENhbGxiYWNrLCBMb2dnZXIsIFBhY2thZ2UsIElMb2NhbFBhY2thZ2VNYW5hZ2VyLCBDYWxsYmFja0Vycm9yLCBJVXBsb2FkVGFyYmFsbCB9IGZyb20gJ0B2ZXJkYWNjaW8vdHlwZXMnO1xuXG5leHBvcnQgY29uc3QgZmlsZUV4aXN0OiBzdHJpbmcgPSAnRUVYSVNUUyc7XG5leHBvcnQgY29uc3Qgbm9TdWNoRmlsZTogc3RyaW5nID0gJ0VOT0VOVCc7XG5leHBvcnQgY29uc3QgcmVzb3VyY2VOb3RBdmFpbGFibGU6IHN0cmluZyA9ICdFQUdBSU4nO1xuZXhwb3J0IGNvbnN0IHBrZ0ZpbGVOYW1lID0gJ3BhY2thZ2UuanNvbic7XG5cbmV4cG9ydCBjb25zdCBmU0Vycm9yID0gZnVuY3Rpb24obWVzc2FnZTogc3RyaW5nLCBjb2RlOiBudW1iZXIgPSA0MDkpOiBIdHRwRXJyb3Ige1xuICBjb25zdCBlcnI6IEh0dHBFcnJvciA9IGNyZWF0ZUVycm9yKGNvZGUsIG1lc3NhZ2UpO1xuICAvLyAkRmxvd0ZpeE1lXG4gIGVyci5jb2RlID0gbWVzc2FnZTtcblxuICByZXR1cm4gZXJyO1xufTtcblxuZXhwb3J0IGNvbnN0IEVycm9yQ29kZSA9IHtcbiAgZ2V0NTAzOiAoKSA9PiB7XG4gICAgcmV0dXJuIGZTRXJyb3IoJ3Jlc291cmNlIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlJywgNTAwKTtcbiAgfSxcbiAgZ2V0NDA0OiAoKSA9PiB7XG4gICAgcmV0dXJuIGZTRXJyb3IoJ25vIHN1Y2ggcGFja2FnZSBhdmFpbGFibGUnLCA0MDQpO1xuICB9XG59O1xuXG5jb25zdCB0ZW1wRmlsZSA9IGZ1bmN0aW9uKHN0cikge1xuICByZXR1cm4gYCR7c3RyfS50bXAke1N0cmluZyhNYXRoLnJhbmRvbSgpKS5zdWJzdHIoMil9YDtcbn07XG5cbmNvbnN0IHJlbmFtZVRtcCA9IGZ1bmN0aW9uKHNyYywgZHN0LCBfY2IpIHtcbiAgY29uc3QgY2IgPSBlcnIgPT4ge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIGZzLnVubGluayhzcmMsIGZ1bmN0aW9uKCkge30pO1xuICAgIH1cbiAgICBfY2IoZXJyKTtcbiAgfTtcblxuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSAhPT0gJ3dpbjMyJykge1xuICAgIHJldHVybiBmcy5yZW5hbWUoc3JjLCBkc3QsIGNiKTtcbiAgfVxuXG4gIC8vIHdpbmRvd3MgY2FuJ3QgcmVtb3ZlIG9wZW5lZCBmaWxlLFxuICAvLyBidXQgaXQgc2VlbSB0byBiZSBhYmxlIHRvIHJlbmFtZSBpdFxuICBjb25zdCB0bXAgPSB0ZW1wRmlsZShkc3QpO1xuICBmcy5yZW5hbWUoZHN0LCB0bXAsIGZ1bmN0aW9uKGVycikge1xuICAgIGZzLnJlbmFtZShzcmMsIGRzdCwgY2IpO1xuICAgIGlmICghZXJyKSB7XG4gICAgICBmcy51bmxpbmsodG1wLCAoKSA9PiB7fSk7XG4gICAgfVxuICB9KTtcbn07XG5cbmV4cG9ydCB0eXBlIElMb2NhbEZTUGFja2FnZU1hbmFnZXIgPSBJTG9jYWxQYWNrYWdlTWFuYWdlciAmIHsgcGF0aDogc3RyaW5nIH07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvY2FsRlMgaW1wbGVtZW50cyBJTG9jYWxGU1BhY2thZ2VNYW5hZ2VyIHtcbiAgcGF0aDogc3RyaW5nO1xuICBsb2dnZXI6IExvZ2dlcjtcblxuICBjb25zdHJ1Y3RvcihwYXRoOiBzdHJpbmcsIGxvZ2dlcjogTG9nZ2VyKSB7XG4gICAgdGhpcy5wYXRoID0gcGF0aDtcbiAgICB0aGlzLmxvZ2dlciA9IGxvZ2dlcjtcbiAgfVxuXG4gIC8qKlxuICAgICogIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHRvIHVwZGF0ZSB0aGUgcGFja2FnZSB0aHJlYWQtc2FmZWx5XG4gICAgICBBbGdvcml0aG06XG4gICAgICAxLiBsb2NrIHBhY2thZ2UuanNvbiBmb3Igd3JpdGluZ1xuICAgICAgMi4gcmVhZCBwYWNrYWdlLmpzb25cbiAgICAgIDMuIHVwZGF0ZUZuKHBrZywgY2IpLCBhbmQgd2FpdCBmb3IgY2JcbiAgICAgIDQuIHdyaXRlIHBhY2thZ2UuanNvbi50bXBcbiAgICAgIDUuIG1vdmUgcGFja2FnZS5qc29uLnRtcCBwYWNrYWdlLmpzb25cbiAgICAgIDYuIGNhbGxiYWNrKGVycj8pXG4gICAgKiBAcGFyYW0geyp9IG5hbWVcbiAgICAqIEBwYXJhbSB7Kn0gdXBkYXRlSGFuZGxlclxuICAgICogQHBhcmFtIHsqfSBvbldyaXRlXG4gICAgKiBAcGFyYW0geyp9IHRyYW5zZm9ybVBhY2thZ2VcbiAgICAqIEBwYXJhbSB7Kn0gb25FbmRcbiAgICAqL1xuICB1cGRhdGVQYWNrYWdlKG5hbWU6IHN0cmluZywgdXBkYXRlSGFuZGxlcjogQ2FsbGJhY2ssIG9uV3JpdGU6IENhbGxiYWNrLCB0cmFuc2Zvcm1QYWNrYWdlOiBGdW5jdGlvbiwgb25FbmQ6IENhbGxiYWNrKSB7XG4gICAgdGhpcy5fbG9ja0FuZFJlYWRKU09OKHBrZ0ZpbGVOYW1lLCAoZXJyLCBqc29uKSA9PiB7XG4gICAgICBsZXQgbG9ja2VkID0gZmFsc2U7XG4gICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgIC8vIGNhbGxiYWNrIHRoYXQgY2xlYW5zIHVwIGxvY2sgZmlyc3RcbiAgICAgIGNvbnN0IHVuTG9ja0NhbGxiYWNrID0gZnVuY3Rpb24obG9ja0Vycm9yOiBFcnJvcikge1xuICAgICAgICBjb25zdCBfYXJncyA9IGFyZ3VtZW50cztcblxuICAgICAgICBpZiAobG9ja2VkKSB7XG4gICAgICAgICAgc2VsZi5fdW5sb2NrSlNPTihwa2dGaWxlTmFtZSwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAvLyBpZ25vcmUgYW55IGVycm9yIGZyb20gdGhlIHVubG9ja1xuICAgICAgICAgICAgb25FbmQuYXBwbHkobG9ja0Vycm9yLCBfYXJncyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb25FbmQoLi4uX2FyZ3MpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBpZiAoIWVycikge1xuICAgICAgICBsb2NrZWQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoXy5pc05pbChlcnIpID09PSBmYWxzZSkge1xuICAgICAgICBpZiAoZXJyLmNvZGUgPT09IHJlc291cmNlTm90QXZhaWxhYmxlKSB7XG4gICAgICAgICAgcmV0dXJuIHVuTG9ja0NhbGxiYWNrKEVycm9yQ29kZS5nZXQ1MDMoKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZXJyLmNvZGUgPT09IG5vU3VjaEZpbGUpIHtcbiAgICAgICAgICByZXR1cm4gdW5Mb2NrQ2FsbGJhY2soRXJyb3JDb2RlLmdldDQwNCgpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdW5Mb2NrQ2FsbGJhY2soZXJyKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB1cGRhdGVIYW5kbGVyKGpzb24sIGVyciA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICByZXR1cm4gdW5Mb2NrQ2FsbGJhY2soZXJyKTtcbiAgICAgICAgfVxuICAgICAgICBvbldyaXRlKG5hbWUsIHRyYW5zZm9ybVBhY2thZ2UoanNvbiksIHVuTG9ja0NhbGxiYWNrKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgZGVsZXRlUGFja2FnZShmaWxlTmFtZTogc3RyaW5nLCBjYWxsYmFjazogQ2FsbGJhY2tFcnJvcikge1xuICAgIHJldHVybiBmcy51bmxpbmsodGhpcy5fZ2V0U3RvcmFnZShmaWxlTmFtZSksIGNhbGxiYWNrKTtcbiAgfVxuXG4gIHJlbW92ZVBhY2thZ2UoY2FsbGJhY2s6IENhbGxiYWNrRXJyb3IpOiB2b2lkIHtcbiAgICBmcy5ybWRpcih0aGlzLl9nZXRTdG9yYWdlKCcuJyksIGNhbGxiYWNrKTtcbiAgfVxuXG4gIGNyZWF0ZVBhY2thZ2UobmFtZTogc3RyaW5nLCB2YWx1ZTogUGFja2FnZSwgY2I6IEZ1bmN0aW9uKSB7XG4gICAgdGhpcy5fY3JlYXRlRmlsZSh0aGlzLl9nZXRTdG9yYWdlKHBrZ0ZpbGVOYW1lKSwgdGhpcy5fY29udmVydFRvU3RyaW5nKHZhbHVlKSwgY2IpO1xuICB9XG5cbiAgc2F2ZVBhY2thZ2UobmFtZTogc3RyaW5nLCB2YWx1ZTogUGFja2FnZSwgY2I6IEZ1bmN0aW9uKSB7XG4gICAgdGhpcy5fd3JpdGVGaWxlKHRoaXMuX2dldFN0b3JhZ2UocGtnRmlsZU5hbWUpLCB0aGlzLl9jb252ZXJ0VG9TdHJpbmcodmFsdWUpLCBjYik7XG4gIH1cblxuICByZWFkUGFja2FnZShuYW1lOiBzdHJpbmcsIGNiOiBGdW5jdGlvbikge1xuICAgIHRoaXMuX3JlYWRTdG9yYWdlRmlsZSh0aGlzLl9nZXRTdG9yYWdlKHBrZ0ZpbGVOYW1lKSkudGhlbihcbiAgICAgIGZ1bmN0aW9uKHJlcykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGRhdGE6IGFueSA9IEpTT04ucGFyc2UocmVzLnRvU3RyaW5nKCd1dGY4JykpO1xuXG4gICAgICAgICAgY2IobnVsbCwgZGF0YSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNiKGVycik7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgcmV0dXJuIGNiKGVycik7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHdyaXRlVGFyYmFsbChuYW1lOiBzdHJpbmcpOiBJVXBsb2FkVGFyYmFsbCB7XG4gICAgY29uc3QgdXBsb2FkU3RyZWFtID0gbmV3IFVwbG9hZFRhcmJhbGwoe30pO1xuXG4gICAgbGV0IF9lbmRlZCA9IDA7XG4gICAgdXBsb2FkU3RyZWFtLm9uKCdlbmQnLCBmdW5jdGlvbigpIHtcbiAgICAgIF9lbmRlZCA9IDE7XG4gICAgfSk7XG5cbiAgICBjb25zdCBwYXRoTmFtZTogc3RyaW5nID0gdGhpcy5fZ2V0U3RvcmFnZShuYW1lKTtcblxuICAgIGZzLmV4aXN0cyhwYXRoTmFtZSwgZXhpc3RzID0+IHtcbiAgICAgIGlmIChleGlzdHMpIHtcbiAgICAgICAgdXBsb2FkU3RyZWFtLmVtaXQoJ2Vycm9yJywgZlNFcnJvcihmaWxlRXhpc3QpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHRlbXBvcmFsTmFtZSA9IHBhdGguam9pbih0aGlzLnBhdGgsIGAke25hbWV9LnRtcC0ke1N0cmluZyhNYXRoLnJhbmRvbSgpKS5yZXBsYWNlKC9eMFxcLi8sICcnKX1gKTtcbiAgICAgICAgY29uc3QgZmlsZSA9IGZzLmNyZWF0ZVdyaXRlU3RyZWFtKHRlbXBvcmFsTmFtZSk7XG4gICAgICAgIGNvbnN0IHJlbW92ZVRlbXBGaWxlID0gKCkgPT4gZnMudW5saW5rKHRlbXBvcmFsTmFtZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICB9KTtcbiAgICAgICAgbGV0IG9wZW5lZCA9IGZhbHNlO1xuICAgICAgICB1cGxvYWRTdHJlYW0ucGlwZShmaWxlKTtcblxuICAgICAgICB1cGxvYWRTdHJlYW0uZG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IG9uZW5kID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGZpbGUub24oJ2Nsb3NlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICByZW5hbWVUbXAodGVtcG9yYWxOYW1lLCBwYXRoTmFtZSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwbG9hZFN0cmVhbS5lbWl0KCdlcnJvcicsIGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwbG9hZFN0cmVhbS5lbWl0KCdzdWNjZXNzJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGZpbGUuZW5kKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKF9lbmRlZCkge1xuICAgICAgICAgICAgICAgIG9uZW5kKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHVwbG9hZFN0cmVhbS5vbignZW5kJywgb25lbmQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHVwbG9hZFN0cmVhbS5hYm9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChvcGVuZWQpIHtcbiAgICAgICAgICAgICAgICBvcGVuZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBmaWxlLm9uKCdjbG9zZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlVGVtcEZpbGUoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gaWYgdGhlIGZpbGUgZG9lcyBub3QgcmVjaWV2ZSBhbnkgYnl0ZSBuZXZlciBpcyBvcGVuZWQgYW5kIGhhcyB0byBiZSByZW1vdmVkIGFueXdheS5cbiAgICAgICAgICAgICAgICByZW1vdmVUZW1wRmlsZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmlsZS5lbmQoKTtcbiAgICAgICAgfTtcblxuICAgICAgICBmaWxlLm9uKCdvcGVuJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgb3BlbmVkID0gdHJ1ZTtcbiAgICAgICAgICAgIC8vIHJlLWVtaXR0aW5nIG9wZW4gYmVjYXVzZSBpdCdzIGhhbmRsZWQgaW4gc3RvcmFnZS5qc1xuICAgICAgICAgICAgdXBsb2FkU3RyZWFtLmVtaXQoJ29wZW4nKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZmlsZS5vbignZXJyb3InLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICB1cGxvYWRTdHJlYW0uZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB1cGxvYWRTdHJlYW07XG4gIH1cblxuICByZWFkVGFyYmFsbChuYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBwYXRoTmFtZTogc3RyaW5nID0gdGhpcy5fZ2V0U3RvcmFnZShuYW1lKTtcbiAgICBjb25zdCByZWFkVGFyYmFsbFN0cmVhbSA9IG5ldyBSZWFkVGFyYmFsbCh7fSk7XG5cbiAgICBjb25zdCByZWFkU3RyZWFtID0gZnMuY3JlYXRlUmVhZFN0cmVhbShwYXRoTmFtZSk7XG5cbiAgICByZWFkU3RyZWFtLm9uKCdlcnJvcicsIGZ1bmN0aW9uKGVycikge1xuICAgICAgcmVhZFRhcmJhbGxTdHJlYW0uZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgIH0pO1xuXG4gICAgcmVhZFN0cmVhbS5vbignb3BlbicsIGZ1bmN0aW9uKGZkKSB7XG4gICAgICBmcy5mc3RhdChmZCwgZnVuY3Rpb24oZXJyLCBzdGF0cykge1xuICAgICAgICBpZiAoXy5pc05pbChlcnIpID09PSBmYWxzZSkge1xuICAgICAgICAgIHJldHVybiByZWFkVGFyYmFsbFN0cmVhbS5lbWl0KCdlcnJvcicsIGVycik7XG4gICAgICAgIH1cbiAgICAgICAgcmVhZFRhcmJhbGxTdHJlYW0uZW1pdCgnY29udGVudC1sZW5ndGgnLCBzdGF0cy5zaXplKTtcbiAgICAgICAgcmVhZFRhcmJhbGxTdHJlYW0uZW1pdCgnb3BlbicpO1xuICAgICAgICByZWFkU3RyZWFtLnBpcGUocmVhZFRhcmJhbGxTdHJlYW0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICByZWFkVGFyYmFsbFN0cmVhbS5hYm9ydCA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmVhZFN0cmVhbS5jbG9zZSgpO1xuICAgIH07XG5cbiAgICByZXR1cm4gcmVhZFRhcmJhbGxTdHJlYW07XG4gIH1cblxuICBfY3JlYXRlRmlsZShuYW1lOiBzdHJpbmcsIGNvbnRlbnRzOiBhbnksIGNhbGxiYWNrOiBGdW5jdGlvbikge1xuICAgIGZzLmV4aXN0cyhuYW1lLCBleGlzdHMgPT4ge1xuICAgICAgaWYgKGV4aXN0cykge1xuICAgICAgICByZXR1cm4gY2FsbGJhY2soZlNFcnJvcihmaWxlRXhpc3QpKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX3dyaXRlRmlsZShuYW1lLCBjb250ZW50cywgY2FsbGJhY2spO1xuICAgIH0pO1xuICB9XG5cbiAgX3JlYWRTdG9yYWdlRmlsZShuYW1lOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBmcy5yZWFkRmlsZShuYW1lLCAoZXJyLCBkYXRhKSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIF9jb252ZXJ0VG9TdHJpbmcodmFsdWU6IFBhY2thZ2UpOiBzdHJpbmcge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSwgbnVsbCwgJ1xcdCcpO1xuICB9XG5cbiAgX2dldFN0b3JhZ2UoZmlsZU5hbWU6IHN0cmluZyA9ICcnKSB7XG4gICAgY29uc3Qgc3RvcmFnZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbih0aGlzLnBhdGgsIGZpbGVOYW1lKTtcblxuICAgIHJldHVybiBzdG9yYWdlUGF0aDtcbiAgfVxuXG4gIF93cml0ZUZpbGUoZGVzdDogc3RyaW5nLCBkYXRhOiBzdHJpbmcsIGNiOiBGdW5jdGlvbikge1xuICAgIGNvbnN0IGNyZWF0ZVRlbXBGaWxlID0gY2IgPT4ge1xuICAgICAgY29uc3QgdGVtcEZpbGVQYXRoID0gdGVtcEZpbGUoZGVzdCk7XG5cbiAgICAgIGZzLndyaXRlRmlsZSh0ZW1wRmlsZVBhdGgsIGRhdGEsIGVyciA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICByZXR1cm4gY2IoZXJyKTtcbiAgICAgICAgfVxuICAgICAgICByZW5hbWVUbXAodGVtcEZpbGVQYXRoLCBkZXN0LCBjYik7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY3JlYXRlVGVtcEZpbGUoZXJyID0+IHtcbiAgICAgIGlmIChlcnIgJiYgZXJyLmNvZGUgPT09IG5vU3VjaEZpbGUpIHtcbiAgICAgICAgbWtkaXJwKHBhdGguZGlybmFtZShkZXN0KSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgcmV0dXJuIGNiKGVycik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNyZWF0ZVRlbXBGaWxlKGNiKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYihlcnIpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgX2xvY2tBbmRSZWFkSlNPTihuYW1lOiBzdHJpbmcsIGNiOiBGdW5jdGlvbikge1xuICAgIGNvbnN0IGZpbGVOYW1lOiBzdHJpbmcgPSB0aGlzLl9nZXRTdG9yYWdlKG5hbWUpO1xuXG4gICAgcmVhZEZpbGUoXG4gICAgICBmaWxlTmFtZSxcbiAgICAgIHtcbiAgICAgICAgbG9jazogdHJ1ZSxcbiAgICAgICAgcGFyc2U6IHRydWVcbiAgICAgIH0sXG4gICAgICBmdW5jdGlvbihlcnIsIHJlcykge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgcmV0dXJuIGNiKGVycik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNiKG51bGwsIHJlcyk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIF91bmxvY2tKU09OKG5hbWU6IHN0cmluZywgY2I6IEZ1bmN0aW9uKSB7XG4gICAgdW5sb2NrRmlsZSh0aGlzLl9nZXRTdG9yYWdlKG5hbWUpLCBjYik7XG4gIH1cbn1cbiJdfQ==

@@ -18,6 +18,2 @@ "use strict";

function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
function getFileStats(packagePath) {

@@ -51,64 +47,49 @@ return new Promise((resolve, reject) => {

function findPackages(_x, _x2) {
return _findPackages.apply(this, arguments);
}
async function findPackages(storagePath, validationHandler) {
const listPackages = [];
return new Promise(async (resolve, reject) => {
try {
const scopePath = _path.default.resolve(storagePath);
function _findPackages() {
_findPackages = _asyncToGenerator(function* (storagePath, validationHandler) {
const listPackages = [];
return new Promise(
/*#__PURE__*/
function () {
var _ref = _asyncToGenerator(function* (resolve, reject) {
try {
const scopePath = _path.default.resolve(storagePath);
const storageDirs = await readDirectory(scopePath);
const storageDirs = yield readDirectory(scopePath);
for (const directory of storageDirs) {
// we check whether has 2nd level
if (hasScope(directory)) {
// we read directory multiple
const scopeDirectory = _path.default.resolve(storagePath, directory);
for (const directory of storageDirs) {
// we check whether has 2nd level
if (hasScope(directory)) {
// we read directory multiple
const scopeDirectory = _path.default.resolve(storagePath, directory);
const scopedPackages = await readDirectory(scopeDirectory);
const scopedPackages = yield readDirectory(scopeDirectory);
for (const scopedDirName of scopedPackages) {
if (validationHandler(scopedDirName)) {
// we build the complete scope path
const scopePath = _path.default.resolve(storagePath, directory, scopedDirName); // list content of such directory
for (const scopedDirName of scopedPackages) {
if (validationHandler(scopedDirName)) {
// we build the complete scope path
const scopePath = _path.default.resolve(storagePath, directory, scopedDirName); // list content of such directory
listPackages.push({
name: `${directory}/${scopedDirName}`,
path: scopePath
});
}
}
} else {
// otherwise we read as single level
if (validationHandler(directory)) {
const scopePath = _path.default.resolve(storagePath, directory);
listPackages.push({
name: directory,
path: scopePath
});
}
listPackages.push({
name: `${directory}/${scopedDirName}`,
path: scopePath
});
}
}
} catch (error) {
reject(error);
} else {
// otherwise we read as single level
if (validationHandler(directory)) {
const scopePath = _path.default.resolve(storagePath, directory);
listPackages.push({
name: directory,
path: scopePath
});
}
}
}
} catch (error) {
reject(error);
}
resolve(listPackages);
});
return function (_x3, _x4) {
return _ref.apply(this, arguments);
};
}());
resolve(listPackages);
});
return _findPackages.apply(this, arguments);
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlscy50cyJdLCJuYW1lcyI6WyJnZXRGaWxlU3RhdHMiLCJwYWNrYWdlUGF0aCIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiZnMiLCJzdGF0IiwiZXJyIiwic3RhdHMiLCJfIiwiaXNOaWwiLCJyZWFkRGlyZWN0b3J5IiwicmVhZGRpciIsInNjb3BlZFBhY2thZ2VzIiwiaGFzU2NvcGUiLCJmaWxlIiwibWF0Y2giLCJmaW5kUGFja2FnZXMiLCJzdG9yYWdlUGF0aCIsInZhbGlkYXRpb25IYW5kbGVyIiwibGlzdFBhY2thZ2VzIiwic2NvcGVQYXRoIiwicGF0aCIsInN0b3JhZ2VEaXJzIiwiZGlyZWN0b3J5Iiwic2NvcGVEaXJlY3RvcnkiLCJzY29wZWREaXJOYW1lIiwicHVzaCIsIm5hbWUiLCJlcnJvciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7Ozs7Ozs7O0FBRU8sU0FBU0EsWUFBVCxDQUFzQkMsV0FBdEIsRUFBZ0Q7QUFDckQsU0FBTyxJQUFJQyxPQUFKLENBQVksQ0FBQ0MsT0FBRCxFQUFVQyxNQUFWLEtBQXFCO0FBQ3RDQyxnQkFBR0MsSUFBSCxDQUFRTCxXQUFSLEVBQXFCLENBQUNNLEdBQUQsRUFBTUMsS0FBTixLQUFnQjtBQUNuQyxVQUFJQyxnQkFBRUMsS0FBRixDQUFRSCxHQUFSLE1BQWlCLEtBQXJCLEVBQTRCO0FBQzFCLGVBQU9ILE1BQU0sQ0FBQ0csR0FBRCxDQUFiO0FBQ0Q7O0FBQ0RKLE1BQUFBLE9BQU8sQ0FBQ0ssS0FBRCxDQUFQO0FBQ0QsS0FMRDtBQU1ELEdBUE0sQ0FBUDtBQVFEOztBQUVNLFNBQVNHLGFBQVQsQ0FBdUJWLFdBQXZCLEVBQTBEO0FBQy9ELFNBQU8sSUFBSUMsT0FBSixDQUFZLENBQUNDLE9BQUQsRUFBVUMsTUFBVixLQUFxQjtBQUN0Q0MsZ0JBQUdPLE9BQUgsQ0FBV1gsV0FBWCxFQUF3QixDQUFDTSxHQUFELEVBQU1NLGNBQU4sS0FBeUI7QUFDL0MsVUFBSUosZ0JBQUVDLEtBQUYsQ0FBUUgsR0FBUixNQUFpQixLQUFyQixFQUE0QjtBQUMxQixlQUFPSCxNQUFNLENBQUNHLEdBQUQsQ0FBYjtBQUNEOztBQUVESixNQUFBQSxPQUFPLENBQUNVLGNBQUQsQ0FBUDtBQUNELEtBTkQ7QUFPRCxHQVJNLENBQVA7QUFTRDs7QUFFRCxTQUFTQyxRQUFULENBQWtCQyxJQUFsQixFQUFnQztBQUM5QixTQUFPQSxJQUFJLENBQUNDLEtBQUwsQ0FBVyxJQUFYLENBQVA7QUFDRDs7U0FFcUJDLFk7Ozs7O29DQUFmLFdBQTRCQyxXQUE1QixFQUFpREMsaUJBQWpELEVBQThFO0FBQ25GLFVBQU1DLFlBQXdCLEdBQUcsRUFBakM7QUFDQSxXQUFPLElBQUlsQixPQUFKO0FBQUE7QUFBQTtBQUFBLG1DQUFZLFdBQU9DLE9BQVAsRUFBZ0JDLE1BQWhCLEVBQTJCO0FBQzVDLFlBQUk7QUFDRixnQkFBTWlCLFNBQVMsR0FBR0MsY0FBS25CLE9BQUwsQ0FBYWUsV0FBYixDQUFsQjs7QUFDQSxnQkFBTUssV0FBVyxTQUFTWixhQUFhLENBQUNVLFNBQUQsQ0FBdkM7O0FBQ0EsZUFBSyxNQUFNRyxTQUFYLElBQXdCRCxXQUF4QixFQUFxQztBQUNuQztBQUNBLGdCQUFJVCxRQUFRLENBQUNVLFNBQUQsQ0FBWixFQUF5QjtBQUN2QjtBQUNBLG9CQUFNQyxjQUFjLEdBQUdILGNBQUtuQixPQUFMLENBQWFlLFdBQWIsRUFBMEJNLFNBQTFCLENBQXZCOztBQUNBLG9CQUFNWCxjQUFjLFNBQVNGLGFBQWEsQ0FBQ2MsY0FBRCxDQUExQzs7QUFDQSxtQkFBSyxNQUFNQyxhQUFYLElBQTRCYixjQUE1QixFQUE0QztBQUMxQyxvQkFBSU0saUJBQWlCLENBQUNPLGFBQUQsQ0FBckIsRUFBc0M7QUFDcEM7QUFDQSx3QkFBTUwsU0FBUyxHQUFHQyxjQUFLbkIsT0FBTCxDQUFhZSxXQUFiLEVBQTBCTSxTQUExQixFQUFxQ0UsYUFBckMsQ0FBbEIsQ0FGb0MsQ0FHcEM7OztBQUNBTixrQkFBQUEsWUFBWSxDQUFDTyxJQUFiLENBQWtCO0FBQ2hCQyxvQkFBQUEsSUFBSSxFQUFHLEdBQUVKLFNBQVUsSUFBR0UsYUFBYyxFQURwQjtBQUVoQkosb0JBQUFBLElBQUksRUFBRUQ7QUFGVSxtQkFBbEI7QUFJRDtBQUNGO0FBQ0YsYUFmRCxNQWVPO0FBQ0w7QUFDQSxrQkFBSUYsaUJBQWlCLENBQUNLLFNBQUQsQ0FBckIsRUFBa0M7QUFDaEMsc0JBQU1ILFNBQVMsR0FBR0MsY0FBS25CLE9BQUwsQ0FBYWUsV0FBYixFQUEwQk0sU0FBMUIsQ0FBbEI7O0FBQ0FKLGdCQUFBQSxZQUFZLENBQUNPLElBQWIsQ0FBa0I7QUFDaEJDLGtCQUFBQSxJQUFJLEVBQUVKLFNBRFU7QUFFaEJGLGtCQUFBQSxJQUFJLEVBQUVEO0FBRlUsaUJBQWxCO0FBSUQ7QUFDRjtBQUNGO0FBQ0YsU0EvQkQsQ0ErQkUsT0FBT1EsS0FBUCxFQUFjO0FBQ2R6QixVQUFBQSxNQUFNLENBQUN5QixLQUFELENBQU47QUFDRDs7QUFFRDFCLFFBQUFBLE9BQU8sQ0FBQ2lCLFlBQUQsQ0FBUDtBQUNELE9BckNNOztBQUFBO0FBQUE7QUFBQTtBQUFBLFFBQVA7QUFzQ0QsRyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmcyBmcm9tICdmcyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWxlU3RhdHMocGFja2FnZVBhdGg6IHN0cmluZyk6IGFueSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgZnMuc3RhdChwYWNrYWdlUGF0aCwgKGVyciwgc3RhdHMpID0+IHtcbiAgICAgIGlmIChfLmlzTmlsKGVycikgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgIH1cbiAgICAgIHJlc29sdmUoc3RhdHMpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWREaXJlY3RvcnkocGFja2FnZVBhdGg6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgZnMucmVhZGRpcihwYWNrYWdlUGF0aCwgKGVyciwgc2NvcGVkUGFja2FnZXMpID0+IHtcbiAgICAgIGlmIChfLmlzTmlsKGVycikgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgIH1cblxuICAgICAgcmVzb2x2ZShzY29wZWRQYWNrYWdlcyk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBoYXNTY29wZShmaWxlOiBzdHJpbmcpIHtcbiAgcmV0dXJuIGZpbGUubWF0Y2goL15ALyk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmaW5kUGFja2FnZXMoc3RvcmFnZVBhdGg6IHN0cmluZywgdmFsaWRhdGlvbkhhbmRsZXI6IEZ1bmN0aW9uKSB7XG4gIGNvbnN0IGxpc3RQYWNrYWdlczogQXJyYXk8YW55PiA9IFtdO1xuICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzY29wZVBhdGggPSBwYXRoLnJlc29sdmUoc3RvcmFnZVBhdGgpO1xuICAgICAgY29uc3Qgc3RvcmFnZURpcnMgPSBhd2FpdCByZWFkRGlyZWN0b3J5KHNjb3BlUGF0aCk7XG4gICAgICBmb3IgKGNvbnN0IGRpcmVjdG9yeSBvZiBzdG9yYWdlRGlycykge1xuICAgICAgICAvLyB3ZSBjaGVjayB3aGV0aGVyIGhhcyAybmQgbGV2ZWxcbiAgICAgICAgaWYgKGhhc1Njb3BlKGRpcmVjdG9yeSkpIHtcbiAgICAgICAgICAvLyB3ZSByZWFkIGRpcmVjdG9yeSBtdWx0aXBsZVxuICAgICAgICAgIGNvbnN0IHNjb3BlRGlyZWN0b3J5ID0gcGF0aC5yZXNvbHZlKHN0b3JhZ2VQYXRoLCBkaXJlY3RvcnkpO1xuICAgICAgICAgIGNvbnN0IHNjb3BlZFBhY2thZ2VzID0gYXdhaXQgcmVhZERpcmVjdG9yeShzY29wZURpcmVjdG9yeSk7XG4gICAgICAgICAgZm9yIChjb25zdCBzY29wZWREaXJOYW1lIG9mIHNjb3BlZFBhY2thZ2VzKSB7XG4gICAgICAgICAgICBpZiAodmFsaWRhdGlvbkhhbmRsZXIoc2NvcGVkRGlyTmFtZSkpIHtcbiAgICAgICAgICAgICAgLy8gd2UgYnVpbGQgdGhlIGNvbXBsZXRlIHNjb3BlIHBhdGhcbiAgICAgICAgICAgICAgY29uc3Qgc2NvcGVQYXRoID0gcGF0aC5yZXNvbHZlKHN0b3JhZ2VQYXRoLCBkaXJlY3RvcnksIHNjb3BlZERpck5hbWUpO1xuICAgICAgICAgICAgICAvLyBsaXN0IGNvbnRlbnQgb2Ygc3VjaCBkaXJlY3RvcnlcbiAgICAgICAgICAgICAgbGlzdFBhY2thZ2VzLnB1c2goe1xuICAgICAgICAgICAgICAgIG5hbWU6IGAke2RpcmVjdG9yeX0vJHtzY29wZWREaXJOYW1lfWAsXG4gICAgICAgICAgICAgICAgcGF0aDogc2NvcGVQYXRoXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBvdGhlcndpc2Ugd2UgcmVhZCBhcyBzaW5nbGUgbGV2ZWxcbiAgICAgICAgICBpZiAodmFsaWRhdGlvbkhhbmRsZXIoZGlyZWN0b3J5KSkge1xuICAgICAgICAgICAgY29uc3Qgc2NvcGVQYXRoID0gcGF0aC5yZXNvbHZlKHN0b3JhZ2VQYXRoLCBkaXJlY3RvcnkpO1xuICAgICAgICAgICAgbGlzdFBhY2thZ2VzLnB1c2goe1xuICAgICAgICAgICAgICBuYW1lOiBkaXJlY3RvcnksXG4gICAgICAgICAgICAgIHBhdGg6IHNjb3BlUGF0aFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJlamVjdChlcnJvcik7XG4gICAgfVxuXG4gICAgcmVzb2x2ZShsaXN0UGFja2FnZXMpO1xuICB9KTtcbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlscy50cyJdLCJuYW1lcyI6WyJnZXRGaWxlU3RhdHMiLCJwYWNrYWdlUGF0aCIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiZnMiLCJzdGF0IiwiZXJyIiwic3RhdHMiLCJfIiwiaXNOaWwiLCJyZWFkRGlyZWN0b3J5IiwicmVhZGRpciIsInNjb3BlZFBhY2thZ2VzIiwiaGFzU2NvcGUiLCJmaWxlIiwibWF0Y2giLCJmaW5kUGFja2FnZXMiLCJzdG9yYWdlUGF0aCIsInZhbGlkYXRpb25IYW5kbGVyIiwibGlzdFBhY2thZ2VzIiwic2NvcGVQYXRoIiwicGF0aCIsInN0b3JhZ2VEaXJzIiwiZGlyZWN0b3J5Iiwic2NvcGVEaXJlY3RvcnkiLCJzY29wZWREaXJOYW1lIiwicHVzaCIsIm5hbWUiLCJlcnJvciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7Ozs7QUFFTyxTQUFTQSxZQUFULENBQXNCQyxXQUF0QixFQUFnRDtBQUNyRCxTQUFPLElBQUlDLE9BQUosQ0FBWSxDQUFDQyxPQUFELEVBQVVDLE1BQVYsS0FBcUI7QUFDdENDLGdCQUFHQyxJQUFILENBQVFMLFdBQVIsRUFBcUIsQ0FBQ00sR0FBRCxFQUFNQyxLQUFOLEtBQWdCO0FBQ25DLFVBQUlDLGdCQUFFQyxLQUFGLENBQVFILEdBQVIsTUFBaUIsS0FBckIsRUFBNEI7QUFDMUIsZUFBT0gsTUFBTSxDQUFDRyxHQUFELENBQWI7QUFDRDs7QUFDREosTUFBQUEsT0FBTyxDQUFDSyxLQUFELENBQVA7QUFDRCxLQUxEO0FBTUQsR0FQTSxDQUFQO0FBUUQ7O0FBRU0sU0FBU0csYUFBVCxDQUF1QlYsV0FBdkIsRUFBMEQ7QUFDL0QsU0FBTyxJQUFJQyxPQUFKLENBQVksQ0FBQ0MsT0FBRCxFQUFVQyxNQUFWLEtBQXFCO0FBQ3RDQyxnQkFBR08sT0FBSCxDQUFXWCxXQUFYLEVBQXdCLENBQUNNLEdBQUQsRUFBTU0sY0FBTixLQUF5QjtBQUMvQyxVQUFJSixnQkFBRUMsS0FBRixDQUFRSCxHQUFSLE1BQWlCLEtBQXJCLEVBQTRCO0FBQzFCLGVBQU9ILE1BQU0sQ0FBQ0csR0FBRCxDQUFiO0FBQ0Q7O0FBRURKLE1BQUFBLE9BQU8sQ0FBQ1UsY0FBRCxDQUFQO0FBQ0QsS0FORDtBQU9ELEdBUk0sQ0FBUDtBQVNEOztBQUVELFNBQVNDLFFBQVQsQ0FBa0JDLElBQWxCLEVBQWdDO0FBQzlCLFNBQU9BLElBQUksQ0FBQ0MsS0FBTCxDQUFXLElBQVgsQ0FBUDtBQUNEOztBQUVNLGVBQWVDLFlBQWYsQ0FBNEJDLFdBQTVCLEVBQWlEQyxpQkFBakQsRUFBOEU7QUFDbkYsUUFBTUMsWUFBd0IsR0FBRyxFQUFqQztBQUNBLFNBQU8sSUFBSWxCLE9BQUosQ0FBWSxPQUFPQyxPQUFQLEVBQWdCQyxNQUFoQixLQUEyQjtBQUM1QyxRQUFJO0FBQ0YsWUFBTWlCLFNBQVMsR0FBR0MsY0FBS25CLE9BQUwsQ0FBYWUsV0FBYixDQUFsQjs7QUFDQSxZQUFNSyxXQUFXLEdBQUcsTUFBTVosYUFBYSxDQUFDVSxTQUFELENBQXZDOztBQUNBLFdBQUssTUFBTUcsU0FBWCxJQUF3QkQsV0FBeEIsRUFBcUM7QUFDbkM7QUFDQSxZQUFJVCxRQUFRLENBQUNVLFNBQUQsQ0FBWixFQUF5QjtBQUN2QjtBQUNBLGdCQUFNQyxjQUFjLEdBQUdILGNBQUtuQixPQUFMLENBQWFlLFdBQWIsRUFBMEJNLFNBQTFCLENBQXZCOztBQUNBLGdCQUFNWCxjQUFjLEdBQUcsTUFBTUYsYUFBYSxDQUFDYyxjQUFELENBQTFDOztBQUNBLGVBQUssTUFBTUMsYUFBWCxJQUE0QmIsY0FBNUIsRUFBNEM7QUFDMUMsZ0JBQUlNLGlCQUFpQixDQUFDTyxhQUFELENBQXJCLEVBQXNDO0FBQ3BDO0FBQ0Esb0JBQU1MLFNBQVMsR0FBR0MsY0FBS25CLE9BQUwsQ0FBYWUsV0FBYixFQUEwQk0sU0FBMUIsRUFBcUNFLGFBQXJDLENBQWxCLENBRm9DLENBR3BDOzs7QUFDQU4sY0FBQUEsWUFBWSxDQUFDTyxJQUFiLENBQWtCO0FBQ2hCQyxnQkFBQUEsSUFBSSxFQUFHLEdBQUVKLFNBQVUsSUFBR0UsYUFBYyxFQURwQjtBQUVoQkosZ0JBQUFBLElBQUksRUFBRUQ7QUFGVSxlQUFsQjtBQUlEO0FBQ0Y7QUFDRixTQWZELE1BZU87QUFDTDtBQUNBLGNBQUlGLGlCQUFpQixDQUFDSyxTQUFELENBQXJCLEVBQWtDO0FBQ2hDLGtCQUFNSCxTQUFTLEdBQUdDLGNBQUtuQixPQUFMLENBQWFlLFdBQWIsRUFBMEJNLFNBQTFCLENBQWxCOztBQUNBSixZQUFBQSxZQUFZLENBQUNPLElBQWIsQ0FBa0I7QUFDaEJDLGNBQUFBLElBQUksRUFBRUosU0FEVTtBQUVoQkYsY0FBQUEsSUFBSSxFQUFFRDtBQUZVLGFBQWxCO0FBSUQ7QUFDRjtBQUNGO0FBQ0YsS0EvQkQsQ0ErQkUsT0FBT1EsS0FBUCxFQUFjO0FBQ2R6QixNQUFBQSxNQUFNLENBQUN5QixLQUFELENBQU47QUFDRDs7QUFFRDFCLElBQUFBLE9BQU8sQ0FBQ2lCLFlBQUQsQ0FBUDtBQUNELEdBckNNLENBQVA7QUFzQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZnMgZnJvbSAnZnMnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlsZVN0YXRzKHBhY2thZ2VQYXRoOiBzdHJpbmcpOiBhbnkge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGZzLnN0YXQocGFja2FnZVBhdGgsIChlcnIsIHN0YXRzKSA9PiB7XG4gICAgICBpZiAoXy5pc05pbChlcnIpID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICB9XG4gICAgICByZXNvbHZlKHN0YXRzKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkRGlyZWN0b3J5KHBhY2thZ2VQYXRoOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGZzLnJlYWRkaXIocGFja2FnZVBhdGgsIChlcnIsIHNjb3BlZFBhY2thZ2VzKSA9PiB7XG4gICAgICBpZiAoXy5pc05pbChlcnIpID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICB9XG5cbiAgICAgIHJlc29sdmUoc2NvcGVkUGFja2FnZXMpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gaGFzU2NvcGUoZmlsZTogc3RyaW5nKSB7XG4gIHJldHVybiBmaWxlLm1hdGNoKC9eQC8pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmluZFBhY2thZ2VzKHN0b3JhZ2VQYXRoOiBzdHJpbmcsIHZhbGlkYXRpb25IYW5kbGVyOiBGdW5jdGlvbikge1xuICBjb25zdCBsaXN0UGFja2FnZXM6IEFycmF5PGFueT4gPSBbXTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc2NvcGVQYXRoID0gcGF0aC5yZXNvbHZlKHN0b3JhZ2VQYXRoKTtcbiAgICAgIGNvbnN0IHN0b3JhZ2VEaXJzID0gYXdhaXQgcmVhZERpcmVjdG9yeShzY29wZVBhdGgpO1xuICAgICAgZm9yIChjb25zdCBkaXJlY3Rvcnkgb2Ygc3RvcmFnZURpcnMpIHtcbiAgICAgICAgLy8gd2UgY2hlY2sgd2hldGhlciBoYXMgMm5kIGxldmVsXG4gICAgICAgIGlmIChoYXNTY29wZShkaXJlY3RvcnkpKSB7XG4gICAgICAgICAgLy8gd2UgcmVhZCBkaXJlY3RvcnkgbXVsdGlwbGVcbiAgICAgICAgICBjb25zdCBzY29wZURpcmVjdG9yeSA9IHBhdGgucmVzb2x2ZShzdG9yYWdlUGF0aCwgZGlyZWN0b3J5KTtcbiAgICAgICAgICBjb25zdCBzY29wZWRQYWNrYWdlcyA9IGF3YWl0IHJlYWREaXJlY3Rvcnkoc2NvcGVEaXJlY3RvcnkpO1xuICAgICAgICAgIGZvciAoY29uc3Qgc2NvcGVkRGlyTmFtZSBvZiBzY29wZWRQYWNrYWdlcykge1xuICAgICAgICAgICAgaWYgKHZhbGlkYXRpb25IYW5kbGVyKHNjb3BlZERpck5hbWUpKSB7XG4gICAgICAgICAgICAgIC8vIHdlIGJ1aWxkIHRoZSBjb21wbGV0ZSBzY29wZSBwYXRoXG4gICAgICAgICAgICAgIGNvbnN0IHNjb3BlUGF0aCA9IHBhdGgucmVzb2x2ZShzdG9yYWdlUGF0aCwgZGlyZWN0b3J5LCBzY29wZWREaXJOYW1lKTtcbiAgICAgICAgICAgICAgLy8gbGlzdCBjb250ZW50IG9mIHN1Y2ggZGlyZWN0b3J5XG4gICAgICAgICAgICAgIGxpc3RQYWNrYWdlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBgJHtkaXJlY3Rvcnl9LyR7c2NvcGVkRGlyTmFtZX1gLFxuICAgICAgICAgICAgICAgIHBhdGg6IHNjb3BlUGF0aFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gb3RoZXJ3aXNlIHdlIHJlYWQgYXMgc2luZ2xlIGxldmVsXG4gICAgICAgICAgaWYgKHZhbGlkYXRpb25IYW5kbGVyKGRpcmVjdG9yeSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHNjb3BlUGF0aCA9IHBhdGgucmVzb2x2ZShzdG9yYWdlUGF0aCwgZGlyZWN0b3J5KTtcbiAgICAgICAgICAgIGxpc3RQYWNrYWdlcy5wdXNoKHtcbiAgICAgICAgICAgICAgbmFtZTogZGlyZWN0b3J5LFxuICAgICAgICAgICAgICBwYXRoOiBzY29wZVBhdGhcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZWplY3QoZXJyb3IpO1xuICAgIH1cblxuICAgIHJlc29sdmUobGlzdFBhY2thZ2VzKTtcbiAgfSk7XG59XG4iXX0=
{
"name": "@verdaccio/local-storage",
"version": "2.0.0-beta.3",
"version": "2.0.0",
"description": "local storage implementation",

@@ -24,3 +24,3 @@ "main": "lib/index.js",

"async": "3.0.1-0",
"http-errors": "1.7.1",
"http-errors": "1.7.2",
"lodash": "4.17.11",

@@ -33,22 +33,22 @@ "mkdirp": "0.5.1"

"@types/http-errors": "1.6.1",
"@types/jest": "24.0.4",
"@types/lodash": "^4.14.121",
"@types/jest": "24.0.11",
"@types/lodash": "^4.14.123",
"@types/minimatch": "^3.0.3",
"@types/node": "11.9.4",
"@typescript-eslint/eslint-plugin": "1.3.0",
"@verdaccio/babel-preset": "0.0.4",
"@verdaccio/types": "5.0.0-beta.1",
"@types/node": "11.12.1",
"@typescript-eslint/eslint-plugin": "1.5.0",
"@verdaccio/babel-preset": "0.1.0",
"@verdaccio/types": "5.0.0-beta.4",
"codecov": "3.2.0",
"cross-env": "5.2.0",
"eslint": "5.13.0",
"eslint": "5.15.3",
"eslint-config-google": "0.12.0",
"eslint-config-prettier": "4.0.0",
"eslint-plugin-jest": "22.3.0",
"eslint-config-prettier": "4.1.0",
"eslint-plugin-jest": "22.4.1",
"eslint-plugin-prettier": "3.0.1",
"husky": "0.14.3",
"jest": "24.1.0",
"jest": "24.5.0",
"minimatch": "3.0.4",
"prettier": "1.16.4",
"rmdir-sync": "1.0.1",
"standard-version": "4.4.0",
"standard-version": "5.0.2",
"typescript": "3.2.1"

@@ -55,0 +55,0 @@ },

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc