diff --git a/node_modules/grunt-terser/.jshintrc b/node_modules/grunt-terser/.jshintrc
new file mode 100644
index 0000000..f57a8ff
--- /dev/null
+++ b/node_modules/grunt-terser/.jshintrc
@@ -0,0 +1,13 @@
+{
+  "curly": true,
+  "eqeqeq": true,
+  "immed": true,
+  "latedef": true,
+  "newcap": true,
+  "noarg": true,
+  "sub": true,
+  "undef": true,
+  "boss": true,
+  "eqnull": true,
+  "node": true
+}
diff --git a/node_modules/grunt-terser/.npmignore b/node_modules/grunt-terser/.npmignore
new file mode 100644
index 0000000..24b360d
--- /dev/null
+++ b/node_modules/grunt-terser/.npmignore
@@ -0,0 +1,4 @@
+node_modules
+npm-debug.log
+tmp
+.vscode
\ No newline at end of file
diff --git a/node_modules/grunt-terser/.nvmrc b/node_modules/grunt-terser/.nvmrc
new file mode 100644
index 0000000..f4965a3
--- /dev/null
+++ b/node_modules/grunt-terser/.nvmrc
@@ -0,0 +1 @@
+6.0.0
\ No newline at end of file
diff --git a/node_modules/grunt-terser/.prettierrc b/node_modules/grunt-terser/.prettierrc
new file mode 100644
index 0000000..c1a6f66
--- /dev/null
+++ b/node_modules/grunt-terser/.prettierrc
@@ -0,0 +1,4 @@
+{
+  "singleQuote": true,
+  "trailingComma": "es5"
+}
diff --git a/node_modules/grunt-terser/Gruntfile.js b/node_modules/grunt-terser/Gruntfile.js
new file mode 100644
index 0000000..fa17b8c
--- /dev/null
+++ b/node_modules/grunt-terser/Gruntfile.js
@@ -0,0 +1,73 @@
+/*
+ * grunt-terser
+ * https://github.com/adascal/grunt-terser
+ *
+ * Copyright (c) 2018 Alexandr Dascal
+ * Licensed under the MIT license.
+ */
+
+'use strict';
+
+module.exports = function(grunt) {
+
+  // Project configuration.
+  grunt.initConfig({
+    jshint: {
+      all: [
+        'Gruntfile.js',
+        'tasks/*.js',
+        '<%= nodeunit.tests %>'
+      ],
+      options: {
+        jshintrc: '.jshintrc'
+      }
+    },
+
+    // Before generating any new files, remove any previously-created files.
+    clean: {
+      tests: ['tmp']
+    },
+
+    // Configuration to be run (and then tested).
+    terser: {
+      default_options: {
+        options: {
+        },
+        files: {
+          'tmp/default_options': ['test/fixtures/testing', 'test/fixtures/123']
+        }
+      },
+      custom_options: {
+        options: {
+          separator: ': ',
+          punctuation: ' !!!'
+        },
+        files: {
+          'tmp/custom_options': ['test/fixtures/testing', 'test/fixtures/123']
+        }
+      }
+    },
+
+    // Unit tests.
+    nodeunit: {
+      tests: ['test/*_test.js']
+    }
+
+  });
+
+  // Actually load this plugin's task(s).
+  grunt.loadTasks('tasks');
+
+  // These plugins provide necessary tasks.
+  grunt.loadNpmTasks('grunt-contrib-jshint');
+  grunt.loadNpmTasks('grunt-contrib-clean');
+  grunt.loadNpmTasks('grunt-contrib-nodeunit');
+
+  // Whenever the "test" task is run, first clean the "tmp" dir, then run this
+  // plugin's task(s), then test the result.
+  grunt.registerTask('test', ['clean', 'terser', 'nodeunit']);
+
+  // By default, lint and run all tests.
+  grunt.registerTask('default', ['jshint', 'test']);
+
+};
diff --git a/node_modules/grunt-terser/LICENSE-MIT b/node_modules/grunt-terser/LICENSE-MIT
new file mode 100644
index 0000000..c3b4545
--- /dev/null
+++ b/node_modules/grunt-terser/LICENSE-MIT
@@ -0,0 +1,22 @@
+Copyright (c) 2018 Alexandr Dascal
+
+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/grunt-terser/README.md b/node_modules/grunt-terser/README.md
new file mode 100644
index 0000000..23b38b4
--- /dev/null
+++ b/node_modules/grunt-terser/README.md
@@ -0,0 +1,46 @@
+# grunt-terser
+
+> Grunt plugin for A JavaScript parser, mangler/compressor and beautifier toolkit for ES6+.
+
+## Getting Started
+This plugin requires Grunt `~0.4.5`
+
+If you haven't used [Grunt](http://gruntjs.com/) before, be sure to check out the [Getting Started](http://gruntjs.com/getting-started) guide, as it explains how to create a [Gruntfile](http://gruntjs.com/sample-gruntfile) as well as install and use Grunt plugins. Once you're familiar with that process, you may install this plugin with this command:
+
+```shell
+npm install grunt-terser --save-dev
+```
+
+Once the plugin has been installed, it may be enabled inside your Gruntfile with this line of JavaScript:
+
+```js
+grunt.loadNpmTasks('grunt-terser');
+```
+
+## The "terser" task
+
+### Overview
+In your project's Gruntfile, add a section named `terser` to the data object passed into `grunt.initConfig()`.
+
+```js
+grunt.initConfig({
+  terser: {
+    options: {
+      // Task-specific options go here.
+    },
+    your_target: {
+      // Target-specific file lists and/or options go here.
+    },
+  },
+});
+```
+
+### Options
+
+Accepts Terser's [options](https://www.npmjs.com/package/terser#minify-options).
+
+## Contributing
+In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code using [Grunt](http://gruntjs.com/).
+
+## Release History
+_(Nothing yet)_
diff --git a/node_modules/grunt-terser/package.json b/node_modules/grunt-terser/package.json
new file mode 100644
index 0000000..e923b47
--- /dev/null
+++ b/node_modules/grunt-terser/package.json
@@ -0,0 +1,86 @@
+{
+  "_from": "grunt-terser@^1.0.0",
+  "_id": "grunt-terser@1.0.0",
+  "_inBundle": false,
+  "_integrity": "sha512-8MfNU3cVP4UWZLlIjJMUpk3NWIEmaD+CwewhDpUTiPaS49EkBiSWCmGAihqWxBKbiOC3KePPXMmB/yiaVNqW2w==",
+  "_location": "/grunt-terser",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "grunt-terser@^1.0.0",
+    "name": "grunt-terser",
+    "escapedName": "grunt-terser",
+    "rawSpec": "^1.0.0",
+    "saveSpec": null,
+    "fetchSpec": "^1.0.0"
+  },
+  "_requiredBy": [
+    "#DEV:/"
+  ],
+  "_resolved": "https://registry.npmjs.org/grunt-terser/-/grunt-terser-1.0.0.tgz",
+  "_shasum": "cb46d645fe51ec9b3bcb1f37dbd2f3112d91e791",
+  "_spec": "grunt-terser@^1.0.0",
+  "_where": "C:\\Users\\marcr\\Desktop\\KorAp\\Git\\Kalamar",
+  "author": {
+    "name": "Alexandr Dascal",
+    "email": "Alexandr.Dascal@gmail.com"
+  },
+  "bugs": {
+    "url": "https://github.com/adascal/grunt-terser/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "terser": "^4.3.9"
+  },
+  "deprecated": false,
+  "description": "Grunt plugin for A JavaScript parser, mangler/compressor and beautifier toolkit for ES6+.",
+  "devDependencies": {
+    "grunt": "^1.0.4",
+    "grunt-contrib-clean": "^2.0.0",
+    "grunt-contrib-jshint": "^2.1.0",
+    "grunt-contrib-nodeunit": "^2.0.0"
+  },
+  "engines": {
+    "node": ">=6.0.0"
+  },
+  "homepage": "https://github.com/adascal/grunt-terser",
+  "keywords": [
+    "gruntplugin",
+    "grunt",
+    "minify",
+    "terser",
+    "uglify",
+    "terser",
+    "uglify-es",
+    "uglify-js",
+    "minify",
+    "minifier",
+    "javascript",
+    "ecmascript",
+    "es5",
+    "es6",
+    "es7",
+    "es8",
+    "es2015",
+    "es2016",
+    "es2017",
+    "async",
+    "await"
+  ],
+  "licenses": [
+    {
+      "type": "MIT",
+      "url": "https://github.com/adascal/grunt-terser/blob/master/LICENSE-MIT"
+    }
+  ],
+  "name": "grunt-terser",
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/adascal/grunt-terser.git"
+  },
+  "scripts": {
+    "test": "grunt test"
+  },
+  "version": "1.0.0"
+}
diff --git a/node_modules/grunt-terser/tasks/terser.js b/node_modules/grunt-terser/tasks/terser.js
new file mode 100644
index 0000000..9131319
--- /dev/null
+++ b/node_modules/grunt-terser/tasks/terser.js
@@ -0,0 +1,81 @@
+/*
+ * grunt-terser
+ * https://github.com/adascal/grunt-terser
+ *
+ * Copyright (c) 2018 Alexandr Dascal
+ * Licensed under the MIT license.
+ */
+
+'use strict';
+
+var Terser = require('terser');
+
+module.exports = function(grunt) {
+  // Please see the Grunt documentation for more information regarding task
+  // creation: http://gruntjs.com/creating-tasks
+
+  grunt.registerMultiTask(
+    'terser',
+    'Grunt plugin for A JavaScript parser, mangler/compressor and beautifier toolkit for ES6+.',
+    function() {
+      // Merge task-specific and/or target-specific options with these defaults.
+      var options = this.options();
+      var createdFiles = 0;
+
+      // Iterate over all specified file groups.
+      this.files.forEach(function(f) {
+        // Concat specified files.
+        var src = f.src
+          .filter(function(filepath) {
+            // Warn on and remove invalid source files (if nonull was set).
+            if (!grunt.file.exists(filepath)) {
+              grunt.log.warn('Source file "' + filepath + '" not found.');
+              return false;
+            } else {
+              return true;
+            }
+          })
+          .reduce(function(sources, filepath) {
+            sources[filepath] = grunt.file.read(filepath);
+
+            return sources;
+          }, {});
+
+        // Minify file code.
+        var result = Terser.minify(src, options);
+
+        if (result.error) {
+          grunt.log.error(result.error);
+          return false;
+        }
+
+        if (result.warnings) {
+          grunt.log.warn(result.warnings.join('\n'));
+        }
+
+        // Write the destination file.
+        grunt.file.write(f.dest, result.code);
+
+        if (options.sourceMap) {
+          var mapFileName = options.sourceMap.filename
+            ? options.sourceMap.filename
+            : f.dest + '.map';
+          // Write the source map file.
+          grunt.file.write(mapFileName, result.map);
+        }
+
+        // Print a success message for individual files only if grunt is run with --verbose flag
+        grunt.verbose.writeln('File "' + f.dest + '" created.');
+
+        // Increment created files counter
+        createdFiles++;
+      });
+
+      if (createdFiles > 0) {
+        grunt.log.ok(
+          `${createdFiles} grunt.util.pluralize(createdFiles, 'file/files') created.`
+        );
+      }
+    }
+  );
+};
diff --git a/node_modules/grunt-terser/test/expected/custom_options b/node_modules/grunt-terser/test/expected/custom_options
new file mode 100644
index 0000000..e597128
--- /dev/null
+++ b/node_modules/grunt-terser/test/expected/custom_options
@@ -0,0 +1 @@
+Testing: 1 2 3 !!!
\ No newline at end of file
diff --git a/node_modules/grunt-terser/test/expected/default_options b/node_modules/grunt-terser/test/expected/default_options
new file mode 100644
index 0000000..5f8b72f
--- /dev/null
+++ b/node_modules/grunt-terser/test/expected/default_options
@@ -0,0 +1 @@
+Testing, 1 2 3.
\ No newline at end of file
diff --git a/node_modules/grunt-terser/test/fixtures/123 b/node_modules/grunt-terser/test/fixtures/123
new file mode 100644
index 0000000..703ca85
--- /dev/null
+++ b/node_modules/grunt-terser/test/fixtures/123
@@ -0,0 +1 @@
+1 2 3
\ No newline at end of file
diff --git a/node_modules/grunt-terser/test/fixtures/testing b/node_modules/grunt-terser/test/fixtures/testing
new file mode 100644
index 0000000..0a90125
--- /dev/null
+++ b/node_modules/grunt-terser/test/fixtures/testing
@@ -0,0 +1 @@
+Testing
\ No newline at end of file
diff --git a/node_modules/grunt-terser/test/terser_test.js b/node_modules/grunt-terser/test/terser_test.js
new file mode 100644
index 0000000..0ea3cca
--- /dev/null
+++ b/node_modules/grunt-terser/test/terser_test.js
@@ -0,0 +1,56 @@
+'use strict';
+
+var grunt = require('grunt');
+
+/*
+  ======== A Handy Little Nodeunit Reference ========
+  https://github.com/caolan/nodeunit
+
+  Test methods:
+    test.expect(numAssertions)
+    test.done()
+  Test assertions:
+    test.ok(value, [message])
+    test.equal(actual, expected, [message])
+    test.notEqual(actual, expected, [message])
+    test.deepEqual(actual, expected, [message])
+    test.notDeepEqual(actual, expected, [message])
+    test.strictEqual(actual, expected, [message])
+    test.notStrictEqual(actual, expected, [message])
+    test.throws(block, [error], [message])
+    test.doesNotThrow(block, [error], [message])
+    test.ifError(value)
+*/
+
+exports.terser = {
+  setUp: function(done) {
+    // setup here if necessary
+    done();
+  },
+  default_options: function(test) {
+    test.expect(1);
+
+    var actual = grunt.file.read('tmp/default_options');
+    var expected = grunt.file.read('test/expected/default_options');
+    test.equal(
+      actual,
+      expected,
+      'should describe what the default behavior is.'
+    );
+
+    test.done();
+  },
+  custom_options: function(test) {
+    test.expect(1);
+
+    var actual = grunt.file.read('tmp/custom_options');
+    var expected = grunt.file.read('test/expected/custom_options');
+    test.equal(
+      actual,
+      expected,
+      'should describe what the custom option(s) behavior is.'
+    );
+
+    test.done();
+  },
+};
