diff --git a/node_modules/get-value/LICENSE b/node_modules/get-value/LICENSE
new file mode 100644
index 0000000..39245ac
--- /dev/null
+++ b/node_modules/get-value/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-2016, Jon Schlinkert.
+
+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/get-value/index.js b/node_modules/get-value/index.js
new file mode 100644
index 0000000..5879a88
--- /dev/null
+++ b/node_modules/get-value/index.js
@@ -0,0 +1,50 @@
+/*!
+ * get-value <https://github.com/jonschlinkert/get-value>
+ *
+ * Copyright (c) 2014-2015, Jon Schlinkert.
+ * Licensed under the MIT License.
+ */
+
+module.exports = function(obj, prop, a, b, c) {
+  if (!isObject(obj) || !prop) {
+    return obj;
+  }
+
+  prop = toString(prop);
+
+  // allowing for multiple properties to be passed as
+  // a string or array, but much faster (3-4x) than doing
+  // `[].slice.call(arguments)`
+  if (a) prop += '.' + toString(a);
+  if (b) prop += '.' + toString(b);
+  if (c) prop += '.' + toString(c);
+
+  if (prop in obj) {
+    return obj[prop];
+  }
+
+  var segs = prop.split('.');
+  var len = segs.length;
+  var i = -1;
+
+  while (obj && (++i < len)) {
+    var key = segs[i];
+    while (key[key.length - 1] === '\\') {
+      key = key.slice(0, -1) + '.' + segs[++i];
+    }
+    obj = obj[key];
+  }
+  return obj;
+};
+
+function isObject(val) {
+  return val !== null && (typeof val === 'object' || typeof val === 'function');
+}
+
+function toString(val) {
+  if (!val) return '';
+  if (Array.isArray(val)) {
+    return val.join('.');
+  }
+  return val;
+}
diff --git a/node_modules/get-value/package.json b/node_modules/get-value/package.json
new file mode 100644
index 0000000..fac462d
--- /dev/null
+++ b/node_modules/get-value/package.json
@@ -0,0 +1,113 @@
+{
+  "_from": "get-value@^2.0.6",
+  "_id": "get-value@2.0.6",
+  "_inBundle": false,
+  "_integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+  "_location": "/get-value",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "get-value@^2.0.6",
+    "name": "get-value",
+    "escapedName": "get-value",
+    "rawSpec": "^2.0.6",
+    "saveSpec": null,
+    "fetchSpec": "^2.0.6"
+  },
+  "_requiredBy": [
+    "/cache-base",
+    "/has-value",
+    "/union-value",
+    "/unset-value/has-value"
+  ],
+  "_resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+  "_shasum": "dc15ca1c672387ca76bd37ac0a395ba2042a2c28",
+  "_spec": "get-value@^2.0.6",
+  "_where": "C:\\Users\\marcr\\Desktop\\KorAp\\Git\\Kalamar\\node_modules\\cache-base",
+  "author": {
+    "name": "Jon Schlinkert",
+    "url": "https://github.com/jonschlinkert"
+  },
+  "bugs": {
+    "url": "https://github.com/jonschlinkert/get-value/issues"
+  },
+  "bundleDependencies": false,
+  "deprecated": false,
+  "description": "Use property paths (`a.b.c`) to get a nested value from an object.",
+  "devDependencies": {
+    "ansi-bold": "^0.1.1",
+    "arr-reduce": "^1.0.1",
+    "benchmarked": "^0.1.4",
+    "dot-prop": "^2.2.0",
+    "getobject": "^0.1.0",
+    "gulp": "^3.9.0",
+    "gulp-eslint": "^1.1.1",
+    "gulp-format-md": "^0.1.5",
+    "gulp-istanbul": "^0.10.2",
+    "gulp-mocha": "^2.1.3",
+    "isobject": "^2.0.0",
+    "matched": "^0.3.2",
+    "minimist": "^1.2.0"
+  },
+  "engines": {
+    "node": ">=0.10.0"
+  },
+  "files": [
+    "index.js"
+  ],
+  "homepage": "https://github.com/jonschlinkert/get-value",
+  "keywords": [
+    "get",
+    "key",
+    "nested",
+    "object",
+    "path",
+    "paths",
+    "prop",
+    "properties",
+    "property",
+    "props",
+    "segment",
+    "value",
+    "values"
+  ],
+  "license": "MIT",
+  "main": "index.js",
+  "name": "get-value",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/jonschlinkert/get-value.git"
+  },
+  "scripts": {
+    "test": "mocha"
+  },
+  "verb": {
+    "run": true,
+    "toc": false,
+    "layout": "default",
+    "tasks": [
+      "readme"
+    ],
+    "plugins": [
+      "gulp-format-md"
+    ],
+    "related": {
+      "list": [
+        "has-any",
+        "has-any-deep",
+        "has-value",
+        "set-value",
+        "unset-value"
+      ]
+    },
+    "reflinks": [
+      "verb",
+      "verb-readme-generator"
+    ],
+    "lint": {
+      "reflinks": true
+    }
+  },
+  "version": "2.0.6"
+}
