diff --git a/node_modules/to-through/LICENSE b/node_modules/to-through/LICENSE
new file mode 100644
index 0000000..b8fc743
--- /dev/null
+++ b/node_modules/to-through/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2017 Blaine Bublitz <blaine.bublitz@gmail.com>, Eric Schoffstall <yo@contra.io> and other contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/node_modules/to-through/README.md b/node_modules/to-through/README.md
new file mode 100644
index 0000000..0c02b7c
--- /dev/null
+++ b/node_modules/to-through/README.md
@@ -0,0 +1,56 @@
+<p align="center">
+  <a href="http://gulpjs.com">
+    <img height="257" width="114" src="https://raw.githubusercontent.com/gulpjs/artwork/master/gulp-2x.png">
+  </a>
+</p>
+
+# to-through
+
+[![NPM version][npm-image]][npm-url] [![Downloads][downloads-image]][npm-url] [![Build Status][travis-image]][travis-url] [![AppVeyor Build Status][appveyor-image]][appveyor-url] [![Coveralls Status][coveralls-image]][coveralls-url] [![Gitter chat][gitter-image]][gitter-url]
+
+Wrap a ReadableStream in a TransformStream.
+
+## Usage
+
+```js
+var from = require('from2');
+var concat = require('concat-stream');
+var toThrough = require('to-through');
+
+var readable = from([' ', 'hello', ' ', 'world']);
+
+// Can be used as a Readable or Transform
+var maybeTransform = toThrough(readable);
+
+from(['hi', ' ', 'there', ','])
+  .pipe(maybeTransform)
+  .pipe(concat(function(result) {
+    // result.toString() === 'hi there, hello world'
+  }));
+```
+
+## API
+
+### `toThrough(readableStream)`
+
+Takes a `readableStream` as the only argument and returns a `through2` stream. If the returned stream is piped before `nextTick`, the wrapped `readableStream` will not flow until the upstream is flushed. If the stream is not piped before `nextTick`, it is ended and flushed (acting as a proper readable).
+
+## License
+
+MIT
+
+[downloads-image]: http://img.shields.io/npm/dm/to-through.svg
+[npm-url]: https://npmjs.com/package/to-through
+[npm-image]: http://img.shields.io/npm/v/to-through.svg
+
+[travis-url]: https://travis-ci.org/gulpjs/to-through
+[travis-image]: http://img.shields.io/travis/gulpjs/to-through.svg?label=travis-ci
+
+[appveyor-url]: https://ci.appveyor.com/project/gulpjs/to-through
+[appveyor-image]: https://img.shields.io/appveyor/ci/gulpjs/to-through.svg?label=appveyor
+
+[coveralls-url]: https://coveralls.io/r/gulpjs/to-through
+[coveralls-image]: http://img.shields.io/coveralls/gulpjs/to-through/master.svg
+
+[gitter-url]: https://gitter.im/gulpjs/gulp
+[gitter-image]: https://badges.gitter.im/gulpjs/gulp.png
diff --git a/node_modules/to-through/index.js b/node_modules/to-through/index.js
new file mode 100644
index 0000000..c71a677
--- /dev/null
+++ b/node_modules/to-through/index.js
@@ -0,0 +1,60 @@
+'use strict';
+
+var through = require('through2');
+
+function forward(chunk, enc, cb) {
+  cb(null, chunk);
+}
+
+function toThrough(readable) {
+
+  var opts = {
+    objectMode: readable._readableState.objectMode,
+    highWaterMark: readable._readableState.highWaterMark,
+  };
+
+  function flush(cb) {
+    var self = this;
+
+    readable.on('readable', onReadable);
+    readable.on('end', cb);
+
+    function onReadable() {
+      var chunk;
+      while (chunk = readable.read()) {
+        self.push(chunk);
+      }
+    }
+  }
+
+  var wrapper = through(opts, forward, flush);
+
+  var shouldFlow = true;
+  wrapper.once('pipe', onPipe);
+  wrapper.on('newListener', onListener);
+  readable.on('error', wrapper.emit.bind(wrapper, 'error'));
+
+  function onListener(event) {
+    // Once we've seen the data or readable event, check if we need to flow
+    if (event === 'data' || event === 'readable') {
+      maybeFlow();
+      this.removeListener('newListener', onListener);
+    }
+  }
+
+  function onPipe() {
+    // If the wrapper is piped, disable flow
+    shouldFlow = false;
+  }
+
+  function maybeFlow() {
+    // If we need to flow, end the stream which triggers flush
+    if (shouldFlow) {
+      wrapper.end();
+    }
+  }
+
+  return wrapper;
+}
+
+module.exports = toThrough;
diff --git a/node_modules/to-through/package.json b/node_modules/to-through/package.json
new file mode 100644
index 0000000..e2a6dff
--- /dev/null
+++ b/node_modules/to-through/package.json
@@ -0,0 +1,85 @@
+{
+  "_from": "to-through@^2.0.0",
+  "_id": "to-through@2.0.0",
+  "_inBundle": false,
+  "_integrity": "sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY=",
+  "_location": "/to-through",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "to-through@^2.0.0",
+    "name": "to-through",
+    "escapedName": "to-through",
+    "rawSpec": "^2.0.0",
+    "saveSpec": null,
+    "fetchSpec": "^2.0.0"
+  },
+  "_requiredBy": [
+    "/vinyl-fs"
+  ],
+  "_resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz",
+  "_shasum": "fc92adaba072647bc0b67d6b03664aa195093af6",
+  "_spec": "to-through@^2.0.0",
+  "_where": "C:\\Users\\marcr\\Desktop\\KorAp\\Git\\Kalamar\\node_modules\\vinyl-fs",
+  "author": {
+    "name": "Gulp Team",
+    "email": "team@gulpjs.com",
+    "url": "http://gulpjs.com/"
+  },
+  "bugs": {
+    "url": "https://github.com/gulpjs/to-through/issues"
+  },
+  "bundleDependencies": false,
+  "contributors": [
+    {
+      "name": "Blaine Bublitz",
+      "email": "blaine.bublitz@gmail.com"
+    }
+  ],
+  "dependencies": {
+    "through2": "^2.0.3"
+  },
+  "deprecated": false,
+  "description": "Wrap a ReadableStream in a TransformStream.",
+  "devDependencies": {
+    "eslint": "^1.10.3",
+    "eslint-config-gulp": "^2.0.0",
+    "expect": "^1.20.2",
+    "istanbul": "^0.4.3",
+    "istanbul-coveralls": "^1.0.3",
+    "jscs": "^2.4.0",
+    "jscs-preset-gulp": "^1.0.0",
+    "mississippi": "^1.3.0",
+    "mocha": "^3.2.0"
+  },
+  "engines": {
+    "node": ">= 0.10"
+  },
+  "files": [
+    "LICENSE",
+    "index.js"
+  ],
+  "homepage": "https://github.com/gulpjs/to-through#readme",
+  "keywords": [
+    "transform",
+    "readable",
+    "through",
+    "wrap"
+  ],
+  "license": "MIT",
+  "main": "index.js",
+  "name": "to-through",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/gulpjs/to-through.git"
+  },
+  "scripts": {
+    "cover": "istanbul cover _mocha --report lcovonly",
+    "coveralls": "npm run cover && istanbul-coveralls",
+    "lint": "eslint index.js test/ && jscs index.js test/",
+    "pretest": "npm run lint",
+    "test": "mocha --async-only"
+  },
+  "version": "2.0.0"
+}
