diff --git a/node_modules/fined/LICENSE b/node_modules/fined/LICENSE
new file mode 100644
index 0000000..538c116
--- /dev/null
+++ b/node_modules/fined/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2016, 2017, 2018 Blaine Bublitz <blaine.bublitz@gmail.com> and Eric Schoffstall <yo@contra.io>
+
+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/fined/README.md b/node_modules/fined/README.md
new file mode 100644
index 0000000..d0ec267
--- /dev/null
+++ b/node_modules/fined/README.md
@@ -0,0 +1,81 @@
+<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>
+
+# fined
+
+[![NPM version][npm-image]][npm-url] [![Downloads][downloads-image]][npm-url] [![Travis 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]
+
+Find a file given a declaration of locations.
+
+## Usage
+
+```js
+var fined = require('fined');
+
+fined({ path: 'path/to/file', extensions: ['.js', '.json'] });
+// => { path: '/absolute/path/to/file.js', extension: '.js' }  (if file exists)
+// => null  (if file does not exist)
+
+var opts = {
+  name: '.app',
+  cwd: '.',
+  extensions: {
+    'rc': 'default-rc-loader',
+    '.yml': 'default-yml-loader',
+  },
+};
+
+fined({ path: '.' }, opts);
+// => { path: '/absolute/of/cwd/.app.yml', extension: { '.yml': 'default-yml-loader' } }
+
+fined({ path: '~', extensions: { 'rc': 'some-special-rc-loader' } }, opts);
+// => { path: '/User/home/.apprc', extension: { 'rc': 'some-special-rc-loader' } }
+```
+
+## API
+
+### fined(pathObj, opts) => object | null
+
+#### Arguments:
+
+* **pathObj** [string | object] : a path setting for finding a file.
+* **opts** [object] : a plain object supplements `pathObj`.
+
+   `pathObj` and `opts` can have same properties:
+
+   * **path** [string] : a path string.
+   * **name** [string] : a basename.
+   * **extensions**: [string | array | object] : extensions.
+   * **cwd**: a base directory of `path` and for finding up.
+   * **findUp**: [boolean] : a flag to find up.
+
+#### Return:
+
+This function returns a plain object which consists of following properties if a file exists otherwise null.
+
+   * **path** : an absolute path
+   * **extension** : a string or a plain object of extension.
+
+
+## License
+
+MIT
+
+[downloads-image]: http://img.shields.io/npm/dm/fined.svg
+[npm-url]: https://www.npmjs.com/package/fined
+[npm-image]: http://img.shields.io/npm/v/fined.svg
+
+[travis-url]: https://travis-ci.org/gulpjs/fined
+[travis-image]: http://img.shields.io/travis/gulpjs/fined.svg?label=travis-ci
+
+[appveyor-url]: https://ci.appveyor.com/project/gulpjs/fined
+[appveyor-image]: https://img.shields.io/appveyor/ci/gulpjs/fined.svg?label=appveyor
+
+[coveralls-url]: https://coveralls.io/r/gulpjs/fined
+[coveralls-image]: http://img.shields.io/coveralls/gulpjs/fined/master.svg
+
+[gitter-url]: https://gitter.im/gulpjs/gulp
+[gitter-image]: https://badges.gitter.im/gulpjs/gulp.svg
diff --git a/node_modules/fined/index.js b/node_modules/fined/index.js
new file mode 100644
index 0000000..1a66ab2
--- /dev/null
+++ b/node_modules/fined/index.js
@@ -0,0 +1,174 @@
+'use strict';
+
+var fs = require('fs');
+var path = require('path');
+
+var isPlainObject = require('is-plain-object');
+var pick = require('object.pick');
+var defaults = require('object.defaults/immutable');
+var expandTilde = require('expand-tilde');
+var parsePath = require('parse-filepath');
+
+
+function fined(pathObj, defaultObj) {
+  var expandedPath = expandPath(pathObj, defaultObj);
+  return expandedPath ? findWithExpandedPath(expandedPath) : null;
+}
+
+function expandPath(pathObj, defaultObj) {
+  if (!isPlainObject(defaultObj)) {
+    defaultObj = {};
+  }
+
+  if (isString(pathObj)) {
+    pathObj = { path: pathObj };
+  }
+
+  if (!isPlainObject(pathObj)) {
+    pathObj = {};
+  }
+
+  pathObj = defaults(pathObj, defaultObj);
+
+  var filePath;
+  if (!isString(pathObj.path)) {
+    return null;
+  }
+  // Execution of toString is for a String object.
+  if (isString(pathObj.name) && pathObj.name) {
+    if (pathObj.path) {
+      filePath = expandTilde(pathObj.path.toString());
+      filePath = path.join(filePath, pathObj.name.toString());
+    } else {
+      filePath = pathObj.name.toString();
+    }
+  } else {
+    filePath = expandTilde(pathObj.path.toString());
+  }
+
+  var extArr = createExtensionArray(pathObj.extensions);
+  var extMap = createExtensionMap(pathObj.extensions);
+
+  var basedir = isString(pathObj.cwd) ? pathObj.cwd.toString() : '.';
+  basedir = path.resolve(expandTilde(basedir));
+
+  var findUp = !!pathObj.findUp;
+
+  var parsed = parsePath(filePath);
+  if (parsed.isAbsolute) {
+    filePath = filePath.slice(parsed.root.length);
+    findUp = false;
+    basedir = parsed.root;
+  /* istanbul ignore if */
+  } else if (parsed.root) { // Expanded path has a drive letter on Windows.
+    filePath = filePath.slice(parsed.root.length);
+    basedir = path.resolve(parsed.root);
+  }
+
+  if (parsed.ext) {
+    filePath = filePath.slice(0, -parsed.ext.length);
+    // This ensures that only the original extension is matched.
+    extArr = [parsed.ext];
+  }
+
+  return {
+    path: filePath,
+    basedir: basedir,
+    findUp: findUp,
+    extArr: extArr,
+    extMap: extMap,
+  };
+}
+
+function findWithExpandedPath(expanded) {
+  var found = expanded.findUp ?
+    findUpFile(expanded.basedir, expanded.path, expanded.extArr) :
+    findFile(expanded.basedir, expanded.path, expanded.extArr);
+
+  if (!found) {
+    return null;
+  }
+
+  if (expanded.extMap) {
+    found.extension = pick(expanded.extMap, found.extension);
+  }
+  return found;
+}
+
+function findFile(basedir, relpath, extArr) {
+  var noExtPath = path.resolve(basedir, relpath);
+  for (var i = 0, n = extArr.length; i < n; i++) {
+    var filepath = noExtPath + extArr[i];
+    try {
+      fs.statSync(filepath);
+      return { path: filepath, extension: extArr[i] };
+    } catch (e) {
+      // Ignore error
+    }
+  }
+
+  return null;
+}
+
+function findUpFile(basedir, filepath, extArr) {
+  var lastdir;
+  do {
+    var found = findFile(basedir, filepath, extArr);
+    if (found) {
+      return found;
+    }
+
+    lastdir = basedir;
+    basedir = path.dirname(basedir);
+  } while (lastdir !== basedir);
+
+  return null;
+}
+
+function createExtensionArray(exts) {
+  if (isString(exts)) {
+    return [exts];
+  }
+
+  if (Array.isArray(exts)) {
+    exts = exts.filter(isString);
+    return (exts.length > 0) ? exts : [''];
+  }
+
+  if (isPlainObject(exts)) {
+    exts = Object.keys(exts);
+    return (exts.length > 0) ? exts : [''];
+  }
+
+  return [''];
+}
+
+function createExtensionMap(exts) {
+  if (!isPlainObject(exts)) {
+    return null;
+  }
+
+  if (isEmpty(exts)) {
+    return { '': null };
+  }
+
+  return exts;
+}
+
+function isEmpty(object) {
+  return !Object.keys(object).length;
+}
+
+function isString(value) {
+  if (typeof value === 'string') {
+    return true;
+  }
+
+  if (Object.prototype.toString.call(value) === '[object String]') {
+    return true;
+  }
+
+  return false;
+}
+
+module.exports = fined;
diff --git a/node_modules/fined/package.json b/node_modules/fined/package.json
new file mode 100644
index 0000000..e0689a7
--- /dev/null
+++ b/node_modules/fined/package.json
@@ -0,0 +1,89 @@
+{
+  "_from": "fined@^1.0.1",
+  "_id": "fined@1.2.0",
+  "_inBundle": false,
+  "_integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==",
+  "_location": "/fined",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "fined@^1.0.1",
+    "name": "fined",
+    "escapedName": "fined",
+    "rawSpec": "^1.0.1",
+    "saveSpec": null,
+    "fetchSpec": "^1.0.1"
+  },
+  "_requiredBy": [
+    "/liftoff"
+  ],
+  "_resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz",
+  "_shasum": "d00beccf1aa2b475d16d423b0238b713a2c4a37b",
+  "_spec": "fined@^1.0.1",
+  "_where": "C:\\Users\\marcr\\Desktop\\KorAp\\Git\\Kalamar\\node_modules\\liftoff",
+  "author": {
+    "name": "Gulp Team",
+    "email": "team@gulpjs.com",
+    "url": "http://gulpjs.com/"
+  },
+  "bugs": {
+    "url": "https://github.com/gulpjs/fined/issues"
+  },
+  "bundleDependencies": false,
+  "contributors": [
+    {
+      "name": "Takayuki Sato",
+      "email": "sttk.xslet@gmail.com"
+    },
+    {
+      "name": "Blaine Bublitz",
+      "email": "blaine.bublitz@gmail.com"
+    }
+  ],
+  "dependencies": {
+    "expand-tilde": "^2.0.2",
+    "is-plain-object": "^2.0.3",
+    "object.defaults": "^1.1.0",
+    "object.pick": "^1.2.0",
+    "parse-filepath": "^1.0.1"
+  },
+  "deprecated": false,
+  "description": "Find a file given a declaration of locations.",
+  "devDependencies": {
+    "eslint": "^2.13.0",
+    "eslint-config-gulp": "^3.0.1",
+    "expect": "^1.20.2",
+    "istanbul": "^0.4.3",
+    "istanbul-coveralls": "^1.0.3",
+    "mocha": "^3.5.3"
+  },
+  "engines": {
+    "node": ">= 0.10"
+  },
+  "files": [
+    "index.js",
+    "LICENSE"
+  ],
+  "homepage": "https://github.com/gulpjs/fined#readme",
+  "keywords": [
+    "find",
+    "lookup",
+    "config"
+  ],
+  "license": "MIT",
+  "main": "index.js",
+  "name": "fined",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/gulpjs/fined.git"
+  },
+  "scripts": {
+    "cover": "istanbul cover _mocha --report lcovonly",
+    "coveralls": "npm run cover && istanbul-coveralls",
+    "lint": "eslint .",
+    "pretest": "npm run lint",
+    "test": "mocha --async-only"
+  },
+  "version": "1.2.0"
+}
