New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

browserfs

Package Overview
Dependencies
Maintainers
1
Versions
32
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

browserfs - npm Package Compare versions

Comparing version 0.5.3 to 0.5.4

2

bower.json
{
"name": "BrowserFS",
"version": "0.5.3",
"version": "0.5.4",
"main": [

@@ -5,0 +5,0 @@ "./dist/browserfs.min.js",

@@ -7,5 +7,5 @@ import file_system = require('../core/file_system');

constructor();
mount(mnt_pt: string, fs: file_system.FileSystem): void;
umount(mnt_pt: string): void;
_get_fs(path: string): {
mount(mountPoint: string, fs: file_system.FileSystem): void;
umount(mountPoint: string): void;
_getFs(path: string): {
fs: file_system.FileSystem;

@@ -12,0 +12,0 @@ path: string;

@@ -10,2 +10,3 @@ var __extends = (this && this.__extends) || function (d, b) {

var fs = require('../core/node_fs');
var util_1 = require('../core/util');
var MountableFileSystem = (function (_super) {

@@ -18,21 +19,24 @@ __extends(MountableFileSystem, _super);

}
MountableFileSystem.prototype.mount = function (mnt_pt, fs) {
if (this.mntMap[mnt_pt]) {
throw new api_error_1.ApiError(api_error_1.ErrorCode.EINVAL, "Mount point " + mnt_pt + " is already taken.");
MountableFileSystem.prototype.mount = function (mountPoint, fs) {
if (mountPoint[0] !== '/') {
mountPoint = "/" + mountPoint;
}
this.rootFs.mkdirSync(mnt_pt, 0x1ff);
this.mntMap[mnt_pt] = fs;
if (this.mntMap[mountPoint]) {
throw new api_error_1.ApiError(api_error_1.ErrorCode.EINVAL, "Mount point " + mountPoint + " is already taken.");
}
util_1.mkdirpSync(mountPoint, 0x1ff, this.rootFs);
this.mntMap[mountPoint] = fs;
};
MountableFileSystem.prototype.umount = function (mnt_pt) {
if (!this.mntMap[mnt_pt]) {
throw new api_error_1.ApiError(api_error_1.ErrorCode.EINVAL, "Mount point " + mnt_pt + " is already unmounted.");
MountableFileSystem.prototype.umount = function (mountPoint) {
if (!this.mntMap[mountPoint]) {
throw new api_error_1.ApiError(api_error_1.ErrorCode.EINVAL, "Mount point " + mountPoint + " is already unmounted.");
}
delete this.mntMap[mnt_pt];
this.rootFs.rmdirSync(mnt_pt);
delete this.mntMap[mountPoint];
this.rootFs.rmdirSync(mountPoint);
};
MountableFileSystem.prototype._get_fs = function (path) {
for (var mnt_pt in this.mntMap) {
var fs = this.mntMap[mnt_pt];
if (path.indexOf(mnt_pt) === 0) {
path = path.substr(mnt_pt.length > 1 ? mnt_pt.length : 0);
MountableFileSystem.prototype._getFs = function (path) {
for (var mountPoint in this.mntMap) {
var fs = this.mntMap[mountPoint];
if (path.indexOf(mountPoint) === 0) {
path = path.substr(mountPoint.length > 1 ? mountPoint.length : 0);
if (path === '') {

@@ -72,7 +76,8 @@ path = '/';

}
err.path = realPath;
return err;
};
MountableFileSystem.prototype.rename = function (oldPath, newPath, cb) {
var fs1_rv = this._get_fs(oldPath);
var fs2_rv = this._get_fs(newPath);
var fs1_rv = this._getFs(oldPath);
var fs2_rv = this._getFs(newPath);
if (fs1_rv.fs === fs2_rv.fs) {

@@ -99,4 +104,4 @@ var _this = this;

MountableFileSystem.prototype.renameSync = function (oldPath, newPath) {
var fs1_rv = this._get_fs(oldPath);
var fs2_rv = this._get_fs(newPath);
var fs1_rv = this._getFs(oldPath);
var fs2_rv = this._getFs(newPath);
if (fs1_rv.fs === fs2_rv.fs) {

@@ -126,4 +131,5 @@ try {

}
var self = this;
var path = args[0];
var rv = this._get_fs(path);
var rv = self._getFs(path);
args[0] = rv.path;

@@ -134,3 +140,3 @@ try {

catch (e) {
this.standardizeError(e, rv.path, path);
self.standardizeError(e, rv.path, path);
throw e;

@@ -146,8 +152,8 @@ }

}
var self = this;
var path = args[0];
var rv = this._get_fs(path);
var rv = self._getFs(path);
args[0] = rv.path;
if (typeof args[args.length - 1] === 'function') {
var cb = args[args.length - 1];
var _this = this;
args[args.length - 1] = function () {

@@ -159,3 +165,3 @@ var args = [];

if (args.length > 0 && args[0] instanceof api_error_1.ApiError) {
_this.standardizeError(args[0], rv.path, path);
self.standardizeError(args[0], rv.path, path);
}

@@ -183,2 +189,2 @@ cb.apply(null, args);

}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTW91bnRhYmxlRmlsZVN5c3RlbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iYWNrZW5kL01vdW50YWJsZUZpbGVTeXN0ZW0udHMiXSwibmFtZXMiOlsiTW91bnRhYmxlRmlsZVN5c3RlbSIsIk1vdW50YWJsZUZpbGVTeXN0ZW0uY29uc3RydWN0b3IiLCJNb3VudGFibGVGaWxlU3lzdGVtLm1vdW50IiwiTW91bnRhYmxlRmlsZVN5c3RlbS51bW91bnQiLCJNb3VudGFibGVGaWxlU3lzdGVtLl9nZXRfZnMiLCJNb3VudGFibGVGaWxlU3lzdGVtLmdldE5hbWUiLCJNb3VudGFibGVGaWxlU3lzdGVtLmlzQXZhaWxhYmxlIiwiTW91bnRhYmxlRmlsZVN5c3RlbS5kaXNrU3BhY2UiLCJNb3VudGFibGVGaWxlU3lzdGVtLmlzUmVhZE9ubHkiLCJNb3VudGFibGVGaWxlU3lzdGVtLnN1cHBvcnRzTGlua3MiLCJNb3VudGFibGVGaWxlU3lzdGVtLnN1cHBvcnRzUHJvcHMiLCJNb3VudGFibGVGaWxlU3lzdGVtLnN1cHBvcnRzU3luY2giLCJNb3VudGFibGVGaWxlU3lzdGVtLnN0YW5kYXJkaXplRXJyb3IiLCJNb3VudGFibGVGaWxlU3lzdGVtLnJlbmFtZSIsIk1vdW50YWJsZUZpbGVTeXN0ZW0ucmVuYW1lU3luYyIsImRlZmluZUZjbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxJQUFPLFdBQVcsV0FBVyxxQkFBcUIsQ0FBQyxDQUFDO0FBQ3BELHlCQUErQixZQUFZLENBQUMsQ0FBQTtBQUM1QywwQkFBa0MsbUJBQW1CLENBQUMsQ0FBQTtBQUN0RCxJQUFPLEVBQUUsV0FBVyxpQkFBaUIsQ0FBQyxDQUFDO0FBV3ZDO0lBQWlEQSx1Q0FBMEJBO0lBR3pFQTtRQUNFQyxpQkFBT0EsQ0FBQ0E7UUFDUkEsSUFBSUEsQ0FBQ0EsTUFBTUEsR0FBR0EsRUFBRUEsQ0FBQ0E7UUFHakJBLElBQUlBLENBQUNBLE1BQU1BLEdBQUdBLElBQUlBLHFC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QUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUN6QyxJQUFJLElBQUksR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkIsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNyQyxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxtQkFBbUIsQ0FBQyxTQUFVLENBQUMsTUFBTSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3pFLG1CQUFtQixDQUFDLFNBQVUsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNuRyxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmaWxlX3N5c3RlbSA9IHJlcXVpcmUoJy4uL2NvcmUvZmlsZV9zeXN0ZW0nKTtcbmltcG9ydCBJbk1lbW9yeUZpbGVTeXN0ZW0gZnJvbSAnLi9Jbk1lbW9yeSc7XG5pbXBvcnQge0FwaUVycm9yLCBFcnJvckNvZGV9IGZyb20gJy4uL2NvcmUvYXBpX2Vycm9yJztcbmltcG9ydCBmcyA9IHJlcXVpcmUoJy4uL2NvcmUvbm9kZV9mcycpO1xuXG4vKipcbiAqIFRoZSBNb3VudGFibGVGaWxlU3lzdGVtIGFsbG93cyB5b3UgdG8gbW91bnQgbXVsdGlwbGUgYmFja2VuZCB0eXBlcyBvclxuICogbXVsdGlwbGUgaW5zdGFudGlhdGlvbnMgb2YgdGhlIHNhbWUgYmFja2VuZCBpbnRvIGEgc2luZ2xlIGZpbGUgc3lzdGVtIHRyZWUuXG4gKiBUaGUgZmlsZSBzeXN0ZW1zIGRvIG5vdCBuZWVkIHRvIGtub3cgYWJvdXQgZWFjaCBvdGhlcjsgYWxsIGludGVyYWN0aW9ucyBhcmVcbiAqIGF1dG9tYXRpY2FsbHkgZmFjaWxpdGF0ZWQgdGhyb3VnaCB0aGlzIGludGVyZmFjZS5cbiAqXG4gKiBGb3IgZXhhbXBsZSwgaWYgYSBmaWxlIHN5c3RlbSBpcyBtb3VudGVkIGF0IC9tbnQvYmxhaCwgYW5kIGEgcmVxdWVzdCBjYW1lIGluXG4gKiBmb3IgL21udC9ibGFoL2Zvby50eHQsIHRoZSBmaWxlIHN5c3RlbSB3b3VsZCBzZWUgYSByZXF1ZXN0IGZvciAvZm9vLnR4dC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTW91bnRhYmxlRmlsZVN5c3RlbSBleHRlbmRzIGZpbGVfc3lzdGVtLkJhc2VGaWxlU3lzdGVtIGltcGxlbWVudHMgZmlsZV9zeXN0ZW0uRmlsZVN5c3RlbSB7XG4gIHByaXZhdGUgbW50TWFwOiB7W3BhdGg6IHN0cmluZ106IGZpbGVfc3lzdGVtLkZpbGVTeXN0ZW19O1xuICBwcml2YXRlIHJvb3RGczogZmlsZV9zeXN0ZW0uRmlsZVN5c3RlbTtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLm1udE1hcCA9IHt9O1xuICAgIC8vIFRoZSBJbk1lbW9yeSBmaWxlIHN5c3RlbSBzZXJ2ZXMgcHVyZWx5IHRvIHByb3ZpZGUgZGlyZWN0b3J5IGxpc3RpbmdzIGZvclxuICAgIC8vIG1vdW50ZWQgZmlsZSBzeXN0ZW1zLlxuICAgIHRoaXMucm9vdEZzID0gbmV3IEluTWVtb3J5RmlsZVN5c3RlbSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1vdW50cyB0aGUgZmlsZSBzeXN0ZW0gYXQgdGhlIGdpdmVuIG1vdW50IHBvaW50LlxuICAgKi9cbiAgcHVibGljIG1vdW50KG1udF9wdDogc3RyaW5nLCBmczogZmlsZV9zeXN0ZW0uRmlsZVN5c3RlbSk6IHZvaWQge1xuICAgIGlmICh0aGlzLm1udE1hcFttbnRfcHRdKSB7XG4gICAgICB0aHJvdyBuZXcgQXBpRXJyb3IoRXJyb3JDb2RlLkVJTlZBTCwgXCJNb3VudCBwb2ludCBcIiArIG1udF9wdCArIFwiIGlzIGFscmVhZHkgdGFrZW4uXCIpO1xuICAgIH1cbiAgICAvLyBAdG9kbyBFbnN1cmUgbmV3IG1vdW50IHBhdGggaXMgbm90IHN1YnN1bWVkIGJ5IGFjdGl2ZSBtb3VudCBwYXRocy5cbiAgICB0aGlzLnJvb3RGcy5ta2RpclN5bmMobW50X3B0LCAweDFmZik7XG4gICAgdGhpcy5tbnRNYXBbbW50X3B0XSA9IGZzO1xuICB9XG5cbiAgcHVibGljIHVtb3VudChtbnRfcHQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5tbnRNYXBbbW50X3B0XSkge1xuICAgICAgdGhyb3cgbmV3IEFwaUVycm9yKEVycm9yQ29kZS5FSU5WQUwsIFwiTW91bnQgcG9pbnQgXCIgKyBtbnRfcHQgKyBcIiBpcyBhbHJlYWR5IHVubW91bnRlZC5cIik7XG4gICAgfVxuICAgIGRlbGV0ZSB0aGlzLm1udE1hcFttbnRfcHRdO1xuICAgIHRoaXMucm9vdEZzLnJtZGlyU3luYyhtbnRfcHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGZpbGUgc3lzdGVtIHRoYXQgdGhlIHBhdGggcG9pbnRzIHRvLlxuICAgKi9cbiAgcHVibGljIF9nZXRfZnMocGF0aDogc3RyaW5nKToge2ZzOiBmaWxlX3N5c3RlbS5GaWxlU3lzdGVtOyBwYXRoOiBzdHJpbmd9IHtcbiAgICBmb3IgKHZhciBtbnRfcHQgaW4gdGhpcy5tbnRNYXApIHtcbiAgICAgIHZhciBmcyA9IHRoaXMubW50TWFwW21udF9wdF07XG4gICAgICBpZiAocGF0aC5pbmRleE9mKG1udF9wdCkgPT09IDApIHtcbiAgICAgICAgcGF0aCA9IHBhdGguc3Vic3RyKG1udF9wdC5sZW5ndGggPiAxID8gbW50X3B0Lmxlbmd0aCA6IDApO1xuICAgICAgICBpZiAocGF0aCA9PT0gJycpIHtcbiAgICAgICAgICBwYXRoID0gJy8nO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7ZnM6IGZzLCBwYXRoOiBwYXRofTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gUXVlcnkgb3VyIHJvb3QgZmlsZSBzeXN0ZW0uXG4gICAgcmV0dXJuIHtmczogdGhpcy5yb290RnMsIHBhdGg6IHBhdGh9O1xuICB9XG5cbiAgLy8gR2xvYmFsIGluZm9ybWF0aW9uIG1ldGhvZHNcblxuICBwdWJsaWMgZ2V0TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnTW91bnRhYmxlRmlsZVN5c3RlbSc7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGlzQXZhaWxhYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHVibGljIGRpc2tTcGFjZShwYXRoOiBzdHJpbmcsIGNiOiAodG90YWw6IG51bWJlciwgZnJlZTogbnVtYmVyKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgY2IoMCwgMCk7XG4gIH1cblxuICBwdWJsaWMgaXNSZWFkT25seSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgc3VwcG9ydHNMaW5rcygpOiBib29sZWFuIHtcbiAgICAvLyBJJ20gbm90IHJlYWR5IGZvciBjcm9zcy1GUyBsaW5rcyB5ZXQuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIHN1cHBvcnRzUHJvcHMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIHN1cHBvcnRzU3luY2goKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogRml4ZXMgdXAgZXJyb3IgbWVzc2FnZXMgc28gdGhleSBtZW50aW9uIHRoZSBtb3VudGVkIGZpbGUgbG9jYXRpb24gcmVsYXRpdmVcbiAgICogdG8gdGhlIE1GUyByb290LCBub3QgdG8gdGhlIHBhcnRpY3VsYXIgRlMncyByb290LlxuICAgKiBNdXRhdGVzIHRoZSBpbnB1dCBlcnJvciwgYW5kIHJldHVybnMgaXQuXG4gICAqL1xuICBwcml2YXRlIHN0YW5kYXJkaXplRXJyb3IoZXJyOiBBcGlFcnJvciwgcGF0aDogc3RyaW5nLCByZWFsUGF0aDogc3RyaW5nKTogQXBpRXJyb3Ige1xuICAgIHZhciBpbmRleDogbnVtYmVyO1xuICAgIGlmICgtMSAhPT0gKGluZGV4ID0gZXJyLm1lc3NhZ2UuaW5kZXhPZihwYXRoKSkpIHtcbiAgICAgIGVyci5tZXNzYWdlID0gZXJyLm1lc3NhZ2Uuc3Vic3RyKDAsIGluZGV4KSArIHJlYWxQYXRoICsgZXJyLm1lc3NhZ2Uuc3Vic3RyKGluZGV4ICsgcGF0aC5sZW5ndGgpO1xuICAgIH1cbiAgICByZXR1cm4gZXJyO1xuICB9XG5cbiAgLy8gVGhlIGZvbGxvd2luZyBtZXRob2RzIGludm9sdmUgbXVsdGlwbGUgZmlsZSBzeXN0ZW1zLCBhbmQgdGh1cyBoYXZlIGN1c3RvbVxuICAvLyBsb2dpYy5cbiAgLy8gTm90ZSB0aGF0IHdlIGdvIHRocm91Z2ggdGhlIE5vZGUgQVBJIHRvIHVzZSBpdHMgcm9idXN0IGRlZmF1bHQgYXJndW1lbnRcbiAgLy8gcHJvY2Vzc2luZy5cblxuICBwdWJsaWMgcmVuYW1lKG9sZFBhdGg6IHN0cmluZywgbmV3UGF0aDogc3RyaW5nLCBjYjogKGU/OiBBcGlFcnJvcikgPT4gdm9pZCk6IHZvaWQge1xuICAgIC8vIFNjZW5hcmlvIDE6IG9sZCBhbmQgbmV3IGFyZSBvbiBzYW1lIEZTLlxuICAgIHZhciBmczFfcnYgPSB0aGlzLl9nZXRfZnMob2xkUGF0aCk7XG4gICAgdmFyIGZzMl9ydiA9IHRoaXMuX2dldF9mcyhuZXdQYXRoKTtcbiAgICBpZiAoZnMxX3J2LmZzID09PSBmczJfcnYuZnMpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICByZXR1cm4gZnMxX3J2LmZzLnJlbmFtZShmczFfcnYucGF0aCwgZnMyX3J2LnBhdGgsIGZ1bmN0aW9uKGU/OiBBcGlFcnJvcikge1xuICAgICAgICBpZiAoZSkgX3RoaXMuc3RhbmRhcmRpemVFcnJvcihfdGhpcy5zdGFuZGFyZGl6ZUVycm9yKGUsIGZzMV9ydi5wYXRoLCBvbGRQYXRoKSwgZnMyX3J2LnBhdGgsIG5ld1BhdGgpO1xuICAgICAgICBjYihlKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFNjZW5hcmlvIDI6IERpZmZlcmVudCBmaWxlIHN5c3RlbXMuXG4gICAgLy8gUmVhZCBvbGQgZmlsZSwgd3JpdGUgbmV3IGZpbGUsIGRlbGV0ZSBvbGQgZmlsZS5cbiAgICByZXR1cm4gZnMucmVhZEZpbGUob2xkUGF0aCwgZnVuY3Rpb24oZXJyOiBBcGlFcnJvciwgZGF0YT86IGFueSkge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICByZXR1cm4gY2IoZXJyKTtcbiAgICAgIH1cbiAgICAgIGZzLndyaXRlRmlsZShuZXdQYXRoLCBkYXRhLCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJldHVybiBjYihlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGZzLnVubGluayhvbGRQYXRoLCBjYik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyByZW5hbWVTeW5jKG9sZFBhdGg6IHN0cmluZywgbmV3UGF0aDogc3RyaW5nKTogdm9pZCB7XG4gICAgLy8gU2NlbmFyaW8gMTogb2xkIGFuZCBuZXcgYXJlIG9uIHNhbWUgRlMuXG4gICAgdmFyIGZzMV9ydiA9IHRoaXMuX2dldF9mcyhvbGRQYXRoKTtcbiAgICB2YXIgZnMyX3J2ID0gdGhpcy5fZ2V0X2ZzKG5ld1BhdGgpO1xuICAgIGlmIChmczFfcnYuZnMgPT09IGZzMl9ydi5mcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGZzMV9ydi5mcy5yZW5hbWVTeW5jKGZzMV9ydi5wYXRoLCBmczJfcnYucGF0aCk7XG4gICAgICB9IGNhdGNoKGUpIHtcbiAgICAgICAgdGhpcy5zdGFuZGFyZGl6ZUVycm9yKHRoaXMuc3RhbmRhcmRpemVFcnJvcihlLCBmczFfcnYucGF0aCwgb2xkUGF0aCksIGZzMl9ydi5wYXRoLCBuZXdQYXRoKTtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gU2NlbmFyaW8gMjogRGlmZmVyZW50IGZpbGUgc3lzdGVtcy5cbiAgICB2YXIgZGF0YSA9IGZzLnJlYWRGaWxlU3luYyhvbGRQYXRoKTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKG5ld1BhdGgsIGRhdGEpO1xuICAgIHJldHVybiBmcy51bmxpbmtTeW5jKG9sZFBhdGgpO1xuICB9XG59XG5cbi8qKlxuICogVHJpY2t5OiBEZWZpbmUgYWxsIG9mIHRoZSBmdW5jdGlvbnMgdGhhdCBtZXJlbHkgZm9yd2FyZCBhcmd1bWVudHMgdG8gdGhlXG4gKiByZWxldmFudCBmaWxlIHN5c3RlbSwgb3IgcmV0dXJuL3Rocm93IGFuIGVycm9yLlxuICogVGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIGZhY3QgdGhhdCB0aGUgKmZpcnN0KiBhcmd1bWVudCBpcyBhbHdheXMgdGhlIHBhdGgsIGFuZFxuICogdGhlICpsYXN0KiBpcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gKGlmIGFzeW5jKS5cbiAqL1xuZnVuY3Rpb24gZGVmaW5lRmNuKG5hbWU6IHN0cmluZywgaXNTeW5jOiBib29sZWFuLCBudW1BcmdzOiBudW1iZXIpOiAoLi4uYXJnczogYW55W10pID0+IGFueSB7XG4gIGlmIChpc1N5bmMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oLi4uYXJnczogYW55W10pIHtcbiAgICAgIHZhciBwYXRoID0gYXJnc1swXTtcbiAgICAgIHZhciBydiA9IHRoaXMuX2dldF9mcyhwYXRoKTtcbiAgICAgIGFyZ3NbMF0gPSBydi5wYXRoO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHJ2LmZzW25hbWVdLmFwcGx5KHJ2LmZzLCBhcmdzKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhpcy5zdGFuZGFyZGl6ZUVycm9yKGUsIHJ2LnBhdGgsIHBhdGgpO1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgICB2YXIgcGF0aCA9IGFyZ3NbMF07XG4gICAgICB2YXIgcnYgPSB0aGlzLl9nZXRfZnMocGF0aCk7XG4gICAgICBhcmdzWzBdID0gcnYucGF0aDtcbiAgICAgIGlmICh0eXBlb2YgYXJnc1thcmdzLmxlbmd0aC0xXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgY2IgPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV07XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGFyZ3NbYXJncy5sZW5ndGggLSAxXSA9IGZ1bmN0aW9uKC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMCAmJiBhcmdzWzBdIGluc3RhbmNlb2YgQXBpRXJyb3IpIHtcbiAgICAgICAgICAgIF90aGlzLnN0YW5kYXJkaXplRXJyb3IoYXJnc1swXSwgcnYucGF0aCwgcGF0aCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNiLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcnYuZnNbbmFtZV0uYXBwbHkocnYuZnMsIGFyZ3MpO1xuICAgIH07XG4gIH1cbn1cblxudmFyIGZzQ21kTWFwID0gW1xuICAgLy8gMSBhcmcgZnVuY3Rpb25zXG4gICBbJ3JlYWRkaXInLCAnZXhpc3RzJywgJ3VubGluaycsICdybWRpcicsICdyZWFkbGluayddLFxuICAgLy8gMiBhcmcgZnVuY3Rpb25zXG4gICBbJ3N0YXQnLCAnbWtkaXInLCAncmVhbHBhdGgnLCAndHJ1bmNhdGUnXSxcbiAgIC8vIDMgYXJnIGZ1bmN0aW9uc1xuICAgWydvcGVuJywgJ3JlYWRGaWxlJywgJ2NobW9kJywgJ3V0aW1lcyddLFxuICAgLy8gNCBhcmcgZnVuY3Rpb25zXG4gICBbJ2Nob3duJ10sXG4gICAvLyA1IGFyZyBmdW5jdGlvbnNcbiAgIFsnd3JpdGVGaWxlJywgJ2FwcGVuZEZpbGUnXV07XG5cbmZvciAodmFyIGkgPSAwOyBpIDwgZnNDbWRNYXAubGVuZ3RoOyBpKyspIHtcbiAgdmFyIGNtZHMgPSBmc0NtZE1hcFtpXTtcbiAgZm9yICh2YXIgaiA9IDA7IGogPCBjbWRzLmxlbmd0aDsgaisrKSB7XG4gICAgdmFyIGZuTmFtZSA9IGNtZHNbal07XG4gICAgKDxhbnk+IE1vdW50YWJsZUZpbGVTeXN0ZW0ucHJvdG90eXBlKVtmbk5hbWVdID0gZGVmaW5lRmNuKGZuTmFtZSwgZmFsc2UsIGkgKyAxKTtcbiAgICAoPGFueT4gTW91bnRhYmxlRmlsZVN5c3RlbS5wcm90b3R5cGUpW2ZuTmFtZSArICdTeW5jJ10gPSBkZWZpbmVGY24oZm5OYW1lICsgJ1N5bmMnLCB0cnVlLCBpICsgMSk7XG4gIH1cbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTW91bnRhYmxlRmlsZVN5c3RlbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iYWNrZW5kL01vdW50YWJsZUZpbGVTeXN0ZW0udHMiXSwibmFtZXMiOlsiTW91bnRhYmxlRmlsZVN5c3RlbSIsIk1vdW50YWJsZUZpbGVTeXN0ZW0uY29uc3RydWN0b3IiLCJNb3VudGFibGVGaWxlU3lzdGVtLm1vdW50IiwiTW91bnRhYmxlRmlsZVN5c3RlbS51bW91bnQiLCJNb3VudGFibGVGaWxlU3lzdGVtLl9nZXRGcyIsIk1vdW50YWJsZUZpbGVTeXN0ZW0uZ2V0TmFtZSIsIk1vdW50YWJsZUZpbGVTeXN0ZW0uaXNBdmFpbGFibGUiLCJNb3VudGFibGVGaWxlU3lzdGVtLmRpc2tTcGFjZSIsIk1vdW50YWJsZUZpbGVTeXN0ZW0uaXNSZWFkT25seSIsIk1vdW50YWJsZUZpbGVTeXN0ZW0uc3VwcG9ydHNMaW5rcyIsIk1vdW50YWJsZUZpbGVTeXN0ZW0uc3VwcG9ydHNQcm9wcyIsIk1vdW50YWJsZUZpbGVTeXN0ZW0uc3VwcG9ydHNTeW5jaCIsIk1vdW50YWJsZUZpbGVTeXN0ZW0uc3RhbmRhcmRpemVFcnJvciIsIk1vdW50YWJsZUZpbGVTeXN0ZW0ucmVuYW1lIiwiTW91bnRhYmxlRmlsZVN5c3RlbS5yZW5hbWVTeW5jIiwiZGVmaW5lRmNuIl0sIm1hcHBpbmdzIjoiOzs7OztBQUFBLElBQU8sV0FBVyxXQUFXLHFCQUFxQixDQUFDLENBQUM7QUFDcEQseUJBQStCLFlBQVksQ0FBQyxDQUFBO0FBQzVDLDBCQUFrQyxtQkFBbUIsQ0FBQyxDQUFBO0FBQ3RELElBQU8sRUFBRSxXQUFXLGlCQUFpQixDQUFDLENBQUM7QUFFdkMscUJBQXlCLGNBQWMsQ0FBQyxDQUFBO0FBV3hDO0lBQWlEQSx1Q0FBMEJBO0lBR3pFQTtRQUNFQyxpQkFBT0EsQ0FBQ0E7UUFDUkEsSUFBSUEsQ0FBQ0EsTUFBTUEsR0FBR0EsRUFBRUEsQ0FBQ0E7UUFHakJBLElBQUlB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RSxPQUFPLEVBQUUsVUFBVSxDQUFDO0lBRXBELENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDO0lBRXpDLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDO0lBRXZDLENBQUMsT0FBTyxDQUFDO0lBRVQsQ0FBQyxXQUFXLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQztBQUVoQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ3pDLElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2QixHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ3JDLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLG1CQUFtQixDQUFDLFNBQVUsQ0FBQyxNQUFNLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDekUsbUJBQW1CLENBQUMsU0FBVSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxHQUFHLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ25HLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZpbGVfc3lzdGVtID0gcmVxdWlyZSgnLi4vY29yZS9maWxlX3N5c3RlbScpO1xuaW1wb3J0IEluTWVtb3J5RmlsZVN5c3RlbSBmcm9tICcuL0luTWVtb3J5JztcbmltcG9ydCB7QXBpRXJyb3IsIEVycm9yQ29kZX0gZnJvbSAnLi4vY29yZS9hcGlfZXJyb3InO1xuaW1wb3J0IGZzID0gcmVxdWlyZSgnLi4vY29yZS9ub2RlX2ZzJyk7XG5pbXBvcnQgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcbmltcG9ydCB7bWtkaXJwU3luY30gZnJvbSAnLi4vY29yZS91dGlsJztcblxuLyoqXG4gKiBUaGUgTW91bnRhYmxlRmlsZVN5c3RlbSBhbGxvd3MgeW91IHRvIG1vdW50IG11bHRpcGxlIGJhY2tlbmQgdHlwZXMgb3JcbiAqIG11bHRpcGxlIGluc3RhbnRpYXRpb25zIG9mIHRoZSBzYW1lIGJhY2tlbmQgaW50byBhIHNpbmdsZSBmaWxlIHN5c3RlbSB0cmVlLlxuICogVGhlIGZpbGUgc3lzdGVtcyBkbyBub3QgbmVlZCB0byBrbm93IGFib3V0IGVhY2ggb3RoZXI7IGFsbCBpbnRlcmFjdGlvbnMgYXJlXG4gKiBhdXRvbWF0aWNhbGx5IGZhY2lsaXRhdGVkIHRocm91Z2ggdGhpcyBpbnRlcmZhY2UuXG4gKlxuICogRm9yIGV4YW1wbGUsIGlmIGEgZmlsZSBzeXN0ZW0gaXMgbW91bnRlZCBhdCAvbW50L2JsYWgsIGFuZCBhIHJlcXVlc3QgY2FtZSBpblxuICogZm9yIC9tbnQvYmxhaC9mb28udHh0LCB0aGUgZmlsZSBzeXN0ZW0gd291bGQgc2VlIGEgcmVxdWVzdCBmb3IgL2Zvby50eHQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1vdW50YWJsZUZpbGVTeXN0ZW0gZXh0ZW5kcyBmaWxlX3N5c3RlbS5CYXNlRmlsZVN5c3RlbSBpbXBsZW1lbnRzIGZpbGVfc3lzdGVtLkZpbGVTeXN0ZW0ge1xuICBwcml2YXRlIG1udE1hcDoge1twYXRoOiBzdHJpbmddOiBmaWxlX3N5c3RlbS5GaWxlU3lzdGVtfTtcbiAgcHJpdmF0ZSByb290RnM6IGZpbGVfc3lzdGVtLkZpbGVTeXN0ZW07XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5tbnRNYXAgPSB7fTtcbiAgICAvLyBUaGUgSW5NZW1vcnkgZmlsZSBzeXN0ZW0gc2VydmVzIHB1cmVseSB0byBwcm92aWRlIGRpcmVjdG9yeSBsaXN0aW5ncyBmb3JcbiAgICAvLyBtb3VudGVkIGZpbGUgc3lzdGVtcy5cbiAgICB0aGlzLnJvb3RGcyA9IG5ldyBJbk1lbW9yeUZpbGVTeXN0ZW0oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNb3VudHMgdGhlIGZpbGUgc3lzdGVtIGF0IHRoZSBnaXZlbiBtb3VudCBwb2ludC5cbiAgICovXG4gIHB1YmxpYyBtb3VudChtb3VudFBvaW50OiBzdHJpbmcsIGZzOiBmaWxlX3N5c3RlbS5GaWxlU3lzdGVtKTogdm9pZCB7XG4gICAgaWYgKG1vdW50UG9pbnRbMF0gIT09ICcvJykge1xuICAgICAgbW91bnRQb2ludCA9IGAvJHttb3VudFBvaW50fWA7XG4gICAgfVxuICAgIGlmICh0aGlzLm1udE1hcFttb3VudFBvaW50XSkge1xuICAgICAgdGhyb3cgbmV3IEFwaUVycm9yKEVycm9yQ29kZS5FSU5WQUwsIFwiTW91bnQgcG9pbnQgXCIgKyBtb3VudFBvaW50ICsgXCIgaXMgYWxyZWFkeSB0YWtlbi5cIik7XG4gICAgfVxuICAgIG1rZGlycFN5bmMobW91bnRQb2ludCwgMHgxZmYsIHRoaXMucm9vdEZzKTtcbiAgICAvLyBAdG9kbyBFbnN1cmUgbmV3IG1vdW50IHBhdGggaXMgbm90IHN1YnN1bWVkIGJ5IGFjdGl2ZSBtb3VudCBwYXRocy5cbiAgICB0aGlzLm1udE1hcFttb3VudFBvaW50XSA9IGZzO1xuICB9XG5cbiAgcHVibGljIHVtb3VudChtb3VudFBvaW50OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMubW50TWFwW21vdW50UG9pbnRdKSB7XG4gICAgICB0aHJvdyBuZXcgQXBpRXJyb3IoRXJyb3JDb2RlLkVJTlZBTCwgXCJNb3VudCBwb2ludCBcIiArIG1vdW50UG9pbnQgKyBcIiBpcyBhbHJlYWR5IHVubW91bnRlZC5cIik7XG4gICAgfVxuICAgIGRlbGV0ZSB0aGlzLm1udE1hcFttb3VudFBvaW50XTtcbiAgICB0aGlzLnJvb3RGcy5ybWRpclN5bmMobW91bnRQb2ludCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZmlsZSBzeXN0ZW0gdGhhdCB0aGUgcGF0aCBwb2ludHMgdG8uXG4gICAqL1xuICBwdWJsaWMgX2dldEZzKHBhdGg6IHN0cmluZyk6IHtmczogZmlsZV9zeXN0ZW0uRmlsZVN5c3RlbTsgcGF0aDogc3RyaW5nfSB7XG4gICAgZm9yICh2YXIgbW91bnRQb2ludCBpbiB0aGlzLm1udE1hcCkge1xuICAgICAgdmFyIGZzID0gdGhpcy5tbnRNYXBbbW91bnRQb2ludF07XG4gICAgICBpZiAocGF0aC5pbmRleE9mKG1vdW50UG9pbnQpID09PSAwKSB7XG4gICAgICAgIHBhdGggPSBwYXRoLnN1YnN0cihtb3VudFBvaW50Lmxlbmd0aCA+IDEgPyBtb3VudFBvaW50Lmxlbmd0aCA6IDApO1xuICAgICAgICBpZiAocGF0aCA9PT0gJycpIHtcbiAgICAgICAgICBwYXRoID0gJy8nO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7ZnM6IGZzLCBwYXRoOiBwYXRofTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gUXVlcnkgb3VyIHJvb3QgZmlsZSBzeXN0ZW0uXG4gICAgcmV0dXJuIHtmczogdGhpcy5yb290RnMsIHBhdGg6IHBhdGh9O1xuICB9XG5cbiAgLy8gR2xvYmFsIGluZm9ybWF0aW9uIG1ldGhvZHNcblxuICBwdWJsaWMgZ2V0TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnTW91bnRhYmxlRmlsZVN5c3RlbSc7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGlzQXZhaWxhYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHVibGljIGRpc2tTcGFjZShwYXRoOiBzdHJpbmcsIGNiOiAodG90YWw6IG51bWJlciwgZnJlZTogbnVtYmVyKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgY2IoMCwgMCk7XG4gIH1cblxuICBwdWJsaWMgaXNSZWFkT25seSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgc3VwcG9ydHNMaW5rcygpOiBib29sZWFuIHtcbiAgICAvLyBJJ20gbm90IHJlYWR5IGZvciBjcm9zcy1GUyBsaW5rcyB5ZXQuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIHN1cHBvcnRzUHJvcHMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIHN1cHBvcnRzU3luY2goKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogRml4ZXMgdXAgZXJyb3IgbWVzc2FnZXMgc28gdGhleSBtZW50aW9uIHRoZSBtb3VudGVkIGZpbGUgbG9jYXRpb24gcmVsYXRpdmVcbiAgICogdG8gdGhlIE1GUyByb290LCBub3QgdG8gdGhlIHBhcnRpY3VsYXIgRlMncyByb290LlxuICAgKiBNdXRhdGVzIHRoZSBpbnB1dCBlcnJvciwgYW5kIHJldHVybnMgaXQuXG4gICAqL1xuICBwcml2YXRlIHN0YW5kYXJkaXplRXJyb3IoZXJyOiBBcGlFcnJvciwgcGF0aDogc3RyaW5nLCByZWFsUGF0aDogc3RyaW5nKTogQXBpRXJyb3Ige1xuICAgIHZhciBpbmRleDogbnVtYmVyO1xuICAgIGlmICgtMSAhPT0gKGluZGV4ID0gZXJyLm1lc3NhZ2UuaW5kZXhPZihwYXRoKSkpIHtcbiAgICAgIGVyci5tZXNzYWdlID0gZXJyLm1lc3NhZ2Uuc3Vic3RyKDAsIGluZGV4KSArIHJlYWxQYXRoICsgZXJyLm1lc3NhZ2Uuc3Vic3RyKGluZGV4ICsgcGF0aC5sZW5ndGgpO1xuICAgIH1cbiAgICBlcnIucGF0aCA9IHJlYWxQYXRoO1xuICAgIHJldHVybiBlcnI7XG4gIH1cblxuICAvLyBUaGUgZm9sbG93aW5nIG1ldGhvZHMgaW52b2x2ZSBtdWx0aXBsZSBmaWxlIHN5c3RlbXMsIGFuZCB0aHVzIGhhdmUgY3VzdG9tXG4gIC8vIGxvZ2ljLlxuICAvLyBOb3RlIHRoYXQgd2UgZ28gdGhyb3VnaCB0aGUgTm9kZSBBUEkgdG8gdXNlIGl0cyByb2J1c3QgZGVmYXVsdCBhcmd1bWVudFxuICAvLyBwcm9jZXNzaW5nLlxuXG4gIHB1YmxpYyByZW5hbWUob2xkUGF0aDogc3RyaW5nLCBuZXdQYXRoOiBzdHJpbmcsIGNiOiAoZT86IEFwaUVycm9yKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgLy8gU2NlbmFyaW8gMTogb2xkIGFuZCBuZXcgYXJlIG9uIHNhbWUgRlMuXG4gICAgdmFyIGZzMV9ydiA9IHRoaXMuX2dldEZzKG9sZFBhdGgpO1xuICAgIHZhciBmczJfcnYgPSB0aGlzLl9nZXRGcyhuZXdQYXRoKTtcbiAgICBpZiAoZnMxX3J2LmZzID09PSBmczJfcnYuZnMpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICByZXR1cm4gZnMxX3J2LmZzLnJlbmFtZShmczFfcnYucGF0aCwgZnMyX3J2LnBhdGgsIGZ1bmN0aW9uKGU/OiBBcGlFcnJvcikge1xuICAgICAgICBpZiAoZSkgX3RoaXMuc3RhbmRhcmRpemVFcnJvcihfdGhpcy5zdGFuZGFyZGl6ZUVycm9yKGUsIGZzMV9ydi5wYXRoLCBvbGRQYXRoKSwgZnMyX3J2LnBhdGgsIG5ld1BhdGgpO1xuICAgICAgICBjYihlKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFNjZW5hcmlvIDI6IERpZmZlcmVudCBmaWxlIHN5c3RlbXMuXG4gICAgLy8gUmVhZCBvbGQgZmlsZSwgd3JpdGUgbmV3IGZpbGUsIGRlbGV0ZSBvbGQgZmlsZS5cbiAgICByZXR1cm4gZnMucmVhZEZpbGUob2xkUGF0aCwgZnVuY3Rpb24oZXJyOiBBcGlFcnJvciwgZGF0YT86IGFueSkge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICByZXR1cm4gY2IoZXJyKTtcbiAgICAgIH1cbiAgICAgIGZzLndyaXRlRmlsZShuZXdQYXRoLCBkYXRhLCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJldHVybiBjYihlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGZzLnVubGluayhvbGRQYXRoLCBjYik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyByZW5hbWVTeW5jKG9sZFBhdGg6IHN0cmluZywgbmV3UGF0aDogc3RyaW5nKTogdm9pZCB7XG4gICAgLy8gU2NlbmFyaW8gMTogb2xkIGFuZCBuZXcgYXJlIG9uIHNhbWUgRlMuXG4gICAgdmFyIGZzMV9ydiA9IHRoaXMuX2dldEZzKG9sZFBhdGgpO1xuICAgIHZhciBmczJfcnYgPSB0aGlzLl9nZXRGcyhuZXdQYXRoKTtcbiAgICBpZiAoZnMxX3J2LmZzID09PSBmczJfcnYuZnMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBmczFfcnYuZnMucmVuYW1lU3luYyhmczFfcnYucGF0aCwgZnMyX3J2LnBhdGgpO1xuICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgIHRoaXMuc3RhbmRhcmRpemVFcnJvcih0aGlzLnN0YW5kYXJkaXplRXJyb3IoZSwgZnMxX3J2LnBhdGgsIG9sZFBhdGgpLCBmczJfcnYucGF0aCwgbmV3UGF0aCk7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIFNjZW5hcmlvIDI6IERpZmZlcmVudCBmaWxlIHN5c3RlbXMuXG4gICAgdmFyIGRhdGEgPSBmcy5yZWFkRmlsZVN5bmMob2xkUGF0aCk7XG4gICAgZnMud3JpdGVGaWxlU3luYyhuZXdQYXRoLCBkYXRhKTtcbiAgICByZXR1cm4gZnMudW5saW5rU3luYyhvbGRQYXRoKTtcbiAgfVxufVxuXG4vKipcbiAqIFRyaWNreTogRGVmaW5lIGFsbCBvZiB0aGUgZnVuY3Rpb25zIHRoYXQgbWVyZWx5IGZvcndhcmQgYXJndW1lbnRzIHRvIHRoZVxuICogcmVsZXZhbnQgZmlsZSBzeXN0ZW0sIG9yIHJldHVybi90aHJvdyBhbiBlcnJvci5cbiAqIFRha2UgYWR2YW50YWdlIG9mIHRoZSBmYWN0IHRoYXQgdGhlICpmaXJzdCogYXJndW1lbnQgaXMgYWx3YXlzIHRoZSBwYXRoLCBhbmRcbiAqIHRoZSAqbGFzdCogaXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIChpZiBhc3luYykuXG4gKi9cbmZ1bmN0aW9uIGRlZmluZUZjbihuYW1lOiBzdHJpbmcsIGlzU3luYzogYm9vbGVhbiwgbnVtQXJnczogbnVtYmVyKTogKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnkge1xuICBpZiAoaXNTeW5jKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgICBsZXQgc2VsZjogTW91bnRhYmxlRmlsZVN5c3RlbSA9IHRoaXM7XG4gICAgICB2YXIgcGF0aCA9IGFyZ3NbMF07XG4gICAgICB2YXIgcnYgPSBzZWxmLl9nZXRGcyhwYXRoKTtcbiAgICAgIGFyZ3NbMF0gPSBydi5wYXRoO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHJ2LmZzW25hbWVdLmFwcGx5KHJ2LmZzLCBhcmdzKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgKDxhbnk+IHNlbGYpLnN0YW5kYXJkaXplRXJyb3IoZSwgcnYucGF0aCwgcGF0aCk7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oLi4uYXJnczogYW55W10pIHtcbiAgICAgIGxldCBzZWxmOiBNb3VudGFibGVGaWxlU3lzdGVtID0gdGhpcztcbiAgICAgIHZhciBwYXRoID0gYXJnc1swXTtcbiAgICAgIHZhciBydiA9IHNlbGYuX2dldEZzKHBhdGgpO1xuICAgICAgYXJnc1swXSA9IHJ2LnBhdGg7XG4gICAgICBpZiAodHlwZW9mIGFyZ3NbYXJncy5sZW5ndGgtMV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdmFyIGNiID0gYXJnc1thcmdzLmxlbmd0aCAtIDFdO1xuICAgICAgICBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPSBmdW5jdGlvbiguLi5hcmdzOiBhbnlbXSkge1xuICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDAgJiYgYXJnc1swXSBpbnN0YW5jZW9mIEFwaUVycm9yKSB7XG4gICAgICAgICAgICAoPGFueT4gc2VsZikuc3RhbmRhcmRpemVFcnJvcihhcmdzWzBdLCBydi5wYXRoLCBwYXRoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2IuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBydi5mc1tuYW1lXS5hcHBseShydi5mcywgYXJncyk7XG4gICAgfTtcbiAgfVxufVxuXG52YXIgZnNDbWRNYXAgPSBbXG4gICAvLyAxIGFyZyBmdW5jdGlvbnNcbiAgIFsncmVhZGRpcicsICdleGlzdHMnLCAndW5saW5rJywgJ3JtZGlyJywgJ3JlYWRsaW5rJ10sXG4gICAvLyAyIGFyZyBmdW5jdGlvbnNcbiAgIFsnc3RhdCcsICdta2RpcicsICdyZWFscGF0aCcsICd0cnVuY2F0ZSddLFxuICAgLy8gMyBhcmcgZnVuY3Rpb25zXG4gICBbJ29wZW4nLCAncmVhZEZpbGUnLCAnY2htb2QnLCAndXRpbWVzJ10sXG4gICAvLyA0IGFyZyBmdW5jdGlvbnNcbiAgIFsnY2hvd24nXSxcbiAgIC8vIDUgYXJnIGZ1bmN0aW9uc1xuICAgWyd3cml0ZUZpbGUnLCAnYXBwZW5kRmlsZSddXTtcblxuZm9yICh2YXIgaSA9IDA7IGkgPCBmc0NtZE1hcC5sZW5ndGg7IGkrKykge1xuICB2YXIgY21kcyA9IGZzQ21kTWFwW2ldO1xuICBmb3IgKHZhciBqID0gMDsgaiA8IGNtZHMubGVuZ3RoOyBqKyspIHtcbiAgICB2YXIgZm5OYW1lID0gY21kc1tqXTtcbiAgICAoPGFueT4gTW91bnRhYmxlRmlsZVN5c3RlbS5wcm90b3R5cGUpW2ZuTmFtZV0gPSBkZWZpbmVGY24oZm5OYW1lLCBmYWxzZSwgaSArIDEpO1xuICAgICg8YW55PiBNb3VudGFibGVGaWxlU3lzdGVtLnByb3RvdHlwZSlbZm5OYW1lICsgJ1N5bmMnXSA9IGRlZmluZUZjbihmbk5hbWUgKyAnU3luYycsIHRydWUsIGkgKyAxKTtcbiAgfVxufVxuIl19

@@ -6,5 +6,10 @@ var FS_1 = require('./FS');

Object.keys(FSProto).forEach(function (key) {
_fsMock[key] = function () {
return fs[key].apply(fs, arguments);
};
if (typeof fs[key] === 'function') {
_fsMock[key] = function () {
return fs[key].apply(fs, arguments);
};
}
else {
_fsMock[key] = fs[key];
}
});

@@ -19,2 +24,2 @@ _fsMock['changeFSModule'] = function (newFs) {

module.exports = _fsMock;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZV9mcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb3JlL25vZGVfZnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbUJBQXNDLE1BQU0sQ0FBQyxDQUFBO0FBVzdDLElBQUksRUFBRSxHQUFHLElBQUksWUFBRSxFQUFFLENBQUM7QUFDbEIsSUFBSSxPQUFPLEdBQW1CLEVBQUUsQ0FBQztBQUVqQyxJQUFJLE9BQU8sR0FBRyxZQUFFLENBQUMsU0FBUyxDQUFDO0FBQzNCLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQUMsR0FBRztJQUMvQixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUc7UUFDYixNQUFNLENBQWEsRUFBRSxDQUFDLEdBQUcsQ0FBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDbkQsQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDLENBQUM7QUFFSCxPQUFPLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxVQUFTLEtBQVM7SUFDNUMsRUFBRSxHQUFHLEtBQUssQ0FBQztBQUNiLENBQUMsQ0FBQTtBQUNELE9BQU8sQ0FBQyxhQUFhLENBQUMsR0FBRztJQUN2QixNQUFNLENBQUMsRUFBRSxDQUFDO0FBQ1osQ0FBQyxDQUFBO0FBQ0QsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLFlBQUUsQ0FBQztBQUVuQixpQkFBUyxPQUFPLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2RlZmF1bHQgYXMgRlMsIEZTTW9kdWxlfSBmcm9tICcuL0ZTJztcbmltcG9ydCB7RmlsZVN5c3RlbX0gZnJvbSAnLi9maWxlX3N5c3RlbSc7XG5pbXBvcnQge0FwaUVycm9yfSBmcm9tICcuL2FwaV9lcnJvcic7XG5pbXBvcnQgU3RhdHMgZnJvbSAnLi9ub2RlX2ZzX3N0YXRzJztcblxuLy8gTWFudWFsbHkgZXhwb3J0IHRoZSBpbmRpdmlkdWFsIHB1YmxpYyBmdW5jdGlvbnMgb2YgZnMuXG4vLyBSZXF1aXJlZCBiZWNhdXNlIHNvbWUgY29kZSB3aWxsIGludm9rZSBmdW5jdGlvbnMgb2ZmIG9mIHRoZSBtb2R1bGUuXG4vLyBlLmcuOlxuLy8gbGV0IHdyaXRlRmlsZSA9IGZzLndyaXRlRmlsZTtcbi8vIHdyaXRlRmlsZSguLi4pXG5cbmxldCBmcyA9IG5ldyBGUygpO1xubGV0IF9mc01vY2s6IEZTTW9kdWxlID0gPGFueT4ge307XG5cbmxldCBGU1Byb3RvID0gRlMucHJvdG90eXBlO1xuT2JqZWN0LmtleXMoRlNQcm90bykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gIF9mc01vY2tba2V5XSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAoPEZ1bmN0aW9uPiBmc1trZXldKS5hcHBseShmcywgYXJndW1lbnRzKTtcbiAgfTtcbn0pO1xuXG5fZnNNb2NrWydjaGFuZ2VGU01vZHVsZSddID0gZnVuY3Rpb24obmV3RnM6IEZTKTogdm9pZCB7XG4gIGZzID0gbmV3RnM7XG59XG5fZnNNb2NrWydnZXRGU01vZHVsZSddID0gZnVuY3Rpb24oKTogRlMge1xuICByZXR1cm4gZnM7XG59XG5fZnNNb2NrWydGUyddID0gRlM7XG5cbmV4cG9ydCA9IF9mc01vY2s7XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZV9mcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb3JlL25vZGVfZnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbUJBQXNDLE1BQU0sQ0FBQyxDQUFBO0FBVzdDLElBQUksRUFBRSxHQUFHLElBQUksWUFBRSxFQUFFLENBQUM7QUFDbEIsSUFBSSxPQUFPLEdBQW1CLEVBQUUsQ0FBQztBQUVqQyxJQUFJLE9BQU8sR0FBRyxZQUFFLENBQUMsU0FBUyxDQUFDO0FBQzNCLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQUMsR0FBRztJQUMvQixFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRztZQUNiLE1BQU0sQ0FBYSxFQUFFLENBQUMsR0FBRyxDQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNuRCxDQUFDLENBQUM7SUFDSixDQUFDO0lBQUMsSUFBSSxDQUFDLENBQUM7UUFDTixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7QUFDSCxDQUFDLENBQUMsQ0FBQztBQUVILE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLFVBQVMsS0FBUztJQUM1QyxFQUFFLEdBQUcsS0FBSyxDQUFDO0FBQ2IsQ0FBQyxDQUFBO0FBQ0QsT0FBTyxDQUFDLGFBQWEsQ0FBQyxHQUFHO0lBQ3ZCLE1BQU0sQ0FBQyxFQUFFLENBQUM7QUFDWixDQUFDLENBQUE7QUFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsWUFBRSxDQUFDO0FBRW5CLGlCQUFTLE9BQU8sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7ZGVmYXVsdCBhcyBGUywgRlNNb2R1bGV9IGZyb20gJy4vRlMnO1xuaW1wb3J0IHtGaWxlU3lzdGVtfSBmcm9tICcuL2ZpbGVfc3lzdGVtJztcbmltcG9ydCB7QXBpRXJyb3J9IGZyb20gJy4vYXBpX2Vycm9yJztcbmltcG9ydCBTdGF0cyBmcm9tICcuL25vZGVfZnNfc3RhdHMnO1xuXG4vLyBNYW51YWxseSBleHBvcnQgdGhlIGluZGl2aWR1YWwgcHVibGljIGZ1bmN0aW9ucyBvZiBmcy5cbi8vIFJlcXVpcmVkIGJlY2F1c2Ugc29tZSBjb2RlIHdpbGwgaW52b2tlIGZ1bmN0aW9ucyBvZmYgb2YgdGhlIG1vZHVsZS5cbi8vIGUuZy46XG4vLyBsZXQgd3JpdGVGaWxlID0gZnMud3JpdGVGaWxlO1xuLy8gd3JpdGVGaWxlKC4uLilcblxubGV0IGZzID0gbmV3IEZTKCk7XG5sZXQgX2ZzTW9jazogRlNNb2R1bGUgPSA8YW55PiB7fTtcblxubGV0IEZTUHJvdG8gPSBGUy5wcm90b3R5cGU7XG5PYmplY3Qua2V5cyhGU1Byb3RvKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgaWYgKHR5cGVvZiBmc1trZXldID09PSAnZnVuY3Rpb24nKSB7XG4gICAgX2ZzTW9ja1trZXldID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gKDxGdW5jdGlvbj4gZnNba2V5XSkuYXBwbHkoZnMsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBfZnNNb2NrW2tleV0gPSBmc1trZXldO1xuICB9XG59KTtcblxuX2ZzTW9ja1snY2hhbmdlRlNNb2R1bGUnXSA9IGZ1bmN0aW9uKG5ld0ZzOiBGUyk6IHZvaWQge1xuICBmcyA9IG5ld0ZzO1xufVxuX2ZzTW9ja1snZ2V0RlNNb2R1bGUnXSA9IGZ1bmN0aW9uKCk6IEZTIHtcbiAgcmV0dXJuIGZzO1xufVxuX2ZzTW9ja1snRlMnXSA9IEZTO1xuXG5leHBvcnQgPSBfZnNNb2NrO1xuIl19

@@ -0,1 +1,2 @@

import { FileSystem } from './file_system';
export declare var isIE: boolean;

@@ -7,2 +8,3 @@ export declare var isWebWorker: boolean;

}
export declare function mkdirpSync(p: string, mode: number, fs: FileSystem): void;
export declare function buffer2ArrayBuffer(buff: Buffer): ArrayBuffer;

@@ -9,0 +11,0 @@ export declare function buffer2Uint8array(buff: Buffer): Uint8Array;

@@ -1,6 +0,14 @@

/**
* Grab bag of utility functions used across the code.
*/
var path = require('path');
exports.isIE = typeof navigator !== "undefined" && (/(msie) ([\w.]+)/.exec(navigator.userAgent.toLowerCase()) != null || navigator.userAgent.indexOf('Trident') !== -1);
exports.isWebWorker = typeof window === "undefined";
function mkdirpSync(p, mode, fs) {
var parent = path.dirname(p);
if (!fs.existsSync(parent)) {
mkdirpSync(parent, mode, fs);
}
else {
fs.mkdirSync(p, mode);
}
}
exports.mkdirpSync = mkdirpSync;
function buffer2ArrayBuffer(buff) {

@@ -123,2 +131,2 @@ var u8 = buffer2Uint8array(buff), u8offset = u8.byteOffset, u8Len = u8.byteLength;

exports.copyingSlice = copyingSlice;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb3JlL3V0aWwudHMiXSwibmFtZXMiOlsiYnVmZmVyMkFycmF5QnVmZmVyIiwiYnVmZmVyMlVpbnQ4YXJyYXkiLCJidWZmZXIyQXJyYXlpc2giLCJhcnJheWlzaDJCdWZmZXIiLCJ1aW50OEFycmF5MkJ1ZmZlciIsImFycmF5QnVmZmVyMkJ1ZmZlciIsImNvcHlpbmdTbGljZSJdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFNUSxZQUFJLEdBQVksT0FBTyxTQUFTLEtBQUssV0FBVyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxJQUFJLElBQUksU0FBUyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUt6SyxtQkFBVyxHQUFZLE9BQU8sTUFBTSxLQUFLLFdBQVcsQ0FBQztBQVdoRSw0QkFBbUMsSUFBWTtJQUM3Q0EsSUFBSUEsRUFBRUEsR0FBR0EsaUJBQWlCQSxDQUFDQSxJQUFJQSxDQUFDQSxFQUM5QkEsUUFBUUEsR0FBR0EsRUFBRUEsQ0FBQ0EsVUFBVUEsRUFDeEJBLEtBQUtBLEdBQUdBLEVBQUVBLENBQUNBLFVBQVVBLENBQUNBO0lBQ3hCQSxFQUFFQSxDQUFDQSxDQUFDQSxRQUFRQSxLQUFLQSxDQUFDQSxJQUFJQSxLQUFLQSxLQUFLQSxFQUFFQSxDQUFDQSxNQUFNQSxDQUFDQSxVQUFVQSxDQUFDQSxDQUFDQSxDQUFDQTtRQUNyREEsTUFBTUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsTUFBTUEsQ0FBQ0E7SUFDbkJBLENBQUNBO0lBQUNBLElBQUlBLENBQUNBLENBQUNBO1FBQ05BLE1BQU1BLENBQUNBLEVBQUVBLENBQUNBLE1BQU1BLENBQUNBLEtBQUtBLENBQUNBLFFBQVFBLEVBQUVBLFFBQVFBLEdBQUdBLEtBQUtBLENB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Q0EsRUFBRUEsR0FBR0EsQ0FBQ0EsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0E7UUFFMUJBLElBQUlBLENBQUNBLFVBQVVBLENBQUNBLEtBQUtBLEVBQUVBLENBQUNBLENBQUNBLENBQUNBO1FBQzFCQSxFQUFFQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQSxLQUFLQSxLQUFLQSxDQUFDQSxDQUFDQSxDQUFDQTtZQUVwQkEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsR0FBR0EsRUFBRUEsQ0FBQ0E7WUFDWEEsTUFBTUEsQ0FBQ0EsaUJBQWlCQSxDQUFDQSxFQUFFQSxDQUFDQSxLQUFLQSxDQUFDQSxLQUFLQSxFQUFFQSxHQUFHQSxDQUFDQSxDQUFDQSxDQUFDQTtRQUNqREEsQ0FBQ0E7UUFBQ0EsSUFBSUEsQ0FBQ0EsQ0FBQ0E7WUFFTkEsSUFBSUEsQ0FBQ0EsVUFBVUEsQ0FBQ0EsRUFBRUEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDdkJBLE1BQU1BLENBQUNBLGlCQUFpQkEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsUUFBUUEsQ0FBQ0EsS0FBS0EsRUFBRUEsR0FBR0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7UUFDcERBLENBQUNBO0lBQ0hBLENBQUNBO0lBQUNBLElBQUlBLENBQUNBLENBQUNBO1FBQ05BLElBQUlBLFNBQVNBLEdBQUdBLElBQUlBLE1BQU1BLENBQUNBLEdBQUdBLEdBQUdBLEtBQUtBLENBQUNBLENBQUNBO1FBQ3hDQSxJQUFJQSxDQUFDQSxJQUFJQSxDQUFDQSxTQUFTQSxFQUFFQSxDQUFDQSxFQUFFQSxLQUFLQSxFQUFFQSxHQUFHQSxDQUFDQSxDQUFDQTtRQUNwQ0EsTUFBTUEsQ0FBQ0EsU0FBU0EsQ0FBQ0E7SUFDbkJBLENBQUNBO0FBQ0hBLENBQUNBO0FBM0JlLG9CQUFZLGVBMkIzQixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHcmFiIGJhZyBvZiB1dGlsaXR5IGZ1bmN0aW9ucyB1c2VkIGFjcm9zcyB0aGUgY29kZS5cbiAqL1xuXG4vKipcbiAqIENoZWNrcyBmb3IgYW55IElFIHZlcnNpb24sIGluY2x1ZGluZyBJRTExIHdoaWNoIHJlbW92ZWQgTVNJRSBmcm9tIHRoZVxuICogdXNlckFnZW50IHN0cmluZy5cbiAqL1xuZXhwb3J0IHZhciBpc0lFOiBib29sZWFuID0gdHlwZW9mIG5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIiAmJiAoLyhtc2llKSAoW1xcdy5dKykvLmV4ZWMobmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpKSAhPSBudWxsIHx8IG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignVHJpZGVudCcpICE9PSAtMSk7XG5cbi8qKlxuICogQ2hlY2sgaWYgd2UncmUgaW4gYSB3ZWIgd29ya2VyLlxuICovXG5leHBvcnQgdmFyIGlzV2ViV29ya2VyOiBib29sZWFuID0gdHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIjtcblxuZXhwb3J0IGludGVyZmFjZSBBcnJheWlzaDxUPiB7XG4gIFtpZHg6IG51bWJlcl06IFQ7XG4gIGxlbmd0aDogbnVtYmVyO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgYnVmZmVyIGludG8gYW4gYXJyYXkgYnVmZmVyLiBBdHRlbXB0cyB0byBkbyBzbyBpbiBhXG4gKiB6ZXJvLWNvcHkgbWFubmVyLCBlLmcuIHRoZSBhcnJheSByZWZlcmVuY2VzIHRoZSBzYW1lIG1lbW9yeS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1ZmZlcjJBcnJheUJ1ZmZlcihidWZmOiBCdWZmZXIpOiBBcnJheUJ1ZmZlciB7XG4gIHZhciB1OCA9IGJ1ZmZlcjJVaW50OGFycmF5KGJ1ZmYpLFxuICAgIHU4b2Zmc2V0ID0gdTguYnl0ZU9mZnNldCxcbiAgICB1OExlbiA9IHU4LmJ5dGVMZW5ndGg7XG4gIGlmICh1OG9mZnNldCA9PT0gMCAmJiB1OExlbiA9PT0gdTguYnVmZmVyLmJ5dGVMZW5ndGgpIHtcbiAgICByZXR1cm4gdTguYnVmZmVyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB1OC5idWZmZXIuc2xpY2UodThvZmZzZXQsIHU4b2Zmc2V0ICsgdThMZW4pXG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIGJ1ZmZlciBpbnRvIGEgVWludDhBcnJheS4gQXR0ZW1wdHMgdG8gZG8gc28gaW4gYVxuICogemVyby1jb3B5IG1hbm5lciwgZS5nLiB0aGUgYXJyYXkgcmVmZXJlbmNlcyB0aGUgc2FtZSBtZW1vcnkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWZmZXIyVWludDhhcnJheShidWZmOiBCdWZmZXIpOiBVaW50OEFycmF5IHtcbiAgaWYgKGJ1ZmZbJ3RvVWludDhBcnJheSddKSB7XG4gICAgcmV0dXJuICg8YW55PiBidWZmKS50b1VpbnQ4QXJyYXkoKTtcbiAgfSBlbHNlIGlmIChidWZmIGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuICAgIC8vIE5vZGUgdjQuMCBidWZmZXJzICphcmUqIFVpbnQ4QXJyYXlzLlxuICAgIHJldHVybiA8YW55PiBidWZmO1xuICB9IGVsc2Uge1xuICAgIC8vIFVpbnQ4QXJyYXlzIGNhbiBiZSBjb25zdHJ1Y3RlZCBmcm9tIGFycmF5aXNoIG51bWJlcnMuXG4gICAgLy8gQXQgdGhpcyBwb2ludCwgd2UgYXNzdW1lIHRoaXMgaXNuJ3QgYSBCRlMgYXJyYXkuXG4gICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGJ1ZmYpO1xuICB9XG59XG5cbi8qKlxuICogQ29udmVydHMgdGhlIGdpdmVuIGJ1ZmZlciBpbnRvIGEgVWludDggYXJyYXlpc2ggZm9ybS4gQXR0ZW1wdHNcbiAqIHRvIGJlIHplcm8tY29weS5cbiAqXG4gKiBSZXF1aXJlZCBmb3IgQnJvd3NlckZTIGJ1ZmZlcnMsIHdoaWNoIGRvIG5vdCBzdXBwb3J0IGluZGV4aW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVmZmVyMkFycmF5aXNoKGJ1ZmY6IEJ1ZmZlcik6IEFycmF5aXNoPG51bWJlcj4ge1xuICBpZiAoYnVmZi5sZW5ndGggPT09IDAgfHwgdHlwZW9mKGJ1ZmZbMF0pID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBidWZmO1xuICB9IGVsc2UgaWYgKHR5cGVvZihBcnJheUJ1ZmZlcikgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGJ1ZmZlcjJVaW50OGFycmF5KGJ1ZmYpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBidWZmLnRvSlNPTigpLmRhdGE7XG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyB0aGUgZ2l2ZW4gYXJyYXlpc2ggb2JqZWN0IGludG8gYSBCdWZmZXIuIEF0dGVtcHRzIHRvXG4gKiBiZSB6ZXJvLWNvcHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcnJheWlzaDJCdWZmZXIoYXJyOiBBcnJheWlzaDxudW1iZXI+KTogQnVmZmVyIHtcbiAgaWYgKGFyciBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcbiAgICByZXR1cm4gdWludDhBcnJheTJCdWZmZXIoYXJyKTtcbiAgfSBlbHNlIGlmIChhcnIgaW5zdGFuY2VvZiBCdWZmZXIpIHtcbiAgICByZXR1cm4gYXJyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBuZXcgQnVmZmVyKDxudW1iZXJbXT4gYXJyKTtcbiAgfVxufVxuXG4vKipcbiAqIENvbnZlcnRzIHRoZSBnaXZlbiBVaW50OEFycmF5IGludG8gYSBCdWZmZXIuIEF0dGVtcHRzIHRvIGJlIHplcm8tY29weS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVpbnQ4QXJyYXkyQnVmZmVyKHU4OiBVaW50OEFycmF5KTogQnVmZmVyIHtcbiAgaWYgKHU4LmJ5dGVPZmZzZXQgPT09IDAgJiYgdTguYnl0ZUxlbmd0aCA9PT0gdTguYnVmZmVyLmJ5dGVMZW5ndGgpIHtcbiAgICByZXR1cm4gYXJyYXlCdWZmZXIyQnVmZmVyKHU4KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV3IEJ1ZmZlcih1OCk7XG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyB0aGUgZ2l2ZW4gYXJyYXkgYnVmZmVyIGludG8gYSBCdWZmZXIuIEF0dGVtcHRzIHRvIGJlXG4gKiB6ZXJvLWNvcHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcnJheUJ1ZmZlcjJCdWZmZXIoYWI6IEFycmF5QnVmZmVyKTogQnVmZmVyIHtcbiAgdHJ5IHtcbiAgICAvLyBXb3JrcyBpbiBCRlMgYW5kIE5vZGUgdjQuMi5cbiAgICByZXR1cm4gbmV3IEJ1ZmZlcig8YW55PiBhYik7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBJIGJlbGlldmUgdGhpcyBjb3BpZXMsIGJ1dCB0aGVyZSdzIG5vIGF2b2lkaW5nIGl0IGluIE5vZGUgPCB2MC4xMlxuICAgIHJldHVybiBuZXcgQnVmZmVyKG5ldyBVaW50OEFycmF5KGFiKSk7XG4gIH1cbn1cblxuLy8gUG9seWZpbGwgZm9yIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNsaWNlLlxuLy8gU2FmYXJpIGFuZCBzb21lIG90aGVyIGJyb3dzZXJzIGRvIG5vdCBkZWZpbmUgaXQuXG5pZiAodHlwZW9mKEFycmF5QnVmZmVyKSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mKFVpbnQ4QXJyYXkpICE9PSAndW5kZWZpbmVkJykge1xuICBpZiAoIVVpbnQ4QXJyYXkucHJvdG90eXBlWydzbGljZSddKSB7XG4gICAgVWludDhBcnJheS5wcm90b3R5cGUuc2xpY2UgPSBmdW5jdGlvbihzdGFydDogbnVtYmVyID0gMCwgZW5kOiBudW1iZXIgPSB0aGlzLmxlbmd0aCk6IFVpbnQ4QXJyYXkge1xuICAgICAgbGV0IHNlbGY6IFVpbnQ4QXJyYXkgPSB0aGlzO1xuICAgICAgaWYgKHN0YXJ0IDwgMCkge1xuICAgICAgICBzdGFydCA9IHRoaXMubGVuZ3RoICsgc3RhcnQ7XG4gICAgICAgIGlmIChzdGFydCA8IDApIHtcbiAgICAgICAgICBzdGFydCA9IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChlbmQgPCAwKSB7XG4gICAgICAgIGVuZCA9IHRoaXMubGVuZ3RoICsgZW5kO1xuICAgICAgICBpZiAoZW5kIDwgMCkge1xuICAgICAgICAgIGVuZCA9IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChlbmQgPCBzdGFydCkge1xuICAgICAgICBlbmQgPSBzdGFydDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShzZWxmLmJ1ZmZlciwgc2VsZi5ieXRlT2Zmc2V0ICsgc3RhcnQsIGVuZCAtIHN0YXJ0KTtcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogQ29waWVzIGEgc2xpY2Ugb2YgdGhlIGdpdmVuIGJ1ZmZlclxuICovXG5leHBvcnQgZnVuY3Rpb24gY29weWluZ1NsaWNlKGJ1ZmY6IEJ1ZmZlciwgc3RhcnQ6IG51bWJlciA9IDAsIGVuZCA9IGJ1ZmYubGVuZ3RoKTogQnVmZmVyIHtcbiAgaWYgKHN0YXJ0IDwgMCB8fCBlbmQgPCAwIHx8IGVuZCA+IGJ1ZmYubGVuZ3RoIHx8IHN0YXJ0ID4gZW5kKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgSW52YWxpZCBzbGljZSBib3VuZHMgb24gYnVmZmVyIG9mIGxlbmd0aCAke2J1ZmYubGVuZ3RofTogWyR7c3RhcnR9LCAke2VuZH1dYCk7XG4gIH1cbiAgaWYgKGJ1ZmYubGVuZ3RoID09PSAwKSB7XG4gICAgLy8gQXZvaWQgczAgY29ybmVyIGNhc2UgaW4gQXJyYXlCdWZmZXIgY2FzZS5cbiAgICByZXR1cm4gbmV3IEJ1ZmZlcigwKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YoQXJyYXlCdWZmZXIpICE9PSAndW5kZWZpbmVkJykge1xuICAgIHZhciB1OCA9IGJ1ZmZlcjJVaW50OGFycmF5KGJ1ZmYpLFxuICAgICAgczAgPSBidWZmLnJlYWRVSW50OCgwKSxcbiAgICAgIG5ld1MwID0gKHMwICsgMSkgJSAweEZGO1xuXG4gICAgYnVmZi53cml0ZVVJbnQ4KG5ld1MwLCAwKTtcbiAgICBpZiAodThbMF0gPT09IG5ld1MwKSB7XG4gICAgICAvLyBTYW1lIG1lbW9yeS4gUmV2ZXJ0ICYgY29weS5cbiAgICAgIHU4WzBdID0gczA7XG4gICAgICByZXR1cm4gdWludDhBcnJheTJCdWZmZXIodTguc2xpY2Uoc3RhcnQsIGVuZCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZXZlcnQuXG4gICAgICBidWZmLndyaXRlVUludDgoczAsIDApO1xuICAgICAgcmV0dXJuIHVpbnQ4QXJyYXkyQnVmZmVyKHU4LnN1YmFycmF5KHN0YXJ0LCBlbmQpKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGJ1ZmZTbGljZSA9IG5ldyBCdWZmZXIoZW5kIC0gc3RhcnQpO1xuICAgIGJ1ZmYuY29weShidWZmU2xpY2UsIDAsIHN0YXJ0LCBlbmQpO1xuICAgIHJldHVybiBidWZmU2xpY2U7XG4gIH1cbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb3JlL3V0aWwudHMiXSwibmFtZXMiOlsibWtkaXJwU3luYyIsImJ1ZmZlcjJBcnJheUJ1ZmZlciIsImJ1ZmZlcjJVaW50OGFycmF5IiwiYnVmZmVyMkFycmF5aXNoIiwiYXJyYXlpc2gyQnVmZmVyIiwidWludDhBcnJheTJCdWZmZXIiLCJhcnJheUJ1ZmZlcjJCdWZmZXIiLCJjb3B5aW5nU2xpY2UiXSwibWFwcGluZ3MiOiJBQUlBLElBQU8sSUFBSSxXQUFXLE1BQU0sQ0FBQyxDQUFDO0FBTW5CLFlBQUksR0FBWSxPQUFPLFNBQVMsS0FBSyxXQUFXLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLElBQUksSUFBSSxTQUFTLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBS3pLLG1CQUFXLEdBQVksT0FBTyxNQUFNLEtBQUssV0FBVyxDQUFDO0FBVWhFLG9CQUEyQixDQUFTLEVBQUUsSUFBWSxFQUFFLEVBQWM7SUFDaEVBLElBQUlBLE1BQU1BLEdBQUdBLElBQUlBLENBQUNBLE9BQU9BLENBQUNBLENBQUNBLENBQUNBLENBQUNBO0lBQzdCQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxVQUFVQSxDQUFDQSxNQUFNQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQTtRQUMzQkEsVUFBVUEsQ0FBQ0EsTUFBTUEsRUFBRUEsSUFBSUEsRUFBRUEsRUFBRUEsQ0FBQ0EsQ0FBQ0E7SUFDL0JBLENBQUNBO0lBQUNBLElBQUlBLENBQUNBLENBQUNBO1FBQ05BLEVBQUVBLENBQUNBLFNBQVNBLENBQUNBLENBQUNBLEVBQUVBLElBQUlBLENBQUNBLENBQUNBO0lBQ3hCQSxDQUFDQTtBQUNIQSxDQUFDQTtBQVBlLGtCQUFVLGFB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LElBQUlBLENBQUNBLE1BQU1BLFdBQU1BLEtBQUtBLFVBQUtBLEdBQUdBLE1BQUdBLENBQUNBLENBQUNBO0lBQ3JHQSxDQUFDQTtJQUNEQSxFQUFFQSxDQUFDQSxDQUFDQSxJQUFJQSxDQUFDQSxNQUFNQSxLQUFLQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQTtRQUV0QkEsTUFBTUEsQ0FBQ0EsSUFBSUEsTUFBTUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7SUFDdkJBLENBQUNBO0lBQUNBLElBQUlBLENBQUNBLEVBQUVBLENBQUNBLENBQUNBLE9BQU1BLENBQUNBLFdBQVdBLENBQUNBLEtBQUtBLFdBQVdBLENBQUNBLENBQUNBLENBQUNBO1FBQy9DQSxJQUFJQSxFQUFFQSxHQUFHQSxpQkFBaUJBLENBQUNBLElBQUlBLENBQUNBLEVBQzlCQSxFQUFFQSxHQUFHQSxJQUFJQSxDQUFDQSxTQUFTQSxDQUFDQSxDQUFDQSxDQUFDQSxFQUN0QkEsS0FBS0EsR0FBR0EsQ0FBQ0EsRUFBRUEsR0FBR0EsQ0FBQ0EsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0E7UUFFMUJBLElBQUlBLENBQUNBLFVBQVVBLENBQUNBLEtBQUtBLEVBQUVBLENBQUNBLENBQUNBLENBQUNBO1FBQzFCQSxFQUFFQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQSxLQUFLQSxLQUFLQSxDQUFDQSxDQUFDQSxDQUFDQTtZQUVwQkEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsR0FBR0EsRUFBRUEsQ0FBQ0E7WUFDWEEsTUFBTUEsQ0FBQ0EsaUJBQWlCQSxDQUFDQSxFQUFFQSxDQUFDQSxLQUFLQSxDQUFDQSxLQUFLQSxFQUFFQSxHQUFHQSxDQUFDQSxDQUFDQSxDQUFDQTtRQUNqREEsQ0FBQ0E7UUFBQ0EsSUFBSUEsQ0FBQ0EsQ0FBQ0E7WUFFTkEsSUFBSUEsQ0FBQ0EsVUFBVUEsQ0FBQ0EsRUFBRUEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDdkJBLE1BQU1BLENBQUNBLGlCQUFpQkEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsUUFBUUEsQ0FBQ0EsS0FBS0EsRUFBRUEsR0FBR0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7UUFDcERBLENBQUNBO0lBQ0hBLENBQUNBO0lBQUNBLElBQUlBLENBQUNBLENBQUNBO1FBQ05BLElBQUlBLFNBQVNBLEdBQUdBLElBQUlBLE1BQU1BLENBQUNBLEdBQUdBLEdBQUdBLEtBQUtBLENBQUNBLENBQUNBO1FBQ3hDQSxJQUFJQSxDQUFDQSxJQUFJQSxDQUFDQSxTQUFTQSxFQUFFQSxDQUFDQSxFQUFFQSxLQUFLQSxFQUFFQSxHQUFHQSxDQUFDQSxDQUFDQTtRQUNwQ0EsTUFBTUEsQ0FBQ0EsU0FBU0EsQ0FBQ0E7SUFDbkJBLENBQUNBO0FBQ0hBLENBQUNBO0FBM0JlLG9CQUFZLGVBMkIzQixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHcmFiIGJhZyBvZiB1dGlsaXR5IGZ1bmN0aW9ucyB1c2VkIGFjcm9zcyB0aGUgY29kZS5cbiAqL1xuaW1wb3J0IHtGaWxlU3lzdGVtfSBmcm9tICcuL2ZpbGVfc3lzdGVtJztcbmltcG9ydCBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuXG4vKipcbiAqIENoZWNrcyBmb3IgYW55IElFIHZlcnNpb24sIGluY2x1ZGluZyBJRTExIHdoaWNoIHJlbW92ZWQgTVNJRSBmcm9tIHRoZVxuICogdXNlckFnZW50IHN0cmluZy5cbiAqL1xuZXhwb3J0IHZhciBpc0lFOiBib29sZWFuID0gdHlwZW9mIG5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIiAmJiAoLyhtc2llKSAoW1xcdy5dKykvLmV4ZWMobmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpKSAhPSBudWxsIHx8IG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignVHJpZGVudCcpICE9PSAtMSk7XG5cbi8qKlxuICogQ2hlY2sgaWYgd2UncmUgaW4gYSB3ZWIgd29ya2VyLlxuICovXG5leHBvcnQgdmFyIGlzV2ViV29ya2VyOiBib29sZWFuID0gdHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIjtcblxuZXhwb3J0IGludGVyZmFjZSBBcnJheWlzaDxUPiB7XG4gIFtpZHg6IG51bWJlcl06IFQ7XG4gIGxlbmd0aDogbnVtYmVyO1xufVxuXG4vKipcbiAqIFN5bmNocm9ub3VzIHJlY3Vyc2l2ZSBtYWtlZGlyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWtkaXJwU3luYyhwOiBzdHJpbmcsIG1vZGU6IG51bWJlciwgZnM6IEZpbGVTeXN0ZW0pOiB2b2lkIHtcbiAgbGV0IHBhcmVudCA9IHBhdGguZGlybmFtZShwKTtcbiAgaWYgKCFmcy5leGlzdHNTeW5jKHBhcmVudCkpIHtcbiAgICBta2RpcnBTeW5jKHBhcmVudCwgbW9kZSwgZnMpO1xuICB9IGVsc2Uge1xuICAgIGZzLm1rZGlyU3luYyhwLCBtb2RlKTtcbiAgfVxufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgYnVmZmVyIGludG8gYW4gYXJyYXkgYnVmZmVyLiBBdHRlbXB0cyB0byBkbyBzbyBpbiBhXG4gKiB6ZXJvLWNvcHkgbWFubmVyLCBlLmcuIHRoZSBhcnJheSByZWZlcmVuY2VzIHRoZSBzYW1lIG1lbW9yeS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1ZmZlcjJBcnJheUJ1ZmZlcihidWZmOiBCdWZmZXIpOiBBcnJheUJ1ZmZlciB7XG4gIHZhciB1OCA9IGJ1ZmZlcjJVaW50OGFycmF5KGJ1ZmYpLFxuICAgIHU4b2Zmc2V0ID0gdTguYnl0ZU9mZnNldCxcbiAgICB1OExlbiA9IHU4LmJ5dGVMZW5ndGg7XG4gIGlmICh1OG9mZnNldCA9PT0gMCAmJiB1OExlbiA9PT0gdTguYnVmZmVyLmJ5dGVMZW5ndGgpIHtcbiAgICByZXR1cm4gdTguYnVmZmVyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB1OC5idWZmZXIuc2xpY2UodThvZmZzZXQsIHU4b2Zmc2V0ICsgdThMZW4pXG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIGJ1ZmZlciBpbnRvIGEgVWludDhBcnJheS4gQXR0ZW1wdHMgdG8gZG8gc28gaW4gYVxuICogemVyby1jb3B5IG1hbm5lciwgZS5nLiB0aGUgYXJyYXkgcmVmZXJlbmNlcyB0aGUgc2FtZSBtZW1vcnkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWZmZXIyVWludDhhcnJheShidWZmOiBCdWZmZXIpOiBVaW50OEFycmF5IHtcbiAgaWYgKGJ1ZmZbJ3RvVWludDhBcnJheSddKSB7XG4gICAgcmV0dXJuICg8YW55PiBidWZmKS50b1VpbnQ4QXJyYXkoKTtcbiAgfSBlbHNlIGlmIChidWZmIGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuICAgIC8vIE5vZGUgdjQuMCBidWZmZXJzICphcmUqIFVpbnQ4QXJyYXlzLlxuICAgIHJldHVybiA8YW55PiBidWZmO1xuICB9IGVsc2Uge1xuICAgIC8vIFVpbnQ4QXJyYXlzIGNhbiBiZSBjb25zdHJ1Y3RlZCBmcm9tIGFycmF5aXNoIG51bWJlcnMuXG4gICAgLy8gQXQgdGhpcyBwb2ludCwgd2UgYXNzdW1lIHRoaXMgaXNuJ3QgYSBCRlMgYXJyYXkuXG4gICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGJ1ZmYpO1xuICB9XG59XG5cbi8qKlxuICogQ29udmVydHMgdGhlIGdpdmVuIGJ1ZmZlciBpbnRvIGEgVWludDggYXJyYXlpc2ggZm9ybS4gQXR0ZW1wdHNcbiAqIHRvIGJlIHplcm8tY29weS5cbiAqXG4gKiBSZXF1aXJlZCBmb3IgQnJvd3NlckZTIGJ1ZmZlcnMsIHdoaWNoIGRvIG5vdCBzdXBwb3J0IGluZGV4aW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVmZmVyMkFycmF5aXNoKGJ1ZmY6IEJ1ZmZlcik6IEFycmF5aXNoPG51bWJlcj4ge1xuICBpZiAoYnVmZi5sZW5ndGggPT09IDAgfHwgdHlwZW9mKGJ1ZmZbMF0pID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBidWZmO1xuICB9IGVsc2UgaWYgKHR5cGVvZihBcnJheUJ1ZmZlcikgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGJ1ZmZlcjJVaW50OGFycmF5KGJ1ZmYpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBidWZmLnRvSlNPTigpLmRhdGE7XG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyB0aGUgZ2l2ZW4gYXJyYXlpc2ggb2JqZWN0IGludG8gYSBCdWZmZXIuIEF0dGVtcHRzIHRvXG4gKiBiZSB6ZXJvLWNvcHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcnJheWlzaDJCdWZmZXIoYXJyOiBBcnJheWlzaDxudW1iZXI+KTogQnVmZmVyIHtcbiAgaWYgKGFyciBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcbiAgICByZXR1cm4gdWludDhBcnJheTJCdWZmZXIoYXJyKTtcbiAgfSBlbHNlIGlmIChhcnIgaW5zdGFuY2VvZiBCdWZmZXIpIHtcbiAgICByZXR1cm4gYXJyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBuZXcgQnVmZmVyKDxudW1iZXJbXT4gYXJyKTtcbiAgfVxufVxuXG4vKipcbiAqIENvbnZlcnRzIHRoZSBnaXZlbiBVaW50OEFycmF5IGludG8gYSBCdWZmZXIuIEF0dGVtcHRzIHRvIGJlIHplcm8tY29weS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVpbnQ4QXJyYXkyQnVmZmVyKHU4OiBVaW50OEFycmF5KTogQnVmZmVyIHtcbiAgaWYgKHU4LmJ5dGVPZmZzZXQgPT09IDAgJiYgdTguYnl0ZUxlbmd0aCA9PT0gdTguYnVmZmVyLmJ5dGVMZW5ndGgpIHtcbiAgICByZXR1cm4gYXJyYXlCdWZmZXIyQnVmZmVyKHU4KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV3IEJ1ZmZlcih1OCk7XG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyB0aGUgZ2l2ZW4gYXJyYXkgYnVmZmVyIGludG8gYSBCdWZmZXIuIEF0dGVtcHRzIHRvIGJlXG4gKiB6ZXJvLWNvcHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcnJheUJ1ZmZlcjJCdWZmZXIoYWI6IEFycmF5QnVmZmVyKTogQnVmZmVyIHtcbiAgdHJ5IHtcbiAgICAvLyBXb3JrcyBpbiBCRlMgYW5kIE5vZGUgdjQuMi5cbiAgICByZXR1cm4gbmV3IEJ1ZmZlcig8YW55PiBhYik7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBJIGJlbGlldmUgdGhpcyBjb3BpZXMsIGJ1dCB0aGVyZSdzIG5vIGF2b2lkaW5nIGl0IGluIE5vZGUgPCB2MC4xMlxuICAgIHJldHVybiBuZXcgQnVmZmVyKG5ldyBVaW50OEFycmF5KGFiKSk7XG4gIH1cbn1cblxuLy8gUG9seWZpbGwgZm9yIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNsaWNlLlxuLy8gU2FmYXJpIGFuZCBzb21lIG90aGVyIGJyb3dzZXJzIGRvIG5vdCBkZWZpbmUgaXQuXG5pZiAodHlwZW9mKEFycmF5QnVmZmVyKSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mKFVpbnQ4QXJyYXkpICE9PSAndW5kZWZpbmVkJykge1xuICBpZiAoIVVpbnQ4QXJyYXkucHJvdG90eXBlWydzbGljZSddKSB7XG4gICAgVWludDhBcnJheS5wcm90b3R5cGUuc2xpY2UgPSBmdW5jdGlvbihzdGFydDogbnVtYmVyID0gMCwgZW5kOiBudW1iZXIgPSB0aGlzLmxlbmd0aCk6IFVpbnQ4QXJyYXkge1xuICAgICAgbGV0IHNlbGY6IFVpbnQ4QXJyYXkgPSB0aGlzO1xuICAgICAgaWYgKHN0YXJ0IDwgMCkge1xuICAgICAgICBzdGFydCA9IHRoaXMubGVuZ3RoICsgc3RhcnQ7XG4gICAgICAgIGlmIChzdGFydCA8IDApIHtcbiAgICAgICAgICBzdGFydCA9IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChlbmQgPCAwKSB7XG4gICAgICAgIGVuZCA9IHRoaXMubGVuZ3RoICsgZW5kO1xuICAgICAgICBpZiAoZW5kIDwgMCkge1xuICAgICAgICAgIGVuZCA9IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChlbmQgPCBzdGFydCkge1xuICAgICAgICBlbmQgPSBzdGFydDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShzZWxmLmJ1ZmZlciwgc2VsZi5ieXRlT2Zmc2V0ICsgc3RhcnQsIGVuZCAtIHN0YXJ0KTtcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogQ29waWVzIGEgc2xpY2Ugb2YgdGhlIGdpdmVuIGJ1ZmZlclxuICovXG5leHBvcnQgZnVuY3Rpb24gY29weWluZ1NsaWNlKGJ1ZmY6IEJ1ZmZlciwgc3RhcnQ6IG51bWJlciA9IDAsIGVuZCA9IGJ1ZmYubGVuZ3RoKTogQnVmZmVyIHtcbiAgaWYgKHN0YXJ0IDwgMCB8fCBlbmQgPCAwIHx8IGVuZCA+IGJ1ZmYubGVuZ3RoIHx8IHN0YXJ0ID4gZW5kKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgSW52YWxpZCBzbGljZSBib3VuZHMgb24gYnVmZmVyIG9mIGxlbmd0aCAke2J1ZmYubGVuZ3RofTogWyR7c3RhcnR9LCAke2VuZH1dYCk7XG4gIH1cbiAgaWYgKGJ1ZmYubGVuZ3RoID09PSAwKSB7XG4gICAgLy8gQXZvaWQgczAgY29ybmVyIGNhc2UgaW4gQXJyYXlCdWZmZXIgY2FzZS5cbiAgICByZXR1cm4gbmV3IEJ1ZmZlcigwKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YoQXJyYXlCdWZmZXIpICE9PSAndW5kZWZpbmVkJykge1xuICAgIHZhciB1OCA9IGJ1ZmZlcjJVaW50OGFycmF5KGJ1ZmYpLFxuICAgICAgczAgPSBidWZmLnJlYWRVSW50OCgwKSxcbiAgICAgIG5ld1MwID0gKHMwICsgMSkgJSAweEZGO1xuXG4gICAgYnVmZi53cml0ZVVJbnQ4KG5ld1MwLCAwKTtcbiAgICBpZiAodThbMF0gPT09IG5ld1MwKSB7XG4gICAgICAvLyBTYW1lIG1lbW9yeS4gUmV2ZXJ0ICYgY29weS5cbiAgICAgIHU4WzBdID0gczA7XG4gICAgICByZXR1cm4gdWludDhBcnJheTJCdWZmZXIodTguc2xpY2Uoc3RhcnQsIGVuZCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZXZlcnQuXG4gICAgICBidWZmLndyaXRlVUludDgoczAsIDApO1xuICAgICAgcmV0dXJuIHVpbnQ4QXJyYXkyQnVmZmVyKHU4LnN1YmFycmF5KHN0YXJ0LCBlbmQpKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGJ1ZmZTbGljZSA9IG5ldyBCdWZmZXIoZW5kIC0gc3RhcnQpO1xuICAgIGJ1ZmYuY29weShidWZmU2xpY2UsIDAsIHN0YXJ0LCBlbmQpO1xuICAgIHJldHVybiBidWZmU2xpY2U7XG4gIH1cbn1cbiJdfQ==
{
"name": "browserfs",
"version": "0.5.3",
"version": "0.5.4",
"description": "A filesystem in your browser!",

@@ -31,3 +31,3 @@ "main": "dist/browserfs.js",

"bfs-path": "^0.1.1",
"bfs-process": "^0.1.1",
"bfs-process": "^0.1.4",
"browserify": "^10.2.6",

@@ -34,0 +34,0 @@ "browserify-derequire": "~0.9.4",

@@ -1,2 +0,2 @@

# BrowserFS v0.5.3
# BrowserFS v0.5.4
> BrowserFS is an in-browser file system that emulates the [Node JS file system API](http://nodejs.org/api/fs.html) and supports storing and retrieving files from various backends. BrowserFS also integrates nicely into the Emscripten file system.

@@ -3,0 +3,0 @@

@@ -5,2 +5,4 @@ import file_system = require('../core/file_system');

import fs = require('../core/node_fs');
import path = require('path');
import {mkdirpSync} from '../core/util';

@@ -30,17 +32,20 @@ /**

*/
public mount(mnt_pt: string, fs: file_system.FileSystem): void {
if (this.mntMap[mnt_pt]) {
throw new ApiError(ErrorCode.EINVAL, "Mount point " + mnt_pt + " is already taken.");
public mount(mountPoint: string, fs: file_system.FileSystem): void {
if (mountPoint[0] !== '/') {
mountPoint = `/${mountPoint}`;
}
if (this.mntMap[mountPoint]) {
throw new ApiError(ErrorCode.EINVAL, "Mount point " + mountPoint + " is already taken.");
}
mkdirpSync(mountPoint, 0x1ff, this.rootFs);
// @todo Ensure new mount path is not subsumed by active mount paths.
this.rootFs.mkdirSync(mnt_pt, 0x1ff);
this.mntMap[mnt_pt] = fs;
this.mntMap[mountPoint] = fs;
}
public umount(mnt_pt: string): void {
if (!this.mntMap[mnt_pt]) {
throw new ApiError(ErrorCode.EINVAL, "Mount point " + mnt_pt + " is already unmounted.");
public umount(mountPoint: string): void {
if (!this.mntMap[mountPoint]) {
throw new ApiError(ErrorCode.EINVAL, "Mount point " + mountPoint + " is already unmounted.");
}
delete this.mntMap[mnt_pt];
this.rootFs.rmdirSync(mnt_pt);
delete this.mntMap[mountPoint];
this.rootFs.rmdirSync(mountPoint);
}

@@ -51,7 +56,7 @@

*/
public _get_fs(path: string): {fs: file_system.FileSystem; path: string} {
for (var mnt_pt in this.mntMap) {
var fs = this.mntMap[mnt_pt];
if (path.indexOf(mnt_pt) === 0) {
path = path.substr(mnt_pt.length > 1 ? mnt_pt.length : 0);
public _getFs(path: string): {fs: file_system.FileSystem; path: string} {
for (var mountPoint in this.mntMap) {
var fs = this.mntMap[mountPoint];
if (path.indexOf(mountPoint) === 0) {
path = path.substr(mountPoint.length > 1 ? mountPoint.length : 0);
if (path === '') {

@@ -108,2 +113,3 @@ path = '/';

}
err.path = realPath;
return err;

@@ -119,4 +125,4 @@ }

// Scenario 1: old and new are on same FS.
var fs1_rv = this._get_fs(oldPath);
var fs2_rv = this._get_fs(newPath);
var fs1_rv = this._getFs(oldPath);
var fs2_rv = this._getFs(newPath);
if (fs1_rv.fs === fs2_rv.fs) {

@@ -147,4 +153,4 @@ var _this = this;

// Scenario 1: old and new are on same FS.
var fs1_rv = this._get_fs(oldPath);
var fs2_rv = this._get_fs(newPath);
var fs1_rv = this._getFs(oldPath);
var fs2_rv = this._getFs(newPath);
if (fs1_rv.fs === fs2_rv.fs) {

@@ -174,4 +180,5 @@ try {

return function(...args: any[]) {
let self: MountableFileSystem = this;
var path = args[0];
var rv = this._get_fs(path);
var rv = self._getFs(path);
args[0] = rv.path;

@@ -181,3 +188,3 @@ try {

} catch (e) {
this.standardizeError(e, rv.path, path);
(<any> self).standardizeError(e, rv.path, path);
throw e;

@@ -188,11 +195,11 @@ }

return function(...args: any[]) {
let self: MountableFileSystem = this;
var path = args[0];
var rv = this._get_fs(path);
var rv = self._getFs(path);
args[0] = rv.path;
if (typeof args[args.length-1] === 'function') {
var cb = args[args.length - 1];
var _this = this;
args[args.length - 1] = function(...args: any[]) {
if (args.length > 0 && args[0] instanceof ApiError) {
_this.standardizeError(args[0], rv.path, path);
(<any> self).standardizeError(args[0], rv.path, path);
}

@@ -199,0 +206,0 @@ cb.apply(null, args);

@@ -17,5 +17,9 @@ import {default as FS, FSModule} from './FS';

Object.keys(FSProto).forEach((key) => {
_fsMock[key] = function() {
return (<Function> fs[key]).apply(fs, arguments);
};
if (typeof fs[key] === 'function') {
_fsMock[key] = function() {
return (<Function> fs[key]).apply(fs, arguments);
};
} else {
_fsMock[key] = fs[key];
}
});

@@ -22,0 +26,0 @@

/**
* Grab bag of utility functions used across the code.
*/
import {FileSystem} from './file_system';
import path = require('path');

@@ -22,2 +24,14 @@ /**

/**
* Synchronous recursive makedir.
*/
export function mkdirpSync(p: string, mode: number, fs: FileSystem): void {
let parent = path.dirname(p);
if (!fs.existsSync(parent)) {
mkdirpSync(parent, mode, fs);
} else {
fs.mkdirSync(p, mode);
}
}
/**
* Converts a buffer into an array buffer. Attempts to do so in a

@@ -24,0 +38,0 @@ * zero-copy manner, e.g. the array references the same memory.

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

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