diff --git a/node_modules/json-buffer/.npmignore b/node_modules/json-buffer/.npmignore
new file mode 100644
index 0000000..13abef4
--- /dev/null
+++ b/node_modules/json-buffer/.npmignore
@@ -0,0 +1,3 @@
+node_modules
+node_modules/*
+npm_debug.log
diff --git a/node_modules/json-buffer/.travis.yml b/node_modules/json-buffer/.travis.yml
new file mode 100644
index 0000000..244b7e8
--- /dev/null
+++ b/node_modules/json-buffer/.travis.yml
@@ -0,0 +1,3 @@
+language: node_js
+node_js:
+  - '0.10'
diff --git a/node_modules/json-buffer/LICENSE b/node_modules/json-buffer/LICENSE
new file mode 100644
index 0000000..b799ec0
--- /dev/null
+++ b/node_modules/json-buffer/LICENSE
@@ -0,0 +1,22 @@
+Copyright (c) 2013 Dominic Tarr
+
+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/json-buffer/README.md b/node_modules/json-buffer/README.md
new file mode 100644
index 0000000..43857bb
--- /dev/null
+++ b/node_modules/json-buffer/README.md
@@ -0,0 +1,24 @@
+# json-buffer
+
+JSON functions that can convert buffers!
+
+[![build status](https://secure.travis-ci.org/dominictarr/json-buffer.png)](http://travis-ci.org/dominictarr/json-buffer)
+
+[![testling badge](https://ci.testling.com/dominictarr/json-buffer.png)](https://ci.testling.com/dominictarr/json-buffer)
+
+JSON mangles buffers by converting to an array...
+which isn't helpful. json-buffers converts to base64 instead,
+and deconverts base64 to a buffer.
+
+``` js
+var JSONB = require('json-buffer')
+var Buffer = require('buffer').Buffer
+
+var str = JSONB.stringify(new Buffer('hello there!'))
+
+console.log(JSONB.parse(str)) //GET a BUFFER back
+```
+
+## License
+
+MIT
diff --git a/node_modules/json-buffer/index.js b/node_modules/json-buffer/index.js
new file mode 100644
index 0000000..9cafed8
--- /dev/null
+++ b/node_modules/json-buffer/index.js
@@ -0,0 +1,58 @@
+//TODO: handle reviver/dehydrate function like normal
+//and handle indentation, like normal.
+//if anyone needs this... please send pull request.
+
+exports.stringify = function stringify (o) {
+  if('undefined' == typeof o) return o
+
+  if(o && Buffer.isBuffer(o))
+    return JSON.stringify(':base64:' + o.toString('base64'))
+
+  if(o && o.toJSON)
+    o =  o.toJSON()
+
+  if(o && 'object' === typeof o) {
+    var s = ''
+    var array = Array.isArray(o)
+    s = array ? '[' : '{'
+    var first = true
+
+    for(var k in o) {
+      var ignore = 'function' == typeof o[k] || (!array && 'undefined' === typeof o[k])
+      if(Object.hasOwnProperty.call(o, k) && !ignore) {
+        if(!first)
+          s += ','
+        first = false
+        if (array) {
+          if(o[k] == undefined)
+            s += 'null'
+          else
+            s += stringify(o[k])
+        } else if (o[k] !== void(0)) {
+          s += stringify(k) + ':' + stringify(o[k])
+        }
+      }
+    }
+
+    s += array ? ']' : '}'
+
+    return s
+  } else if ('string' === typeof o) {
+    return JSON.stringify(/^:/.test(o) ? ':' + o : o)
+  } else if ('undefined' === typeof o) {
+    return 'null';
+  } else
+    return JSON.stringify(o)
+}
+
+exports.parse = function (s) {
+  return JSON.parse(s, function (key, value) {
+    if('string' === typeof value) {
+      if(/^:base64:/.test(value))
+        return new Buffer(value.substring(8), 'base64')
+      else
+        return /^:/.test(value) ? value.substring(1) : value 
+    }
+    return value
+  })
+}
diff --git a/node_modules/json-buffer/package.json b/node_modules/json-buffer/package.json
new file mode 100644
index 0000000..5e81fc3
--- /dev/null
+++ b/node_modules/json-buffer/package.json
@@ -0,0 +1,66 @@
+{
+  "_from": "json-buffer@3.0.0",
+  "_id": "json-buffer@3.0.0",
+  "_inBundle": false,
+  "_integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=",
+  "_location": "/json-buffer",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "json-buffer@3.0.0",
+    "name": "json-buffer",
+    "escapedName": "json-buffer",
+    "rawSpec": "3.0.0",
+    "saveSpec": null,
+    "fetchSpec": "3.0.0"
+  },
+  "_requiredBy": [
+    "/keyv"
+  ],
+  "_resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz",
+  "_shasum": "5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898",
+  "_spec": "json-buffer@3.0.0",
+  "_where": "C:\\Users\\marcr\\Desktop\\KorAp\\Git\\Kalamar\\node_modules\\keyv",
+  "author": {
+    "name": "Dominic Tarr",
+    "email": "dominic.tarr@gmail.com",
+    "url": "http://dominictarr.com"
+  },
+  "bugs": {
+    "url": "https://github.com/dominictarr/json-buffer/issues"
+  },
+  "bundleDependencies": false,
+  "deprecated": false,
+  "description": "JSON parse & stringify that supports binary via bops & base64",
+  "devDependencies": {
+    "tape": "^4.6.3"
+  },
+  "homepage": "https://github.com/dominictarr/json-buffer",
+  "license": "MIT",
+  "name": "json-buffer",
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/dominictarr/json-buffer.git"
+  },
+  "scripts": {
+    "test": "set -e; for t in test/*.js; do node $t; done"
+  },
+  "testling": {
+    "files": "test/*.js",
+    "browsers": [
+      "ie/8..latest",
+      "firefox/17..latest",
+      "firefox/nightly",
+      "chrome/22..latest",
+      "chrome/canary",
+      "opera/12..latest",
+      "opera/next",
+      "safari/5.1..latest",
+      "ipad/6.0..latest",
+      "iphone/6.0..latest",
+      "android-browser/4.2..latest"
+    ]
+  },
+  "version": "3.0.0"
+}
diff --git a/node_modules/json-buffer/test/index.js b/node_modules/json-buffer/test/index.js
new file mode 100644
index 0000000..8351804
--- /dev/null
+++ b/node_modules/json-buffer/test/index.js
@@ -0,0 +1,63 @@
+
+var test = require('tape')
+var _JSON = require('../')
+
+function clone (o) {
+  return JSON.parse(JSON.stringify(o))
+}
+
+var examples = {
+  simple: { foo: [], bar: {}, baz: new Buffer('some binary data') },
+  just_buffer: new Buffer('JUST A BUFFER'),
+  all_types: {
+    string:'hello',
+    number: 3145,
+    null: null,
+    object: {},
+    array: [],
+    boolean: true,
+    boolean2: false
+  },
+  foo: new Buffer('foo'),
+  foo2: new Buffer('foo2'),
+  escape: {
+    buffer: new Buffer('x'),
+    string: _JSON.stringify(new Buffer('x'))
+  },
+  escape2: {
+    buffer: new Buffer('x'),
+    string: ':base64:'+ new Buffer('x').toString('base64')
+  },
+  undefined: {
+    empty: undefined, test: true
+  },
+  undefined2: {
+    first: 1, empty: undefined, test: true
+  },
+  undefinedArray: {
+    array: [undefined, 1, 'two']
+  },
+  fn: {
+    fn: function () {}    
+  },
+  undefined: undefined
+}
+
+for(k in examples)
+(function (value, k) { 
+  test(k, function (t) {
+    var s = _JSON.stringify(value)
+    console.log('parse', s)
+    if(JSON.stringify(value) !== undefined) {
+      console.log(s)
+      var _value = _JSON.parse(s)
+      t.deepEqual(clone(_value), clone(value))
+    }
+    else
+      t.equal(s, undefined)
+    t.end()
+  })
+})(examples[k], k)
+
+
+
