diff --git a/node_modules/grunt-legacy-log-utils/README.md b/node_modules/grunt-legacy-log-utils/README.md
new file mode 100644
index 0000000..aa10daf
--- /dev/null
+++ b/node_modules/grunt-legacy-log-utils/README.md
@@ -0,0 +1,6 @@
+# grunt-legacy-log-utils
+> Static methods for the Grunt 0.4.x logger.
+
+[![Build Status: Linux](https://travis-ci.org/gruntjs/grunt-legacy-log-utils.svg?branch=master)](https://travis-ci.org/gruntjs/grunt-legacy-log-utils)
+[![Build Status: Windows](https://ci.appveyor.com/api/projects/status/a6s4cy3fcbl33hnp?svg=true)](https://ci.appveyor.com/project/gruntjs/grunt-legacy-log-utils)
+[![Built with Grunt](https://cdn.gruntjs.com/builtwith.png)](http://gruntjs.com/)
diff --git a/node_modules/grunt-legacy-log-utils/index.js b/node_modules/grunt-legacy-log-utils/index.js
new file mode 100644
index 0000000..2b72907
--- /dev/null
+++ b/node_modules/grunt-legacy-log-utils/index.js
@@ -0,0 +1,115 @@
+/*
+ * grunt
+ * http://gruntjs.com/
+ *
+ * Copyright (c) 2016 "Cowboy" Ben Alman
+ * Licensed under the MIT license.
+ * https://github.com/gruntjs/grunt/blob/master/LICENSE-MIT
+ */
+
+'use strict';
+
+var chalk = require('chalk');
+var _ = require('lodash');
+
+// Pretty-format a word list.
+exports.wordlist = function(arr, options) {
+  options = _.defaults(options || {}, {
+    separator: ', ',
+    color: 'cyan'
+  });
+  return arr.map(function(item) {
+    return options.color ? chalk[options.color](item) : item;
+  }).join(options.separator);
+};
+
+// Return a string, uncolored (suitable for testing .length, etc).
+exports.uncolor = function(str) {
+  return str.replace(/\x1B\[\d+m/g, '');
+};
+
+// Word-wrap text to a given width, permitting ANSI color codes.
+exports.wraptext = function(width, text) {
+  // notes to self:
+  // grab 1st character or ansi code from string
+  // if ansi code, add to array and save for later, strip from front of string
+  // if character, add to array and increment counter, strip from front of string
+  // if width + 1 is reached and current character isn't space:
+  //  slice off everything after last space in array and prepend it to string
+  //  etc
+
+  // This result array will be joined on \n.
+  var result = [];
+  var matches, color, tmp;
+  var captured = [];
+  var charlen = 0;
+
+  while (matches = text.match(/(?:(\x1B\[\d+m)|\n|(.))([\s\S]*)/)) {
+    // Updated text to be everything not matched.
+    text = matches[3];
+
+    // Matched a color code?
+    if (matches[1]) {
+      // Save last captured color code for later use.
+      color = matches[1];
+      // Capture color code.
+      captured.push(matches[1]);
+      continue;
+
+    // Matched a non-newline character?
+    } else if (matches[2]) {
+      // If this is the first character and a previous color code was set, push
+      // that onto the captured array first.
+      if (charlen === 0 && color) { captured.push(color); }
+      // Push the matched character.
+      captured.push(matches[2]);
+      // Increment the current charlen.
+      charlen++;
+      // If not yet at the width limit or a space was matched, continue.
+      if (charlen <= width || matches[2] === ' ') { continue; }
+      // The current charlen exceeds the width and a space wasn't matched.
+      // "Roll everything back" until the last space character.
+      tmp = captured.lastIndexOf(' ');
+      text = captured.slice(tmp === -1 ? tmp : tmp + 1).join('') + text;
+      captured = captured.slice(0, tmp);
+    }
+
+    // The limit has been reached. Push captured string onto result array.
+    result.push(captured.join(''));
+
+    // Reset captured array and charlen.
+    captured = [];
+    charlen = 0;
+  }
+
+  result.push(captured.join(''));
+  return result.join('\n');
+};
+
+// Format output into columns, wrapping words as-necessary.
+exports.table = function(widths, texts) {
+  var rows = [];
+  widths.forEach(function(width, i) {
+    var lines = this.wraptext(width, texts[i]).split('\n');
+    lines.forEach(function(line, j) {
+      var row = rows[j];
+      if (!row) { row = rows[j] = []; }
+      row[i] = line;
+    });
+  }, this);
+
+  var lines = [];
+  rows.forEach(function(row) {
+    var txt = '';
+    var column;
+    for (var i = 0; i < row.length; i++) {
+      column = row[i] || '';
+      txt += column;
+      var diff = widths[i] - this.uncolor(column).length;
+      if (diff > 0) { txt += _.repeat(' ', diff); }
+    }
+    lines.push(txt);
+  }, this);
+
+  return lines.join('\n');
+};
diff --git a/node_modules/grunt-legacy-log-utils/package.json b/node_modules/grunt-legacy-log-utils/package.json
new file mode 100644
index 0000000..5d7705e
--- /dev/null
+++ b/node_modules/grunt-legacy-log-utils/package.json
@@ -0,0 +1,68 @@
+{
+  "_from": "grunt-legacy-log-utils@~2.1.0",
+  "_id": "grunt-legacy-log-utils@2.1.0",
+  "_inBundle": false,
+  "_integrity": "sha512-lwquaPXJtKQk0rUM1IQAop5noEpwFqOXasVoedLeNzaibf/OPWjKYvvdqnEHNmU+0T0CaReAXIbGo747ZD+Aaw==",
+  "_location": "/grunt-legacy-log-utils",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "grunt-legacy-log-utils@~2.1.0",
+    "name": "grunt-legacy-log-utils",
+    "escapedName": "grunt-legacy-log-utils",
+    "rawSpec": "~2.1.0",
+    "saveSpec": null,
+    "fetchSpec": "~2.1.0"
+  },
+  "_requiredBy": [
+    "/grunt-legacy-log"
+  ],
+  "_resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-2.1.0.tgz",
+  "_shasum": "49a8c7dc74051476dcc116c32faf9db8646856ef",
+  "_spec": "grunt-legacy-log-utils@~2.1.0",
+  "_where": "C:\\Users\\marcr\\Desktop\\KorAp\\Git\\Kalamar\\node_modules\\grunt-legacy-log",
+  "author": {
+    "name": "\"Cowboy\" Ben Alman",
+    "url": "http://benalman.com/"
+  },
+  "bugs": {
+    "url": "http://github.com/gruntjs/grunt-legacy-log-utils/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "chalk": "~4.1.0",
+    "lodash": "~4.17.19"
+  },
+  "deprecated": false,
+  "description": "Static methods for the Grunt 0.4.x logger.",
+  "devDependencies": {
+    "grunt": "~1.2.1",
+    "grunt-cli": "~1.3.2",
+    "grunt-contrib-jshint": "~2.1.0",
+    "grunt-contrib-nodeunit": "~2.1.0",
+    "grunt-contrib-watch": "~1.1.0"
+  },
+  "engines": {
+    "node": ">=10"
+  },
+  "files": [
+    "index.js"
+  ],
+  "homepage": "http://gruntjs.com/",
+  "keywords": [
+    "grunt",
+    "legacy"
+  ],
+  "license": "MIT",
+  "main": "index.js",
+  "name": "grunt-legacy-log-utils",
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/gruntjs/grunt-legacy-log-utils.git"
+  },
+  "scripts": {
+    "test": "grunt test"
+  },
+  "version": "2.1.0"
+}
